40 lines
996 B
TypeScript
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;
|