igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
380 lines (379 loc) • 13.6 kB
TypeScript
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, Injector, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, TemplateRef } from '@angular/core';
import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
import { IDateRangePickerResourceStrings } from '../core/i18n/date-range-picker-resources';
import { PlatformUtil } from '../core/utils';
import { PickerBaseDirective } from '../date-common/picker-base.directive';
import { IgxPickerActionsDirective } from '../date-common/picker-icons.common';
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
import { IgxInputDirective, IgxInputGroupType, IgxLabelDirective } from '../input-group/public_api';
import { IgxOverlayService, OverlaySettings } from '../services/public_api';
import { DateRange, IgxDateRangeInputsBaseComponent } from './date-range-picker-inputs.common';
import * as i0 from "@angular/core";
/**
* Provides the ability to select a range of dates from a calendar UI or editable inputs.
*
* @igxModule IgxDateRangeModule
*
* @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme
*
* @igxKeywords date, range, date range, date picker
*
* @igxGroup scheduling
*
* @remarks
* It displays the range selection in a single or two input fields.
* The default template displays a single *readonly* input field
* while projecting `igx-date-range-start` and `igx-date-range-end`
* displays two *editable* input fields.
*
* @example
* ```html
* <igx-date-range-picker mode="dropdown"></igx-date-range-picker>
* ```
*/
export declare class IgxDateRangePickerComponent extends PickerBaseDirective implements OnChanges, OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
protected platform: PlatformUtil;
private _injector;
private _cdr;
private _overlayService;
/**
* The number of displayed month views.
*
* @remarks
* Default is `2`.
*
* @example
* ```html
* <igx-date-range-picker [displayMonthsCount]="3"></igx-date-range-picker>
* ```
*/
displayMonthsCount: number;
/**
* Gets/Sets whether dates that are not part of the current month will be displayed.
*
* @remarks
* Default value is `false`.
*
* @example
* ```html
* <igx-date-range-picker [hideOutsideDays]="true"></igx-date-range-picker>
* ```
*/
hideOutsideDays: boolean;
/**
* A custom formatter function, applied on the selected or passed in date.
*
* @example
* ```typescript
* private dayFormatter = new Intl.DateTimeFormat("en", { weekday: "long" });
* private monthFormatter = new Intl.DateTimeFormat("en", { month: "long" });
*
* public formatter(date: Date): string {
* return `${this.dayFormatter.format(date)} - ${this.monthFormatter.format(date)} - ${date.getFullYear()}`;
* }
* ```
* ```html
* <igx-date-range-picker [formatter]="formatter"></igx-date-range-picker>
* ```
*/
formatter: (val: DateRange) => string;
/**
* Overrides the default text of the calendar dialog **Done** button.
*
* @remarks
* Defaults to the value from resource strings, `"Done"` for the built-in EN.
* The button will only show up in `dialog` mode.
*
* @example
* ```html
* <igx-date-range-picker doneButtonText="完了"></igx-date-range-picker>
* ```
*/
set doneButtonText(value: string);
get doneButtonText(): string;
/**
* Custom overlay settings that should be used to display the calendar.
*
* @example
* ```html
* <igx-date-range-picker [overlaySettings]="customOverlaySettings"></igx-date-range-picker>
* ```
*/
overlaySettings: OverlaySettings;
/**
* The format used when editable inputs are not focused.
*
* @remarks
* Uses Angular's DatePipe.
*
* @example
* ```html
* <igx-date-range-picker displayFormat="EE/M/yy"></igx-date-range-picker>
* ```
*
*/
displayFormat: string;
/**
* The expected user input format and placeholder.
*
* @example
* ```html
* <igx-date-range-picker inputFormat="dd/MM/yy"></igx-date-range-picker>
* ```
*/
inputFormat: string;
/**
* The minimum value in a valid range.
*
* @example
* <igx-date-range-picker [minValue]="minDate"></igx-date-range-picker>
*/
set minValue(value: Date | string);
get minValue(): Date | string;
/**
* The maximum value in a valid range.
*
* @example
* <igx-date-range-picker [maxValue]="maxDate"></igx-date-range-picker>
*/
set maxValue(value: Date | string);
get maxValue(): Date | string;
/**
* An accessor that sets the resource strings.
* By default it uses EN resources.
*/
set resourceStrings(value: IDateRangePickerResourceStrings);
/**
* An accessor that returns the resource strings.
*/
get resourceStrings(): IDateRangePickerResourceStrings;
/**
* Sets the `placeholder` for single-input `IgxDateRangePickerComponent`.
*
* @example
* ```html
* <igx-date-range-picker [placeholder]="'Choose your dates'"></igx-date-range-picker>
* ```
*/
placeholder: string;
/**
* Gets/Sets the container used for the popup element.
*
* @remarks
* `outlet` is an instance of `IgxOverlayOutletDirective` or an `ElementRef`.
* @example
* ```html
* <div igxOverlayOutlet #outlet="overlay-outlet"></div>
* //..
* <igx-date-range-picker [outlet]="outlet"></igx-date-range-picker>
* //..
* ```
*/
outlet: IgxOverlayOutletDirective | ElementRef<any>;
/**
* Show/hide week numbers
*
* @remarks
* Default is `false`.
*
* @example
* ```html
* <igx-date-range-picker [showWeekNumbers]="true"></igx-date-range-picker>
* ``
*/
showWeekNumbers: boolean;
/**
* Emitted when the picker's value changes. Used for two-way binding.
*
* @example
* ```html
* <igx-date-range-picker [(value)]="date"></igx-date-range-picker>
* ```
*/
valueChange: EventEmitter<DateRange>;
/** @hidden @internal */
cssClass: string;
private viewContainerRef;
/** @hidden @internal */
inputDirective: IgxInputDirective;
/** @hidden @internal */
projectedInputs: QueryList<IgxDateRangeInputsBaseComponent>;
label: IgxLabelDirective;
pickerActions: IgxPickerActionsDirective;
/** @hidden @internal */
dateSeparatorTemplate: TemplateRef<any>;
/** @hidden @internal */
get dateSeparator(): string;
/** @hidden @internal */
get appliedFormat(): string;
/**
* @example
* ```html
* <igx-date-range-picker locale="jp"></igx-date-range-picker>
* ```
*/
/**
* Gets the `locale` of the date-range-picker.
* If not set, defaults to application's locale.
*/
get locale(): string;
/**
* Sets the `locale` of the date-picker.
* Expects a valid BCP 47 language tag.
*/
set locale(value: string);
/** @hidden @internal */
get singleInputFormat(): string;
/**
* Gets calendar state.
*
* ```typescript
* let state = this.dateRange.collapsed;
* ```
*/
get collapsed(): boolean;
/**
* The currently selected value / range from the calendar
*
* @remarks
* The current value is of type `DateRange`
*
* @example
* ```typescript
* const newValue: DateRange = { start: new Date("2/2/2012"), end: new Date("3/3/2013")};
* this.dateRangePicker.value = newValue;
* ```
*/
get value(): DateRange | null;
set value(value: DateRange | null);
/** @hidden @internal */
get hasProjectedInputs(): boolean;
/** @hidden @internal */
get separatorClass(): string;
protected get toggleContainer(): HTMLElement | undefined;
private get required();
private get calendar();
private get dropdownOverlaySettings();
private get dialogOverlaySettings();
private _resourceStrings;
private _doneButtonText;
private _dateSeparator;
private _value;
private _overlayId;
private _ngControl;
private _statusChanges$;
private _calendar;
private _calendarContainer?;
private _positionSettings;
private _focusedInput;
private _overlaySubFilter;
private _dialogOverlaySettings;
private _dropDownOverlaySettings;
private onChangeCallback;
private onTouchCallback;
private onValidatorChange;
constructor(element: ElementRef, _localeId: string, platform: PlatformUtil, _injector: Injector, _cdr: ChangeDetectorRef, _overlayService: IgxOverlayService, _inputGroupType?: IgxInputGroupType);
/** @hidden @internal */
onKeyDown(event: KeyboardEvent): void;
/**
* Opens the date range picker's dropdown or dialog.
*
* @example
* ```html
* <igx-date-range-picker #dateRange></igx-date-range-picker>
*
* <button type="button" igxButton (click)="dateRange.open()">Open Dialog</button
* ```
*/
open(overlaySettings?: OverlaySettings): void;
/**
* Closes the date range picker's dropdown or dialog.
*
* @example
* ```html
* <igx-date-range-picker #dateRange></igx-date-range-picker>
*
* <button type="button" igxButton (click)="dateRange.close()">Close Dialog</button>
* ```
*/
close(): void;
/**
* Toggles the date range picker's dropdown or dialog
*
* @example
* ```html
* <igx-date-range-picker #dateRange></igx-date-range-picker>
*
* <button type="button" igxButton (click)="dateRange.toggle()">Toggle Dialog</button>
* ```
*/
toggle(overlaySettings?: OverlaySettings): void;
/**
* Selects a range of dates. If no `endDate` is passed, range is 1 day (only `startDate`)
*
* @example
* ```typescript
* public selectFiveDayRange() {
* const today = new Date();
* const inFiveDays = new Date(new Date().setDate(today.getDate() + 5));
* this.dateRange.select(today, inFiveDays);
* }
* ```
*/
select(startDate: Date, endDate?: Date): void;
/** @hidden @internal */
writeValue(value: DateRange): void;
/** @hidden @internal */
registerOnChange(fn: any): void;
/** @hidden @internal */
registerOnTouched(fn: any): void;
/** @hidden @internal */
validate(control: AbstractControl): ValidationErrors | null;
/** @hidden @internal */
registerOnValidatorChange?(fn: any): void;
/** @hidden @internal */
setDisabledState?(isDisabled: boolean): void;
/** @hidden */
ngOnInit(): void;
/** @hidden */
ngAfterViewInit(): void;
/** @hidden @internal */
ngOnChanges(changes: SimpleChanges): void;
/** @hidden @internal */
ngOnDestroy(): void;
/** @hidden @internal */
getEditElement(): HTMLInputElement;
protected onStatusChanged: () => void;
private setValidityState;
private get isTouchedOrDirty();
private get hasValidators();
private handleSelection;
private handleClosing;
private subscribeToOverlayEvents;
private updateValue;
private updateValidityOnBlur;
private updateDisabledState;
private setRequiredToInputs;
private parseMinValue;
private parseMaxValue;
private updateCalendar;
private swapEditorDates;
private valueInRange;
private extractRange;
private toRangeOfDates;
private subscribeToDateEditorEvents;
private attachOnTouched;
private cacheFocusedInput;
private configPositionStrategy;
private configOverlaySettings;
private initialSetValue;
private updateInputs;
private updateDisplayFormat;
private updateInputFormat;
private updateInputLocale;
private _initializeCalendarContainer;
static ɵfac: i0.ɵɵFactoryDeclaration<IgxDateRangePickerComponent, [null, null, null, null, null, null, { optional: true; }]>;
static ɵcmp: i0.ɵɵComponentDeclaration<IgxDateRangePickerComponent, "igx-date-range-picker", never, { "displayMonthsCount": { "alias": "displayMonthsCount"; "required": false; }; "hideOutsideDays": { "alias": "hideOutsideDays"; "required": false; }; "formatter": { "alias": "formatter"; "required": false; }; "doneButtonText": { "alias": "doneButtonText"; "required": false; }; "overlaySettings": { "alias": "overlaySettings"; "required": false; }; "displayFormat": { "alias": "displayFormat"; "required": false; }; "inputFormat": { "alias": "inputFormat"; "required": false; }; "minValue": { "alias": "minValue"; "required": false; }; "maxValue": { "alias": "maxValue"; "required": false; }; "resourceStrings": { "alias": "resourceStrings"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "outlet": { "alias": "outlet"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, ["label", "pickerActions", "dateSeparatorTemplate", "projectedInputs"], ["igx-date-single", "igx-date-range-start", "igx-date-range-end", "[igxLabel]", "igx-prefix,[igxPrefix]", "igx-suffix,[igxSuffix]", "igx-hint,[igxHint]"], true, never>;
static ngAcceptInputType_hideOutsideDays: unknown;
static ngAcceptInputType_showWeekNumbers: unknown;
}