Web: Files: added column filtering
This commit is contained in:
parent
445c7ae43f
commit
475d6d638f
@ -911,24 +911,26 @@ class FilterInput extends React.Component {
|
||||
</SearchInput>
|
||||
</div>
|
||||
<div ref={this.rectComboBoxRef}>
|
||||
<SortComboBox
|
||||
options={getSortData()}
|
||||
viewSettings={this.state.viewSettings}
|
||||
isDisabled={isDisabled}
|
||||
onChangeSortId={this.onClickSortItem}
|
||||
onChangeView={this.props.onChangeViewAs}
|
||||
onChangeSortDirection={this.onChangeSortDirection}
|
||||
selectedOption={
|
||||
getSortData().length > 0
|
||||
? getSortData().find((x) => x.key === sortId)
|
||||
: {}
|
||||
}
|
||||
onButtonClick={this.onSortDirectionClick}
|
||||
viewAs={viewAs}
|
||||
sortDirection={+sortDirection}
|
||||
directionAscLabel={directionAscLabel}
|
||||
directionDescLabel={directionDescLabel}
|
||||
/>
|
||||
{viewAs !== "table" && (
|
||||
<SortComboBox
|
||||
options={getSortData()}
|
||||
viewSettings={this.state.viewSettings}
|
||||
isDisabled={isDisabled}
|
||||
onChangeSortId={this.onClickSortItem}
|
||||
onChangeView={this.props.onChangeViewAs}
|
||||
onChangeSortDirection={this.onChangeSortDirection}
|
||||
selectedOption={
|
||||
getSortData().length > 0
|
||||
? getSortData().find((x) => x.key === sortId)
|
||||
: {}
|
||||
}
|
||||
onButtonClick={this.onSortDirectionClick}
|
||||
viewAs={viewAs}
|
||||
sortDirection={+sortDirection}
|
||||
directionAscLabel={directionAscLabel}
|
||||
directionDescLabel={directionDescLabel}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
{viewAs && !isMobileOnly && (
|
||||
<ViewSelector
|
||||
|
@ -117,6 +117,7 @@ const StyledTableHeaderCell = styled.div`
|
||||
.header-container-text-icon {
|
||||
padding: 2px 0 0 4px;
|
||||
|
||||
display: ${(props) => (props.isActive ? "block" : "none")};
|
||||
${(props) =>
|
||||
props.sorted &&
|
||||
css`
|
||||
@ -124,6 +125,12 @@ const StyledTableHeaderCell = styled.div`
|
||||
padding: 0 0 0 4px;
|
||||
`}
|
||||
}
|
||||
|
||||
:hover {
|
||||
.header-container-text-icon {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-container-text {
|
||||
|
@ -267,7 +267,7 @@ class TableHeader extends React.Component {
|
||||
};
|
||||
|
||||
render() {
|
||||
const { columns, ...rest } = this.props;
|
||||
const { columns, sortBy, ...rest } = this.props;
|
||||
|
||||
//console.log("TABLE HEADER RENDER", columns);
|
||||
|
||||
@ -290,6 +290,7 @@ class TableHeader extends React.Component {
|
||||
key={column.key}
|
||||
index={index}
|
||||
column={column}
|
||||
sortBy={sortBy}
|
||||
resizable={resizable}
|
||||
onMouseDown={this.onMouseDown}
|
||||
/>
|
||||
@ -311,6 +312,7 @@ TableHeader.propTypes = {
|
||||
containerRef: PropTypes.shape({ current: PropTypes.any }),
|
||||
columns: PropTypes.array.isRequired,
|
||||
setSelected: PropTypes.func,
|
||||
sortBy: PropTypes.string,
|
||||
};
|
||||
|
||||
export default TableHeader;
|
||||
|
@ -5,19 +5,22 @@ import Link from "../link";
|
||||
import globalColors from "../utils/globalColors";
|
||||
import { StyledTableHeaderCell } from "./StyledTableContainer";
|
||||
|
||||
const TableHeaderCell = ({ column, index, onMouseDown, resizable }) => {
|
||||
const [sorted, setSorted] = useState(column.sorted);
|
||||
|
||||
const TableHeaderCell = ({ column, index, onMouseDown, resizable, sortBy }) => {
|
||||
const { options, title, enable } = column;
|
||||
|
||||
const isActive = column.sortBy === sortBy;
|
||||
|
||||
const [sorted, setSorted] = useState(column.sorted);
|
||||
|
||||
const onClick = (e) => {
|
||||
column.onClick(sorted, e);
|
||||
setSorted(!sorted);
|
||||
column.onClick(column.sortBy, e);
|
||||
isActive && setSorted(!sorted);
|
||||
};
|
||||
|
||||
return (
|
||||
<StyledTableHeaderCell
|
||||
sorted={sorted}
|
||||
isActive={isActive}
|
||||
className="table-container_header-cell"
|
||||
id={`column_${index + 1}`}
|
||||
data-enable={enable}
|
||||
@ -65,6 +68,7 @@ TableHeaderCell.propTypes = {
|
||||
index: PropTypes.number,
|
||||
onMouseDown: PropTypes.func,
|
||||
resizable: PropTypes.bool,
|
||||
sortBy: PropTypes.string,
|
||||
};
|
||||
|
||||
export default TableHeaderCell;
|
||||
|
@ -21,8 +21,9 @@ class FilesTableHeader extends React.Component {
|
||||
resizable: true,
|
||||
enable: true,
|
||||
default: true,
|
||||
sortBy: "AZ",
|
||||
sorted: filter.sortOrder === "descending",
|
||||
onClick: this.onNameClick,
|
||||
onClick: this.onFilter,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
@ -30,6 +31,8 @@ class FilesTableHeader extends React.Component {
|
||||
title: t("ByAuthor"),
|
||||
enable: true,
|
||||
resizable: true,
|
||||
sortBy: "Author",
|
||||
onClick: this.onFilter,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
@ -37,6 +40,8 @@ class FilesTableHeader extends React.Component {
|
||||
title: t("ByCreationDate"),
|
||||
enable: false,
|
||||
resizable: true,
|
||||
sortBy: "DateAndTimeCreation",
|
||||
onClick: this.onFilter,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
@ -44,6 +49,8 @@ class FilesTableHeader extends React.Component {
|
||||
title: t("ByLastModifiedDate"),
|
||||
enable: true,
|
||||
resizable: true,
|
||||
sortBy: "DateAndTime",
|
||||
onClick: this.onFilter,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
@ -51,6 +58,8 @@ class FilesTableHeader extends React.Component {
|
||||
title: t("Common:Size"),
|
||||
enable: true,
|
||||
resizable: true,
|
||||
sortBy: "Size",
|
||||
onClick: this.onFilter,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
@ -58,6 +67,8 @@ class FilesTableHeader extends React.Component {
|
||||
title: t("Common:Type"),
|
||||
enable: false,
|
||||
resizable: true,
|
||||
sortBy: "Type",
|
||||
onClick: this.onFilter,
|
||||
onChange: this.onColumnChange,
|
||||
},
|
||||
{
|
||||
@ -119,10 +130,16 @@ class FilesTableHeader extends React.Component {
|
||||
localStorage.setItem(TABLE_COLUMNS, tableColumns);
|
||||
};
|
||||
|
||||
onNameClick = (val) => {
|
||||
onFilter = (sortBy) => {
|
||||
const { filter, selectedFolderId, setIsLoading, fetchFiles } = this.props;
|
||||
const newFilter = filter.clone();
|
||||
newFilter.sortOrder = val ? "ascending" : "descending";
|
||||
|
||||
if (newFilter.sortBy !== sortBy) {
|
||||
newFilter.sortBy = sortBy;
|
||||
} else {
|
||||
newFilter.sortOrder =
|
||||
newFilter.sortOrder === "ascending" ? "descending" : "ascending";
|
||||
}
|
||||
|
||||
setIsLoading(true);
|
||||
fetchFiles(selectedFolderId, newFilter).finally(() => setIsLoading(false));
|
||||
@ -146,6 +163,7 @@ class FilesTableHeader extends React.Component {
|
||||
isHeaderIndeterminate,
|
||||
getHeaderMenu,
|
||||
setSelected,
|
||||
filter,
|
||||
} = this.props;
|
||||
|
||||
const { columns } = this.state;
|
||||
@ -208,6 +226,7 @@ class FilesTableHeader extends React.Component {
|
||||
/>
|
||||
) : (
|
||||
<TableHeader
|
||||
sortBy={filter.sortBy}
|
||||
setSelected={setSelected}
|
||||
containerRef={containerRef}
|
||||
columns={columns}
|
||||
|
Loading…
Reference in New Issue
Block a user