From 75fb88b20993625f05dd0ee84205a8b3c2c85292 Mon Sep 17 00:00:00 2001 From: muerwre Date: Thu, 8 Aug 2019 14:01:18 +0700 Subject: [PATCH] uploading --- package-lock.json | 13 +++++++++++++ package.json | 1 + src/components/editors/ImageEditor/index.tsx | 13 +++++++++---- src/redux/types.ts | 1 + src/redux/uploads/constants.ts | 7 ++++--- src/redux/uploads/reducer.ts | 3 +-- 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index ddf78a8e..004a59d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2678,6 +2678,14 @@ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", "dev": true }, + "@types/ramda": { + "version": "0.26.19", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.26.19.tgz", + "integrity": "sha512-lJuMZDXqZ8W2hl0Gz+wEPUhXcf/tZRuaO5vrxFD3Dv2XMqgTZVw+bvfS6iQAsio9XQV+uhkggtT4eLhDmUpI5g==", + "requires": { + "ts-toolbelt": "^3.2.22" + } + }, "@types/react": { "version": "16.8.23", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.23.tgz", @@ -16651,6 +16659,11 @@ } } }, + "ts-toolbelt": { + "version": "3.2.24", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-3.2.24.tgz", + "integrity": "sha512-bBzpseWAp/db3JFbneBA0aG7xxC4iRLzeqyKKr0ee1l0XHNcTi7LtypmENWnPkqPOiUcm061mlcC+S1SgfYkkw==" + }, "tsconfig-paths": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz", diff --git a/package.json b/package.json index dc130512..f748434c 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "@hot-loader/react-dom": "^16.8.1", "@types/classnames": "^2.2.7", "@types/node": "^11.9.0", + "@types/ramda": "^0.26.19", "@types/react": "16.8.23", "@typescript-eslint/eslint-plugin": "^1.13.0", "@typescript-eslint/parser": "^1.13.0", diff --git a/src/components/editors/ImageEditor/index.tsx b/src/components/editors/ImageEditor/index.tsx index 98f02c92..9265fcd7 100644 --- a/src/components/editors/ImageEditor/index.tsx +++ b/src/components/editors/ImageEditor/index.tsx @@ -1,10 +1,12 @@ import React, { FC, useCallback, useEffect, useState } from 'react'; import uuid from 'uuid4'; -import { INode, IFileWithUUID } from '~/redux/types'; +import { INode, IFileWithUUID, IFile } from '~/redux/types'; import * as styles from './styles.scss'; import * as UPLOAD_ACTIONS from '~/redux/uploads/actions'; import { connect } from 'react-redux'; -import { selectUploadStatuses, selectUploads } from '~/redux/uploads/selectors'; +import { selectUploads } from '~/redux/uploads/selectors'; +import assocPath from 'ramda/es/assocPath'; +import append from 'ramda/es/append'; const mapStateToProps = selectUploads; const mapDispatchToProps = { @@ -20,6 +22,10 @@ const ImageEditorUnconnected: FC = ({ data, setData, uploadUploadFiles, const eventPreventer = useCallback(event => event.preventDefault(), []); const [temp, setTemp] = useState([]); + const onFileAdd = useCallback((file: IFile) => { + setData(assocPath(['files'], append(file, data.files), data)); + }, [data, setData]); + const onDrop = useCallback( (event: React.DragEvent) => { event.preventDefault(); @@ -86,8 +92,7 @@ const ImageEditorUnconnected: FC = ({ data, setData, uploadUploadFiles, if (temp.includes(id) && !!status.uuid && files[status.uuid]) { console.log(`${id} uploaded`); - // do setData to append this file - setData({ ...data, files: [...data.files, files[status.uuid]] }); + onFileAdd(files[status.uuid]); setTemp(temp.filter(el => el !== id)); } }); diff --git a/src/redux/types.ts b/src/redux/types.ts index d5a98490..4f8e250c 100644 --- a/src/redux/types.ts +++ b/src/redux/types.ts @@ -55,6 +55,7 @@ export interface IFile { name: string; path: string; full_path: string; + url: string; size: number; type: 'image' | 'text' | 'audio' | 'video'; diff --git a/src/redux/uploads/constants.ts b/src/redux/uploads/constants.ts index efdc4485..c302893b 100644 --- a/src/redux/uploads/constants.ts +++ b/src/redux/uploads/constants.ts @@ -19,9 +19,10 @@ export const EMPTY_FILE: IFile = { user_id: null, node_id: null, - name: 'somefile.jpg', - path: '/covers/', - full_path: '/covers/somefile.jpg', + name: 'mario-collage-800x450.jpg', + path: '/wp-content/uploads/2017/09/', + full_path: '/wp-content/uploads/2017/09/mario-collage-800x450.jpg', + url: 'https://cdn.arstechnica.net/wp-content/uploads/2017/09/mario-collage-800x450.jpg', size: 2400000, type: 'image', mime: 'image/jpeg', diff --git a/src/redux/uploads/reducer.ts b/src/redux/uploads/reducer.ts index 674a3ce3..9c9d410a 100644 --- a/src/redux/uploads/reducer.ts +++ b/src/redux/uploads/reducer.ts @@ -1,6 +1,5 @@ import { createReducer } from "~/utils/reducer"; -import { IFile } from "~/redux/types"; -import { UUID } from "../types"; +import { IFile, UUID } from "~/redux/types"; import { UPLOAD_HANDLERS } from "./handlers"; export interface IUploadStatus {