-import { ResourceKind, extractUuidKind } from '~/models/resource';
-import { getCollectionUrl } from "~/models/collection";
-import { getProjectUrl } from "~/models/project";
-import { SidePanelTreeCategory } from '../side-panel-tree/side-panel-tree-actions';
-import { Routes, getProcessUrl, getProcessLogUrl, getGroupUrl } from '~/routes/routes';
-import { RootState } from '~/store/store';
-import { ServiceRepository } from '~/services/services';
-import { GROUPS_PANEL_LABEL } from '~/store/breadcrumbs/breadcrumbs-actions';
-
-export const navigateTo = (uuid: string) =>
- async (dispatch: Dispatch) => {
- const kind = extractUuidKind(uuid);
- if (kind === ResourceKind.PROJECT || kind === ResourceKind.USER) {
- dispatch<any>(navigateToProject(uuid));
- } else if (kind === ResourceKind.COLLECTION) {
- dispatch<any>(navigateToCollection(uuid));
- } else if (kind === ResourceKind.CONTAINER_REQUEST) {
- dispatch<any>(navigateToProcess(uuid));
- } else if (kind === ResourceKind.VIRTUAL_MACHINE) {
- dispatch<any>(navigateToAdminVirtualMachines);
+import { ResourceKind, extractUuidKind } from "models/resource";
+import { SidePanelTreeCategory } from "../side-panel-tree/side-panel-tree-actions";
+import { Routes, getGroupUrl, getNavUrl, getUserProfileUrl } from "routes/routes";
+import { RootState } from "store/store";
+import { ServiceRepository } from "services/services";
+import { pluginConfig } from "plugins";
+import { snackbarActions, SnackbarKind } from "store/snackbar/snackbar-actions";
+import { USERS_PANEL_LABEL, MY_ACCOUNT_PANEL_LABEL } from "store/breadcrumbs/breadcrumbs-actions";
+
+export const navigationNotAvailable = (id: string) =>
+ snackbarActions.OPEN_SNACKBAR({
+ message: `${id} not available`,
+ hideDuration: 3000,
+ kind: SnackbarKind.ERROR,
+ });
+
+export const navigateTo = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState) => {
+ for (const navToFn of pluginConfig.navigateToHandlers) {
+ if (navToFn(dispatch, getState, uuid)) {
+ return;