mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-25 04:46:40 +07:00
#58 added exit confirmation
This commit is contained in:
parent
d5460cf61a
commit
3e8c2d4b6e
3 changed files with 37 additions and 34 deletions
|
@ -3,7 +3,6 @@ import { EMPTY_NODE, NODE_TYPES } from '~/redux/node/constants';
|
||||||
import { EditorDialog } from '~/containers/dialogs/EditorDialog';
|
import { EditorDialog } from '~/containers/dialogs/EditorDialog';
|
||||||
import { useHistory, useRouteMatch } from 'react-router';
|
import { useHistory, useRouteMatch } from 'react-router';
|
||||||
import { values } from 'ramda';
|
import { values } from 'ramda';
|
||||||
import { ModalWrapper } from '~/components/dialogs/ModalWrapper';
|
|
||||||
|
|
||||||
const EditorCreateDialog: FC = () => {
|
const EditorCreateDialog: FC = () => {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
@ -28,11 +27,7 @@ const EditorCreateDialog: FC = () => {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return <EditorDialog node={data.current} onRequestClose={goBack} />;
|
||||||
<ModalWrapper onOverlayClick={goBack}>
|
|
||||||
<EditorDialog node={data.current} onRequestClose={goBack} />
|
|
||||||
</ModalWrapper>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export { EditorCreateDialog };
|
export { EditorCreateDialog };
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React, { createElement, FC, useMemo } from 'react';
|
import React, { createElement, FC, useCallback, useMemo } from 'react';
|
||||||
import { IDialogProps } from '~/redux/modal/constants';
|
import { IDialogProps } from '~/redux/modal/constants';
|
||||||
import { useCloseOnEscape } from '~/utils/hooks';
|
|
||||||
import styles from './styles.module.scss';
|
import styles from './styles.module.scss';
|
||||||
import { NODE_EDITORS } from '~/redux/node/constants';
|
import { NODE_EDITORS } from '~/redux/node/constants';
|
||||||
import { BetterScrollDialog } from '../BetterScrollDialog';
|
import { BetterScrollDialog } from '../BetterScrollDialog';
|
||||||
|
@ -12,6 +11,7 @@ import { FileUploaderProvider, useFileUploader } from '~/utils/hooks/fileUploade
|
||||||
import { UPLOAD_SUBJECTS, UPLOAD_TARGETS } from '~/redux/uploads/constants';
|
import { UPLOAD_SUBJECTS, UPLOAD_TARGETS } from '~/redux/uploads/constants';
|
||||||
import { FormikProvider } from 'formik';
|
import { FormikProvider } from 'formik';
|
||||||
import { INode } from '~/redux/types';
|
import { INode } from '~/redux/types';
|
||||||
|
import { ModalWrapper } from '~/components/dialogs/ModalWrapper';
|
||||||
|
|
||||||
interface Props extends IDialogProps {
|
interface Props extends IDialogProps {
|
||||||
node: INode;
|
node: INode;
|
||||||
|
@ -20,32 +20,40 @@ interface Props extends IDialogProps {
|
||||||
const EditorDialog: FC<Props> = ({ node, onRequestClose }) => {
|
const EditorDialog: FC<Props> = ({ node, onRequestClose }) => {
|
||||||
const uploader = useFileUploader(UPLOAD_SUBJECTS.EDITOR, UPLOAD_TARGETS.NODES, []);
|
const uploader = useFileUploader(UPLOAD_SUBJECTS.EDITOR, UPLOAD_TARGETS.NODES, []);
|
||||||
const formik = useNodeFormFormik(node, uploader, onRequestClose);
|
const formik = useNodeFormFormik(node, uploader, onRequestClose);
|
||||||
const { values, handleSubmit } = formik;
|
const { values, handleSubmit, dirty } = formik;
|
||||||
|
|
||||||
useCloseOnEscape(onRequestClose);
|
|
||||||
|
|
||||||
const component = useMemo(() => node.type && prop(node.type, NODE_EDITORS), [node.type]);
|
const component = useMemo(() => node.type && prop(node.type, NODE_EDITORS), [node.type]);
|
||||||
|
|
||||||
|
const onClose = useCallback(() => {
|
||||||
|
if (!window.confirm('Точно выйти?')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
onRequestClose();
|
||||||
|
}, [onRequestClose, dirty]);
|
||||||
|
|
||||||
if (!component) {
|
if (!component) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<FileUploaderProvider value={uploader}>
|
<ModalWrapper onOverlayClick={onClose}>
|
||||||
<FormikProvider value={formik}>
|
<FileUploaderProvider value={uploader}>
|
||||||
<form onSubmit={handleSubmit} className={styles.form}>
|
<FormikProvider value={formik}>
|
||||||
<BetterScrollDialog
|
<form onSubmit={handleSubmit} className={styles.form}>
|
||||||
footer={<EditorButtons />}
|
<BetterScrollDialog
|
||||||
backdrop={<CoverBackdrop cover={values.cover} />}
|
footer={<EditorButtons />}
|
||||||
width={860}
|
backdrop={<CoverBackdrop cover={values.cover} />}
|
||||||
error=""
|
width={860}
|
||||||
onClose={onRequestClose}
|
error=""
|
||||||
>
|
onClose={onClose}
|
||||||
<div className={styles.editor}>{createElement(component)}</div>
|
>
|
||||||
</BetterScrollDialog>
|
<div className={styles.editor}>{createElement(component)}</div>
|
||||||
</form>
|
</BetterScrollDialog>
|
||||||
</FormikProvider>
|
</form>
|
||||||
</FileUploaderProvider>
|
</FormikProvider>
|
||||||
|
</FileUploaderProvider>
|
||||||
|
</ModalWrapper>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,17 +41,17 @@ const EditorEditDialog: FC = () => {
|
||||||
return () => cancel();
|
return () => cancel();
|
||||||
}, [id]);
|
}, [id]);
|
||||||
|
|
||||||
return (
|
if (isLoading) {
|
||||||
<ModalWrapper onOverlayClick={console.log}>
|
return (
|
||||||
{isLoading ? (
|
<ModalWrapper onOverlayClick={goBack}>
|
||||||
<div className={styles.loader}>
|
<div className={styles.loader}>
|
||||||
<LoaderCircle size={64} />
|
<LoaderCircle size={64} />
|
||||||
</div>
|
</div>
|
||||||
) : (
|
</ModalWrapper>
|
||||||
<EditorDialog node={data} onRequestClose={goBack} />
|
);
|
||||||
)}
|
}
|
||||||
</ModalWrapper>
|
|
||||||
);
|
return <EditorDialog node={data} onRequestClose={goBack} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
export { EditorEditDialog };
|
export { EditorEditDialog };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue