UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

50 lines 6.1 kB
import { Pipe } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./i18n.service"; export class DsfrI18nPipe { constructor(i18nService, cdr) { this.i18nService = i18nService; this.cdr = cdr; this.value = ''; this.lastKey = null; this.langChangeSub$ = null; } transform(jsonPath) { if (!jsonPath || jsonPath.length === 0) { return jsonPath; } // Utiliser le cache si pas de changement de langue if (this.lastKey === jsonPath) { return this.value; } this.lastKey = jsonPath; // Maj du cache this.dispose(); // necessaire dans le cas de pipe impur this.langChangeSub$ = this.i18nService.completeLangChange$.subscribe(() => { if (this.lastKey) { this.value = this.i18nService.t(this.lastKey); this.cdr.markForCheck(); // pour composants OnPush } }); return this.value; } ngOnDestroy() { this.dispose(); } dispose() { this.langChangeSub$?.unsubscribe(); // Note : Il est important de nettoyer la référence fournit dans langChangeSub$ // RxJS garde une référence au callback dans sa gestion interne, ce qui peut empêcher le nettoyage en mémoire. this.langChangeSub$ = null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrI18nPipe, deps: [{ token: i1.DsfrI18nService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DsfrI18nPipe, isStandalone: true, name: "dsfrI18n", pure: false }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrI18nPipe, decorators: [{ type: Pipe, args: [{ name: 'dsfrI18n', standalone: true, pure: false, }] }], ctorParameters: () => [{ type: i1.DsfrI18nService }, { type: i0.ChangeDetectorRef }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC9pMThuL2kxOG4ucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdDLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQVNsRixNQUFNLE9BQU8sWUFBWTtJQUt2QixZQUNVLFdBQTRCLEVBQzVCLEdBQXNCO1FBRHRCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQU5oQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQXdCLElBQUksQ0FBQztJQUt4QyxDQUFDO0lBRUosU0FBUyxDQUFDLFFBQWdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRUQsbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsZUFBZTtRQUV4QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyx1Q0FBdUM7UUFFdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMseUJBQXlCO1lBQ3BELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbkMsK0VBQStFO1FBQy9FLDhHQUE4RztRQUM5RyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDOytHQTNDVSxZQUFZOzZHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBTHhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsS0FBSztpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3ksIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRHNmckkxOG5TZXJ2aWNlIH0gZnJvbSAnLi9pMThuLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdkc2ZySTE4bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHB1cmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBEc2ZySTE4blBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICB2YWx1ZTogc3RyaW5nID0gJyc7XG4gIGxhc3RLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBsYW5nQ2hhbmdlU3ViJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpMThuU2VydmljZTogRHNmckkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIHRyYW5zZm9ybShqc29uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWpzb25QYXRoIHx8IGpzb25QYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGpzb25QYXRoO1xuICAgIH1cblxuICAgIC8vIFV0aWxpc2VyIGxlIGNhY2hlIHNpIHBhcyBkZSBjaGFuZ2VtZW50IGRlIGxhbmd1ZVxuICAgIGlmICh0aGlzLmxhc3RLZXkgPT09IGpzb25QYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RLZXkgPSBqc29uUGF0aDsgLy8gTWFqIGR1IGNhY2hlXG5cbiAgICB0aGlzLmRpc3Bvc2UoKTsgLy8gbmVjZXNzYWlyZSBkYW5zIGxlIGNhcyBkZSBwaXBlIGltcHVyXG5cbiAgICB0aGlzLmxhbmdDaGFuZ2VTdWIkID0gdGhpcy5pMThuU2VydmljZS5jb21wbGV0ZUxhbmdDaGFuZ2UkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sYXN0S2V5KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmkxOG5TZXJ2aWNlLnQodGhpcy5sYXN0S2V5KTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IC8vIHBvdXIgY29tcG9zYW50cyBPblB1c2hcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5sYW5nQ2hhbmdlU3ViJD8udW5zdWJzY3JpYmUoKTtcbiAgICAvLyBOb3RlIDogSWwgZXN0IGltcG9ydGFudCBkZSBuZXR0b3llciBsYSByw6lmw6lyZW5jZSBmb3Vybml0IGRhbnMgbGFuZ0NoYW5nZVN1YiRcbiAgICAvLyBSeEpTIGdhcmRlIHVuZSByw6lmw6lyZW5jZSBhdSBjYWxsYmFjayBkYW5zIHNhIGdlc3Rpb24gaW50ZXJuZSwgY2UgcXVpIHBldXQgZW1ww6pjaGVyIGxlIG5ldHRveWFnZSBlbiBtw6ltb2lyZS5cbiAgICB0aGlzLmxhbmdDaGFuZ2VTdWIkID0gbnVsbDtcbiAgfVxufVxuIl19