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:
parent
c3b444dc9f
commit
cad4e683bc
5 changed files with 41 additions and 37 deletions
|
@ -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}
|
||||
/>
|
||||
);
|
||||
|
||||
|
|
|
@ -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}
|
||||
/>
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
@ -5,4 +5,9 @@
|
|||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.form {
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
}
|
|
@ -16,7 +16,7 @@ const INITIAL_STATE: INodeState = {
|
|||
editor: {
|
||||
...EMPTY_NODE,
|
||||
type: 'image',
|
||||
blocks: [{ ...EMPTY_BLOCK, type: 'image' }],
|
||||
blocks: [],
|
||||
files: [],
|
||||
},
|
||||
is_loading: false,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue