From 8072d2c950f734d9fd10c29d17fcf4718f53dc20 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Fri, 9 Jan 2026 19:49:11 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20refactor=20disco?= =?UTF-8?q?nnection=20reason=20handling=20and=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor the duplicateIdentity boolean URL parameter into an extensible string reason parameter, making it easier to customize the disconnection message shown to users. Avoid passing this value via URL parameters, which are easy to manipulate. Instead, use Wouter’s built-in navigation state to pass data across pages. This was initially missed because navigateTo is a wrapper around Wouter’s official navigation function, and its arguments were easy to overlook. This is now fixed. This prepares the ground for supporting additional disconnection reasons in upcoming commits. --- .../src/features/rooms/components/Conference.tsx | 12 +++++++++--- src/frontend/src/features/rooms/routes/Feedback.tsx | 8 +++----- src/frontend/src/routes.ts | 5 ----- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/frontend/src/features/rooms/components/Conference.tsx b/src/frontend/src/features/rooms/components/Conference.tsx index 2a25a797..56a1a447 100644 --- a/src/frontend/src/features/rooms/components/Conference.tsx +++ b/src/frontend/src/features/rooms/components/Conference.tsx @@ -25,12 +25,12 @@ import { VideoConference } from '../livekit/prefabs/VideoConference' import { css } from '@/styled-system/css' import { BackgroundProcessorFactory } from '../livekit/components/blur' import { LocalUserChoices } from '@/stores/userChoices' -import { navigateTo } from '@/navigation/navigateTo' import { MediaDeviceErrorAlert } from './MediaDeviceErrorAlert' import { usePostHog } from 'posthog-js/react' import { useConfig } from '@/api/useConfig' import { isFireFox } from '@/utils/livekit' import { useIsMobile } from '@/utils/useIsMobile' +import { navigateTo } from '@/navigation/navigateTo' export const Conference = ({ roomId, @@ -230,10 +230,16 @@ export const Conference = ({ onDisconnected={(e) => { switch (e) { case DisconnectReason.CLIENT_INITIATED: - navigateTo('feedback', { duplicateIdentity: false }) + navigateTo('feedback') return case DisconnectReason.DUPLICATE_IDENTITY: - navigateTo('feedback', { duplicateIdentity: true }) + navigateTo( + 'feedback', + {}, + { + state: { reason: 'duplicateIdentity' }, + } + ) return } }} diff --git a/src/frontend/src/features/rooms/routes/Feedback.tsx b/src/frontend/src/features/rooms/routes/Feedback.tsx index f23c2f15..7f760260 100644 --- a/src/frontend/src/features/rooms/routes/Feedback.tsx +++ b/src/frontend/src/features/rooms/routes/Feedback.tsx @@ -3,7 +3,7 @@ import { Button } from '@/primitives' import { Screen } from '@/layout/Screen' import { Center, HStack, styled, VStack } from '@/styled-system/jsx' import { Rating } from '@/features/rooms/components/Rating.tsx' -import { useLocation, useSearchParams } from 'wouter' +import { useLocation } from 'wouter' // fixme - duplicated with home, refactor in a proper style const Heading = styled('h1', { @@ -24,16 +24,14 @@ export const FeedbackRoute = () => { const { t } = useTranslation('rooms') const [, setLocation] = useLocation() - const [searchParams] = useSearchParams() + const state = window.history.state return (
- {t( - `feedback.heading.${searchParams.get('duplicateIdentity') ? 'duplicateIdentity' : 'normal'}` - )} + {t(`feedback.heading.${state?.reason || 'normal'}`)}