1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-24 20:36:40 +07:00
vault-frontend/src/components/editors/ImageEditor/index.tsx
2020-11-06 12:15:07 +07:00

42 lines
1.2 KiB
TypeScript

import React, { FC, useMemo, useCallback } from 'react';
import { connect } from 'react-redux';
import { INode, IFile } from '~/redux/types';
import * as UPLOAD_ACTIONS from '~/redux/uploads/actions';
import { selectUploads } from '~/redux/uploads/selectors';
import { ImageGrid } from '~/components/editors/ImageGrid';
import styles from './styles.module.scss';
const mapStateToProps = selectUploads;
const mapDispatchToProps = {
uploadUploadFiles: UPLOAD_ACTIONS.uploadUploadFiles,
};
type IProps = ReturnType<typeof mapStateToProps> &
typeof mapDispatchToProps & {
data: INode;
setData: (val: INode) => void;
temp: string[];
setTemp: (val: string[]) => void;
};
const ImageEditorUnconnected: FC<IProps> = ({ data, setData, temp, statuses }) => {
const pending_files = useMemo(() => temp.filter(id => !!statuses[id]).map(id => statuses[id]), [
temp,
statuses,
]);
const setFiles = useCallback((files: IFile[]) => setData({ ...data, files }), [data, setData]);
return (
<div className={styles.wrap}>
<ImageGrid files={data.files} setFiles={setFiles} locked={pending_files} />
</div>
);
};
const ImageEditor = connect(
mapStateToProps,
mapDispatchToProps
)(ImageEditorUnconnected);
export { ImageEditor };