Merge pull request #564 from ONLYOFFICE/bugfix/save-table-sorting

Bugfix/save table sorting
This commit is contained in:
Alexey Safronov 2024-07-30 20:31:44 +04:00 committed by GitHub
commit ff1d60430d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 148 additions and 35 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

@ -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