1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 12:26:40 +07:00
vault-frontend/src/containers/dialogs/EditorCreateDialog/index.tsx
2025-01-24 17:51:59 +07:00

50 lines
1.2 KiB
TypeScript

import { FC, useCallback, useMemo, useRef } from 'react';
import { EMPTY_NODE, NODE_TYPES } from '~/constants/node';
import { EditorDialog } from '~/containers/dialogs/EditorDialog';
import { useCreateNode } from '~/hooks/node/useCreateNode';
import { INode } from '~/types';
import { DialogComponentProps } from '~/types/modal';
import { values } from '~/utils/ramda';
export interface EditorCreateDialogProps extends DialogComponentProps {
type: (typeof NODE_TYPES)[keyof typeof NODE_TYPES];
isInLab: boolean;
}
const EditorCreateDialog: FC<EditorCreateDialogProps> = ({
type,
isInLab,
onRequestClose,
}) => {
const isExist = useMemo(
() => values(NODE_TYPES).some((el) => el === type),
[type],
);
const data = useRef({ ...EMPTY_NODE, type, is_promoted: !isInLab });
const createNode = useCreateNode();
const onSubmit = useCallback(
async (node: INode) => {
await createNode(node);
onRequestClose();
},
[onRequestClose, createNode],
);
if (!type || !isExist) {
return null;
}
return (
<EditorDialog
node={data.current}
onRequestClose={onRequestClose}
onSubmit={onSubmit}
/>
);
};
export { EditorCreateDialog };