import { ReactNode } from 'react'; import { IntlShape } from 'react-intl'; import { DateToFormatOptions } from '@synerise/ds-core'; import { LegacyPlacement, PopoverProps } from '@synerise/ds-popover'; import { DateFilter, DateRange, DateRangePreset, RelativeUnits } from './date.types'; import { Props as FooterProps } from './Footer/Footer.types'; import { RangeFilterType } from './RangeFilter/constants'; import { FilterDefinition } from './RangeFilter/RangeFilter.types'; import { SavedFilter } from './RangeFilter/Shared/FilterDropdown/FilterDropdown.types'; import { DateLimitMode, RangeDisplayMode } from './RangeFilter/Shared/TimeWindow/RangeFormContainer/RangeForm/RangeForm.types'; import { RangePickerInputProps } from './RangePickerInput/RangePickerInput.types'; export type DateRangePickerProps = { /** * @deprecated use `valueFormatOptions` instead */ intl?: IntlShape; /** * overwrite default container's class. Default value is `ds-date-range-picker`. */ containerClass?: string; readOnly?: boolean; disabled?: boolean; disableDefaultTexts?: boolean; disabledDate?: (date?: Date) => boolean; valueFormatOptions?: DateToFormatOptions; forceAdjacentMonths?: boolean; forceAbsolute?: boolean; footerProps?: Partial; onValueChange?: (value: Partial | undefined) => void; onApply: (value: Partial | undefined) => void; onVisibleChange?: (visible: boolean) => void; onFilterSave?: (filters: SavedFilter[]) => void; popoverProps?: Partial>; popoverTrigger?: ReactNode; placement?: LegacyPlacement; ranges?: DateRangePreset[]; rangeUnits?: Array; relativeFuture?: boolean; relativePast?: boolean; relativeModes?: RelativeMode[]; savedFilters?: SavedFilter[]; showRelativePicker?: boolean; showFilter?: boolean; showTime?: boolean; showCustomRange?: boolean; showNowButton?: boolean; texts?: Partial; validate?: (value: DateRange) => { valid: boolean; message?: string; }; value: DateRange; defaultValue?: DateRange; /** * transforms value, by default omits ALL_TIME props */ valueTransformer?: (value: DateRange) => DateRange; disableAbsoluteTimepickerInRelative?: boolean; rangePickerInputProps?: Omit & { /** * @deprecated - pass 'disabled' prop directly to DateRangePicker */ disabled?: RangePickerInputProps['disabled']; /** * @deprecated - pass 'readOnly' prop directly to DateRangePicker */ readOnly?: RangePickerInputProps['readOnly']; }; allowedFilterTypes?: RangeFilterType[]; renderPopoverTrigger?: (...args: any) => JSX.Element; isTruncateMs?: boolean; filterValueSelectionModes?: DateLimitMode[]; filterRangeDisplayMode?: RangeDisplayMode; getPopupContainer?: (node: HTMLElement) => HTMLElement; }; /** * @deprecated use `DateRangePickerProps` */ export type Props = DateRangePickerProps; export type RelativeMode = 'PAST' | 'FUTURE' | 'SINCE'; export interface State { mode: string; value: DateRange; filter?: FilterDefinition; visibleAddonKey?: string | undefined; alignContentToTop?: boolean; } export type Texts = { [k in Translations]: string | ReactNode; } & { [k in TranslationsPlaceholders]: string; }; export type TranslationsPlaceholders = 'endDatePlaceholder' | 'startDatePlaceholder' | 'selectDate' | 'selectTime' | 'everyDay' | 'filterName'; export type Translations = 'custom' | 'today' | 'yesterday' | 'apply' | 'clear' | 'now' | 'emptyDateError' | 'last7Days' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'last3Months' | 'last6Months' | 'lastYear' | 'allTime' | 'tomorrow' | 'next7Days' | 'nextWeek' | 'nextMonth' | 'next3Months' | 'next6Months' | 'nextYear' | 'more' | 'relativeDateRange' | 'last' | 'before' | 'after' | 'since' | 'next' | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years' | 'timestampLast' | 'timestampNext' | 'timestampTill' | 'filter' | 'startDate' | 'endDate' | 'remove' | 'savedFiltersTrigger' | 'clearRange' | 'copyRange' | 'pasteRange' | 'range' | 'hour' | 'filterEnabled' | 'selectDateFilter' | 'datesFilter' | 'cancel' | 'nthDayOfMonth' | 'daysOf' | 'countedFrom' | 'addRule' | 'addTime' | 'change' | 'weekly' | 'monthly' | 'daily' | 'saveFilter' | 'selected' | 'selectDaysDescription' | 'selectAll' | 'unselectAll' | 'inverseSelection' | 'setTimeFor' | 'week' | 'month' | 'beginning' | 'ending' | 'maximumRanges' | 'clickToSelect'; export type WithTranslations = { texts: Texts; }; export type AddonType = { content: ReactNode; key: string; };