Web: Files: Applied API changes on server in files filtering
This commit is contained in:
parent
e76e50dc79
commit
ca37d2134d
@ -1,20 +1,24 @@
|
||||
import React from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { fetchFiles, setViewAs, setIsLoading } from "../../../../../store/files/actions";
|
||||
import {
|
||||
fetchFiles,
|
||||
setViewAs,
|
||||
setIsLoading,
|
||||
} from "../../../../../store/files/actions";
|
||||
import find from "lodash/find";
|
||||
import result from "lodash/result";
|
||||
import { withTranslation } from "react-i18next";
|
||||
import { withRouter } from "react-router";
|
||||
import { getFilterByLocation } from "../../../../../helpers/converters";
|
||||
import { constants, FilterInput } from 'asc-web-common';
|
||||
import { constants, FilterInput } from "asc-web-common";
|
||||
import isEqual from "lodash/isEqual";
|
||||
import { isMobileOnly } from 'react-device-detect';
|
||||
import { isMobileOnly } from "react-device-detect";
|
||||
|
||||
const { FilterType } = constants;
|
||||
|
||||
const getFilterType = filterValues => {
|
||||
const getFilterType = (filterValues) => {
|
||||
const filterType = result(
|
||||
find(filterValues, value => {
|
||||
find(filterValues, (value) => {
|
||||
return value.group === "filter-filterType";
|
||||
}),
|
||||
"key"
|
||||
@ -23,9 +27,9 @@ const getFilterType = filterValues => {
|
||||
return filterType ? +filterType : null;
|
||||
};
|
||||
|
||||
const getAuthorType = filterValues => {
|
||||
const getAuthorType = (filterValues) => {
|
||||
const authorType = result(
|
||||
find(filterValues, value => {
|
||||
find(filterValues, (value) => {
|
||||
return value.group === "filter-author";
|
||||
}),
|
||||
"key"
|
||||
@ -35,31 +39,30 @@ const getAuthorType = filterValues => {
|
||||
};
|
||||
|
||||
const getSelectedItem = (filterValues, type) => {
|
||||
const selectedItem = filterValues.find(item => item.key === type);
|
||||
const selectedItem = filterValues.find((item) => item.key === type);
|
||||
return selectedItem || null;
|
||||
};
|
||||
|
||||
const getSearchParams = filterValues => {
|
||||
const getSearchParams = (filterValues) => {
|
||||
const searchParams = result(
|
||||
find(filterValues, value => {
|
||||
find(filterValues, (value) => {
|
||||
return value.group === "filter-folders";
|
||||
}),
|
||||
"key"
|
||||
);
|
||||
|
||||
return searchParams || 'true';
|
||||
return searchParams || "true";
|
||||
};
|
||||
|
||||
class SectionFilterContent extends React.Component {
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
isReady: false
|
||||
}
|
||||
isReady: false,
|
||||
};
|
||||
}
|
||||
|
||||
onFilter = data => {
|
||||
onFilter = (data) => {
|
||||
const { setIsLoading, filter, selectedFolderId, fetchFiles } = this.props;
|
||||
|
||||
const filterType = getFilterType(data.filterValues) || null;
|
||||
@ -70,8 +73,9 @@ class SectionFilterContent extends React.Component {
|
||||
const authorType = getAuthorType(data.filterValues);
|
||||
const withSubfolders = getSearchParams(data.filterValues);
|
||||
|
||||
|
||||
const selectedItem = authorType ? getSelectedItem(data.filterValues, authorType) : null;
|
||||
const selectedItem = authorType
|
||||
? getSelectedItem(data.filterValues, authorType)
|
||||
: null;
|
||||
const selectedFilterItem = {};
|
||||
if (selectedItem) {
|
||||
selectedFilterItem.key = selectedItem.selectedItem.key;
|
||||
@ -90,13 +94,12 @@ class SectionFilterContent extends React.Component {
|
||||
newFilter.selectedItem = selectedFilterItem;
|
||||
|
||||
setIsLoading(true);
|
||||
fetchFiles(selectedFolderId, newFilter)
|
||||
.finally(() => setIsLoading(false));
|
||||
fetchFiles(selectedFolderId, newFilter).finally(() => setIsLoading(false));
|
||||
};
|
||||
|
||||
onChangeViewAs = (view) => {
|
||||
this.props.setViewAs(view)
|
||||
}
|
||||
this.props.setViewAs(view);
|
||||
};
|
||||
|
||||
getData = () => {
|
||||
const { t, customNames, user, selectedItem } = this.props;
|
||||
@ -107,48 +110,48 @@ class SectionFilterContent extends React.Component {
|
||||
key: "filter-filterType",
|
||||
group: "filter-filterType",
|
||||
label: t("Type"),
|
||||
isHeader: true
|
||||
isHeader: true,
|
||||
},
|
||||
{
|
||||
key: FilterType.FoldersOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Folders")
|
||||
label: t("Folders"),
|
||||
},
|
||||
{
|
||||
key: FilterType.DocumentsOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Documents")
|
||||
label: t("Documents"),
|
||||
},
|
||||
{
|
||||
key: FilterType.PresentationsOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Presentations")
|
||||
label: t("Presentations"),
|
||||
},
|
||||
{
|
||||
key: FilterType.SpreadsheetsOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Spreadsheets")
|
||||
label: t("Spreadsheets"),
|
||||
},
|
||||
{
|
||||
key: FilterType.ImagesOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Images")
|
||||
label: t("Images"),
|
||||
},
|
||||
{
|
||||
key: FilterType.MediaOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Media")
|
||||
label: t("Media"),
|
||||
},
|
||||
{
|
||||
key: FilterType.ArchiveOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("Archives")
|
||||
label: t("Archives"),
|
||||
},
|
||||
{
|
||||
key: FilterType.FilesOnly.toString(),
|
||||
group: "filter-filterType",
|
||||
label: t("AllFiles")
|
||||
}
|
||||
label: t("AllFiles"),
|
||||
},
|
||||
];
|
||||
|
||||
const filterOptions = [
|
||||
@ -168,7 +171,7 @@ class SectionFilterContent extends React.Component {
|
||||
defaultSelectLabel: t("LblSelect"),
|
||||
groupsCaption,
|
||||
defaultOption: user,
|
||||
selectedItem
|
||||
selectedItem,
|
||||
},
|
||||
{
|
||||
key: "group",
|
||||
@ -176,18 +179,18 @@ class SectionFilterContent extends React.Component {
|
||||
label: groupsCaption,
|
||||
defaultSelectLabel: t("LblSelect"),
|
||||
isSelector: true,
|
||||
selectedItem
|
||||
selectedItem,
|
||||
},
|
||||
{
|
||||
key: "filter-folders",
|
||||
group: "filter-folders",
|
||||
label: t("Folders"),
|
||||
isHeader: true
|
||||
isHeader: true,
|
||||
},
|
||||
{
|
||||
key: "false",
|
||||
group: "filter-folders",
|
||||
label: t('NoSubfolders')
|
||||
label: t("NoSubfolders"),
|
||||
},
|
||||
];
|
||||
|
||||
@ -200,20 +203,22 @@ class SectionFilterContent extends React.Component {
|
||||
const { t } = this.props;
|
||||
|
||||
const commonOptions = [
|
||||
{ key: "lastModifiedDate", label: t("ByLastModifiedDate"), default: true },
|
||||
{ key: "creationDate", label: t("ByCreationDate"), default: true },
|
||||
{ key: "title", label: t("ByTitle"), default: true },
|
||||
{ key: "type", label: t("ByType"), default: true },
|
||||
{ key: "size", label: t("BySize"), default: true },
|
||||
{ key: "author", label: t("ByAuthor"), default: true }
|
||||
{ key: "DateAndTime", label: t("ByLastModifiedDate"), default: true },
|
||||
{ key: "DateAndTimeCreation", label: t("ByCreationDate"), default: true },
|
||||
{ key: "AZ", label: t("ByTitle"), default: true },
|
||||
{ key: "Type", label: t("ByType"), default: true },
|
||||
{ key: "Size", label: t("BySize"), default: true },
|
||||
{ key: "Author", label: t("ByAuthor"), default: true },
|
||||
];
|
||||
|
||||
const viewSettings = [
|
||||
{ key: "row", label: t("ViewList"), isSetting: true, default: true },
|
||||
{ key: "tile", label: t("ViewTiles"), isSetting: true, default: true }
|
||||
{ key: "tile", label: t("ViewTiles"), isSetting: true, default: true },
|
||||
];
|
||||
//TODO: Need use mobile detect for better result
|
||||
return window.innerWidth < 460 ? [...commonOptions, ...viewSettings] : commonOptions;
|
||||
return window.innerWidth < 460
|
||||
? [...commonOptions, ...viewSettings]
|
||||
: commonOptions;
|
||||
};
|
||||
|
||||
getSelectedFilterData = () => {
|
||||
@ -221,7 +226,7 @@ class SectionFilterContent extends React.Component {
|
||||
const selectedFilterData = {
|
||||
filterValues: [],
|
||||
sortDirection: filter.sortOrder === "ascending" ? "asc" : "desc",
|
||||
sortId: filter.sortBy
|
||||
sortId: filter.sortBy,
|
||||
};
|
||||
|
||||
selectedFilterData.inputValue = filter.search;
|
||||
@ -229,21 +234,21 @@ class SectionFilterContent extends React.Component {
|
||||
if (filter.filterType >= 0) {
|
||||
selectedFilterData.filterValues.push({
|
||||
key: `${filter.filterType}`,
|
||||
group: "filter-filterType"
|
||||
group: "filter-filterType",
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.authorType) {
|
||||
selectedFilterData.filterValues.push({
|
||||
key: `${filter.authorType}`,
|
||||
group: "filter-author"
|
||||
group: "filter-author",
|
||||
});
|
||||
}
|
||||
|
||||
if (filter.withSubfolders === 'false') {
|
||||
if (filter.withSubfolders === "false") {
|
||||
selectedFilterData.filterValues.push({
|
||||
key: filter.withSubfolders,
|
||||
group: "filter-folders"
|
||||
group: "filter-folders",
|
||||
});
|
||||
}
|
||||
|
||||
@ -264,16 +269,20 @@ class SectionFilterContent extends React.Component {
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
return (!isEqual(this.props.filter, nextProps.filter) || this.props.selectedFolderId !== nextProps.selectedFolderId || this.state.isReady !== nextState.isReady || this.props.viewAs !== nextProps.viewAs);
|
||||
return (
|
||||
!isEqual(this.props.filter, nextProps.filter) ||
|
||||
this.props.selectedFolderId !== nextProps.selectedFolderId ||
|
||||
this.state.isReady !== nextState.isReady ||
|
||||
this.props.viewAs !== nextProps.viewAs
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
const selectedFilterData = this.getSelectedFilterData();
|
||||
const { t, i18n } = this.props;
|
||||
const filterColumnCount = window.innerWidth < 500 ? {} : { filterColumnCount: 3 }
|
||||
const filterColumnCount =
|
||||
window.innerWidth < 500 ? {} : { filterColumnCount: 3 };
|
||||
return (
|
||||
<FilterInput
|
||||
getFilterData={this.getData}
|
||||
@ -281,7 +290,7 @@ class SectionFilterContent extends React.Component {
|
||||
selectedFilterData={selectedFilterData}
|
||||
onFilter={this.onFilter}
|
||||
onChangeViewAs={this.onChangeViewAs}
|
||||
viewAs={false} // TODO: include viewSelector after adding method getThumbnail - this.props.viewAs
|
||||
viewAs={false} // TODO: include viewSelector after adding method getThumbnail - this.props.viewAs
|
||||
directionAscLabel={t("DirectionAscLabel")}
|
||||
directionDescLabel={t("DirectionDescLabel")}
|
||||
placeholder={t("Search")}
|
||||
@ -303,15 +312,12 @@ function mapStateToProps(state) {
|
||||
customNames: state.auth.settings.customNames,
|
||||
selectedFolderId: state.files.selectedFolder.id,
|
||||
selectedItem: state.files.filter.selectedItem,
|
||||
viewAs: state.files.viewAs
|
||||
viewAs: state.files.viewAs,
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(
|
||||
mapStateToProps,
|
||||
{
|
||||
fetchFiles,
|
||||
setViewAs,
|
||||
setIsLoading
|
||||
}
|
||||
)(withRouter(withTranslation()(SectionFilterContent)));
|
||||
export default connect(mapStateToProps, {
|
||||
fetchFiles,
|
||||
setViewAs,
|
||||
setIsLoading,
|
||||
})(withRouter(withTranslation()(SectionFilterContent)));
|
||||
|
@ -7,6 +7,6 @@ export const SORT_BY = "sortby";
|
||||
export const SORT_ORDER = "sortorder";
|
||||
export const VIEW_AS = "viewas";
|
||||
export const PAGE = "page";
|
||||
export const PAGE_COUNT = "pagecount";
|
||||
export const PAGE_COUNT = "count";
|
||||
export const FOLDER = "folder";
|
||||
export const PREVIEW = "preview"
|
||||
export const PREVIEW = "preview";
|
||||
|
@ -3,7 +3,7 @@ import { toUrlParams } from "../../utils";
|
||||
const DEFAULT_PAGE = 0;
|
||||
const DEFAULT_PAGE_COUNT = 25;
|
||||
const DEFAULT_TOTAL = 0;
|
||||
const DEFAULT_SORT_BY = "lastModifiedDate";
|
||||
const DEFAULT_SORT_BY = "DateAndTime";
|
||||
const DEFAULT_SORT_ORDER = "ascending";
|
||||
const DEFAULT_VIEW = "row";
|
||||
const DEFAULT_FILTER_TYPE = null;
|
||||
@ -12,7 +12,7 @@ const DEFAULT_SEARCH = null;
|
||||
const DEFAULT_FOLDER_PATH = [];
|
||||
const DEFAULT_AUTHOR_TYPE = null;
|
||||
const DEFAULT_SELECTED_ITEM = {};
|
||||
const DEFAULT_FOLDER = '@my';
|
||||
const DEFAULT_FOLDER = "@my";
|
||||
|
||||
// TODO: add next params
|
||||
// subjectGroup bool
|
||||
@ -79,12 +79,18 @@ class FilesFilter {
|
||||
withSubfolders
|
||||
} = this;
|
||||
|
||||
const isFilterSet = (filterType || (search ?? "").trim() || authorType) ? withSubfolders : false;
|
||||
const userIdOrGroupId = authorType && authorType.includes('_') ? authorType.slice(authorType.indexOf('_') + 1) : null;
|
||||
const isFilterSet =
|
||||
filterType || (search ?? "").trim() || authorType
|
||||
? withSubfolders
|
||||
: false;
|
||||
const userIdOrGroupId =
|
||||
authorType && authorType.includes("_")
|
||||
? authorType.slice(authorType.indexOf("_") + 1)
|
||||
: null;
|
||||
|
||||
let dtoFilter = {
|
||||
const dtoFilter = {
|
||||
folder: folder,
|
||||
pagecount: pageCount,
|
||||
count: pageCount,
|
||||
startIndex: this.getStartIndex(),
|
||||
page: page,
|
||||
sortby: sortBy,
|
||||
@ -95,8 +101,6 @@ class FilesFilter {
|
||||
userIdOrGroupId
|
||||
};
|
||||
|
||||
|
||||
|
||||
return dtoFilter;
|
||||
};
|
||||
|
||||
|
@ -44,33 +44,44 @@ export function getFolder(folderId, filter) {
|
||||
}
|
||||
|
||||
export function getFoldersTree() {
|
||||
const rootFoldersPaths = ['@my', '@share', '@common', /*'@projects',*/ '@trash']; //TODO: need get from settings
|
||||
const requestsArray = rootFoldersPaths.map(path => request({ method: "get", url: `/files/${path}?filterType=2` }));
|
||||
const rootFoldersPaths = [
|
||||
"@my",
|
||||
"@share",
|
||||
"@common",
|
||||
/*'@projects',*/ "@trash"
|
||||
]; //TODO: need get from settings
|
||||
const requestsArray = rootFoldersPaths.map(path =>
|
||||
request({ method: "get", url: `/files/${path}?filterType=2` })
|
||||
);
|
||||
|
||||
return axios.all(requestsArray)
|
||||
.then(axios.spread((...responses) =>
|
||||
return axios.all(requestsArray).then(
|
||||
axios.spread((...responses) =>
|
||||
responses.map((data, index) => {
|
||||
const trashIndex = 3;
|
||||
return {
|
||||
id: data.current.id,
|
||||
key: `0-${index}`,
|
||||
title: data.current.title,
|
||||
folders: index !== trashIndex ? data.folders.map(folder => {
|
||||
return {
|
||||
id: folder.id,
|
||||
title: folder.title,
|
||||
access: folder.access,
|
||||
foldersCount: folder.foldersCount,
|
||||
rootFolderType: folder.rootFolderType,
|
||||
newItems: folder.new
|
||||
}
|
||||
}) : null,
|
||||
folders:
|
||||
index !== trashIndex
|
||||
? data.folders.map(folder => {
|
||||
return {
|
||||
id: folder.id,
|
||||
title: folder.title,
|
||||
access: folder.access,
|
||||
foldersCount: folder.foldersCount,
|
||||
rootFolderType: folder.rootFolderType,
|
||||
newItems: folder.new
|
||||
};
|
||||
})
|
||||
: null,
|
||||
pathParts: data.pathParts,
|
||||
foldersCount: index !== trashIndex ? data.current.foldersCount : null,
|
||||
newItems: data.new
|
||||
}
|
||||
};
|
||||
})
|
||||
))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
export function getMyFolderList(filter = FilesFilter.getDefault()) {
|
||||
@ -284,7 +295,11 @@ export function getShareFiles(fileId) {
|
||||
|
||||
export function setShareFolder(folderId, share, notify, sharingMessage) {
|
||||
const data = { share, notify, sharingMessage };
|
||||
return request({ method: "put", url: `/files/folder/${folderId}/share`, data });
|
||||
return request({
|
||||
method: "put",
|
||||
url: `/files/folder/${folderId}/share`,
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
export function setShareFiles(fileId, share, notify, sharingMessage) {
|
||||
@ -294,7 +309,11 @@ export function setShareFiles(fileId, share, notify, sharingMessage) {
|
||||
|
||||
export function startUploadSession(folderId, fileName, fileSize, relativePath) {
|
||||
const data = { fileName, fileSize, relativePath };
|
||||
return request({ method: "post", url: `/files/${folderId}/upload/create_session.json`, data });
|
||||
return request({
|
||||
method: "post",
|
||||
url: `/files/${folderId}/upload/create_session.json`,
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
export function uploadFile(url, data) {
|
||||
@ -315,13 +334,37 @@ export function getProgress() {
|
||||
return request({ method: "get", url: "/files/fileops" });
|
||||
}
|
||||
|
||||
export function copyToFolder(destFolderId, folderIds, fileIds, conflictResolveType, deleteAfter) {
|
||||
const data = { destFolderId, folderIds, fileIds, conflictResolveType, deleteAfter };
|
||||
export function copyToFolder(
|
||||
destFolderId,
|
||||
folderIds,
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter
|
||||
) {
|
||||
const data = {
|
||||
destFolderId,
|
||||
folderIds,
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter
|
||||
};
|
||||
return request({ method: "put", url: "/files/fileops/copy", data });
|
||||
}
|
||||
|
||||
export function moveToFolder(destFolderId, folderIds, fileIds, conflictResolveType, deleteAfter) {
|
||||
const data = { destFolderId, folderIds, fileIds, conflictResolveType, deleteAfter };
|
||||
export function moveToFolder(
|
||||
destFolderId,
|
||||
folderIds,
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter
|
||||
) {
|
||||
const data = {
|
||||
destFolderId,
|
||||
folderIds,
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter
|
||||
};
|
||||
return request({ method: "put", url: "/files/fileops/move", data });
|
||||
}
|
||||
|
||||
@ -333,7 +376,7 @@ export function getFileVersionInfo(fileId) {
|
||||
}
|
||||
|
||||
export function markAsRead(folderIds, fileIds) {
|
||||
const data = { folderIds, fileIds};
|
||||
const data = { folderIds, fileIds };
|
||||
return request({ method: "put", url: "/files/fileops/markasread", data });
|
||||
}
|
||||
|
||||
@ -345,11 +388,17 @@ export function getNewFiles(folderId) {
|
||||
}
|
||||
|
||||
export function convertFile(fileId) {
|
||||
return request({ method: "put", url: `/files/file/${fileId}/checkconversion` });
|
||||
return request({
|
||||
method: "put",
|
||||
url: `/files/file/${fileId}/checkconversion`
|
||||
});
|
||||
}
|
||||
|
||||
export function getConvertFile(fileId) {
|
||||
return request({ method: "get", url: `/files/file/${fileId}/checkconversion` });
|
||||
return request({
|
||||
method: "get",
|
||||
url: `/files/file/${fileId}/checkconversion`
|
||||
});
|
||||
}
|
||||
|
||||
export function finalizeVersion(fileId, version, continueVersion) {
|
||||
|
Loading…
Reference in New Issue
Block a user