LuTitleStrategy
Usage
Add title properties in your routes config:
const routes: Routes = [
{
path: '',
data: {
title: 'Parent title',
},
children: [
{
path: ':requestId',
data: {
title: 'Sub route title',
},
},
],
},
];
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 β Lucca YourAppName.
ex: Sub route title β Parent title β Lucca YourAppName
For dynamic titles, the prependTitle method from LuTitleStrategy enables you to add a custom title.
In a component, you could do the following:
const userName: string = this.userService.getCurrentUser();
this.luTitleStrategy.prependTitle(userName);
You can also replace the first fragment using:
const userName: string = this.userService.getOtherUser();
this.luTitleStrategy.overrideFirstTitlePart(userName);
Both prependTitle and overrideFirstTitlePart can also be called using Observable<string> :
const selectedUser$ = this.userStore.selected$;
this.luTitleStrategy.prependTitle(selectedUser$);
Quickstart
You will need to:
- Install
@lucca-front/ng
- Create a service (
YourAppNameTranslateService) that implements the ILuTitleTranslateService
- Call
provideLuTitleStrategy in your app.module.ts / app.config.ts
provideLuTitleStrategy({
appName: () => 'YourAppName',
translateService: () => inject(YourAppNameTranslateService),
}),
Naming Strategy
Two naming strategies are available:
- The app is a product (default:
'product'), the title must end with β Lucca YourAppName
- The app is something else (
'other'), the title must end with β YourAppName β Lucca
In this case, you must provide the optional parameter namingStrategy: 'other' like so:
provideLuTitleStrategy({
appName: () => 'YourAppName',
translateService: () => inject(YourAppNameTranslateService),
namingStrategy: 'other',
}),
Handling translations
YourAppNameTranslateService be used in combination with the token LU_TITLE_TRANSLATE_SERVICE.
This service should implement the ILuTitleTranslateService interface. It allows you to use any translation service (ngx-translate, transloco, ...etc).
You should end up with the following if you are using ngx-translate:
@Injectable({ providedIn: 'root' })
export class CoreHRTranslateService implements ILuTitleTranslateService {
constructor(private translateService: TranslateService) {}
translate(key: string, args: unknown): string {
return this.translateService.instant(key, args);
}
}
or if you are using transloco:
@Injectable({ providedIn: 'root' })
export class CoreHRTranslateService implements ILuTitleTranslateService {
constructor(private translateService: TranslocoService) {}
translate(key: string, args: HashMap): string {
return this.translateService.translate(key, args);
}
}
Adapt app.module.ts config
In the app.module.ts, you need to call provideLuTitleStrategy in the providers array:
@NgModule({
providers: [provideLuTitleStrategy({ translateService: () => inject(YourAppNameTranslateService) })],
})
export class AppModule {}
Example with lucca-cdk
lucca-cdk provides a getStoreModuleName(moduleId) function that will fetch the name of your module from the Lucca Store API.
Use it like this in your app.config.ts / main.ts file:
import { provideLuTitleStrategy } from '@lucca-front/ng/title';
import { getStoreModuleName } from '@lucca/cdk/remote-entity';
provideLuTitleStrategy({
appTitle: () => getStoreModuleName('my-module-id'),
}),