saleor-dashboard/src/utils/handlers/dialogActionHandlers.ts

41 lines
990 B
TypeScript
Raw Normal View History

2019-12-06 14:58:28 +00:00
import { UseNavigatorResult } from "@saleor/hooks/useNavigator";
import { BulkAction, Dialog, SingleAction } from "@saleor/types";
2019-12-06 14:58:28 +00:00
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,
2019-12-06 14:58:28 +00:00
): CreateCloseModal<TAction, TParams> {
const close = () =>
navigate(
url({
...params,
action: undefined,
id: undefined,
ids: undefined,
2019-12-06 14:58:28 +00:00
}),
{ replace: true },
2019-12-06 14:58:28 +00:00
);
const open = (action: TAction, newParams?: TParams) =>
navigate(
url({
...params,
...newParams,
action,
}),
2019-12-06 14:58:28 +00:00
);
return [open, close];
}
export default createDialogActionHandlers;