import { ListableResourceType, QueryFilter } from '@commercelayer/sdk'; import { UseResourceListConfig } from '../useResourceList'; import { ResourceListProps } from '../useResourceList/useResourceList'; import { makeFilterAdapters } from './adapters'; import { FiltersFormProps } from './FiltersForm'; import { FiltersNavProps } from './FiltersNav'; import { FiltersInstructions } from './types'; interface UseResourceFiltersConfig { /** * Array of instruction items to build the filters behaviors */ instructions: FiltersInstructions; /** * By default, we strip out all filters that are not part of the `instructions` array. * The option `predicateWhitelist` is used to whitelist a set of predicates that you want to use as filters. * * @example * ```jsx * useResourceFilters({ * instructions, * predicateWhitelist: [ 'starts_at_lteq', 'expires_at_gteq', 'starts_at_gt', 'expires_at_lt' ] * }) * ``` */ predicateWhitelist?: string[]; } interface UseResourceFiltersHook { /** * Helper methods to transform filters from/to url query string, sdk and form values */ adapters: ReturnType; /** * Search bar component with filters navigation buttons */ SearchWithNav: (props: Pick & { /** * Callback triggered when user interact with search bar or remove a filter from the buttons */ onUpdate: (newQueryString: string) => void; hideSearchBar?: boolean; hideFiltersNav?: boolean; /** * Placeholder text for the search bar * @default 'Search...' */ searchBarPlaceholder?: string; /** * Milliseconds to wait before triggering the search bar callback * @default 500 */ searchBarDebounceMs?: number; }) => React.ReactNode; /** * Form component with filters fields based on provided instructions */ FiltersForm: (props: Pick) => React.ReactNode; /** * Filtered ResourceList component based on current active filters */ FilteredList: (props: Omit, "query" | "metricsQuery"> & ResourceListProps & { query?: Omit["query"]>, "filters">; metricsQuery?: Omit["metricsQuery"]>, "filter"> & { /** Filters need to be configured within the `useResourceFilters` options. */ filters?: never; }; hideTitle?: boolean; }) => React.ReactNode; /** * SDK filters object to be used in the sdk query */ sdkFilters: QueryFilter | undefined; /** * Returns `true` if there is at least one filter activated by the user. * This does not include the text filter or presets, but only ones manually set by the user. */ hasActiveFilter: boolean; /** * view title to be used in the page */ viewTitle?: string; } export declare function useResourceFilters({ instructions, predicateWhitelist, }: UseResourceFiltersConfig): UseResourceFiltersHook; export {};