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

fixed file dropping and panel buttons

This commit is contained in:
Fedor Katurov 2019-10-21 13:27:28 +07:00
parent 554a2ccfa7
commit 2ca9e9bdef
6 changed files with 41 additions and 14 deletions

View file

@ -0,0 +1,23 @@
import React, { FC } from 'react';
import { EditorUploadButton } from '~/components/editors/EditorUploadButton';
import { INode } from '~/redux/types';
interface IProps {
data: INode;
setData: (val: INode) => void;
temp: string[];
setTemp: (val: string[]) => void;
}
const EditorImageUploadButton: FC<IProps> = ({ data, setData, temp, setTemp }) => (
<EditorUploadButton
data={data}
setData={setData}
temp={temp}
setTemp={setTemp}
accept="image/*"
icon="image"
/>
);
export { EditorImageUploadButton };

View file

@ -1,8 +1,7 @@
import React, { FC } from 'react'; import React, { FC, createElement } from 'react';
import * as styles from './styles.scss'; import * as styles from './styles.scss';
import { INode } from '~/redux/types'; import { INode } from '~/redux/types';
import { EditorUploadButton } from '~/components/editors/EditorUploadButton'; import { NODE_PANEL_COMPONENTS } from '~/redux/node/constants';
import { NODE_UPLOAD_TYPES } from '~/redux/node/constants';
interface IProps { interface IProps {
data: INode; data: INode;
@ -13,9 +12,10 @@ interface IProps {
const EditorPanel: FC<IProps> = ({ data, setData, temp, setTemp }) => ( const EditorPanel: FC<IProps> = ({ data, setData, temp, setTemp }) => (
<div className={styles.panel}> <div className={styles.panel}>
{data.type && NODE_UPLOAD_TYPES[data.type] && ( {NODE_PANEL_COMPONENTS[data.type] &&
<EditorUploadButton data={data} setData={setData} temp={temp} setTemp={setTemp} /> NODE_PANEL_COMPONENTS[data.type].map((el, key) =>
)} createElement(el, { key, data, setData, temp, setTemp })
)}
</div> </div>
); );

View file

@ -27,6 +27,9 @@ type IProps = ReturnType<typeof mapStateToProps> &
setData: (val: INode) => void; setData: (val: INode) => void;
temp: string[]; temp: string[];
setTemp: (val: string[]) => void; setTemp: (val: string[]) => void;
accept?: string;
icon?: string;
}; };
const EditorUploadButtonUnconnected: FC<IProps> = ({ const EditorUploadButtonUnconnected: FC<IProps> = ({
@ -37,6 +40,8 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
statuses, statuses,
files, files,
uploadUploadFiles, uploadUploadFiles,
accept = 'image/*',
icon = 'plus',
}) => { }) => {
const eventPreventer = useCallback(event => event.preventDefault(), []); const eventPreventer = useCallback(event => event.preventDefault(), []);
@ -116,10 +121,10 @@ const EditorUploadButtonUnconnected: FC<IProps> = ({
return ( return (
<div className={styles.wrap}> <div className={styles.wrap}>
<input type="file" onChange={onInputChange} accept="image/*" multiple /> <input type="file" onChange={onInputChange} accept={accept} multiple />
<div className={styles.icon}> <div className={styles.icon}>
<Icon size={32} icon="plus" /> <Icon size={32} icon={icon} />
</div> </div>
</div> </div>
); );

View file

@ -17,14 +17,14 @@ interface IProps {
const ImageGrid: FC<IProps> = ({ files, setFiles, locked }) => { const ImageGrid: FC<IProps> = ({ files, setFiles, locked }) => {
const onMove = useCallback( const onMove = useCallback(
({ oldIndex, newIndex }: SortEnd) => { ({ oldIndex, newIndex }: SortEnd) => {
setFiles(moveArrItem(oldIndex, newIndex, files) as IFile[]); setFiles(moveArrItem(oldIndex, newIndex, files.filter(file => !!file)) as IFile[]);
}, },
[setFiles, files] [setFiles, files]
); );
const onDrop = useCallback( const onDrop = useCallback(
(remove_id: IFile['id']) => { (remove_id: IFile['id']) => {
setFiles(files.filter(file => file.id === remove_id)); setFiles(files.filter(file => file && file.id !== remove_id));
}, },
[setFiles, files] [setFiles, files]
); );

View file

@ -29,8 +29,6 @@ const ModalUnconnected: FC<IProps> = ({
if (!dialog || !DIALOG_CONTENT[dialog] || !is_shown) return null; if (!dialog || !DIALOG_CONTENT[dialog] || !is_shown) return null;
console.log({ onRequestClose });
return ReactDOM.createPortal( return ReactDOM.createPortal(
<div className={styles.fixed}> <div className={styles.fixed}>
<div className={styles.overlay} onClick={onRequestClose} /> <div className={styles.overlay} onClick={onRequestClose} />

View file

@ -7,6 +7,7 @@ import { ImageEditor } from '~/components/editors/ImageEditor';
import { TextEditor } from '~/components/editors/TextEditor'; import { TextEditor } from '~/components/editors/TextEditor';
import { VideoEditor } from '~/components/editors/VideoEditor'; import { VideoEditor } from '~/components/editors/VideoEditor';
import { UPLOAD_TYPES } from '../uploads/constants'; import { UPLOAD_TYPES } from '../uploads/constants';
import { EditorImageUploadButton } from '~/components/editors/EditorImageUploadButton';
const prefix = 'NODE.'; const prefix = 'NODE.';
export const NODE_ACTIONS = { export const NODE_ACTIONS = {
@ -89,8 +90,8 @@ export const NODE_EDITORS = {
[NODE_TYPES.VIDEO]: VideoEditor, [NODE_TYPES.VIDEO]: VideoEditor,
}; };
export const NODE_UPLOAD_TYPES = { export const NODE_PANEL_COMPONENTS = {
[NODE_TYPES.IMAGE]: [UPLOAD_TYPES.IMAGE], [NODE_TYPES.IMAGE]: [EditorImageUploadButton],
}; };
export const NODE_EDITOR_DATA: Record< export const NODE_EDITOR_DATA: Record<