From fd2dc790ffdcb14e71bc1e4c5d5485984af99ed7 Mon Sep 17 00:00:00 2001 From: Charles Thao Date: Thu, 7 Aug 2025 15:58:56 -0400 Subject: [PATCH] feat: Refactor APP_PREFIX to const.ts (#523) Signed-off-by: Charles Thao --- workspaces/frontend/src/app/NavSidebar.tsx | 3 +-- workspaces/frontend/src/app/const.ts | 2 ++ workspaces/frontend/src/app/context/NotebookContext.tsx | 6 ++++-- workspaces/frontend/src/index.tsx | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/workspaces/frontend/src/app/NavSidebar.tsx b/workspaces/frontend/src/app/NavSidebar.tsx index d4f5e272..3fd90631 100644 --- a/workspaces/frontend/src/app/NavSidebar.tsx +++ b/workspaces/frontend/src/app/NavSidebar.tsx @@ -10,9 +10,8 @@ import { import { PageSidebar, PageSidebarBody } from '@patternfly/react-core/dist/esm/components/Page'; import { useTypedLocation } from '~/app/routerHelper'; import { useNavData, isNavDataGroup, NavDataHref, NavDataGroup } from './AppRoutes'; -import { isMUITheme, LOGO_LIGHT } from './const'; +import { APP_PREFIX, isMUITheme, LOGO_LIGHT } from './const'; -const APP_PREFIX = process.env.APP_PREFIX || '/workspaces'; const NavHref: React.FC<{ item: NavDataHref }> = ({ item }) => { const location = useTypedLocation(); diff --git a/workspaces/frontend/src/app/const.ts b/workspaces/frontend/src/app/const.ts index d0661b7f..04f215bc 100644 --- a/workspaces/frontend/src/app/const.ts +++ b/workspaces/frontend/src/app/const.ts @@ -12,3 +12,5 @@ const STYLE_THEME = process.env.STYLE_THEME || Theme.MUI; export const LOGO_LIGHT = process.env.LOGO || 'logo.svg'; export const DEFAULT_POLLING_RATE_MS = 10000; + +export const APP_PREFIX = process.env.APP_PREFIX || '/workspaces'; diff --git a/workspaces/frontend/src/app/context/NotebookContext.tsx b/workspaces/frontend/src/app/context/NotebookContext.tsx index 2f660c72..5cd35053 100644 --- a/workspaces/frontend/src/app/context/NotebookContext.tsx +++ b/workspaces/frontend/src/app/context/NotebookContext.tsx @@ -1,5 +1,5 @@ import React, { ReactNode, useMemo } from 'react'; -import { BFF_API_VERSION } from '~/app/const'; +import { APP_PREFIX, BFF_API_VERSION } from '~/app/const'; import EnsureAPIAvailability from '~/app/EnsureAPIAvailability'; import useNotebookAPIState, { NotebookAPIState } from './useNotebookAPIState'; @@ -19,7 +19,9 @@ interface NotebookContextProviderProps { } export const NotebookContextProvider: React.FC = ({ children }) => { - const hostPath = `/api/${BFF_API_VERSION}`; + // Remove trailing slash from APP_PREFIX to avoid double slashes + const cleanPrefix = APP_PREFIX.replace(/\/$/, ''); + const hostPath = `${cleanPrefix}/api/${BFF_API_VERSION}`; const [apiState, refreshAPIState] = useNotebookAPIState(hostPath); diff --git a/workspaces/frontend/src/index.tsx b/workspaces/frontend/src/index.tsx index 10ba5a76..3ad481ce 100644 --- a/workspaces/frontend/src/index.tsx +++ b/workspaces/frontend/src/index.tsx @@ -3,10 +3,10 @@ import ReactDOM from 'react-dom/client'; import { BrowserRouter as Router } from 'react-router-dom'; import { ThemeProvider, createTheme } from '@mui/material/styles'; import App from './app/App'; +import { APP_PREFIX } from './app/const'; const theme = createTheme({ cssVariables: true }); const root = ReactDOM.createRoot(document.getElementById('root')!); -const APP_PREFIX = process.env.APP_PREFIX || '/workspaces'; root.render(