UNPKG

@edugouvfr/ngx-dsfr-ext

Version:

NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)

201 lines (200 loc) 8.08 kB
import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; import { AbstractControl, ValidationErrors, Validator } from '@angular/forms'; import { DefaultControlComponent, DsfrI18nService, DsfrSeverity, LangService, LoggerService } from '@edugouvfr/ngx-dsfr'; import { DsfrCalendarComponent } from '../calendar/calendar.component'; import { DsfrDateEvent } from '../shared/models/date-event'; import * as i0 from "@angular/core"; /** * Implémente la saisie d'une date via un input ou via un calendrier affichant les jours et les mois. * Validator est implémenté uniquement par rapport à min et max * @since 0.10 * @author pfontanet */ export declare class DsfrDatePickerComponent extends DefaultControlComponent<string> implements AfterViewInit, Validator, OnDestroy, OnChanges { private elementRef; private i18n; private langService; private logger; /** Message d'information lié au composant */ message: string | undefined; /** Représente la sévérité du message. */ severity: DsfrSeverity; /** * Indique si la date est obligatoire. */ required: boolean; /** * Indique si le masque de saisie doit être affiché ou non. */ showMask: boolean; /** * Cache le label visuellement en le laissant disponible aux lecteurs d'écran. */ labelSrOnly: boolean; /** * Indique la valeur de la propriété css z-index de la modale du composant. */ zIndex: number | undefined; /** Attacher l'élément de liste déroulante au 'body' ou a un container (réf. vers un élément #div ou nom de la classe du parent) */ appendTo: 'body' | HTMLElement | string | undefined; /** Emission de la date.*/ dateChange: EventEmitter<DsfrDateEvent>; calendar: DsfrCalendarComponent; comboBox: ElementRef; protected modal: ElementRef<HTMLDivElement>; protected cancelBtn: ElementRef<HTMLButtonElement>; protected currentMonthIndex: number; protected currentYear: number; protected translatedMonthAbbreviations: string[]; protected translatedMonths: string[]; protected dialogTitle: string; protected modalLabel: string; /** * Placeholder par défaut de l'input. Dépend de la langue 'jj/mm/aaaa' ou 'mm/dd/yyyy' */ protected placeholder: string; /** * Id aléatoire, unique, de la modale (le calendrier) */ protected modalId: string; protected isOpen: boolean; protected buttonLabelChoose: string; private dialogTriggerBtnNode; private prevCodeLang; private buttonLabelChange; private dayLabels; private monthLabels; private _min; private _max; /** @internal */ constructor(elementRef: ElementRef, i18n: DsfrI18nService, langService: LangService, logger: LoggerService); /** * Compatibilité ascendante avec l'ancien `datepicker`. * @deprecated since 0.10 Utiliser `message` et `severity` à la place. */ get error(): string | undefined; /** * Compatibilité ascendante avec l'ancien `datepicker`. * @deprecated since 0.10 Utiliser `message` et `severity` à la place. */ get valid(): string | undefined; /** * @return Le code de la langue en cours */ get codeLang(): string; /** * @internal */ get min(): string | undefined; /** * @internal */ get max(): string | undefined; protected get isEnglishLocale(): boolean; /** * Compatibilité ascendante avec l'ancien `datepicker`. * @deprecated since 0.10 Utiliser `message` et `severity` à la place. */ set error(message: string | undefined); /** * Compatibilité ascendante avec l'ancien `datepicker`. * @deprecated since 0.10 Utiliser `message` et `severity` à la place. */ set valid(message: string | undefined); /** * Date minimale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ. * Ce paramètre peut être utilisé seul ou avec la propriété max. */ set min(value: string | undefined); /** * Date maximale inclue. Doit être au format IS0-8601 : AAAA-MM-JJ. * Ce paramètre peut être utilisé seul ou avec la propriété min. */ set max(value: string | undefined); ngOnChanges(simpleChanges: SimpleChanges): void; /** @internal */ ngOnDestroy(): void; /** @internal */ ngAfterViewInit(): void; /** * @internal * Interface Validator */ validate(control: AbstractControl): ValidationErrors | null; /** * Mise a jour du titre lors de la navigation dans le calendrier * @internal */ onUpdateCalendarView(date: Date): void; writeValue(value: string): void; /** * Gère le clic en dehors de la modale */ protected onCalendarOutside(): void; /** * Gère le changement de valeur de l'input */ protected onInputChange(): void; /********************** * Event Handlers **********************/ protected handleTriggerButtonClick(event: Event): void; protected handleTriggerButtonKeydown(event: KeyboardEvent): void; protected handleCancelButton(event: Event): void; protected handleModalKeydown(keyEvent: KeyboardEvent): void; protected onCalendarVisible(): void; protected handleDataChange(dateEvent: DsfrDateEvent): void; /** * Met à jour le titre de la dialog (visuellement caché) pour les besoins d'accessibilité. */ protected updateDialogTitle(): void; /** * Gère la validation interne de la date pour les critères de date min et date max. * Retourne `true` en cas d'erreur. */ private handleInternalValidation; /** * Changement de la valeur de l'input et formatage dans la langue courante * @param value Valeur au format ISO ou dans la langue courante */ private reformatValue; /** * Gestion du changement de langue dans le composant. * * @param code Code de la locale à prendre en compte */ private onLangChange; /** * Ouvre la modale. */ private open; /** * Ferme la modale. * * Positionne le focus sur le bouton d'ouverture de la modale si besoin. * * @param focusTriggerBtn Permet de savoir si le focus doit être donné au bouton d'ouverture de la modale */ private close; /** * Mets à jour la valeur du composant (donc normalement textboxNode.value) et émets un événement * @param value * @private */ private setNewValue; /** * Méthode invoquée à la sortie de l'input text. Formate l'input et affecte la propriété 'aria-label' du bouton de * sélection du calendrier. A noter que, si la date est exacte, 'aria-label' contient la date, ex : * "Changer la date, Lundi Mai 27, 2024" ou ="Change Date, Monday July 1, 2024" * - i18n : le code de parsing est remplacé par un appel à DateUtils */ private setDateForTriggerButtonLabel; private updateMonthTranslations; private isValidIso; /** * Mise à jour du mois et de l'année pour le titre de la modale. */ private updateMonthIndexAndYear; static ɵfac: i0.ɵɵFactoryDeclaration<DsfrDatePickerComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DsfrDatePickerComponent, "dsfr-ext-datepicker, dsfrx-datepicker", never, { "message": { "alias": "message"; "required": false; }; "severity": { "alias": "severity"; "required": false; }; "required": { "alias": "required"; "required": false; }; "showMask": { "alias": "showMask"; "required": false; }; "labelSrOnly": { "alias": "labelSrOnly"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "error": { "alias": "error"; "required": false; }; "valid": { "alias": "valid"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; }, { "dateChange": "dateChange"; }, never, ["[label]"], true, never>; }