From caa9e0503edbc3dd01088aff9663c3e3832dbd7e Mon Sep 17 00:00:00 2001 From: Maurice Date: Sun, 12 Apr 2026 02:08:27 +0200 Subject: [PATCH] fix: packing list category menu no longer cut off by overflow (#557) Use position:fixed with calculated coordinates instead of position:absolute so the dropdown escapes the overflow:hidden container. Also adds a backdrop to close on outside click. --- .../components/Packing/PackingListPanel.tsx | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/client/src/components/Packing/PackingListPanel.tsx b/client/src/components/Packing/PackingListPanel.tsx index ce856501..d5745476 100644 --- a/client/src/components/Packing/PackingListPanel.tsx +++ b/client/src/components/Packing/PackingListPanel.tsx @@ -467,6 +467,7 @@ function KategorieGruppe({ kategorie, items, tripId, allCategories, onRename, on const [showAddItem, setShowAddItem] = useState(false) const [newItemName, setNewItemName] = useState('') const addItemRef = useRef(null) + const menuBtnRef = useRef(null) const assigneeDropdownRef = useRef(null) const { togglePackingItem } = useTripStore() const toast = useToast() @@ -629,22 +630,27 @@ function KategorieGruppe({ kategorie, items, tripId, allCategories, onRename, on
- - {showMenu && ( -
setShowMenu(false)}> - {canEdit && } label={t('packing.menuRename')} onClick={() => { setEditingName(true); setShowMenu(false) }} />} - } label={t('packing.menuCheckAll')} onClick={() => { handleCheckAll(); setShowMenu(false) }} /> - } label={t('packing.menuUncheckAll')} onClick={() => { handleUncheckAll(); setShowMenu(false) }} /> - {canEdit && <> -
- } label={t('packing.menuDeleteCat')} danger onClick={handleDeleteAll} /> - } -
- )} + {showMenu && (() => { + const rect = menuBtnRef.current?.getBoundingClientRect(); + return ( + <> +
setShowMenu(false)} /> +
+ {canEdit && } label={t('packing.menuRename')} onClick={() => { setEditingName(true); setShowMenu(false) }} />} + } label={t('packing.menuCheckAll')} onClick={() => { handleCheckAll(); setShowMenu(false) }} /> + } label={t('packing.menuUncheckAll')} onClick={() => { handleUncheckAll(); setShowMenu(false) }} /> + {canEdit && <> +
+ } label={t('packing.menuDeleteCat')} danger onClick={handleDeleteAll} /> + } +
+ + ); + })()}