Merge branch 'feature/Upgrade_to_angular_9' into develop
All checks were successful
FarmMaps.Develop/FarmMapsLib/develop This commit looks good

This commit is contained in:
Willem Dantuma 2020-04-03 13:52:39 +02:00
commit 0d78fa29f3
23 changed files with 4347 additions and 3795 deletions

View File

@ -13,6 +13,7 @@
"build": { "build": {
"builder": "@angular-devkit/build-angular:browser", "builder": "@angular-devkit/build-angular:browser",
"options": { "options": {
"aot": true,
"outputPath": "dist/farmmaps-lib-app", "outputPath": "dist/farmmaps-lib-app",
"index": "src/index.html", "index": "src/index.html",
"main": "src/main.ts", "main": "src/main.ts",
@ -67,6 +68,10 @@
"type": "initial", "type": "initial",
"maximumWarning": "2mb", "maximumWarning": "2mb",
"maximumError": "7mb" "maximumError": "7mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
} }
] ]
} }
@ -160,7 +165,12 @@
"tsConfig": "projects/common/tsconfig.lib.json", "tsConfig": "projects/common/tsconfig.lib.json",
"project": "projects/common/ng-package.json" "project": "projects/common/ng-package.json"
} }
}, , "configurations": {
"production": {
"tsConfig": "projects/common/tsconfig.lib.prod.json"
}
}
},
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular-devkit/build-angular:karma",
"options": { "options": {
@ -195,7 +205,12 @@
"tsConfig": "projects/common-map/tsconfig.lib.json", "tsConfig": "projects/common-map/tsconfig.lib.json",
"project": "projects/common-map/ng-package.json" "project": "projects/common-map/ng-package.json"
} }
}, , "configurations": {
"production": {
"tsConfig": "projects/common-map/tsconfig.lib.prod.json"
}
}
},
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular-devkit/build-angular:karma",
"options": { "options": {

7709
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -11,55 +11,58 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "~8.2.14", "@angular/animations": "~9.1.0",
"@angular/common": "~8.2.14", "@angular/common": "~9.1.0",
"@angular/compiler": "~8.2.14", "@angular/compiler": "~9.1.0",
"@angular/core": "~8.2.14", "@angular/core": "~9.1.0",
"@angular/forms": "~8.2.14", "@angular/forms": "~9.1.0",
"@angular/platform-browser": "~8.2.14", "@angular/platform-browser": "~9.1.0",
"@angular/platform-browser-dynamic": "~8.2.14", "@angular/platform-browser-dynamic": "~9.1.0",
"@angular/router": "~8.2.14", "@angular/router": "~9.1.0",
"@aspnet/signalr": "^1.1.4", "@aspnet/signalr": "^1.1.4",
"@farmmaps/common": ">=0.0.1-prerelease.226 <0.0.1", "@farmmaps/common": ">=0.0.1-prerelease.226 <0.0.1",
"@farmmaps/common-map": ">=0.0.1-prerelease.226 <0.0.1", "@farmmaps/common-map": ">=0.0.1-prerelease.226 <0.0.1",
"@ng-bootstrap/ng-bootstrap": "^4.2.1", "@ng-bootstrap/ng-bootstrap": "^6.0",
"@ngrx/effects": "^8.6.0", "@ngrx/effects": "^9.0",
"@ngrx/router-store": "^8.6.0", "@ngrx/router-store": "^9.0",
"@ngrx/store": "^8.6.0", "@ngrx/store": "^9.0",
"ngx-uploadx": "^3.3.4", "ngx-uploadx": "^3.3.4",
"angular-oauth2-oidc": "^8.0.2", "angular-oauth2-oidc": "^9.1",
"bootstrap": "^4.4.1", "bootstrap": "^4.4.1",
"core-js": "^2.6.11", "core-js": "^2.6.11",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"ngrx-store-localstorage": "^8.0.0", "ngrx-store-localstorage": "^9.0",
"resumablejs": "^1.1.0", "resumablejs": "^1.1.0",
"rxjs": "^6.5.4", "rxjs": "^6.5.4",
"tassign": "^1.0.0", "tassign": "^1.0.0",
"zone.js": "~0.9.1" "tslib": "^1.10.0",
"zone.js": "~0.10.2",
"minimist": "^1.2.3",
"ol": "6.1.1"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "^0.803.23", "@angular-devkit/build-angular": "~0.901.0",
"@angular-devkit/build-ng-packagr": "^0.803.25", "@angular-devkit/build-ng-packagr": "~0.901.0",
"@angular/cli": "^8.3.25", "@angular/cli": "^9.1.0",
"@angular/compiler-cli": "~8.2.14", "@angular/compiler-cli": "~9.1.0",
"@angular/language-service": "~8.2.14", "@angular/language-service": "~9.1.0",
"@types/jasmine": "~2.8.8", "@types/jasmine": "~2.8.8",
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4", "@types/node": "^12.11.1",
"codelyzer": "^5.2.1", "codelyzer": "^5.1.2",
"jasmine-core": "~2.99.1", "jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1", "jasmine-spec-reporter": "~4.2.1",
"karma": "~4.0.0", "karma": "^4.4.1",
"karma-chrome-launcher": "~2.2.0", "karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1", "karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~1.1.2", "karma-jasmine": "~1.1.2",
"karma-jasmine-html-reporter": "^0.2.2", "karma-jasmine-html-reporter": "^0.2.2",
"ng-packagr": "^5.4.0", "ng-packagr": "^9.0.0",
"protractor": "^5.4.3", "protractor": "^5.4.3",
"ts-node": "~7.0.0", "ts-node": "^8.8.1",
"tsickle": "^0.37.0",
"tslib": "^1.9.0",
"tslint": "~5.11.0", "tslint": "~5.11.0",
"typescript": "~3.5.3" "typescript": "~3.8.3"
} }
} }

