@lucca-front/ng 8.2.0-rc.2 → 8.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export * from './lib';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy90aXRsZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XHJcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './title-translate.service';
2
+ export * from './title.module';
3
+ export * from './title.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy90aXRsZS9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90aXRsZS10cmFuc2xhdGUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGl0bGUubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi90aXRsZS5zZXJ2aWNlJztcclxuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken('LU_TITLE_TRANSLATE_SERVICE');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtdHJhbnNsYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy90aXRsZS9zcmMvbGliL3RpdGxlLXRyYW5zbGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxjQUFjLENBQTJCLDRCQUE0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IExVX1RJVExFX1RSQU5TTEFURV9TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuPElMdVRpdGxlVHJhbnNsYXRlU2VydmljZT4oJ0xVX1RJVExFX1RSQU5TTEFURV9TRVJWSUNFJyk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMdVRpdGxlVHJhbnNsYXRlU2VydmljZSB7XHJcblx0dHJhbnNsYXRlKGtleTogc3RyaW5nLCBhcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmc7XHJcbn1cclxuIl19
@@ -0,0 +1,17 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RouterModule } from '@angular/router';
3
+ import { LuTitleService } from './title.service';
4
+ import * as i0 from "@angular/core";
5
+ export class LuTitleModule {
6
+ }
7
+ LuTitleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ LuTitleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, imports: [RouterModule] });
9
+ LuTitleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, providers: [LuTitleService], imports: [[RouterModule]] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ imports: [RouterModule],
14
+ providers: [LuTitleService],
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmcvdGl0bGUvc3JjL2xpYi90aXRsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQU1qRCxNQUFNLE9BQU8sYUFBYTs7MEdBQWIsYUFBYTsyR0FBYixhQUFhLFlBSGYsWUFBWTsyR0FHVixhQUFhLGFBRmQsQ0FBQyxjQUFjLENBQUMsWUFEbEIsQ0FBQyxZQUFZLENBQUM7MkZBR1gsYUFBYTtrQkFKekIsUUFBUTttQkFBQztvQkFDVCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQztpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBMdVRpdGxlU2VydmljZSB9IGZyb20gJy4vdGl0bGUuc2VydmljZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG5cdGltcG9ydHM6IFtSb3V0ZXJNb2R1bGVdLFxyXG5cdHByb3ZpZGVyczogW0x1VGl0bGVTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEx1VGl0bGVNb2R1bGUge31cclxuIl19
@@ -0,0 +1,48 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ActivationEnd } from '@angular/router';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';
5
+ import { LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ import * as i2 from "@angular/platform-browser";
9
+ export const TitleSeparator = ' – ';
10
+ export class LuTitleService {
11
+ constructor(router, title, translateService) {
12
+ this.router = router;
13
+ this.title = title;
14
+ this.translateService = translateService;
15
+ this.titleSubject = new BehaviorSubject('Lucca');
16
+ this.title$ = this.titleSubject.asObservable();
17
+ }
18
+ init(applicationNameTranslationKey) {
19
+ this.router.events
20
+ .pipe(filter((event) => {
21
+ return event instanceof ActivationEnd && event.snapshot.children.length === 0;
22
+ }), map((event) => getPageTitleParts(event.snapshot)), map((titleParts) => uniqTitle(titleParts)), map((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))), map((titles) => [...titles, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x).join(TitleSeparator)), distinctUntilChanged(), tap((title) => this.titleSubject.next(title)))
23
+ .subscribe();
24
+ this.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();
25
+ }
26
+ prependTitle(title) {
27
+ this.titleSubject.next(`${title}${TitleSeparator}${this.titleSubject.value}`);
28
+ }
29
+ }
30
+ LuTitleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService, deps: [{ token: i1.Router }, { token: i2.Title }, { token: LU_TITLE_TRANSLATE_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable });
31
+ LuTitleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService, decorators: [{
33
+ type: Injectable
34
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Title }, { type: undefined, decorators: [{
35
+ type: Inject,
36
+ args: [LU_TITLE_TRANSLATE_SERVICE]
37
+ }] }]; } });
38
+ function getPageTitleParts(snapshot) {
39
+ const pageTitle = {
40
+ title: (snapshot.data?.['title'] || ''),
41
+ params: snapshot.params,
42
+ };
43
+ return snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];
44
+ }
45
+ function uniqTitle(titleParts) {
46
+ return titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nL3RpdGxlL3NyYy9saWIvdGl0bGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTBCLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUE0QiwwQkFBMEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBR2pHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFHcEMsTUFBTSxPQUFPLGNBQWM7SUFJMUIsWUFBb0IsTUFBYyxFQUFVLEtBQVksRUFBOEMsZ0JBQTBDO1FBQTVILFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQThDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMEI7UUFIeEksaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxPQUFPLENBQUMsQ0FBQztRQUM1RCxXQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV5RyxDQUFDO0lBRXBKLElBQUksQ0FBQyw2QkFBcUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2hCLElBQUksQ0FDSixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQixPQUFPLEtBQUssWUFBWSxhQUFhLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDaEUsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDMUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQzlJLEdBQUcsQ0FBQyxDQUFDLE1BQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDaEssb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM3QzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQzs7MkdBMUJXLGNBQWMsNkRBSXdDLDBCQUEwQjsrR0FKaEYsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVOzswQkFLaUQsTUFBTTsyQkFBQywwQkFBMEI7O0FBeUI3RixTQUFTLGlCQUFpQixDQUFDLFFBQWdDO0lBQzFELE1BQU0sU0FBUyxHQUFjO1FBQzVCLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQVc7UUFDakQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0tBQ3ZCLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLFVBQTRCO0lBQzlDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzFILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQWN0aXZhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJTHVUaXRsZVRyYW5zbGF0ZVNlcnZpY2UsIExVX1RJVExFX1RSQU5TTEFURV9TRVJWSUNFIH0gZnJvbSAnLi90aXRsZS10cmFuc2xhdGUuc2VydmljZSc7XHJcblxyXG5leHBvcnQgdHlwZSBQYWdlVGl0bGUgPSB7IHRpdGxlOiBzdHJpbmc7IHBhcmFtczogeyBbcGFyYW06IHN0cmluZ106IHN0cmluZyB9IH07XHJcbmV4cG9ydCBjb25zdCBUaXRsZVNlcGFyYXRvciA9ICcg4oCTICc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBMdVRpdGxlU2VydmljZSB7XHJcblx0cHJpdmF0ZSB0aXRsZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ0x1Y2NhJyk7XHJcblx0dGl0bGUkID0gdGhpcy50aXRsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgdGl0bGU6IFRpdGxlLCBASW5qZWN0KExVX1RJVExFX1RSQU5TTEFURV9TRVJWSUNFKSBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IElMdVRpdGxlVHJhbnNsYXRlU2VydmljZSkge31cclxuXHJcblx0aW5pdChhcHBsaWNhdGlvbk5hbWVUcmFuc2xhdGlvbktleTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnJvdXRlci5ldmVudHNcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0ZmlsdGVyKChldmVudCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGV2ZW50IGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCAmJiBldmVudC5zbmFwc2hvdC5jaGlsZHJlbi5sZW5ndGggPT09IDA7XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0bWFwKChldmVudDogQWN0aXZhdGlvbkVuZCkgPT4gZ2V0UGFnZVRpdGxlUGFydHMoZXZlbnQuc25hcHNob3QpKSxcclxuXHRcdFx0XHRtYXAoKHRpdGxlUGFydHMpID0+IHVuaXFUaXRsZSh0aXRsZVBhcnRzKSksXHJcblx0XHRcdFx0bWFwKCh0aXRsZVBhcnRzKSA9PiB0aXRsZVBhcnRzLmZpbHRlcigoeyB0aXRsZSB9KSA9PiB0aXRsZSAhPT0gJycpLm1hcCgoeyB0aXRsZSwgcGFyYW1zIH0pID0+IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUodGl0bGUsIHBhcmFtcykpKSxcclxuXHRcdFx0XHRtYXAoKHRpdGxlczogQXJyYXk8c3RyaW5nPikgPT4gWy4uLnRpdGxlcywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShhcHBsaWNhdGlvbk5hbWVUcmFuc2xhdGlvbktleSwge30pLCAnTHVjY2EnXS5maWx0ZXIoKHgpID0+ICEheCkuam9pbihUaXRsZVNlcGFyYXRvcikpLFxyXG5cdFx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcblx0XHRcdFx0dGFwKCh0aXRsZSkgPT4gdGhpcy50aXRsZVN1YmplY3QubmV4dCh0aXRsZSkpLFxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHR0aGlzLnRpdGxlJC5waXBlKHRhcCgodGl0bGUpID0+IHRoaXMudGl0bGUuc2V0VGl0bGUodGl0bGUpKSkuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRwcmVwZW5kVGl0bGUodGl0bGU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50aXRsZVN1YmplY3QubmV4dChgJHt0aXRsZX0ke1RpdGxlU2VwYXJhdG9yfSR7dGhpcy50aXRsZVN1YmplY3QudmFsdWV9YCk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQYWdlVGl0bGVQYXJ0cyhzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IEFycmF5PFBhZ2VUaXRsZT4ge1xyXG5cdGNvbnN0IHBhZ2VUaXRsZTogUGFnZVRpdGxlID0ge1xyXG5cdFx0dGl0bGU6IChzbmFwc2hvdC5kYXRhPy5bJ3RpdGxlJ10gfHwgJycpIGFzIHN0cmluZyxcclxuXHRcdHBhcmFtczogc25hcHNob3QucGFyYW1zLFxyXG5cdH07XHJcblx0cmV0dXJuIHNuYXBzaG90LnBhcmVudCA/IFtwYWdlVGl0bGUsIC4uLmdldFBhZ2VUaXRsZVBhcnRzKHNuYXBzaG90LnBhcmVudCldIDogW3BhZ2VUaXRsZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVuaXFUaXRsZSh0aXRsZVBhcnRzOiBBcnJheTxQYWdlVGl0bGU+KTogQXJyYXk8UGFnZVRpdGxlPiB7XHJcblx0cmV0dXJuIHRpdGxlUGFydHMuZmlsdGVyKCh7IHRpdGxlIH0sIGluZGV4KSA9PiB0aXRsZVBhcnRzLmZpbmRJbmRleCgocGFnZVRpdGxlKSA9PiBwYWdlVGl0bGUudGl0bGUgPT09IHRpdGxlKSA9PT0gaW5kZXgpO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVjY2EtZnJvbnQtbmctdGl0bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy90aXRsZS9zcmMvbHVjY2EtZnJvbnQtbmctdGl0bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './index';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL25nL3RpdGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XHJcbiJdfQ==
@@ -0,0 +1,72 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/router';
4
+ import { ActivationEnd, RouterModule } from '@angular/router';
5
+ import { BehaviorSubject } from 'rxjs';
6
+ import { filter, map, distinctUntilChanged, tap } from 'rxjs/operators';
7
+ import * as i2 from '@angular/platform-browser';
8
+
9
+ const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken('LU_TITLE_TRANSLATE_SERVICE');
10
+
11
+ const TitleSeparator = ' – ';
12
+ class LuTitleService {
13
+ constructor(router, title, translateService) {
14
+ this.router = router;
15
+ this.title = title;
16
+ this.translateService = translateService;
17
+ this.titleSubject = new BehaviorSubject('Lucca');
18
+ this.title$ = this.titleSubject.asObservable();
19
+ }
20
+ init(applicationNameTranslationKey) {
21
+ this.router.events
22
+ .pipe(filter((event) => {
23
+ return event instanceof ActivationEnd && event.snapshot.children.length === 0;
24
+ }), map((event) => getPageTitleParts(event.snapshot)), map((titleParts) => uniqTitle(titleParts)), map((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))), map((titles) => [...titles, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x).join(TitleSeparator)), distinctUntilChanged(), tap((title) => this.titleSubject.next(title)))
25
+ .subscribe();
26
+ this.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();
27
+ }
28
+ prependTitle(title) {
29
+ this.titleSubject.next(`${title}${TitleSeparator}${this.titleSubject.value}`);
30
+ }
31
+ }
32
+ LuTitleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService, deps: [{ token: i1.Router }, { token: i2.Title }, { token: LU_TITLE_TRANSLATE_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable });
33
+ LuTitleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService, decorators: [{
35
+ type: Injectable
36
+ }], ctorParameters: function () {
37
+ return [{ type: i1.Router }, { type: i2.Title }, { type: undefined, decorators: [{
38
+ type: Inject,
39
+ args: [LU_TITLE_TRANSLATE_SERVICE]
40
+ }] }];
41
+ } });
42
+ function getPageTitleParts(snapshot) {
43
+ var _a;
44
+ const pageTitle = {
45
+ title: (((_a = snapshot.data) === null || _a === void 0 ? void 0 : _a['title']) || ''),
46
+ params: snapshot.params,
47
+ };
48
+ return snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];
49
+ }
50
+ function uniqTitle(titleParts) {
51
+ return titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);
52
+ }
53
+
54
+ class LuTitleModule {
55
+ }
56
+ LuTitleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
57
+ LuTitleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, imports: [RouterModule] });
58
+ LuTitleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, providers: [LuTitleService], imports: [[RouterModule]] });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, decorators: [{
60
+ type: NgModule,
61
+ args: [{
62
+ imports: [RouterModule],
63
+ providers: [LuTitleService],
64
+ }]
65
+ }] });
66
+
67
+ /**
68
+ * Generated bundle index. Do not edit.
69
+ */
70
+
71
+ export { LU_TITLE_TRANSLATE_SERVICE, LuTitleModule, LuTitleService, TitleSeparator };
72
+ //# sourceMappingURL=lucca-front-ng-title.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/src/lib/title-translate.service.ts","../../../packages/ng/title/src/lib/title.service.ts","../../../packages/ng/title/src/lib/title.module.ts","../../../packages/ng/title/src/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\r\n\r\nexport interface ILuTitleTranslateService {\r\n\ttranslate(key: string, args?: Record<string, unknown>): string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\r\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\r\n\r\nexport type PageTitle = { title: string; params: { [param: string]: string } };\r\nexport const TitleSeparator = ' – ';\r\n\r\n@Injectable()\r\nexport class LuTitleService {\r\n\tprivate titleSubject = new BehaviorSubject<string>('Lucca');\r\n\ttitle$ = this.titleSubject.asObservable();\r\n\r\n\tconstructor(private router: Router, private title: Title, @Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService) {}\r\n\r\n\tinit(applicationNameTranslationKey: string) {\r\n\t\tthis.router.events\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((event) => {\r\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\r\n\t\t\t\t}),\r\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\r\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\r\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\r\n\t\t\t\tmap((titles: Array<string>) => [...titles, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x).join(TitleSeparator)),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap((title) => this.titleSubject.next(title)),\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\r\n\t}\r\n\r\n\tprependTitle(title: string) {\r\n\t\tthis.titleSubject.next(`${title}${TitleSeparator}${this.titleSubject.value}`);\r\n\t}\r\n}\r\n\r\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\r\n\tconst pageTitle: PageTitle = {\r\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\r\n\t\tparams: snapshot.params,\r\n\t};\r\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\r\n}\r\n\r\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\r\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LuTitleService } from './title.service';\r\n\r\n@NgModule({\r\n\timports: [RouterModule],\r\n\tproviders: [LuTitleService],\r\n})\r\nexport class LuTitleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAEa,0BAA0B,GAAG,IAAI,cAAc,CAA2B,4BAA4B;;MCMtG,cAAc,GAAG,MAAM;MAGvB,cAAc;IAI1B,YAAoB,MAAc,EAAU,KAAY,EAA8C,gBAA0C;QAA5H,WAAM,GAAN,MAAM,CAAQ;QAAU,UAAK,GAAL,KAAK,CAAO;QAA8C,qBAAgB,GAAhB,gBAAgB,CAA0B;QAHxI,iBAAY,GAAG,IAAI,eAAe,CAAS,OAAO,CAAC,CAAC;QAC5D,WAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KAE0G;IAEpJ,IAAI,CAAC,6BAAqC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM;aAChB,IAAI,CACJ,MAAM,CAAC,CAAC,KAAK;YACZ,OAAO,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;SAC9E,CAAC,EACF,GAAG,CAAC,CAAC,KAAoB,KAAK,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAChE,GAAG,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,EAC1C,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAC9I,GAAG,CAAC,CAAC,MAAqB,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,6BAA6B,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAChK,oBAAoB,EAAE,EACtB,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7C;aACA,SAAS,EAAE,CAAC;QAEd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;KACzE;IAED,YAAY,CAAC,KAAa;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;KAC9E;;2GA1BW,cAAc,6DAIwC,0BAA0B;+GAJhF,cAAc;2FAAd,cAAc;kBAD1B,UAAU;;;8BAKiD,MAAM;+BAAC,0BAA0B;;;AAyB7F,SAAS,iBAAiB,CAAC,QAAgC;;IAC1D,MAAM,SAAS,GAAc;QAC5B,KAAK,GAAG,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAG,OAAO,CAAC,KAAI,EAAE,CAAW;QACjD,MAAM,EAAE,QAAQ,CAAC,MAAM;KACvB,CAAC;IACF,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,SAAS,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,SAAS,CAAC,UAA4B;IAC9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,KAAK,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;AAC1H;;MC1Ca,aAAa;;0GAAb,aAAa;2GAAb,aAAa,YAHf,YAAY;2GAGV,aAAa,aAFd,CAAC,cAAc,CAAC,YADlB,CAAC,YAAY,CAAC;2FAGX,aAAa;kBAJzB,QAAQ;mBAAC;oBACT,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,SAAS,EAAE,CAAC,cAAc,CAAC;iBAC3B;;;ACPD;;;;;;"}
@@ -0,0 +1,69 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
3
+ import * as i1 from '@angular/router';
4
+ import { ActivationEnd, RouterModule } from '@angular/router';
5
+ import { BehaviorSubject } from 'rxjs';
6
+ import { filter, map, distinctUntilChanged, tap } from 'rxjs/operators';
7
+ import * as i2 from '@angular/platform-browser';
8
+
9
+ const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken('LU_TITLE_TRANSLATE_SERVICE');
10
+
11
+ const TitleSeparator = ' – ';
12
+ class LuTitleService {
13
+ constructor(router, title, translateService) {
14
+ this.router = router;
15
+ this.title = title;
16
+ this.translateService = translateService;
17
+ this.titleSubject = new BehaviorSubject('Lucca');
18
+ this.title$ = this.titleSubject.asObservable();
19
+ }
20
+ init(applicationNameTranslationKey) {
21
+ this.router.events
22
+ .pipe(filter((event) => {
23
+ return event instanceof ActivationEnd && event.snapshot.children.length === 0;
24
+ }), map((event) => getPageTitleParts(event.snapshot)), map((titleParts) => uniqTitle(titleParts)), map((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))), map((titles) => [...titles, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x).join(TitleSeparator)), distinctUntilChanged(), tap((title) => this.titleSubject.next(title)))
25
+ .subscribe();
26
+ this.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();
27
+ }
28
+ prependTitle(title) {
29
+ this.titleSubject.next(`${title}${TitleSeparator}${this.titleSubject.value}`);
30
+ }
31
+ }
32
+ LuTitleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService, deps: [{ token: i1.Router }, { token: i2.Title }, { token: LU_TITLE_TRANSLATE_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable });
33
+ LuTitleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleService, decorators: [{
35
+ type: Injectable
36
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Title }, { type: undefined, decorators: [{
37
+ type: Inject,
38
+ args: [LU_TITLE_TRANSLATE_SERVICE]
39
+ }] }]; } });
40
+ function getPageTitleParts(snapshot) {
41
+ const pageTitle = {
42
+ title: (snapshot.data?.['title'] || ''),
43
+ params: snapshot.params,
44
+ };
45
+ return snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];
46
+ }
47
+ function uniqTitle(titleParts) {
48
+ return titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);
49
+ }
50
+
51
+ class LuTitleModule {
52
+ }
53
+ LuTitleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
54
+ LuTitleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, imports: [RouterModule] });
55
+ LuTitleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, providers: [LuTitleService], imports: [[RouterModule]] });
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: LuTitleModule, decorators: [{
57
+ type: NgModule,
58
+ args: [{
59
+ imports: [RouterModule],
60
+ providers: [LuTitleService],
61
+ }]
62
+ }] });
63
+
64
+ /**
65
+ * Generated bundle index. Do not edit.
66
+ */
67
+
68
+ export { LU_TITLE_TRANSLATE_SERVICE, LuTitleModule, LuTitleService, TitleSeparator };
69
+ //# sourceMappingURL=lucca-front-ng-title.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/src/lib/title-translate.service.ts","../../../packages/ng/title/src/lib/title.service.ts","../../../packages/ng/title/src/lib/title.module.ts","../../../packages/ng/title/src/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\r\n\r\nexport interface ILuTitleTranslateService {\r\n\ttranslate(key: string, args?: Record<string, unknown>): string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\r\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\r\n\r\nexport type PageTitle = { title: string; params: { [param: string]: string } };\r\nexport const TitleSeparator = ' – ';\r\n\r\n@Injectable()\r\nexport class LuTitleService {\r\n\tprivate titleSubject = new BehaviorSubject<string>('Lucca');\r\n\ttitle$ = this.titleSubject.asObservable();\r\n\r\n\tconstructor(private router: Router, private title: Title, @Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService) {}\r\n\r\n\tinit(applicationNameTranslationKey: string) {\r\n\t\tthis.router.events\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((event) => {\r\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\r\n\t\t\t\t}),\r\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\r\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\r\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\r\n\t\t\t\tmap((titles: Array<string>) => [...titles, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x).join(TitleSeparator)),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap((title) => this.titleSubject.next(title)),\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\r\n\t}\r\n\r\n\tprependTitle(title: string) {\r\n\t\tthis.titleSubject.next(`${title}${TitleSeparator}${this.titleSubject.value}`);\r\n\t}\r\n}\r\n\r\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\r\n\tconst pageTitle: PageTitle = {\r\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\r\n\t\tparams: snapshot.params,\r\n\t};\r\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\r\n}\r\n\r\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\r\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LuTitleService } from './title.service';\r\n\r\n@NgModule({\r\n\timports: [RouterModule],\r\n\tproviders: [LuTitleService],\r\n})\r\nexport class LuTitleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucca-front/ng",
3
- "version": "8.2.0-rc.2",
3
+ "version": "8.2.0",
4
4
  "description": "A library of icons made by the team @Lucca",
