[ADF-2064] Lazy loading support (#2811)

* remove BrowserAnimationsModule dependency

* improve test shim

* update test shim

* test shim updates

* example of lazy-loaded datatable

* local and global i18n demo for lazy modules

* lazy loading support for CoreModule providers

* test shim updates

* update test shim

* support global i18n for lazy modules

* cleanup lazy loading example

* update card view after rebase

* backwards compatibility

* cleanup files

* fix code after rebase
This commit is contained in:
Denys Vuika
2018-01-31 17:39:26 +00:00
committed by Eugenio Romano
parent 49456b3fcd
commit 0d93c65fd7
23 changed files with 298 additions and 165 deletions

View File

@@ -38,9 +38,6 @@ import { CardViewItemDispatcherComponent } from './components/card-view-item-dis
import { CardViewMapItemComponent } from './components/card-view-mapitem/card-view-mapitem.component';
import { CardViewTextItemComponent } from './components/card-view-textitem/card-view-textitem.component';
import { CardItemTypeService } from './services/card-item-types.service';
import { CardViewUpdateService } from './services/card-view-update.service';
@NgModule({
imports: [
CommonModule,
@@ -77,10 +74,6 @@ import { CardViewUpdateService } from './services/card-view-update.service';
CardViewDateItemComponent,
CardViewMapItemComponent,
CardViewTextItemComponent
],
providers: [
CardItemTypeService,
CardViewUpdateService
]
})
export class CardViewModule {}

View File

@@ -17,15 +17,12 @@
import { CommonModule } from '@angular/common';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { NgModule, ModuleWithProviders } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TRANSLATION_PROVIDER, TranslationService } from './services/translation.service';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateStore } from '@ngx-translate/core/src/translate.store';
import { MaterialModule } from './material.module';
import { AppConfigModule } from './app-config/app-config.module';
import { CardViewModule } from './card-view/card-view.module';
import { CollapsableModule } from './collapsable/collapsable.module';
@@ -45,16 +42,47 @@ import { SideBarActionModule } from './sidebar/sidebar-action.module';
import { DirectiveModule } from './directives/directive.module';
import { PipeModule } from './pipes/pipe.module';
import { ServiceModule } from './services/service.module';
import { AlfrescoApiService } from './services/alfresco-api.service';
import { AppsProcessService } from './services/apps-process.service';
import { AuthGuardBpm } from './services/auth-guard-bpm.service';
import { AuthGuardEcm } from './services/auth-guard-ecm.service';
import { AuthGuard } from './services/auth-guard.service';
import { AuthenticationService } from './services/authentication.service';
import { CardItemTypeService } from './card-view/services/card-item-types.service';
import { CardViewUpdateService } from './card-view/services/card-view-update.service';
import { CommentProcessService } from './services/comment-process.service';
import { ContentService } from './services/content.service';
import { CookieService } from './services/cookie.service';
import { DeletedNodesApiService } from './services/deleted-nodes-api.service';
import { DiscoveryApiService } from './services/discovery-api.service';
import { FavoritesApiService } from './services/favorites-api.service';
import { HighlightTransformService } from './services/highlight-transform.service';
import { LogService } from './services/log.service';
import { NodesApiService } from './services/nodes-api.service';
import { NotificationService } from './services/notification.service';
import { PageTitleService } from './services/page-title.service';
import { PeopleContentService } from './services/people-content.service';
import { PeopleProcessService } from './services/people-process.service';
import { RenditionsService } from './services/renditions.service';
import { SearchService } from './services/search.service';
import { SettingsService } from './services/settings.service';
import { SharedLinksApiService } from './services/shared-links-api.service';
import { SitesService } from './services/sites.service';
import { StorageService } from './services/storage.service';
import { ThumbnailService } from './services/thumbnail.service';
import { TranslateLoaderService } from './services/translate-loader.service';
import { TRANSLATION_PROVIDER, TranslationService } from './services/translation.service';
import { UploadService } from './services/upload.service';
import { UserPreferencesService } from './services/user-preferences.service';
import { SearchConfigurationService } from './services/search-configuration.service';
export function createTranslateLoader(http: HttpClient, logService: LogService) {
return new TranslateLoaderService(http, logService);
}
@NgModule({
imports: [
export function modules() {
return [
ViewerModule,
SideBarActionModule,
PipeModule,
@@ -63,7 +91,6 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
FormsModule,
ReactiveFormsModule,
HttpClientModule,
BrowserAnimationsModule,
HostSettingsModule,
UserInfoModule,
MaterialModule,
@@ -73,8 +100,75 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
ContextMenuModule,
CardViewModule,
CollapsableModule,
ServiceModule,
FormModule,
LoginModule,
LanguageMenuModule,
InfoDrawerModule,
DataColumnModule,
DataTableModule
];
}
export function providers() {
return [
AuthenticationService,
AlfrescoApiService,
SettingsService,
ContentService,
AuthGuard,
AuthGuardEcm,
AuthGuardBpm,
AppsProcessService,
PageTitleService,
StorageService,
CookieService,
RenditionsService,
NotificationService,
LogService,
TranslationService,
TranslateLoaderService,
ThumbnailService,
UploadService,
CardItemTypeService,
CardViewUpdateService,
UserPreferencesService,
HighlightTransformService,
DeletedNodesApiService,
FavoritesApiService,
NodesApiService,
PeopleContentService,
PeopleProcessService,
SearchService,
SharedLinksApiService,
SitesService,
DiscoveryApiService,
CommentProcessService,
SearchConfigurationService
];
}
@NgModule({
imports: [
...modules(),
TranslateModule.forChild({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient, LogService]
}
})
],
exports: [
...modules(),
TranslateModule
]
})
export class CoreModuleLazy {
}
@NgModule({
imports: [
...modules(),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
@@ -83,6 +177,10 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
}
})
],
exports: [
...modules(),
TranslateModule
],
providers: [
{
provide: TRANSLATION_PROVIDER,
@@ -92,35 +190,31 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
source: 'assets/adf-core'
}
},
TranslationService
],
exports: [
AppConfigModule,
BrowserAnimationsModule,
CommonModule,
FormsModule,
ReactiveFormsModule,
TranslateModule,
ContextMenuModule,
CardViewModule,
CollapsableModule,
PaginationModule,
ToolbarModule,
LoginModule,
UserInfoModule,
LanguageMenuModule,
InfoDrawerModule,
DataColumnModule,
DataTableModule,
HostSettingsModule,
ServiceModule,
ViewerModule,
SideBarActionModule,
PipeModule,
DirectiveModule,
FormModule,
MaterialModule
...providers()
]
})
export class CoreModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: CoreModule,
providers: [
{
provide: TRANSLATION_PROVIDER,
multi: true,
useValue: {
name: 'adf-core',
source: 'assets/adf-core'
}
},
TranslateStore,
...providers()
]
};
}
static forChild(): ModuleWithProviders {
return {
ngModule: CoreModuleLazy
};
}
}

