From 04f28c2a719ac791c0db4dc7f53fd4ec7bebc573 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Fri, 20 Mar 2020 14:59:07 +0300 Subject: [PATCH 1/4] Web: Files: replaced rootFolders to treeFolders --- .../components/Article/Body/TreeFolders.js | 22 +--------- .../src/components/Article/Body/index.js | 15 ++++--- .../components/Article/MainButton/index.js | 5 ++- .../pages/Home/Section/Body/index.js | 8 ++-- .../pages/Home/Section/Header/index.js | 5 ++- products/ASC.Files/Client/src/index.js | 4 +- .../Client/src/store/files/actions.js | 40 ++++--------------- .../Client/src/store/files/reducers.js | 8 ++-- .../Client/src/store/files/selectors.js | 16 -------- web/ASC.Web.Common/src/api/files/index.js | 18 ++++----- 10 files changed, 42 insertions(+), 99 deletions(-) diff --git a/products/ASC.Files/Client/src/components/Article/Body/TreeFolders.js b/products/ASC.Files/Client/src/components/Article/Body/TreeFolders.js index f082e1f810..af58cd36d3 100644 --- a/products/ASC.Files/Client/src/components/Article/Body/TreeFolders.js +++ b/products/ASC.Files/Client/src/components/Article/Body/TreeFolders.js @@ -80,9 +80,7 @@ class TreeFolders extends React.Component { const itemId = item.id.toString(); if (curId.indexOf(itemId) >= 0) { const listIds = curId; - const treeItem = listIds.find( - x => x.toString() === itemId - ); + const treeItem = listIds.find(x => x.toString() === itemId); if (treeItem === undefined) { listIds.push(itemId); } @@ -163,23 +161,7 @@ class TreeFolders extends React.Component { const treeData = [...this.state.treeData]; this.getNewTreeData(treeData, listIds, data.folders, 10); - - const root = { - my: null, - share: null, - common: null, - project: null, - trash: null - }; - root.my = treeData[0]; - root.share = treeData[1]; - root.common = treeData[2]; - root.project = treeData[3]; - root.trash = treeData[4]; - root.trash.folders = null; - root.trash.foldersCount = null; - - this.props.setRootFolders(root); + this.props.setTreeFolders(treeData); this.setState({ treeData }); }) .catch(() => this.props.onLoading(false)) diff --git a/products/ASC.Files/Client/src/components/Article/Body/index.js b/products/ASC.Files/Client/src/components/Article/Body/index.js index 51f5b2ff0a..cb155195cd 100644 --- a/products/ASC.Files/Client/src/components/Article/Body/index.js +++ b/products/ASC.Files/Client/src/components/Article/Body/index.js @@ -1,12 +1,11 @@ import React from "react"; import { connect } from "react-redux"; -import { utils, toastr } from "asc-web-components"; -import { getRootFolders } from "../../../store/files/selectors"; +import { toastr } from "asc-web-components"; import TreeFolders from "./TreeFolders"; import { setFilter, fetchFiles, - setRootFolders + setTreeFolders } from "../../../store/files/actions"; import store from "../../../store/store"; import { api, history } from "asc-web-common"; @@ -56,7 +55,7 @@ class ArticleBodyContent extends React.Component { currentModule, filter, setFilter, - setRootFolders, + setTreeFolders, onLoading, isLoading } = this.props; @@ -70,7 +69,7 @@ class ArticleBodyContent extends React.Component { data={data} filter={filter} setFilter={setFilter} - setRootFolders={setRootFolders} + setTreeFolders={setTreeFolders} expandedKeys={this.state.expandedKeys} onLoading={onLoading} isLoading={isLoading} @@ -80,12 +79,12 @@ class ArticleBodyContent extends React.Component { } function mapStateToProps(state) { - const { rootFolders, selectedFolder, filter } = state.files; + const { treeFolders, selectedFolder, filter } = state.files; const currentFolderId = selectedFolder.id.toString(); const fakeNewDocuments = 8; return { - data: getRootFolders(rootFolders), + data: treeFolders, selectedKeys: selectedFolder ? [currentFolderId] : [""], fakeNewDocuments, currentModule: currentFolderId, @@ -93,6 +92,6 @@ function mapStateToProps(state) { }; } -export default connect(mapStateToProps, { setFilter, setRootFolders })( +export default connect(mapStateToProps, { setFilter, setTreeFolders })( ArticleBodyContent ); diff --git a/products/ASC.Files/Client/src/components/Article/MainButton/index.js b/products/ASC.Files/Client/src/components/Article/MainButton/index.js index 7a5e99a88b..62f992da0e 100644 --- a/products/ASC.Files/Client/src/components/Article/MainButton/index.js +++ b/products/ASC.Files/Client/src/components/Article/MainButton/index.js @@ -85,10 +85,11 @@ ArticleMainButtonContent.propTypes = { }; const mapStateToProps = (state) => { - const rootFolderOfCurrent = state.files.selectedFolder ? state.files.selectedFolder.pathParts[0] : -1; + const rootFolderOfCurrent = state.files.selectedFolder ? state.files.selectedFolder.pathParts[0] : -1; + const myFolderIndex = 0; return { settings: state.auth.settings, - isMyDocuments: isMyDocuments(state.files.rootFolders.my.id, rootFolderOfCurrent) + isMyDocuments: isMyDocuments(state.files.treeFolders[myFolderIndex].id, rootFolderOfCurrent) } } diff --git a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js index 0dbcf3f4ba..5f30405c4c 100644 --- a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js @@ -18,7 +18,7 @@ import { deselectFile, fetchFiles, fetchFolder, - fetchRootFolders, + //fetchRootFolders, selectFile, setAction } from '../../../../../store/files/actions'; @@ -88,7 +88,7 @@ class SectionBodyContent extends React.PureComponent { }); }) - fetchRootFolders(store.dispatch); + //fetchRootFolders(store.dispatch); } onClickDelete = (item) => { @@ -112,7 +112,7 @@ class SectionBodyContent extends React.PureComponent { deleteFolder(folderId) .catch(err => toastr.error(err)) .then(() => fetchFiles(currentFolderId, filter, store.dispatch)) - .then(() => fetchRootFolders(store.dispatch)) + //.then(() => fetchRootFolders(store.dispatch)) .then(() => toastr.success(`Folder moved to recycle bin`)); } @@ -260,7 +260,7 @@ export default connect( deleteFolder, deselectFile, fetchFiles, - fetchRootFolders, + //fetchRootFolders, selectFile, setAction } diff --git a/products/ASC.Files/Client/src/components/pages/Home/Section/Header/index.js b/products/ASC.Files/Client/src/components/pages/Home/Section/Header/index.js index 2a039a9dc4..d1cbbb5599 100644 --- a/products/ASC.Files/Client/src/components/pages/Home/Section/Header/index.js +++ b/products/ASC.Files/Client/src/components/pages/Home/Section/Header/index.js @@ -420,11 +420,12 @@ const SectionHeaderContent = props => { }; const mapStateToProps = state => { - const { selectedFolder, selection, rootFolders } = state.files; + const { selectedFolder, selection, treeFolders } = state.files; + const trashFolderIndex = 3; return { folder: selectedFolder.parentId !== 0, isAdmin: isAdmin(state.auth.user), - isRecycleBinFolder: rootFolders.trash.id === selectedFolder.id, + isRecycleBinFolder: treeFolders[trashFolderIndex].id === selectedFolder.id, parentId: selectedFolder.parentId, selection, title: selectedFolder.title, diff --git a/products/ASC.Files/Client/src/index.js b/products/ASC.Files/Client/src/index.js index bca43bd456..90cdb8d161 100644 --- a/products/ASC.Files/Client/src/index.js +++ b/products/ASC.Files/Client/src/index.js @@ -2,7 +2,7 @@ import React from "react"; import ReactDOM from "react-dom"; import { Provider } from "react-redux"; import store from "./store/store"; -import { fetchMyFolder, fetchRootFolders, fetchFiles } from "./store/files/actions"; +import { fetchMyFolder, fetchTreeFolders, fetchFiles } from "./store/files/actions"; import config from "../package.json"; import "./custom.scss"; import App from "./App"; @@ -21,7 +21,7 @@ if (token) { .then(() => getPortalPasswordSettings(store.dispatch)) .then(() => getPortalCultures(store.dispatch)) .then(() => fetchMyFolder(store.dispatch)) - .then(() => fetchRootFolders(store.dispatch)) + .then(() => fetchTreeFolders(store.dispatch)) .then(() => { const re = new RegExp(`${config.homepage}((/?)$|/filter)`, "gm"); const match = window.location.pathname.match(re); diff --git a/products/ASC.Files/Client/src/store/files/actions.js b/products/ASC.Files/Client/src/store/files/actions.js index cfbd96b258..c428885644 100644 --- a/products/ASC.Files/Client/src/store/files/actions.js +++ b/products/ASC.Files/Client/src/store/files/actions.js @@ -23,7 +23,7 @@ export const SET_FILES = "SET_FILES"; export const SET_SELECTION = "SET_SELECTION"; export const SET_SELECTED = "SET_SELECTED"; export const SET_SELECTED_FOLDER = "SET_SELECTED_FOLDER"; -export const SET_ROOT_FOLDERS = "SET_ROOT_FOLDERS"; +export const SET_TREE_FOLDERS = "SET_TREE_FOLDERS"; export const SET_FILES_FILTER = "SET_FILES_FILTER"; export const SET_FILTER = "SET_FILTER"; export const SELECT_FILE = "SELECT_FILE"; @@ -86,10 +86,10 @@ export function setSelectedFolder(selectedFolder) { }; } -export function setRootFolders(rootFolders) { +export function setTreeFolders(treeFolders) { return { - type: SET_ROOT_FOLDERS, - rootFolders + type: SET_TREE_FOLDERS, + treeFolders }; } @@ -226,37 +226,13 @@ export function fetchSharedFolder(dispatch) { }); } -export function fetchRootFolders(dispatch) { - - let root = { - my: null, - share: null, - common: null, - project: null, - trash: null - }; - - return axios.all([ - files.getMyFolderList(), - files.getSharedFolderList(), - files.getCommonFolderList(), - files.getProjectsFolderList(), - files.getTrashFolderList() - ]) - .then(axios.spread((my, share, common, project, trash) => { - root.my = { folders: my.folders, ...my.current } - root.share = { folders: share.folders, ...share.current } - root.common = { folders: common.folders, ...common.current } - root.project = { folders: project.folders, ...project.current } - root.trash = { folders: trash.folders, ...trash.current } - })) - .then(() => dispatch(setRootFolders(root)));; +export function fetchTreeFolders(dispatch) { + return files.getFoldersTree().then(data => dispatch(setTreeFolders(data))); } -export function testUpdateMyFolder(folders) { +/*export function testUpdateMyFolder(folders) { return (dispatch, getState) => { const { files } = getState(); - const { rootFolders } = files; console.log("folders", folders); @@ -270,7 +246,7 @@ export function testUpdateMyFolder(folders) { } //setRootFolders -} +}*/ export function createFile(folderId, title) { return dispatch => { diff --git a/products/ASC.Files/Client/src/store/files/reducers.js b/products/ASC.Files/Client/src/store/files/reducers.js index 7f5b91f4ad..3a8c97b120 100644 --- a/products/ASC.Files/Client/src/store/files/reducers.js +++ b/products/ASC.Files/Client/src/store/files/reducers.js @@ -6,7 +6,7 @@ import { SET_FILTER, SET_FOLDER, SET_FOLDERS, - SET_ROOT_FOLDERS, + SET_TREE_FOLDERS, SET_SELECTED_FOLDER, SET_SELECTED, SET_SELECTION, @@ -24,7 +24,7 @@ const initialState = { files: null, filter: FilesFilter.getDefault(), folders: null, - rootFolders: [], + treeFolders: [], selected: "none", selectedFolder: null, selection: [] @@ -65,9 +65,9 @@ const filesReducer = (state = initialState, action) => { return Object.assign({}, state, { selectedFolder: action.selectedFolder }); - case SET_ROOT_FOLDERS: + case SET_TREE_FOLDERS: return Object.assign({}, state, { - rootFolders: action.rootFolders + treeFolders: action.treeFolders }); case SET_FILTER: return Object.assign({}, state, { diff --git a/products/ASC.Files/Client/src/store/files/selectors.js b/products/ASC.Files/Client/src/store/files/selectors.js index c7cbaff813..d5f89f01c3 100644 --- a/products/ASC.Files/Client/src/store/files/selectors.js +++ b/products/ASC.Files/Client/src/store/files/selectors.js @@ -3,22 +3,6 @@ import { constants } from 'asc-web-common'; const { FileType, FilterType } = constants; -export const getRootFolders = files => { - const { my, share, common, project, trash } = files; - - my.key = "0-0"; - share.key = "0-1"; - common.key = "0-2"; - project.key = "0-3"; - trash.key = "0-4"; - trash.folders = null; - trash.foldersCount = null; - - const data = [ my, share, common, project, trash]; - - return data; -}; - export const canWebEdit = fileExst => { const editedDocs = ['.pptx', '.pptm', '.ppt', '.ppsx', '.ppsm', '.pps', '.potx', '.potm', '.pot', '.odp', '.fodp', '.otp', '.xlsx', '.xlsm', '.xls', '.xltx', '.xltm', '.xlt', '.ods', '.fods', '.ots', '.csv', '.docx', '.docm', '.doc', '.dotx', '.dotm', '.dot', '.odt', '.fodt', '.ott', '.txt', '.rtf', '.mht', '.html', '.htm']; const result = editedDocs.findIndex(item => item === fileExst); diff --git a/web/ASC.Web.Common/src/api/files/index.js b/web/ASC.Web.Common/src/api/files/index.js index d57a31683c..6807b9c7bd 100644 --- a/web/ASC.Web.Common/src/api/files/index.js +++ b/web/ASC.Web.Common/src/api/files/index.js @@ -40,26 +40,26 @@ export function getFolder(folderId, filter, fake = false) { } export function getFoldersTree() { - const rootFoldersPaths = ['@my', '@share', '@common', '@projects', '@trash']; //TODO: need get from settings + const rootFoldersPaths = ['@my', '@share', '@common', /*'@projects',*/ '@trash']; //TODO: need get from settings const requestsArray = rootFoldersPaths.map(path => request({ method: "get", url: `/files/${path}` })); return axios.all(requestsArray) .then(axios.spread((...responses) => - responses.map(data => { + responses.map((data, index) => { + const trashIndex = 3; return { id: data.current.id, - key: `0-${data.current.id}`, + key: `0-${index}`, title: data.current.title, - folders: data.folders.map(folder => { + folders: index !== trashIndex ? data.folders.map(folder => { return { id: folder.id, - key: `0-${folder.parentId}-${folder.id}`, title: folder.title, - folders: [], - foldersCount: folder.foldersCount + foldersCount: folder.foldersCount, } - }), - foldersCount: data.current.foldersCount + }) : null, + pathParts: data.pathParts, + foldersCount: index !== trashIndex ? data.current.foldersCount : null } }) )) From 0db3ca81d88baa71aabe78078d7a0e07b38589b0 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Fri, 20 Mar 2020 15:13:33 +0300 Subject: [PATCH 2/4] Files.Client: Home: Fixed text style for editing container --- .../components/pages/Home/Section/Body/FilesRowContent.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/FilesRowContent.js b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/FilesRowContent.js index 0660725d07..0ede31adc5 100644 --- a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/FilesRowContent.js +++ b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/FilesRowContent.js @@ -186,6 +186,13 @@ class FilesRowContent extends React.PureComponent { } .edit-text { height: 30px; + font-size: 15px; + outline: 0 !important; + font-weight: bold; + margin: 0; + font-family: 'Open Sans',sans-serif,Arial; + text-align: left; + color: #333333; } .edit-button { margin-left: 8px; From 645def5f8112f78c805ce2f308d9a686989ea643 Mon Sep 17 00:00:00 2001 From: Ilya Oleshko Date: Fri, 20 Mar 2020 15:13:57 +0300 Subject: [PATCH 3/4] Files.Client: Home: Fixed elements position on editing row --- .../pages/Home/Section/Body/index.js | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js index 0dbcf3f4ba..76d3ce33a5 100644 --- a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js @@ -3,6 +3,7 @@ import { withRouter } from "react-router"; import { connect } from "react-redux"; import { withTranslation } from "react-i18next"; import isEqual from "lodash/isEqual"; +import styled from "styled-components"; import { Icons, Row, @@ -183,12 +184,38 @@ class SectionBodyContent extends React.PureComponent { } }; + getItemIcon = (extension, isEdit) => { + const setEditIconStyle = isEdit ? { style: { marginLeft: '24px' } } : {}; + + return extension + ? + : + }; + render() { const { files, folders, viewer, parentId, folderId, settings, selection, fileAction, onLoading, filter } = this.props; const { editingId } = this.state; let items = [...folders, ...files]; + const SimpleFilesRow = styled(Row)` + ${props => !props.contextOptions && ` + & > div:last-child { + width: 0px; + } + `} + `; + if (fileAction && fileAction.type === FileAction.Create) { items.unshift({ id: -1, @@ -208,12 +235,10 @@ class SectionBodyContent extends React.PureComponent { : { contextOptions }; const checked = isFileSelected(selection, item.id, item.parentId); const checkedProps = /* isAdmin(viewer) */ isEdit ? {} : { checked }; - const element = item.fileExst - ? - : ; + const element = this.getItemIcon(item.fileExst, isEdit); return ( - - + ); })} ) : parentId !== 0 ? ( - + ) :

RootFolderContainer

; } } From 805713f2a0ea213ec577256c6e090e717bcc2bdc Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Fri, 20 Mar 2020 15:15:21 +0300 Subject: [PATCH 4/4] web: common: bump version --- web/ASC.Web.Common/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/ASC.Web.Common/package.json b/web/ASC.Web.Common/package.json index 92db7d89d1..6e57ebb181 100644 --- a/web/ASC.Web.Common/package.json +++ b/web/ASC.Web.Common/package.json @@ -1,6 +1,6 @@ { "name": "asc-web-common", - "version": "1.0.124", + "version": "1.0.125", "description": "Ascensio System SIA common components and solutions library", "license": "AGPL-3.0", "files": [