1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import { Dispatch, MiddlewareAPI } from 'redux';
6 import { RootState } from '../store';
7 import { DataColumns } from 'components/data-table/data-table';
8 import { DataExplorer } from './data-explorer-reducer';
9 import { ListResults } from 'services/common-service/common-service';
10 import { createTree } from 'models/tree';
11 import { DataTableFilters } from 'components/data-table-filters/data-table-filters-tree';
13 export abstract class DataExplorerMiddlewareService {
14 protected readonly id: string;
16 protected constructor(id: string) {
24 public getColumnFilters<T>(
25 columns: DataColumns<T>,
28 return getDataExplorerColumnFilters(columns, columnName);
31 abstract requestItems(
32 api: MiddlewareAPI<Dispatch, RootState>,
33 criteriaChanged?: boolean
37 export const getDataExplorerColumnFilters = <T>(
38 columns: DataColumns<T>,
40 ): DataTableFilters => {
41 const column = columns.find((c) => c.name === columnName);
42 return column ? column.filters : createTree();
45 export const dataExplorerToListParams = (dataExplorer: DataExplorer) => ({
46 limit: dataExplorer.rowsPerPage,
47 offset: dataExplorer.page * dataExplorer.rowsPerPage,
50 export const listResultsToDataExplorerItemsMeta = <R>({
54 }: ListResults<R>) => ({
56 page: Math.floor(offset / limit),