blob: 19446c352a0679613f9a0d5fe9d48c2e0ba60786 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { ReactNode } from 'react';
export interface SortColumn {
id: string;
desc?: boolean;
}
export type SortColumns = SortColumn[];
export interface SelectOption {
label: string;
value: any;
}
export interface CardSortSelectOption {
desc: boolean;
id: any;
label: string;
value: any;
}
type FilterOperator =
| 'sw'
| 'ew'
| 'ct'
| 'eq'
| 'nsw'
| 'new'
| 'nct'
| 'neq'
| 'gt'
| 'lt'
| 'rel_m_m'
| 'rel_o_m'
| 'title_or_slug'
| 'name_or_description'
| 'all_text'
| 'chart_all_text'
| 'dataset_is_null_or_empty'
| 'between'
| 'dashboard_is_favorite'
| 'chart_is_favorite';
export interface Filter {
Header: ReactNode;
id: string;
urlDisplay?: string;
operator?: FilterOperator;
input?:
| 'text'
| 'textarea'
| 'select'
| 'checkbox'
| 'search'
| 'datetime_range';
unfilteredLabel?: string;
selects?: SelectOption[];
onFilterOpen?: () => void;
fetchSelects?: (
filterValue?: string,
pageIndex?: number,
pageSize?: number,
) => Promise<SelectOption[]>;
paginate?: boolean;
}
export type Filters = Filter[];
export type ViewModeType = 'card' | 'table';
export interface FilterValue {
id: string;
urlDisplay?: string;
operator?: string;
value: string | boolean | number | null | undefined | string[] | number[];
}
export interface FetchDataConfig {
pageIndex: number;
pageSize: number;
sortBy: SortColumns;
filters: FilterValue[];
}
export interface InternalFilter extends FilterValue {
Header?: string;
}
export enum FilterOperators {
startsWith = 'sw',
endsWith = 'ew',
contains = 'ct',
equals = 'eq',
notStartsWith = 'nsw',
notEndsWith = 'new',
notContains = 'nct',
notEquals = 'neq',
greaterThan = 'gt',
lessThan = 'lt',
relationManyMany = 'rel_m_m',
relationOneMany = 'rel_o_m',
titleOrSlug = 'title_or_slug',
nameOrDescription = 'name_or_description',
allText = 'all_text',
chartAllText = 'chart_all_text',
datasetIsNullOrEmpty = 'dataset_is_null_or_empty',
between = 'between',
dashboardIsFav = 'dashboard_is_favorite',
chartIsFav = 'chart_is_favorite',
}