pl-fe: fix dropdown menus overflow issue

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2025-10-15 17:31:21 +02:00
parent d8fdf5ac07
commit 0957d28d94

View File

@ -1,4 +1,4 @@
import { offset, Placement, useFloating, flip, arrow, shift, autoUpdate } from '@floating-ui/react'; import { arrow, autoUpdate, flip, offset, Placement, shift, size, useFloating } from '@floating-ui/react';
import clsx from 'clsx'; import clsx from 'clsx';
import { supportsPassiveEvents } from 'detect-passive-events'; import { supportsPassiveEvents } from 'detect-passive-events';
import React, { useEffect, useMemo, useRef, useState } from 'react'; import React, { useEffect, useMemo, useRef, useState } from 'react';
@ -151,7 +151,7 @@ const DropdownMenuContent: React.FC<IDropdownMenuContent> = ({ handleClose, item
); );
return ( return (
<div ref={ref}> <div className='max-h-full overflow-auto' ref={ref}>
{items?.some(item => item?.items?.length) ? ( {items?.some(item => item?.items?.length) ? (
<ReactSwipeableViews animateHeight index={tab === undefined ? 0 : 1} style={{ width }}> <ReactSwipeableViews animateHeight index={tab === undefined ? 0 : 1} style={{ width }}>
<div className={clsx('max-w-full', { 'w-full': touchscreen })} style={{ width }}> <div className={clsx('max-w-full', { 'w-full': touchscreen })} style={{ width }}>
@ -221,6 +221,11 @@ const DropdownMenu = (props: IDropdownMenu) => {
arrow({ arrow({
element: arrowRef, element: arrowRef,
}), }),
size({
apply: ({ availableHeight, elements }) => {
elements.floating.style.maxHeight = `${Math.max(50, availableHeight - 12)}px`;
},
}),
], ],
whileElementsMounted: autoUpdate, whileElementsMounted: autoUpdate,
}); });
@ -378,7 +383,7 @@ const DropdownMenu = (props: IDropdownMenu) => {
<div <div
data-testid='dropdown-menu' data-testid='dropdown-menu'
ref={refs.setFloating} ref={refs.setFloating}
className='z-[1001] block' className='z-[1001] flex'
style={{ style={{
position: strategy, position: strategy,
top: y ?? 0, top: y ?? 0,