Merge branch 'hotfix/v2.6.1' of https://github.com/ONLYOFFICE/DocSpace-client into hotfix/v2.6.1

This commit is contained in:
Vlada Gazizova 2024-07-31 10:19:37 +03:00
commit 822cc03111
9 changed files with 199 additions and 314 deletions

View File

@ -105,6 +105,17 @@ const ArticleBodyContent = (props) => {
case myFolderId:
const myFilter = FilesFilter.getDefault();
myFilter.folder = folderId;
const filterStorageItem =
userId && localStorage.getItem(`UserFilter=${userId}`);
if (filterStorageItem) {
const splitFilter = filterStorageItem.split(",");
myFilter.sortBy = splitFilter[0];
myFilter.sortOrder = splitFilter[1];
}
params = myFilter.toUrlParams();
path = getCategoryUrl(CategoryType.Personal);
@ -123,6 +134,17 @@ const ArticleBodyContent = (props) => {
case recycleBinFolderId:
const recycleBinFilter = FilesFilter.getDefault();
recycleBinFilter.folder = folderId;
const filterStorageTrash =
userId && localStorage.getItem(`UserFilterTrash=${userId}`);
if (filterStorageTrash) {
const splitFilterTrash = filterStorageTrash.split(",");
recycleBinFilter.sortBy = splitFilterTrash[0];
recycleBinFilter.sortOrder = splitFilterTrash[1];
}
params = recycleBinFilter.toUrlParams();
path = getCategoryUrl(CategoryType.Trash);

View File

@ -54,6 +54,8 @@ class FilesTableHeader extends React.Component {
showStorageInfo,
isArchiveFolder,
tableStorageName,
roomsFilter,
filter,
} = this.props;
const defaultColumns = [];
@ -365,6 +367,9 @@ class FilesTableHeader extends React.Component {
const tableColumns = columns.map((c) => c.enable && c.key);
const sortBy = isRooms ? roomsFilter.sortBy : filter.sortBy;
const sortOrder = isRooms ? roomsFilter.sortOrder : filter.sortOrder;
this.setTableColumns(tableColumns);
if (fromUpdate) {
this.setState({
@ -372,6 +377,8 @@ class FilesTableHeader extends React.Component {
resetColumnsSize,
columnStorageName,
columnInfoPanelStorageName,
sortBy,
sortOrder,
});
} else {
this.state = {
@ -379,6 +386,8 @@ class FilesTableHeader extends React.Component {
resetColumnsSize,
columnStorageName,
columnInfoPanelStorageName,
sortBy,
sortOrder,
};
}
};
@ -425,8 +434,13 @@ class FilesTableHeader extends React.Component {
isRecentTab,
isArchiveFolder,
showStorageInfo,
roomsFilter,
filter,
} = this.props;
const sortBy = isRooms ? roomsFilter.sortBy : filter.sortBy;
const sortOrder = isRooms ? roomsFilter.sortOrder : filter.sortOrder;
if (
isArchiveFolder !== prevProps.isArchiveFolder ||
isRooms !== prevProps.isRooms ||
@ -434,12 +448,15 @@ class FilesTableHeader extends React.Component {
columnStorageName !== prevProps.columnStorageName ||
columnInfoPanelStorageName !== prevProps.columnInfoPanelStorageName ||
isRecentTab !== prevProps.isRecentTab ||
showStorageInfo !== prevProps.showStorageInfo
showStorageInfo !== prevProps.showStorageInfo ||
sortBy !== this.state.sortBy ||
sortOrder !== this.state.sortOrder
) {
return this.getTableColumns(true);
}
const { columns } = this.state;
if (this.props.withContent !== prevProps.withContent) {
const columnIndex = columns.findIndex((c) => c.key === "Share");
if (columnIndex === -1) return;
@ -528,9 +545,6 @@ class FilesTableHeader extends React.Component {
t,
containerRef,
isHeaderChecked,
filter,
roomsFilter,
isRooms,
firstElemChecked,
sortingVisible,
infoPanelVisible,
@ -547,11 +561,10 @@ class FilesTableHeader extends React.Component {
resetColumnsSize,
columnStorageName,
columnInfoPanelStorageName,
sortBy,
sortOrder,
} = this.state;
const sortBy = isRooms ? roomsFilter.sortBy : filter.sortBy;
const sortOrder = isRooms ? roomsFilter.sortOrder : filter.sortOrder;
return (
<TableHeader
isLengthenHeader={firstElemChecked || isHeaderChecked}

View File

@ -2012,42 +2012,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;
}
@ -2069,29 +2035,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;
}
@ -2181,220 +2125,25 @@ 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);
isRecentTab && commonOptions.push(lastOpenedDate);
}
return commonOptions;

View File

@ -38,6 +38,7 @@ const MyDocumentsTabs = ({
setFilter,
showBodyLoader,
isRoot,
user,
}) => {
const { t } = useTranslation(["Common", "Files"]);
@ -56,13 +57,25 @@ const MyDocumentsTabs = ({
const filter = FilesFilter.getDefault();
const url = window.DocSpace.location.pathname;
if (e.id === "recent") {
const recent = e.id === "recent";
const filterStorageItem = user?.id
? recent
? localStorage.getItem(`UserFilterRecent=${user.id}`)
: localStorage.getItem(`UserFilter=${user.id}`)
: null;
if (filterStorageItem) {
const splitFilter = filterStorageItem.split(",");
filter.sortBy = splitFilter[0];
filter.sortOrder = splitFilter[1];
} else if (recent) filter.sortBy = "LastOpened";
if (recent) {
filter.folder = e.id;
filter.searchArea = 3;
filter.sortBy = "LastOpened";
} else {
filter.searchArea = null;
}
} else filter.searchArea = null;
setFilter(filter);
window.DocSpace.navigate(`${url}?${filter.toUrlParams()}`);
@ -83,17 +96,18 @@ const MyDocumentsTabs = ({
};
export default inject(
({ treeFoldersStore, filesStore, clientLoadingStore }) => {
({ treeFoldersStore, filesStore, clientLoadingStore, userStore }) => {
const { isPersonalRoom, isRecentTab, isRoot } = treeFoldersStore;
const { setFilter } = filesStore;
const { showBodyLoader } = clientLoadingStore;
const { user } = userStore;
return {
isPersonalRoom,
isRecentTab,
setFilter,
showBodyLoader,
isRoot,
user,
};
},
)(observer(MyDocumentsTabs));

View File

@ -1942,7 +1942,7 @@ class ContextOptionsStore {
selection.findIndex((k) => k.security.Download) !== -1;
const favoriteItems = selection.filter((k) =>
k.contextOptions.includes("mark-as-favorite"),
k.contextOptions?.includes("mark-as-favorite"),
);
const moveItems = selection.filter((k) =>

View File

@ -1459,6 +1459,23 @@ class FilesActionStore {
filter.folder = id;
if (isRoom) {
const key =
categoryType === CategoryType.Archive
? `UserFilterArchiveRoom=${this.userStore.user?.id}`
: `UserFilterSharedRoom=${this.userStore.user?.id}`;
const filterStorageSharedRoom =
this.userStore.user?.id && localStorage.getItem(key);
if (filterStorageSharedRoom) {
const splitFilter = filterStorageSharedRoom.split(",");
filter.sortBy = splitFilter[0];
filter.sortOrder = splitFilter[1];
}
}
const url = getCategoryUrl(categoryType, id);
window.DocSpace.navigate(`${url}?${filter.toUrlParams()}`, { state });
@ -2334,7 +2351,8 @@ class FilesActionStore {
onMarkAsRead = (item) => this.markAsRead([], [`${item.id}`], item);
openFileAction = (item, t, e) => {
const { openDocEditor, isPrivacyFolder, setSelection } = this.filesStore;
const { openDocEditor, isPrivacyFolder, setSelection, categoryType } =
this.filesStore;
const { currentDeviceType } = this.settingsStore;
const { fileItemsList } = this.pluginStore;
const { enablePlugins } = this.settingsStore;
@ -2384,6 +2402,30 @@ class FilesActionStore {
);
const filter = FilesFilter.getDefault();
const filterObj = FilesFilter.getFilter(window.location);
if (isRoom) {
const key =
categoryType === CategoryType.Archive
? `UserFilterArchiveRoom=${this.userStore.user?.id}`
: `UserFilterSharedRoom=${this.userStore.user?.id}`;
const filterStorageSharedRoom =
this.userStore.user?.id && localStorage.getItem(key);
if (filterStorageSharedRoom) {
const splitFilter = filterStorageSharedRoom.split(",");
filter.sortBy = splitFilter[0];
filter.sortOrder = splitFilter[1];
}
} else {
// For the document section at all levels there is one sorting
filter.sortBy = filterObj.sortBy;
filter.sortOrder = filterObj.sortOrder;
}
filter.folder = id;
const url = `${path}?${filter.toUrlParams()}`;
@ -2605,6 +2647,11 @@ class FilesActionStore {
const filter = FilesFilter.getDefault();
const filterObj = FilesFilter.getFilter(window.location);
filter.sortBy = filterObj.sortBy;
filter.sortOrder = filterObj.sortOrder;
filter.folder = id;
const categoryType = getCategoryType(window.DocSpace.location);

View File

@ -72,7 +72,7 @@ import debounce from "lodash.debounce";
import clone from "lodash/clone";
import Queue from "queue-promise";
import { parseHistory } from "SRC_DIR/pages/Home/InfoPanel/Body/helpers/HistoryHelper";
import { toJSON } from "@docspace/shared/api/rooms/filter";
const { FilesFilter, RoomsFilter } = api;
const storageViewAs = localStorage.getItem("viewAs");
@ -1300,10 +1300,24 @@ class FilesStore {
};
//TODO: FILTER
setFilesFilter = (filter) => {
if (!this.publicRoomStore.isPublicRoom) {
const key = `UserFilter=${this.userStore.user?.id}`;
const value = `${filter.sortBy},${filter.pageCount},${filter.sortOrder}`;
setFilesFilter = (filter, folderId = null) => {
const { recycleBinFolderId } = this.treeFoldersStore;
const key =
this.categoryType === CategoryType.Archive
? `UserFilterArchiveRoom=${this.userStore.user?.id}`
: this.categoryType === CategoryType.SharedRoom
? `UserFilterSharedRoom=${this.userStore.user?.id}`
: folderId === "recent"
? `UserFilterRecent=${this.userStore.user?.id}`
: +folderId === recycleBinFolderId
? `UserFilterTrash=${this.userStore.user?.id}`
: !this.publicRoomStore.isPublicRoom
? `UserFilter=${this.userStore.user?.id}`
: null;
if (key) {
const value = `${filter.sortBy},${filter.sortOrder}`;
localStorage.setItem(key, value);
}
@ -1330,6 +1344,21 @@ class FilesStore {
setRoomsFilter = (filter) => {
if (!this.settingsStore.withPaging) filter.pageCount = 100;
const isArchive = this.categoryType === CategoryType.Archive;
const key = isArchive
? `UserRoomsArchivedFilter=${this.userStore.user?.id}`
: `UserRoomsSharedFilter=${this.userStore.user?.id}`;
const sharedStorageFilter = JSON.parse(localStorage.getItem(key));
if (sharedStorageFilter) {
sharedStorageFilter.sortBy = filter.sortBy;
sharedStorageFilter.sortOrder = filter.sortOrder;
const value = toJSON(sharedStorageFilter);
localStorage.setItem(key, value);
}
// this.setFilterUrl(filter, true);
this.roomsFilter = filter;
@ -1463,8 +1492,7 @@ class FilesStore {
const splitFilter = filterStorageItem.split(",");
filterData.sortBy = splitFilter[0];
filterData.pageCount = +splitFilter[1];
filterData.sortOrder = splitFilter[2];
filterData.sortOrder = splitFilter[1];
}
if (!this.settingsStore.withPaging) {
@ -1540,7 +1568,7 @@ class FilesStore {
//save filter for after closing preview change url
this.setTempFilter(filterData);
} else {
this.setFilesFilter(filterData); //TODO: FILTER
this.setFilesFilter(filterData, folderId); //TODO: FILTER
}
const isPrivacyFolder =

View File

@ -64,10 +64,10 @@ const DEFAULT_SEARCH_AREA = RoomSearchArea.Active;
const TAGS = "tags";
const DEFAULT_TAGS = null;
const SORT_BY = "sortby";
const SORT_BY = "sortBy";
const DEFAULT_SORT_BY = "DateAndTime";
const SORT_ORDER = "sortorder";
const SORT_ORDER = "sortOrder";
const DEFAULT_SORT_ORDER = "descending";
const EXCLUDE_SUBJECT = "excludeSubject";
@ -85,6 +85,21 @@ const DEFAULT_QUOTA_FILTER = null;
const STORAGE_FILTER = "storageFilter";
const DEFAULT_STORAGE_FILTER = null;
export const toJSON = (filter) => {
const filterObject = transform(
filter,
(result, value, key) => {
if (value instanceof Function) return result;
if (value === null || value === false) return result;
result[key] = value;
},
{},
);
return JSON.stringify(filterObject);
};
class RoomsFilter {
static getDefault(userId, searchArea) {
const defaultFilter = new RoomsFilter(
@ -264,19 +279,6 @@ class RoomsFilter {
return this.page > 0;
};
toJSON = (filter) => {
const filterObject = transform(
filter,
(result, value, key) => {
if (value instanceof Function) return result;
if (value === null || value === false) return result;
result[key] = value;
},
{},
);
return JSON.stringify(filterObject);
};
toApiUrlParams = () => {
const {
page,
@ -422,7 +424,7 @@ class RoomsFilter {
if (!sharedStorageFilter && userId) {
localStorage.setItem(
`UserRoomsSharedFilter=${userId}`,
this.toJSON(defaultFilter),
toJSON(defaultFilter),
);
}
@ -430,11 +432,11 @@ class RoomsFilter {
defaultFilter.searchArea = RoomSearchArea.Archive;
localStorage.setItem(
`UserRoomsArchivedFilter=${userId}`,
this.toJSON(defaultFilter),
toJSON(defaultFilter),
);
}
const filterJSON = this.toJSON(dtoFilter);
const filterJSON = toJSON(dtoFilter);
const currentStorageFilter =
dtoFilter.searchArea === RoomSearchArea.Active

View File

@ -77,6 +77,8 @@ class TableHeaderComponent extends React.Component<
infoPanelVisible,
columnStorageName,
columnInfoPanelStorageName,
sortBy,
sorted,
} = this.props;
if (columnStorageName === prevProps.columnStorageName) {
@ -84,6 +86,14 @@ class TableHeaderComponent extends React.Component<
? localStorage.getItem(columnInfoPanelStorageName)
: localStorage.getItem(columnStorageName);
if (sortBy !== prevProps.sortBy || sorted !== prevProps.sorted) {
const columnIndex = columns.findIndex((c) => c?.sortBy === sortBy);
if (columnIndex > -1 && !columns[columnIndex].enable) {
columns[columnIndex].onChange?.(columns[columnIndex].key);
}
}
// columns.length + 1 - its settings column
if (storageSize && storageSize.split(" ").length !== columns.length + 1) {
return this.resetColumns();