From b19ac7f82b4db7216920f43313d2cfee608d7e29 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Sat, 13 Dec 2025 00:00:16 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8(frontend)=20rework=20the=20transcr?= =?UTF-8?q?iption=20side=20panel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inspired by proprietary solutions, add clearer details on how transcription works and what users can expect from the feature. This new presentation is much simpler to read, parse, and understand than the previous large block of text that users were not reading at all. Using icons helps users quickly understand where the transcription is sent, how they are notified, and which meeting language is used. Some information is currently hardcoded and will be parameterized in upcoming commits. This work is ongoing. --- .../components/TranscriptSidePanel.tsx | 309 ++++++++++-------- src/frontend/src/locales/de/rooms.json | 32 +- src/frontend/src/locales/en/rooms.json | 32 +- src/frontend/src/locales/fr/rooms.json | 32 +- src/frontend/src/locales/nl/rooms.json | 32 +- 5 files changed, 236 insertions(+), 201 deletions(-) diff --git a/src/frontend/src/features/recording/components/TranscriptSidePanel.tsx b/src/frontend/src/features/recording/components/TranscriptSidePanel.tsx index 7313f24e..16467365 100644 --- a/src/frontend/src/features/recording/components/TranscriptSidePanel.tsx +++ b/src/frontend/src/features/recording/components/TranscriptSidePanel.tsx @@ -6,7 +6,6 @@ import { useRoomContext } from '@livekit/components-react' import { RecordingMode, useHasRecordingAccess, - useIsRecordingTransitioning, useStartRecording, useStopRecording, useHasFeatureWithoutAdminRights, @@ -29,6 +28,8 @@ import humanizeDuration from 'humanize-duration' import i18n from 'i18next' import { useUser } from '@/features/auth' import { LoginButton } from '@/components/LoginButton' +import { HStack, VStack } from '@/styled-system/jsx' +import { Checkbox } from '@/primitives/Checkbox.tsx' export const TranscriptSidePanel = () => { const { data } = useConfig() @@ -76,8 +77,6 @@ export const TranscriptSidePanel = () => { } }, [recordingSnap]) - const isRecordingTransitioning = useIsRecordingTransitioning() - const room = useRoomContext() const isRoomConnected = room.state == ConnectionState.Connected @@ -122,15 +121,6 @@ export const TranscriptSidePanel = () => { } } - const isDisabled = useMemo( - () => - isLoading || - isRecordingTransitioning || - statuses.isAnotherModeStarted || - !isRoomConnected, - [isLoading, isRecordingTransitioning, statuses, isRoomConnected] - ) - if (hasFeatureWithoutAdminRights) { return (
{ > {''} - <> - {statuses.isStarted ? ( - <> - - {t('stop.heading')} - - - {t('stop.body')} + + + {t('heading')} + + + {data?.recording?.max_duration + ? t('body', { + max_duration: humanizeDuration(data?.recording?.max_duration, { + language: i18n.language, + }), + }) + : t('bodyWithoutMaxDuration')}{' '} + {data?.support?.help_article_transcript && ( + + {t('linkMore')} + + )} + + + +
+
+ article +
+
+ + {t('details.destination')}{' '} + + docs.numerique.gouv.fr + - - +
+
+
+
+ mail +
+
+ {t('details.receiver')} +
+
+
+
+ language +
+
+ {t('details.language')} +
+
+ +
+ +
+ + {t('details.recording')} + +
+ +
+ {statuses.isStopping || isPendingToStop ? ( + + + {t('button.saving')} + ) : ( <> - {statuses.isStopping || isPendingToStop ? ( - <> - - {t('stopping.heading')} - - - {t('stopping.body')} - - - + {statuses.isStarted || statuses.isStarting || room.isRecording ? ( + ) : ( - <> - - {t('start.heading')} - - - {t('start.body', { - duration_message: data?.recording?.max_duration - ? t('durationMessage', { - max_duration: humanizeDuration( - data?.recording?.max_duration, - { - language: i18n.language, - } - ), - }) - : '', - })}{' '} - {data?.support?.help_article_transcript && ( - - {t('start.linkMore')} - - )} - - - + )} )} - +