ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
87 lines • 15.8 kB
JavaScript
import { LOCATION_INITIALIZED } from '@angular/common';
import { Injector } from '@angular/core';
import { MAT_RIPPLE_GLOBAL_OPTIONS } from '@angular/material/core';
import { Router } from '@angular/router';
import { combineLatest } from 'rxjs';
import { AppConfig, O_INPUTS_OPTIONS } from '../config/app-config';
import { appConfigFactory } from '../services/app-config.provider';
import { ComponentStateServiceProvider, ExportDataServiceProvider, NameConventionProvider, OntimizeAuthServiceProvider, OntimizeExportServiceProvider, OntimizeLocalStorageServiceProvider, OntimizeServiceProvider, ServiceRequestAdapter, ServiceResponseAdapter } from '../services/factories';
import { LocalStorageService } from '../services/local-storage.service';
import { NavigationService } from '../services/navigation.service';
import { OntimizeMatIconRegistry } from '../services/ontimize-icon-registry.service';
import { OPreferenceResponseAdapter } from '../services/ontimize/o-preference-response.adapter';
import { ORemoteConfigurationService } from '../services/remote-config.service';
import { Error403Component } from '../shared/components/error403/o-error-403.component';
import { Codes } from '../util/codes';
import { Util } from '../util/util';
import { O_JSON_API_CONFIG, O_MAT_ERROR_OPTIONS } from '../injection-tokens';
function addPermissionsRouteGuard(injector) {
const route = injector.get(Router);
const exists403 = route.config.find(r => r.path === Codes.FORBIDDEN_ROUTE);
if (!exists403) {
route.config.push({ path: Codes.FORBIDDEN_ROUTE, component: Error403Component });
}
}
export function appInitializerFactory(injector, config, oTranslate) {
return () => new Promise((resolve) => {
const observableArray = [];
const locationInitialized = injector.get(LOCATION_INITIALIZED, Promise.resolve(null));
locationInitialized.then(() => {
const storedLang = oTranslate.getStoredLanguage();
const configLang = config['locale'];
const browserLang = oTranslate.getBrowserLang();
let userLang = Util.isDefined(config['defaultLocale']) ? config['defaultLocale'] : 'en';
let defaultLang = Util.isDefined(config['defaultLocale']) ? config['defaultLocale'] : 'en';
if (storedLang) {
userLang = storedLang;
}
else if (configLang) {
userLang = configLang;
defaultLang = configLang;
}
else if (browserLang) {
userLang = browserLang;
defaultLang = browserLang;
}
oTranslate.setDefaultLang(defaultLang);
const locales = new Set(config.applicationLocales || []);
locales.add('en');
locales.add(userLang);
if (!config.applicationLocales) {
config.applicationLocales = [...locales];
}
if (config.uuid == null || config.uuid === '') {
console.error('Your app must have an \'uuid\' property defined on your app.config file. Otherwise, your application will not work correctly.');
alert('Your app must have an \'uuid\' property defined on your app.config file. Otherwise, your application will not work correctly.');
}
injector.get(NavigationService).initialize();
injector.get(OntimizeMatIconRegistry).initialize();
injector.get(LocalStorageService).setBackwardCompatibility();
addPermissionsRouteGuard(injector);
observableArray.push(oTranslate.setAppLang(userLang));
const remoteConfigService = injector.get(ORemoteConfigurationService);
observableArray.push(remoteConfigService.initialize());
combineLatest(observableArray).subscribe(() => {
resolve();
});
});
});
}
export const ONTIMIZE_PROVIDERS = [
{ provide: AppConfig, useFactory: appConfigFactory, deps: [Injector] },
OntimizeServiceProvider,
ServiceResponseAdapter,
ServiceRequestAdapter,
OntimizeAuthServiceProvider,
ComponentStateServiceProvider,
ExportDataServiceProvider,
OntimizeExportServiceProvider,
NameConventionProvider,
OntimizeLocalStorageServiceProvider,
OPreferenceResponseAdapter,
{ provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } },
{ provide: O_MAT_ERROR_OPTIONS, useValue: {} },
{ provide: O_INPUTS_OPTIONS, useValue: {} },
{ provide: O_JSON_API_CONFIG, useValue: {} }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29uZmlnL28tcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IsNkJBQTZCLEVBQzdCLG1DQUFtQyxFQUNuQyx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRXhGLE9B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RUFBRSxFQUFFLEVBQUU7SUFDOUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUMzQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0NBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMT0NBVElPTl9JTklUSUFMSVpFRCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RvciwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9SSVBQTEVfR0xPQkFMX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZywgT19JTlBVVFNfT1BUSU9OUyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7IGFwcENvbmZpZ0ZhY3RvcnkgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnByb3ZpZGVyJztcbmltcG9ydCB7XG4gIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICBFeHBvcnREYXRhU2VydmljZVByb3ZpZGVyLFxuICBOYW1lQ29udmVudGlvblByb3ZpZGVyLFxuICBPbnRpbWl6ZUF1dGhTZXJ2aWNlUHJvdmlkZXIsXG4gIE9udGltaXplRXhwb3J0U2VydmljZVByb3ZpZGVyLFxuICBPbnRpbWl6ZUxvY2FsU3RvcmFnZVNlcnZpY2VQcm92aWRlcixcbiAgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIsXG4gIFNlcnZpY2VSZXF1ZXN0QWRhcHRlcixcbiAgU2VydmljZVJlc3BvbnNlQWRhcHRlclxufSBmcm9tICcuLi9zZXJ2aWNlcy9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZU1hdEljb25SZWdpc3RyeSB9IGZyb20gJy4uL3NlcnZpY2VzL29udGltaXplLWljb24tcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBPUHJlZmVyZW5jZVJlc3BvbnNlQWRhcHRlciB9IGZyb20gJy4uL3NlcnZpY2VzL29udGltaXplL28tcHJlZmVyZW5jZS1yZXNwb25zZS5hZGFwdGVyJztcbmltcG9ydCB7IE9SZW1vdGVDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlbW90ZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yNDAzQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvZXJyb3I0MDMvby1lcnJvci00MDMuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9fSlNPTl9BUElfQ09ORklHLCBPX01BVF9FUlJPUl9PUFRJT05TIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2Vucyc7XG5cbmZ1bmN0aW9uIGFkZFBlcm1pc3Npb25zUm91dGVHdWFyZChpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgY29uc3Qgcm91dGUgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgY29uc3QgZXhpc3RzNDAzID0gcm91dGUuY29uZmlnLmZpbmQociA9PiByLnBhdGggPT09IENvZGVzLkZPUkJJRERFTl9ST1VURSk7XG4gIGlmICghZXhpc3RzNDAzKSB7XG4gICAgcm91dGUuY29uZmlnLnB1c2goeyBwYXRoOiBDb2Rlcy5GT1JCSURERU5fUk9VVEUsIGNvbXBvbmVudDogRXJyb3I0MDNDb21wb25lbnQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcEluaXRpYWxpemVyRmFjdG9yeShpbmplY3RvcjogSW5qZWN0b3IsIGNvbmZpZzogQ29uZmlnLCBvVHJhbnNsYXRlOiBPVHJhbnNsYXRlU2VydmljZSkge1xuICByZXR1cm4gKCkgPT4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZTogYW55KSA9PiB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZUFycmF5ID0gW107XG4gICAgY29uc3QgbG9jYXRpb25Jbml0aWFsaXplZCA9IGluamVjdG9yLmdldChMT0NBVElPTl9JTklUSUFMSVpFRCwgUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtcbiAgICBsb2NhdGlvbkluaXRpYWxpemVkLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVkTGFuZyA9IG9UcmFuc2xhdGUuZ2V0U3RvcmVkTGFuZ3VhZ2UoKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0xhbmcgPSBjb25maWdbJ2xvY2FsZSddO1xuICAgICAgY29uc3QgYnJvd3NlckxhbmcgPSBvVHJhbnNsYXRlLmdldEJyb3dzZXJMYW5nKCk7XG4gICAgICBsZXQgdXNlckxhbmcgPSBVdGlsLmlzRGVmaW5lZChjb25maWdbJ2RlZmF1bHRMb2NhbGUnXSkgPyBjb25maWdbJ2RlZmF1bHRMb2NhbGUnXSA6ICdlbic7XG4gICAgICBsZXQgZGVmYXVsdExhbmcgPSBVdGlsLmlzRGVmaW5lZChjb25maWdbJ2RlZmF1bHRMb2NhbGUnXSkgPyBjb25maWdbJ2RlZmF1bHRMb2NhbGUnXSA6ICdlbic7XG4gICAgICBpZiAoc3RvcmVkTGFuZykge1xuICAgICAgICB1c2VyTGFuZyA9IHN0b3JlZExhbmc7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZ0xhbmcpIHtcbiAgICAgICAgdXNlckxhbmcgPSBjb25maWdMYW5nO1xuICAgICAgICBkZWZhdWx0TGFuZyA9IGNvbmZpZ0xhbmc7XG4gICAgICB9IGVsc2UgaWYgKGJyb3dzZXJMYW5nKSB7XG4gICAgICAgIHVzZXJMYW5nID0gYnJvd3Nlckxhbmc7XG4gICAgICAgIGRlZmF1bHRMYW5nID0gYnJvd3Nlckxhbmc7XG4gICAgICB9XG4gICAgICBvVHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKGRlZmF1bHRMYW5nKTtcblxuICAgICAgY29uc3QgbG9jYWxlcyA9IG5ldyBTZXQoY29uZmlnLmFwcGxpY2F0aW9uTG9jYWxlcyB8fCBbXSk7XG4gICAgICBsb2NhbGVzLmFkZCgnZW4nKTtcbiAgICAgIGxvY2FsZXMuYWRkKHVzZXJMYW5nKTtcblxuICAgICAgLy8gaW5pdGlhbGl6ZSBhdmFpbGFibGUgbG9jYWxlcyBhcnJheSBpZiBuZWVkZWRcbiAgICAgIGlmICghY29uZmlnLmFwcGxpY2F0aW9uTG9jYWxlcykge1xuICAgICAgICBjb25maWcuYXBwbGljYXRpb25Mb2NhbGVzID0gWy4uLmxvY2FsZXNdO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnV1aWQgPT0gbnVsbCB8fCBjb25maWcudXVpZCA9PT0gJycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignWW91ciBhcHAgbXVzdCBoYXZlIGFuIFxcJ3V1aWRcXCcgcHJvcGVydHkgZGVmaW5lZCBvbiB5b3VyIGFwcC5jb25maWcgZmlsZS4gT3RoZXJ3aXNlLCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LicpO1xuICAgICAgICBhbGVydCgnWW91ciBhcHAgbXVzdCBoYXZlIGFuIFxcJ3V1aWRcXCcgcHJvcGVydHkgZGVmaW5lZCBvbiB5b3VyIGFwcC5jb25maWcgZmlsZS4gT3RoZXJ3aXNlLCB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LicpO1xuICAgICAgfVxuICAgICAgaW5qZWN0b3IuZ2V0KE5hdmlnYXRpb25TZXJ2aWNlKS5pbml0aWFsaXplKCk7XG4gICAgICBpbmplY3Rvci5nZXQoT250aW1pemVNYXRJY29uUmVnaXN0cnkpLmluaXRpYWxpemUoKTtcbiAgICAgIGluamVjdG9yLmdldChMb2NhbFN0b3JhZ2VTZXJ2aWNlKS5zZXRCYWNrd2FyZENvbXBhdGliaWxpdHkoKTtcbiAgICAgIGFkZFBlcm1pc3Npb25zUm91dGVHdWFyZChpbmplY3Rvcik7XG4gICAgICBvYnNlcnZhYmxlQXJyYXkucHVzaChvVHJhbnNsYXRlLnNldEFwcExhbmcodXNlckxhbmcpKTtcbiAgICAgIGNvbnN0IHJlbW90ZUNvbmZpZ1NlcnZpY2UgPSBpbmplY3Rvci5nZXQoT1JlbW90ZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgICAgIG9ic2VydmFibGVBcnJheS5wdXNoKHJlbW90ZUNvbmZpZ1NlcnZpY2UuaW5pdGlhbGl6ZSgpKTtcbiAgICAgIGNvbWJpbmVMYXRlc3Qob2JzZXJ2YWJsZUFycmF5KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBPTlRJTUlaRV9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gIHsgcHJvdmlkZTogQXBwQ29uZmlnLCB1c2VGYWN0b3J5OiBhcHBDb25maWdGYWN0b3J5LCBkZXBzOiBbSW5qZWN0b3JdIH0sXG4gIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICBTZXJ2aWNlUmVzcG9uc2VBZGFwdGVyLFxuICBTZXJ2aWNlUmVxdWVzdEFkYXB0ZXIsXG4gIE9udGltaXplQXV0aFNlcnZpY2VQcm92aWRlcixcbiAgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsXG4gIEV4cG9ydERhdGFTZXJ2aWNlUHJvdmlkZXIsXG4gIE9udGltaXplRXhwb3J0U2VydmljZVByb3ZpZGVyLFxuICBOYW1lQ29udmVudGlvblByb3ZpZGVyLFxuICBPbnRpbWl6ZUxvY2FsU3RvcmFnZVNlcnZpY2VQcm92aWRlcixcbiAgT1ByZWZlcmVuY2VSZXNwb25zZUFkYXB0ZXIsXG4gIC8vIGRpc2FibGVkIGdsb2JhbCByaXBwbGVcbiAgeyBwcm92aWRlOiBNQVRfUklQUExFX0dMT0JBTF9PUFRJT05TLCB1c2VWYWx1ZTogeyBkaXNhYmxlZDogdHJ1ZSB9IH0sXG4gIHsgcHJvdmlkZTogT19NQVRfRVJST1JfT1BUSU9OUywgdXNlVmFsdWU6IHt9IH0sXG4gIHsgcHJvdmlkZTogT19JTlBVVFNfT1BUSU9OUywgdXNlVmFsdWU6IHt9IH0sXG4gIHsgcHJvdmlkZTogT19KU09OX0FQSV9DT05GSUcsIHVzZVZhbHVlOiB7fSB9XG5dO1xuIl19