Skip to content

Commit

Permalink
✨(frontend) introduce a notification settings
Browse files Browse the repository at this point in the history
I extended Room settings with a new tab, allowing users to toggle
the sound notification they want.

Their choices will be persisted.
  • Loading branch information
lebaudantoine committed Dec 9, 2024
1 parent 83914f8 commit e0021db
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import { Heading } from 'react-aria-components'
import { useTranslation } from 'react-i18next'
import {
RiAccountCircleLine,
RiNotification3Line,
RiSettings3Line,
RiSpeakerLine,
} from '@remixicon/react'
import { AccountTab } from './tabs/AccountTab'
import { GeneralTab } from '@/features/settings/components/tabs/GeneralTab.tsx'
import { AudioTab } from '@/features/settings/components/tabs/AudioTab.tsx'
import { NotificationsTab } from './tabs/NotificationsTab'
import { GeneralTab } from './tabs/GeneralTab'
import { AudioTab } from './tabs/AudioTab'
import { useSize } from '@/features/rooms/livekit/hooks/useResizeObserver'
import { useRef } from 'react'

Expand Down Expand Up @@ -81,12 +83,17 @@ export const SettingsDialogExtended = (props: SettingsDialogExtended) => {
<RiSettings3Line />
{isWideScreen && t('tabs.general')}
</Tab>
<Tab icon highlight id="4">
<RiNotification3Line />
{isWideScreen && t('tabs.notifications')}
</Tab>
</TabList>
</div>
<div className={tabPanelContainerStyle}>
<AccountTab id="1" onOpenChange={props.onOpenChange} />
<AudioTab id="2" />
<GeneralTab id="3" />
<NotificationsTab id="4" />
</div>
</Tabs>
</Dialog>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { TabPanel, TabPanelProps } from '@/primitives/Tabs'
import { H, Switch } from '@/primitives'
import { css } from '@/styled-system/css'
import { useTranslation } from 'react-i18next'
import { useSnapshot } from 'valtio'
import { notificationsStore } from '@/stores/notifications'

export type NotificationsTabProps = Pick<TabPanelProps, 'id'>

export const NotificationsTab = ({ id }: NotificationsTabProps) => {
const { t } = useTranslation('settings', { keyPrefix: 'notifications' })
const notificationsSnap = useSnapshot(notificationsStore)
return (
<TabPanel padding={'md'} flex id={id}>
<H lvl={2}>{t('heading')}</H>
<ul
className={css({
display: 'flex',
flexDirection: 'column',
gap: '1rem',
})}
>
{Array.from(notificationsSnap.soundNotifications).map(
([key, value]) => (
<li key={key}>
<Switch
aria-label={`${t(`actions.${value ? 'disable' : 'enable'}`)} ${t('label')} "${t(`items.${key}`)}"`}
isSelected={value}
onChange={(v) => {
notificationsStore.soundNotifications.set(key, v)
}}
>
{t(`items.${key}`)}
</Switch>
</li>
)
)}
</ul>
</TabPanel>
)
}
16 changes: 15 additions & 1 deletion src/frontend/src/locales/de/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,19 @@
},
"permissionsRequired": ""
},
"notifications": {
"heading": "",
"label": "",
"actions": {
"disable": "",
"enable": ""
},
"items": {
"participantJoined": "",
"handRaised": "",
"messageReceived": ""
}
},
"dialog": {
"heading": ""
},
Expand All @@ -30,6 +43,7 @@
"tabs": {
"account": "",
"audio": "",
"general": ""
"general": "",
"notifications": ""
}
}
16 changes: 15 additions & 1 deletion src/frontend/src/locales/en/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,19 @@
},
"permissionsRequired": "Permissions required"
},
"notifications": {
"heading": "Sound notifications",
"label": "sound notifications for",
"actions": {
"disable": "Disable",
"enable": "Enable"
},
"items": {
"participantJoined": "Participant joined",
"handRaised": "Hand raised",
"messageReceived": "Message received"
}
},
"dialog": {
"heading": "Settings"
},
Expand All @@ -30,6 +43,7 @@
"tabs": {
"account": "Profile",
"audio": "Audio",
"general": "General"
"general": "General",
"notifications": "Notifications"
}
}
16 changes: 15 additions & 1 deletion src/frontend/src/locales/fr/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,19 @@
},
"permissionsRequired": "Autorisations nécessaires"
},
"notifications": {
"heading": "Notifications sonores",
"label": "la notification sonore pour",
"actions": {
"disable": "Désactiver",
"enable": "Activer"
},
"items": {
"participantJoined": "Un nouveau participant",
"handRaised": "Une main levée",
"messageReceived": "Un message reçu"
}
},
"dialog": {
"heading": "Paramètres"
},
Expand All @@ -30,6 +43,7 @@
"tabs": {
"account": "Profile",
"audio": "Audio",
"general": "Général"
"general": "Général",
"notifications": "Notifications"
}
}

0 comments on commit e0021db

Please sign in to comment.