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,
} 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 }));
const state = store.getState() as RootState;
const dataExplorer = getDataExplorer(state.dataExplorer, FAVORITE_PANEL_ID);
const columns = dataExplorer.columns as DataColumns<FavoritePanelItem, FavoritePanelFilter>;
+ 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<LinkResource>()
.addIsA("headUuid", typeFilters.map(filter => filter.type))
+ .addILike("name", dataExplorer.searchValue)
})
.then(response => {
store.dispatch(dataExplorerActions.SET_ITEMS({
page: Math.floor(response.offset / response.limit),
rowsPerPage: response.limit
}));
+ store.dispatch<any>(checkPresenceInFavorites(response.items.map(item => item.uuid)));
});
} else {
store.dispatch(dataExplorerActions.SET_ITEMS({
};
};
+const getOrder = (direction: SortDirection) => {
+ const order = OrderBuilder.create<LinkResource>();
+ const addRule = (builder: OrderBuilder<GroupContentsResource | LinkResource>, direction: SortDirection) =>
+ direction === SortDirection.Asc
+ ? builder.addAsc("name")
+ : builder.addDesc("name");
+
+ return [
+ OrderBuilder.create<GroupContentsResource>(GroupContentsResourcePrefix.Collection),
+ OrderBuilder.create<GroupContentsResource>(GroupContentsResourcePrefix.Process),
+ OrderBuilder.create<GroupContentsResource>(GroupContentsResourcePrefix.Project)
+ ].reduce((acc, b) =>
+ acc.concat(addRule(b, direction)), addRule(OrderBuilder.create(), direction));
+};
+
const getColumnFilters = (columns: DataColumns<FavoritePanelItem, FavoritePanelFilter>, columnName: string) => {
const column = columns.find(c => c.name === columnName);
return column && column.filters ? column.filters.filter(f => f.selected) : [];