Home / Function/ FilterPopoverNew() — supabase Function Reference

FilterPopoverNew() — supabase Function Reference

Architecture documentation for the FilterPopoverNew() function in FilterPopoverNew.tsx from the supabase codebase.

Entity Profile

Dependency Diagram

graph TD
  96d51f59_7e49_0f5a_9f70_b1fb8b707a01["FilterPopoverNew()"]
  ecf04e05_b4e3_21b7_2c3d_dfd17edca1bc["filtersToFilterGroup()"]
  96d51f59_7e49_0f5a_9f70_b1fb8b707a01 -->|calls| ecf04e05_b4e3_21b7_2c3d_dfd17edca1bc
  3839e821_8542_886e_a7d8_2c415ba2c2df["columnToFilterProperty()"]
  96d51f59_7e49_0f5a_9f70_b1fb8b707a01 -->|calls| 3839e821_8542_886e_a7d8_2c415ba2c2df
  b3bae604_5cd0_7150_e294_d9c5645cd604["serializeFilterProperties()"]
  96d51f59_7e49_0f5a_9f70_b1fb8b707a01 -->|calls| b3bae604_5cd0_7150_e294_d9c5645cd604
  a61f95d9_d857_8ce3_7773_15efabdd7848["filterGroupToFilters()"]
  96d51f59_7e49_0f5a_9f70_b1fb8b707a01 -->|calls| a61f95d9_d857_8ce3_7773_15efabdd7848
  style 96d51f59_7e49_0f5a_9f70_b1fb8b707a01 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/studio/components/grid/components/header/filter/FilterPopoverNew.tsx lines 119–213

export const FilterPopoverNew = ({ isRefetching = false }: FilterPopoverProps) => {
  const { filters, setFilters } = useTableFilterNew()
  const snap = useTableEditorTableStateSnapshot()

  const [freeformText, setFreeformText] = useState('')
  const { mutateAsync: generateFilters, isPending: isGenerating } = useSqlFilterGenerateMutation()

  // Convert filters to FilterGroup for the FilterBar
  const filterGroup = useMemo(() => filtersToFilterGroup(filters), [filters])

  const columns = useMemo(() => snap.table?.columns ?? [], [snap.table?.columns])

  // Create filter properties from table columns
  // Add the date picker component for date columns (can't be in utils due to React component)
  const filterProperties: FilterProperty[] = useMemo(() => {
    return columns.map((column) => {
      const property = columnToFilterProperty(column)
      if (property.type === 'date' && Array.isArray(property.options)) {
        return {
          ...property,
          options: [
            ...property.options,
            {
              label: 'Pick a date...',
              component: (props: CustomOptionProps) => <DatePickerOption {...props} />,
            },
          ],
        }
      }
      return property
    })
  }, [columns])

  const serializableFilterProperties = useMemo(
    () => serializeFilterProperties(filterProperties),
    [filterProperties]
  )

  // Handle filter changes from FilterBar
  const handleFilterChange = useCallback(
    (newFilterGroup: FilterGroup) => {
      const newFilters = filterGroupToFilters(newFilterGroup)
      setFilters(newFilters)
    },
    [setFilters]
  )

  const actions = useMemo(
    () => [
      {
        value: 'ai-filter',
        label: 'Filter by AI',
        onSelect: async (
          inputValue: string,
          context: { path: number[]; activeFilters: FilterGroup }
        ) => {
          const prompt = inputValue.trim()
          if (!prompt) return

          const aiGroup = await generateFilters({
            prompt,
            filterProperties: serializableFilterProperties,
            currentPath: context.path ?? [],
          })

          const updatedGroup = updateGroupAtPath(context.activeFilters, context.path ?? [], aiGroup)
          handleFilterChange(updatedGroup)
          setFreeformText('')
        },
      },
    ],
    [generateFilters, serializableFilterProperties, handleFilterChange, setFreeformText]
  )

  const icon = isRefetching ? (
    <Loader2 className="animate-spin text-brand h-4 w-4 shrink-0" aria-label="Loading table data" />
  ) : null

  return (
    <div className="flex-1 min-w-0">
      <FilterBar
        filterProperties={filterProperties}
        filters={filterGroup}
        onFilterChange={handleFilterChange}
        freeformText={freeformText}
        onFreeformTextChange={setFreeformText}
        actions={actions}
        isLoading={isGenerating}
        variant="pill"
        className="bg-transparent border-0"
        icon={icon}
      />
    </div>
  )
}

Subdomains

Frequently Asked Questions

What does FilterPopoverNew() do?
FilterPopoverNew() is a function in the supabase codebase.
What does FilterPopoverNew() call?
FilterPopoverNew() calls 4 function(s): columnToFilterProperty, filterGroupToFilters, filtersToFilterGroup, serializeFilterProperties.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free