5
5
  "repository": {
6
6
  "type": "git",
@@ -214,6 +214,14 @@
214
214
  "node": "./fesm2015/lucca-front-ng-sidepanel.mjs",
215
215
  "default": "./fesm2020/lucca-front-ng-sidepanel.mjs"
216
216
  },
217
+ "./title": {
218
+ "types": "./title/lucca-front-ng-title.d.ts",
219
+ "esm2020": "./esm2020/title/lucca-front-ng-title.mjs",
220
+ "es2020": "./fesm2020/lucca-front-ng-title.mjs",
221
+ "es2015": "./fesm2015/lucca-front-ng-title.mjs",
222
+ "node": "./fesm2015/lucca-front-ng-title.mjs",
223
+ "default": "./fesm2020/lucca-front-ng-title.mjs"
224
+ },
217
225
  "./toast": {
218
226
  "types": "./toast/lucca-front-ng-toast.d.ts",
219
227
  "esm2020": "./esm2020/toast/lucca-front-ng-toast.mjs",
@@ -0,0 +1,100 @@
1
+ # Page titles
2
+
3
+ ## Usage
4
+
5
+ Add `title` properties in your routes config:
6
+
7
+ ```typescript
8
+ const routes: Routes = [
9
+ {
10
+ path: '',
11
+ data: {
12
+ title: 'Parent title',
13
+ },
14
+ children: [
15
+ {
16
+ path: ':requestId',
17
+ data: {
18
+ title: 'Sub route title',
19
+ },
20
+ },
21
+ ],
22
+ },
23
+ ];
24
+ ```
25
+
26
+ The service should now be able to collect all `title` properties defined for the current url. Each time a new `title` is found for a child, it will be translated and prepended, ending with `YourAppName - Lucca`.
27
+
28
+ ex: `Sub route title - Parent title - YourAppName - Lucca`
29
+
30
+ For dynamic titles, the `prependTitle` method from `LuTitleService` enables you to add a custom title.
31
+ In a component, you could do the following:
32
+
33
+ ```typescript
34
+ const userName: string = this.userService.getCurrentUser();
35
+ this.luTitleService.prependTitle(userName);
36
+ ```
37
+
38
+ ## Quickstart
39
+
40
+ You will need to:
41
+
42
+ - Install `@lucca-front/ng`
43
+ - Create a service (`YourAppNameTranslateService`) that implements the `ILuTitleTranslateService`
44
+ - Provide this service in the `app.module.ts` and import `LuTitleModule`
45
+ - Init the `LuTitleService` in your `app.component.ts`
46
+
47
+ ### Let's start by creating the service
48
+
49
+ `YourAppNameTranslateService` be used in combination with the token `LU_TITLE_TRANSLATE_SERVICE`.
50
+
51
+ This service should implement the `ILuTitleTranslateService` interface. It allows you to use any translation service (`ngx-translate`, `transloco`, ...etc).
52
+
53
+ You should end up with the following if you are using `ngx-translate`:
54
+
55
+ ```typescript
56
+ @Injectable({ providedIn: 'root' })
57
+ export class CoreRhTranslateService implements ILuTitleTranslateService {
58
+ constructor(private translateService: TranslateService) {}
59
+ translate(key: string, args: unknown): string {
60
+ return this.translateService.instant(key, args);
61
+ }
62
+ }
63
+ ```
64
+
65
+ or if you are using `transloco`:
66
+
67
+ ```typescript
68
+ @Injectable({ providedIn: 'root' })
69
+ export class CoreRhTranslateService implements ILuTitleTranslateService {
70
+ constructor(private translateService: TranslocoService) {}
71
+ translate(key: string, args: HashMap): string {
72
+ return this.translateService.translate(key, args);
73
+ }
74
+ }
75
+ ```
76
+
77
+ ### Adapt `app.module.ts` config
78
+
79
+ Import the `LuTitleModule` and provide the service you just created to the token `LU_TITLE_TRANSLATE_SERVICE` in the `app.module.ts` :
80
+
81
+ ```typescript
82
+ @NgModule({
83
+ imports: [
84
+ LuTitleModule
85
+ ],
86
+ provide: [
87
+ {
88
+ provide: LU_TITLE_TRANSLATE_SERVICE,
89
+ useExisting: YourAppNameTranslateService
90
+ }
91
+ ]
92
+ ```
93
+
94
+ ### Init the `LuTitleService`
95
+
96
+ In the the `app.component.ts`, init the LuTitleService by passing the name of you app:
97
+
98
+ ```typescript
99
+ this.luTitleService.init('**YourAppName**');
100
+ ```
@@ -0,0 +1 @@
1
+ export * from './lib';
@@ -0,0 +1,3 @@
1
+ export * from './title-translate.service';
2
+ export * from './title.module';
3
+ export * from './title.service';
@@ -0,0 +1,5 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export declare const LU_TITLE_TRANSLATE_SERVICE: InjectionToken<ILuTitleTranslateService>;
3
+ export interface ILuTitleTranslateService {
4
+ translate(key: string, args?: Record<string, unknown>): string;
5
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/router";
3
+ export declare class LuTitleModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<LuTitleModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<LuTitleModule, never, [typeof i1.RouterModule], never>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<LuTitleModule>;
7
+ }
@@ -0,0 +1,23 @@
1
+ import { Title } from '@angular/platform-browser';
2
+ import { Router } from '@angular/router';
3
+ import { ILuTitleTranslateService } from './title-translate.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare type PageTitle = {
6
+ title: string;
7
+ params: {
8
+ [param: string]: string;
9
+ };
10
+ };
11
+ export declare const TitleSeparator = " \u2013 ";
12
+ export declare class LuTitleService {
13
+ private router;
14
+ private title;
15
+ private translateService;
16
+ private titleSubject;
17
+ title$: import("rxjs").Observable<string>;
18
+ constructor(router: Router, title: Title, translateService: ILuTitleTranslateService);
19
+ init(applicationNameTranslationKey: string): void;
20
+ prependTitle(title: string): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<LuTitleService, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<LuTitleService>;
23
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@lucca-front/ng/title" />
5
+ export * from './public-api';
@@ -0,0 +1,10 @@
1
+ {
2
+ "module": "../fesm2015/lucca-front-ng-title.mjs",
3
+ "es2020": "../fesm2020/lucca-front-ng-title.mjs",
4
+ "esm2020": "../esm2020/title/lucca-front-ng-title.mjs",
5
+ "fesm2020": "../fesm2020/lucca-front-ng-title.mjs",
6
+ "fesm2015": "../fesm2015/lucca-front-ng-title.mjs",
7
+ "typings": "lucca-front-ng-title.d.ts",
8
+ "sideEffects": false,
9
+ "name": "@lucca-front/ng/title"
10
+ }
@@ -0,0 +1 @@
1
+ export * from './index';