@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
JavaScript
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