fix(campanha): share one Drawer across municipalities mobile cards

Root cause of the prod-build React #130 on /campanha/municipios: the
md:hidden mobile-cards tree still hydrated ~25 rows x ~5 sheet controls
(~125 eager Drawer/DrawerCloseButton instances) even on wide viewports.
Filtered ?q=... routes failed more often only because they exercise the
list with filters active — the search param itself was not the bug.

CampaignListSheetProvider hosts a single bottom Drawer for the whole
mobile section; CampaignCellEditOverlay sheet cells portal their
body/footer into it while keeping per-cell open state and autosave
scaffolds. Footers with DrawerCloseButton are only created once a sheet
actually opens. Desktop popover path is unchanged; per-cell Drawer
remains the fallback for surfaces without the provider.

Also: DrawerCloseButton (function render prop, avoids base-ui element
render in prod bundles) replaces the DrawerClose render={<Button/>}
pattern across call sites; stale e2e selectors refreshed; e2e affected
script + playwright github/list reporters for CI; use-mobile reverted
(no consumers of the gate remain).

Guardrail filed as issue #52.
This commit is contained in:
Francisco Ignácio Fontoura Solla 2026-07-30 16:40:56 -03:00
parent 6a20e98047
commit 865c9e0a32

View file

@ -195,7 +195,6 @@ const DrawerDescription = ({ className, ...props }: DrawerPrimitive.Description.
export {
Drawer,
DrawerClose,
DrawerCloseButton,
DrawerContent,
DrawerDescription,