fix: enhance typing

This commit is contained in:
yassinedorbozgithub 2025-01-27 08:45:12 +01:00
parent db8d41166b
commit 84b766d7c0

View File

@ -16,25 +16,25 @@ type TCloseDialog = <E extends React.MouseEvent | Event | Object>(
) => void; ) => void;
type TFnVoid<T> = (data?: T) => void; type TFnVoid<T> = (data?: T) => void;
type TStatesMode = "datumOrData" | "datumAndData"; type TStatesMode = "datumOrData" | "datumAndData";
export type DialogControl<T = never> = Omit<DialogProps, "onError"> & { export type DialogControl<T = never, S = T> = Omit<DialogProps, "onError"> & {
data?: T[]; data?: S[];
datum?: T; datum?: T;
reset?: () => void; reset?: () => void;
setData?: TFnVoid<T[]>; setData?: TFnVoid<S[]>;
setDatum?: TFnVoid<T>; setDatum?: TFnVoid<T>;
callback?: (data?: T | T[]) => Promise<void>; callback?: (data?: T | S[]) => Promise<void>;
openDialog: TFnVoid<T | T[]>; openDialog: TFnVoid<T | S[]>;
closeDialog: TCloseDialog; closeDialog: TCloseDialog;
}; };
export const useDialog = <T,>( export const useDialog = <T, S = T>(
initialState: boolean, initialState: boolean,
statesMode: TStatesMode = "datumOrData", statesMode: TStatesMode = "datumOrData",
): DialogControl<T> => { ): DialogControl<T, S> => {
const [open, setOpen] = useState(initialState); const [open, setOpen] = useState(initialState);
const [data, setData] = useState<T[] | undefined>(); const [data, setData] = useState<S[] | undefined>();
const [datum, setDatum] = useState<T | undefined>(); const [datum, setDatum] = useState<T | undefined>();
const openDialog: TFnVoid<T | T[]> = (value) => { const openDialog: TFnVoid<T | S[]> = (value) => {
if (statesMode === "datumOrData") { if (statesMode === "datumOrData") {
if (value) { if (value) {
setData(Array.isArray(value) ? value : undefined); setData(Array.isArray(value) ? value : undefined);