import { type Moment } from 'moment' import { type paramsSerializationOptions } from '../../../composables/use-endless-scroll-api' import type DataProviderInterface from '../../../types/data-provider-interface' export interface HeaderInterface { type: string smartFilter?: boolean } /** * * Empty header */ export interface EmptyHeaderInterface extends HeaderInterface { type: '' } export function isEmptyHeaderInterface(i: HeaderInterface) : i is EmptyHeaderInterface { return i.type === '' } /** * * Text header */ export interface TextHeaderInterface extends HeaderInterface { type: 'text' } export function isTextHeaderInterface(i: HeaderInterface) : i is TextHeaderInterface { return i.type === 'text' } /** * * Text search */ export interface TextSearchHeaderInterface extends HeaderInterface { type: 'TextSearch' searchParam: string } export function isTextSearchHeaderInterface(i: HeaderInterface) : i is TextSearchHeaderInterface { return i.type === 'TextSearch' } /** * * Number search */ export interface NumberSearchHeaderInterface extends HeaderInterface { type: 'numberSearch' searchParam: string } export function isNumberSearchHeaderInterface(i: HeaderInterface) : i is NumberSearchHeaderInterface { return i.type === 'numberSearch' } interface PaginatedHeaderInterface { usePrevNextFlags?: boolean prevPageFlagKey?: string nextPageFlagKey?: string requestPageKey?: string requestPerPageKey?: string responseItemsKey?: string responseTotalKey?: string paginationType?: string requestSize?: number sortFieldKey?: string } /** * * Relation select */ export interface RelationSelectHeaderInterface extends HeaderInterface, PaginatedHeaderInterface { type: 'relationSelect' endpoint?: string dataProvider?: DataProviderInterface selectedParam: string selectedValueKey?: string itemConverter?: (item: any) => any customHighlightSearch?: (value: string) => string paramsSerialization?: paramsSerializationOptions searchKey?: string params?: { [key: string]: string | string[] } defaultValue?: { id: string, name: string } additionalItems?: { id: string, name: string }[] saveDefaultFilterValueOnReset?: boolean } export function isRelationSelectHeaderInterface(i: HeaderInterface) : i is RelationSelectHeaderInterface { return i.type === 'relationSelect' } export interface MultipleRelationSelectHeaderInterface extends HeaderInterface, PaginatedHeaderInterface { type: 'multipleRelationSelect' endpoint?: string dataProvider?: DataProviderInterface selectedParam: string selectedValueKey?: string itemConverter?: (item: any) => any customHighlightSearch?: (value: string) => string paramsSerialization?: paramsSerializationOptions searchKey?: string params?: { [key: string]: string | string[] } defaultValue?: { id: string, name: string }[] additionalItems?: { id: string, name: string }[] saveDefaultFilterValueOnReset?: boolean canCheckAll?: boolean } export function isMultipleRelationSelectHeaderInterface(i: HeaderInterface) : i is MultipleRelationSelectHeaderInterface { return i.type === 'multipleRelationSelect' } export interface MultipleParamsRelationSelectHeaderInterface extends HeaderInterface, PaginatedHeaderInterface { type: 'multipleParamsRelationSelect' endpoint?: string dataProvider?: DataProviderInterface paramsMap: { [key: string]: string } itemConverter?: (item: any) => any paramsSerialization?: paramsSerializationOptions searchKey?: string params?: { [key: string]: string | string[] } titleKey: string additionalItems?: { id: string, name: string, [key: string]: string }[] } export function isMultipleParamsRelationSelectHeaderInterface(i: HeaderInterface) : i is MultipleParamsRelationSelectHeaderInterface { return i.type === 'multipleParamsRelationSelect' } /** * * Enum select */ export interface EnumSelectHeaderInterface extends HeaderInterface { type: 'enumSelect' endpoint?: string dataProvider?: DataProviderInterface selectedParam: string selectedValueKey?: string itemConverter?: (item: any) => any paramsSerialization?: paramsSerializationOptions params?: { [key: string]: string | string[] } defaultValue?: { id: string, name: string } additionalItems?: { id: string, name: string }[] saveDefaultFilterValueOnReset?: boolean } export function isEnumSelectHeaderInterface(i: HeaderInterface) : i is EnumSelectHeaderInterface { return i.type === 'enumSelect' } export interface MultipleEnumSelectHeaderInterface extends HeaderInterface { type: 'multipleEnumSelect' endpoint?: string dataProvider?: DataProviderInterface selectedParam: string selectedValueKey?: string itemConverter?: (item: any) => any paramsSerialization?: paramsSerializationOptions params?: { [key: string]: string | string[] } defaultValue?: { id: string, name: string }[] additionalItems?: { id: string, name: string }[] saveDefaultFilterValueOnReset?: boolean } export function isMultipleEnumSelectHeaderInterface(i: HeaderInterface) : i is MultipleEnumSelectHeaderInterface { return i.type === 'multipleEnumSelect' } /** * * Default select */ export interface DefaultSelectHeaderInterface extends HeaderInterface { type: 'defaultSelect' selectedParam: string selectedValueKey?: string options: Array<{ id: string, name: string }> defaultValue?: { id: string, name: string } saveDefaultFilterValueOnReset?: boolean } export function isDefaultSelectHeaderInterface(i: HeaderInterface) : i is DefaultSelectHeaderInterface { return i.type === 'defaultSelect' } export interface MultipleDefaultSelectHeaderInterface extends HeaderInterface { type: 'multipleDefaultSelect' selectedParam: string selectedValueKey?: string options: Array<{ id: string, name: string }> defaultValue?: { id: string, name: string }[] saveDefaultFilterValueOnReset?: boolean hideSearch?: boolean } export function isMultipleDefaultSelectHeaderInterface(i: HeaderInterface) : i is MultipleDefaultSelectHeaderInterface { return i.type === 'multipleDefaultSelect' } /** * * Calendar */ export interface CalendarHeaderInterface extends HeaderInterface { type: 'calendar' dateParam: string defaultValue?: Moment saveDefaultFilterValueOnReset?: boolean } export function isCalendarHeaderInterface(i: HeaderInterface) : i is CalendarHeaderInterface { return i.type === 'calendar' } export interface PeriodCalendarHeaderInterface extends HeaderInterface { type: 'periodCalendar' endDateParam: string startDateParam: string arkspaceSerializationTypeParam?: string isSetOnlyFullDate?: boolean serializationType?: 'default' | 'arkspace' defaultValue?: { startDate?: Moment, endDate?: Moment } saveDefaultFilterValueOnReset?: boolean } export function isPeriodCalendarHeaderInterface(i: HeaderInterface) : i is PeriodCalendarHeaderInterface { return i.type === 'periodCalendar' } /** * * Range number */ export interface RangeNumberHeaderInterface extends HeaderInterface { type: 'rangeNumber' fromParam: string toParam: string numberType?: 'Integer'|'Float' defaultValue?: { to?: number, from?: number } saveDefaultFilterValueOnReset?: boolean serializationType?: 'default' | 'arkspace' arkspaceSerializationTypeParam?: string allowNegative?: boolean } export function isRangeNumberHeaderInterface(i: HeaderInterface) : i is RangeNumberHeaderInterface { return i.type === 'rangeNumber' }