main.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { ApplicationRef, enableProdMode, APP_INITIALIZER, importProvidersFrom } from '@angular/core'
  2. import { enableDebugTools, BrowserModule, bootstrapApplication } from '@angular/platform-browser'
  3. import { environment } from './environments/environment'
  4. import { logger } from './root-helpers'
  5. import { AppComponent } from './app/app.component'
  6. import routes from './app/app.routes'
  7. import { ServiceWorkerModule } from '@angular/service-worker'
  8. import { polyfillICU } from './app/helpers'
  9. import { tap } from 'rxjs/operators'
  10. import {
  11. ServerService,
  12. PluginService,
  13. RedirectService, PreloadSelectedModulesList,
  14. MenuGuards,
  15. CustomReuseStrategy,
  16. getCoreProviders
  17. } from './app/core'
  18. import { APP_BASE_HREF, registerLocaleData } from '@angular/common'
  19. import localeOc from '@app/helpers/locales/oc'
  20. import { RouteReuseStrategy, provideRouter, withInMemoryScrolling, withPreloading } from '@angular/router'
  21. import { provideHttpClient } from '@angular/common/http'
  22. import { LoadingBarModule } from '@ngx-loading-bar/core'
  23. import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client'
  24. import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap'
  25. import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
  26. import { ToastModule } from 'primeng/toast'
  27. import { getMainProviders } from './app/shared/shared-main/main-providers'
  28. import { getFormProviders } from '@app/shared/shared-forms/shared-form-providers'
  29. registerLocaleData(localeOc, 'oc')
  30. export function loadConfigFactory (server: ServerService, pluginService: PluginService, redirectService: RedirectService) {
  31. const initializeServices = () => {
  32. redirectService.init()
  33. pluginService.initializePlugins()
  34. }
  35. return () => {
  36. const result = server.loadHTMLConfig()
  37. if (result) return result.pipe(tap(() => initializeServices()))
  38. initializeServices()
  39. }
  40. }
  41. if (environment.production) {
  42. enableProdMode()
  43. }
  44. logger.registerServerSending(environment.apiUrl)
  45. const bootstrap = () => bootstrapApplication(AppComponent, {
  46. providers: [
  47. importProvidersFrom(
  48. BrowserModule,
  49. BrowserAnimationsModule,
  50. ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })
  51. ),
  52. provideHttpClient(),
  53. importProvidersFrom(
  54. LoadingBarHttpClientModule,
  55. LoadingBarModule,
  56. ToastModule,
  57. NgbModalModule
  58. ),
  59. getCoreProviders(),
  60. getMainProviders(),
  61. getFormProviders(),
  62. PreloadSelectedModulesList,
  63. ...MenuGuards.guards,
  64. { provide: RouteReuseStrategy, useClass: CustomReuseStrategy },
  65. provideRouter(routes,
  66. withPreloading(PreloadSelectedModulesList),
  67. withInMemoryScrolling({
  68. anchorScrolling: 'disabled',
  69. // Redefined in app component
  70. scrollPositionRestoration: 'disabled'
  71. })
  72. ),
  73. {
  74. provide: APP_BASE_HREF,
  75. useValue: '/'
  76. },
  77. {
  78. provide: APP_INITIALIZER,
  79. useFactory: loadConfigFactory,
  80. deps: [ ServerService, PluginService, RedirectService ],
  81. multi: true
  82. },
  83. {
  84. provide: APP_INITIALIZER,
  85. useFactory: () => polyfillICU,
  86. multi: true
  87. }
  88. ]
  89. })
  90. .then(bootstrapModule => {
  91. if (!environment.production) {
  92. const applicationRef = bootstrapModule.injector.get(ApplicationRef)
  93. const componentRef = applicationRef.components[0]
  94. // allows to run `ng.profiler.timeChangeDetection();`
  95. enableDebugTools(componentRef)
  96. }
  97. return bootstrapModule
  98. })
  99. .catch(err => {
  100. try {
  101. logger.error(err)
  102. } catch (err2) {
  103. console.error('Cannot log error', { err, err2 })
  104. }
  105. // Ensure we display an "incompatible message" on Angular bootstrap error
  106. setTimeout(() => {
  107. if (document.querySelector('my-app').innerHTML === '') {
  108. throw err
  109. }
  110. }, 1000)
  111. return null
  112. })
  113. bootstrap()