Skip to content

Commit 14915d6

Browse files
committed
Nicer frontend type safety with the bulk action and mode
1 parent 885e2bf commit 14915d6

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.bulkaction.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ export function CreateBulkActionInspector({
205205
const fetcher = useTypedFetcher<typeof loader>();
206206
const { value, replace } = useSearchParams();
207207
const [action, setAction] = useState<BulkActionAction>(
208-
(value("action") ?? "replay") as BulkActionAction
208+
bulkActionActionFromString(value("action"))
209209
);
210210
const location = useOptimisticLocation();
211211
const user = useUser();
@@ -217,10 +217,10 @@ export function CreateBulkActionInspector({
217217
}, [organization.id, project.id, environment.id, location.search]);
218218

219219
useEffect(() => {
220-
setAction((value("action") ?? "replay") as BulkActionAction);
220+
setAction(bulkActionActionFromString(value("action")));
221221
}, [value("action")]);
222222

223-
const mode = value("mode") ?? "filter";
223+
const mode = bulkActionModeFromString(value("mode"));
224224

225225
const data = fetcher.data != null ? fetcher.data : undefined;
226226

@@ -367,8 +367,8 @@ export function CreateBulkActionInspector({
367367
<Label>Preview</Label>
368368
<BulkActionFilterSummary
369369
selected={mode === "selected" ? selectedItems.size : data?.count}
370-
mode={mode as BulkActionMode}
371-
action={action as BulkActionAction}
370+
mode={mode}
371+
action={action}
372372
filters={filters}
373373
/>
374374
</InputGroup>
@@ -404,8 +404,8 @@ export function CreateBulkActionInspector({
404404
<div className="flex flex-col gap-3 divide-y divide-grid-dimmed pt-2">
405405
<BulkActionFilterSummary
406406
selected={mode === "selected" ? selectedItems.size : data?.count}
407-
mode={mode as BulkActionMode}
408-
action={action as BulkActionAction}
407+
mode={mode}
408+
action={action}
409409
filters={filters}
410410
/>
411411
<Paragraph variant="small" className="pt-3">
@@ -457,3 +457,17 @@ export function CreateBulkActionInspector({
457457
</Form>
458458
);
459459
}
460+
461+
function bulkActionModeFromString(value: string | undefined): BulkActionMode {
462+
if (!value) return "filter";
463+
const parsed = BulkActionMode.safeParse(value);
464+
if (!parsed.success) return "filter";
465+
return parsed.data;
466+
}
467+
468+
function bulkActionActionFromString(value: string | undefined): BulkActionAction {
469+
if (!value) return "replay";
470+
const parsed = BulkActionAction.safeParse(value);
471+
if (!parsed.success) return "replay";
472+
return parsed.data;
473+
}

0 commit comments

Comments
 (0)