@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
TypeScript
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>;
}