import { ReactElement } from 'react'; import { PaperProps as CorePaperProps } from '@krowdy/kds-core/Paper' import { KrowdyButtonProps } from '@krowdy/kds-core/Button' interface Classes { backIcon?: string; root?: string; titleContainer?: string } // Supported filter types type FilterType = 'string' | 'number' | 'date' | 'category'; type Filter = { _id: string; key: string; label: string; type: FilterType | string } type FilterGroup = { _id: string; children: Filter[]; label: string } // Applied filter type AppliedFilter = { _id?: string; key: string; label?: string; operator: string; operatorLabel?: string; optionIndex?: number; type: FilterType | string; value?: string | number | any[] } type CategoryItem = { _id: string; label: string } type CandidateValue = { _id: string | number; label: string } type DataUserFlow = { 'data-userflow': string; } type ChildProps = { PaperProps: CorePaperProps | DataUserFlow; AddFiltersButtonProps: KrowdyButtonProps | DataUserFlow } type FilterTypeType = { _id: string; createdAt: string; initialValue: { first?: string | null; second?: string | null; } | never[]; options: { _id: string; label: string; numberOfInputs: number; operator: string; }[]; type: string; updatedAt: string; } interface Config { type: string; } interface LoadDataSetArgs { config: Config; uiFilterConfig: FilterGroup; } interface LoadDataSetResponse { data: any; columnName: string; } interface LoadItemsArgs { config: Config; uiFilterConfig: FilterGroup; search: string; page: number; limit: number; } interface LoadItemsResponse { docs: { _id: string; label: string; count?: number; }[]; info: { hasNextPage: boolean; page: number; totalDocs: number; } } interface LoadImproverKeysArgs { filters: AppliedFilter[]; } interface LoadImproverKeysResponse { key: string; label: string; } interface OnShowRecommendationAlertArgs { type: string | null } export interface SuperFiltersProps { childProps?: ChildProps; classes?: Classes; filterGroups: FilterGroup[]; filters: AppliedFilter[]; uniqueFilter?: boolean; headerHomeComponent?: React.ReactNode; listWidth?: number; onChangeFilters: (appliedFilters: AppliedFilter[]) => void; // hasNextPage?: boolean; // loadMoreCategoryItems: (categoryKey: string) => void; // onSelectCategoryFilter: (categoryKey: string, values: any[]) => void; title: string; onChangeFilterCandidate?: (candidateGroupFilterType: 'included' | 'excluded', candidateValues: CandidateValue[]) => void; excludedCandidates?: CandidateValue[]; includedCandidates?: CandidateValue[]; viewDefault?: string; filterTypes?: FilterTypeType[]; actionsComponent?: ReactElement | ReactElement[]; onChangePrevFilters?: (prevFilters: AppliedFilter[]) => Promise; loadItems?: (args: LoadItemsArgs) => Promise; loadDataSet?: (args: LoadDataSetArgs) => Promise; entityName: string; totalItems?: number; ref?: React.MutableRefObject; loadImproveFilters?: (args: LoadImproverKeysArgs) => Promise; showRecommends?: boolean; onShowRecommendationAlert?: (args: OnShowRecommendationAlertArgs) => void; disabled?: boolean; } declare const SuperFilters: React.ComponentType; export default SuperFilters