easy-dialogs
Version:
Function based dialogs manager for React
31 lines • 1.23 kB
TypeScript
import React from 'react';
type DialogElementType = {
id: string;
component: React.ComponentType<any>;
props?: any;
useExitAnimation?: boolean;
};
type InferDialogIdType<Dialogs> = Dialogs extends readonly {
id: infer Id;
}[] ? Id : never;
type InferDialogType<Dialogs> = Dialogs extends readonly (infer D)[] ? D : never;
type InferDialogProps<Dialogs, TId> = Extract<InferDialogType<Dialogs>, {
id: TId;
}> extends {
component: React.ComponentType<infer P>;
} ? P extends {
additionalProps?: infer A;
} ? A extends undefined ? Record<string, never> : A : Record<string, never> : never;
type InferDialogOnCloseReturnType<Dialogs, TId> = Extract<InferDialogType<Dialogs>, {
id: TId;
}> extends {
component: React.ComponentType<infer P>;
} ? P extends {
onClose?: (result: infer R) => void;
} ? R : void : void;
export declare const useDialogManager: <Dialogs extends readonly DialogElementType[]>(dialogDefinitions: Dialogs) => {
callDialog: <T extends InferDialogIdType<Dialogs>>(id: T, additionalProps?: InferDialogProps<Dialogs, T>) => Promise<InferDialogOnCloseReturnType<Dialogs, T>>;
closeAllDialogs: () => void;
};
export {};
//# sourceMappingURL=useDialogManager.d.ts.map