View File

@ -48,9 +48,9 @@
"integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU="
}, },
"protocol-buffers-schema": { "protocol-buffers-schema": {
"version": "3.3.2", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz",
"integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==" "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA=="
}, },
"quickselect": { "quickselect": {
"version": "2.0.0", "version": "2.0.0",

View File

@ -4,17 +4,15 @@
"publishConfig": { "publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"dependencies": { "peerDependencies": {
"@angular/core": "^9.1.0",
"ngrx-store-localstorage": "^9.0",
"@ngrx/effects": "^9.0",
"@ngrx/router-store": "^9.0",
"@ngrx/store": "^9.0",
"tassign": "^1.0.0",
"@farmmaps/common": ">=0.0.1-prerelease.181 <0.0.1",
"ngx-openlayers": "1.0.0-next.13", "ngx-openlayers": "1.0.0-next.13",
"ol": "6.1.1" "ol": "6.1.1"
},
"peerDependencies": {
"@angular/core": "^8.2.0",
"ngrx-store-localstorage": "^8.0.0",
"@ngrx/effects": "^8.2",
"@ngrx/router-store": "^8.2",
"@ngrx/store": "^8.2",
"tassign": "^1.0.0",
"@farmmaps/common": ">=0.0.1-prerelease.181 <0.0.1"
} }
} }

View File

