X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/9f72326a9442c6db9c29cbd50db7d047106efc90..a080578919155fc6f6d1be2f966951b629ae5b45:/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 c5020e89..548a1178 100644 --- a/src/store/favorite-panel/favorite-panel-middleware.ts +++ b/src/store/favorite-panel/favorite-panel-middleware.ts @@ -18,6 +18,10 @@ import { import { FavoritePanelItem, resourceToDataItem } from "../../views/favorite-panel/favorite-panel-item"; import { LinkResource } from "../../models/link"; 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 })); @@ -54,12 +58,19 @@ 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)) @@ -90,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) : [];