From 37af7dfbec92d8345e73c4d817a8390197da4c78 Mon Sep 17 00:00:00 2001 From: Vedant Apraj Date: Fri, 9 Jan 2026 23:17:22 +0530 Subject: [PATCH] fix: maintain cluster context after adding repo (#616) (#641) * fix: maintain cluster context after adding repo (#616) * chore: rollback lock file changes as requested --- .../src/components/LinkWithSearchParams.tsx | 4 +- frontend/src/components/Tabs.tsx | 1 - .../components/modal/AddRepositoryModal.tsx | 14 +++++-- frontend/src/layout/Header.tsx | 4 +- frontend/src/pages/Repository.tsx | 38 +++++-------------- 5 files changed, 25 insertions(+), 36 deletions(-) diff --git a/frontend/src/components/LinkWithSearchParams.tsx b/frontend/src/components/LinkWithSearchParams.tsx index 42464db..708cc08 100644 --- a/frontend/src/components/LinkWithSearchParams.tsx +++ b/frontend/src/components/LinkWithSearchParams.tsx @@ -23,8 +23,10 @@ const LinkWithSearchParams = ({ let prefixedUrl = to; - if (!clusterMode) { + if (!clusterMode && context) { prefixedUrl = `/${encodeURIComponent(context)}${to}`; + } else { + prefixedUrl = to; } const url = `${prefixedUrl}/?${params.toString()}`; diff --git a/frontend/src/components/Tabs.tsx b/frontend/src/components/Tabs.tsx index 9a9a8fb..d73dc57 100644 --- a/frontend/src/components/Tabs.tsx +++ b/frontend/src/components/Tabs.tsx @@ -18,7 +18,6 @@ export default function Tabs({ tabs, selectedTab }: TabsProps) { const moveTab = (tab: Tab) => { upsertSearchParams("tab", tab.value); }; - return (
diff --git a/frontend/src/components/modal/AddRepositoryModal.tsx b/frontend/src/components/modal/AddRepositoryModal.tsx index e833cea..dba5a63 100644 --- a/frontend/src/components/modal/AddRepositoryModal.tsx +++ b/frontend/src/components/modal/AddRepositoryModal.tsx @@ -5,8 +5,8 @@ import useAlertError from "../../hooks/useAlertError"; import useCustomSearchParams from "../../hooks/useCustomSearchParams"; import { useAppContext } from "../../context/AppContext"; import { useQueryClient } from "@tanstack/react-query"; -import { useNavigate } from "react-router"; import apiService from "../../API/apiService"; +import useNavigateWithSearchParams from "../../hooks/useNavigateWithSearchParams"; interface FormKeys { name: string; @@ -33,7 +33,7 @@ function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) { const [isLoading, setIsLoading] = useState(false); const alertError = useAlertError(); const { setSelectedRepo } = useAppContext(); - const navigate = useNavigate(); + const navigate = useNavigateWithSearchParams(); const queryClient = useQueryClient(); const addRepository = async () => { @@ -58,7 +58,8 @@ function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) { queryKey: ["helm", "repositories"], }); setSelectedRepo(formData.name || ""); - await navigate(`/repository/${formData.name}`, { + const path = `/repository/${formData.name}`; + await navigate(path, { replace: true, }); } catch (err) { @@ -68,6 +69,13 @@ function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) { }); } finally { setIsLoading(false); + setFormData({ + name: "", + url: "", + username: "", + password: "", + }); + onClose(); } }; diff --git a/frontend/src/layout/Header.tsx b/frontend/src/layout/Header.tsx index 7a81fe9..44f31a8 100644 --- a/frontend/src/layout/Header.tsx +++ b/frontend/src/layout/Header.tsx @@ -76,7 +76,7 @@ export default function Header() {
  • @@ -85,7 +85,7 @@ export default function Header() {
  • { @@ -21,12 +21,9 @@ function RepositoryPage() { ); const handleRepositoryChanged = (selectedRepository: Repository) => { - void navigateTo( - context - ? `/${encodeURIComponent(context)}/repository/${selectedRepository.name}` - : `/repository/${selectedRepository.name}`, - { replace: true } - ); + void navigateTo(`/repository/${selectedRepository.name}`, { + replace: true, + }); }; useEffect(() => { @@ -34,31 +31,14 @@ function RepositoryPage() { setSelectedRepo(repoFromParams); } }, [setSelectedRepo, repoFromParams]); - - useEffect(() => { - if (selectedRepo && !repoFromParams) { - void navigateTo( - context - ? `/${encodeURIComponent(context)}/repository/${selectedRepo}` - : `/repository/${selectedRepo}`, - { replace: true } - ); - } - }, [selectedRepo, repoFromParams, context, navigateTo]); - const { data: repositories = [], isSuccess } = useGetRepositories(); - const onSuccess = useEffectEvent(() => { - if (repositories && repositories.length && !repoFromParams) { - handleRepositoryChanged(repositories[0]); - } - }); - useEffect(() => { - if (repositories.length && isSuccess) { - onSuccess(); + if (repositories.length && isSuccess && !repoFromParams) { + const firstRepo = repositories[0]; + void navigateTo(`/repository/${firstRepo.name}`, { replace: true }); } - }, [repositories, isSuccess]); + }, [repositories, isSuccess, repoFromParams, context, navigateTo]); const selectedRepository = useMemo(() => { if (repoFromParams) {