diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx index a751acae..1e2ce5fe 100644 --- a/src/components/editors/ImageEditor/index.tsx +++ b/src/components/editors/ImageEditor/index.tsx @@ -1,4 +1,4 @@ -import React, { FC } from 'react'; +import React, {FC, useCallback, useEffect} from 'react'; import { INode } from '~/redux/types'; import * as styles from './styles.scss'; @@ -8,10 +8,26 @@ interface IProps { }; const ImageEditor: FC = ({ -}) => ( -
-
-
- ) + data, + setData, +}) => { + const eventPreventer = useCallback(event => event.preventDefault(), []); -export { ImageEditor }; \ No newline at end of file + useEffect(() => { + window.addEventListener("dragover", eventPreventer,false); + window.addEventListener("drop",eventPreventer,false); + + return () => { + window.removeEventListener("dragover", eventPreventer,false); + window.removeEventListener("drop",eventPreventer,false); + } + }, [eventPreventer]); + + return ( +
{ console.log(e.dataTransfer.files);}}> +
{data.type}
+
+ ); +}; + +export { ImageEditor }; diff --git a/src/components/editors/ImageEditor/styles.scss b/src/components/editors/ImageEditor/styles.scss index bb46f36c..79d3ce9a 100644 --- a/src/components/editors/ImageEditor/styles.scss +++ b/src/components/editors/ImageEditor/styles.scss @@ -11,4 +11,4 @@ @media (max-width: 600px) { grid-template-columns: repeat(auto-fill, minmax(30vw, 1fr)); } -} \ No newline at end of file +} diff --git a/src/containers/dialogs/EditorDialog/index.tsx b/src/containers/dialogs/EditorDialog/index.tsx index 21d66e61..3725fee7 100644 --- a/src/containers/dialogs/EditorDialog/index.tsx +++ b/src/containers/dialogs/EditorDialog/index.tsx @@ -4,7 +4,7 @@ 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/index'; +import { Button } from '~/components/input/Button'; import { Padder } from '~/components/containers/Padder'; import * as styles from './styles.scss'; import { connect } from 'react-redux'; diff --git a/src/redux/modal/reducer.ts b/src/redux/modal/reducer.ts index f6b830c1..274bba6b 100644 --- a/src/redux/modal/reducer.ts +++ b/src/redux/modal/reducer.ts @@ -10,7 +10,7 @@ export interface IModalState { const INITIAL_STATE: IModalState = { is_shown: true, - dialog: DIALOGS.LOGIN, + dialog: DIALOGS.EDITOR, }; export default createReducer(INITIAL_STATE, MODAL_HANDLERS); diff --git a/src/redux/node/constants.ts b/src/redux/node/constants.ts index b2f9a8c0..345fd4a8 100644 --- a/src/redux/node/constants.ts +++ b/src/redux/node/constants.ts @@ -1,4 +1,10 @@ -import { INode } from "../types"; +import {IBlock, INode} from "../types"; + +export const EMPTY_BLOCK: IBlock = { + type: null, + temp_ids: [], + attaches: [], +}; export const EMPTY_NODE: INode = { id: null, @@ -11,10 +17,12 @@ export const EMPTY_NODE: INode = { cover: null, type: null, + blocks: [], + options: { flow: { display: 'single', show_description: false, } }, -} \ No newline at end of file +} diff --git a/src/redux/node/reducer.ts b/src/redux/node/reducer.ts index 75683fd2..239e4e95 100644 --- a/src/redux/node/reducer.ts +++ b/src/redux/node/reducer.ts @@ -1,6 +1,6 @@ import { createReducer } from "~/utils/reducer"; import { INode } from "../types"; -import { EMPTY_NODE } from "./constants"; +import {EMPTY_BLOCK, EMPTY_NODE} from "./constants"; import { NODE_HANDLERS } from "./handlers"; export type INodeState = Readonly<{ @@ -13,10 +13,14 @@ export type INodeState = Readonly<{ const INITIAL_STATE: INodeState = { editor: { ...EMPTY_NODE, + type: 'image', + blocks: [ + { ...EMPTY_BLOCK, type: 'image' }, + ] }, is_loading: false, error: null, errors: {}, }; -export default createReducer(INITIAL_STATE, NODE_HANDLERS); \ No newline at end of file +export default createReducer(INITIAL_STATE, NODE_HANDLERS); diff --git a/src/redux/types.ts b/src/redux/types.ts index 6c38c96c..355a9de9 100644 --- a/src/redux/types.ts +++ b/src/redux/types.ts @@ -64,6 +64,12 @@ export interface IFile { updatedAt?: string; } +export interface IBlock { + type: 'image' | 'text' | 'media' | 'youtube' | 'video', + temp_ids: UUID[]; + attaches: UUID[]; +} + export interface INode { id?: UUID; user_id: UUID; @@ -74,6 +80,8 @@ export interface INode { cover: IFile['id']; type: 'image'; + blocks: IBlock[]; + brief?: { thumbnail?: string; description?: string; @@ -90,4 +98,4 @@ export interface INode { createdAt?: string; updatedAt?: string; -} \ No newline at end of file +}