X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/dd01c37f3cc8b741e4202c480271eb2ffa6a3021..98237b19875f6437fa1e01845ad9c911d886cf04:/src/store/favorite-panel/favorite-panel-middleware.ts diff --git a/src/store/favorite-panel/favorite-panel-middleware.ts b/src/store/favorite-panel/favorite-panel-middleware.ts index 27e36b0c..0ce13b46 100644 --- a/src/store/favorite-panel/favorite-panel-middleware.ts +++ b/src/store/favorite-panel/favorite-panel-middleware.ts @@ -9,10 +9,6 @@ import { RootState } from "../store"; import { getDataExplorer } from "../data-explorer/data-explorer-reducer"; import { FilterBuilder } from "../../common/api/filter-builder"; import { DataColumns } from "../../components/data-table/data-table"; -import { ProcessResource } from "../../models/process"; -import { OrderBuilder } from "../../common/api/order-builder"; -import { GroupContentsResourcePrefix } from "../../services/groups-service/groups-service"; -import { SortDirection } from "../../components/data-table/data-column"; import { columns, FAVORITE_PANEL_ID, @@ -21,7 +17,11 @@ import { } from "../../views/favorite-panel/favorite-panel"; import { FavoritePanelItem, resourceToDataItem } from "../../views/favorite-panel/favorite-panel-item"; import { LinkResource } from "../../models/link"; -import { ResourceKind } from "../../models/resource"; +import { checkPresenceInFavorites } from "../favorites/favorites-actions"; +import { OrderBuilder } from "../../common/api/order-builder"; +import { SortDirection } from "../../components/data-table/data-column"; +import { GroupContentsResource, GroupContentsResourcePrefix } from "../../services/groups-service/groups-service"; +import { FavoriteOrderBuilder } from "../../services/favorite-service/favorite-order-builder"; export const favoritePanelMiddleware: Middleware = store => next => { next(dataExplorerActions.SET_COLUMNS({ id: FAVORITE_PANEL_ID, columns })); @@ -58,15 +58,23 @@ export const favoritePanelMiddleware: Middleware = store => next => { const state = store.getState() as RootState; const dataExplorer = getDataExplorer(state.dataExplorer, FAVORITE_PANEL_ID); const columns = dataExplorer.columns as DataColumns; + const sortColumn = dataExplorer.columns.find(({ sortDirection }) => Boolean(sortDirection && sortDirection !== "none")); const typeFilters = getColumnFilters(columns, FavoritePanelColumnNames.TYPE); + const order = FavoriteOrderBuilder.create(); if (typeFilters.length > 0) { favoriteService .list(state.projects.currentItemId, { limit: dataExplorer.rowsPerPage, offset: dataExplorer.page * dataExplorer.rowsPerPage, + order: sortColumn!.name === FavoritePanelColumnNames.NAME + ? sortColumn!.sortDirection === SortDirection.Asc + ? order.addDesc("name") + : order.addAsc("name") + : order, filters: FilterBuilder .create() .addIsA("headUuid", typeFilters.map(filter => filter.type)) + .addILike("name", dataExplorer.searchValue) }) .then(response => { store.dispatch(dataExplorerActions.SET_ITEMS({ @@ -76,6 +84,7 @@ export const favoritePanelMiddleware: Middleware = store => next => { page: Math.floor(response.offset / response.limit), rowsPerPage: response.limit })); + store.dispatch(checkPresenceInFavorites(response.items.map(item => item.uuid))); }); } else { store.dispatch(dataExplorerActions.SET_ITEMS({ @@ -92,6 +101,21 @@ export const favoritePanelMiddleware: Middleware = store => next => { }; }; +const getOrder = (direction: SortDirection) => { + const order = OrderBuilder.create(); + const addRule = (builder: OrderBuilder, direction: SortDirection) => + direction === SortDirection.Asc + ? builder.addAsc("name") + : builder.addDesc("name"); + + return [ + OrderBuilder.create(GroupContentsResourcePrefix.Collection), + OrderBuilder.create(GroupContentsResourcePrefix.Process), + OrderBuilder.create(GroupContentsResourcePrefix.Project) + ].reduce((acc, b) => + acc.concat(addRule(b, direction)), addRule(OrderBuilder.create(), direction)); +}; + const getColumnFilters = (columns: DataColumns, columnName: string) => { const column = columns.find(c => c.name === columnName); return column && column.filters ? column.filters.filter(f => f.selected) : [];