X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/fd79729916cf6ddf27063b1865d39a36abb9e038..refs/heads/18207-Workbench2-is-not-clearing-the-project-content-when-switching:/src/components/data-table/data-column.ts diff --git a/src/components/data-table/data-column.ts b/src/components/data-table/data-column.ts index 7ac568a2..f32fea2b 100644 --- a/src/components/data-table/data-column.ts +++ b/src/components/data-table/data-column.ts @@ -2,32 +2,52 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { DataTableFilterItem } from "../data-table-filters/data-table-filters"; +import React from "react"; +import { DataTableFilters } from "../data-table-filters/data-table-filters-tree"; +import { createTree } from 'models/tree'; export interface DataColumn { + key?: React.Key; name: string; selected: boolean; - configurable?: boolean; - key?: React.Key; + configurable: boolean; + + /** + * If set to true, filters on this column will be displayed in a + * radio group and only one filter can be selected at a time. + */ + mutuallyExclusiveFilters?: boolean; sortDirection?: SortDirection; - onSortToggle?: () => void; - filters?: DataTableFilterItem[]; - onFiltersChange?: (filters: DataTableFilterItem[]) => void; - render: (item: T) => React.ReactElement; - renderHeader?: () => React.ReactElement | null; + filters: DataTableFilters; + render: (item: T) => React.ReactElement; + renderHeader?: () => React.ReactElement; } -export type SortDirection = "asc" | "desc"; - -export const isColumnConfigurable = (column: DataColumn) => { - return column.configurable === undefined || column.configurable; -}; +export enum SortDirection { + ASC = "asc", + DESC = "desc", + NONE = "none" +} export const toggleSortDirection = (column: DataColumn): DataColumn => { - const sortDirection = column.sortDirection === undefined || column.sortDirection === "desc" ? "asc" : "desc"; - return { ...column, sortDirection }; + return column.sortDirection + ? column.sortDirection === SortDirection.ASC + ? { ...column, sortDirection: SortDirection.DESC } + : { ...column, sortDirection: SortDirection.ASC } + : column; }; export const resetSortDirection = (column: DataColumn): DataColumn => { - return { ...column, sortDirection: undefined }; + return column.sortDirection ? { ...column, sortDirection: SortDirection.NONE } : column; }; + +export const createDataColumn = (dataColumn: Partial>): DataColumn => ({ + key: '', + name: '', + selected: true, + configurable: true, + sortDirection: SortDirection.NONE, + filters: createTree(), + render: () => React.createElement('span'), + ...dataColumn, +});