From: Michal Klobukowski Date: Thu, 5 Jul 2018 12:43:18 +0000 (+0200) Subject: Add SortDirection and ProjectColumnName enums X-Git-Tag: 1.2.0~59^2~5 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/5c513f2c78337482da4cc6055706fd022c26c007 Add SortDirection and ProjectColumnName enums Feature #13703 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/components/data-table/data-column.ts b/src/components/data-table/data-column.ts index 0440fe2b..06744c3a 100644 --- a/src/components/data-table/data-column.ts +++ b/src/components/data-table/data-column.ts @@ -16,7 +16,11 @@ export interface DataColumn(column: DataColumn) => { return column.configurable === undefined || column.configurable; @@ -24,12 +28,12 @@ export const isColumnConfigurable = (column: DataColumn) => { export const toggleSortDirection = (column: DataColumn): DataColumn => { return column.sortDirection - ? column.sortDirection === "asc" - ? { ...column, sortDirection: "desc" } - : { ...column, sortDirection: "asc" } + ? column.sortDirection === SortDirection.Asc + ? { ...column, sortDirection: SortDirection.Desc } + : { ...column, sortDirection: SortDirection.Asc } : column; }; export const resetSortDirection = (column: DataColumn): DataColumn => { - return column.sortDirection ? { ...column, sortDirection: "none" } : column; + return column.sortDirection ? { ...column, sortDirection: SortDirection.None } : column; }; diff --git a/src/components/data-table/data-table.tsx b/src/components/data-table/data-table.tsx index 22ecf4fc..5372128f 100644 --- a/src/components/data-table/data-table.tsx +++ b/src/components/data-table/data-table.tsx @@ -54,8 +54,8 @@ class DataTable extends React.Component & : sortDirection ? onSortToggle && onSortToggle(column)}> diff --git a/src/views/project-panel/project-panel-middleware.ts b/src/views/project-panel/project-panel-middleware.ts index a6a72561..0e1e764b 100644 --- a/src/views/project-panel/project-panel-middleware.ts +++ b/src/views/project-panel/project-panel-middleware.ts @@ -4,7 +4,7 @@ import { Middleware } from "redux"; import actions from "../../store/data-explorer/data-explorer-action"; -import { PROJECT_PANEL_ID, columns, ProjectPanelFilter } from "./project-panel"; +import { PROJECT_PANEL_ID, columns, ProjectPanelFilter, ProjectPanelColumnNames } from "./project-panel"; import { groupsService } from "../../services/services"; import { RootState } from "../../store/store"; import { getDataExplorer, DataExplorerState } from "../../store/data-explorer/data-explorer-reducer"; @@ -15,6 +15,7 @@ import { ProcessResource } from "../../models/process"; import { CollectionResource } from "../../models/collection"; import OrderBuilder from "../../common/api/order-builder"; import { GroupContentsResource, GroupContentsResourcePrefix } from "../../services/groups-service/groups-service"; +import { SortDirection } from "../../components/data-table/data-column"; export const projectPanelMiddleware: Middleware = store => next => { next(actions.SET_COLUMNS({ id: PROJECT_PANEL_ID, columns })); @@ -51,17 +52,17 @@ export const projectPanelMiddleware: Middleware = store => next => { const state = store.getState() as RootState; const dataExplorer = getDataExplorer(state.dataExplorer, PROJECT_PANEL_ID); const columns = dataExplorer.columns as DataColumns; - const typeFilters = getColumnFilters(columns, "Type"); - const statusFilters = getColumnFilters(columns, "Status"); + const typeFilters = getColumnFilters(columns, ProjectPanelColumnNames.Type); + const statusFilters = getColumnFilters(columns, ProjectPanelColumnNames.Status); const sortColumn = dataExplorer.columns.find(({ sortDirection }) => Boolean(sortDirection && sortDirection !== "none")); - const sortDirection = sortColumn && sortColumn.sortDirection === "asc" ? "asc" : "desc"; + const sortDirection = sortColumn && sortColumn.sortDirection === SortDirection.Asc ? SortDirection.Asc : SortDirection.Desc; if (typeFilters.length > 0) { groupsService .contents(state.projects.currentItemId, { limit: dataExplorer.rowsPerPage, offset: dataExplorer.page * dataExplorer.rowsPerPage, order: sortColumn - ? sortColumn.name === "Name" + ? sortColumn.name === ProjectPanelColumnNames.Name ? getOrder("name", sortDirection) : getOrder("createdAt", sortDirection) : OrderBuilder.create(), @@ -104,13 +105,13 @@ const getColumnFilters = (columns: DataColumns f.selected) : []; }; -const getOrder = (attribute: "name" | "createdAt", direction: "asc" | "desc") => +const getOrder = (attribute: "name" | "createdAt", direction: SortDirection) => [ OrderBuilder.create(GroupContentsResourcePrefix.Collection), OrderBuilder.create(GroupContentsResourcePrefix.Process), OrderBuilder.create(GroupContentsResourcePrefix.Project) ].reduce((acc, b) => - acc.concat(direction === "asc" + acc.concat(direction === SortDirection.Asc ? b.addAsc(attribute) : b.addDesc(attribute)), OrderBuilder.create()); diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index 2c895ee3..3c8c79c9 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -15,6 +15,7 @@ import { RootState } from '../../store/store'; import { ResourceKind } from '../../models/kinds'; import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; import { ContainerRequestState } from '../../models/container-request'; +import { SortDirection } from '../../components/data-table/data-column'; export const PROJECT_PANEL_ID = "projectPanel"; @@ -148,12 +149,20 @@ const renderStatus = (item: ProjectPanelItem) => {item.status || "-"} ; +export enum ProjectPanelColumnNames { + Name = "Name", + Status = "Status", + Type = "Type", + Owner = "Owner", + FileSize = "File size", + LastModified = "Last modified" +} export const columns: DataColumns = [{ - name: "Name", + name: ProjectPanelColumnNames.Name, selected: true, - sortDirection: "desc", + sortDirection: SortDirection.Asc, render: renderName, width: "450px" }, { @@ -175,7 +184,7 @@ export const columns: DataColumns = [{ render: renderStatus, width: "75px" }, { - name: "Type", + name: ProjectPanelColumnNames.Type, selected: true, filters: [{ name: typeToLabel(ResourceKind.Collection), @@ -193,19 +202,19 @@ export const columns: DataColumns = [{ render: item => renderType(item.kind), width: "125px" }, { - name: "Owner", + name: ProjectPanelColumnNames.Owner, selected: true, render: item => renderOwner(item.owner), width: "200px" }, { - name: "File size", + name: ProjectPanelColumnNames.FileSize, selected: true, render: item => renderFileSize(item.fileSize), width: "50px" }, { - name: "Last modified", + name: ProjectPanelColumnNames.LastModified, selected: true, - sortDirection: "none", + sortDirection: SortDirection.None, render: item => renderDate(item.lastModified), width: "150px" }];