From bd9501136dc6fd4e1e82c9bd31f86718840a177e Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Fri, 29 May 2026 17:35:45 +0200 Subject: [PATCH] add mobile filter sheet --- .../partners/catalog/IntegrationsContent.tsx | 211 ++++++++++-------- 1 file changed, 122 insertions(+), 89 deletions(-) diff --git a/apps/www/app/partners/catalog/IntegrationsContent.tsx b/apps/www/app/partners/catalog/IntegrationsContent.tsx index e5191aaea19..46797a0eff8 100644 --- a/apps/www/app/partners/catalog/IntegrationsContent.tsx +++ b/apps/www/app/partners/catalog/IntegrationsContent.tsx @@ -10,6 +10,7 @@ import { ArrowRight, ArrowUpRight, BadgeCheck, + Filter, LayoutGrid, List, Loader, @@ -26,7 +27,20 @@ import { useQueryStates, } from 'nuqs' import { useEffect, useRef, useState } from 'react' -import { Badge, Button, Checkbox, cn, InputGroup, InputGroupAddon, InputGroupInput } from 'ui' +import { + Badge, + Button, + Checkbox, + cn, + InputGroup, + InputGroupAddon, + InputGroupInput, + Sheet, + SheetContent, + SheetHeader, + SheetTitle, + SheetTrigger, +} from 'ui' import { useDebounce } from 'use-debounce' interface Props { @@ -105,6 +119,8 @@ export default function IntegrationsContent({ const HAS_ACTIVE_FILTERS = search.trim() !== '' || selectedCategories.length > 0 || partnerOnly || oneClickOnly + const activeFilterCount = + selectedCategories.length + (partnerOnly ? 1 : 0) + (oneClickOnly ? 1 : 0) const categoryFiltered = selectedCategories.length > 0 @@ -130,6 +146,70 @@ export default function IntegrationsContent({ : filtered.filter((p) => !p.featured) const showFeatured = !HAS_ACTIVE_FILTERS && featuredPartners.length > 0 + // Shared filter UI — rendered in both the desktop sidebar and the mobile bottom sheet. + // Uses wrapping