diff --git a/src/frontend/src/features/rooms/components/Join.tsx b/src/frontend/src/features/rooms/components/Join.tsx index 8736f4a4..b367c80b 100644 --- a/src/frontend/src/features/rooms/components/Join.tsx +++ b/src/frontend/src/features/rooms/components/Join.tsx @@ -638,7 +638,7 @@ export const Join = ({ openPermissionsDialog()} > {t(`permissionsButton.${permissionsButtonLabel}`)} diff --git a/src/frontend/src/features/rooms/components/Permissions.tsx b/src/frontend/src/features/rooms/components/Permissions.tsx index 1f232aaa..178eb5d8 100644 --- a/src/frontend/src/features/rooms/components/Permissions.tsx +++ b/src/frontend/src/features/rooms/components/Permissions.tsx @@ -37,6 +37,22 @@ export const Permissions = () => { injectIconIntoTranslation(t('body.openMenu.others')) useEffect(() => { + if ( + permissions.isPermissionDialogOpen && + permissions.isMicrophoneGranted && + permissions.requestOrigin == 'audioinput' + ) { + closePermissionsDialog() + } + + if ( + permissions.isPermissionDialogOpen && + permissions.isCameraGranted && + permissions.requestOrigin == 'videoinput' + ) { + closePermissionsDialog() + } + if ( permissions.isPermissionDialogOpen && permissions.isCameraGranted && diff --git a/src/frontend/src/features/rooms/livekit/components/controls/Device/PermissionNeededButton.tsx b/src/frontend/src/features/rooms/livekit/components/controls/Device/PermissionNeededButton.tsx index ab2df0a4..5a4afa5d 100644 --- a/src/frontend/src/features/rooms/livekit/components/controls/Device/PermissionNeededButton.tsx +++ b/src/frontend/src/features/rooms/livekit/components/controls/Device/PermissionNeededButton.tsx @@ -19,7 +19,7 @@ export const PermissionNeededButton = () => { openPermissionsDialog()} variant="permission" > ({ }, [enabled, kind, deviceShortcut, t]) const Icon = - isDisabled || cannotUseDevice || !enabled - ? deviceIcons.toggleOff - : deviceIcons.toggleOn + isDisabled || !enabled ? deviceIcons.toggleOff : deviceIcons.toggleOn const roomContext = useMaybeRoomContext() if (kind === 'audioinput' && pushToTalk && roomContext) { @@ -126,7 +124,12 @@ export const ToggleDevice = ({ isDisabled || cannotUseDevice || !enabled ? errorVariant : variant } shySelected - onPress={() => (cannotUseDevice ? openPermissionsDialog() : toggle())} + onPress={() => { + if (cannotUseDevice) { + openPermissionsDialog(kind) + } + toggle() + }} aria-label={toggleLabel} tooltip={ cannotUseDevice diff --git a/src/frontend/src/stores/permissions.ts b/src/frontend/src/stores/permissions.ts index 1d8091c1..a6737f77 100644 --- a/src/frontend/src/stores/permissions.ts +++ b/src/frontend/src/stores/permissions.ts @@ -13,6 +13,7 @@ type BaseState = { microphonePermission: PermissionState isLoading: boolean isPermissionDialogOpen: boolean + requestOrigin?: 'audioinput' | 'videoinput' } type DerivedState = { @@ -31,6 +32,7 @@ export const permissionsStore = proxy({ microphonePermission: undefined, isLoading: true, isPermissionDialogOpen: false, + requestOrigin: undefined, }) as State derive( @@ -52,8 +54,11 @@ derive( } ) -export const openPermissionsDialog = () => { +export const openPermissionsDialog = ( + requestOrigin?: 'audioinput' | 'videoinput' +) => { permissionsStore.isPermissionDialogOpen = true + permissionsStore.requestOrigin = requestOrigin } export const closePermissionsDialog = () => {