♻️(frontend) allow opening Settings dialog in a controlled way

I am not hundred percent sure it respects @manuhabitela's guidelines,
but for the options menu, I would need to trigger a dialog in a controlled way.

I tried to have the minimal impact on the existing settings dialog.
This commit is contained in:
lebaudantoine
2024-08-06 17:25:22 +02:00
committed by aleb_the_flash
parent 1715ec10dd
commit f8fff3dbdf
2 changed files with 36 additions and 26 deletions

View File

@@ -4,12 +4,14 @@ import {
RiQuestionLine, RiQuestionLine,
RiSettings3Line, RiSettings3Line,
} from '@remixicon/react' } from '@remixicon/react'
import { useState } from 'react'
import { styled } from '@/styled-system/jsx' import { styled } from '@/styled-system/jsx'
import { import {
Menu as RACMenu, Menu as RACMenu,
MenuItem as RACMenuItem, MenuItem as RACMenuItem,
Popover as RACPopover, Popover as RACPopover,
} from 'react-aria-components' } from 'react-aria-components'
import { SettingsDialog } from '@/features/settings'
// Styled components to be refactored // Styled components to be refactored
const StyledMenu = styled(RACMenu, { const StyledMenu = styled(RACMenu, {
@@ -60,8 +62,9 @@ const StyledPopover = styled(RACPopover, {
export const OptionsMenu = () => { export const OptionsMenu = () => {
const { t } = useTranslation('rooms') const { t } = useTranslation('rooms')
const [isSettingsDialogOpen, setIsSettingsDialogOpen] = useState(false)
return ( return (
<>
<StyledPopover> <StyledPopover>
<StyledMenu> <StyledMenu>
<StyledMenuItem <StyledMenuItem
@@ -78,11 +81,16 @@ export const OptionsMenu = () => {
<RiFeedbackLine size={18} /> <RiFeedbackLine size={18} />
{t('options.items.feedbacks')} {t('options.items.feedbacks')}
</StyledMenuItem> </StyledMenuItem>
<StyledMenuItem onAction={() => alert('delete')}> <StyledMenuItem onAction={() => setIsSettingsDialogOpen(true)}>
<RiSettings3Line size={18} /> <RiSettings3Line size={18} />
{t('options.items.settings')} {t('options.items.settings')}
</StyledMenuItem> </StyledMenuItem>
</StyledMenu> </StyledMenu>
</StyledPopover> </StyledPopover>
<SettingsDialog
isOpen={isSettingsDialogOpen}
onOpenChange={(v) => setIsSettingsDialogOpen(v)}
/>
</>
) )
} }

View File

@@ -1,12 +1,14 @@
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useLanguageLabels } from '@/i18n/useLanguageLabels' import { useLanguageLabels } from '@/i18n/useLanguageLabels'
import { Dialog, Field, H } from '@/primitives' import { Dialog, type DialogProps, Field, H } from '@/primitives'
export const SettingsDialog = () => { export type SettingsDialogProps = Pick<DialogProps, 'isOpen' | 'onOpenChange'>
export const SettingsDialog = (props: SettingsDialogProps) => {
const { t, i18n } = useTranslation('settings') const { t, i18n } = useTranslation('settings')
const { languagesList, currentLanguage } = useLanguageLabels() const { languagesList, currentLanguage } = useLanguageLabels()
return ( return (
<Dialog title={t('dialog.heading')}> <Dialog title={t('dialog.heading')} {...props}>
<H lvl={2}>{t('language.heading')}</H> <H lvl={2}>{t('language.heading')}</H>
<Field <Field
type="select" type="select"