From 4da9e8e06e8ac3681e85fdff4166967093e7c46f Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Fri, 12 Jul 2024 14:39:11 +0300 Subject: [PATCH 01/61] Client: Filter: enable sort always --- .../src/pages/Home/Section/Filter/index.js | 231 ++---------------- 1 file changed, 17 insertions(+), 214 deletions(-) diff --git a/packages/client/src/pages/Home/Section/Filter/index.js b/packages/client/src/pages/Home/Section/Filter/index.js index 7ee26912fc..14e652aaf7 100644 --- a/packages/client/src/pages/Home/Section/Filter/index.js +++ b/packages/client/src/pages/Home/Section/Filter/index.js @@ -2012,7 +2012,6 @@ const SectionFilterContent = ({ } options.push(firstName, lastName); - if (accountsViewAs === "table") { const tableColumns = isInsideGroup ? TABLE_INSIDE_GROUP_COLUMNS @@ -2180,220 +2179,24 @@ const SectionFilterContent = ({ commonOptions.push(name); - if (viewAs === "table") { - if (isRooms) { - const availableSort = localStorage - ?.getItem(`${TABLE_ROOMS_COLUMNS}=${userId}`) - ?.split(","); - - const infoPanelColumnsSize = localStorage - ?.getItem(`${COLUMNS_ROOMS_SIZE_INFO_PANEL}=${userId}`) - ?.split(" "); - - const hideOption = infoPanelVisible && infoPanelColumnsSize; - - if (availableSort?.includes("Type")) { - const idx = availableSort.findIndex((x) => x === "Type"); - const hide = hideOption && infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(roomType); - } - - if (availableSort?.includes("Tags")) { - const idx = availableSort.findIndex((x) => x === "Tags"); - const hide = hideOption && infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(tags); - } - - if (availableSort?.includes("Owner")) { - const idx = availableSort.findIndex((x) => x === "Owner"); - const hide = hideOption && infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(owner); - } - - if (availableSort?.includes("Activity")) { - const idx = availableSort.findIndex((x) => x === "Activity"); - const hide = hideOption && infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(modifiedDate); - } - - if (showStorageInfo && availableSort?.includes("Storage")) { - const idx = availableSort.findIndex( - (x) => x === SortByFieldName.UsedSpace, - ); - const hide = hideOption && infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(sortByStorage); - } - } else if (isTrash) { - const availableSort = localStorage - ?.getItem(`${TABLE_TRASH_COLUMNS}=${userId}`) - ?.split(","); - - const infoPanelColumnsSize = localStorage - ?.getItem(`${COLUMNS_TRASH_SIZE_INFO_PANEL}=${userId}`) - ?.split(" "); - - if (availableSort?.includes("Room")) { - const idx = availableSort.findIndex((x) => x === "Room"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(room); - } - if (availableSort?.includes("AuthorTrash")) { - const idx = availableSort.findIndex((x) => x === "AuthorTrash"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(authorOption); - } - if (availableSort?.includes("CreatedTrash")) { - const idx = availableSort.findIndex((x) => x === "CreatedTrash"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(creationDate); - } - if (availableSort?.includes("Erasure")) { - const idx = availableSort.findIndex((x) => x === "Erasure"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(erasure); - } - if (availableSort?.includes("SizeTrash")) { - const idx = availableSort.findIndex((x) => x === "SizeTrash"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(size); - } - if (availableSort?.includes("TypeTrash")) { - const idx = availableSort.findIndex((x) => x === "TypeTrash"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(type); - } - } else if (isRecentTab) { - const availableSort = localStorage - ?.getItem(`${TABLE_RECENT_COLUMNS}=${userId}`) - ?.split(","); - - const infoPanelColumnsSize = localStorage - ?.getItem(`${COLUMNS_RECENT_SIZE_INFO_PANEL}=${userId}`) - ?.split(" "); - - if (availableSort?.includes("LastOpened")) { - const idx = availableSort.findIndex((x) => x === "LastOpened"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(lastOpenedDate); - } - - if (availableSort?.includes("Size")) { - const idx = availableSort.findIndex((x) => x === "Size"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(size); - } - } else { - const availableSort = localStorage - ?.getItem(`${TABLE_COLUMNS}=${userId}`) - ?.split(","); - - const infoPanelColumnsSize = localStorage - ?.getItem(`${COLUMNS_SIZE_INFO_PANEL}=${userId}`) - ?.split(" "); - - if (availableSort?.includes("Author")) { - const idx = availableSort.findIndex((x) => x === "Author"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(authorOption); - } - if (availableSort?.includes("Created")) { - const idx = availableSort.findIndex((x) => x === "Created"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(creationDate); - } - if (availableSort?.includes("Modified")) { - const idx = availableSort.findIndex((x) => x === "Modified"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(modifiedDate); - } - if (availableSort?.includes("Size")) { - const idx = availableSort.findIndex((x) => x === "Size"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && commonOptions.push(size); - } - if (availableSort?.includes("Type")) { - const idx = availableSort.findIndex((x) => x === "Type"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - // !hide && commonOptions.push(type); - } - } + if (isRooms) { + commonOptions.push(roomType); + commonOptions.push(tags); + commonOptions.push(owner); + commonOptions.push(modifiedDate); + showStorageInfo && commonOptions.push(sortByStorage); + } else if (isTrash) { + // commonOptions.push(authorOption); + // commonOptions.push(creationDate); + commonOptions.push(erasure); + commonOptions.push(size); + // commonOptions.push(type); } else { - if (isRooms) { - commonOptions.push(roomType); - commonOptions.push(tags); - commonOptions.push(owner); - commonOptions.push(modifiedDate); - showStorageInfo && commonOptions.push(sortByStorage); - } else if (isTrash) { - // commonOptions.push(authorOption); - // commonOptions.push(creationDate); - commonOptions.push(erasure); - commonOptions.push(size); - // commonOptions.push(type); - } else { - // commonOptions.push(authorOption); - // commonOptions.push(creationDate); - commonOptions.push(modifiedDate); - commonOptions.push(size); - // commonOptions.push(type); - } + // commonOptions.push(authorOption); + // commonOptions.push(creationDate); + commonOptions.push(modifiedDate); + commonOptions.push(size); + // commonOptions.push(type); } return commonOptions; From 1077c1577bad7981658d8f09d334d242e1aec00c Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Fri, 12 Jul 2024 14:41:11 +0300 Subject: [PATCH 02/61] Client: Home: TableHeader: show column after sorting --- .../Home/Section/Body/TableView/TableHeader.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js index 4c62ab6e87..21107a96da 100644 --- a/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js @@ -425,6 +425,8 @@ class FilesTableHeader extends React.Component { isRecentTab, isArchiveFolder, showStorageInfo, + filter, + roomsFilter, } = this.props; if ( @@ -440,6 +442,19 @@ class FilesTableHeader extends React.Component { } const { columns } = this.state; + + if ( + filter.sortBy !== prevProps.filter.sortBy || + (isRooms && roomsFilter.sortBy !== prevProps.roomsFilter.sortBy) + ) { + const sortBy = isRooms ? roomsFilter.sortBy : filter.sortBy; + const columnIndex = columns.findIndex((c) => c?.sortBy === sortBy); + if (columnIndex === -1) return; + + !columns[columnIndex].enable && + columns[columnIndex].onChange?.(columns[columnIndex].key); + } + if (this.props.withContent !== prevProps.withContent) { const columnIndex = columns.findIndex((c) => c.key === "Share"); if (columnIndex === -1) return; From a1e9e0b507737e9f4b0a014739f138589c6f9c06 Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Fri, 12 Jul 2024 15:44:22 +0300 Subject: [PATCH 03/61] Client: Filter: enable sort always in accounts --- .../src/pages/Home/Section/Filter/index.js | 37 +------------------ 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/packages/client/src/pages/Home/Section/Filter/index.js b/packages/client/src/pages/Home/Section/Filter/index.js index 14e652aaf7..e89ca763a1 100644 --- a/packages/client/src/pages/Home/Section/Filter/index.js +++ b/packages/client/src/pages/Home/Section/Filter/index.js @@ -2011,41 +2011,8 @@ const SectionFilterContent = ({ hideableColumns.Storage = storage; } - options.push(firstName, lastName); - if (accountsViewAs === "table") { - const tableColumns = isInsideGroup - ? TABLE_INSIDE_GROUP_COLUMNS - : TABLE_PEOPLE_COLUMNS; - - const columnsSizeInfoPanel = isInsideGroup - ? COLUMNS_INSIDE_GROUP_SIZE_INFO_PANEL - : COLUMNS_PEOPLE_SIZE_INFO_PANEL; - - const availableSort = localStorage - ?.getItem(`${tableColumns}=${userId}`) - ?.split(","); - - const infoPanelColumnsSize = localStorage - ?.getItem(`${columnsSizeInfoPanel}=${userId}`) - ?.split(" "); - - availableSort?.forEach((columnTitle) => { - if (!hideableColumns[columnTitle]) return; - - if (availableSort?.includes(columnTitle)) { - const idx = availableSort.findIndex((x) => x === columnTitle); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && options.push(hideableColumns[columnTitle]); - } - }); - } else { - options.push(type, department, email); - if (showStorageInfo) options.push(storage); - } + options.push(firstName, lastName, type, department, email); + if (showStorageInfo) options.push(storage); return options; } From 842a6e1fa41b3e9ac08408a464f07d8be0dd60ab Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Fri, 12 Jul 2024 15:44:39 +0300 Subject: [PATCH 04/61] Client: Home: TableHeader: show column after sorting in accounts --- .../AccountsBody/People/TableView/TableHeader.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js index d7f14b4263..ec147f92ae 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js @@ -118,6 +118,18 @@ class PeopleTableHeader extends React.Component { this.state = { columns, resetColumnsSize }; } + componentDidUpdate(prevProps) { + const { filter } = this.props; + const { columns } = this.state; + if (filter.sortBy !== prevProps.filter.sortBy) { + const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); + if (columnIndex === -1) return; + + !columns[columnIndex].enable && + columns[columnIndex].onChange?.(columns[columnIndex].key); + } + } + onColumnChange = (key, e) => { const { columns } = this.state; const columnIndex = columns.findIndex((c) => c.key === key); From 1b7dce6f30961cfffaa874564895b90497157840 Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Mon, 15 Jul 2024 12:24:49 +0300 Subject: [PATCH 05/61] Client: Filter: enable sort always in groups --- .../src/pages/Home/Section/Filter/index.js | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/packages/client/src/pages/Home/Section/Filter/index.js b/packages/client/src/pages/Home/Section/Filter/index.js index e89ca763a1..56d9db0fd9 100644 --- a/packages/client/src/pages/Home/Section/Filter/index.js +++ b/packages/client/src/pages/Home/Section/Filter/index.js @@ -2034,29 +2034,7 @@ const SectionFilterContent = ({ default: true, }; - groupsOptions.push(title); - - if (accountsViewAs === "table") { - const availableSort = localStorage - ?.getItem(`${TABLE_GROUPS_COLUMNS}=${userId}`) - ?.split(","); - - const infoPanelColumnsSize = localStorage - ?.getItem(`${COLUMNS_GROUPS_SIZE_INFO_PANEL}=${userId}`) - ?.split(" "); - - if (availableSort?.includes("Head of Group")) { - const idx = availableSort.findIndex((x) => x === "Head of Group"); - const hide = - infoPanelVisible && - infoPanelColumnsSize && - infoPanelColumnsSize[idx] === "0px"; - - !hide && groupsOptions.push(manager); - } - } else { - groupsOptions.push(manager); - } + groupsOptions.push(title, manager); return groupsOptions; } From 33ba2bc4004b3bfbf9753bd9e10b998b019b0a4a Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Mon, 15 Jul 2024 12:25:07 +0300 Subject: [PATCH 06/61] Client: Home: TableHeader: show column after sorting in groups --- .../Groups/TableView/GroupsTableHeader.js | 12 ++++++++++++ .../InsideGroup/TableView/TableHeader.js | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js index 8f854cb397..57983ee44b 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js @@ -103,6 +103,18 @@ class GroupsTableHeader extends React.Component { navigate(`${location.pathname}?${newFilter.toUrlParams()}`); }; + componentDidUpdate(prevProps) { + const { filter } = this.props; + const { columns } = this.state; + if (filter.sortBy !== prevProps.filter.sortBy) { + const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); + if (columnIndex === -1) return; + + !columns[columnIndex].enable && + columns[columnIndex].onChange?.(columns[columnIndex].key); + } + } + render() { const { columns } = this.state; const { diff --git a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js index 3491f794e2..add92b783d 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js @@ -156,6 +156,18 @@ class InsideGroupTableHeader extends React.Component { navigate(`${location.pathname}?${newFilter.toUrlParams()}`); }; + componentDidUpdate(prevProps) { + const { filter } = this.props; + const { columns } = this.state; + if (filter.sortBy !== prevProps.filter.sortBy) { + const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); + if (columnIndex === -1) return; + + !columns[columnIndex].enable && + columns[columnIndex].onChange?.(columns[columnIndex].key); + } + } + render() { const { columns } = this.state; const { From 3f3659894bc82ce1ba7361f7339ee64501299c90 Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Mon, 15 Jul 2024 12:31:39 +0300 Subject: [PATCH 07/61] Client: Filter: fix missing --- packages/client/src/pages/Home/Section/Filter/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/client/src/pages/Home/Section/Filter/index.js b/packages/client/src/pages/Home/Section/Filter/index.js index 56d9db0fd9..4fbaaa9a5b 100644 --- a/packages/client/src/pages/Home/Section/Filter/index.js +++ b/packages/client/src/pages/Home/Section/Filter/index.js @@ -2142,6 +2142,7 @@ const SectionFilterContent = ({ commonOptions.push(modifiedDate); commonOptions.push(size); // commonOptions.push(type); + isRecentTab && commonOptions.push(lastOpenedDate); } return commonOptions; From 9a02cb2122a4292211de415297aeb497a39b4fe7 Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Tue, 16 Jul 2024 12:57:08 +0300 Subject: [PATCH 08/61] Client: show column by sortOrder --- .../AccountsBody/Groups/TableView/GroupsTableHeader.js | 5 ++++- .../AccountsBody/InsideGroup/TableView/TableHeader.js | 5 ++++- .../Section/AccountsBody/People/TableView/TableHeader.js | 5 ++++- .../src/pages/Home/Section/Body/TableView/TableHeader.js | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js index 57983ee44b..d06de1d182 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js @@ -106,7 +106,10 @@ class GroupsTableHeader extends React.Component { componentDidUpdate(prevProps) { const { filter } = this.props; const { columns } = this.state; - if (filter.sortBy !== prevProps.filter.sortBy) { + if ( + filter.sortBy !== prevProps.filter.sortBy || + filter.sortOrder !== prevProps.filter.sortOrder + ) { const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); if (columnIndex === -1) return; diff --git a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js index add92b783d..bcd3e251da 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js @@ -159,7 +159,10 @@ class InsideGroupTableHeader extends React.Component { componentDidUpdate(prevProps) { const { filter } = this.props; const { columns } = this.state; - if (filter.sortBy !== prevProps.filter.sortBy) { + if ( + filter.sortBy !== prevProps.filter.sortBy || + filter.sortOrder !== prevProps.filter.sortOrder + ) { const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); if (columnIndex === -1) return; diff --git a/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js index ec147f92ae..60be87893f 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js @@ -121,7 +121,10 @@ class PeopleTableHeader extends React.Component { componentDidUpdate(prevProps) { const { filter } = this.props; const { columns } = this.state; - if (filter.sortBy !== prevProps.filter.sortBy) { + if ( + filter.sortBy !== prevProps.filter.sortBy || + filter.sortOrder !== prevProps.filter.sortOrder + ) { const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); if (columnIndex === -1) return; diff --git a/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js index 21107a96da..c920103214 100644 --- a/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js @@ -445,7 +445,10 @@ class FilesTableHeader extends React.Component { if ( filter.sortBy !== prevProps.filter.sortBy || - (isRooms && roomsFilter.sortBy !== prevProps.roomsFilter.sortBy) + filter.sortOrder !== prevProps.filter.sortOrder || + (isRooms && + (roomsFilter.sortBy !== prevProps.roomsFilter.sortBy || + roomsFilter.sortOrder !== prevProps.roomsFilter.sortOrder)) ) { const sortBy = isRooms ? roomsFilter.sortBy : filter.sortBy; const columnIndex = columns.findIndex((c) => c?.sortBy === sortBy); From 87f2991d1c13f385fcb30bd9d1755022728b0817 Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Mon, 22 Jul 2024 15:20:20 +0300 Subject: [PATCH 09/61] Shared: Table: show column when sorting changed --- packages/shared/components/table/TableHeader.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/shared/components/table/TableHeader.tsx b/packages/shared/components/table/TableHeader.tsx index 799de41dfc..6f184c88e7 100644 --- a/packages/shared/components/table/TableHeader.tsx +++ b/packages/shared/components/table/TableHeader.tsx @@ -76,6 +76,8 @@ class TableHeader extends React.Component< infoPanelVisible, columnStorageName, columnInfoPanelStorageName, + sortBy, + sorted, } = this.props; if (columnStorageName === prevProps.columnStorageName) { @@ -95,6 +97,15 @@ class TableHeader extends React.Component< } } + if (sortBy !== prevProps.sortBy || sorted !== prevProps.sorted) { + const columnIndex = columns.findIndex((c) => c?.sortBy === sortBy); + if (columnIndex === -1) return; + + if (!columns[columnIndex].enable) { + columns[columnIndex].onChange?.(columns[columnIndex].key); + } + } + this.onResize(); } From b5eefc4398d3238f3bf2f47926c61b5aceac3059 Mon Sep 17 00:00:00 2001 From: Viktor Fomin Date: Mon, 22 Jul 2024 15:20:47 +0300 Subject: [PATCH 10/61] Client: delete useless --- .../Groups/TableView/GroupsTableHeader.js | 15 --------------- .../InsideGroup/TableView/TableHeader.js | 15 --------------- .../People/TableView/TableHeader.js | 15 --------------- .../Home/Section/Body/TableView/TableHeader.js | 17 ----------------- 4 files changed, 62 deletions(-) diff --git a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js index d06de1d182..8f854cb397 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js @@ -103,21 +103,6 @@ class GroupsTableHeader extends React.Component { navigate(`${location.pathname}?${newFilter.toUrlParams()}`); }; - componentDidUpdate(prevProps) { - const { filter } = this.props; - const { columns } = this.state; - if ( - filter.sortBy !== prevProps.filter.sortBy || - filter.sortOrder !== prevProps.filter.sortOrder - ) { - const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); - if (columnIndex === -1) return; - - !columns[columnIndex].enable && - columns[columnIndex].onChange?.(columns[columnIndex].key); - } - } - render() { const { columns } = this.state; const { diff --git a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js index bcd3e251da..3491f794e2 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js @@ -156,21 +156,6 @@ class InsideGroupTableHeader extends React.Component { navigate(`${location.pathname}?${newFilter.toUrlParams()}`); }; - componentDidUpdate(prevProps) { - const { filter } = this.props; - const { columns } = this.state; - if ( - filter.sortBy !== prevProps.filter.sortBy || - filter.sortOrder !== prevProps.filter.sortOrder - ) { - const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); - if (columnIndex === -1) return; - - !columns[columnIndex].enable && - columns[columnIndex].onChange?.(columns[columnIndex].key); - } - } - render() { const { columns } = this.state; const { diff --git a/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js index 60be87893f..d7f14b4263 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/People/TableView/TableHeader.js @@ -118,21 +118,6 @@ class PeopleTableHeader extends React.Component { this.state = { columns, resetColumnsSize }; } - componentDidUpdate(prevProps) { - const { filter } = this.props; - const { columns } = this.state; - if ( - filter.sortBy !== prevProps.filter.sortBy || - filter.sortOrder !== prevProps.filter.sortOrder - ) { - const columnIndex = columns.findIndex((c) => c?.sortBy === filter.sortBy); - if (columnIndex === -1) return; - - !columns[columnIndex].enable && - columns[columnIndex].onChange?.(columns[columnIndex].key); - } - } - onColumnChange = (key, e) => { const { columns } = this.state; const columnIndex = columns.findIndex((c) => c.key === key); diff --git a/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js index c920103214..17a91162e6 100644 --- a/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/Body/TableView/TableHeader.js @@ -425,8 +425,6 @@ class FilesTableHeader extends React.Component { isRecentTab, isArchiveFolder, showStorageInfo, - filter, - roomsFilter, } = this.props; if ( @@ -443,21 +441,6 @@ class FilesTableHeader extends React.Component { const { columns } = this.state; - if ( - filter.sortBy !== prevProps.filter.sortBy || - filter.sortOrder !== prevProps.filter.sortOrder || - (isRooms && - (roomsFilter.sortBy !== prevProps.roomsFilter.sortBy || - roomsFilter.sortOrder !== prevProps.roomsFilter.sortOrder)) - ) { - const sortBy = isRooms ? roomsFilter.sortBy : filter.sortBy; - const columnIndex = columns.findIndex((c) => c?.sortBy === sortBy); - if (columnIndex === -1) return; - - !columns[columnIndex].enable && - columns[columnIndex].onChange?.(columns[columnIndex].key); - } - if (this.props.withContent !== prevProps.withContent) { const columnIndex = columns.findIndex((c) => c.key === "Share"); if (columnIndex === -1) return; From 2a6604c613964d372a8e3f977ab5d8d1fcb1b96a Mon Sep 17 00:00:00 2001 From: Akmal Isomadinov Date: Thu, 25 Jul 2024 13:34:12 +0500 Subject: [PATCH 11/61] Doceditor:CompletedForm Fixed route --- .../src/components/completed-form/CompletedForm.tsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/doceditor/src/components/completed-form/CompletedForm.tsx b/packages/doceditor/src/components/completed-form/CompletedForm.tsx index 66f419416f..fa36983c63 100644 --- a/packages/doceditor/src/components/completed-form/CompletedForm.tsx +++ b/packages/doceditor/src/components/completed-form/CompletedForm.tsx @@ -142,10 +142,6 @@ export const CompletedForm = ({ return `${origin}${path}${filter.toUrlParams()}`; }; - const setHistory = (url: string) => { - history.pushState({}, "", url); - }; - const copyLinkFile = async () => { const origin = window.location.origin; @@ -161,14 +157,12 @@ export const CompletedForm = ({ const gotoCompleteFolder = () => { const url = getFolderUrl(completedForm.folderId, false); - setHistory(url); - window.location.replace(url); + window.location.assign(url); }; const handleBackToRoom = () => { const url = getFolderUrl(roomId, isAnonim); - setHistory(url); - window.location.replace(url); + window.location.assign(url); }; const fillAgainSearchParams = new URLSearchParams({ From 9ac5f66ead08a78a6fdedef09aaf12d53e7d59cc Mon Sep 17 00:00:00 2001 From: Aleksandr Lushkin Date: Thu, 25 Jul 2024 11:19:16 +0200 Subject: [PATCH 12/61] Client: Home: Fix hiding filter block when groups are filtered --- packages/client/src/pages/Home/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/client/src/pages/Home/index.js b/packages/client/src/pages/Home/index.js index abdabbd238..783a72502a 100644 --- a/packages/client/src/pages/Home/index.js +++ b/packages/client/src/pages/Home/index.js @@ -564,8 +564,15 @@ export default inject( const { usersStore, groupsStore, viewAs: accountsViewAs } = peopleStore; const { getUsersList: fetchPeople } = usersStore; - const { getGroups: fetchGroups, fetchGroup, groups } = groupsStore; - const isEmptyGroups = (groups && groups.length === 0) || !Boolean(groups); + const { + getGroups: fetchGroups, + fetchGroup, + groups, + groupsIsFiltered, + } = groupsStore; + const isEmptyGroups = + !groupsIsFiltered && + ((groups && groups.length === 0) || !Boolean(groups)); if (!firstLoad) { if (isLoading) { From d94a45bc4a8ce0dfc5236d8d99c36fa35ddd983d Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 25 Jul 2024 12:28:50 +0300 Subject: [PATCH 13/61] Web: Files: fixed circular dependency --- .../client/src/helpers/language-helpers.js | 27 ++++++++++++++++ packages/client/src/helpers/utils.js | 31 ++----------------- packages/client/src/i18n.js | 2 +- 3 files changed, 30 insertions(+), 30 deletions(-) create mode 100644 packages/client/src/helpers/language-helpers.js diff --git a/packages/client/src/helpers/language-helpers.js b/packages/client/src/helpers/language-helpers.js new file mode 100644 index 0000000000..d4a4e87a14 --- /dev/null +++ b/packages/client/src/helpers/language-helpers.js @@ -0,0 +1,27 @@ +import { getLanguage } from "@docspace/shared/utils"; +import { translations } from "./autoGeneratedTranslations"; + +export function loadLanguagePath(homepage, fixedNS = null) { + return (lng, ns) => { + const language = getLanguage(lng instanceof Array ? lng[0] : lng); + + const lngCollection = translations?.get(language); + + const data = lngCollection?.get(`${fixedNS || ns}`); + + if (!data) return `/locales/${language}/${fixedNS || ns}.json`; + + let path = data?.split("/"); + const length = path?.length; + + const isCommonPath = path[length - 1].indexOf("Common") > -1; + + path = `/${path[length - 3]}/${path[length - 2]}/${path[length - 1]}`; + + if (ns.length > 0 && ns[0] === "Common" && isCommonPath) { + return `/static${path}`; + } + + return path; + }; +} diff --git a/packages/client/src/helpers/utils.js b/packages/client/src/helpers/utils.js index 93f7091070..87c6356414 100644 --- a/packages/client/src/helpers/utils.js +++ b/packages/client/src/helpers/utils.js @@ -25,12 +25,10 @@ // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode import { authStore } from "@docspace/shared/store"; -import { getLanguage } from "@docspace/shared/utils"; import { toCommunityHostname } from "@docspace/shared/utils/common"; - import { CategoryType } from "./constants"; -import { FolderType, ShareAccessRights } from "@docspace/shared/enums"; -import { translations } from "./autoGeneratedTranslations"; +import { FolderType } from "@docspace/shared/enums"; + // import router from "SRC_DIR/router"; import i18n from "../i18n"; @@ -54,31 +52,6 @@ export const setDocumentTitle = (subTitle = "") => { document.title = title; }; -export function loadLanguagePath(homepage, fixedNS = null) { - return (lng, ns) => { - const language = getLanguage(lng instanceof Array ? lng[0] : lng); - - const lngCollection = translations?.get(language); - - const data = lngCollection?.get(`${fixedNS || ns}`); - - if (!data) return `/locales/${language}/${fixedNS || ns}.json`; - - let path = data?.split("/"); - const length = path?.length; - - const isCommonPath = path[length - 1].indexOf("Common") > -1; - - path = `/${path[length - 3]}/${path[length - 2]}/${path[length - 1]}`; - - if (ns.length > 0 && ns[0] === "Common" && isCommonPath) { - return `/static${path}`; - } - - return path; - }; -} - export const checkIfModuleOld = (link) => { if ( !link || diff --git a/packages/client/src/i18n.js b/packages/client/src/i18n.js index 5c200fe821..cccd9e5643 100644 --- a/packages/client/src/i18n.js +++ b/packages/client/src/i18n.js @@ -31,7 +31,7 @@ import config from "PACKAGE_FILE"; import { LANGUAGE } from "@docspace/shared/constants"; import { getCookie } from "@docspace/shared/utils"; -import { loadLanguagePath } from "./helpers/utils"; +import { loadLanguagePath } from "./helpers/language-helpers"; const newInstance = i18n.createInstance(); From 61a165159257877b3a2164869c66dc563efd2ecd Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Thu, 25 Jul 2024 15:47:03 +0400 Subject: [PATCH 14/61] Fix Bug 69196 - Rooms.Info.History. In history, the room is recorded as a folder. --- .../HistoryBlockContent/MainTextFolderInfo.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx index ee0c156666..e4614a690c 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx +++ b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx @@ -54,23 +54,23 @@ const HistoryMainTextFolderInfo = ({ if (!parentTitle) return null; - const isParentType = parentType === 0; - const isFromParentType = fromParentType === 0; + const isRoom = parentType === 0; + const isFromRoom = fromParentType === 0; - const destination = isParentType - ? t("FeedLocationRoomLabel", { folderTitle: parentTitle }) - : t("FeedLocationLabel", { folderTitle: parentTitle }); + const destination = isRoom + ? t("FeedLocationLabel", { folderTitle: parentTitle }) + : t("FeedLocationRoomLabel", { folderTitle: parentTitle }); - const sourceDestination = isFromParentType + const sourceDestination = isFromRoom ? t("FeedLocationLabelFrom", { folderTitle: fromParentTitle }) : t("FeedLocationRoomLabel", { folderTitle: parentTitle }); - const className = !isFromParentType ? "folder-label" : "source-folder-label"; + const className = !isFromRoom ? "folder-label" : "source-folder-label"; return ( - {!isFromParentType ? destination : sourceDestination} + {!isFromRoom ? destination : sourceDestination} ); From 2aad7788721ba1cf53fa97e36b7e8d7244abf260 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Thu, 25 Jul 2024 15:59:17 +0400 Subject: [PATCH 15/61] Client: PublicRoom: fix password information text overflow --- .../src/pages/PublicRoom/sub-components/RoomStyles.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/client/src/pages/PublicRoom/sub-components/RoomStyles.js b/packages/client/src/pages/PublicRoom/sub-components/RoomStyles.js index 6ab6c4e706..c63e7eb4b3 100644 --- a/packages/client/src/pages/PublicRoom/sub-components/RoomStyles.js +++ b/packages/client/src/pages/PublicRoom/sub-components/RoomStyles.js @@ -70,6 +70,7 @@ export const StyledPage = styled.div` .public-room-text { margin: 8px 0; + white-space: wrap; } .public-room-name { @@ -83,12 +84,6 @@ export const StyledPage = styled.div` min-width: 32px; min-height: 32px; } - - .public-room-text { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } } `; From a90aff601da114eeb3b2764f420a308d683e9013 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Thu, 25 Jul 2024 16:44:40 +0400 Subject: [PATCH 16/61] Fix Bug 69398 - Files.Editor. There is no transition from viewing mode to editing mode in the editor using the Edit current file button. --- packages/doceditor/src/utils/events.ts | 37 +++++++++++++------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/doceditor/src/utils/events.ts b/packages/doceditor/src/utils/events.ts index 5ec6d17acb..45ec4597e2 100644 --- a/packages/doceditor/src/utils/events.ts +++ b/packages/doceditor/src/utils/events.ts @@ -81,30 +81,31 @@ export const onSDKRequestEditRights = async ( const url = window.location.href; const isPDF = documentType === "pdf"; - if (isPDF) { - const newURL = new URL(url); + let newURL = new URL(url); - if (newURL.searchParams.has("action")) { - newURL.searchParams.delete("action"); + if ( + !isPDF && + fileInfo?.viewAccessibility?.MustConvert && + fileInfo?.security?.Convert + ) { + try { + const response = await convertDocumentUrl(fileInfo.id); + if (response && response.webUrl) { + newURL = new URL(response.webUrl); + } else { + throw new Error("Invalid response data"); + } + } catch (error) { + console.error("Error converting document", { error }); + return; } + } else { + if (newURL.searchParams.has("action")) newURL.searchParams.delete("action"); newURL.searchParams.append("action", "edit"); - - history.pushState({}, "", newURL.toString()); - document.location.reload(); - - return; } - let convertUrl = url; - - if (fileInfo?.viewAccessibility?.MustConvert && fileInfo?.security?.Convert) { - const newUrl = await convertDocumentUrl(fileInfo.id); - if (newUrl) { - convertUrl = newUrl.webUrl; - } - } - history.pushState({}, "", convertUrl); + history.pushState({}, "", newURL.toString()); document.location.reload(); }; From 38af49f027291d73e1157a41e9d1a782169d736e Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 25 Jul 2024 17:11:35 +0300 Subject: [PATCH 17/61] Web: Components: Table: fixed imports --- .../client/src/store/AccountsHotkeysStore.ts | 2 +- packages/client/src/store/HotkeyStore.js | 2 +- .../components/table/Table.constants.ts | 31 ----- .../shared/components/table/Table.utils.ts | 6 +- .../shared/components/table/TableHeader.tsx | 130 +++++++++--------- packages/shared/components/table/index.ts | 5 +- packages/shared/utils/device.ts | 1 + 7 files changed, 76 insertions(+), 101 deletions(-) delete mode 100644 packages/shared/components/table/Table.constants.ts diff --git a/packages/client/src/store/AccountsHotkeysStore.ts b/packages/client/src/store/AccountsHotkeysStore.ts index d8a669658c..6320e49d08 100644 --- a/packages/client/src/store/AccountsHotkeysStore.ts +++ b/packages/client/src/store/AccountsHotkeysStore.ts @@ -28,7 +28,7 @@ import { makeAutoObservable } from "mobx"; import { isMobile } from "@docspace/shared/utils"; import { checkDialogsOpen } from "@docspace/shared/utils/checkDialogsOpen"; import { TUser, TUserGroup } from "@docspace/shared/api/people/types"; -import { TABLE_HEADER_HEIGHT } from "@docspace/shared/components/table/Table.constants"; +import { TABLE_HEADER_HEIGHT } from "@docspace/shared/utils/device"; type AccountsType = TUser | TUserGroup; diff --git a/packages/client/src/store/HotkeyStore.js b/packages/client/src/store/HotkeyStore.js index 4976a22ffa..46ed343cdb 100644 --- a/packages/client/src/store/HotkeyStore.js +++ b/packages/client/src/store/HotkeyStore.js @@ -37,7 +37,7 @@ import getFilesFromEvent from "@docspace/shared/components/drag-and-drop/get-fil import config from "PACKAGE_FILE"; import { getCategoryUrl } from "SRC_DIR/helpers/utils"; import { encryptionUploadDialog } from "../helpers/encryptionUploadDialog"; -import { TABLE_HEADER_HEIGHT } from "@docspace/shared/components/table/Table.constants"; +import { TABLE_HEADER_HEIGHT } from "@docspace/shared/utils/device"; class HotkeyStore { filesStore; diff --git a/packages/shared/components/table/Table.constants.ts b/packages/shared/components/table/Table.constants.ts deleted file mode 100644 index eded7701d4..0000000000 --- a/packages/shared/components/table/Table.constants.ts +++ /dev/null @@ -1,31 +0,0 @@ -// (c) Copyright Ascensio System SIA 2009-2024 -// -// This program is a free software product. -// You can redistribute it and/or modify it under the terms -// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software -// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended -// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of -// any third-party rights. -// -// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see -// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html -// -// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021. -// -// The interactive user interfaces in modified source and object code versions of the Program must -// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3. -// -// Pursuant to Section 7(b) of the License you must retain the original Product logo when -// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under -// trademark law for use of our trademarks. -// -// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing -// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 -// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - -export const DEFAULT_MIN_COLUMN_SIZE = 110; -export const SETTINGS_SIZE = 24; -export const CONTAINER_MARGIN = 25; -export const MIN_SIZE_FIRST_COLUMN = 210; -export const TABLE_HEADER_HEIGHT = 40; diff --git a/packages/shared/components/table/Table.utils.ts b/packages/shared/components/table/Table.utils.ts index 06222a1f04..04957826d9 100644 --- a/packages/shared/components/table/Table.utils.ts +++ b/packages/shared/components/table/Table.utils.ts @@ -24,7 +24,10 @@ // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode -import { SETTINGS_SIZE } from "./Table.constants"; +export const MIN_SIZE_FIRST_COLUMN = 210; +export const DEFAULT_MIN_COLUMN_SIZE = 110; +export const SETTINGS_SIZE = 24; +export const HANDLE_OFFSET = 8; export const getSubstring = (str: string) => +str.substring(0, str.length - 2); @@ -33,7 +36,6 @@ export const checkingForUnfixedSize = ( defaultColumnSize: number, ) => { return ( - item !== "24px" && // TODO: SETTINGS_SIZE is not imported item !== `${SETTINGS_SIZE}px` && item !== `${defaultColumnSize}px` && item !== "0px" diff --git a/packages/shared/components/table/TableHeader.tsx b/packages/shared/components/table/TableHeader.tsx index c49ab493be..ba81a9db19 100644 --- a/packages/shared/components/table/TableHeader.tsx +++ b/packages/shared/components/table/TableHeader.tsx @@ -38,16 +38,17 @@ import { import { TTableColumn, TableHeaderProps } from "./Table.types"; import { TableSettings } from "./sub-components/TableSettings"; import { TableHeaderCell } from "./sub-components/TableHeaderCell"; -import { checkingForUnfixedSize, getSubstring } from "./Table.utils"; +import { + DEFAULT_MIN_COLUMN_SIZE, + MIN_SIZE_FIRST_COLUMN, + SETTINGS_SIZE, + HANDLE_OFFSET, + checkingForUnfixedSize, + getSubstring, +} from "./Table.utils"; import { isDesktop } from "../../utils"; -const defaultMinColumnSize = 110; -const settingsSize = 24; - -const minSizeFirstColumn = 210; -const handleOffset = 8; - -class TableHeader extends React.Component< +class TableHeaderComponent extends React.Component< TableHeaderProps, { hideColumns: boolean; columnIndex: null | number } > { @@ -137,7 +138,7 @@ class TableHeader extends React.Component< if (leftColumn) { const minSize = leftColumn.dataset.minWidth ? leftColumn.dataset.minWidth - : defaultMinColumnSize; + : DEFAULT_MIN_COLUMN_SIZE; if (leftColumn.getBoundingClientRect().width <= +minSize) { if (colIndex < 0) return false; @@ -185,17 +186,17 @@ class TableHeader extends React.Component< const defaultColumn = document.getElementById(`column_${colIndex}`); if (!defaultColumn || defaultColumn.dataset.defaultSize) return; - if (column2Width + offset - handleOffset >= defaultMinColumnSize) { - widths[+columnIndex] = `${newWidth + handleOffset}px`; - widths[colIndex] = `${column2Width + offset - handleOffset}px`; - } else if (column2Width !== defaultMinColumnSize) { + if (column2Width + offset - HANDLE_OFFSET >= DEFAULT_MIN_COLUMN_SIZE) { + widths[+columnIndex] = `${newWidth + HANDLE_OFFSET}px`; + widths[colIndex] = `${column2Width + offset - HANDLE_OFFSET}px`; + } else if (column2Width !== DEFAULT_MIN_COLUMN_SIZE) { const width = getSubstring(widths[+columnIndex]) + getSubstring(widths[+colIndex]) - - defaultMinColumnSize; + DEFAULT_MIN_COLUMN_SIZE; widths[+columnIndex] = `${width}px`; - widths[colIndex] = `${defaultMinColumnSize}px`; + widths[colIndex] = `${DEFAULT_MIN_COLUMN_SIZE}px`; } else { if (colIndex === columns.length) return false; this.moveToRight(widths, newWidth, colIndex + 1); @@ -229,7 +230,7 @@ class TableHeader extends React.Component< )?.defaultSize; const widthColumns = - containerWidth - settingsSize - (defaultSizeColumn || 0); + containerWidth - SETTINGS_SIZE - (defaultSizeColumn || 0); const newColumnSize = defaultSize || widthColumns / allColumnsLength; @@ -247,9 +248,9 @@ class TableHeader extends React.Component< }; if ( - (indexOfMaxSize === 0 && newSizeMaxColumn < minSizeFirstColumn) || - (indexOfMaxSize !== 0 && newSizeMaxColumn < defaultMinColumnSize) || - newColumnSize < defaultMinColumnSize || + (indexOfMaxSize === 0 && newSizeMaxColumn < MIN_SIZE_FIRST_COLUMN) || + (indexOfMaxSize !== 0 && newSizeMaxColumn < DEFAULT_MIN_COLUMN_SIZE) || + newColumnSize < DEFAULT_MIN_COLUMN_SIZE || enableColumnsLength === 1 ) return ResetColumnsSize(); @@ -277,14 +278,14 @@ class TableHeader extends React.Component< const minSize = column.dataset.minWidth ? column.dataset.minWidth - : defaultMinColumnSize; + : DEFAULT_MIN_COLUMN_SIZE; - if (newWidth <= +minSize - handleOffset) { + if (newWidth <= +minSize - HANDLE_OFFSET) { const currentWidth = getSubstring(widths[+columnIndex]); // Move left if (currentWidth !== +minSize) { - newWidth = +minSize - handleOffset; + newWidth = +minSize - HANDLE_OFFSET; this.moveToRight(widths, newWidth); } else this.moveToLeft(widths, newWidth); } else { @@ -368,7 +369,7 @@ class TableHeader extends React.Component< if (storageSize) { const splitStorage = storageSize.split(" "); - if (getSubstring(splitStorage[0]) <= defaultMinColumnSize) { + if (getSubstring(splitStorage[0]) <= DEFAULT_MIN_COLUMN_SIZE) { localStorage.removeItem(columnStorageName); this.onResize(); return; @@ -406,7 +407,7 @@ class TableHeader extends React.Component< .map((column) => getSubstring(column)) .reduce((x, y) => x + y); - const oldWidth = defaultWidth - defaultSize - settingsSize; + const oldWidth = defaultWidth - defaultSize - SETTINGS_SIZE; let str = ""; let gridTemplateColumnsWithoutOverfilling: string[] = []; @@ -423,7 +424,7 @@ class TableHeader extends React.Component< ? storageInfoPanelSize.split(" ") : tableContainer; - let containerMinWidth = containerWidth - defaultSize - settingsSize; + let containerMinWidth = containerWidth - defaultSize - SETTINGS_SIZE; tableInfoPanelContainer.forEach((item, index) => { const column = document.getElementById(`column_${index}`); @@ -435,12 +436,12 @@ class TableHeader extends React.Component< if ( enable && (item !== `${defaultSize}px` || `${defaultSize}px` === `0px`) && - item !== `${settingsSize}px` + item !== `${SETTINGS_SIZE}px` ) { if (column?.dataset?.minWidth) { containerMinWidth -= +column.dataset.minWidth; } else { - containerMinWidth -= defaultMinColumnSize; + containerMinWidth -= DEFAULT_MIN_COLUMN_SIZE; } } }); @@ -460,11 +461,11 @@ class TableHeader extends React.Component< if (column?.dataset?.minWidth && column?.dataset?.default) { gridTemplateColumns.push( - `${containerWidth - defaultSize - settingsSize}px`, + `${containerWidth - defaultSize - SETTINGS_SIZE}px`, ); } else if ( item === `${defaultSize}px` || - item === `${settingsSize}px` + item === `${SETTINGS_SIZE}px` ) { gridTemplateColumns.push(item); } else { @@ -476,7 +477,7 @@ class TableHeader extends React.Component< let hasGridTemplateColumnsWithoutOverfilling = false; if (infoPanelVisible) { if (!hideColumns) { - const contentWidth = containerWidth - defaultSize - settingsSize; + const contentWidth = containerWidth - defaultSize - SETTINGS_SIZE; let enabledColumnsCount = 0; @@ -485,7 +486,7 @@ class TableHeader extends React.Component< index !== 0 && item !== "0px" && item !== `${defaultSize}px` && - item !== `${settingsSize}px` + item !== `${SETTINGS_SIZE}px` ) { enabledColumnsCount += 1; } @@ -496,10 +497,10 @@ class TableHeader extends React.Component< .map((column) => getSubstring(column)) .reduce((x, y) => x + y) - defaultSize - - settingsSize; + SETTINGS_SIZE; if ( - contentWidth - enabledColumnsCount * defaultMinColumnSize > + contentWidth - enabledColumnsCount * DEFAULT_MIN_COLUMN_SIZE > getSubstring(tableInfoPanelContainer[0]) ) { const currentContentWidth = @@ -523,7 +524,7 @@ class TableHeader extends React.Component< if (!enable) { gridTemplateColumns.push("0px"); - } else if (item !== `${settingsSize}px`) { + } else if (item !== `${SETTINGS_SIZE}px`) { const percent = enabledColumnsCount === 0 ? 100 @@ -535,17 +536,17 @@ class TableHeader extends React.Component< const newItemWidth = defaultColumnSize ? `${defaultColumnSize}px` : (currentContentWidth * percent) / 100 > - defaultMinColumnSize + DEFAULT_MIN_COLUMN_SIZE ? `${(currentContentWidth * percent) / 100}px` - : `${defaultMinColumnSize}px`; + : `${DEFAULT_MIN_COLUMN_SIZE}px`; if ( (currentContentWidth * percent) / 100 < - defaultMinColumnSize && + DEFAULT_MIN_COLUMN_SIZE && !defaultColumnSize ) { overWidth += - defaultMinColumnSize - + DEFAULT_MIN_COLUMN_SIZE - (currentContentWidth * percent) / 100; } @@ -564,10 +565,10 @@ class TableHeader extends React.Component< index !== 0 && column !== "0px" && column !== `${defaultSize}px` && - column !== `${settingsSize}px` && - columnWidth > defaultMinColumnSize + column !== `${SETTINGS_SIZE}px` && + columnWidth > DEFAULT_MIN_COLUMN_SIZE ) { - const availableWidth = columnWidth - defaultMinColumnSize; + const availableWidth = columnWidth - DEFAULT_MIN_COLUMN_SIZE; if (availableWidth < Math.abs(overWidth)) { overWidth = Math.abs(overWidth) - availableWidth; @@ -597,15 +598,15 @@ class TableHeader extends React.Component< if (!enable) { gridTemplateColumns.push("0px"); - } else if (item !== `${settingsSize}px`) { + } else if (item !== `${SETTINGS_SIZE}px`) { const newItemWidth = defaultColumnSize ? `${defaultColumnSize}px` : index === 0 ? `${ contentWidth - - enabledColumnsCount * defaultMinColumnSize + enabledColumnsCount * DEFAULT_MIN_COLUMN_SIZE }px` - : `${defaultMinColumnSize}px`; + : `${DEFAULT_MIN_COLUMN_SIZE}px`; gridTemplateColumns.push(newItemWidth); } else { @@ -645,7 +646,7 @@ class TableHeader extends React.Component< getSubstring(gridTemplateColumns[+index - colIndex]) + getSubstring(item) }px`; - } else if (item !== `${settingsSize}px`) { + } else if (item !== `${SETTINGS_SIZE}px`) { const percent = (getSubstring(item) / oldWidth) * 100; if (percent === 100) { @@ -662,30 +663,31 @@ class TableHeader extends React.Component< let newItemWidth = defaultColumnSize ? `${defaultColumnSize}px` : percent === 0 - ? `${defaultMinColumnSize}px` + ? `${DEFAULT_MIN_COLUMN_SIZE}px` : `${ - ((containerWidth - defaultSize - settingsSize) * + ((containerWidth - defaultSize - SETTINGS_SIZE) * percent) / 100 }px`; const minWidth = column?.dataset?.minWidth; - const minSize = minWidth ? +minWidth : minSizeFirstColumn; + const minSize = minWidth ? +minWidth : MIN_SIZE_FIRST_COLUMN; // Checking whether the first column is less than the minimum width if (+index === 0 && getSubstring(newItemWidth) < minSize) { - overWidth += minSizeFirstColumn - getSubstring(newItemWidth); - newItemWidth = `${minSizeFirstColumn}px`; + overWidth += MIN_SIZE_FIRST_COLUMN - getSubstring(newItemWidth); + newItemWidth = `${MIN_SIZE_FIRST_COLUMN}px`; } // Checking whether columns are smaller than the minimum width if ( +index !== 0 && !defaultColumnSize && - getSubstring(newItemWidth) < defaultMinColumnSize + getSubstring(newItemWidth) < DEFAULT_MIN_COLUMN_SIZE ) { - overWidth += defaultMinColumnSize - getSubstring(newItemWidth); - newItemWidth = `${defaultMinColumnSize}px`; + overWidth += + DEFAULT_MIN_COLUMN_SIZE - getSubstring(newItemWidth); + newItemWidth = `${DEFAULT_MIN_COLUMN_SIZE}px`; } gridTemplateColumns.push(newItemWidth); @@ -778,9 +780,11 @@ class TableHeader extends React.Component< const column = document.getElementById(`column_${index}`); const minWidth = column?.dataset?.minWidth; - const minSize = minWidth ? +minWidth : minSizeFirstColumn; + const minSize = minWidth ? +minWidth : MIN_SIZE_FIRST_COLUMN; - if ((index === 0 ? minSize : defaultMinColumnSize) !== getSubstring(item)) + if ( + (index === 0 ? minSize : DEFAULT_MIN_COLUMN_SIZE) !== getSubstring(item) + ) countColumns += 1; }); @@ -792,21 +796,21 @@ class TableHeader extends React.Component< const column = document.getElementById(`column_${index}`); const minWidth = column?.dataset?.minWidth; - const minSize = minWidth ? +minWidth : minSizeFirstColumn; + const minSize = minWidth ? +minWidth : MIN_SIZE_FIRST_COLUMN; const itemSubstring = getSubstring(item); - if ((index === 0 ? minSize : defaultMinColumnSize) === itemSubstring) + if ((index === 0 ? minSize : DEFAULT_MIN_COLUMN_SIZE) === itemSubstring) return; const differenceWithMinimum = - itemSubstring - (index === 0 ? minSize : defaultMinColumnSize); + itemSubstring - (index === 0 ? minSize : DEFAULT_MIN_COLUMN_SIZE); if (differenceWithMinimum >= addWidth) { newGridTemplateColumns[index] = `${itemSubstring - addWidth}px`; } else { newGridTemplateColumns[index] = `${ - index === 0 ? minSize : defaultMinColumnSize + index === 0 ? minSize : DEFAULT_MIN_COLUMN_SIZE }px`; } }); @@ -857,7 +861,7 @@ class TableHeader extends React.Component< columns.find((col) => col.defaultSize && col.enable)?.defaultSize || 0; const containerWidth = - container.clientWidth - defaultColumnSize - settingsSize; + container.clientWidth - defaultColumnSize - SETTINGS_SIZE; const firstColumnPercent = enableColumns.length > 0 ? 40 : 100; const percent = enableColumns.length > 0 ? 60 / enableColumns.length : 0; @@ -877,7 +881,7 @@ class TableHeader extends React.Component< } } - str += `${settingsSize}px`; + str += `${SETTINGS_SIZE}px`; if (container) container.style.gridTemplateColumns = str; if (this.headerRef && this.headerRef.current) { @@ -965,4 +969,6 @@ class TableHeader extends React.Component< } } -export default withTheme(TableHeader); +const TableHeader = withTheme(TableHeaderComponent); + +export { TableHeader }; diff --git a/packages/shared/components/table/index.ts b/packages/shared/components/table/index.ts index 63c5607549..3165c4d901 100644 --- a/packages/shared/components/table/index.ts +++ b/packages/shared/components/table/index.ts @@ -24,13 +24,10 @@ // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode -import TableHeader from "./TableHeader"; - -export { TableHeader }; export { TableContainer } from "./TableContainer"; export { TableBody } from "./TableBody"; export { TableRow } from "./TableRow"; -// export { TableHeader } from "./TableHeader"; +export { TableHeader } from "./TableHeader"; export { TableGroupMenu } from "./TableGroupMenu"; export { TableCell } from "./sub-components/TableCell"; diff --git a/packages/shared/utils/device.ts b/packages/shared/utils/device.ts index 158b647ce7..1900a6a3cf 100644 --- a/packages/shared/utils/device.ts +++ b/packages/shared/utils/device.ts @@ -25,6 +25,7 @@ // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode export const INFO_PANEL_WIDTH = 400; +export const TABLE_HEADER_HEIGHT = 40; export function checkIsSSR() { return typeof window === "undefined"; From bb464b35392f07d9467495be9a80ecce01a168c5 Mon Sep 17 00:00:00 2001 From: Aleksandr Lushkin Date: Thu, 25 Jul 2024 16:34:22 +0200 Subject: [PATCH 18/61] Client: Groups: InsideGroup fix when sort options don't match enabled columns --- .../AccountsBody/Groups/TableView/GroupsTableHeader.js | 8 +++++++- .../AccountsBody/InsideGroup/TableView/TableHeader.js | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js index 8f854cb397..6259e39ac7 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/Groups/TableView/GroupsTableHeader.js @@ -61,6 +61,8 @@ class GroupsTableHeader extends React.Component { ]; const columns = props.getColumns(defaultColumns); + const tableColumns = columns.map((c) => c.enable && c.key); + this.setTableColumns(tableColumns); this.state = { columns }; } @@ -77,7 +79,7 @@ class GroupsTableHeader extends React.Component { this.setState({ columns }); const tableColumns = columns.map((c) => c.enable && c.key); - localStorage.setItem(`${TABLE_COLUMNS}=${this.props.userId}`, tableColumns); + this.setTableColumns(tableColumns); const event = new Event(Events.CHANGE_COLUMN); window.dispatchEvent(event); @@ -103,6 +105,10 @@ class GroupsTableHeader extends React.Component { navigate(`${location.pathname}?${newFilter.toUrlParams()}`); }; + setTableColumns = (tableColumns) => { + localStorage.setItem(`${TABLE_COLUMNS}=${this.props.userId}`, tableColumns); + }; + render() { const { columns } = this.state; const { diff --git a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js index 3491f794e2..94df06e920 100644 --- a/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js +++ b/packages/client/src/pages/Home/Section/AccountsBody/InsideGroup/TableView/TableHeader.js @@ -102,6 +102,8 @@ class InsideGroupTableHeader extends React.Component { }); const columns = props.getColumns(defaultColumns); + const tableColumns = columns.map((c) => c.enable && c.key); + this.setTableColumns(tableColumns); this.state = { columns }; } @@ -118,7 +120,7 @@ class InsideGroupTableHeader extends React.Component { this.setState({ columns }); const tableColumns = columns.map((c) => c.enable && c.key); - localStorage.setItem(`${TABLE_COLUMNS}=${this.props.userId}`, tableColumns); + this.setTableColumns(tableColumns); const event = new Event(Events.CHANGE_COLUMN); @@ -156,6 +158,10 @@ class InsideGroupTableHeader extends React.Component { navigate(`${location.pathname}?${newFilter.toUrlParams()}`); }; + setTableColumns = (tableColumns) => { + localStorage.setItem(`${TABLE_COLUMNS}=${this.props.userId}`, tableColumns); + }; + render() { const { columns } = this.state; const { From 7c9cb4a9124c42cd5ac31539c1645b52580967bc Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 25 Jul 2024 17:44:18 +0300 Subject: [PATCH 19/61] Fix Bug 69407 - Rooms.Archive. Fixed backUrl --- packages/doceditor/src/utils/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/doceditor/src/utils/index.ts b/packages/doceditor/src/utils/index.ts index ffef1ef49f..6fb7cf7ebd 100644 --- a/packages/doceditor/src/utils/index.ts +++ b/packages/doceditor/src/utils/index.ts @@ -48,6 +48,8 @@ export const getBackUrl = ( } else { backUrl = `/rooms/shared/${folderId}/filter?folder=${folderId}`; } + } else if (rootFolderType === FolderType.Archive) { + backUrl = `/rooms/archived/${folderId}/filter?folder=${folderId}`; } else { if ( rootFolderType === FolderType.SHARE || From 06fe7191990a76d12600208d45544ff4b86e14df Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Fri, 26 Jul 2024 11:50:15 +0400 Subject: [PATCH 20/61] InfoPanel: History: refactoring --- .../HistoryBlockContent/MainTextFolderInfo.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx index e4614a690c..05a4f70a4d 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx +++ b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/MainTextFolderInfo.tsx @@ -54,23 +54,23 @@ const HistoryMainTextFolderInfo = ({ if (!parentTitle) return null; - const isRoom = parentType === 0; - const isFromRoom = fromParentType === 0; + const isFolder = parentType === 0; + const isFromFolder = fromParentType === 0; - const destination = isRoom + const destination = isFolder ? t("FeedLocationLabel", { folderTitle: parentTitle }) : t("FeedLocationRoomLabel", { folderTitle: parentTitle }); - const sourceDestination = isFromRoom + const sourceDestination = isFromFolder ? t("FeedLocationLabelFrom", { folderTitle: fromParentTitle }) : t("FeedLocationRoomLabel", { folderTitle: parentTitle }); - const className = !isFromRoom ? "folder-label" : "source-folder-label"; + const className = isFromFolder ? "source-folder-label" : "folder-label"; return ( - {!isFromRoom ? destination : sourceDestination} + {isFromFolder ? sourceDestination : destination} ); From 3f0af4117083e8476e88a77b12952d38374d1f25 Mon Sep 17 00:00:00 2001 From: Alexey Safronov Date: Fri, 26 Jul 2024 13:27:35 +0400 Subject: [PATCH 21/61] Fix Bug 69417 - WordPress. Seamless DocSpace authorization does not work in a frame --- packages/shared/store/AuthStore.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/store/AuthStore.ts b/packages/shared/store/AuthStore.ts index a7dea4f35a..91da712b6a 100644 --- a/packages/shared/store/AuthStore.ts +++ b/packages/shared/store/AuthStore.ts @@ -369,7 +369,7 @@ class AuthStore { login = async (user: TUser, hash: string, session = true) => { try { - const response = (await api.user.login(user, hash, session)) as { + const response = (await api.user.login(user, hash, "", session)) as { token: string; tfa: string; error: { message: unknown }; From 52f799239328ba3646095b240bbf647cdd42b11b Mon Sep 17 00:00:00 2001 From: Elyor Djalilov Date: Fri, 26 Jul 2024 14:43:46 +0500 Subject: [PATCH 22/61] Web: Client: InfoPanel: History. fix crash --- .../Body/views/History/HistoryBlockContent/RoomExternalLink.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/RoomExternalLink.tsx b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/RoomExternalLink.tsx index c263c8f583..1dfcf4c3db 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/RoomExternalLink.tsx +++ b/packages/client/src/pages/Home/InfoPanel/Body/views/History/HistoryBlockContent/RoomExternalLink.tsx @@ -114,7 +114,7 @@ export default inject(({ dialogsStore, infoPanelStore }) => { const { infoPanelSelection } = infoPanelStore; const { setLinkParams, setEditLinkPanelIsVisible } = dialogsStore; const { id, roomType, security } = infoPanelSelection!; - const { EditRoom } = security!; + const { EditRoom } = security || {}; const isFormRoom = roomType === RoomsType.FormRoom; From fbbf03f366fe613036832d059df22e28e0e62653 Mon Sep 17 00:00:00 2001 From: Akmal Isomadinov Date: Fri, 26 Jul 2024 15:57:28 +0500 Subject: [PATCH 23/61] Fixed modal form --- .../client/src/pages/Home/Hooks/useFiles.js | 13 +++++++-- packages/client/src/pages/Home/index.js | 4 +++ .../src/hooks/useStartFillingSelectDialog.ts | 28 +++++++++++++++++-- packages/doceditor/src/utils/index.ts | 7 +++-- packages/shared/constants/index.ts | 1 + 5 files changed, 45 insertions(+), 8 deletions(-) diff --git a/packages/client/src/pages/Home/Hooks/useFiles.js b/packages/client/src/pages/Home/Hooks/useFiles.js index defecd2b6c..5e72a8b51c 100644 --- a/packages/client/src/pages/Home/Hooks/useFiles.js +++ b/packages/client/src/pages/Home/Hooks/useFiles.js @@ -32,7 +32,7 @@ import FilesFilter from "@docspace/shared/api/files/filter"; import RoomsFilter from "@docspace/shared/api/rooms/filter"; import { getGroup } from "@docspace/shared/api/groups"; import { getUserById } from "@docspace/shared/api/people"; -import { MEDIA_VIEW_URL } from "@docspace/shared/constants"; +import { CREATED_FORM_KEY, MEDIA_VIEW_URL } from "@docspace/shared/constants"; import { Events, @@ -78,6 +78,7 @@ const useFiles = ({ scrollToTop, selectedFolderStore, + wsCreatedPDFForm, }) => { const navigate = useNavigate(); const { id } = useParams(); @@ -292,7 +293,15 @@ const useFiles = ({ ); } else { const folderId = filter.folder; - return fetchFiles(folderId, filter); + return fetchFiles(folderId, filter)?.finally(() => { + const data = sessionStorage.getItem(CREATED_FORM_KEY); + if (data) { + wsCreatedPDFForm({ + data, + }); + sessionStorage.removeItem(CREATED_FORM_KEY); + } + }); } } diff --git a/packages/client/src/pages/Home/index.js b/packages/client/src/pages/Home/index.js index 783a72502a..197ad6b00a 100644 --- a/packages/client/src/pages/Home/index.js +++ b/packages/client/src/pages/Home/index.js @@ -160,6 +160,7 @@ const PureHome = (props) => { getFolderModel, scrollToTop, isEmptyGroups, + wsCreatedPDFForm, } = props; //console.log(t("ComingSoon")) @@ -206,6 +207,7 @@ const PureHome = (props) => { scrollToTop, selectedFolderStore, + wsCreatedPDFForm, }); const { showUploadPanel } = useOperations({ @@ -500,6 +502,7 @@ export default inject( removeTagsFromRoom, getRooms, scrollToTop, + wsCreatedPDFForm, } = filesStore; const { updateProfileCulture } = peopleStore.targetUserStore; @@ -686,6 +689,7 @@ export default inject( getFolderModel, scrollToTop, isEmptyGroups, + wsCreatedPDFForm, }; }, )(observer(Home)); diff --git a/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts b/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts index e7735b5d9e..4b04721152 100644 --- a/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts +++ b/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts @@ -34,7 +34,7 @@ import { } from "@docspace/shared/api/files"; // import { getOperationProgress } from "@docspace/shared/utils/getOperationProgress"; import { toastr } from "@docspace/shared/components/toast"; -import { EDITOR_ID } from "@docspace/shared/constants"; +import { CREATED_FORM_KEY, EDITOR_ID } from "@docspace/shared/constants"; import type { TFile, @@ -52,6 +52,13 @@ import type { TData } from "@docspace/shared/components/toast/Toast.type"; import { saveAs } from "@/utils"; import type { ConflictStateType } from "@/types"; +type SuccessResponseType = { + form: TFile; + message: string; +}; +type FaildResponseType = string; +type ResponseType = SuccessResponseType | FaildResponseType; + const DefaultConflictDataDialogState: ConflictStateType = { visible: false, resolve: () => {}, @@ -70,6 +77,12 @@ const hasFileUrl = (arg: object): arg is { data: { url: string } } => { ); }; +const isSuccessResponse = ( + res: ResponseType | undefined, +): res is SuccessResponseType => { + return Boolean(res) && typeof res === "object" && "form" in res; +}; + const useStartFillingSelectDialog = (fileInfo: TFile | undefined) => { // const { t } = useTranslation(["Common"]); const resolveRef = useRef<(value: string | PromiseLike) => void>(); @@ -179,14 +192,22 @@ const useStartFillingSelectDialog = (fileInfo: TFile | undefined) => { const fileUrl = await getFileUrl(); - const response = await saveAs( + const response = await saveAs( fileInfo.title, fileUrl, selectedItemId, false, + "createForm", ); - const [key, value] = response?.split(":") ?? []; + if (isSuccessResponse(response)) { + const { form } = response; + + sessionStorage.setItem(CREATED_FORM_KEY, JSON.stringify(form)); + } + + const [key, value] = + typeof response === "string" ? response.split(":") : []; // await copyToFolder( // Number(selectedItemId), @@ -210,6 +231,7 @@ const useStartFillingSelectDialog = (fileInfo: TFile | undefined) => { if (key === "error") { toastr.error(value); } else { + requestRunning.current = false; window.location.replace(url.toString()); onClose(); } diff --git a/packages/doceditor/src/utils/index.ts b/packages/doceditor/src/utils/index.ts index ffef1ef49f..24f5d6d56e 100644 --- a/packages/doceditor/src/utils/index.ts +++ b/packages/doceditor/src/utils/index.ts @@ -99,14 +99,15 @@ export const getDataSaveAs = async (params: string) => { } }; -export const saveAs = ( +export const saveAs = ( title: string, url: string, folderId: string | number, openNewTab: boolean, + action = "create", ) => { const options = { - action: "create", + action, fileuri: url, title: title, folderid: folderId, @@ -115,7 +116,7 @@ export const saveAs = ( const params = toUrlParams(options, true); if (!openNewTab) { - return getDataSaveAs(params); + return getDataSaveAs(params) as Promise; } else { const handlerUrl = combineUrl( window.ClientConfig?.proxy?.url, diff --git a/packages/shared/constants/index.ts b/packages/shared/constants/index.ts index d5430be1b7..92335a4d41 100644 --- a/packages/shared/constants/index.ts +++ b/packages/shared/constants/index.ts @@ -53,6 +53,7 @@ export const ROOM = "room"; export const USERS = "users"; export const USERS_IN_ROOM = "usersInRoom"; export const PDF_FORM_DIALOG_KEY = "pdf_form_dialog"; +export const CREATED_FORM_KEY = "created_form_key"; export const COUNT_FOR_SHOWING_BAR = 2; export const PERCENTAGE_FOR_SHOWING_BAR = 90; From da2f32938a593b74759149b0d55d1e7ab9eb8bfc Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Fri, 26 Jul 2024 14:02:26 +0300 Subject: [PATCH 24/61] Web: Components: Selector: fixed styles --- packages/shared/components/selector/Selector.styled.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/shared/components/selector/Selector.styled.ts b/packages/shared/components/selector/Selector.styled.ts index 6653cdd129..244fa9c175 100644 --- a/packages/shared/components/selector/Selector.styled.ts +++ b/packages/shared/components/selector/Selector.styled.ts @@ -112,11 +112,11 @@ const StyledBody = styled.div<{ height: ${(props) => props.footerVisible ? props.withHeader - ? `calc(100% - 16px - ${props.footerHeight}px - ${props.headerHeight}px)` - : `calc(100% - 16px - ${props.footerHeight}px)` + ? `calc(100% - ${props.footerHeight}px - ${props.headerHeight}px)` + : `calc(100% - ${props.footerHeight}px)` : props.withHeader - ? `calc(100% - 16px - ${props.headerHeight}px)` - : `calc(100% - 16px)`}; + ? `calc(100% - ${props.headerHeight}px)` + : "100%"}; padding: ${({ withTabs }) => (withTabs ? "0" : "16px 0 0 0")}; From 99cd55ff9e680402cda1a00bf3e5c28870237945 Mon Sep 17 00:00:00 2001 From: Akmal Isomadinov Date: Fri, 26 Jul 2024 16:05:05 +0500 Subject: [PATCH 25/61] Client:useStartFillingSelectDialog Fix --- packages/doceditor/src/hooks/useStartFillingSelectDialog.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts b/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts index 4b04721152..6472d3c47d 100644 --- a/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts +++ b/packages/doceditor/src/hooks/useStartFillingSelectDialog.ts @@ -231,7 +231,6 @@ const useStartFillingSelectDialog = (fileInfo: TFile | undefined) => { if (key === "error") { toastr.error(value); } else { - requestRunning.current = false; window.location.replace(url.toString()); onClose(); } From 50bb01cdd116f4eaedcb23de85f3cb6f9673614e Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Fri, 26 Jul 2024 15:13:40 +0300 Subject: [PATCH 26/61] Fix Bug 69422 - Rooms.ChangeOwner. Fixed leaving the room --- .../panels/ChangeRoomOwnerPanel/index.js | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/packages/client/src/components/panels/ChangeRoomOwnerPanel/index.js b/packages/client/src/components/panels/ChangeRoomOwnerPanel/index.js index 2874ec40a6..e380df266c 100644 --- a/packages/client/src/components/panels/ChangeRoomOwnerPanel/index.js +++ b/packages/client/src/components/panels/ChangeRoomOwnerPanel/index.js @@ -24,7 +24,7 @@ // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode -import { useState, useEffect } from "react"; +import { useState } from "react"; import { inject, observer } from "mobx-react"; import styled, { css } from "styled-components"; import { Aside } from "@docspace/shared/components/aside"; @@ -83,20 +83,12 @@ const ChangeRoomOwner = (props) => { const [isLoading, setIsLoading] = useState(false); - useEffect(() => { - document.addEventListener("keyup", onKeyUp, false); - - return () => { - document.removeEventListener("keyup", onKeyUp, false); - }; - }, []); - - const onKeyUp = (e) => { - if (e.keyCode === 27) onClose(); - if (e.keyCode === 13 || e.which === 13) onChangeRoomOwner(); - }; - - const onChangeRoomOwner = async (user, isChecked) => { + const onChangeRoomOwner = async ( + user, + selectedAccess, + newFooterInputValue, + isChecked, + ) => { if (showBackButton) { setRoomParams && setRoomParams(user[0]); } else { From 1b7a7b28a1699121af808f6728a7d826fc39c63c Mon Sep 17 00:00:00 2001 From: Akmal Isomadinov Date: Fri, 26 Jul 2024 17:39:38 +0500 Subject: [PATCH 27/61] Client: Fixed Bug 69424 When creating a PDF form from the gallery, it opens in edit mode --- packages/client/src/pages/Home/Hooks/useFiles.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/pages/Home/Hooks/useFiles.js b/packages/client/src/pages/Home/Hooks/useFiles.js index defecd2b6c..494a1744d4 100644 --- a/packages/client/src/pages/Home/Hooks/useFiles.js +++ b/packages/client/src/pages/Home/Hooks/useFiles.js @@ -306,7 +306,7 @@ const useFiles = ({ const isFormRoom = selectedFolderStore.roomType === RoomsType.FormRoom || - selectedFolderStore.type === FolderType.FormRoom; + selectedFolderStore.parentRoomType === FolderType.FormRoom; const payload = { extension: "pdf", From 9b0bef0aa4b49f62d9fdbc131faeafc6c9320cc8 Mon Sep 17 00:00:00 2001 From: Akmal Isomadinov Date: Fri, 26 Jul 2024 17:41:11 +0500 Subject: [PATCH 28/61] Client: Fixed URL --- packages/client/src/store/ContextOptionsStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/store/ContextOptionsStore.js b/packages/client/src/store/ContextOptionsStore.js index c0be163395..a9b411b295 100644 --- a/packages/client/src/store/ContextOptionsStore.js +++ b/packages/client/src/store/ContextOptionsStore.js @@ -974,7 +974,7 @@ class ContextOptionsStore { const filterUrlParams = filesFilter.toUrlParams(); const url = getCategoryUrl( this.filesStore.categoryType, - filterUrlParams.folder, + filesFilter.folder, ); navigate( From 792ab3cc4056bc2cde3daad3d03cf0087622e652 Mon Sep 17 00:00:00 2001 From: Akmal Isomadinov Date: Mon, 29 Jul 2024 18:28:14 +0500 Subject: [PATCH 29/61] Doceditor:CompletedForm Fixed scroll and styles --- .../completed-form/CompletedForm.styled.ts | 64 ++++-- .../completed-form/CompletedForm.tsx | 213 ++++++++++-------- 2 files changed, 166 insertions(+), 111 deletions(-) diff --git a/packages/doceditor/src/components/completed-form/CompletedForm.styled.ts b/packages/doceditor/src/components/completed-form/CompletedForm.styled.ts index e63e06b173..10dcdcfaba 100644 --- a/packages/doceditor/src/components/completed-form/CompletedForm.styled.ts +++ b/packages/doceditor/src/components/completed-form/CompletedForm.styled.ts @@ -27,33 +27,61 @@ import styled from "styled-components"; -import { mobile } from "@docspace/shared/utils"; +import { mobile, mobileMore } from "@docspace/shared/utils"; import type { CompletedFormLayoutProps } from "./CompletedForm.types"; -export const CompletedFormLayout = styled.section` - display: flex; - align-items: center; - flex-direction: column; - +export const ContainerCompletedForm = styled.section` box-sizing: border-box; * { box-sizing: border-box; } - width: 100%; - min-height: 100dvh; - padding: 100px 16px 16px; - background-image: ${(props) => props.bgPattern}; background-repeat: no-repeat; background-attachment: fixed; background-size: cover; background-position: center; + width: 100%; + min-height: 100dvh; + height: 100%; + + .scroller { + > .scroll-body { + display: flex; + flex-direction: column; + padding-inline-end: 16px !important; + } + } + + .completed-form__default-layout { + padding: clamp(42px, 8vh, 100px) 16px 16px; + + picture { + } + } + + @media ${mobile} { + .completed-form__default-layout { + padding: 0px 16px 16px; + } + + background-image: none; + } +`; + +export const CompletedFormLayout = styled.div` + display: flex; + align-items: center; + flex-direction: column; + + padding: clamp(42px, 8vh, 100px) 0px 16px 16px; + picture { - margin-bottom: clamp(40px, 10vh, 125px); + margin-bottom: clamp(40px, 8vh, 125px); + user-select: none; } .link { @@ -68,9 +96,14 @@ export const CompletedFormLayout = styled.section` margin-top: 24px; } - @media ${mobile} { - background-image: none; + @media ${mobileMore} and (max-height: 650px) { + padding-top: 42px; + .completed-form__logo { + margin-bottom: 40px; + } + } + @media ${mobile} { padding-top: 0px; .completed-form__icon { @@ -95,6 +128,11 @@ export const CompletedFormLayout = styled.section` align-self: center; } } + + .completed-form__empty { + gap: 20px; + margin-top: 24px; + } } `; diff --git a/packages/doceditor/src/components/completed-form/CompletedForm.tsx b/packages/doceditor/src/components/completed-form/CompletedForm.tsx index fa36983c63..040391af8f 100644 --- a/packages/doceditor/src/components/completed-form/CompletedForm.tsx +++ b/packages/doceditor/src/components/completed-form/CompletedForm.tsx @@ -69,9 +69,11 @@ import { FormNumberWrapper, ManagerWrapper, MainContent, + ContainerCompletedForm, } from "./CompletedForm.styled"; import type { CompletedFormProps } from "./CompletedForm.types"; +import { Scrollbar } from "@docspace/shared/components/scrollbar"; export const CompletedForm = ({ session, @@ -92,25 +94,29 @@ export const CompletedForm = ({ if (!session) return ( - - - - - logo - - icon - - {t("CompletedForm:Title")} - {t("CompletedForm:Description")} - - + + + + + + logo + + icon + + + {t("CompletedForm:Title")} + + {t("CompletedForm:Description")} + + + ); const { @@ -172,85 +178,96 @@ export const CompletedForm = ({ }); return ( - - - - - logo - - - - {t("CompletedForm:FormCompletedSuccessfully")} - - - {isAnonim - ? t("CompletedForm:DescriptionForAnonymous") - : t("CompletedForm:DescriptionForRegisteredUser")} - - - - - - - {completedForm.title} - - - - - {t("CompletedForm:FormNumber")} - - {formNumber} - - - - {t("CompletedForm:FormOwner")} - - - - {decode(manager.displayName)} + + + + + + + logo + + + + {t("CompletedForm:FormCompletedSuccessfully")} - - - {manager.email} - - - - - -