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