+
+export const loadSharedWithMe = handleFirstTimeLoad(async (dispatch: Dispatch) => {
+ dispatch<any>(loadSharedWithMePanel());
+ await dispatch<any>(activateSidePanelTreeItem(SidePanelTreeCategory.SHARED_WITH_ME));
+ await dispatch<any>(setSidePanelBreadcrumbs(SidePanelTreeCategory.SHARED_WITH_ME));
+});
+
+export const loadRunProcess = handleFirstTimeLoad(
+ async (dispatch: Dispatch) => {
+ await dispatch<any>(loadRunProcessPanel());
+ }
+);
+
+export const loadWorkflow = handleFirstTimeLoad(async (dispatch: Dispatch<any>) => {
+ dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.WORKFLOWS));
+ await dispatch(loadWorkflowPanel());
+ dispatch(setSidePanelBreadcrumbs(SidePanelTreeCategory.WORKFLOWS));
+});
+
+export const loadPublicFavorites = () =>
+ handleFirstTimeLoad(
+ (dispatch: Dispatch) => {
+ dispatch<any>(activateSidePanelTreeItem(SidePanelTreeCategory.PUBLIC_FAVORITES));
+ dispatch<any>(loadPublicFavoritePanel());
+ dispatch<any>(setSidePanelBreadcrumbs(SidePanelTreeCategory.PUBLIC_FAVORITES));
+ });
+
+export const loadSearchResults = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadSearchResultsPanel());
+ });
+
+export const loadLinks = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadLinkPanel());
+ });
+
+export const loadVirtualMachines = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadVirtualMachinesPanel());
+ dispatch(setBreadcrumbs([{ label: 'Virtual Machines' }]));
+ });
+
+export const loadRepositories = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadRepositoriesPanel());
+ dispatch(setBreadcrumbs([{ label: 'Repositories' }]));
+ });
+
+export const loadSshKeys = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadSshKeysPanel());
+ });
+
+export const loadSiteManager = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadSiteManagerPanel());
+ });
+
+export const loadMyAccount = handleFirstTimeLoad(
+ (dispatch: Dispatch<any>) => {
+ dispatch(loadMyAccountPanel());
+ });
+
+export const loadKeepServices = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadKeepServicesPanel());
+ });
+
+export const loadUsers = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadUsersPanel());
+ dispatch(setBreadcrumbs([{ label: 'Users' }]));
+ });
+
+export const loadComputeNodes = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadComputeNodesPanel());
+ });
+
+export const loadApiClientAuthorizations = handleFirstTimeLoad(
+ async (dispatch: Dispatch<any>) => {
+ await dispatch(loadApiClientAuthorizationsPanel());
+ });
+
+export const loadGroupsPanel = handleFirstTimeLoad(
+ (dispatch: Dispatch<any>) => {
+ dispatch(setGroupsBreadcrumbs());
+ dispatch(groupPanelActions.loadGroupsPanel());
+ });
+
+
+export const loadGroupDetailsPanel = (groupUuid: string) =>
+ handleFirstTimeLoad(
+ (dispatch: Dispatch<any>) => {
+ dispatch(setGroupDetailsBreadcrumbs(groupUuid));
+ dispatch(groupDetailsPanelActions.loadGroupDetailsPanel(groupUuid));
+ });
+
+const finishLoadingProject = (project: GroupContentsResource | string) =>
+ async (dispatch: Dispatch<any>) => {
+ const uuid = typeof project === 'string' ? project : project.uuid;
+ dispatch(openProjectPanel(uuid));
+ dispatch(loadDetailsPanel(uuid));
+ if (typeof project !== 'string') {
+ dispatch(updateResources([project]));
+ }
+ };
+
+const loadGroupContentsResource = async (params: {
+ uuid: string,
+ userUuid: string,
+ services: ServiceRepository
+}) => {
+ const filters = new FilterBuilder()
+ .addEqual('uuid', params.uuid)
+ .getFilters();
+ const { items } = await params.services.groupsService.contents(params.userUuid, {
+ filters,
+ recursive: true,
+ includeTrash: true,
+ });
+ const resource = items.shift();
+ let handler: GroupContentsHandler;
+ if (resource) {
+ handler = (resource.kind === ResourceKind.COLLECTION || resource.kind === ResourceKind.PROJECT) && resource.isTrashed
+ ? groupContentsHandlers.TRASHED(resource)
+ : groupContentsHandlers.OWNED(resource);
+ } else {
+ const kind = extractUuidKind(params.uuid);
+ let resource: GroupContentsResource;
+ if (kind === ResourceKind.COLLECTION) {
+ resource = await params.services.collectionService.get(params.uuid);
+ } else if (kind === ResourceKind.PROJECT) {
+ resource = await params.services.projectService.get(params.uuid);
+ } else {
+ resource = await params.services.containerRequestService.get(params.uuid);
+ }
+ handler = groupContentsHandlers.SHARED(resource);
+ }
+ return (cases: MatchCases<typeof groupContentsHandlersRecord, GroupContentsHandler, void>) =>
+ groupContentsHandlers.match(handler, cases);
+
+};
+
+const groupContentsHandlersRecord = {
+ TRASHED: ofType<GroupContentsResource>(),
+ SHARED: ofType<GroupContentsResource>(),
+ OWNED: ofType<GroupContentsResource>(),
+};
+
+const groupContentsHandlers = unionize(groupContentsHandlersRecord);
+
+type GroupContentsHandler = UnionOf<typeof groupContentsHandlers>;