Compare commits
	
		
			6 Commits
		
	
	
		
			2023.03
			...
			945d88839f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 945d88839f | |||
| 7c06343909 | |||
| b8f8f27794 | |||
| 2a31771ac6 | |||
| 19dce51a28 | |||
| b29cd8e4c9 | 
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 143 KiB  | 
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -51,7 +51,17 @@
 | 
			
		||||
  content: "i";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
hallo
 | 
			
		||||
.fm-carbon:before {
 | 
			
		||||
  content: "j";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fm-bo-akkerbouw:before {
 | 
			
		||||
  content: "k";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.fm-grass:before {
 | 
			
		||||
  content: "l";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: "FarmMaps";
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "farmmaps-lib-app",
 | 
			
		||||
  "version": "3.0.2",
 | 
			
		||||
  "version": "3.2.0",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "ng": "ng",
 | 
			
		||||
    "start": "ng serve",
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
      this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query,mapState]) =>{
 | 
			
		||||
        if(query && query.querystate) {
 | 
			
		||||
          let newQueryState = tassign(mapReducers.initialQueryState);
 | 
			
		||||
          console.debug(`Do Query`);
 | 
			
		||||
          //console.debug(`Do Query`);
 | 
			
		||||
          const urlparts=[];
 | 
			
		||||
          if (query.querystate.itemCode && query.querystate.itemCode != "") {
 | 
			
		||||
            if(query.querystate.itemType && query.querystate.itemType!= "") {
 | 
			
		||||
@@ -242,7 +242,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {    
 | 
			
		||||
    this.initialized = false;
 | 
			
		||||
    console.debug("Init");
 | 
			
		||||
    //console.debug("Init");
 | 
			
		||||
    this.store.dispatch(new mapActions.Clear());
 | 
			
		||||
    this.selectedFeatures$.next({x:0,y:0,features:[]});
 | 
			
		||||
    this.selectedFeatures$.next(null);
 | 
			
		||||
@@ -314,7 +314,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngAfterViewInit() {
 | 
			
		||||
    console.debug("View init");
 | 
			
		||||
    //console.debug("View init");
 | 
			
		||||
    this.noContent=true;
 | 
			
		||||
    this.route.children.forEach((entry) => {
 | 
			
		||||
      if(entry.outlet=="primary") {
 | 
			
		||||
@@ -348,7 +348,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
      })).subscribe((action) => {
 | 
			
		||||
        if(action) {
 | 
			
		||||
          this.zone.run(() => {
 | 
			
		||||
            console.debug("Url to state");
 | 
			
		||||
            //console.debug("Url to state");
 | 
			
		||||
            this.store.dispatch(action);
 | 
			
		||||
          });
 | 
			
		||||
        }
 | 
			
		||||
@@ -367,7 +367,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
      }
 | 
			
		||||
      })).subscribe((newUrlState) =>{
 | 
			
		||||
        if(newUrlState) {
 | 
			
		||||
          console.debug(`State to url`);
 | 
			
		||||
          //console.debug(`State to url`);
 | 
			
		||||
          this.replaceUrl(newUrlState.mapState,newUrlState.queryState,newUrlState.replaceUrl);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
@@ -425,7 +425,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
          parts.push(mapState.baseLayerCode);
 | 
			
		||||
          parts.push( this.serializeService.serialize(queryState));
 | 
			
		||||
          
 | 
			
		||||
          console.debug("Replace url",parts);
 | 
			
		||||
          //console.debug("Replace url",parts);
 | 
			
		||||
          this.router.navigate(parts, { replaceUrl: replace,relativeTo:this.route.parent });
 | 
			
		||||
        }  
 | 
			
		||||
      }     
 | 
			
		||||
@@ -434,7 +434,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
  handleOnMoveEnd(event) {    
 | 
			
		||||
    if(this.initialized && this.viewEnabled) {
 | 
			
		||||
      this.zone.run(() =>{
 | 
			
		||||
        console.debug("Move end");
 | 
			
		||||
        //console.debug("Move end");
 | 
			
		||||
        const map = event.map;
 | 
			
		||||
        const view = map.getView();
 | 
			
		||||
        const rotation = view.getRotation();
 | 
			
		||||
@@ -443,7 +443,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
 | 
			
		||||
        const viewExtent = view.calculateExtent(this.map.instance.getSize());
 | 
			
		||||
        const mapState: IMapState = { xCenter: center[0], yCenter: center[1], zoom: zoom, rotation: rotation, baseLayerCode: null };
 | 
			
		||||
        const state = { mapState: mapState, viewExtent: viewExtent };
 | 
			
		||||
        console.debug("Center: ",center[0],center[1] );
 | 
			
		||||
        //console.debug("Center: ",center[0],center[1] );
 | 
			
		||||
        const source = from([state]);
 | 
			
		||||
        source.pipe(withLatestFrom(this.selectedBaseLayer$)).subscribe(([state, baselayer]) => {
 | 
			
		||||
          if (mapState && baselayer) { // do not react on first move
 | 
			
		||||
 
 | 
			
		||||
@@ -126,7 +126,7 @@ export class InitUserSettingsRoot implements Action {
 | 
			
		||||
export class InitUserSettingsRootSuccess implements Action {
 | 
			
		||||
  readonly type = INITUSERSETTINGSROOTSUCCESS;
 | 
			
		||||
 | 
			
		||||
  constructor(public item: IItem ) { }
 | 
			
		||||
  constructor(public item: IListItem ) { }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class InitRoot implements Action {
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ export class AppComponent implements OnInit, OnDestroy {
 | 
			
		||||
 | 
			
		||||
  getActionFromEvent(event: IEventMessage): Action {
 | 
			
		||||
    let action: Action = null;
 | 
			
		||||
    console.debug(`${event.eventType} Event received`);
 | 
			
		||||
    //console.debug(`${event.eventType} Event received`);
 | 
			
		||||
    switch (event.eventType) {
 | 
			
		||||
      case "ItemChanged": {
 | 
			
		||||
        action = new commonActions.ItemChangedEvent(event.itemCode, event.attributes);
 | 
			
		||||
@@ -146,12 +146,12 @@ export class AppComponent implements OnInit, OnDestroy {
 | 
			
		||||
  private InstallAuthenticationEventHandler() {
 | 
			
		||||
    // auth event handler
 | 
			
		||||
    this.oauthService$.events.subscribe((event) => {
 | 
			
		||||
      console.debug(event.type);
 | 
			
		||||
      //console.debug(event.type);
 | 
			
		||||
      if (event.type == 'token_error' || event.type == 'silent_refresh_timeout' || event.type == 'logout') {
 | 
			
		||||
        const e = event as OAuthErrorEvent;
 | 
			
		||||
        const p = e.params as any;
 | 
			
		||||
        if (event.type == 'silent_refresh_timeout' || event.type == 'logout' || (p.error && p.error == 'login_required')) {
 | 
			
		||||
          console.debug("Session expired");
 | 
			
		||||
          //console.debug("Session expired");
 | 
			
		||||
          this.router.navigate(['loggedout'], { queryParams: { redirectTo: this.router.url } });
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -85,9 +85,8 @@ export class AppCommonEffects {
 | 
			
		||||
  
 | 
			
		||||
  initUserSettingsRoot$ =  createEffect(() => this.actions$.pipe(
 | 
			
		||||
    ofType(appCommonActions.INITUSERSETTINGSROOT),
 | 
			
		||||
    withLatestFrom(this.store$.select(appCommonReducers.SelectGetUser)),
 | 
			
		||||
    switchMap(([, user]) => {
 | 
			
		||||
      return this.itemService$.getItem(user.code + ':USER_SETTINGS').pipe(
 | 
			
		||||
    switchMap(_ => {
 | 
			
		||||
      return this.folderService$.getFolder('my_settings').pipe(
 | 
			
		||||
        switchMap((item) => of(new appCommonActions.InitUserSettingsRootSuccess(item))),
 | 
			
		||||
        catchError(error =>  of(new appCommonActions.Fail(error)))
 | 
			
		||||
      )
 | 
			
		||||
@@ -170,7 +169,7 @@ export class AppCommonEffects {
 | 
			
		||||
        this.router$.navigate(['/map', query ])
 | 
			
		||||
      }else if(viewer == 'edit_in_editor') {
 | 
			
		||||
        this.router$.navigate(['/editor', editor, 'item', a.item.code])
 | 
			
		||||
      } else  {
 | 
			
		||||
      } else if(viewer) {
 | 
			
		||||
        this.router$.navigate(['/viewer', viewer, 'item', a.item.code])
 | 
			
		||||
      }
 | 
			
		||||
      return [];
 | 
			
		||||
@@ -182,18 +181,18 @@ export class AppCommonEffects {
 | 
			
		||||
    ofType(appCommonActions.FAIL),
 | 
			
		||||
    map((action) => {
 | 
			
		||||
      const failAction = action as appCommonActions.Fail;
 | 
			
		||||
      console.debug(failAction.payload)
 | 
			
		||||
      //console.debug(failAction.payload)
 | 
			
		||||
      return null;
 | 
			
		||||
    })),{dispatch:false});
 | 
			
		||||
 | 
			
		||||
    online$ =  createEffect(() => this.actions$.pipe(
 | 
			
		||||
      ofType(appCommonActions.ONLINE),
 | 
			
		||||
      switchMap((action) => {
 | 
			
		||||
          console.debug("Online: Check token");
 | 
			
		||||
          //console.debug("Online: Check token");
 | 
			
		||||
          if(!this.oauthService$.hasValidAccessToken()) {
 | 
			
		||||
            console.debug("No valid token, try to refresh");
 | 
			
		||||
            //console.debug("No valid token, try to refresh");
 | 
			
		||||
            if(this.oauthService$.getRefreshToken() != null ) {
 | 
			
		||||
              console.debug("We have a refresh token");
 | 
			
		||||
              //console.debug("We have a refresh token");
 | 
			
		||||
              this.oauthService$.refreshToken();              
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 
 | 
			
		||||
@@ -24,44 +24,53 @@ export class AuthGuard implements CanActivate, CanLoad, CanActivateChild  {
 | 
			
		||||
  constructor(private oauthService: OAuthService, private router: Router, private store: Store<appCommonReducer.State>) { }
 | 
			
		||||
  
 | 
			
		||||
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
 | 
			
		||||
    console.debug("AuthGuard->canActivate", route, state);
 | 
			
		||||
    //console.debug("AuthGuard->canActivate", route, state);
 | 
			
		||||
    const url: string = state.url;
 | 
			
		||||
 | 
			
		||||
    return this.checkLogin(url, route);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
 | 
			
		||||
    console.debug("AuthGuard->canActivateChild", childRoute, state);
 | 
			
		||||
    //console.debug("AuthGuard->canActivateChild", childRoute, state);
 | 
			
		||||
    const url: string = state.url;
 | 
			
		||||
 | 
			
		||||
    return this.checkLogin(url, childRoute);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  canLoad(route: Route, segments: UrlSegment[]): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
 | 
			
		||||
    console.debug("AuthGuard->canLoad", route, segments);
 | 
			
		||||
    //console.debug("AuthGuard->canLoad", route, segments);
 | 
			
		||||
    return this.checkLogin(route.path, null);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  checkLogin(url: string, route: ActivatedRouteSnapshot): boolean {
 | 
			
		||||
    console.debug("AuthGuard->checkLogin", url, route);
 | 
			
		||||
    //console.debug("AuthGuard->checkLogin", url, route);
 | 
			
		||||
    if (!this.oauthService.hasValidAccessToken()) {
 | 
			
		||||
      console.debug("No valid token");
 | 
			
		||||
      //console.debug("No valid token");
 | 
			
		||||
      this.oauthService.initCodeFlow(url);
 | 
			
		||||
      return false;
 | 
			
		||||
    } else {
 | 
			
		||||
      const requiredRoleClaim = route.data.role;
 | 
			
		||||
      if (!requiredRoleClaim) { return true; }
 | 
			
		||||
      const ownedClaims = this.oauthService.getIdentityClaims();
 | 
			
		||||
      if (!ownedClaims) { console.debug("No owned claims"); return false; }
 | 
			
		||||
      if (!ownedClaims) {
 | 
			
		||||
        //console.debug("No owned claims");
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      const ownedRoleClaims: string[] = ownedClaims['role'];
 | 
			
		||||
      if (!ownedRoleClaims) { console.debug("No owned role claims"); return false; }
 | 
			
		||||
      if (!ownedRoleClaims) {
 | 
			
		||||
        // console.debug("No owned role claims"); 
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
      if (Array.isArray(ownedRoleClaims)) {
 | 
			
		||||
        if (ownedRoleClaims.findIndex(r => r === requiredRoleClaim) <= -1) { console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim); return false; }
 | 
			
		||||
        if (ownedRoleClaims.findIndex(r => r === requiredRoleClaim) <= -1) {
 | 
			
		||||
          //console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim);
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        if (ownedRoleClaims !== requiredRoleClaim) { console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim); return false; }
 | 
			
		||||
      }
 | 
			
		||||
      console.debug("Has required role claim", requiredRoleClaim);
 | 
			
		||||
      //console.debug("Has required role claim", requiredRoleClaim);
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ export class PackagePreloadStrategy extends PreloadingStrategy {
 | 
			
		||||
        }
 | 
			
		||||
        if(route.data && route.data.package) {
 | 
			
		||||
            if(this.packageService$.hasPackage(route.data.package)) {
 | 
			
		||||
                console.debug(`Load module for package ${route.data.package}`)
 | 
			
		||||
                //console.debug(`Load module for package ${route.data.package}`)
 | 
			
		||||
                this.loading.add(route);
 | 
			
		||||
                return load()
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -52,8 +52,8 @@ export function provideBootstrapEffects(effects: Type<any>[]) {
 | 
			
		||||
// console.log all actions
 | 
			
		||||
export function debug(reducer: ActionReducer<any>): ActionReducer<any> {
 | 
			
		||||
  return function(state, action) {
 | 
			
		||||
    console.debug('-- State', state);
 | 
			
		||||
    console.debug('-- Action', action);
 | 
			
		||||
    //console.debug('-- State', state);
 | 
			
		||||
    //console.debug('-- Action', action);
 | 
			
		||||
 
 | 
			
		||||
    return reducer(state, action);
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user