Compare commits

..

No commits in common. "0d78fa29f3f2b9216107d318a965c08c2b24ecda" and "8ef248b0a72412e4507e56eae963a15922376f2d" have entirely different histories.

23 changed files with 3803 additions and 4355 deletions

View File

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

7725
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -4,15 +4,17 @@
"publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
},
"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",
"dependencies": {
"ngx-openlayers": "1.0.0-next.13",
"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 {
static forRoot(): ModuleWithProviders<AppCommonMapModule> {
static forRoot(): ModuleWithProviders {
return {
ngModule: AppCommonMapModule,
providers: [

View File

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

View File

@ -1,29 +1,28 @@
import { Component, Input, Injectable,Directive} from '@angular/core';
import { Feature } from 'ol';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@Injectable()
@Directive()
export abstract class AbstractFeatureListFeatureComponent {
@Input() feature: Feature
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService,public config:AppConfig) {
}
}
@Injectable()
@Component({
selector: 'fm-map-feature-list-feature',
templateUrl: './feature-list-feature.component.html',
styleUrls: ['./feature-list-feature.component.scss']
})
export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, config:AppConfig) {
super(store, itemTypeService,config);
}
}
import { Component, Input, Injectable} from '@angular/core';
import { Feature } from 'ol';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
@Injectable()
export abstract class AbstractFeatureListFeatureComponent {
@Input() feature: Feature
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService,public config:AppConfig) {
}
}
@Injectable()
@Component({
selector: 'fm-map-feature-list-feature',
templateUrl: './feature-list-feature.component.html',
styleUrls: ['./feature-list-feature.component.scss']
})
export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, config:AppConfig) {
super(store, itemTypeService,config);
}
}

View File

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

View File

@ -1,37 +1,35 @@
import { Component, Input, Injectable,Directive} from '@angular/core';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,IListItem } from '@farmmaps/common';
@Injectable()
@Directive()
export abstract class AbstractItemListItemComponent {
@Input() item: IListItem
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService) {
}
}
@Injectable()
@Directive()
export abstract class AbstractItemWidgetComponent {
@Input() item: IListItem
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService) {
}
}
@Injectable()
@Component({
selector: 'fm-map-item-list-item',
templateUrl: './item-list-item.component.html',
styleUrls: ['./item-list-item.component.scss']
})
export class ItemListItemComponent extends AbstractItemListItemComponent {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService) {
super(store, itemTypeService);
}
}
import { Component, Input, Injectable} from '@angular/core';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers,ItemTypeService,IListItem } from '@farmmaps/common';
@Injectable()
export abstract class AbstractItemListItemComponent {
@Input() item: IListItem
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService) {
}
}
@Injectable()
export abstract class AbstractItemWidgetComponent {
@Input() item: IListItem
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService) {
}
}
@Injectable()
@Component({
selector: 'fm-map-item-list-item',
templateUrl: './item-list-item.component.html',
styleUrls: ['./item-list-item.component.scss']
})
export class ItemListItemComponent extends AbstractItemListItemComponent {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService) {
super(store, itemTypeService);
}
}

View File

@ -1,4 +1,4 @@
import { Component, Input, Injectable, Directive } from '@angular/core';
import { Component, Input, Injectable } from '@angular/core';
import { Location } from '@angular/common';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
@ -8,7 +8,6 @@ import { tassign } from 'tassign';
@Injectable()
@Directive()
export abstract class AbstractItemListComponent {
@Input() items: Array<IListItem>
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);
private setStateCount$:Observable<number> = this.store.select(mapReducers.selectgetSetStateCount);
@ViewChild('map') map;
@ViewChild('map', { static: false }) map;
constructor(private store: Store<mapReducers.State | commonReducers.State>,
private route: ActivatedRoute,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,39 +1,39 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"target": "es2015",
"module": "es2015",
"moduleResolution": "node",
"declaration": true,
"sourceMap": true,
"inlineSources": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"types": [],
"lib": [
"dom",
"es2018"
],
"paths": {
"@angular/*": [
"node_modules/@angular/*"
]
}
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true,
"enableIvy": false
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../../out-tsc/lib",
"target": "es2015",
"module": "es2015",
"moduleResolution": "node",
"declaration": true,
"sourceMap": true,
"inlineSources": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"types": [],
"lib": [
"dom",
"es2018"
],
"paths": {
"@angular/*": [
"node_modules/@angular/*"
]
}
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

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

View File

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

View File

@ -1,17 +1,11 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": []
},
"files": [
"main.ts",
"polyfills.ts"
],
"include": [
"src/**/*.d.ts"
],
"angularCompilerOptions": {
"enableIvy": false
}
}
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}