🚸(frontend) add alert dialog for recording start failures
Implement modal alert dialog when recording initialization fails. Provides clear error feedback to users when API cannot start recording process, improving error state communication.
This commit is contained in:
committed by
aleb_the_flash
parent
cb00347be6
commit
c7c0df5b6d
@@ -27,5 +27,6 @@ export function useStartRecording(
|
|||||||
return useMutation<ApiRoom, ApiError, StartRecordingParams>({
|
return useMutation<ApiRoom, ApiError, StartRecordingParams>({
|
||||||
mutationFn: startRecording,
|
mutationFn: startRecording,
|
||||||
onSuccess: options?.onSuccess,
|
onSuccess: options?.onSuccess,
|
||||||
|
onError: options?.onError,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,5 +19,6 @@ export function useStopRecording(
|
|||||||
return useMutation<ApiRoom, ApiError, StopRecordingParams>({
|
return useMutation<ApiRoom, ApiError, StopRecordingParams>({
|
||||||
mutationFn: stopRecording,
|
mutationFn: stopRecording,
|
||||||
onSuccess: options?.onSuccess,
|
onSuccess: options?.onSuccess,
|
||||||
|
onError: options?.onError,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { A, Button, Div, H, Text } from '@/primitives'
|
import { A, Button, Dialog, Div, H, P, Text } from '@/primitives'
|
||||||
|
|
||||||
import fourthSlide from '@/assets/intro-slider/4_record.png'
|
import fourthSlide from '@/assets/intro-slider/4_record.png'
|
||||||
import { css } from '@/styled-system/css'
|
import { css } from '@/styled-system/css'
|
||||||
@@ -29,14 +29,20 @@ export const ScreenRecordingSidePanel = () => {
|
|||||||
const recordingSnap = useSnapshot(recordingStore)
|
const recordingSnap = useSnapshot(recordingStore)
|
||||||
const { t } = useTranslation('rooms', { keyPrefix: 'screenRecording' })
|
const { t } = useTranslation('rooms', { keyPrefix: 'screenRecording' })
|
||||||
|
|
||||||
|
const [isErrorDialogOpen, setIsErrorDialogOpen] = useState('')
|
||||||
|
|
||||||
const { notifyParticipants } = useNotifyParticipants()
|
const { notifyParticipants } = useNotifyParticipants()
|
||||||
|
|
||||||
const roomId = useRoomId()
|
const roomId = useRoomId()
|
||||||
|
|
||||||
const { mutateAsync: startRecordingRoom, isPending: isPendingToStart } =
|
const { mutateAsync: startRecordingRoom, isPending: isPendingToStart } =
|
||||||
useStartRecording()
|
useStartRecording({
|
||||||
|
onError: () => setIsErrorDialogOpen('start'),
|
||||||
|
})
|
||||||
const { mutateAsync: stopRecordingRoom, isPending: isPendingToStop } =
|
const { mutateAsync: stopRecordingRoom, isPending: isPendingToStop } =
|
||||||
useStopRecording()
|
useStopRecording({
|
||||||
|
onError: () => setIsErrorDialogOpen('stop'),
|
||||||
|
})
|
||||||
|
|
||||||
const statuses = useMemo(() => {
|
const statuses = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
@@ -208,6 +214,20 @@ export const ScreenRecordingSidePanel = () => {
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
<Dialog
|
||||||
|
isOpen={!!isErrorDialogOpen}
|
||||||
|
role="alertdialog"
|
||||||
|
aria-label={t('alert.title')}
|
||||||
|
>
|
||||||
|
<P>{t(`alert.body.${isErrorDialogOpen}`)}</P>
|
||||||
|
<Button
|
||||||
|
variant="text"
|
||||||
|
size="sm"
|
||||||
|
onPress={() => setIsErrorDialogOpen('')}
|
||||||
|
>
|
||||||
|
{t('alert.button')}
|
||||||
|
</Button>
|
||||||
|
</Dialog>
|
||||||
</Div>
|
</Div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { A, Button, Div, H, LinkButton, Text } from '@/primitives'
|
import { A, Button, Dialog, Div, H, LinkButton, P, Text } from '@/primitives'
|
||||||
|
|
||||||
import thirdSlide from '@/assets/intro-slider/3_resume.png'
|
import thirdSlide from '@/assets/intro-slider/3_resume.png'
|
||||||
import { css } from '@/styled-system/css'
|
import { css } from '@/styled-system/css'
|
||||||
@@ -32,6 +32,8 @@ export const TranscriptSidePanel = () => {
|
|||||||
const [isLoading, setIsLoading] = useState(false)
|
const [isLoading, setIsLoading] = useState(false)
|
||||||
const { t } = useTranslation('rooms', { keyPrefix: 'transcript' })
|
const { t } = useTranslation('rooms', { keyPrefix: 'transcript' })
|
||||||
|
|
||||||
|
const [isErrorDialogOpen, setIsErrorDialogOpen] = useState('')
|
||||||
|
|
||||||
const recordingSnap = useSnapshot(recordingStore)
|
const recordingSnap = useSnapshot(recordingStore)
|
||||||
|
|
||||||
const { notifyParticipants } = useNotifyParticipants()
|
const { notifyParticipants } = useNotifyParticipants()
|
||||||
@@ -43,10 +45,14 @@ export const TranscriptSidePanel = () => {
|
|||||||
const roomId = useRoomId()
|
const roomId = useRoomId()
|
||||||
|
|
||||||
const { mutateAsync: startRecordingRoom, isPending: isPendingToStart } =
|
const { mutateAsync: startRecordingRoom, isPending: isPendingToStart } =
|
||||||
useStartRecording()
|
useStartRecording({
|
||||||
|
onError: () => setIsErrorDialogOpen('start'),
|
||||||
|
})
|
||||||
|
|
||||||
const { mutateAsync: stopRecordingRoom, isPending: isPendingToStop } =
|
const { mutateAsync: stopRecordingRoom, isPending: isPendingToStop } =
|
||||||
useStopRecording()
|
useStopRecording({
|
||||||
|
onError: () => setIsErrorDialogOpen('stop'),
|
||||||
|
})
|
||||||
|
|
||||||
const statuses = useMemo(() => {
|
const statuses = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
@@ -243,6 +249,20 @@ export const TranscriptSidePanel = () => {
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
<Dialog
|
||||||
|
isOpen={!!isErrorDialogOpen}
|
||||||
|
role="alertdialog"
|
||||||
|
aria-label={t('alert.title')}
|
||||||
|
>
|
||||||
|
<P>{t(`alert.body.${isErrorDialogOpen}`)}</P>
|
||||||
|
<Button
|
||||||
|
variant="text"
|
||||||
|
size="sm"
|
||||||
|
onPress={() => setIsErrorDialogOpen('')}
|
||||||
|
>
|
||||||
|
{t('alert.button')}
|
||||||
|
</Button>
|
||||||
|
</Dialog>
|
||||||
</Div>
|
</Div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -237,6 +237,14 @@
|
|||||||
"heading": "",
|
"heading": "",
|
||||||
"body": "",
|
"body": "",
|
||||||
"button": ""
|
"button": ""
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "",
|
||||||
|
"body": {
|
||||||
|
"stop": "",
|
||||||
|
"start": ""
|
||||||
|
},
|
||||||
|
"button": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenRecording": {
|
"screenRecording": {
|
||||||
@@ -254,6 +262,14 @@
|
|||||||
"heading": "",
|
"heading": "",
|
||||||
"body": "",
|
"body": "",
|
||||||
"button": ""
|
"button": ""
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "",
|
||||||
|
"body": {
|
||||||
|
"stop": "",
|
||||||
|
"start": ""
|
||||||
|
},
|
||||||
|
"button": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
|
|||||||
@@ -237,6 +237,14 @@
|
|||||||
"heading": "Become a beta tester",
|
"heading": "Become a beta tester",
|
||||||
"body": "Record your meeting for later. You will receive a summary by email once the meeting is finished.",
|
"body": "Record your meeting for later. You will receive a summary by email once the meeting is finished.",
|
||||||
"button": "Sign up"
|
"button": "Sign up"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "Transcription Failed",
|
||||||
|
"body": {
|
||||||
|
"stop": "We were unable to stop the transcription. Please try again in a moment.",
|
||||||
|
"start": "We were unable to start the transcription. Please try again in a moment."
|
||||||
|
},
|
||||||
|
"button": "OK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenRecording": {
|
"screenRecording": {
|
||||||
@@ -255,6 +263,14 @@
|
|||||||
"heading": "Recording in progress…",
|
"heading": "Recording in progress…",
|
||||||
"body": "You will receive the result by email once the recording is complete.",
|
"body": "You will receive the result by email once the recording is complete.",
|
||||||
"button": "Stop recording"
|
"button": "Stop recording"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "Recording Failed",
|
||||||
|
"body": {
|
||||||
|
"stop": "We were unable to stop the recording. Please try again in a moment.",
|
||||||
|
"start": "We were unable to start the recording. Please try again in a moment."
|
||||||
|
},
|
||||||
|
"button": "OK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
|
|||||||
@@ -237,6 +237,14 @@
|
|||||||
"heading": "Devenez beta testeur",
|
"heading": "Devenez beta testeur",
|
||||||
"body": "Enregistrer votre réunion pour plus tard. Vous recevrez un compte-rendu par email une fois la réunion terminée.",
|
"body": "Enregistrer votre réunion pour plus tard. Vous recevrez un compte-rendu par email une fois la réunion terminée.",
|
||||||
"button": "Inscrivez-vous"
|
"button": "Inscrivez-vous"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "Échec de transcription",
|
||||||
|
"body": {
|
||||||
|
"stop": "Nous n'avons pas pu stopper la transcription. Veuillez réessayer dans quelques instants.",
|
||||||
|
"start": "Nous n'avons pas pu démarrer la transcription. Veuillez réessayer dans quelques instants."
|
||||||
|
},
|
||||||
|
"button": "OK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenRecording": {
|
"screenRecording": {
|
||||||
@@ -255,6 +263,14 @@
|
|||||||
"heading": "Enregistrement en cours …",
|
"heading": "Enregistrement en cours …",
|
||||||
"body": "Vous recevrez le resultat par email une fois l'enregistrement terminé.",
|
"body": "Vous recevrez le resultat par email une fois l'enregistrement terminé.",
|
||||||
"button": "Arrêter l'enregistrement"
|
"button": "Arrêter l'enregistrement"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "Échec de l'enregistrement",
|
||||||
|
"body": {
|
||||||
|
"stop": "Nous n'avons pas pu stopper l'enregistrement. Veuillez réessayer dans quelques instants.",
|
||||||
|
"start": "Nous n'avons pas pu démarrer l'enregistrement. Veuillez réessayer dans quelques instants."
|
||||||
|
},
|
||||||
|
"button": "OK"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
|
|||||||
@@ -237,6 +237,14 @@
|
|||||||
"heading": "Word betatester",
|
"heading": "Word betatester",
|
||||||
"body": "Neem uw vergadering op voor later. U ontvangt een samenvatting per e-mail zodra de vergadering is afgelopen.",
|
"body": "Neem uw vergadering op voor later. U ontvangt een samenvatting per e-mail zodra de vergadering is afgelopen.",
|
||||||
"button": "Aanmelden"
|
"button": "Aanmelden"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "Transcriptie mislukt",
|
||||||
|
"body": {
|
||||||
|
"stop": "We konden de transcriptie niet stoppen. Probeer het over enkele ogenblikken opnieuw.",
|
||||||
|
"start": "We konden de transcriptie niet starten. Probeer het over enkele ogenblikken opnieuw."
|
||||||
|
},
|
||||||
|
"button": "Opnieuw proberen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"screenRecording": {
|
"screenRecording": {
|
||||||
@@ -255,6 +263,14 @@
|
|||||||
"heading": "Opname bezig …",
|
"heading": "Opname bezig …",
|
||||||
"body": "Je ontvangt het resultaat per e-mail zodra de opname is voltooid.",
|
"body": "Je ontvangt het resultaat per e-mail zodra de opname is voltooid.",
|
||||||
"button": "Opname stoppen"
|
"button": "Opname stoppen"
|
||||||
|
},
|
||||||
|
"alert": {
|
||||||
|
"title": "Opname mislukt",
|
||||||
|
"body": {
|
||||||
|
"stop": "We konden de opname niet stoppen. Probeer het over enkele ogenblikken opnieuw.",
|
||||||
|
"start": "We konden de opname niet starten. Probeer het over enkele ogenblikken opnieuw."
|
||||||
|
},
|
||||||
|
"button": "Opnieuw proberen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"admin": {
|
"admin": {
|
||||||
|
|||||||
Reference in New Issue
Block a user