mirror of
https://github.com/suitenumerique/meet.git
synced 2026-09-04 14:45:40 +00:00
⚡️(frontend) isolate useSize in a child of MoreOptions
Move the useSize subscription into a dedicated child component of MoreOptions. The options now only re-render when they actually need to collapse, instead of on every size change of the container.
This commit is contained in:
committed by
aleb_the_flash
parent
932332c858
commit
ef05c0ab19
@@ -5,7 +5,7 @@ import { ToolsToggle } from '../../components/controls/ToolsToggle'
|
|||||||
import { InfoToggle } from '../../components/controls/InfoToggle'
|
import { InfoToggle } from '../../components/controls/InfoToggle'
|
||||||
import { AdminToggle } from '../../components/AdminToggle'
|
import { AdminToggle } from '../../components/AdminToggle'
|
||||||
import { useSize } from '../../hooks/useResizeObserver'
|
import { useSize } from '../../hooks/useResizeObserver'
|
||||||
import { useState, RefObject } from 'react'
|
import { useState, RefObject, useEffect } from 'react'
|
||||||
import { Dialog, DialogTrigger, Popover } from 'react-aria-components'
|
import { Dialog, DialogTrigger, Popover } from 'react-aria-components'
|
||||||
import { Button } from '@/primitives'
|
import { Button } from '@/primitives'
|
||||||
import type { ToggleButtonProps } from '@/primitives/ToggleButton'
|
import type { ToggleButtonProps } from '@/primitives/ToggleButton'
|
||||||
@@ -66,12 +66,32 @@ export const LateralMenu = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BreakpointObserverProps {
|
||||||
|
containerRef: RefObject<HTMLDivElement>
|
||||||
|
onWideChange: (isWide: boolean) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
const BreakpointObserver = ({
|
||||||
|
containerRef,
|
||||||
|
onWideChange,
|
||||||
|
}: BreakpointObserverProps) => {
|
||||||
|
const { width } = useSize(containerRef)
|
||||||
|
const isWide = width > CONTROL_BAR_BREAKPOINT
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
onWideChange(isWide)
|
||||||
|
}, [isWide, onWideChange])
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
export const MoreOptions = ({
|
export const MoreOptions = ({
|
||||||
parentElement,
|
parentElement,
|
||||||
}: {
|
}: {
|
||||||
parentElement: RefObject<HTMLDivElement>
|
parentElement: RefObject<HTMLDivElement>
|
||||||
}) => {
|
}) => {
|
||||||
const { width: parentWidth } = useSize(parentElement)
|
const [isWide, setIsWide] = useState(false)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<nav
|
<nav
|
||||||
className={css({
|
className={css({
|
||||||
@@ -83,11 +103,11 @@ export const MoreOptions = ({
|
|||||||
paddingRight: '0.25rem',
|
paddingRight: '0.25rem',
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{parentWidth > CONTROL_BAR_BREAKPOINT ? (
|
<BreakpointObserver
|
||||||
<NavigationControls />
|
containerRef={parentElement}
|
||||||
) : (
|
onWideChange={setIsWide}
|
||||||
<LateralMenu />
|
/>
|
||||||
)}
|
{isWide ? <NavigationControls /> : <LateralMenu />}
|
||||||
</nav>
|
</nav>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user