[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

@@ -18,6 +18,11 @@
"input": "../resources", "input": "../resources",
"output": "./resources" "output": "./resources"
}, },
{
"glob": "**/*",
"input": "./app/components/lazy-loading/i18n",
"output": "./resources/lazy-loading/i18n"
},
{ {
"glob": "**/*", "glob": "**/*",
"input": "../node_modules/@alfresco/adf-core/prebuilt-themes", "input": "../node_modules/@alfresco/adf-core/prebuilt-themes",
@@ -90,6 +95,11 @@
"input": "../resources", "input": "../resources",
"output": "./resources" "output": "./resources"
}, },
{
"glob": "**/*",
"input": "./app/components/lazy-loading/i18n",
"output": "./resources/lazy-loading/i18n"
},
{ {
"glob": "**/*", "glob": "**/*",
"input": "../../lib/core/prebuilt-themes", "input": "../../lib/core/prebuilt-themes",

View File

@@ -17,6 +17,7 @@
"LOGIN": "Login", "LOGIN": "Login",
"CUSTOM_SOURCES": "Custom Sources", "CUSTOM_SOURCES": "Custom Sources",
"DATATABLE": "Datatable", "DATATABLE": "Datatable",
"DATATABLE_LAZY": "Datatable (Lazy)",
"FORM": "Form", "FORM": "Form",
"FORM_LIST": "Form List", "FORM_LIST": "Form List",
"UPLOADER": "Uploader", "UPLOADER": "Uploader",

View File

@@ -4,7 +4,7 @@ import { FormsModule } from '@angular/forms';
import { FlexLayoutModule } from '@angular/flex-layout'; import { FlexLayoutModule } from '@angular/flex-layout';
import { ChartsModule } from 'ng2-charts'; import { ChartsModule } from 'ng2-charts';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { TranslateService } from '@ngx-translate/core'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { AppConfigService, TRANSLATION_PROVIDER } from '@alfresco/adf-core'; import { AppConfigService, TRANSLATION_PROVIDER } from '@alfresco/adf-core';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
@@ -40,7 +40,6 @@ import { ThemePickerModule } from './components/theme-picker/theme-picker';
import { DebugAppConfigService } from './services/debug-app-config.service'; import { DebugAppConfigService } from './services/debug-app-config.service';
import { routing } from './app.routes'; import { routing } from './app.routes';
import { TranslateModule } from '@ngx-translate/core';
import { ReactiveFormsModule } from '@angular/forms'; import { ReactiveFormsModule } from '@angular/forms';
import { TaskAttachmentsComponent } from './components/process-service/task-attachments.component'; import { TaskAttachmentsComponent } from './components/process-service/task-attachments.component';
import { ProcessAttachmentsComponent } from './components/process-service/process-attachments.component'; import { ProcessAttachmentsComponent } from './components/process-service/process-attachments.component';
@@ -49,8 +48,8 @@ import { SharedLinkViewComponent } from './components/shared-link-view/shared-li
@NgModule({ @NgModule({
imports: [ imports: [
BrowserAnimationsModule,
ReactiveFormsModule, ReactiveFormsModule,
TranslateModule,
BrowserModule, BrowserModule,
routing, routing,
FormsModule, FormsModule,
@@ -92,7 +91,6 @@ import { SharedLinkViewComponent } from './components/shared-link-view/shared-li
SharedLinkViewComponent SharedLinkViewComponent
], ],
providers: [ providers: [
TranslateService,
{ provide: AppConfigService, useClass: DebugAppConfigService }, { provide: AppConfigService, useClass: DebugAppConfigService },
{ {
provide: TRANSLATION_PROVIDER, provide: TRANSLATION_PROVIDER,
@@ -101,6 +99,14 @@ import { SharedLinkViewComponent } from './components/shared-link-view/shared-li
name: 'app', name: 'app',
source: 'resources' source: 'resources'
} }
},
{
provide: TRANSLATION_PROVIDER,
multi: true,
useValue: {
name: 'lazy-loading',
source: 'resources/lazy-loading'
}
} }
], ],
entryComponents: [ entryComponents: [

View File

@@ -166,6 +166,10 @@ export const appRoutes: Routes = [
path: 'overlay-viewer', path: 'overlay-viewer',
component: OverlayViewerComponent, component: OverlayViewerComponent,
canActivate: [AuthGuardEcm] canActivate: [AuthGuardEcm]
},
{
path: 'datatable-lazy',
loadChildren: 'app/components/lazy-loading/lazy-loading.module#LazyLoadingModule'
} }
] ]
} }

View File

@@ -34,6 +34,7 @@ export class AppLayoutComponent {
{ href: '/login', icon: 'vpn_key', title: 'APP_LAYOUT.LOGIN' }, { href: '/login', icon: 'vpn_key', title: 'APP_LAYOUT.LOGIN' },
{ href: '/dl-custom-sources', icon: 'extension', title: 'APP_LAYOUT.CUSTOM_SOURCES' }, { href: '/dl-custom-sources', icon: 'extension', title: 'APP_LAYOUT.CUSTOM_SOURCES' },
{ href: '/datatable', icon: 'view_module', title: 'APP_LAYOUT.DATATABLE' }, { href: '/datatable', icon: 'view_module', title: 'APP_LAYOUT.DATATABLE' },
{ href: '/datatable-lazy', icon: 'view_module', title: 'APP_LAYOUT.DATATABLE_LAZY' },
{ href: '/form', icon: 'poll', title: 'APP_LAYOUT.FORM' }, { href: '/form', icon: 'poll', title: 'APP_LAYOUT.FORM' },
{ href: '/form-list', icon: 'library_books', title: 'APP_LAYOUT.FORM_LIST' }, { href: '/form-list', icon: 'library_books', title: 'APP_LAYOUT.FORM_LIST' },
{ href: '/uploader', icon: 'file_upload', title: 'APP_LAYOUT.UPLOADER' }, { href: '/uploader', icon: 'file_upload', title: 'APP_LAYOUT.UPLOADER' },

View File

@@ -0,0 +1,5 @@
{
"LAZY": {
"TEXT": "Text from lazy component resources"
}
}

View File

@@ -0,0 +1,54 @@
import { Component } from '@angular/core';
import { ObjectDataTableAdapter, AuthenticationService } from '@alfresco/adf-core';
@Component({
selector: 'app-lazy-component',
template: `
<adf-datatable [data]="data"></adf-datatable>
<ul>
<li>Global i18n: {{ 'APP_LAYOUT.DATATABLE_LAZY' | translate }}</li>
<li>Local i18n (work in progress): {{ 'LAZY.TEXT' | translate }}</li>
<li>isLoggedIn: {{ isLoggedIn }}</li>
<li>ECM username: {{ username }}
</ul>
`
})
export class LazyLoadingComponent {
data: ObjectDataTableAdapter;
get isLoggedIn(): boolean {
return this.auth.isLoggedIn();
}
get username(): string {
return this.auth.getEcmUsername();
}
constructor(private auth: AuthenticationService) {
this.data = new ObjectDataTableAdapter(
// data
[
{id: 1, name: 'Name 1'},
{id: 2, name: 'Name 2'}
],
// schema
[
{
type: 'text',
key: 'id',
title: 'Id',
sortable: true
},
{
type: 'text',
key: 'name',
title: 'Name',
cssClass: 'full-width',
sortable: true
}
]
);
}
}

View File

@@ -0,0 +1,19 @@
import { NgModule } from '@angular/core';
import { CoreModule, TranslationService } from '@alfresco/adf-core';
import { LazyLoadingRoutes } from './lazy-loading.routes';
import { LazyLoadingComponent } from './lazy-loading.component';
@NgModule({
imports: [
CoreModule.forChild(),
LazyLoadingRoutes
],
declarations: [
LazyLoadingComponent
]
})
export class LazyLoadingModule {
constructor(translation: TranslationService) {
}
}

View File

@@ -0,0 +1,21 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { LazyLoadingComponent } from './lazy-loading.component';
export const routes: Routes = [
{
path: '',
component: LazyLoadingComponent
}
];
@NgModule({
imports: [
RouterModule.forChild(routes)
],
exports: [
RouterModule
]
})
export class LazyLoadingRoutes {
}

View File

@@ -17,6 +17,7 @@ var appContext = require.context(".", true, /.spec.ts/);appContext.keys().forEac
const TestBed = require('@angular/core/testing').TestBed; const TestBed = require('@angular/core/testing').TestBed;
const browser = require('@angular/platform-browser-dynamic/testing'); const browser = require('@angular/platform-browser-dynamic/testing');
const NoopAnimationsModule = require('@angular/platform-browser/animations').NoopAnimationsModule;
const CoreModule = require('@alfresco/adf-core').CoreModule; const CoreModule = require('@alfresco/adf-core').CoreModule;
const AppConfigService = require('@alfresco/adf-core').AppConfigService; const AppConfigService = require('@alfresco/adf-core').AppConfigService;
const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock; const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock;
@@ -31,7 +32,14 @@ TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platfor
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [CoreModule, TranslateModule, CommonModule, FormsModule, ReactiveFormsModule], imports: [
NoopAnimationsModule,
CoreModule,
TranslateModule,
CommonModule,
FormsModule,
ReactiveFormsModule
],
providers: [ providers: [
{provide: AppConfigService, useClass: AppConfigServiceMock}, {provide: AppConfigService, useClass: AppConfigServiceMock},
{provide: TranslationService, useClass: TranslationMock} {provide: TranslationService, useClass: TranslationMock}

View File

@@ -18,7 +18,6 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core'; import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core';
import { MaterialModule } from './material.module'; import { MaterialModule } from './material.module';
@@ -47,7 +46,6 @@ import { ContentMetadataModule } from './content-metadata/content-metadata.modul
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
SearchModule, SearchModule,
BrowserAnimationsModule,
DocumentListModule, DocumentListModule,
UploadModule, UploadModule,
MaterialModule, MaterialModule,

View File

@@ -13,10 +13,12 @@ require('zone.js/dist/fake-async-test');
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
var appContext = require.context(".", true, /.spec.ts/);appContext.keys().forEach(appContext); var appContext = require.context(".", true, /.spec.ts/);
appContext.keys().forEach(appContext);
const TestBed = require('@angular/core/testing').TestBed; const TestBed = require('@angular/core/testing').TestBed;
const browser = require('@angular/platform-browser-dynamic/testing'); const browser = require('@angular/platform-browser-dynamic/testing');
const NoopAnimationsModule = require('@angular/platform-browser/animations').NoopAnimationsModule;
const CoreModule = require('@alfresco/adf-core').CoreModule; const CoreModule = require('@alfresco/adf-core').CoreModule;
const AppConfigService = require('@alfresco/adf-core').AppConfigService; const AppConfigService = require('@alfresco/adf-core').AppConfigService;
const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock; const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock;
@@ -29,7 +31,10 @@ patchTestBedToDestroyFixturesAfterEveryTest(TestBed);
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [CoreModule], imports: [
NoopAnimationsModule,
CoreModule.forRoot()
],
providers: [ providers: [
{provide: AppConfigService, useClass: AppConfigServiceMock}, {provide: AppConfigService, useClass: AppConfigServiceMock},
{provide: TranslationService, useClass: TranslationMock} {provide: TranslationService, useClass: TranslationMock}

View File

@@ -17,7 +17,6 @@
import { DebugElement } from '@angular/core'; import { DebugElement } from '@angular/core';
import { async, discardPeriodicTasks, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing'; import { async, discardPeriodicTasks, fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { MaterialModule } from '../../material.module'; import { MaterialModule } from '../../material.module';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
import { AuthenticationService, SearchService } from '@alfresco/adf-core'; import { AuthenticationService, SearchService } from '@alfresco/adf-core';
@@ -40,8 +39,7 @@ describe('SearchControlComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [ imports: [
MaterialModule, MaterialModule
NoopAnimationsModule
], ],
declarations: [ declarations: [
SearchControlComponent, SearchControlComponent,

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 { CardViewMapItemComponent } from './components/card-view-mapitem/card-view-mapitem.component';
import { CardViewTextItemComponent } from './components/card-view-textitem/card-view-textitem.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({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
@@ -77,10 +74,6 @@ import { CardViewUpdateService } from './services/card-view-update.service';
CardViewDateItemComponent, CardViewDateItemComponent,
CardViewMapItemComponent, CardViewMapItemComponent,
CardViewTextItemComponent CardViewTextItemComponent
],
providers: [
CardItemTypeService,
CardViewUpdateService
] ]
}) })
export class CardViewModule {} export class CardViewModule {}

View File

@@ -17,15 +17,12 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { HttpClient, HttpClientModule } from '@angular/common/http'; 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 { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateStore } from '@ngx-translate/core/src/translate.store';
import { TRANSLATION_PROVIDER, TranslationService } from './services/translation.service';
import { MaterialModule } from './material.module'; import { MaterialModule } from './material.module';
import { AppConfigModule } from './app-config/app-config.module'; import { AppConfigModule } from './app-config/app-config.module';
import { CardViewModule } from './card-view/card-view.module'; import { CardViewModule } from './card-view/card-view.module';
import { CollapsableModule } from './collapsable/collapsable.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 { DirectiveModule } from './directives/directive.module';
import { PipeModule } from './pipes/pipe.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 { 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 { 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) { export function createTranslateLoader(http: HttpClient, logService: LogService) {
return new TranslateLoaderService(http, logService); return new TranslateLoaderService(http, logService);
} }
@NgModule({ export function modules() {
imports: [ return [
ViewerModule, ViewerModule,
SideBarActionModule, SideBarActionModule,
PipeModule, PipeModule,
@@ -63,7 +91,6 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
HttpClientModule, HttpClientModule,
BrowserAnimationsModule,
HostSettingsModule, HostSettingsModule,
UserInfoModule, UserInfoModule,
MaterialModule, MaterialModule,
@@ -73,8 +100,75 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
ContextMenuModule, ContextMenuModule,
CardViewModule, CardViewModule,
CollapsableModule, CollapsableModule,
ServiceModule,
FormModule, 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({ TranslateModule.forRoot({
loader: { loader: {
provide: TranslateLoader, provide: TranslateLoader,
@@ -83,6 +177,10 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
} }
}) })
], ],
exports: [
...modules(),
TranslateModule
],
providers: [ providers: [
{ {
provide: TRANSLATION_PROVIDER, provide: TRANSLATION_PROVIDER,
@@ -92,35 +190,31 @@ export function createTranslateLoader(http: HttpClient, logService: LogService)
source: 'assets/adf-core' source: 'assets/adf-core'
} }
}, },
TranslationService ...providers()
],
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
] ]
}) })
export class CoreModule { 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 './form/form.module';
export * from './pipes/pipe.module'; export * from './pipes/pipe.module';
export * from './services/service.module';
export * from './directives/directive.module'; export * from './directives/directive.module';
export * from './viewer'; export * from './viewer';

View File

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

View File

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

View File

@@ -18,7 +18,6 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core'; import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core';
import { DiagramsModule } from './diagram/diagram.module'; import { DiagramsModule } from './diagram/diagram.module';
@@ -32,7 +31,6 @@ import { MaterialModule } from './material.module';
CommonModule, CommonModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
BrowserAnimationsModule,
MaterialModule, MaterialModule,
DiagramsModule, DiagramsModule,
AnalyticsProcessModule AnalyticsProcessModule
@@ -52,7 +50,7 @@ import { MaterialModule } from './material.module';
CommonModule, CommonModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
BrowserAnimationsModule, MaterialModule,
DiagramsModule, DiagramsModule,
AnalyticsProcessModule AnalyticsProcessModule
] ]

