From 6b99b3fc3eba976d87d1662d09fd5b0e89380a39 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 16 May 2026 19:28:16 -0500 Subject: [PATCH] fix hardcoded leading-slash hrefs to respect FRIGATE_BASE_PATH --- web/src/components/auth/ProtectedRoute.tsx | 3 ++- web/src/components/card/ReviewCard.tsx | 6 +++++- web/src/components/chat/ChatAttachmentChip.tsx | 3 ++- web/src/components/chat/ChatEventThumbnailsRow.tsx | 3 ++- web/src/components/menu/SearchResultActions.tsx | 6 +++++- web/src/components/overlay/DebugReplayDialog.tsx | 7 ++++++- web/src/components/overlay/ExportDialog.tsx | 6 +++++- web/src/components/overlay/MobileReviewSettingsDrawer.tsx | 7 ++++++- web/src/components/timeline/EventMenu.tsx | 7 ++++++- web/src/views/events/EventView.tsx | 7 ++++++- web/src/views/motion-search/MotionSearchView.tsx | 7 ++++++- 11 files changed, 51 insertions(+), 11 deletions(-) diff --git a/web/src/components/auth/ProtectedRoute.tsx b/web/src/components/auth/ProtectedRoute.tsx index bcfa8fdf36..c10a94a020 100644 --- a/web/src/components/auth/ProtectedRoute.tsx +++ b/web/src/components/auth/ProtectedRoute.tsx @@ -6,6 +6,7 @@ import { isRedirectingToLogin, setRedirectingToLogin, } from "@/api/auth-redirect"; +import { baseUrl } from "@/api/baseUrl"; export default function ProtectedRoute({ requiredRoles, @@ -24,7 +25,7 @@ export default function ProtectedRoute({ !isRedirectingToLogin() ) { setRedirectingToLogin(true); - window.location.href = "/login"; + window.location.href = `${baseUrl}login`; } }, [auth.isLoading, auth.isAuthenticated, auth.user]); diff --git a/web/src/components/card/ReviewCard.tsx b/web/src/components/card/ReviewCard.tsx index 33d651ed89..19b4714095 100644 --- a/web/src/components/card/ReviewCard.tsx +++ b/web/src/components/card/ReviewCard.tsx @@ -94,7 +94,11 @@ export default function ReviewCard({ toast.success(t("export.toast.success"), { position: "top-center", action: ( - + ), diff --git a/web/src/components/chat/ChatAttachmentChip.tsx b/web/src/components/chat/ChatAttachmentChip.tsx index 5894efaa77..ef4a114555 100644 --- a/web/src/components/chat/ChatAttachmentChip.tsx +++ b/web/src/components/chat/ChatAttachmentChip.tsx @@ -1,4 +1,5 @@ import { useApiHost } from "@/api"; +import { baseUrl } from "@/api/baseUrl"; import { useCameraFriendlyName } from "@/hooks/use-camera-friendly-name"; import { useTranslation } from "react-i18next"; import useSWR from "swr"; @@ -79,7 +80,7 @@ export function ChatAttachmentChip({ e.stopPropagation()} diff --git a/web/src/components/menu/SearchResultActions.tsx b/web/src/components/menu/SearchResultActions.tsx index b88e698531..43a192dc9e 100644 --- a/web/src/components/menu/SearchResultActions.tsx +++ b/web/src/components/menu/SearchResultActions.tsx @@ -116,7 +116,11 @@ export default function SearchResultActions({ closeButton: true, dismissible: false, action: ( - + diff --git a/web/src/components/overlay/DebugReplayDialog.tsx b/web/src/components/overlay/DebugReplayDialog.tsx index 2f9a7159a6..665040dc5c 100644 --- a/web/src/components/overlay/DebugReplayDialog.tsx +++ b/web/src/components/overlay/DebugReplayDialog.tsx @@ -1,4 +1,5 @@ import { useCallback, useState } from "react"; +import { baseUrl } from "@/api/baseUrl"; import { Dialog, DialogContent, @@ -227,7 +228,11 @@ export default function DebugReplayDialog({ closeButton: true, dismissible: false, action: ( - + ), diff --git a/web/src/components/overlay/ExportDialog.tsx b/web/src/components/overlay/ExportDialog.tsx index eeec65f962..0d57821fc1 100644 --- a/web/src/components/overlay/ExportDialog.tsx +++ b/web/src/components/overlay/ExportDialog.tsx @@ -163,7 +163,11 @@ export default function ExportDialog({ toast.success(t("export.toast.queued"), { position: "top-center", action: ( - + ), diff --git a/web/src/components/overlay/MobileReviewSettingsDrawer.tsx b/web/src/components/overlay/MobileReviewSettingsDrawer.tsx index bca921072e..2ad2067462 100644 --- a/web/src/components/overlay/MobileReviewSettingsDrawer.tsx +++ b/web/src/components/overlay/MobileReviewSettingsDrawer.tsx @@ -1,4 +1,5 @@ import { useCallback, useState } from "react"; +import { baseUrl } from "@/api/baseUrl"; import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer"; import { Button } from "../ui/button"; import { FaArrowDown, FaCalendarAlt, FaCog, FaFilter } from "react-icons/fa"; @@ -190,7 +191,11 @@ export default function MobileReviewSettingsDrawer({ toast.success(t("export.toast.queued", { ns: "components/dialog" }), { position: "top-center", action: ( - + diff --git a/web/src/components/timeline/EventMenu.tsx b/web/src/components/timeline/EventMenu.tsx index 375430c2e9..42efd2c97f 100644 --- a/web/src/components/timeline/EventMenu.tsx +++ b/web/src/components/timeline/EventMenu.tsx @@ -8,6 +8,7 @@ import { } from "@/components/ui/dropdown-menu"; import { HiDotsHorizontal } from "react-icons/hi"; import { useApiHost } from "@/api"; +import { baseUrl } from "@/api/baseUrl"; import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { Event } from "@/types/event"; @@ -79,7 +80,11 @@ export default function EventMenu({ closeButton: true, dismissible: false, action: ( - + diff --git a/web/src/views/events/EventView.tsx b/web/src/views/events/EventView.tsx index edf144f883..5ffbe5f960 100644 --- a/web/src/views/events/EventView.tsx +++ b/web/src/views/events/EventView.tsx @@ -49,6 +49,7 @@ import { FiMoreVertical } from "react-icons/fi"; import { IoMdArrowRoundBack } from "react-icons/io"; import useSWR from "swr"; import MotionReviewTimeline from "@/components/timeline/MotionReviewTimeline"; +import { baseUrl } from "@/api/baseUrl"; import { Button } from "@/components/ui/button"; import BlurredIconButton from "@/components/button/BlurredIconButton"; import { @@ -284,7 +285,11 @@ export default function EventView({ { position: "top-center", action: ( - + diff --git a/web/src/views/motion-search/MotionSearchView.tsx b/web/src/views/motion-search/MotionSearchView.tsx index 97811b7402..8a5ce680d7 100644 --- a/web/src/views/motion-search/MotionSearchView.tsx +++ b/web/src/views/motion-search/MotionSearchView.tsx @@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next"; import useSWR from "swr"; import axios from "axios"; import { isDesktop, isMobile } from "react-device-detect"; +import { baseUrl } from "@/api/baseUrl"; import Logo from "@/components/Logo"; import { FrigateConfig } from "@/types/frigateConfig"; import { TimeRange } from "@/types/timeline"; @@ -363,7 +364,11 @@ export default function MotionSearchView({ { position: "top-center", action: ( - +