metadata-editor-workspace
Version:
Metadata Editor Workspace module for ME-Core Powered by Assyst
112 lines (100 loc) • 3.16 kB
text/typescript
import {BrowserModule} from '@angular/platform-browser';
import {FormsModule} from '@angular/forms';
import {HttpModule} from '@angular/http';
import {NgModule, ApplicationRef} from '@angular/core';
import {removeNgStyles, createNewHosts, createInputTransfer} from '@angularclass/hmr';
import {RouterModule, PreloadAllModules} from '@angular/router';
import { MaterialModule } from '@angular/material';
/*
* Platform and Environment providers/directives/pipes
*/
import {ENV_PROVIDERS} from './environment';
import {ROUTES} from './app.routes';
// App is our top level component
import {AppComponent} from './app.component';
import {APP_RESOLVER_PROVIDERS} from './app.resolver';
import {AppState, InternalStateType} from './app.service';
import {NoContentComponent} from './no-content';
import {SharedModule} from './shared/shared.module';
import {TitleBarModule} from './title-bar';
import {WorkspaceModule} from './workspace';
import { ToolBarModule } from './toolbar';
import '../styles/styles.scss';
import '../styles/headings.css';
// Application wide providers
const APP_PROVIDERS = [
...APP_RESOLVER_PROVIDERS,
AppState
];
type StoreType = {
state: InternalStateType,
restoreInputValues: () => void,
disposeOldHosts: () => void
};
/**
* `AppModule` is the main entry point into Angular2's bootstraping process
*/
({
bootstrap: [AppComponent],
declarations: [
AppComponent, NoContentComponent
],
imports: [ // import Angular's modules
BrowserModule,
FormsModule,
HttpModule,
RouterModule.forRoot(ROUTES, {
useHash: true,
preloadingStrategy: PreloadAllModules
}),
SharedModule,
TitleBarModule,
WorkspaceModule,
ToolBarModule
],
providers: [ // expose our Services and Providers into Angular's dependency injection
ENV_PROVIDERS,
APP_PROVIDERS
]
})
export class AppModule {
constructor(public appRef : ApplicationRef, public appState : AppState) {}
public hmrOnInit(store : StoreType) {
if (!store || !store.state) {
return;
}
console.log('HMR store', JSON.stringify(store, null, 2));
// set state
this.appState._state = store.state;
// set input values
if ('restoreInputValues' in store) {
let restoreInputValues = store.restoreInputValues;
setTimeout(restoreInputValues);
}
this
.appRef
.tick();
delete store.state;
delete store.restoreInputValues;
}
public hmrOnDestroy(store : StoreType) {
const cmpLocation = this
.appRef
.components
.map((cmp) => cmp.location.nativeElement);
// save state
const state = this.appState._state;
store.state = state;
// recreate root elements
store.disposeOldHosts = createNewHosts(cmpLocation);
// save input values
store.restoreInputValues = createInputTransfer();
// remove styles
removeNgStyles();
}
public hmrAfterDestroy(store : StoreType) {
// display new elements
store.disposeOldHosts();
delete store.disposeOldHosts;
}
}