View File

@@ -13,10 +13,12 @@ require('zone.js/dist/fake-async-test');
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
var appContext = require.context(".", true, /.spec.ts/);appContext.keys().forEach(appContext); var appContext = require.context(".", true, /.spec.ts/);
appContext.keys().forEach(appContext);
const TestBed = require('@angular/core/testing').TestBed; const TestBed = require('@angular/core/testing').TestBed;
const browser = require('@angular/platform-browser-dynamic/testing'); const browser = require('@angular/platform-browser-dynamic/testing');
const NoopAnimationsModule = require('@angular/platform-browser/animations').NoopAnimationsModule;
const CoreModule = require('@alfresco/adf-core').CoreModule; const CoreModule = require('@alfresco/adf-core').CoreModule;
const AppConfigService = require('@alfresco/adf-core').AppConfigService; const AppConfigService = require('@alfresco/adf-core').AppConfigService;
const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock; const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock;
@@ -29,7 +31,10 @@ patchTestBedToDestroyFixturesAfterEveryTest(TestBed);
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [CoreModule], imports: [
NoopAnimationsModule,
CoreModule.forRoot()
],
providers: [ providers: [
{provide: AppConfigService, useClass: AppConfigServiceMock}, {provide: AppConfigService, useClass: AppConfigServiceMock},
{provide: TranslationService, useClass: TranslationMock} {provide: TranslationService, useClass: TranslationMock}

View File

@@ -13,10 +13,12 @@ require('zone.js/dist/fake-async-test');
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
var appContext = require.context(".", true, /.spec.ts/);appContext.keys().forEach(appContext); var appContext = require.context(".", true, /.spec.ts/);
appContext.keys().forEach(appContext);
const TestBed = require('@angular/core/testing').TestBed; const TestBed = require('@angular/core/testing').TestBed;
const browser = require('@angular/platform-browser-dynamic/testing'); const browser = require('@angular/platform-browser-dynamic/testing');
const NoopAnimationsModule = require('@angular/platform-browser/animations').NoopAnimationsModule;
const CoreModule = require('@alfresco/adf-core').CoreModule; const CoreModule = require('@alfresco/adf-core').CoreModule;
const AppConfigService = require('@alfresco/adf-core').AppConfigService; const AppConfigService = require('@alfresco/adf-core').AppConfigService;
const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock; const AppConfigServiceMock = require('@alfresco/adf-core').AppConfigServiceMock;
@@ -31,7 +33,14 @@ TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platfor
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [CoreModule, TranslateModule, CommonModule, FormsModule, ReactiveFormsModule], imports: [
NoopAnimationsModule,
CoreModule.forRoot(),
TranslateModule,
CommonModule,
FormsModule,
ReactiveFormsModule
],
providers: [ providers: [
{provide: AppConfigService, useClass: AppConfigServiceMock}, {provide: AppConfigService, useClass: AppConfigServiceMock},
{provide: TranslationService, useClass: TranslationMock} {provide: TranslationService, useClass: TranslationMock}

View File

@@ -18,7 +18,6 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core'; import { CoreModule, TRANSLATION_PROVIDER } from '@alfresco/adf-core';
import { MaterialModule } from './material.module'; import { MaterialModule } from './material.module';
@@ -37,7 +36,6 @@ import { PeopleModule } from './people/people.module';
CommentsModule, CommentsModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
BrowserAnimationsModule,
MaterialModule, MaterialModule,
ProcessListModule, ProcessListModule,
TaskListModule, TaskListModule,
@@ -60,7 +58,6 @@ import { PeopleModule } from './people/people.module';
CommentsModule, CommentsModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
BrowserAnimationsModule,
ProcessListModule, ProcessListModule,
TaskListModule, TaskListModule,
AppsListModule, AppsListModule,