import React, { createElement, FC, FormEvent, useCallback, useEffect, useMemo, useState, } from 'react'; import { connect } from 'react-redux'; import { IDialogProps } from '~/redux/modal/constants'; import { useCloseOnEscape } from '~/utils/hooks'; import { Group } from '~/components/containers/Group'; import { InputText } from '~/components/input/InputText'; import { Button } from '~/components/input/Button'; import { Padder } from '~/components/containers/Padder'; import styles from './styles.module.scss'; import { selectNode } from '~/redux/node/selectors'; import { EditorPanel } from '~/components/editors/EditorPanel'; import * as NODE_ACTIONS from '~/redux/node/actions'; import { selectUploads } from '~/redux/uploads/selectors'; import { ERROR_LITERAL } from '~/constants/errors'; import { EMPTY_NODE, NODE_EDITORS } from '~/redux/node/constants'; import { BetterScrollDialog } from '../BetterScrollDialog'; import { CoverBackdrop } from '~/components/containers/CoverBackdrop'; import { IEditorComponentProps } from '~/redux/node/types'; import { has, values } from 'ramda'; const mapStateToProps = state => { const { editor, errors } = selectNode(state); const { statuses, files } = selectUploads(state); return { editor, statuses, files, errors }; }; const mapDispatchToProps = { nodeSave: NODE_ACTIONS.nodeSave, nodeSetSaveErrors: NODE_ACTIONS.nodeSetSaveErrors, }; type IProps = IDialogProps & ReturnType & typeof mapDispatchToProps & { type: string; }; const EditorDialogUnconnected: FC = ({ editor, errors, nodeSave, nodeSetSaveErrors, onRequestClose, type, }) => { const [data, setData] = useState(EMPTY_NODE); const [temp, setTemp] = useState([]); useEffect(() => setData(editor), [editor]); const setTitle = useCallback( title => { setData({ ...data, title }); }, [setData, data] ); const onSubmit = useCallback( (event: FormEvent) => { event.preventDefault(); nodeSave(data); }, [data, nodeSave] ); useEffect(() => { if (!Object.prototype.hasOwnProperty.call(NODE_EDITORS, type) && onRequestClose) onRequestClose(); }, [type]); useEffect(() => { if (!Object.keys(errors).length) return; nodeSetSaveErrors({}); }, [data]); const buttons = (