@ -251,7 +251,7 @@ export {
export class AppCommonMapModule { export class AppCommonMapModule {
static forRoot(): ModuleWithProviders { static forRoot(): ModuleWithProviders<AppCommonMapModule> {
return { return {
ngModule: AppCommonMapModule, ngModule: AppCommonMapModule,
providers: [ providers: [

View File

@ -20,8 +20,8 @@ import * as style from 'ol/style';
}) })
export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent implements AfterViewInit { export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent implements AfterViewInit {
@ViewChild('canvas', { static: false }) canvas; @ViewChild('canvas') canvas;
@ViewChild('container', { static: false }) container; @ViewChild('container') container;
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) { constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) {
super(store, itemTypeService,config); super(store, itemTypeService,config);

View File

@ -1,4 +1,4 @@
import { Component, Input, Injectable} from '@angular/core'; import { Component, Input, Injectable,Directive} from '@angular/core';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
@ -7,6 +7,7 @@ import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@Injectable() @Injectable()
@Directive()
export abstract class AbstractFeatureListFeatureComponent { export abstract class AbstractFeatureListFeatureComponent {
@Input() feature: Feature @Input() feature: Feature

View File

@ -1,4 +1,4 @@
import { Component, Input, Injectable } from '@angular/core'; import { Component, Input, Injectable,Directive } from '@angular/core';
import { Location } from '@angular/common'; import { Location } from '@angular/common';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
@ -12,6 +12,7 @@ import { IQueryState } from '@farmmaps/common';
@Injectable() @Injectable()
@Directive()
export abstract class AbstractFeatureListComponent { export abstract class AbstractFeatureListComponent {
@Input() features: Array<Feature>; @Input() features: Array<Feature>;
@Input() queryState: IQueryState; @Input() queryState: IQueryState;

View File

@ -1,4 +1,4 @@
import { Component, Input, Injectable} from '@angular/core'; import { Component, Input, Injectable,Directive} from '@angular/core';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,IListItem } from '@farmmaps/common'; import { commonReducers,ItemTypeService,IListItem } from '@farmmaps/common';
@ -6,6 +6,7 @@ import { commonReducers,ItemTypeService,IListItem } from '@farmmaps/common';
@Injectable() @Injectable()
@Directive()
export abstract class AbstractItemListItemComponent { export abstract class AbstractItemListItemComponent {
@Input() item: IListItem @Input() item: IListItem
@ -14,6 +15,7 @@ export abstract class AbstractItemListItemComponent {
} }
@Injectable() @Injectable()
@Directive()
export abstract class AbstractItemWidgetComponent { export abstract class AbstractItemWidgetComponent {
@Input() item: IListItem @Input() item: IListItem

View File

@ -1,4 +1,4 @@
import { Component, Input, Injectable } from '@angular/core'; import { Component, Input, Injectable, Directive } from '@angular/core';
import { Location } from '@angular/common'; import { Location } from '@angular/common';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
@ -8,6 +8,7 @@ import { tassign } from 'tassign';
@Injectable() @Injectable()
@Directive()
export abstract class AbstractItemListComponent { export abstract class AbstractItemListComponent {
@Input() items: Array<IListItem> @Input() items: Array<IListItem>
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location) { constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location) {

View File

@ -79,7 +79,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
public styles$:Observable<IStyles> = this.store.select(mapReducers.selectGetStyles); public styles$:Observable<IStyles> = this.store.select(mapReducers.selectGetStyles);
private setStateCount$:Observable<number> = this.store.select(mapReducers.selectgetSetStateCount); private setStateCount$:Observable<number> = this.store.select(mapReducers.selectgetSetStateCount);
@ViewChild('map', { static: false }) map; @ViewChild('map') map;
constructor(private store: Store<mapReducers.State | commonReducers.State>, constructor(private store: Store<mapReducers.State | commonReducers.State>,
private route: ActivatedRoute, private route: ActivatedRoute,

View File

@ -1,4 +1,4 @@
import {Component, Injectable, Input} from '@angular/core'; import {Component, Injectable, Input, Directive} from '@angular/core';
import {Location} from '@angular/common'; import {Location} from '@angular/common';
import {Store} from '@ngrx/store'; import {Store} from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer'; import * as mapReducers from '../../reducers/map.reducer';
@ -9,6 +9,7 @@ import { IItemLayer } from '../../models/item.layer';
@Injectable() @Injectable()
@Directive()
export abstract class AbstractSelectedItemComponent { export abstract class AbstractSelectedItemComponent {
@Input() item: IItem @Input() item: IItem
@Input() itemLayer: IItemLayer; @Input() itemLayer: IItemLayer;

View File

@ -18,12 +18,12 @@
] ]
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true, "skipTemplateCodegen": true,
"strictMetadataEmit": true, "strictMetadataEmit": true,
"fullTemplateTypeCheck": true, "fullTemplateTypeCheck": true,
"strictInjectionParameters": true, "strictInjectionParameters": true,
"enableResourceInlining": true "enableResourceInlining": true,
"enableIvy": false
}, },
"exclude": [ "exclude": [
"src/test.ts", "src/test.ts",

View File

@ -5,18 +5,18 @@
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"peerDependencies": { "peerDependencies": {
"@ng-bootstrap/ng-bootstrap": "^4.2.1", "@ng-bootstrap/ng-bootstrap": "^6.0",
"@angular/common": "^8.2.0", "@angular/common": "~9.1.0",
"@angular/core": "^8.2.0", "@angular/core": "~9.1.0",
"@angular/forms": "^8.2.0", "@angular/forms": "~9.1.0",
"@ngrx/effects": "^8.2", "@ngrx/effects": "^9.0",
"@ngrx/router-store": "^8.2", "@ngrx/router-store": "^9.0",
"@ngrx/store": "^8.2", "@ngrx/store": "^9.0",
"tassign": "^1.0.0", "tassign": "^1.0.0",
"bootstrap": "^4.3.1", "bootstrap": "^4.4.1",
"@aspnet/signalr": "^1.1.4", "@aspnet/signalr": "^1.1.4",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"ngx-uploadx": "^3.3.2", "ngx-uploadx": "^3.3.4",
"angular-oauth2-oidc": "^8.0.2" "angular-oauth2-oidc": "^9.1"
} }
} }

View File

@ -62,7 +62,7 @@ export class AppCommonServiceModule {
'AppCommonServiceModule is already loaded. Import it in the AppModule only'); 'AppCommonServiceModule is already loaded. Import it in the AppModule only');
} }
} }
static forRoot(): ModuleWithProviders { static forRoot(): ModuleWithProviders<AppCommonServiceModule> {
return { return {
ngModule: AppCommonServiceModule, ngModule: AppCommonServiceModule,
providers: [ providers: [

View File

@ -13,7 +13,7 @@ export class SidePanelComponent implements OnChanges {
@Input() public collapsable: boolean; @Input() public collapsable: boolean;
@Input() public resizeable: boolean = false; @Input() public resizeable: boolean = false;
@Input() public left: boolean = false; @Input() public left: boolean = false;
@ViewChild("resizeGrip", { static: false }) elementView: ElementRef; @ViewChild("resizeGrip") elementView: ElementRef;
public mobile:boolean = true; public mobile:boolean = true;
private parentHeight:number = 0; private parentHeight:number = 0;
public top = "100%"; public top = "100%";

View File

@ -38,24 +38,19 @@ export class AuthGuard implements CanActivate, CanLoad, CanActivateChild {
checkLogin(url: string): boolean { checkLogin(url: string): boolean {
if (!this.oauthService.hasValidAccessToken()) { if (!this.oauthService.hasValidAccessToken()) {
this.oauthService.responseType if(this.oauthService.getRefreshToken() != null ) {
if(this.oauthService.responseType == "code") this.oauthService.refreshToken().then(() => {
if(this.oauthService.getRefreshToken() != null ) { this.store.dispatch(new appCommonActions.InitUser());
this.oauthService.refreshToken().then(() => { return true;
this.store.dispatch(new appCommonActions.InitUser()); }).catch(() => {
return true;
}).catch(() => {
this.oauthService.initCodeFlow(url);
return false;
}
)
} else {
this.oauthService.initCodeFlow(url); this.oauthService.initCodeFlow(url);
return false; return false;
} }
else )
this.oauthService.initImplicitFlow(url); } else {
this.oauthService.initCodeFlow(url);
return false; return false;
}
} else { } else {
this.store.dispatch(new appCommonActions.InitUser()); this.store.dispatch(new appCommonActions.InitUser());
return true; return true;

View File

@ -1,7 +1,7 @@
import { Injector } from '@angular/core'; import { Injector } from '@angular/core';
import { Location} from '@angular/common'; import { Location} from '@angular/common';
import { Router,UrlSerializer } from '@angular/router'; import { Router,UrlSerializer } from '@angular/router';
import { AuthConfig, OAuthService, JwksValidationHandler, OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc'; import { AuthConfig, OAuthService, OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';
import { AppConfig } from "./app.config"; import { AppConfig } from "./app.config";
import {ItemTypeService} from '../services/itemtype.service'; import {ItemTypeService} from '../services/itemtype.service';
import { IAuthconfigFactory } from './authconfigFactory'; import { IAuthconfigFactory } from './authconfigFactory';
@ -26,21 +26,12 @@ export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthS
}); });
oauthService.configure(authconfigFactory.getAuthConfig(appConfig)); oauthService.configure(authconfigFactory.getAuthConfig(appConfig));
oauthService.setStorage(authStorage); oauthService.setStorage(authStorage);
oauthService.tokenValidationHandler = new JwksValidationHandler();
oauthService.tokenValidationHandler.validateAtHash = function () {
return new Promise<boolean>((res) => { res(true); })
};
oauthService.setupAutomaticSilentRefresh(); oauthService.setupAutomaticSilentRefresh();
let location = injector.get(Location); let location = injector.get(Location);
let router = injector.get(Router); let router = injector.get(Router);
let urlPath = location.path();
oauthService.loadDiscoveryDocument().then(() => { oauthService.loadDiscoveryDocument().then(() => {
oauthService.tryLogin({ oauthService.tryLoginCodeFlow().then(() => {
onTokenReceived: (info) => { router.navigateByUrl(decodeURIComponent(oauthService.state));
urlPath = info.state;
}
}).then(() => {
router.navigateByUrl(urlPath);
}); });
}) })
}).then(() => { }).then(() => {

View File

@ -25,12 +25,12 @@
} }
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true, "skipTemplateCodegen": true,
"strictMetadataEmit": true, "strictMetadataEmit": true,
"fullTemplateTypeCheck": true, "fullTemplateTypeCheck": true,
"strictInjectionParameters": true, "strictInjectionParameters": true,
"enableResourceInlining": true "enableResourceInlining": true,
"enableIvy": false
}, },
"exclude": [ "exclude": [
"src/test.ts", "src/test.ts",

View File

@ -61,7 +61,12 @@ export function provideBootstrapEffects(effects: Type<any>[]) {
AppCommonServiceModule.forRoot(), AppCommonServiceModule.forRoot(),
AppCommonMapModule.forRoot(), AppCommonMapModule.forRoot(),
BrowserModule, BrowserModule,
StoreModule.forRoot({}), StoreModule.forRoot({},{runtimeChecks: { // TODO fix this should all be true
strictStateImmutability: false,
strictActionImmutability: false,
strictStateSerializability: false,
strictActionSerializability: false
}}),
EffectsModule.forRoot([]) EffectsModule.forRoot([])
], ],
providers: [ providers: [

View File

@ -1,6 +1,8 @@
import { IAuthconfigFactory, AppConfig } from '@farmmaps/common'; import { IAuthconfigFactory, AppConfig } from '@farmmaps/common';
import { AuthConfig } from 'angular-oauth2-oidc'; import { AuthConfig } from 'angular-oauth2-oidc';
import { Injectable } from "@angular/core";
@Injectable()
export class Id4AuthconfigFactory implements IAuthconfigFactory { export class Id4AuthconfigFactory implements IAuthconfigFactory {
constructor() { constructor() {

View File

@ -4,8 +4,14 @@
"outDir": "../out-tsc/app", "outDir": "../out-tsc/app",
"types": [] "types": []
}, },
"exclude": [ "files": [
"test.ts", "main.ts",
"**/*.spec.ts" "polyfills.ts"
] ],
"include": [
"src/**/*.d.ts"
],
"angularCompilerOptions": {
"enableIvy": false
}
} }