@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.
- package/esm2020/title/index.mjs +2 -0
- package/esm2020/title/lib/index.mjs +4 -0
- package/esm2020/title/lib/title-translate.service.mjs +3 -0
- package/esm2020/title/lib/title.module.mjs +17 -0
- package/esm2020/title/lib/title.service.mjs +48 -0
- package/esm2020/title/lucca-front-ng-title.mjs +5 -0
- package/esm2020/title/public-api.mjs +2 -0
- package/fesm2015/lucca-front-ng-title.mjs +72 -0
- package/fesm2015/lucca-front-ng-title.mjs.map +1 -0
- package/fesm2020/lucca-front-ng-title.mjs +69 -0
- package/fesm2020/lucca-front-ng-title.mjs.map +1 -0
- package/package.json +9 -1
- package/title/README.md +100 -0
- package/title/index.d.ts +1 -0
- package/title/lib/index.d.ts +3 -0
- package/title/lib/title-translate.service.d.ts +5 -0
- package/title/lib/title.module.d.ts +7 -0
- package/title/lib/title.service.d.ts +23 -0
- package/title/lucca-front-ng-title.d.ts +5 -0
- package/title/package.json +10 -0
- package/title/public-api.d.ts +1 -0
|
@@ -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":"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"}
|
|
@@ -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
|
|
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",
|
package/title/README.md
ADDED
|
@@ -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
|
+
```
|
package/title/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
|
@@ -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,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';
|