X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7be9038d988e4dd566536be646769f720b1ae04c..27dd462657b3b7434780de3250d0b2b0a75cea65:/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 aada41391f..35655fb7df 100644 --- a/src/components/data-table/data-column.ts +++ b/src/components/data-table/data-column.ts @@ -2,11 +2,16 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from "react"; +import React from "react"; import { DataTableFilters } from "../data-table-filters/data-table-filters-tree"; -import { createTree } from '~/models/tree'; +import { createTree } from 'models/tree'; -export interface DataColumn { +/** + * + * @template I Type of dataexplorer item reference + * @template R Type of resource to use to restrict values of column sort.field + */ +export interface DataColumn { key?: React.Key; name: string; selected: boolean; @@ -17,9 +22,9 @@ export interface DataColumn { * radio group and only one filter can be selected at a time. */ mutuallyExclusiveFilters?: boolean; - sortDirection?: SortDirection; + sort?: {direction: SortDirection, field: keyof R}; filters: DataTableFilters; - render: (item: T) => React.ReactElement; + render: (item: I) => React.ReactElement; renderHeader?: () => React.ReactElement; } @@ -29,24 +34,23 @@ export enum SortDirection { NONE = "none" } -export const toggleSortDirection = (column: DataColumn): DataColumn => { - return column.sortDirection - ? column.sortDirection === SortDirection.ASC - ? { ...column, sortDirection: SortDirection.DESC } - : { ...column, sortDirection: SortDirection.ASC } +export const toggleSortDirection = (column: DataColumn): DataColumn => { + return column.sort + ? column.sort.direction === SortDirection.ASC + ? { ...column, sort: {...column.sort, direction: SortDirection.DESC} } + : { ...column, sort: {...column.sort, direction: SortDirection.ASC} } : column; }; -export const resetSortDirection = (column: DataColumn): DataColumn => { - return column.sortDirection ? { ...column, sortDirection: SortDirection.NONE } : column; +export const resetSortDirection = (column: DataColumn): DataColumn => { + return column.sort ? { ...column, sort: {...column.sort, direction: SortDirection.NONE} } : column; }; -export const createDataColumn = (dataColumn: Partial>): DataColumn => ({ +export const createDataColumn = (dataColumn: Partial>): DataColumn => ({ key: '', name: '', selected: true, configurable: true, - sortDirection: SortDirection.NONE, filters: createTree(), render: () => React.createElement('span'), ...dataColumn,