From 9004dcb93b6fc7c77d627e1f0543833c0bd70636 Mon Sep 17 00:00:00 2001 From: Eunjae Lee Date: Tue, 22 Apr 2025 17:29:56 +0200 Subject: [PATCH] feat: open dropdown right after adding a filter (#20819) * feat: open dropdown right after adding a filter * clean up timeout --- .../features/data-table/DataTableProvider.tsx | 3 ++ .../components/filters/DateRangeFilter.tsx | 4 ++- .../components/filters/FilterPopover.tsx | 4 ++- .../filters/useFilterPopoverOpen.ts | 36 +++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 packages/features/data-table/components/filters/useFilterPopoverOpen.ts diff --git a/packages/features/data-table/DataTableProvider.tsx b/packages/features/data-table/DataTableProvider.tsx index 98ce77ddea..68092d7940 100644 --- a/packages/features/data-table/DataTableProvider.tsx +++ b/packages/features/data-table/DataTableProvider.tsx @@ -23,6 +23,7 @@ import { CTA_CONTAINER_CLASS_NAME } from "./lib/utils"; export type DataTableContextType = { tableIdentifier: string; ctaContainerRef: React.RefObject; + filterToOpen: React.MutableRefObject; activeFilters: ActiveFilters; clearAll: (exclude?: string[]) => void; @@ -81,6 +82,7 @@ export function DataTableProvider({ defaultPageSize = DEFAULT_PAGE_SIZE, ctaContainerClassName = CTA_CONTAINER_CLASS_NAME, }: DataTableProviderProps) { + const filterToOpen = useRef(undefined); const [activeFilters, setActiveFilters] = useQueryState( "activeFilters", parseAsArrayOf(parseAsJson(ZActiveFilter.parse)).withDefault(DEFAULT_ACTIVE_FILTERS) @@ -216,6 +218,7 @@ export function DataTableProvider({ value={{ tableIdentifier, ctaContainerRef, + filterToOpen, activeFilters, addFilter, clearAll, diff --git a/packages/features/data-table/components/filters/DateRangeFilter.tsx b/packages/features/data-table/components/filters/DateRangeFilter.tsx index 1e000c1d09..0988e5c5eb 100644 --- a/packages/features/data-table/components/filters/DateRangeFilter.tsx +++ b/packages/features/data-table/components/filters/DateRangeFilter.tsx @@ -30,6 +30,7 @@ import { } from "../../lib/dateRange"; import type { FilterableColumn, DateRangeFilterOptions } from "../../lib/types"; import { ZDateRangeFilterValue, ColumnFilterType } from "../../lib/types"; +import { useFilterPopoverOpen } from "./useFilterPopoverOpen"; type DateRangeFilterProps = { column: Extract; @@ -38,6 +39,7 @@ type DateRangeFilterProps = { }; export const DateRangeFilter = ({ column, options, showClearButton = false }: DateRangeFilterProps) => { + const { open, onOpenChange } = useFilterPopoverOpen(column.id); const filterValue = useFilterValue(column.id, ZDateRangeFilterValue); const { updateFilter, removeFilter } = useDataTable(); const range = options?.range ?? "past"; @@ -136,7 +138,7 @@ export const DateRangeFilter = ({ column, options, showClearButton = false }: Da } return ( - +