Home / Function/ QueryPerformanceFilterBar() — supabase Function Reference

QueryPerformanceFilterBar() — supabase Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  1e358271_8ad9_1b2c_7ca2_5dc1d64bd29a["QueryPerformanceFilterBar()"]
  5af4f2f6_f3e7_a9fe_5ce8_d8772a148f51["useQueryPerformanceSort()"]
  1e358271_8ad9_1b2c_7ca2_5dc1d64bd29a -->|calls| 5af4f2f6_f3e7_a9fe_5ce8_d8772a148f51
  9235a6e5_5d53_7ba1_1d8b_b60b10ae9fe0["useIndexAdvisorStatus()"]
  1e358271_8ad9_1b2c_7ca2_5dc1d64bd29a -->|calls| 9235a6e5_5d53_7ba1_1d8b_b60b10ae9fe0
  style 1e358271_8ad9_1b2c_7ca2_5dc1d64bd29a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

apps/studio/components/interfaces/QueryPerformance/QueryPerformanceFilterBar.tsx lines 16–166

export const QueryPerformanceFilterBar = ({
  actions,
  showRolesFilter = false,
}: {
  actions?: ReactNode
  showRolesFilter?: boolean
}) => {
  const { sort, clearSort } = useQueryPerformanceSort()
  const { isIndexAdvisorEnabled } = useIndexAdvisorStatus()

  const [
    {
      search: searchQuery,
      roles: defaultFilterRoles,
      callsFilter: callsFilterRaw,
      totalTimeFilter: totalTimeFilterRaw,
      indexAdvisor,
    },
    setSearchParams,
  ] = useQueryStates({
    search: parseAsString.withDefault(''),
    roles: parseAsArrayOf(parseAsString).withDefault([]),
    callsFilter: parseAsJson<NumericFilter | null>((value) =>
      value === null || value === undefined ? null : (value as NumericFilter)
    ),
    totalTimeFilter: parseAsJson<NumericFilter | null>((value) =>
      value === null || value === undefined ? null : (value as NumericFilter)
    ),
    indexAdvisor: parseAsString.withDefault('false'),
  })

  const callsFilter = callsFilterRaw ?? null
  const totalTimeFilter = totalTimeFilterRaw ?? null

  const [filters, setFilters] = useState<{ roles: string[] }>({
    roles: defaultFilterRoles,
  })
  const [inputValue, setInputValue] = useState(searchQuery)

  const onSearchQueryChange = (value: string) => {
    setSearchParams({ search: value || '' })
  }

  const onFilterRolesChange = (roles: string[]) => {
    setFilters({ ...filters, roles })
    setSearchParams({ roles })
  }

  const debouncedInputValue = useDebouncedValue(inputValue, 300)

  const onIndexAdvisorToggle = () => {
    setSearchParams({ indexAdvisor: indexAdvisor === 'true' ? 'false' : 'true' })
  }

  useEffect(() => {
    onSearchQueryChange(debouncedInputValue)
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [debouncedInputValue])

  const getCallsFilterDisplay = () => {
    if (!callsFilter) return null
    return `${callsFilter.operator} ${callsFilter.value}`
  }

  const getTotalTimeFilterDisplay = () => {
    if (!totalTimeFilter) return null
    return `${totalTimeFilter.operator} ${totalTimeFilter.value}`
  }

  return (
    <div className="px-4 py-1.5 bg-surface-200 border-t -mt-px flex justify-between items-center overflow-x-auto overflow-y-hidden w-full flex-shrink-0">
      <div className="flex items-center gap-x-4">
        <div className="flex items-center gap-x-2">
          <FilterInput value={inputValue} onChange={setInputValue} />

          {callsFilter ? (
            <FilterPill
              label="Calls"
              value={getCallsFilterDisplay() || ''}
              onClear={(e) => {
                e.stopPropagation()
                setSearchParams({ callsFilter: null })
              }}
            />
          ) : (
            <ReportsNumericFilter
              label="Calls"
              value={callsFilter}
              onChange={(value) => setSearchParams({ callsFilter: value })}
              operators={['=', '>=', '<=', '>', '<', '!=']}
              defaultOperator=">="
              placeholder="e.g. 100"
              min={0}
              className="w-auto"
            />
          )}

          {totalTimeFilter ? (
            <FilterPill
              label="Total Time"
              value={getTotalTimeFilterDisplay() || ''}
              onClear={(e) => {
                e.stopPropagation()
                setSearchParams({ totalTimeFilter: null })
              }}
            />
          ) : (
            <ReportsNumericFilter
              label="Total Time"
              value={totalTimeFilter}
              onChange={(value) => setSearchParams({ totalTimeFilter: value })}
              operators={['=', '>=', '<=', '>', '<', '!=']}
              defaultOperator=">"
              placeholder="e.g. 1000"
              min={0}
              className="w-auto"
            />
          )}

          {showRolesFilter &&
            (filters.roles && filters.roles.length > 0 ? (
              <FilterPill
                label="Roles"
                value={filters.roles.join(', ')}
                onClear={(e) => {
                  e.stopPropagation()
                  setFilters({ roles: [] })
                  setSearchParams({ roles: [] })
                }}
              />
            ) : (
              <RolesFilterDropdown
                activeOptions={filters.roles}
                onSaveFilters={onFilterRolesChange}
              />
            ))}

          {isIndexAdvisorEnabled && (
            <IndexAdvisorFilter
              isActive={indexAdvisor === 'true'}
              onToggle={onIndexAdvisorToggle}
            />
          )}

          {sort && <SortIndicator sort={sort} onClearSort={clearSort} />}
        </div>
      </div>
      <div className="flex gap-2 items-center pl-2">{actions}</div>
    </div>
  )
}

Subdomains

Frequently Asked Questions

What does QueryPerformanceFilterBar() do?
QueryPerformanceFilterBar() is a function in the supabase codebase.
What does QueryPerformanceFilterBar() call?
QueryPerformanceFilterBar() calls 2 function(s): useIndexAdvisorStatus, useQueryPerformanceSort.

Analyze Your Own Codebase

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

Try Supermodel Free