Merge branch 'master' into 14452-my-account
[arvados-workbench2.git] / src / store / data-explorer / data-explorer-middleware-service.ts
index e47824c17d3a401b55a91a8c7a0be760962e48b4..80ab514cb41440b9a3356f62ed6379a4ec08896c 100644 (file)
@@ -3,8 +3,12 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { Dispatch, MiddlewareAPI } from "redux";
-import { DataColumns } from "../../components/data-table/data-table";
 import { RootState } from "../store";
+import { DataColumns } from "~/components/data-table/data-table";
+import { DataExplorer } from './data-explorer-reducer';
+import { ListResults } from '~/services/common-service/common-resource-service';
+import { createTree } from "~/models/tree";
+import { DataTableFilters } from "~/components/data-table-filters/data-table-filters-tree";
 
 export abstract class DataExplorerMiddlewareService {
     protected readonly id: string;
@@ -17,6 +21,25 @@ export abstract class DataExplorerMiddlewareService {
         return this.id;
     }
 
-    abstract getColumns(): DataColumns<any>;
+    public getColumnFilters<T>(columns: DataColumns<T>, columnName: string): DataTableFilters {
+        return getDataExplorerColumnFilters(columns, columnName);
+    }
+
     abstract requestItems(api: MiddlewareAPI<Dispatch, RootState>): void;
 }
+
+export const getDataExplorerColumnFilters = <T>(columns: DataColumns<T>, columnName: string): DataTableFilters => {
+    const column = columns.find(c => c.name === columnName);
+    return column ? column.filters : createTree();
+};
+
+export const dataExplorerToListParams = (dataExplorer: DataExplorer) => ({
+    limit: dataExplorer.rowsPerPage,
+    offset: dataExplorer.page * dataExplorer.rowsPerPage,
+});
+
+export const listResultsToDataExplorerItemsMeta = <R>({ itemsAvailable, offset, limit }: ListResults<R>) => ({
+    itemsAvailable,
+    page: Math.floor(offset / limit),
+    rowsPerPage: limit
+});