1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00

fixed editor structure

This commit is contained in:
muerwre 2019-08-21 11:23:15 +07:00
parent c3b444dc9f
commit cad4e683bc
5 changed files with 41 additions and 37 deletions

View file

@ -17,16 +17,14 @@ type IProps = ReturnType<typeof mapStateToProps> &
pending_files: IUploadStatus[];
setData: (val: INode) => void;
onFileMove: (o: number, n: number) => void;
onFileMove: (from: number, to: number) => void;
onInputChange: ChangeEventHandler<HTMLInputElement>;
onDrop: DragEventHandler<HTMLFormElement>;
};
const ImageEditorUnconnected: FC<IProps> = ({
data,
onFileMove,
onInputChange,
onDrop,
pending_files,
}) => (
<ImageGrid
@ -34,7 +32,6 @@ const ImageEditorUnconnected: FC<IProps> = ({
items={data.files}
locked={pending_files}
onUpload={onInputChange}
onDrop={onDrop}
/>
);

View file

@ -1,5 +1,5 @@
import React, {
FC, useCallback, ChangeEventHandler, DragEventHandler
FC, useCallback, ChangeEventHandler, DragEventHandler,
} from 'react';
import { SortableContainer, SortableElement } from 'react-sortable-hoc';
import * as styles from './styles.scss';
@ -12,10 +12,9 @@ interface IProps {
locked: IUploadStatus[];
onFileMove: (o: number, n: number) => void;
onUpload?: ChangeEventHandler<HTMLInputElement>;
onDrop: DragEventHandler<HTMLFormElement>;
}
const SortableItem = SortableElement(({ children, }) => (
const SortableItem = SortableElement(({ children }) => (
<div className={styles.item}>{children}</div>
));
@ -23,14 +22,12 @@ const SortableList = SortableContainer(
({
items,
locked,
onDrop,
}: {
items: IFile[];
locked: IUploadStatus[];
onUpload: ChangeEventHandler<HTMLInputElement>;
onDrop: DragEventHandler<HTMLFormElement>;
items: IFile[];
locked: IUploadStatus[];
onUpload: ChangeEventHandler<HTMLInputElement>;
}) => (
<form className={styles.grid} onDrop={onDrop}>
<div className={styles.grid}>
{items.map((file, index) => (
<SortableItem key={file.id} index={index} collection={0}>
<ImageUpload id={file.id} thumb={file.url} />
@ -41,15 +38,15 @@ const SortableList = SortableContainer(
<ImageUpload thumb={item.preview} progress={item.progress} is_uploading />
</SortableItem>
))}
</form>
</div>
)
);
const ImageGrid: FC<IProps> = ({
items, locked, onFileMove, onUpload, onDrop,
items, locked, onFileMove, onUpload,
}) => {
const onMove = useCallback(({ oldIndex, newIndex, }) => onFileMove(oldIndex, newIndex), [
onFileMove
const onMove = useCallback(({ oldIndex, newIndex }) => onFileMove(oldIndex, newIndex), [
onFileMove,
]);
return (
@ -59,7 +56,6 @@ const ImageGrid: FC<IProps> = ({
items={items}
locked={locked}
onUpload={onUpload}
onDrop={onDrop}
pressDelay={window.innerWidth < 768 ? 200 : 0}
helperClass={styles.helper}
/>

View file

@ -1,5 +1,5 @@
import React, {
FC, useState, useCallback, useEffect,
FC, useState, useCallback, useEffect, FormEvent,
} from 'react';
import { connect } from 'react-redux';
import assocPath from 'ramda/es/assocPath';
@ -61,7 +61,7 @@ const EditorDialogUnconnected: FC<IProps> = ({
);
const onDrop = useCallback(
(event: React.DragEvent<HTMLFormElement>) => {
(event: React.DragEvent<HTMLDivElement>) => {
event.preventDefault();
if (!event.dataTransfer || !event.dataTransfer.files || !event.dataTransfer.files.length) return;
@ -118,8 +118,8 @@ const EditorDialogUnconnected: FC<IProps> = ({
};
}, [eventPreventer]);
useEffect(() => console.log({ temp }), [temp]);
useEffect(() => console.log({ data }), [data]);
// useEffect(() => console.log({ temp }), [temp]);
// useEffect(() => console.log({ data }), [data]);
useEffect(() => {
Object.entries(statuses).forEach(([id, status]) => {
@ -137,12 +137,17 @@ const EditorDialogUnconnected: FC<IProps> = ({
[setData, data]
);
const onSubmit = useCallback((event: FormEvent) => {
event.preventDefault();
console.log({ data });
}, [data]);
const buttons = (
<Padder style={{ position: 'relative' }}>
<EditorPanel data={data} setData={setData} onUpload={onInputChange} />
<Group horizontal>
<InputText title="Название" value={data.title} handler={setTitle} />
<InputText title="Название" value={data.title} handler={setTitle} autoFocus />
<Button title="Сохранить" iconRight="check" />
</Group>
@ -152,19 +157,20 @@ const EditorDialogUnconnected: FC<IProps> = ({
useCloseOnEscape(onRequestClose);
return (
<ScrollDialog buttons={buttons} width={860} onClose={onRequestClose}>
<div className={styles.editor}>
<ImageEditor
data={data}
setData={setData}
pending_files={temp.filter(id => !!statuses[id]).map(id => statuses[id])}
onUpload={onInputChange}
onFileMove={onFileMove}
onInputChange={onInputChange}
onDrop={onDrop}
/>
</div>
</ScrollDialog>
<form onSubmit={onSubmit} className={styles.form}>
<ScrollDialog buttons={buttons} width={860} onClose={onRequestClose}>
<div className={styles.editor} onDrop={onDrop}>
<ImageEditor
data={data}
pending_files={temp.filter(id => !!statuses[id]).map(id => statuses[id])}
setData={setData}
onUpload={onInputChange}
onFileMove={onFileMove}
onInputChange={onInputChange}
/>
</div>
</ScrollDialog>
</form>
);
};

View file

@ -5,4 +5,9 @@
align-items: center;
justify-content: center;
position: relative;
}
.form {
height: 100vh;
width: 100%;
}

View file

@ -16,7 +16,7 @@ const INITIAL_STATE: INodeState = {
editor: {
...EMPTY_NODE,
type: 'image',
blocks: [{ ...EMPTY_BLOCK, type: 'image' }],
blocks: [],
files: [],
},
is_loading: false,