Skip to content

Commit 8ce738b

Browse files
committed
Simplify
1 parent ff93686 commit 8ce738b

File tree

3 files changed

+58
-90
lines changed

3 files changed

+58
-90
lines changed

packages/react/src/experimental/SelectPanel2/SelectPanel.module.css

-8
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,6 @@
88
--position-top: 0;
99
--position-left: 0;
1010

11-
&[data-visibility='visible'] {
12-
visibility: visible;
13-
}
14-
15-
&[data-visibility='hidden'] {
16-
visibility: hidden;
17-
}
18-
1911
&:where([open]) {
2012
display: flex; /* to fit children */
2113
}

packages/react/src/experimental/SelectPanel2/SelectPanel.tsx

+57-77
Original file line numberDiff line numberDiff line change
@@ -249,20 +249,6 @@ const Panel: React.FC<SelectPanelProps> = ({
249249
maxHeightValue = '100vh'
250250
}
251251

252-
const [isVisible, setIsVisible] = useState(internalOpen)
253-
254-
useEffect(() => {
255-
if (internalOpen) {
256-
// give the browser time to render the panel and for useAnchoredPosition
257-
// to calculate its actual size
258-
window.requestAnimationFrame(() => {
259-
setIsVisible(true)
260-
})
261-
} else {
262-
setIsVisible(false)
263-
}
264-
}, [internalOpen, setIsVisible])
265-
266252
return (
267253
<>
268254
{Anchor}
@@ -276,24 +262,15 @@ const Panel: React.FC<SelectPanelProps> = ({
276262
height="fit-content"
277263
maxHeight={maxHeight}
278264
data-variant={currentVariant}
279-
data-visibility={isVisible ? 'visible' : 'hidden'}
280265
sx={
281266
enabled
282267
? undefined
283268
: {
284-
'&[data-visibility="visible"]': {
285-
visibility: 'visible',
286-
},
287-
'&[data-visibility="hidden"]': {
288-
visibility: 'hidden',
289-
},
290-
291269
'--max-height': heightMap[maxHeight],
292270
// reset dialog default styles
293271
border: 'none',
294272
padding: 0,
295273
color: 'fg.default',
296-
'&[open]': {display: 'flex'}, // to fit children
297274

298275
'&[data-variant="anchored"], &[data-variant="full-screen"]': {
299276
margin: 0,
@@ -335,8 +312,13 @@ const Panel: React.FC<SelectPanelProps> = ({
335312
'--max-height': maxHeightValue,
336313
'--position-top': `${position?.top ?? 0}px`,
337314
'--position-left': `${position?.left ?? 0}px`,
315+
visibility: internalOpen ? 'visible' : 'hidden',
316+
display: 'flex',
338317
} as React.CSSProperties)
339-
: undefined
318+
: {
319+
visibility: internalOpen ? 'visible' : 'hidden',
320+
display: 'flex',
321+
}
340322
}
341323
className={enabled ? classes.Overlay : undefined}
342324
{...props}
@@ -345,64 +327,62 @@ const Panel: React.FC<SelectPanelProps> = ({
345327
}}
346328
>
347329
{internalOpen && (
348-
<>
349-
<SelectPanelContext.Provider
350-
value={{
351-
panelId,
352-
title,
353-
description,
354-
onCancel: onInternalCancel,
355-
onClearSelection: propsOnClearSelection ? onInternalClearSelection : undefined,
356-
searchQuery,
357-
setSearchQuery,
358-
selectionVariant,
359-
moveFocusToList,
360-
}}
330+
<SelectPanelContext.Provider
331+
value={{
332+
panelId,
333+
title,
334+
description,
335+
onCancel: onInternalCancel,
336+
onClearSelection: propsOnClearSelection ? onInternalClearSelection : undefined,
337+
searchQuery,
338+
setSearchQuery,
339+
selectionVariant,
340+
moveFocusToList,
341+
}}
342+
>
343+
<Box
344+
as="form"
345+
method="dialog"
346+
onSubmit={onInternalSubmit}
347+
sx={enabled ? undefined : {display: 'flex', flexDirection: 'column', width: '100%'}}
348+
className={enabled ? classes.Form : undefined}
361349
>
350+
{slots.header ?? /* render default header as fallback */ <SelectPanelHeader />}
351+
362352
<Box
363-
as="form"
364-
method="dialog"
365-
onSubmit={onInternalSubmit}
366-
sx={enabled ? undefined : {display: 'flex', flexDirection: 'column', width: '100%'}}
367-
className={enabled ? classes.Form : undefined}
353+
as="div"
354+
sx={
355+
enabled
356+
? undefined
357+
: {
358+
flexShrink: 1,
359+
flexGrow: 1,
360+
overflow: 'hidden',
361+
display: 'flex',
362+
flexDirection: 'column',
363+
justifyContent: 'space-between',
364+
ul: {overflowY: 'auto', flexGrow: 1},
365+
}
366+
}
367+
className={enabled ? classes.Container : undefined}
368368
>
369-
{slots.header ?? /* render default header as fallback */ <SelectPanelHeader />}
370-
371-
<Box
372-
as="div"
373-
sx={
374-
enabled
375-
? undefined
376-
: {
377-
flexShrink: 1,
378-
flexGrow: 1,
379-
overflow: 'hidden',
380-
display: 'flex',
381-
flexDirection: 'column',
382-
justifyContent: 'space-between',
383-
ul: {overflowY: 'auto', flexGrow: 1},
384-
}
385-
}
386-
className={enabled ? classes.Container : undefined}
369+
<ActionListContainerContext.Provider
370+
value={{
371+
container: 'SelectPanel',
372+
listRole: 'listbox',
373+
selectionAttribute: 'aria-selected',
374+
selectionVariant: selectionVariant === 'instant' ? 'single' : selectionVariant,
375+
afterSelect: internalAfterSelect,
376+
listLabelledBy: `${panelId}--title`,
377+
enableFocusZone: true, // Arrow keys navigation for list items
378+
}}
387379
>
388-
<ActionListContainerContext.Provider
389-
value={{
390-
container: 'SelectPanel',
391-
listRole: 'listbox',
392-
selectionAttribute: 'aria-selected',
393-
selectionVariant: selectionVariant === 'instant' ? 'single' : selectionVariant,
394-
afterSelect: internalAfterSelect,
395-
listLabelledBy: `${panelId}--title`,
396-
enableFocusZone: true, // Arrow keys navigation for list items
397-
}}
398-
>
399-
{childrenInBody}
400-
</ActionListContainerContext.Provider>
401-
</Box>
402-
{slots.footer}
380+
{childrenInBody}
381+
</ActionListContainerContext.Provider>
403382
</Box>
404-
</SelectPanelContext.Provider>
405-
</>
383+
{slots.footer}
384+
</Box>
385+
</SelectPanelContext.Provider>
406386
)}
407387
</BaseOverlay>
408388
</>

packages/react/src/hooks/useAnchoredPosition.ts

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {type RefObject} from 'react'
1+
import React from 'react'
22
import {getAnchoredPosition} from '@primer/behaviors'
33
import type {AnchorPosition, PositionSettings} from '@primer/behaviors'
44
import {useProvidedRefOrCreate} from './useProvidedRefOrCreate'
@@ -45,12 +45,8 @@ export function useAnchoredPosition(
4545

4646
useLayoutEffect(updatePosition, [updatePosition])
4747

48-
// recalculate position if viewport changes size
4948
useResizeObserver(updatePosition)
5049

51-
// recalculate position if the floating element changes size
52-
useResizeObserver(updatePosition, floatingElementRef as RefObject<HTMLElement>)
53-
5450
return {
5551
floatingElementRef,
5652
anchorElementRef,

0 commit comments

Comments
 (0)