</div>
{
provide: 'AppConfigurationOptions',
useValue: {
applicationCode: 'INVOICE_PAYMENTS',
hostname: '',
environment: _environment(),
releaseVersion: '2.2.4.0',
useLocalManifest: true,
productPath: '/',
localManifestUrl: urlConfigurationManifest
} as IAppConfigurationOptions
},
Además de importar el módulo se require un objeto de configuration: la interfaz IAppConfigurationOptions
export interface IAppConfigurationOptions {
applicationCode: string;
releaseVersion: string;
environment: Environment;
hostname: string;
productPath: string;
useLocalManifest?: boolean;
localManifestUrl?: string;
loadConfigurations?: () => IConfiguration[];
}
Se coloca como provider en el módulo padre de la aplicación.
Se le manda el nombre de la configuración.
El nombre está compuesto así: ConfigurationName@ConfigurationVersion#ProductVersion
Sólo es obligatorio especificar el nombre
constructor(configurationService: AppConfigurationService) {
if (configurationService.isEnabled('configurationName')) {
doSomething();
}
}
Para obtener todo el objeto de la configuración, por lo general sólo se usaría para obtener la propiedad options
configurationService.getConfiguration('configurationName').options;
Observable que resuelve true
cuando las configuraciones están cargadas en memoria
configurationService.configurationsLoaded.subscribe(isLoaded$ => {
if (isLoaded) {
// There are configurations in memory, do something
}
})
Hay un Guard que evita que se acceda a la aplicación si no están cargadas las configura por lo que este observable probablemente no será utilizado
*ipcAppConfiguration="'configurationName'"
La directiva toma una configuración, verifica si esta activa y renderea su contendio.
No altera el DOM.
Ojo la string del nombre debe estar entrecomillada aunque ya estén las comillas del atributo.
<ng-container *ipcAppConfiguration="['dashboard.pending-orders', 'dashboard.credit-limit']">
<pending-orders-card></pending-orders-card>
</ng-container>
Se le puede pasar un arreglo si se desea que una configuración se renderee al cumplirse todos los elementos de dicho arreglo.
<ng-container *ipcAppConfiguration="['dashboard.pending-orders', 'dashboard.credit-limit']; matchAny: true">
<pending-orders-card></pending-orders-card>
</ng-container>
Se le pasa true
al input matchAny
para que trate la lista de configuraciones como un OR, es decir, se renderea la configuración si se cumple mínimo uno.
El guardían por ahora sólo tiene un CanActivateChild
que sólo permite el paso cuando las configuraciones están cargadas, de no poder cargarse se redirige a una página de error.
La consola lanza errores y warnings respecto a los problemas que puedan surgir.
Puedes revisar la interfaz Feature exportada en ipc-app-configuration.service.ts
El nombre de la configuración, se le puede especificar una versión y una versión de producto a la que aplicará como se comenta más arriba.
Lista de países a los que aplicará. Se coteja contra el país del usuario. Es el código ISO en mayúsculas
Roles que aplicará.
Role: Un único role
Role_any: Lista de roles, la configuración se activará si uno de los roles es encontrado en el usuario
Role_match: Lista de roles, la configuración se activará si todos los roles coinciden con el usuario
Objeto con role, role_any, role_match y country.
La configuración estará activo si hay un match con las propiedades.
Esta propiedad es opcional, se puede utilizar includes o utilizar las propiedades en el nodo padre de la configuración. Ej:
Estas dos configuraciones se comportarán igual.
{
"feature": "using-includes",
"includes": {
"country": "DE"
}
"environment": "Development"
},
{
"feature": "not-using-includes",
"country": "DE",
"environment": "Development"
}
Si se especifican las propiedades en el objeto includes y afuera de este, sólo se tomará en cuenta el objeto includes. Ej: En este caso la configuración sólo aplica para DE
{
"feature": "using-includes",
"includes": {
"country": "DE"
},
"country": "MX",
"environment": "Development"
}
Objeto con role, role_any, role_match y country
La configuración se desactivará si hay un match con las propiedades
{
"feature": "using-excludes",
"excludes": {
"country": "DE",
"role": "paymentSomething"
},
"environment": "Development"
}
Hay casos donde se necesita obtener información extra relacionada a una configuración, por ejemplo necesitar información de configuración de las tablas, esta información se especifica en el objeto options
{
"feature": "[email protected]",
"country": "US",
"role_any": "ARMORGAPC, ARMORGARCAdv, ARMORGreconcile",
"environment": "Development",
"options": {
"anObject": {
"with": "options"
}
}
}
La forma de acceder a este objeto ya se habló mas arriba.
En el caso de especificar una configuración con distintas configuraciones por target se debe agregar primero la configuración ‘default’ o más general
{
"feature": "footer.privacy-link-route",
"options": {
"privacyRoute": "https://www.cemex.com/privacy-policy"
}
},
{
"feature": "footer.privacy-link-route",
"country": "DE",
"options": {
"privacyRoute": "https://www.cemex.de/Datenschutzrichtlinien.aspx"
}
}
Ej: Una URL en el footer que es para todos los países de una manera y con excepción para Alemania, se declara primero el default.
</div>