Skip to content

Commit f4d52b2

Browse files
fix(schedule-actions): type selectedAction as config union
Replace ScheduleAction<any, any, any> state with SelectableScheduleAction derived from schedule-actions.config. ErasedScheduleAction cast at the generic modal boundary only. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 2dd7dbf commit f4d52b2

4 files changed

Lines changed: 15 additions & 6 deletions

File tree

src/views/schedule-actions/config/schedule-actions.config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ const resumeScheduleActionConfig: ScheduleAction<UnpauseScheduleResponse> = {
6161
const scheduleActionsConfig = [
6262
pauseScheduleActionConfig,
6363
resumeScheduleActionConfig,
64-
] as const satisfies ScheduleAction<any, any, any>[];
64+
] as const;
65+
66+
/** Discriminated union of configured actions; use at menu/selection boundaries. */
67+
export type SelectableScheduleAction = (typeof scheduleActionsConfig)[number];
6568

6669
export default scheduleActionsConfig;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { type ScheduleActionsEnabledConfig } from '@/config/dynamic/resolvers/schedule-actions-enabled.types';
22
import { type DescribeScheduleResponse } from '@/route-handlers/describe-schedule/describe-schedule.types';
33

4-
import { type ScheduleAction } from '../schedule-actions.types';
4+
import { type SelectableScheduleAction } from '../config/schedule-actions.config';
55

66
export type Props = {
77
schedule: DescribeScheduleResponse | undefined;
88
actionsEnabledConfig?: ScheduleActionsEnabledConfig;
9-
onActionSelect: (action: ScheduleAction<any, any, any>) => void;
9+
onActionSelect: (action: SelectableScheduleAction) => void;
1010
};

src/views/schedule-actions/schedule-actions.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ import useDescribeSchedule from '@/views/shared/hooks/use-describe-schedule/use-
1616
import ScheduleActionsMenu from './schedule-actions-menu/schedule-actions-menu';
1717
import ScheduleActionsModal from './schedule-actions-modal/schedule-actions-modal';
1818
import { overrides } from './schedule-actions.styles';
19-
import { type ScheduleAction } from './schedule-actions.types';
19+
import { type SelectableScheduleAction } from './config/schedule-actions.config';
20+
import {
21+
type ErasedScheduleAction,
22+
} from './schedule-actions.types';
2023

2124
export default function ScheduleActions() {
2225
const params = useParams<SchedulePageLayoutParams>();
@@ -31,7 +34,7 @@ export default function ScheduleActions() {
3134
});
3235

3336
const [selectedAction, setSelectedAction] = useState<
34-
ScheduleAction<any, any, any> | undefined
37+
SelectableScheduleAction | undefined
3538
>(undefined);
3639

3740
if (scheduleError) {
@@ -68,7 +71,7 @@ export default function ScheduleActions() {
6871
<ScheduleActionsModal
6972
{...scheduleDetailsParams}
7073
schedule={schedule}
71-
action={selectedAction}
74+
action={selectedAction as ErasedScheduleAction | undefined}
7275
onClose={() => setSelectedAction(undefined)}
7376
/>
7477
</>

src/views/schedule-actions/schedule-actions.types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,6 @@ export type ScheduleAction<
112112
router: AppRouterInstance;
113113
}) => void;
114114
};
115+
116+
/** Erases per-action generics for the generic modal boundary. */
117+
export type ErasedScheduleAction = ScheduleAction<any, any, any>;

0 commit comments

Comments
 (0)