import { ResourceKind } from 'models/resource';
import { CategoriesListReducer } from 'common/plugintypes';
import { pluginConfig } from 'plugins';
-import { LinkClass } from 'models/link';
+import { LinkClass, LinkResource } from 'models/link';
+import { verifyAndUpdateLinks } from 'common/link-update-name';
export enum SidePanelTreeCategory {
PROJECTS = 'Home Projects',
const treePicker = getTreePicker(SIDE_PANEL_TREE)(getState().treePicker);
const node = treePicker ? getNode(projectUuid)(treePicker) : undefined;
if (projectUuid === SidePanelTreeCategory.PUBLIC_FAVORITES) {
- await dispatch<any>(loadPublicFavoritesTree());
+ const unverifiedPubFaves = await dispatch<any>(loadPublicFavoritesTree());
+ verifyAndUpdateLinkNames(unverifiedPubFaves, dispatch, getState, services);
} else if (projectUuid === SidePanelTreeCategory.FAVORITES) {
- await dispatch<any>(loadFavoritesTree());
+ const unverifiedFaves = await dispatch<any>(loadFavoritesTree());
+ await setFaves(unverifiedFaves, dispatch, getState, services);
+ verifyAndUpdateLinkNames(unverifiedFaves, dispatch, getState, services);
} else if (node || projectUuid !== '') {
await dispatch<any>(loadProject(projectUuid));
}
})
);
- dispatch(resourcesActions.SET_RESOURCES(items));
+ return items;
+};
+
+const setFaves = async(links: LinkResource[], dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+
+ const uuids = links.map(it => it.headUuid);
+ const groupItems: any = await services.groupsService.list({
+ filters: new FilterBuilder()
+ .addIn("uuid", uuids)
+ .getFilters()
+ });
+ const collectionItems: any = await services.collectionService.list({
+ filters: new FilterBuilder()
+ .addIn("uuid", uuids)
+ .getFilters()
+ });
+ const processItems: any = await services.containerRequestService.list({
+ filters: new FilterBuilder()
+ .addIn("uuid", uuids)
+ .getFilters()
+ });
+ const responseItems = groupItems.items.concat(collectionItems.items).concat(processItems.items);
+
+ //setting resources here so they won't be re-fetched in validation step
+ dispatch(resourcesActions.SET_RESOURCES(responseItems));
+};
+
+const verifyAndUpdateLinkNames = async (links: LinkResource[], dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ const verfifiedLinks = await verifyAndUpdateLinks(links, dispatch, getState, services);
+
+ dispatch(
+ treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({
+ id: SidePanelTreeCategory.FAVORITES,
+ pickerId: SIDE_PANEL_TREE,
+ nodes: verfifiedLinks.map(item => initTreeNode({ id: item.headUuid, value: item })),
+ })
+ );
};
export const loadPublicFavoritesTree = () => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
const { items } = await services.linkService.list(params);
+ const uuids = items.map(it => it.headUuid);
+ const groupItems: any = await services.groupsService.list({
+ filters: new FilterBuilder()
+ .addIn("uuid", uuids)
+ .addIsA("uuid", typeFilters)
+ .getFilters()
+ });
+ const collectionItems: any = await services.collectionService.list({
+ filters: new FilterBuilder()
+ .addIn("uuid", uuids)
+ .addIsA("uuid", typeFilters)
+ .getFilters()
+ });
+ const processItems: any = await services.containerRequestService.list({
+ filters: new FilterBuilder()
+ .addIn("uuid", uuids)
+ .addIsA("uuid", typeFilters)
+ .getFilters()
+ });
+
+ const responseItems = groupItems.items.concat(collectionItems.items).concat(processItems.items);
+
+ const filteredItems = items.filter(item => responseItems.some(responseItem => responseItem.uuid === item.headUuid));
+
dispatch(
treePickerActions.LOAD_TREE_PICKER_NODE_SUCCESS({
id: SidePanelTreeCategory.PUBLIC_FAVORITES,
pickerId: SIDE_PANEL_TREE,
- nodes: items.map(item => initTreeNode({ id: item.headUuid, value: item })),
+ nodes: filteredItems.map(item => initTreeNode({ id: item.headUuid, value: item })),
})
);
- dispatch(resourcesActions.SET_RESOURCES(items));
+ //setting resources here so they won't be re-fetched in validation step
+ dispatch(resourcesActions.SET_RESOURCES(responseItems));
+
+ return filteredItems;
};
export const activateSidePanelTreeItem = (id: string) =>