saleor-dashboard/src/utils/handlers/dialogActionHandlers.ts
2023-01-16 10:45:12 +01:00

40 lines
996 B
TypeScript

import { UseNavigatorResult } from "@dashboard/hooks/useNavigator";
import { BulkAction, Dialog, SingleAction } from "@dashboard/types";
type Url<T extends Dialog<any>> = (params: T) => string;
type CreateCloseModal<
TAction extends string,
TParams extends Dialog<TAction>
> = [(action: TAction, newParams?: TParams) => void, () => void];
function createDialogActionHandlers<
TAction extends string,
TParams extends Dialog<TAction> & BulkAction & SingleAction
>(
navigate: UseNavigatorResult,
url: Url<TParams>,
params: TParams,
): CreateCloseModal<TAction, TParams> {
const close = () =>
navigate(
url({
...params,
action: undefined,
id: undefined,
ids: undefined,
}),
{ replace: true },
);
const open = (action: TAction, newParams?: TParams) =>
navigate(
url({
...params,
...newParams,
action,
}),
);
return [open, close];
}
export default createDialogActionHandlers;