X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/b5b75b89e923864389f814af97974a55b69a343f..5430c336b96cbb7c20bffa1cbdb8cffea32fb460:/src/store/data-explorer/data-explorer-reducer.ts diff --git a/src/store/data-explorer/data-explorer-reducer.ts b/src/store/data-explorer/data-explorer-reducer.ts index 68f80b3c..a0a7eb64 100644 --- a/src/store/data-explorer/data-explorer-reducer.ts +++ b/src/store/data-explorer/data-explorer-reducer.ts @@ -21,7 +21,7 @@ import { DataTableFilters } from 'components/data-table-filters/data-table-filte export interface DataExplorer { fetchMode: DataTableFetchMode; - columns: DataColumns; + columns: DataColumns; items: any[]; itemsAvailable: number; page: number; @@ -70,14 +70,24 @@ export const dataExplorerReducer = ( SET_FILTERS: ({ id, columnName, filters }) => update(state, id, mapColumns(setFilters(columnName, filters))), - SET_ITEMS: ({ id, items, itemsAvailable, page, rowsPerPage }) => - update(state, id, (explorer) => ({ - ...explorer, - items, - itemsAvailable, - page: page || 0, - rowsPerPage, - })), + SET_ITEMS: ({ id, items, itemsAvailable, page, rowsPerPage }) => ( + update(state, id, (explorer) => { + // Reject updates to pages other than current, + // DataExplorer middleware should retry + const updatedPage = page || 0; + if (explorer.page === updatedPage) { + return { + ...explorer, + items, + itemsAvailable, + page: updatedPage, + rowsPerPage, + } + } else { + return explorer; + } + }) + ), APPEND_ITEMS: ({ id, items, itemsAvailable, page, rowsPerPage }) => update(state, id, (explorer) => ({ @@ -117,9 +127,9 @@ export const getDataExplorer = (state: DataExplorerState, id: string) => { return returnValue; }; -export const getSortColumn = (dataExplorer: DataExplorer) => +export const getSortColumn = (dataExplorer: DataExplorer): DataColumn | undefined => dataExplorer.columns.find( - (c: any) => !!c.sortDirection && c.sortDirection !== SortDirection.NONE + (c: DataColumn) => !!c.sort && c.sort.direction !== SortDirection.NONE ); const update = ( @@ -129,8 +139,8 @@ const update = ( ) => ({ ...state, [id]: updateFn(getDataExplorer(state, id)) }); const canUpdateColumns = ( - prevColumns: DataColumns, - nextColumns: DataColumns + prevColumns: DataColumns, + nextColumns: DataColumns ) => { if (prevColumns.length !== nextColumns.length) { return true; @@ -146,7 +156,7 @@ const canUpdateColumns = ( }; const setColumns = - (columns: DataColumns) => (dataExplorer: DataExplorer) => ({ + (columns: DataColumns) => (dataExplorer: DataExplorer) => ({ ...dataExplorer, columns: canUpdateColumns(dataExplorer.columns, columns) ? columns @@ -154,23 +164,23 @@ const setColumns = }); const mapColumns = - (mapFn: (column: DataColumn) => DataColumn) => + (mapFn: (column: DataColumn) => DataColumn) => (dataExplorer: DataExplorer) => ({ ...dataExplorer, columns: dataExplorer.columns.map(mapFn), }); -const toggleSort = (columnName: string) => (column: DataColumn) => +const toggleSort = (columnName: string) => (column: DataColumn) => column.name === columnName ? toggleSortDirection(column) : resetSortDirection(column); -const toggleColumn = (columnName: string) => (column: DataColumn) => +const toggleColumn = (columnName: string) => (column: DataColumn) => column.name === columnName ? { ...column, selected: !column.selected } : column; const setFilters = (columnName: string, filters: DataTableFilters) => - (column: DataColumn) => + (column: DataColumn) => column.name === columnName ? { ...column, filters } : column;