diff --git a/backend/src/utils/constants.ts b/backend/src/utils/constants.ts
index e935938365..227495249c 100644
--- a/backend/src/utils/constants.ts
+++ b/backend/src/utils/constants.ts
@@ -64,7 +64,7 @@ export const blankDashboardCR: DashboardConfig = {
disablePipelineExperiments: false,
disableDistributedWorkloads: false,
disableModelRegistry: true,
- disableConnectionTypes: true,
+ disableConnectionTypes: false,
disableStorageClasses: true,
disableNIMModelServing: true,
},
diff --git a/frontend/src/app/App.tsx b/frontend/src/app/App.tsx
index 9bb6dcc9af..d13dc0cc1f 100644
--- a/frontend/src/app/App.tsx
+++ b/frontend/src/app/App.tsx
@@ -107,36 +107,36 @@ const App: React.FC = () => {
) : (
- setNotificationsOpen(!notificationsOpen)} />
- }
- sidebar={isAllowed ? : undefined}
- notificationDrawer={
- setNotificationsOpen(false)} />
- }
- isNotificationDrawerExpanded={notificationsOpen}
- mainContainerId={DASHBOARD_MAIN_CONTAINER_ID}
- data-testid={DASHBOARD_MAIN_CONTAINER_ID}
- >
-
-
-
+
+ setNotificationsOpen(!notificationsOpen)} />
+ }
+ sidebar={isAllowed ? : undefined}
+ notificationDrawer={
+ setNotificationsOpen(false)} />
+ }
+ isNotificationDrawerExpanded={notificationsOpen}
+ mainContainerId={DASHBOARD_MAIN_CONTAINER_ID}
+ data-testid={DASHBOARD_MAIN_CONTAINER_ID}
+ >
+
+
-
-
-
-
-
+
+
+
+
+
)}
diff --git a/frontend/src/app/AppRoutes.tsx b/frontend/src/app/AppRoutes.tsx
index 037431c5a3..fff372e391 100644
--- a/frontend/src/app/AppRoutes.tsx
+++ b/frontend/src/app/AppRoutes.tsx
@@ -15,6 +15,7 @@ import { SupportedArea } from '~/concepts/areas';
import useIsAreaAvailable from '~/concepts/areas/useIsAreaAvailable';
import ModelRegistrySettingsRoutes from '~/pages/modelRegistrySettings/ModelRegistrySettingsRoutes';
import ConnectionTypeRoutes from '~/pages/connectionTypes/ConnectionTypeRoutes';
+import ComingSoonPage from '~/pages/ComingSoonPage';
const HomePage = React.lazy(() => import('../pages/home/Home'));
@@ -43,10 +44,6 @@ const GlobalPipelineExecutionsRoutes = React.lazy(
const GlobalArtifactsRoutes = React.lazy(() => import('../pages/pipelines/GlobalArtifactsRoutes'));
-const GlobalDistributedWorkloadsRoutes = React.lazy(
- () => import('../pages/distributedWorkloads/GlobalDistributedWorkloadsRoutes'),
-);
-
const ClusterSettingsPage = React.lazy(() => import('../pages/clusterSettings/ClusterSettings'));
const CustomServingRuntimeRoutes = React.lazy(
() => import('../pages/modelServing/customServingRuntimes/CustomServingRuntimeRoutes'),
@@ -94,7 +91,10 @@ const AppRoutes: React.FC = () => {
) : (
} />
)}
+ } />
+ } />
} />
+ } />
} />
} />
@@ -117,8 +117,6 @@ const AppRoutes: React.FC = () => {
} />
} />
- } />
-
} />
{isAdmin && (
diff --git a/frontend/src/app/NavSidebar.tsx b/frontend/src/app/NavSidebar.tsx
index 7c33a84cc2..2147984edb 100644
--- a/frontend/src/app/NavSidebar.tsx
+++ b/frontend/src/app/NavSidebar.tsx
@@ -4,29 +4,58 @@ import {
Nav,
NavExpandable,
NavItem,
+ NavGroup as PfNavGroup,
NavList,
PageSidebar,
PageSidebarBody,
} from '@patternfly/react-core';
-import { isNavDataGroup, NavDataGroup, NavDataHref, useBuildNavData } from '~/utilities/NavData';
+import {
+ isNavDataGroup,
+ isNavDataSection,
+ NavDataGroup,
+ NavDataHref,
+ NavDataSection,
+ useBuildNavData,
+} from '~/utilities/NavData';
+import { ProjectsContext } from '~/concepts/projects/ProjectsContext';
-const checkLinkActiveStatus = (pathname: string, href: string) =>
- href.split('/')[1] === pathname.split('/')[1];
+const checkLinkActiveStatus = (pathname: string, href: string, namespace?: string) => {
+ if (!namespace) {
+ return href.split('/')[1] === pathname.split('/')[1];
+ }
-const NavHref: React.FC<{ item: NavDataHref; pathname: string }> = ({ item, pathname }) => (
-
- {item.label}
-
-);
+ const splits = href.split('/');
+ const itemIdentifier = splits[splits.length - 1];
+
+ let pathSplits = pathname.split('/');
+ if (pathSplits[pathSplits.length - 2] === 'projects') {
+ pathSplits = pathSplits.slice(0, -1);
+ }
+ const pathIdentifier = pathSplits[pathSplits.length - 1];
+
+ return itemIdentifier ? (pathIdentifier || '/').includes(itemIdentifier) : !pathIdentifier;
+};
+
+const NavHref: React.FC<{ item: NavDataHref; pathname: string }> = ({ item, pathname }) => {
+ const { preferredProject } = React.useContext(ProjectsContext);
+ return (
+
+ {item.label}
+
+ );
+};
const NavGroup: React.FC<{ item: NavDataGroup; pathname: string }> = ({ item, pathname }) => {
const { group, children } = item;
- const isActive = !!children.find((c) => checkLinkActiveStatus(pathname, c.href));
+ const { preferredProject } = React.useContext(ProjectsContext);
+ const isActive = !!children.find((c) =>
+ checkLinkActiveStatus(pathname, c.href, preferredProject?.metadata.name),
+ );
const [expanded, setExpanded] = React.useState(isActive);
// Whenever the group becomes active, it should also be expanded
@@ -55,6 +84,24 @@ const NavGroup: React.FC<{ item: NavDataGroup; pathname: string }> = ({ item, pa
);
};
+const NavSection: React.FC<{ item: NavDataSection; pathname: string }> = ({ item, pathname }) => (
+
+ {item.children.map((childItem) =>
+ isNavDataGroup(childItem) ? (
+
+ ) : (
+
+ ),
+ )}
+
+);
+
const NavSidebar: React.FC = () => {
const routerLocation = useLocation();
const userNavData = useBuildNavData();
@@ -65,7 +112,9 @@ const NavSidebar: React.FC = () => {