From 6b0ca3b72fecce2216f9b5ac49a17a413d9acee1 Mon Sep 17 00:00:00 2001 From: Geert Plaisier Date: Wed, 8 May 2024 14:47:16 +0200 Subject: [PATCH] PMW-4: Allow to add new planregistrations --- .../planmonitor-wonen-api-mock.service.ts | 42 +++++++----- ...nitor-wonen-api.service.injection-token.ts | 0 .../planmonitor-wonen-api.service.model.ts | 0 .../planmonitor-wonen-api.service.ts | 0 .../src/lib/models/planregistratie.model.ts | 1 + .../planmonitor-toggle.component.css | 3 + .../planmonitor-toggle.component.html | 4 ++ .../planmonitor-toggle.component.ts | 27 ++++++++ .../src/lib/planmonitor-wonen.module.ts | 7 +- .../planregistraties-map.component.ts | 56 ++++++++++++---- .../lib/services/planregistraties.service.ts | 66 ++++++++++++++++++- 11 files changed, 172 insertions(+), 34 deletions(-) rename projects/planmonitor-wonen/src/lib/{services => api}/planmonitor-wonen-api-mock.service.ts (62%) rename projects/planmonitor-wonen/src/lib/{services => api}/planmonitor-wonen-api.service.injection-token.ts (100%) rename projects/planmonitor-wonen/src/lib/{services => api}/planmonitor-wonen-api.service.model.ts (100%) rename projects/planmonitor-wonen/src/lib/{services => api}/planmonitor-wonen-api.service.ts (100%) create mode 100644 projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.css create mode 100644 projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.html create mode 100644 projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.ts diff --git a/projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api-mock.service.ts b/projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api-mock.service.ts similarity index 62% rename from projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api-mock.service.ts rename to projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api-mock.service.ts index 608a298..2c2c779 100644 --- a/projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api-mock.service.ts +++ b/projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api-mock.service.ts @@ -92,15 +92,18 @@ export class PlanmonitorWonenApiMockService implements PlanmonitorWonenApiServic PlancategorieHelper.getNewPlancategorie({ ID: "2_3", Planregistratie_ID: "2", Woningtype: WoningtypeEnum.ONBEKEND, Totaal_Gepland: 25, Totaal_Gerealiseerd: 15 }), ]); } - return of([ - PlancategorieHelper.getNewPlancategorie({ ID: "1_NieuwbouwEnum_NIEUWBOUW", Planregistratie_ID: "1", Nieuwbouw: NieuwbouwEnum.NIEUWBOUW, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), - PlancategorieHelper.getNewPlancategorie({ ID: "1_WoningtypeEnum_EENGEZINS", Planregistratie_ID: "1", Woningtype: WoningtypeEnum.EENGEZINS, Totaal_Gepland: 120, Totaal_Gerealiseerd: 0 }), - PlancategorieHelper.getNewPlancategorie({ ID: "1_WoningtypeEnum_MEERGEZINS", Planregistratie_ID: "1", Woningtype: WoningtypeEnum.MEERGEZINS, Totaal_Gepland: 80, Totaal_Gerealiseerd: 0 }), - PlancategorieHelper.getNewPlancategorie({ ID: "1_WoningtypeEnum_ONBEKEND", Planregistratie_ID: "1", Woningtype: WoningtypeEnum.ONBEKEND, Totaal_Gepland: 10, Totaal_Gerealiseerd: 0 }), - PlancategorieHelper.getNewPlancategorie({ ID: "1_FlexwoningenEnum_FLEXWONINGEN", Planregistratie_ID: "1", Flexwoningen: FlexwoningenEnum.FLEXWONINGEN, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), - PlancategorieHelper.getNewPlancategorie({ ID: "1_WonenEnZorgEnum_ZORGGESCHIKT", Planregistratie_ID: "1", WonenenZorg: WonenEnZorgEnum.ZORGGESCHIKT, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), - PlancategorieHelper.getNewPlancategorie({ ID: "1_BetaalbaarheidEnum_ONBEKEND_KOOP_OF_HUUR", Planregistratie_ID: "1", Betaalbaarheid: BetaalbaarheidEnum.ONBEKEND_KOOP_OF_HUUR, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), - ]); + if (id === "1") { + return of([ + PlancategorieHelper.getNewPlancategorie({ ID: "1_NieuwbouwEnum_NIEUWBOUW", Planregistratie_ID: "1", Nieuwbouw: NieuwbouwEnum.NIEUWBOUW, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), + PlancategorieHelper.getNewPlancategorie({ ID: "1_WoningtypeEnum_EENGEZINS", Planregistratie_ID: "1", Woningtype: WoningtypeEnum.EENGEZINS, Totaal_Gepland: 120, Totaal_Gerealiseerd: 0 }), + PlancategorieHelper.getNewPlancategorie({ ID: "1_WoningtypeEnum_MEERGEZINS", Planregistratie_ID: "1", Woningtype: WoningtypeEnum.MEERGEZINS, Totaal_Gepland: 80, Totaal_Gerealiseerd: 0 }), + PlancategorieHelper.getNewPlancategorie({ ID: "1_WoningtypeEnum_ONBEKEND", Planregistratie_ID: "1", Woningtype: WoningtypeEnum.ONBEKEND, Totaal_Gepland: 10, Totaal_Gerealiseerd: 0 }), + PlancategorieHelper.getNewPlancategorie({ ID: "1_FlexwoningenEnum_FLEXWONINGEN", Planregistratie_ID: "1", Flexwoningen: FlexwoningenEnum.FLEXWONINGEN, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), + PlancategorieHelper.getNewPlancategorie({ ID: "1_WonenEnZorgEnum_ZORGGESCHIKT", Planregistratie_ID: "1", WonenenZorg: WonenEnZorgEnum.ZORGGESCHIKT, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), + PlancategorieHelper.getNewPlancategorie({ ID: "1_BetaalbaarheidEnum_ONBEKEND_KOOP_OF_HUUR", Planregistratie_ID: "1", Betaalbaarheid: BetaalbaarheidEnum.ONBEKEND_KOOP_OF_HUUR, Totaal_Gepland: 210, Totaal_Gerealiseerd: 0 }), + ]); + } + return of([]); } public getPlanDetailplanningen$(id: string): Observable { @@ -111,15 +114,18 @@ export class PlanmonitorWonenApiMockService implements PlanmonitorWonenApiServic { ID: "2_3_3", Planregistratie_ID: "2", Creator: "test", Created: "2024-02-15", Edited: null, Editor: null, Aantal_Gepland: 25, Jaartal: 2026, Plancategorie_ID: "2_3" }, ]); } - return of([ - { ID: "1_NieuwbouwEnum_NIEUWBOUW_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_NieuwbouwEnum_NIEUWBOUW" }, - { ID: "1_WoningtypeEnum_EENGEZINS_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 120, Jaartal: 2026, Plancategorie_ID: "1_WoningtypeEnum_EENGEZINS" }, - { ID: "1_WoningtypeEnum_MEERGEZINS_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 80, Jaartal: 2027, Plancategorie_ID: "1_WoningtypeEnum_MEERGEZINS" }, - { ID: "1_WoningtypeEnum_ONBEKEND_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 10, Jaartal: 2028, Plancategorie_ID: "1_WoningtypeEnum_ONBEKEND" }, - { ID: "1_FlexwoningenEnum_FLEXWONINGEN_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_FlexwoningenEnum_FLEXWONINGEN" }, - { ID: "1_WonenEnZorgEnum_ZORGGESCHIKT_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_WonenEnZorgEnum_ZORGGESCHIKT" }, - { ID: "1_BetaalbaarheidEnum_ONBEKEND_KOOP_OF_HUUR_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_BetaalbaarheidEnum_ONBEKEND_KOOP_OF_HUUR" }, - ]); + if (id === "1") { + return of([ + { ID: "1_NieuwbouwEnum_NIEUWBOUW_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_NieuwbouwEnum_NIEUWBOUW" }, + { ID: "1_WoningtypeEnum_EENGEZINS_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 120, Jaartal: 2026, Plancategorie_ID: "1_WoningtypeEnum_EENGEZINS" }, + { ID: "1_WoningtypeEnum_MEERGEZINS_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 80, Jaartal: 2027, Plancategorie_ID: "1_WoningtypeEnum_MEERGEZINS" }, + { ID: "1_WoningtypeEnum_ONBEKEND_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 10, Jaartal: 2028, Plancategorie_ID: "1_WoningtypeEnum_ONBEKEND" }, + { ID: "1_FlexwoningenEnum_FLEXWONINGEN_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_FlexwoningenEnum_FLEXWONINGEN" }, + { ID: "1_WonenEnZorgEnum_ZORGGESCHIKT_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_WonenEnZorgEnum_ZORGGESCHIKT" }, + { ID: "1_BetaalbaarheidEnum_ONBEKEND_KOOP_OF_HUUR_detail", Planregistratie_ID: "1", Creator: "test", Created: "2024-04-17", Edited: null, Editor: null, Aantal_Gepland: 210, Jaartal: 2026, Plancategorie_ID: "1_BetaalbaarheidEnum_ONBEKEND_KOOP_OF_HUUR" }, + ]); + } + return of([]); } } diff --git a/projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api.service.injection-token.ts b/projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api.service.injection-token.ts similarity index 100% rename from projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api.service.injection-token.ts rename to projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api.service.injection-token.ts diff --git a/projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api.service.model.ts b/projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api.service.model.ts similarity index 100% rename from projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api.service.model.ts rename to projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api.service.model.ts diff --git a/projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api.service.ts b/projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api.service.ts similarity index 100% rename from projects/planmonitor-wonen/src/lib/services/planmonitor-wonen-api.service.ts rename to projects/planmonitor-wonen/src/lib/api/planmonitor-wonen-api.service.ts diff --git a/projects/planmonitor-wonen/src/lib/models/planregistratie.model.ts b/projects/planmonitor-wonen/src/lib/models/planregistratie.model.ts index c9a7a9a..6db9d57 100644 --- a/projects/planmonitor-wonen/src/lib/models/planregistratie.model.ts +++ b/projects/planmonitor-wonen/src/lib/models/planregistratie.model.ts @@ -42,4 +42,5 @@ export interface PlanregistratieModel { Beoogd_Woonmilieu_ABF13: WoonmilieuABF13Enum; Aantal_Studentenwoningen: number; Toelichting_Kwalitatief: string; + IsNew?: boolean; } diff --git a/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.css b/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.css new file mode 100644 index 0000000..f0e64c7 --- /dev/null +++ b/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.css @@ -0,0 +1,3 @@ +mat-button-toggle-group { + --mat-standard-button-toggle-height: 40px; +} diff --git a/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.html b/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.html new file mode 100644 index 0000000..46dcdc2 --- /dev/null +++ b/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.html @@ -0,0 +1,4 @@ + + Plan intekenen + Plan bewerken + diff --git a/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.ts b/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.ts new file mode 100644 index 0000000..691cb20 --- /dev/null +++ b/projects/planmonitor-wonen/src/lib/planmonitor-toggle/planmonitor-toggle.component.ts @@ -0,0 +1,27 @@ +import { Component, ChangeDetectionStrategy } from '@angular/core'; +import { MatButtonToggleChange } from '@angular/material/button-toggle'; +import { PlanregistratiesService } from '../services/planregistraties.service'; +import { map, Observable } from 'rxjs'; + +@Component({ + selector: 'lib-planmonitor-toggle', + templateUrl: './planmonitor-toggle.component.html', + styleUrls: ['./planmonitor-toggle.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PlanmonitorToggleComponent { + + public activeToggle$: Observable; + + constructor( + private planregistratieService: PlanregistratiesService, + ) { + this.activeToggle$ = this.planregistratieService.isCreatingNewPlan$() + .pipe(map(creatingNewPlan => creatingNewPlan ? 'create' : 'edit')); + } + + public toggleChanged($event: MatButtonToggleChange) { + this.planregistratieService.setCreateNewPlan($event.value === 'create'); + } + +} diff --git a/projects/planmonitor-wonen/src/lib/planmonitor-wonen.module.ts b/projects/planmonitor-wonen/src/lib/planmonitor-wonen.module.ts index 5dec0c8..269080b 100644 --- a/projects/planmonitor-wonen/src/lib/planmonitor-wonen.module.ts +++ b/projects/planmonitor-wonen/src/lib/planmonitor-wonen.module.ts @@ -4,12 +4,13 @@ import { BaseComponentConfigComponent, ConfigurationComponentRegistryService } f import { PLANMONITOR_WONEN_COMPONENT_ID } from './models/planmonitor-wonen-component-id'; import { PlanregistratiesMapComponent } from './planregistraties-map/planregistraties-map.component'; import { ComponentRegistrationService } from '@tailormap-viewer/core'; -import { PLANMONITOR_WONEN_API_SERVICE } from './services/planmonitor-wonen-api.service.injection-token'; -import { PlanmonitorWonenApiMockService } from './services/planmonitor-wonen-api-mock.service'; +import { PLANMONITOR_WONEN_API_SERVICE } from './api/planmonitor-wonen-api.service.injection-token'; +import { PlanmonitorWonenApiMockService } from './api/planmonitor-wonen-api-mock.service'; import { PlanregistratieDialogComponent } from './planregistratie-dialog/planregistratie-dialog.component'; import { SharedModule } from '@tailormap-viewer/shared'; import { PlanregistratieFormComponent } from './planregistratie-form/planregistratie-form.component'; import { PlancategorieListComponent } from './plancategorie-list/plancategorie-list.component'; +import { PlanmonitorToggleComponent } from './planmonitor-toggle/planmonitor-toggle.component'; @@ -19,6 +20,7 @@ import { PlancategorieListComponent } from './plancategorie-list/plancategorie-l PlanregistratieDialogComponent, PlanregistratieFormComponent, PlancategorieListComponent, + PlanmonitorToggleComponent, ], imports: [ CommonModule, @@ -35,5 +37,6 @@ export class PlanmonitorWonenModule { ) { adminRegistryService.registerConfigurationComponents(PLANMONITOR_WONEN_COMPONENT_ID, 'Planmonitor wonen', BaseComponentConfigComponent); viewerRegistryService.registerComponent("map", { type: PLANMONITOR_WONEN_COMPONENT_ID, component: PlanregistratiesMapComponent }, true); + viewerRegistryService.registerComponent("map-controls-left", { type: PLANMONITOR_WONEN_COMPONENT_ID + '_toggle', component: PlanmonitorToggleComponent }, true); } } diff --git a/projects/planmonitor-wonen/src/lib/planregistraties-map/planregistraties-map.component.ts b/projects/planmonitor-wonen/src/lib/planregistraties-map/planregistraties-map.component.ts index 4e640ac..7ddf1a1 100644 --- a/projects/planmonitor-wonen/src/lib/planregistraties-map/planregistraties-map.component.ts +++ b/projects/planmonitor-wonen/src/lib/planregistraties-map/planregistraties-map.component.ts @@ -1,10 +1,11 @@ -import { Component, OnInit, ChangeDetectionStrategy, DestroyRef } from '@angular/core'; +import { ChangeDetectionStrategy, Component, DestroyRef, OnInit } from '@angular/core'; import { - MapService, MapStyleModel, ModifyEnableToolArguments, ModifyToolConfigModel, ModifyToolModel, SelectToolConfigModel, SelectToolModel, - ToolTypeEnum, + DrawingEnableToolArguments, + DrawingToolConfigModel, DrawingToolModel, MapService, MapStyleModel, ModifyEnableToolArguments, ModifyToolConfigModel, ModifyToolModel, + SelectToolConfigModel, SelectToolModel, ToolTypeEnum, } from '@tailormap-viewer/map'; import { combineLatest, distinctUntilChanged, map, Observable, switchMap, tap, withLatestFrom } from 'rxjs'; -import { PlanregistratieModel } from '../models'; +import { PlanregistratieModel, PlantypeEnum } from '../models'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { PlanregistratiesService } from '../services/planregistraties.service'; import { CssHelper } from '@tailormap-viewer/shared'; @@ -25,6 +26,7 @@ export class PlanregistratiesMapComponent implements OnInit { private static PRIMARY_COLOR = ''; private selectTool: SelectToolModel | undefined; private modifyTool: ModifyToolModel | undefined; + private addFeatureTool: DrawingToolModel | undefined; constructor( private planregistratieService: PlanregistratiesService, @@ -37,6 +39,7 @@ export class PlanregistratiesMapComponent implements OnInit { this.renderFeatures(); this.createSelectTool(); this.createModifyTool(); + this.createAddFeatureTool(); this.toggleTools(); } @@ -59,7 +62,7 @@ export class PlanregistratiesMapComponent implements OnInit { this.mapService.renderFeatures$( PlanregistratiesMapComponent.LAYER_ID, planregistratieFeatures$, - feature => PlanregistratiesMapComponent.getFeatureStyle(feature.attributes), + feature => PlanregistratiesMapComponent.getFeatureStyle(feature.attributes.Plantype, feature.attributes.selected), ).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(); } @@ -67,7 +70,7 @@ export class PlanregistratiesMapComponent implements OnInit { this.mapService.createTool$, SelectToolConfigModel>({ type: ToolTypeEnum.Select, layers: [PlanregistratiesMapComponent.LAYER_ID], - style: feature => PlanregistratiesMapComponent.getFeatureStyle(feature.attributes, true), + style: feature => PlanregistratiesMapComponent.getFeatureStyle(feature.attributes.Plantype, true), }) .pipe( takeUntilDestroyed(this.destroyRef), @@ -97,6 +100,21 @@ export class PlanregistratiesMapComponent implements OnInit { }); } + private createAddFeatureTool() { + this.mapService.createTool$({ + type: ToolTypeEnum.Draw, + style: PlanregistratiesMapComponent.getFeatureStyle(PlantypeEnum.UITBREIDING_OVERIG), + }) + .pipe( + takeUntilDestroyed(this.destroyRef), + tap(({ tool }) => this.addFeatureTool = tool), + switchMap(({ tool }) => tool.drawEnd$), + ) + .subscribe(drawEvent => { + this.planregistratieService.setNewFeatureGeometry(drawEvent.geometry); + }); + } + private toggleTools() { this.planregistratieService.getSelectedPlanregistratie$() .pipe( @@ -115,10 +133,26 @@ export class PlanregistratiesMapComponent implements OnInit { toolManager.disableTool(this.modifyTool.id, true); toolManager.enableTool(this.modifyTool.id, false, { geometry: selectedPlan.GEOM, - style: PlanregistratiesMapComponent.getFeatureStyle(selectedPlan, true), + style: PlanregistratiesMapComponent.getFeatureStyle(selectedPlan.Plantype, true), }); } }); + this.planregistratieService.isCreatingNewPlan$() + .pipe( + takeUntilDestroyed(this.destroyRef), + distinctUntilChanged(), + withLatestFrom(this.mapService.getToolManager$()), + ) + .subscribe(([ isCreatingNew, toolManager ]) => { + if (!this.addFeatureTool) { + return; + } + if (isCreatingNew) { + toolManager.enableTool(this.addFeatureTool.id, true, { type: 'area' }); + } else { + toolManager.disableTool(this.addFeatureTool.id, false); + } + }); this.planregistratieService.hasChanges$() .pipe( takeUntilDestroyed(this.destroyRef), @@ -137,16 +171,16 @@ export class PlanregistratiesMapComponent implements OnInit { }); } - private static getFeatureStyle(attributes: PlanregistratieFeatureAttributes, alwaysHighlighted = false): MapStyleModel { - const selected = attributes.selected || alwaysHighlighted; + private static getFeatureStyle(planType: PlantypeEnum, selected = false): MapStyleModel { + // const selected = attributes.selected || alwaysHighlighted; return { zIndex: selected ? 9999 : 9998, strokeColor: selected ? PlanregistratiesMapComponent.PRIMARY_COLOR : 'rgb(0, 0, 0)', strokeWidth: selected ? 6 : 1, - fillColor: PlantypeHelper.getPlantypeColor(attributes.Plantype), + fillColor: PlantypeHelper.getPlantypeColor(planType), fillOpacity: 50, pointType: 'square', - pointFillColor: PlantypeHelper.getPlantypeColor(attributes.Plantype), + pointFillColor: PlantypeHelper.getPlantypeColor(planType), styleKey: 'planmonitor-highlight-style', }; } diff --git a/projects/planmonitor-wonen/src/lib/services/planregistraties.service.ts b/projects/planmonitor-wonen/src/lib/services/planregistraties.service.ts index 229818b..cf3c317 100644 --- a/projects/planmonitor-wonen/src/lib/services/planregistraties.service.ts +++ b/projects/planmonitor-wonen/src/lib/services/planregistraties.service.ts @@ -1,8 +1,12 @@ import { Inject, Injectable } from '@angular/core'; -import { PLANMONITOR_WONEN_API_SERVICE } from './planmonitor-wonen-api.service.injection-token'; -import { PlanmonitorWonenApiServiceModel } from './planmonitor-wonen-api.service.model'; +import { PLANMONITOR_WONEN_API_SERVICE } from '../api/planmonitor-wonen-api.service.injection-token'; +import { PlanmonitorWonenApiServiceModel } from '../api/planmonitor-wonen-api.service.model'; import { BehaviorSubject, catchError, combineLatest, debounceTime, forkJoin, map, Observable, of, take, tap } from 'rxjs'; -import { DetailplanningModel, PlancategorieModel, PlanregistratieModel } from '../models'; +import { + DetailplanningModel, EigendomEnum, KnelpuntenMeerkeuzeEnum, KnelpuntenPlantypeEnum, OpdrachtgeverEnum, PlancategorieModel, + PlanregistratieModel, PlantypeEnum, ProjectstatusEnum, StatusPlanologischEnum, VertrouwelijkheidEnum, WoonmilieuABF13Enum, + WoonmilieuABF5Enum, +} from '../models'; import { LoadingStateEnum } from '@tailormap-viewer/shared'; import { PlancategorieHelper } from '../helpers/plancategorie.helper'; import { nanoid } from 'nanoid'; @@ -29,6 +33,7 @@ export class PlanregistratiesService { public validChangedPlan$: Observable; private hasTableChanges = new BehaviorSubject(false); private hasFormChanges = new BehaviorSubject(false); + private creatingNewPlan = new BehaviorSubject(false); constructor( @Inject(PLANMONITOR_WONEN_API_SERVICE) private api: PlanmonitorWonenApiServiceModel, @@ -94,6 +99,10 @@ export class PlanregistratiesService { ]).pipe(map(([ tableChanges, formChanges ]) => tableChanges || formChanges)); } + public isCreatingNewPlan$(): Observable { + return this.creatingNewPlan.asObservable(); + } + public setSelectedPlanregistratie(id: string | null) { const registratie = id === null ? null : this.planRegistraties.value.find(p => p.ID === id); this.selectedPlanregistratie.next(registratie || null); @@ -104,6 +113,14 @@ export class PlanregistratiesService { } this.hasFormChanges.next(false); this.hasTableChanges.next(false); + this.creatingNewPlan.next(false); + } + + public setCreateNewPlan(createNewPlan: boolean) { + if (createNewPlan) { + this.setSelectedPlanregistratie(null); + } + this.creatingNewPlan.next(createNewPlan); } private loadRegistraties() { @@ -149,6 +166,49 @@ export class PlanregistratiesService { }); } + public setNewFeatureGeometry(geometry: string) { + const newPlan: PlanregistratieModel = { + ID: nanoid(), + GEOM: geometry, + Created: new Date(), + Creator: "", + Edited: null, + Editor: null, + Opdrachtgever_Naam: "", + Plannaam: "", + Bestemmingsplan: "", + Gemeente: "", + Regio: "", + Plaatsnaam: "", + Provincie: "", + Opmerkingen: "", + Levensloopbestendig_Ja: 0, + Levensloopbestendig_Nee: 0, + Oplevering_Eerste: 0, + Oplevering_Laatste: 0, + Flexwoningen: 0, + Aantal_Studentenwoningen: 0, + Jaar_Start_Project: (new Date()).getFullYear(), + Plantype: PlantypeEnum.UITBREIDING_UITLEG, + Beoogd_Woonmilieu_ABF13: WoonmilieuABF13Enum.DORPS, + Beoogd_Woonmilieu_ABF5: WoonmilieuABF5Enum.DORPS, + Opdrachtgever_Type: OpdrachtgeverEnum.GEMEENTE, + Knelpunten_Meerkeuze: KnelpuntenMeerkeuzeEnum.ANDERS, + Regionale_Planlijst: EigendomEnum.ONBEKEND, + Vertrouwelijkheid: VertrouwelijkheidEnum.GEMEENTE, + Status_Planologisch: StatusPlanologischEnum.IN_VOORBEREIDING, + Status_Project: ProjectstatusEnum.ONBEKEND, + Toelichting_Knelpunten: KnelpuntenPlantypeEnum.ONBEKEND, + Toelichting_Kwalitatief: "", + IsNew: true, + }; + this.planRegistraties.next([ + ...this.planRegistraties.value, + newPlan, + ]); + this.setSelectedPlanregistratie(newPlan.ID); + } + public save$() { const updatedPlan = this.selectedPlanregistratie.value; if (updatedPlan === null) {