View File

@@ -34,7 +34,6 @@ export * from './app-config/app-config.module';
export * from './form/form.module';
export * from './pipes/pipe.module';
export * from './services/service.module';
export * from './directives/directive.module';
export * from './viewer';

View File

@@ -25,7 +25,6 @@ const HttpClientModule = require('@angular/common/http').HttpClientModule;
const TranslateModule = require('@ngx-translate/core').TranslateModule;
const TranslateLoader = require('@ngx-translate/core').TranslateLoader;
const ServicesModule = require('./services/service.module').ServiceModule;
const DirectiveModule = require('./directives/directive.module').DirectiveModule;
const ContextMenuModule = require('./context-menu/context-menu.module').ContextMenuModule;
const PipeModule = require('./pipes/pipe.module').PipeModule;
@@ -34,6 +33,7 @@ const LogService = require('./services/log.service').LogService;
const TranslateLoaderService = require('./services/translate-loader.service').TranslateLoaderService;
const AppConfigService = require('@alfresco/adf-core').AppConfigService;
const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock;
const providers = require('./core.module').providers;
TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting());
@@ -44,7 +44,6 @@ export function createTranslateLoader(http, logService) {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
ServicesModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
@@ -62,6 +61,7 @@ beforeEach(() => {
HttpClientModule
],
providers: [
...providers(),
{provide: AppConfigService, useClass: AppConfigServiceMock}
]});
});

View File

@@ -21,7 +21,7 @@ import { Component } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { MatSnackBar, MatSnackBarModule } from '@angular/material';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { NotificationService } from './notification.service';
describe('NotificationService', () => {
@@ -30,7 +30,7 @@ describe('NotificationService', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
BrowserAnimationsModule,
NoopAnimationsModule,
OverlayModule,
MatSnackBarModule
],

View File

@@ -1,92 +0,0 @@
/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { NgModule } from '@angular/core';
import { AlfrescoApiService } from './alfresco-api.service';
import { AppsProcessService } from './apps-process.service';
import { AuthGuardBpm } from './auth-guard-bpm.service';
import { AuthGuardEcm } from './auth-guard-ecm.service';
import { AuthGuard } from './auth-guard.service';
import { AuthenticationService } from './authentication.service';
import { CommentProcessService } from './comment-process.service';
import { ContentService } from './content.service';
import { CookieService } from './cookie.service';
import { DeletedNodesApiService } from './deleted-nodes-api.service';
import { DiscoveryApiService } from './discovery-api.service';
import { FavoritesApiService } from './favorites-api.service';
import { HighlightTransformService } from './highlight-transform.service';
import { LogService } from './log.service';
import { NodesApiService } from './nodes-api.service';
import { NotificationService } from './notification.service';
import { PageTitleService } from './page-title.service';
import { PeopleContentService } from './people-content.service';
import { PeopleProcessService } from './people-process.service';
import { RenditionsService } from './renditions.service';
import { SearchService } from './search.service';
import { SettingsService } from './settings.service';
import { SharedLinksApiService } from './shared-links-api.service';
import { SitesService } from './sites.service';
import { StorageService } from './storage.service';
import { ThumbnailService } from './thumbnail.service';
import { TranslateLoaderService } from './translate-loader.service';
import { TranslationService } from './translation.service';
import { UploadService } from './upload.service';
import { UserPreferencesService } from './user-preferences.service';
import { SearchConfigurationService } from './search-configuration.service';
@NgModule({
imports: [],
declarations: [],
providers: [
AuthenticationService,
AlfrescoApiService,
SettingsService,
ContentService,
AuthGuard,
AuthGuardEcm,
AuthGuardBpm,
AppsProcessService,
PageTitleService,
StorageService,
CookieService,
RenditionsService,
NotificationService,
LogService,
TranslationService,
TranslateLoaderService,
ThumbnailService,
UploadService,
UserPreferencesService,
HighlightTransformService,
DeletedNodesApiService,
FavoritesApiService,
NodesApiService,
PeopleContentService,
PeopleProcessService,
SearchService,
SharedLinksApiService,
SitesService,
DiscoveryApiService,
CommentProcessService,
SearchConfigurationService
],
exports: [
]
})
export class ServiceModule {
}