@loxia/mst-viewer 8.1.3-202511211546 → 8.1.3-202511211601

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/esm2022/generated/openapi/api/sbController.service.mjs +17 -16
  2. package/esm2022/generated/openapi/api/sbController.serviceInterface.mjs +1 -1
  3. package/esm2022/generated/openapi/model/algemeneRitDto.mjs +1 -1
  4. package/esm2022/generated/openapi/model/models.mjs +1 -2
  5. package/esm2022/lib/atomic-components/message/message.component.mjs +3 -3
  6. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +7 -4
  7. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +5 -6
  8. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +13 -7
  9. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +18 -12
  10. package/esm2022/lib/components/rpe/rpe.component.mjs +6 -2
  11. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +8 -7
  12. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +16 -13
  13. package/esm2022/lib/model/km-range.mjs +2 -2
  14. package/esm2022/lib/model/nieuwe-route.mjs +2 -2
  15. package/esm2022/lib/model/ritdeel.mjs +10 -10
  16. package/esm2022/lib/mst-viewer.module.mjs +6 -5
  17. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +16 -12
  18. package/esm2022/lib/services/base-rest.service.mjs +3 -1
  19. package/esm2022/lib/services/beweging-utils.service.mjs +6 -6
  20. package/esm2022/lib/services/debug.service.mjs +3 -3
  21. package/esm2022/lib/services/editor.service.mjs +3 -1
  22. package/esm2022/lib/services/print-beweging.service.mjs +23 -20
  23. package/esm2022/lib/services/rit-lezer.service.mjs +4 -4
  24. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +1 -1
  25. package/esm2022/lib/services/viewer-control.service.mjs +8 -6
  26. package/esm2022/lib/state/actions/actions.mjs +2 -5
  27. package/esm2022/lib/state/actions/ritdelen.actions.mjs +4 -4
  28. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +8 -7
  29. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +1 -1
  30. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +1 -1
  31. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +1 -1
  32. package/esm2022/lib/state/effect/focus-effect.mjs +2 -2
  33. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +8 -8
  34. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +25 -27
  35. package/esm2022/lib/state/effect/ritdelen.effect.mjs +26 -25
  36. package/esm2022/lib/state/mst-editor-state.mjs +10 -13
  37. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +1 -1
  38. package/esm2022/lib/util/actie-helper.mjs +26 -22
  39. package/esm2022/lib/util/actie-popover-bepaler.mjs +2 -2
  40. package/esm2022/lib/util/logging-helper.mjs +31 -33
  41. package/esm2022/lib/util/multi-map.mjs +2 -3
  42. package/esm2022/lib/util/utils.mjs +5 -5
  43. package/esm2022/lib/util/zone-util.mjs +2 -1
  44. package/esm2022/src/generated/openapi/api/sbController.service.mjs +17 -16
  45. package/esm2022/src/generated/openapi/api/sbController.serviceInterface.mjs +1 -1
  46. package/esm2022/src/generated/openapi/model/algemeneRitDto.mjs +1 -1
  47. package/esm2022/src/generated/openapi/model/models.mjs +1 -2
  48. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +16 -27
  49. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -1
  50. package/fesm2022/loxia-mst-viewer.mjs +387 -365
  51. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  52. package/generated/openapi/api/sbController.service.d.ts +8 -8
  53. package/generated/openapi/api/sbController.serviceInterface.d.ts +3 -3
  54. package/generated/openapi/model/algemeneRitDto.d.ts +0 -8
  55. package/generated/openapi/model/models.d.ts +0 -1
  56. package/lib/atomic-components/message/message.component.d.ts +2 -2
  57. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +1 -1
  58. package/lib/components/carousel-controls/carousel-controls.component.d.ts +1 -3
  59. package/lib/components/mstviewer/mstviewer.component.d.ts +2 -2
  60. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +2 -2
  61. package/lib/components/rpe/rpe.component.d.ts +1 -1
  62. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +1 -1
  63. package/lib/components/viewer-controls/viewer-controls.component.d.ts +3 -4
  64. package/lib/model/km-range.d.ts +1 -1
  65. package/lib/model/nieuwe-route.d.ts +2 -2
  66. package/lib/model/ritdeel.d.ts +11 -10
  67. package/lib/resources/signaleringsbeeldinfo.resource.d.ts +10 -15
  68. package/lib/services/editor.service.d.ts +2 -2
  69. package/lib/services/print-beweging.service.d.ts +4 -6
  70. package/lib/services/rit-lezer.service.d.ts +1 -1
  71. package/lib/services/signalerings-beeld-manager.service.d.ts +2 -2
  72. package/lib/services/viewer-control.service.d.ts +0 -2
  73. package/lib/state/actions/actions.d.ts +14 -21
  74. package/lib/state/actions/ritdelen.actions.d.ts +3 -7
  75. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +2 -1
  76. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +1 -1
  77. package/lib/state/effect/laad-route-files.effect.d.ts +4 -5
  78. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +13 -13
  79. package/lib/state/effect/ritdelen.effect.d.ts +7 -6
  80. package/lib/state/mst-editor-state.d.ts +26 -90
  81. package/lib/util/actie-helper.d.ts +4 -4
  82. package/lib/util/logging-helper.d.ts +2 -1
  83. package/lib/util/utils.d.ts +0 -1
  84. package/package.json +1 -1
  85. package/src/generated/openapi/api/sbController.service.d.ts +8 -8
  86. package/src/generated/openapi/api/sbController.serviceInterface.d.ts +3 -3
  87. package/src/generated/openapi/model/algemeneRitDto.d.ts +0 -8
  88. package/src/generated/openapi/model/models.d.ts +0 -1
  89. package/esm2022/generated/openapi/model/signaleringsbeeldRequestDto.mjs +0 -13
  90. package/esm2022/src/generated/openapi/model/signaleringsbeeldRequestDto.mjs +0 -13
  91. package/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +0 -16
  92. package/src/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +0 -16
@@ -11,13 +11,13 @@ import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
11
11
  import * as i2$1 from '@ngrx/store';
12
12
  import { createAction, union, select, createReducer, on, StoreModule } from '@ngrx/store';
13
13
  import { ResourceModule } from '@ngx-resource/handler-ngx-http';
14
- import { BehaviorSubject, from, Subscription, combineLatest, of, throwError } from 'rxjs';
15
- import { take, filter, map, catchError, withLatestFrom, switchMap, tap } from 'rxjs/operators';
14
+ import { BehaviorSubject, from, Subscription, combineLatest, forkJoin, of, throwError } from 'rxjs';
15
+ import { filter, map, take, tap, catchError, withLatestFrom, switchMap } from 'rxjs/operators';
16
16
  import * as i1 from '@angular/common/http';
17
17
  import { HttpHeaders, HttpContext, HttpParams } from '@angular/common/http';
18
18
  import { __decorate } from 'tslib';
19
19
  import * as i1$1 from '@ngx-resource/core';
20
- import { Resource, ResourceAction, ResourceRequestMethod, ResourceParams, ResourceModel } from '@ngx-resource/core';
20
+ import { Resource, ResourceAction, ResourceParams, ResourceModel } from '@ngx-resource/core';
21
21
 
22
22
  class Message {
23
23
  constructor(severity, text, timeout = 0) {
@@ -41,7 +41,7 @@ class MessageComponent {
41
41
  this.onClearMessage = new EventEmitter();
42
42
  }
43
43
  ngOnInit() {
44
- if (this.message.timeout > 0) {
44
+ if (this.message && this.message.timeout > 0) {
45
45
  setTimeout(() => {
46
46
  this.closeMessage({ stopPropagation: () => null });
47
47
  }, this.message.timeout);
@@ -53,7 +53,7 @@ class MessageComponent {
53
53
  this.message = undefined;
54
54
  }
55
55
  get severity() {
56
- return this.message.severity;
56
+ return this.message?.severity ?? '?';
57
57
  }
58
58
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
59
59
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: MessageComponent, selector: "loxia-message", inputs: { message: "message" }, outputs: { onClearMessage: "onClearMessage" }, ngImport: i0, template: "<div id=\"alert-1\" *ngIf=\"message\"\n [ngClass]=\"severity\"\n class=\" loxia-message flex items-center p-4 text-white\" role=\"alert\">\n <svg class=\"flex-shrink-0 size-4 mt-0.5\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\"></path>\n <path d=\"M12 9v4\"></path>\n <path d=\"M12 17h.01\"></path>\n </svg>\n <span class=\"sr-only\">Info</span>\n <div class=\"ms-3 text-sm font-medium\">\n {{message.text}}\n </div>\n <button type=\"button\"\n (click)=\"closeMessage($event)\"\n class=\"ms-auto -mx-1.5 -my-1.5 rounded-lg inline-flex items-center justify-center h-8 w-8\" data-dismiss-target=\"#alert-1\" aria-label=\"Close\">\n <span class=\"sr-only\">Close</span>\n <svg class=\"w-3 h-3\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"/>\n </svg>\n </button>\n</div>\n", styles: ["svg{background-color:transparent;stroke-width:unset}.loxia-message.information{background-color:#0288d1}.loxia-message.warning{background-color:#ff6a00}.loxia-message.notification{background-color:#f3ed38}.loxia-message.error{background-color:#b5061b}.loxia-message.success{background-color:#297d03}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
@@ -124,6 +124,83 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
124
124
  args: [{ selector: 'loxia-progress-indicator', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block h-16 w-16 animate-spin rounded-full border-4 border-solid border-current border-e-transparent align-[-0.125em] text-surface motion-reduce:animate-[spin_1.5s_linear_infinite] dark:text-warning\"\n role=\"status\">\n <span class=\"!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]\">\n Loading...\n </span>\n</div>\n" }]
125
125
  }] });
126
126
 
127
+ const SET_RIT_DELEN = '[mst] SetRitDelen';
128
+ const SET_RIT_DELEN_AFTER_UPDATE = '[mst] SetRitDelenAfterUpdate';
129
+ const UPDATE_RIT_DELEN = '[mst] UpdateRitDelen';
130
+ const TOGGLE_RITDEEL_ZICHTBAAR = '[mst] ToggleRitdeelZichtbaar';
131
+ const SET_RITDEEL_ZICHTBAAR = '[mst] ZetRitdeelZichtbaar';
132
+ const SET_ZICHTBAARHEID_ALLE_RITDELEN = '[mst] SetZichtbaarheidAlleRitdelen';
133
+ const TOGGLE_ZICHTBAARHEID_VOOR_BEWEGINGEN = '[mst] ToggleZichtbaarheidVoorBewegingen';
134
+ const SET_ALTERNATIEVE_RIT_DELEN = '[mst] SetAlternatieveRitDelen';
135
+ const RITDEEL_INVOEGEN = '[mst] RitdeelInvoegen';
136
+ const DELETE_RITDEEL = '[mst] DeleteRitdeel';
137
+ const DELETE_RITDEEL_ACTIE = '[mst] DeleteRitdeelActie';
138
+ const ADD_RITDEEL_ACTIE = '[mst] AddRitdeelActie';
139
+ const NAVIGEER = '[mst] Navigeer';
140
+ const NAVIGEER_VANAF = '[mst] NavigeerVanaf';
141
+ const setRitDelen = createAction(SET_RIT_DELEN, (ritDelen, paginationSize) => ({ ritDelen, paginationSize }));
142
+ const setRitdelenAfterUpdate = createAction(SET_RIT_DELEN_AFTER_UPDATE, (ritDelen) => ({ ritDelen }));
143
+ const navigeer = createAction(NAVIGEER, (stapSize, paginationSize) => ({ stapSize, paginationSize }));
144
+ const navigeerVanaf = createAction(NAVIGEER_VANAF, (paginationSize, ritdeel) => ({ paginationSize, ritdeel }));
145
+ const updateRitDelen = createAction(UPDATE_RIT_DELEN, (ritDelen) => ({ ritDelen }));
146
+ const toggleRitdeelZichtbaar = createAction(TOGGLE_RITDEEL_ZICHTBAAR, (ritDeel) => ({ ritDeel }));
147
+ const setRitdeelZichtbaar = createAction(SET_RITDEEL_ZICHTBAAR, (ritDeel, zichtbaar) => ({ ritDeel, zichtbaar }));
148
+ const deleteRitdeel = createAction(DELETE_RITDEEL, (ritDeel) => ({ ritDeel }));
149
+ const deleteRitdeelActie = createAction(DELETE_RITDEEL_ACTIE, (ritDeel, actie) => ({ ritDeel, actie }));
150
+ const addRitdeelActie = createAction(ADD_RITDEEL_ACTIE, (ritDeel, actie) => ({ ritDeel, actie }));
151
+ const setZichtbaarheidAlleRitdelen = createAction(SET_ZICHTBAARHEID_ALLE_RITDELEN, (zichtbaarheid) => ({ zichtbaarheid }));
152
+ const toggleZichtbaarheidVoorBewegingen = createAction(TOGGLE_ZICHTBAARHEID_VOOR_BEWEGINGEN, (bewegingIds) => ({ bewegingIds }));
153
+ const setAlternatieveRitDelen = createAction(SET_ALTERNATIEVE_RIT_DELEN, (alternatieveRitDeel) => ({ alternatieveRitDeel }));
154
+ const ritdeelInvoegen = createAction(RITDEEL_INVOEGEN, (nieuweRoute) => ({ nieuweRoute }));
155
+ // do not export return value
156
+ const ritdeelActions = union({
157
+ setRitDelen,
158
+ updateRitDelen,
159
+ setRitdelenAfterUpdate,
160
+ toggleRitdeelZichtbaar,
161
+ setRitdeelZichtbaar,
162
+ deleteRitdeel,
163
+ deleteRitdeelActie,
164
+ addRitdeelActie,
165
+ setZichtbaarheidAlleRitdelen,
166
+ toggleZichtbaarheidVoorBewegingen,
167
+ setAlternatieveRitDelen,
168
+ ritdeelInvoegen
169
+ });
170
+
171
+ class CarouselControlsComponent {
172
+ constructor(store) {
173
+ this.store = store;
174
+ this.paginationSize = 4;
175
+ this.sideNavOpen = false;
176
+ this.ritdelen$ = this.store.select('ritDelen').pipe(filter(r => r?.length > 0));
177
+ this.kanLinks$ = this.ritdelen$.pipe(map(r => this.kanLinksNavigeren(r)));
178
+ this.kanRechts$ = this.ritdelen$.pipe(map(r => this.kanRechtsNavigeren(r)));
179
+ }
180
+ kanLinksNavigeren(ritDelen) {
181
+ return ritDelen.length > this.paginationSize && !ritDelen[0].isBinnenWindow();
182
+ }
183
+ kanRechtsNavigeren(ritDelen) {
184
+ return ritDelen.length > this.paginationSize && !ritDelen[ritDelen.length - 1].isBinnenWindow();
185
+ }
186
+ navigeerNaarLinks(event) {
187
+ this.store.dispatch(navigeer(event?.ctrlKey ? -1 : -(this.paginationSize - 1), this.paginationSize));
188
+ }
189
+ navigeerNaarRechts(event) {
190
+ this.store.dispatch(navigeer(event?.ctrlKey ? 1 : this.paginationSize - 1, this.paginationSize));
191
+ }
192
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CarouselControlsComponent, deps: [{ token: i2$1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
193
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CarouselControlsComponent, selector: "carousel-controls", inputs: { paginationSize: "paginationSize", sideNavOpen: "sideNavOpen" }, ngImport: i0, template: "<div *ngIf=\"ritdelen$ | async\">\n <a class=\"loxia-carousel-control-prev\" [ngClass]=\"(sideNavOpen)?'carousel-sidebar-open':'carousel-sidebar'\" role=\"button\"\n data-slide=\"prev\" (click)=\"navigeerNaarLinks($event)\" [hidden]=\"(kanLinks$ | async) === false\">\n <span id=\"previous-page\" class=\"loxia-carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Previous</span>\n</a>\n <a class=\"loxia-carousel-control-next\" style=\"width: 2%;\" role=\"button\" data-slide=\"next\" (click)=\"navigeerNaarRechts($event)\"\n [hidden]=\"(kanRechts$ | async) === false\">\n <span id=\"next-page\" class=\"loxia-carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Next</span>\n </a>\n</div>\n", styles: [".loxia-carousel-control-prev{left:0}.loxia-carousel-control-next{right:0}.loxia-carousel-control-next-icon,.loxia-carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.loxia-carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next:focus,.loxia-carousel-control-next:hover,.loxia-carousel-control-prev:focus,.loxia-carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.loxia-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.loxia-carousel-control-next,.loxia-carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}.carousel-sidebar{width:2%}.carousel-sidebar-open{width:2%;transition:all .3s;left:470px}[hidden]{display:none!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
194
+ }
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CarouselControlsComponent, decorators: [{
196
+ type: Component,
197
+ args: [{ selector: 'carousel-controls', template: "<div *ngIf=\"ritdelen$ | async\">\n <a class=\"loxia-carousel-control-prev\" [ngClass]=\"(sideNavOpen)?'carousel-sidebar-open':'carousel-sidebar'\" role=\"button\"\n data-slide=\"prev\" (click)=\"navigeerNaarLinks($event)\" [hidden]=\"(kanLinks$ | async) === false\">\n <span id=\"previous-page\" class=\"loxia-carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Previous</span>\n</a>\n <a class=\"loxia-carousel-control-next\" style=\"width: 2%;\" role=\"button\" data-slide=\"next\" (click)=\"navigeerNaarRechts($event)\"\n [hidden]=\"(kanRechts$ | async) === false\">\n <span id=\"next-page\" class=\"loxia-carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Next</span>\n </a>\n</div>\n", styles: [".loxia-carousel-control-prev{left:0}.loxia-carousel-control-next{right:0}.loxia-carousel-control-next-icon,.loxia-carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.loxia-carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next:focus,.loxia-carousel-control-next:hover,.loxia-carousel-control-prev:focus,.loxia-carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.loxia-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.loxia-carousel-control-next,.loxia-carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}.carousel-sidebar{width:2%}.carousel-sidebar-open{width:2%;transition:all .3s;left:470px}[hidden]{display:none!important}\n"] }]
198
+ }], ctorParameters: () => [{ type: i2$1.Store }], propDecorators: { paginationSize: [{
199
+ type: Input
200
+ }], sideNavOpen: [{
201
+ type: Input
202
+ }] } });
203
+
127
204
  const version = '8.1.3-SNAPSHOT';
128
205
 
129
206
  const SET_EDITABLE = '[mst] SetEditable';
@@ -169,7 +246,6 @@ const LAAD_EN_VERWERK_SIGNALERINGSBEELD_INFO = '[mst] laadEnVerwerkSignaleringsb
169
246
  const FOCUS_OP_RITDEEL = '[mst] focusOpRitdeel';
170
247
  const FOCUS_OP_IDS = '[mst] focusOpIds';
171
248
  const BEPAAL_SB_INFOS = '[mst] bepaalSbInfos';
172
- const SET_SELECTED_RITDEEL = '[mst] SetSelectedRitdeel';
173
249
  const setEditable = createAction(SET_EDITABLE, (editable) => ({ editable }));
174
250
  const SetRitSelectieIds = createAction(SET_RIT_SELECTIE_IDS, (ids) => ({ ids }));
175
251
  const SetGeplandeActies = createAction(SET_GEPLANDE_ACTIES, (geplandeActiesMap) => ({ geplandeActiesMap }));
@@ -213,7 +289,6 @@ const navigeerBuitenRit = createAction(NAVIGEER_BUITEN_RIT, (randPuic) => ({ ran
213
289
  const focusOpRitdeel = createAction(FOCUS_OP_RITDEEL, (ritdeel, paginationSize, iaVersieInfo) => ({ ritdeel, paginationSize, iaVersieInfo }));
214
290
  const focusOpIds = createAction(FOCUS_OP_IDS, (puics) => ({ puics }));
215
291
  const bepaalSbInfos = createAction(BEPAAL_SB_INFOS, (rit, ongeplandeActies, iaVersie, ritGewijzigdToegestaan, paginationSize) => ({ rit, ongeplandeActies, iaVersie, ritGewijzigdToegestaan, paginationSize }));
216
- const SetSelectedRitdeel = createAction(SET_SELECTED_RITDEEL, (id) => ({ id }));
217
292
  // do not export return value
218
293
  const mstActions = union({
219
294
  setEditable,
@@ -251,89 +326,9 @@ const mstActions = union({
251
326
  ClearProgress,
252
327
  BewegingInvoegen,
253
328
  KeurAlleActiesGoed,
254
- UpdateRit,
255
- setSelectedRitdeel: SetSelectedRitdeel
256
- });
257
-
258
- const SET_RIT_DELEN = '[mst] SetRitDelen';
259
- const SET_RIT_DELEN_AFTER_UPDATE = '[mst] SetRitDelenAfterUpdate';
260
- const UPDATE_RIT_DELEN = '[mst] UpdateRitDelen';
261
- const TOGGLE_RITDEEL_ZICHTBAAR = '[mst] ToggleRitdeelZichtbaar';
262
- const SET_RITDEEL_ZICHTBAAR = '[mst] ZetRitdeelZichtbaar';
263
- const SET_ZICHTBAARHEID_ALLE_RITDELEN = '[mst] SetZichtbaarheidAlleRitdelen';
264
- const TOGGLE_ZICHTBAARHEID_VOOR_BEWEGINGEN = '[mst] ToggleZichtbaarheidVoorBewegingen';
265
- const SET_ALTERNATIEVE_RIT_DELEN = '[mst] SetAlternatieveRitDelen';
266
- const RITDEEL_INVOEGEN = '[mst] RitdeelInvoegen';
267
- const DELETE_RITDEEL = '[mst] DeleteRitdeel';
268
- const DELETE_RITDEEL_ACTIE = '[mst] DeleteRitdeelActie';
269
- const ADD_RITDEEL_ACTIE = '[mst] AddRitdeelActie';
270
- const NAVIGEER = '[mst] Navigeer';
271
- const NAVIGEER_VANAF = '[mst] NavigeerVanaf';
272
- const setRitDelen = createAction(SET_RIT_DELEN, (ritDelen, paginationSize, iaversieinfo) => ({ ritDelen, paginationSize, iaversieinfo }));
273
- const setRitdelenAfterUpdate = createAction(SET_RIT_DELEN_AFTER_UPDATE, (ritDelen) => ({ ritDelen }));
274
- const navigeer = createAction(NAVIGEER, (stapSize, paginationSize, iaversieinfo) => ({ stapSize, paginationSize, iaversieinfo }));
275
- const navigeerVanaf = createAction(NAVIGEER_VANAF, (paginationSize, iaversieinfo, ritdeel) => ({ paginationSize, iaversieinfo, ritdeel }));
276
- const updateRitDelen = createAction(UPDATE_RIT_DELEN, (ritDelen) => ({ ritDelen }));
277
- const toggleRitdeelZichtbaar = createAction(TOGGLE_RITDEEL_ZICHTBAAR, (ritDeel) => ({ ritDeel }));
278
- const setRitdeelZichtbaar = createAction(SET_RITDEEL_ZICHTBAAR, (ritDeel, zichtbaar) => ({ ritDeel, zichtbaar }));
279
- const deleteRitdeel = createAction(DELETE_RITDEEL, (ritDeel) => ({ ritDeel }));
280
- const deleteRitdeelActie = createAction(DELETE_RITDEEL_ACTIE, (ritDeel, actie) => ({ ritDeel, actie }));
281
- const addRitdeelActie = createAction(ADD_RITDEEL_ACTIE, (ritDeel, actie) => ({ ritDeel, actie }));
282
- const setZichtbaarheidAlleRitdelen = createAction(SET_ZICHTBAARHEID_ALLE_RITDELEN, (zichtbaarheid) => ({ zichtbaarheid }));
283
- const toggleZichtbaarheidVoorBewegingen = createAction(TOGGLE_ZICHTBAARHEID_VOOR_BEWEGINGEN, (bewegingIds) => ({ bewegingIds }));
284
- const setAlternatieveRitDelen = createAction(SET_ALTERNATIEVE_RIT_DELEN, (alternatieveRitDeel) => ({ alternatieveRitDeel }));
285
- const ritdeelInvoegen = createAction(RITDEEL_INVOEGEN, (nieuweRoute) => ({ nieuweRoute }));
286
- // do not export return value
287
- const ritdeelActions = union({
288
- setRitDelen,
289
- updateRitDelen,
290
- setRitdelenAfterUpdate,
291
- toggleRitdeelZichtbaar,
292
- setRitdeelZichtbaar,
293
- deleteRitdeel,
294
- deleteRitdeelActie,
295
- addRitdeelActie,
296
- setZichtbaarheidAlleRitdelen,
297
- toggleZichtbaarheidVoorBewegingen,
298
- setAlternatieveRitDelen,
299
- ritdeelInvoegen
329
+ UpdateRit
300
330
  });
301
331
 
302
- class Utils {
303
- static flatMap(xs, f) {
304
- return xs.reduce((acc, x) => acc.concat(f(x)), []);
305
- }
306
- static getValidErorrMessage(err) {
307
- let errorMsg = '';
308
- if (err.msg) {
309
- errorMsg += err.msg;
310
- }
311
- if (Array.isArray(err.body)) {
312
- err.body.forEach(x => errorMsg += x);
313
- }
314
- else if (err.body) {
315
- if (err.body instanceof ProgressEvent) {
316
- errorMsg = 'Kon geen verbinding maken met de server';
317
- }
318
- else if (err.body.text) {
319
- errorMsg += err.body.text;
320
- }
321
- else {
322
- errorMsg += err.body;
323
- }
324
- }
325
- if (err.message) {
326
- errorMsg += err.message;
327
- }
328
- if (typeof err === 'string' || err instanceof String) {
329
- errorMsg += err;
330
- }
331
- if (errorMsg !== '') {
332
- return errorMsg;
333
- }
334
- }
335
- }
336
-
337
332
  /**
338
333
  * https://gist.github.com/jordanluyke/609a4fffb69d1ebafdadd313ee2ee804
339
334
  *
@@ -397,7 +392,7 @@ class ArrayMultimap {
397
392
  return Array.from(new Set(this._entries.map(entry => entry.key)));
398
393
  }
399
394
  values() {
400
- return Utils.flatMap(this._entries, x => x.value);
395
+ return this._entries.reduce((acc, x) => acc.concat(x.value), []);
401
396
  }
402
397
  put(key, value) {
403
398
  this._entries.push(new MultimapEntry(key, value));
@@ -503,6 +498,7 @@ class EditorService {
503
498
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
504
499
  this.initReadyPromise();
505
500
  }
501
+ // Called from GWT only, can be removed when GWT is gone. any is used because it will be removed with GWT
506
502
  setEditor(editor) {
507
503
  this.editor = editor;
508
504
  this.resolveReadyPromise();
@@ -510,6 +506,7 @@ class EditorService {
510
506
  isReady() {
511
507
  return this.promise;
512
508
  }
509
+ // Called from GWT only, can be removed when GWT is gone
513
510
  setSignaleringsBeeldManager(signaleringsBeeldManager) {
514
511
  this.signaleringsBeeldManagerService.set(signaleringsBeeldManager);
515
512
  }
@@ -555,7 +552,7 @@ class BewegingUtils {
555
552
  const retval = [];
556
553
  retval.length = ritDelen.length;
557
554
  const origineleBewegingMap = this.bepaalOrigineleBewegingMap(origineleBewegingen);
558
- let vorigeBeweging = null;
555
+ let vorigeBeweging = undefined;
559
556
  for (let i = 0; i < ritDelen.length; i++) {
560
557
  const ritdeel = ritDelen[i];
561
558
  if (ritdeel.beweging) {
@@ -585,7 +582,7 @@ class BewegingUtils {
585
582
  }
586
583
  static bewegingenZijnGewijzigd(ritDelen, origineleBewegingen) {
587
584
  const ritDelenArray = ritDelen
588
- .filter(r => r.beweging)
585
+ .filter(r => r.beweging?.id)
589
586
  .map(r => r.beweging.id)
590
587
  .sort((a, b) => a - b);
591
588
  const bewegingenIdArray = origineleBewegingen.map(b => b.id).sort((a, b) => a - b);
@@ -601,9 +598,9 @@ class BewegingUtils {
601
598
  return stringToCheck.indexOf(match) !== -1;
602
599
  }
603
600
  static isGewijzigd(ritdeel, nieuwDwangNummer, origineleBewegingenMap) {
604
- const dwangGewijzigd = ritdeel.beweging.dwangNummer !== nieuwDwangNummer;
601
+ const dwangGewijzigd = ritdeel.beweging?.dwangNummer !== nieuwDwangNummer;
605
602
  let gewijzigd = false;
606
- if (ritdeel.beweging.wijzigStatus === this.NORMAAL) {
603
+ if (ritdeel.beweging?.wijzigStatus === this.NORMAAL) {
607
604
  const origineleBewegingActies = origineleBewegingenMap.get(ritdeel.beweging.id);
608
605
  const huidigeActies = this.createSortedActieIdList(ritdeel.acties);
609
606
  gewijzigd = JSON.stringify(huidigeActies) !== JSON.stringify(origineleBewegingActies);
@@ -627,7 +624,7 @@ class BewegingUtils {
627
624
  let naarSeinPplg;
628
625
  let naarSpoor = newRitdeel.getNaarPrlSpoor();
629
626
  if (eindSein.getTypeAlsString() === BewegingUtils.SEIN_TYPE_FICTIEF) {
630
- if (newRitdeel.heeftVrijebaanInfo()) {
627
+ if (newRitdeel.heeftVrijebaanInfo() && newRitdeel.getVrijebaanRijweg()) {
631
628
  const vbEindSein = newRitdeel.getVrijebaanRijweg().getEindSein();
632
629
  naarSeinNaam = vbEindSein.getName();
633
630
  naarSeinPplg = vbEindSein.getPPLG();
@@ -686,6 +683,8 @@ class ViewerControlService {
686
683
  this.printing$ = new BehaviorSubject(false);
687
684
  this.sideNavOpen = false;
688
685
  this.sideNavOpen$ = new BehaviorSubject(this.sideNavOpen);
686
+ this.selectieInfos = [];
687
+ this.origineelTreinPad = {};
689
688
  this.subscriptions.add(combineLatest([
690
689
  store.select('ritSelectieIds'),
691
690
  store.select('actieOpRitSelectieIds'),
@@ -705,19 +704,18 @@ class ViewerControlService {
705
704
  selectie.push(new SelectieInfo(eind, 'zigzagNaar'));
706
705
  this.selectieInfos = selectie;
707
706
  }));
708
- this.subscriptions.add(store.select('ritDelen').subscribe(ritdelen => this.ritdelen = ritdelen));
709
707
  }
710
708
  toggleSideNavVisible() {
711
709
  this.sideNavOpen = !this.sideNavOpen;
712
710
  this.sideNavOpen$.next(this.sideNavOpen);
713
711
  }
714
712
  keurAlleActiesGoed(ongeplandeActies) {
715
- if (this.ritdelen) {
713
+ this.store.select('ritDelen').pipe(take(1), filter(ritdelen => !!ritdelen), tap(ritdelen => {
716
714
  this.store.dispatch(ShowProgress());
717
- const bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(this.ritdelen, this.origineelTreinPad.bewegingen);
718
- const alleActies = this.verzamelAlleActies(this.ritdelen, ongeplandeActies);
715
+ const bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(ritdelen, this.origineelTreinPad.bewegingen);
716
+ const alleActies = this.verzamelAlleActies(ritdelen, ongeplandeActies);
719
717
  this.store.dispatch(KeurAlleActiesGoed(this.getBewegingenZonderActies(bewegingen), alleActies));
720
- }
718
+ })).subscribe();
721
719
  }
722
720
  setValideRit(valideRit) {
723
721
  this.valideRit$.next(valideRit);
@@ -783,10 +781,10 @@ class DebugService {
783
781
  setDebugFlag(debug) {
784
782
  this.store.dispatch(SetDebug(debug));
785
783
  if (debug) {
786
- document.getElementById('svgContainer').addEventListener('mouseover', this.listener);
784
+ document.getElementById('svgContainer')?.addEventListener('mouseover', this.listener);
787
785
  }
788
786
  else {
789
- document.getElementById('svgContainer').removeEventListener('mouseover', this.listener);
787
+ document.getElementById('svgContainer')?.removeEventListener('mouseover', this.listener);
790
788
  }
791
789
  }
792
790
  debugEventListener() {
@@ -832,26 +830,28 @@ class PrintBewegingService {
832
830
  this.store = store;
833
831
  this.viewerControlService = viewerControlService;
834
832
  this.sbmService = sbmService;
835
- this.store.select(s => s.ritDelen).subscribe(ritdelen => this.ritdelen = ritdelen);
836
- }
837
- printBeweging(bewegingId, paginationSize, iaVersieInfo) {
838
- const gevondenRitdeel = this.ritdelen.filter(r => parseInt(r.getBewegingId(), 10) === bewegingId);
839
- // hide/show de knoppen
840
- const printing = !!bewegingId && gevondenRitdeel.length === 1;
841
- this.viewerControlService.setPrinting(printing);
842
- if (!printing) {
843
- return Promise.reject(new Error('Geen beweging gevonden voor ' + bewegingId));
844
- }
845
- return new Promise((resolve) => {
846
- const ritdeel = gevondenRitdeel[0];
847
- if (ritdeel.isNietBeschikbaar()) {
848
- this.store.dispatch(navigeerVanaf(paginationSize, iaVersieInfo, ritdeel));
849
- this.store.dispatch(ShowProgress());
850
- setTimeout(() => this.focusOpBeweging(ritdeel, resolve), 1000);
851
- }
852
- else {
853
- this.focusOpBeweging(ritdeel, resolve);
854
- }
833
+ }
834
+ printBeweging(bewegingId, paginationSize) {
835
+ return new Promise((resolve, reject) => {
836
+ this.store.select('ritDelen').pipe(take(1), tap(ritdelen => {
837
+ const gevondenRitdeel = ritdelen.filter(r => Number.parseInt(r.getBewegingId(), 10) === bewegingId);
838
+ // hide/show de knoppen
839
+ const printing = !!bewegingId && gevondenRitdeel.length === 1;
840
+ this.viewerControlService.setPrinting(printing);
841
+ if (!printing) {
842
+ reject(new Error('Geen beweging gevonden voor ' + bewegingId));
843
+ return;
844
+ }
845
+ const ritdeel = gevondenRitdeel[0];
846
+ if (ritdeel.isNietBeschikbaar()) {
847
+ this.store.dispatch(navigeerVanaf(paginationSize, ritdeel));
848
+ this.store.dispatch(ShowProgress());
849
+ setTimeout(() => this.focusOpBeweging(ritdeel, resolve), 1000);
850
+ }
851
+ else {
852
+ this.focusOpBeweging(ritdeel, resolve);
853
+ }
854
+ })).subscribe();
855
855
  });
856
856
  }
857
857
  focusOpBeweging(ritdeel, resolve) {
@@ -886,8 +886,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
886
886
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: SignaleringsBeeldManagerService }] });
887
887
 
888
888
  class RpeComponent {
889
+ constructor() {
890
+ this.baseurl = '';
891
+ this.path = '';
892
+ }
889
893
  convertToScript() {
890
- const element = this.script.nativeElement;
894
+ const element = this.script?.nativeElement;
891
895
  const script = document.createElement('script');
892
896
  script.type = 'text/javascript';
893
897
  if (this.baseurl && this.path) {
@@ -940,7 +944,7 @@ class KmRange {
940
944
  if (result.length >= 1) {
941
945
  return result[0];
942
946
  }
943
- return null;
947
+ return undefined;
944
948
  }
945
949
  heeftOverlap(kilometrering1, kilometrering2) {
946
950
  const vanKilometrering = KmRange.getKilometrering(kilometrering1.getKmLint(), this.vanKilometreringen);
@@ -987,6 +991,41 @@ class MeldingBuilder {
987
991
  }
988
992
  }
989
993
 
994
+ class Utils {
995
+ static getValidErorrMessage(err) {
996
+ let errorMsg = '';
997
+ if (err.msg) {
998
+ errorMsg += err.msg;
999
+ }
1000
+ if (Array.isArray(err.body)) {
1001
+ err.body.forEach((x) => errorMsg += x);
1002
+ }
1003
+ else if (err.body) {
1004
+ if (err.body instanceof ProgressEvent) {
1005
+ errorMsg = 'Kon geen verbinding maken met de server';
1006
+ }
1007
+ else if (err.body.text) {
1008
+ errorMsg += err.body.text;
1009
+ }
1010
+ else {
1011
+ errorMsg += err.body;
1012
+ }
1013
+ }
1014
+ if (err.message) {
1015
+ errorMsg += err.message;
1016
+ }
1017
+ if (typeof err === 'string' || err instanceof String) {
1018
+ errorMsg += err;
1019
+ }
1020
+ if (errorMsg !== '') {
1021
+ return errorMsg;
1022
+ }
1023
+ else {
1024
+ return 'Er is een onbekende fout opgetreden';
1025
+ }
1026
+ }
1027
+ }
1028
+
990
1029
  class MessageBuilder {
991
1030
  static rwpDataNietGevonden(err) {
992
1031
  return new Message(Severity.ERROR, 'Error bij ophalen van rijwegplan data: ' + err);
@@ -2126,16 +2165,25 @@ class SbControllerService {
2126
2165
  }
2127
2166
  return httpParams;
2128
2167
  }
2129
- getSignaleringsbeelden(signaleringsbeeldRequestDto, observe = 'body', reportProgress = false, options) {
2130
- if (signaleringsbeeldRequestDto === null || signaleringsbeeldRequestDto === undefined) {
2131
- throw new Error('Required parameter signaleringsbeeldRequestDto was null or undefined when calling getSignaleringsbeelden.');
2168
+ getSignaleringsbeelden(iaVersie, pplg, observe = 'body', reportProgress = false, options) {
2169
+ if (iaVersie === null || iaVersie === undefined) {
2170
+ throw new Error('Required parameter iaVersie was null or undefined when calling getSignaleringsbeelden.');
2171
+ }
2172
+ if (pplg === null || pplg === undefined) {
2173
+ throw new Error('Required parameter pplg was null or undefined when calling getSignaleringsbeelden.');
2174
+ }
2175
+ let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
2176
+ if (pplg) {
2177
+ pplg.forEach((element) => {
2178
+ localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, element, 'pplg');
2179
+ });
2132
2180
  }
2133
2181
  let localVarHeaders = this.defaultHeaders;
2134
2182
  let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
2135
2183
  if (localVarHttpHeaderAcceptSelected === undefined) {
2136
2184
  // to determine the Accept header
2137
2185
  const httpHeaderAccepts = [
2138
- '*/*'
2186
+ 'application/json'
2139
2187
  ];
2140
2188
  localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
2141
2189
  }
@@ -2150,14 +2198,6 @@ class SbControllerService {
2150
2198
  if (localVarTransferCache === undefined) {
2151
2199
  localVarTransferCache = true;
2152
2200
  }
2153
- // to determine the Content-Type header
2154
- const consumes = [
2155
- 'application/json'
2156
- ];
2157
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
2158
- if (httpContentTypeSelected !== undefined) {
2159
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
2160
- }
2161
2201
  let responseType_ = 'json';
2162
2202
  if (localVarHttpHeaderAcceptSelected) {
2163
2203
  if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
@@ -2170,10 +2210,10 @@ class SbControllerService {
2170
2210
  responseType_ = 'blob';
2171
2211
  }
2172
2212
  }
2173
- let localVarPath = `/rest/signaleringsbeeldeninfo`;
2174
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
2213
+ let localVarPath = `/rest/${this.configuration.encodeParam({ name: "iaVersie", value: iaVersie, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/SignaleringsbeeldAndPplgs`;
2214
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
2175
2215
  context: localVarHttpContext,
2176
- body: signaleringsbeeldRequestDto,
2216
+ params: localVarQueryParameters,
2177
2217
  responseType: responseType_,
2178
2218
  withCredentials: this.configuration.withCredentials,
2179
2219
  headers: localVarHeaders,
@@ -2299,18 +2339,6 @@ const APIS = [AppConfigControllerService, BewegingControllerService, Class0Build
2299
2339
  * Do not edit the class manually.
2300
2340
  */
2301
2341
 
2302
- /**
2303
- * MST
2304
- * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
2305
- *
2306
- * The version of the OpenAPI document: 1
2307
- *
2308
- *
2309
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
2310
- * https://openapi-generator.tech
2311
- * Do not edit the class manually.
2312
- */
2313
-
2314
2342
  class ApiModule {
2315
2343
  static forRoot(configurationFactory) {
2316
2344
  return {
@@ -2372,38 +2400,35 @@ class LoggingHelper {
2372
2400
  this.store = store;
2373
2401
  }
2374
2402
  maakLogDTO(melding, actie) {
2375
- let iaVersie = '';
2376
- let algemeneRitInfoDto = null;
2377
- let actieDto = null;
2378
- this.store.select('algemeneRitInfoDto').pipe(take(1)).subscribe(dto => {
2379
- algemeneRitInfoDto = dto;
2380
- });
2381
- this.store.select('iaVersie').pipe(take(1)).subscribe(ia => {
2382
- iaVersie = ia.versie;
2383
- });
2384
- if (actie) {
2385
- actieDto = {
2386
- pplgNaam: actie.pplgNaam,
2387
- ritActieTypeOmschrijving: actie.ritActieTypeOmschrijving,
2388
- ritActieStatus: actie.ritActieStatus,
2389
- bewegingId: actie.bewegingId,
2390
- wisselType: actie.wisselType,
2391
- wisselNaam: actie.wisselNaam,
2392
- wisselKantCode: actie.wisselKantCode,
2393
- vanKilometerlint: actie.vanKilometerlint,
2394
- vanKilometrering: actie.vanKilometrering,
2395
- totKilometerlint: actie.totKilometerlint,
2396
- totKilometrering: actie.totKilometrering
2403
+ return combineLatest([
2404
+ this.store.select('algemeneRitInfoDto'),
2405
+ this.store.select('iaVersie')
2406
+ ]).pipe(take(1), map(([algemeneRitInfoDto, iaVersie]) => {
2407
+ let actieDto = null;
2408
+ if (actie) {
2409
+ actieDto = {
2410
+ pplgNaam: actie.pplgNaam,
2411
+ ritActieTypeOmschrijving: actie.ritActieTypeOmschrijving,
2412
+ ritActieStatus: actie.ritActieStatus,
2413
+ bewegingId: actie.bewegingId,
2414
+ wisselType: actie.wisselType,
2415
+ wisselNaam: actie.wisselNaam,
2416
+ wisselKantCode: actie.wisselKantCode,
2417
+ vanKilometerlint: actie.vanKilometerlint,
2418
+ vanKilometrering: actie.vanKilometrering,
2419
+ totKilometerlint: actie.totKilometerlint,
2420
+ totKilometrering: actie.totKilometrering
2421
+ };
2422
+ }
2423
+ return {
2424
+ iaVersie: iaVersie.versie,
2425
+ meldingLevel: melding.meldingLevel,
2426
+ meldingMessage: melding.meldingMessage,
2427
+ actieDto,
2428
+ algemeneRitInfoDto,
2429
+ sbinfoDtos: this.getSbInfoDtos()
2397
2430
  };
2398
- }
2399
- return {
2400
- iaVersie,
2401
- meldingLevel: melding.meldingLevel,
2402
- meldingMessage: melding.meldingMessage,
2403
- actieDto,
2404
- algemeneRitInfoDto,
2405
- sbinfoDtos: this.getSbInfoDtos()
2406
- };
2431
+ }));
2407
2432
  }
2408
2433
  getSbInfoDtos() {
2409
2434
  const sbInfoDtos = [];
@@ -2515,6 +2540,7 @@ class ActieHelper {
2515
2540
  this.messagesService = messagesService;
2516
2541
  this.store = store;
2517
2542
  this.loggingHelper = loggingHelper;
2543
+ this.debug = false;
2518
2544
  this.store.select('debug').subscribe(debug => this.debug = debug);
2519
2545
  }
2520
2546
  static getActieTopoElements(ritDeel, sbmService) {
@@ -2548,10 +2574,10 @@ class ActieHelper {
2548
2574
  }
2549
2575
  }
2550
2576
  static actieComparator(actie1, actie2) {
2551
- if (actie1.vanKilometrering !== actie2.vanKilometrering) {
2577
+ if (actie1.vanKilometrering && actie2.vanKilometrering && actie1.vanKilometrering !== actie2.vanKilometrering) {
2552
2578
  return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
2553
2579
  }
2554
- if (actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2580
+ if (actie1.ritActieTypeOmschrijving && actie2.ritActieTypeOmschrijving && actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2555
2581
  return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
2556
2582
  }
2557
2583
  if (actie1.wisselNaam !== actie2.wisselNaam) {
@@ -2591,9 +2617,9 @@ class ActieHelper {
2591
2617
  // make sure the elems are sorted in ascending order
2592
2618
  static sorteerTopoElementen(topoElems) {
2593
2619
  const topoElementen = topoElems.slice();
2594
- let lint = null;
2595
- let first = null;
2596
- let second = null;
2620
+ let lint = undefined;
2621
+ let first;
2622
+ let second;
2597
2623
  for (const topoElement of topoElementen) {
2598
2624
  let kilometreringen = null;
2599
2625
  const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
@@ -2625,11 +2651,11 @@ class ActieHelper {
2625
2651
  if (!totKilometreringen && vanKilometreringen) {
2626
2652
  totKilometreringen = [new MstKilometrering(vanKilometreringen[0].getKmLint(), 100000)];
2627
2653
  }
2628
- if (vanKilometreringen[0] > totKilometreringen[0]) {
2654
+ if (vanKilometreringen && totKilometreringen && vanKilometreringen[0] > totKilometreringen[0]) {
2629
2655
  kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, -1), this.addKm(totKilometreringen, 1)));
2630
2656
  }
2631
2657
  else {
2632
- kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, 1), this.addKm(totKilometreringen, -1)));
2658
+ kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen ?? [], 1), this.addKm(totKilometreringen ?? [], -1)));
2633
2659
  }
2634
2660
  });
2635
2661
  }
@@ -2720,21 +2746,23 @@ class ActieHelper {
2720
2746
  else {
2721
2747
  const puics = [];
2722
2748
  kmRanges.forEach(kmRange => {
2723
- let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
2724
- let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
2725
- if (actie.vanKilometrering > actie.totKilometrering) {
2726
- const temp = { van: vanKilometrering, tot: totKilometrering };
2727
- vanKilometrering = temp.tot;
2728
- totKilometrering = temp.van;
2729
- }
2730
- if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
2731
- puics.push(kmRange.topologyElement.getPuic());
2749
+ if (actie.vanKilometrering && actie.vanKilometerlint && actie.totKilometrering && actie.totKilometerlint) {
2750
+ let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
2751
+ let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
2752
+ if (actie.vanKilometrering > actie.totKilometrering) {
2753
+ const temp = { van: vanKilometrering, tot: totKilometrering };
2754
+ vanKilometrering = temp.tot;
2755
+ totKilometrering = temp.van;
2756
+ }
2757
+ if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
2758
+ puics.push(kmRange.topologyElement.getPuic());
2759
+ }
2732
2760
  }
2733
2761
  });
2734
2762
  if (puics.length === 0) {
2735
2763
  actieZonderElementen.push(actie.id);
2736
2764
  const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
2737
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
2765
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(dto => logMeldingDTOs.push(dto))).subscribe();
2738
2766
  }
2739
2767
  retval.putAll(actie, puics);
2740
2768
  }
@@ -2750,7 +2778,7 @@ class ActieHelper {
2750
2778
  verwerkTopoElementen(topoElementen) {
2751
2779
  const kmRanges = [];
2752
2780
  let topoElementenZonderKms = [];
2753
- let laatstePuntKms = null;
2781
+ let laatstePuntKms = undefined;
2754
2782
  topoElementen.forEach(elem => {
2755
2783
  const kms = JsJavaUtil.listToArray(elem.getKilometreringen());
2756
2784
  if (kms.length > 0) {
@@ -2764,7 +2792,7 @@ class ActieHelper {
2764
2792
  }
2765
2793
  });
2766
2794
  if (topoElementenZonderKms.length > 0 && laatstePuntKms) {
2767
- ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, null, kmRanges);
2795
+ ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, undefined, kmRanges);
2768
2796
  }
2769
2797
  return kmRanges;
2770
2798
  }
@@ -2827,14 +2855,14 @@ class ActieHelper {
2827
2855
  if (ActieHelper.isKantCodeLinks(kantcode)) {
2828
2856
  return wissel.getLeft();
2829
2857
  }
2830
- return null;
2858
+ return undefined;
2831
2859
  }
2832
2860
  bepaalPuicVoorWisselSlijpenActie(actie) {
2833
2861
  const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
2834
2862
  if (!storingsSymboolPuic && this.debug) {
2835
2863
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
2836
2864
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
2837
- this.mstLogResource.logMessages([this.loggingHelper.maakLogDTO(melding, actie)]);
2865
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(logDto => this.mstLogResource.logMessages([logDto]))).subscribe();
2838
2866
  }
2839
2867
  return storingsSymboolPuic ? [storingsSymboolPuic] : [];
2840
2868
  }
@@ -2849,10 +2877,16 @@ class RitdelenLijstComponent {
2849
2877
  constructor(store, sbmService) {
2850
2878
  this.store = store;
2851
2879
  this.sbmService = sbmService;
2880
+ this.nietGeplandeActies = [];
2852
2881
  this.focusEmitter = new EventEmitter();
2853
2882
  this.keurAlleActiesGoed = new EventEmitter();
2883
+ this.ritdeelViewModels = [];
2854
2884
  this.selectedRitdeelActies = [];
2855
2885
  this.selectedRitdeelOngeplandeActies = [];
2886
+ this.disableActieKnoppenVanRitdeel = true;
2887
+ this.editable = false;
2888
+ this.ongeplandeActiesMap = new ArrayMultimap();
2889
+ this.geplandeActies = new ArrayMultimap();
2856
2890
  this.NG_ACTIE_PREFIX = '* ';
2857
2891
  this.subscriptions = [];
2858
2892
  this.subscriptions.push(store.select('ritDelen').subscribe((ritdelen) => {
@@ -2863,9 +2897,6 @@ class RitdelenLijstComponent {
2863
2897
  this.subscriptions.push(store.select('ongeplandeActies').subscribe(acties => this.ongeplandeActiesMap = acties));
2864
2898
  this.subscriptions.push(store.select('geplandeActies').subscribe(acties => this.geplandeActies = acties));
2865
2899
  this.subscriptions.push(store.select('editable').subscribe(editable => this.editable = editable));
2866
- // listen to changes from svg-viewer-component, saving ritdeel in store isn't cool because of all the gwt in it. This is
2867
- // just to make changes within the angular lifecycle.
2868
- this.subscriptions.push(store.select('selectedRitdeelId').pipe(filter(id => !id)).subscribe(this.deselectRitdeel));
2869
2900
  this.subscriptions.push(combineLatest([
2870
2901
  this.store.select('ritDelen'),
2871
2902
  this.store.select('ongeplandeActies')
@@ -2902,12 +2933,14 @@ class RitdelenLijstComponent {
2902
2933
  this.store.dispatch(deleteRitdeel(ritdeel));
2903
2934
  }
2904
2935
  deleteActiesUitRit() {
2905
- this.selectedRitdeel.acties.slice().forEach(actie => {
2936
+ this.selectedRitdeel?.acties.slice().forEach(actie => {
2906
2937
  this.deleteActieUitRit(actie);
2907
2938
  });
2908
2939
  }
2909
2940
  deleteActieUitRit(actie) {
2910
- const acties = this.selectedRitdeel.acties;
2941
+ if (!this.selectedRitdeel)
2942
+ return;
2943
+ const acties = this.selectedRitdeel.acties ?? [];
2911
2944
  const idx = acties.indexOf(actie);
2912
2945
  if (idx >= 0) {
2913
2946
  this.verhuisActieNaarOngepland(actie);
@@ -2933,7 +2966,7 @@ class RitdelenLijstComponent {
2933
2966
  }
2934
2967
  voegActieToeAanRit(ongeplandeActie) {
2935
2968
  const idx = this.selectedRitdeelOngeplandeActies.indexOf(ongeplandeActie);
2936
- if (idx >= 0) {
2969
+ if (idx >= 0 && this.selectedRitdeel) {
2937
2970
  this.store.dispatch(addRitdeelActie(this.selectedRitdeel, this.selectedRitdeelOngeplandeActies[idx].actie));
2938
2971
  this.store.dispatch(AddGeplandeActie(ongeplandeActie.actie, ongeplandeActie.puics));
2939
2972
  this.store.dispatch(DeleteOngeplandeActie(ongeplandeActie));
@@ -3035,13 +3068,13 @@ class RitdelenLijstComponent {
3035
3068
  return `${prefix}${ActieHelper.getVSTActieOmschrijving(actie)}`;
3036
3069
  }
3037
3070
  bepaalPrefixVoorActieOmschrijving(actie) {
3038
- const prefix = '';
3039
- if (this.selectedRitdeel.acties.includes(actie)) {
3071
+ const noPrefix = '';
3072
+ if (this.selectedRitdeel?.acties.includes(actie)) {
3040
3073
  // Afwijkende naam bij niet gevisualiseerde actie in rit
3041
3074
  const puics = this.geplandeActies.get(actie);
3042
- return puics.length > 0 ? prefix : this.NG_ACTIE_PREFIX;
3075
+ return puics.length > 0 ? noPrefix : this.NG_ACTIE_PREFIX;
3043
3076
  }
3044
- return prefix;
3077
+ return noPrefix;
3045
3078
  }
3046
3079
  actieVanKmTekst(actie) {
3047
3080
  if (ActieHelper.isWisselSlijpenActie(actie)) {
@@ -3062,6 +3095,7 @@ class RitdelenLijstComponent {
3062
3095
  return ritdeel.getPplgString();
3063
3096
  }
3064
3097
  getKantCode(stand) {
3098
+ // @ts-ignore
3065
3099
  if (stand === window['domein'].Stand.LINKS) {
3066
3100
  return 'L';
3067
3101
  }
@@ -3198,49 +3232,18 @@ class RitdeelViewModel {
3198
3232
  }
3199
3233
  }
3200
3234
 
3201
- class CarouselControlsComponent {
3202
- constructor(store) {
3203
- this.store = store;
3204
- this.paginationSize = 4;
3205
- this.ritdelen$ = this.store.select('ritDelen').pipe(filter(r => r?.length > 0));
3206
- this.kanLinks$ = this.ritdelen$.pipe(map(r => this.kanLinksNavigeren(r)));
3207
- this.kanRechts$ = this.ritdelen$.pipe(map(r => this.kanRechtsNavigeren(r)));
3208
- }
3209
- kanLinksNavigeren(ritDelen) {
3210
- return ritDelen.length > this.paginationSize && !ritDelen[0].isBinnenWindow();
3211
- }
3212
- kanRechtsNavigeren(ritDelen) {
3213
- return ritDelen.length > this.paginationSize && !ritDelen[ritDelen.length - 1].isBinnenWindow();
3214
- }
3215
- navigeerNaarLinks(event) {
3216
- this.store.dispatch(navigeer(event?.ctrlKey ? -1 : -(this.paginationSize - 1), this.paginationSize, this.iaversieinfo));
3217
- }
3218
- navigeerNaarRechts(event) {
3219
- this.store.dispatch(navigeer(event?.ctrlKey ? 1 : this.paginationSize - 1, this.paginationSize, this.iaversieinfo));
3220
- }
3221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CarouselControlsComponent, deps: [{ token: i2$1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
3222
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CarouselControlsComponent, selector: "carousel-controls", inputs: { paginationSize: "paginationSize", iaversieinfo: "iaversieinfo", sideNavOpen: "sideNavOpen" }, ngImport: i0, template: "<div *ngIf=\"ritdelen$ | async\">\n <a class=\"loxia-carousel-control-prev\" [ngClass]=\"(sideNavOpen)?'carousel-sidebar-open':'carousel-sidebar'\" role=\"button\"\n data-slide=\"prev\" (click)=\"navigeerNaarLinks($event)\" [hidden]=\"(kanLinks$ | async) === false\">\n <span id=\"previous-page\" class=\"loxia-carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Previous</span>\n</a>\n <a class=\"loxia-carousel-control-next\" style=\"width: 2%;\" role=\"button\" data-slide=\"next\" (click)=\"navigeerNaarRechts($event)\"\n [hidden]=\"(kanRechts$ | async) === false\">\n <span id=\"next-page\" class=\"loxia-carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Next</span>\n </a>\n</div>\n", styles: [".loxia-carousel-control-prev{left:0}.loxia-carousel-control-next{right:0}.loxia-carousel-control-next-icon,.loxia-carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.loxia-carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next:focus,.loxia-carousel-control-next:hover,.loxia-carousel-control-prev:focus,.loxia-carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.loxia-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.loxia-carousel-control-next,.loxia-carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}.carousel-sidebar{width:2%}.carousel-sidebar-open{width:2%;transition:all .3s;left:470px}[hidden]{display:none!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
3223
- }
3224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CarouselControlsComponent, decorators: [{
3225
- type: Component,
3226
- args: [{ selector: 'carousel-controls', template: "<div *ngIf=\"ritdelen$ | async\">\n <a class=\"loxia-carousel-control-prev\" [ngClass]=\"(sideNavOpen)?'carousel-sidebar-open':'carousel-sidebar'\" role=\"button\"\n data-slide=\"prev\" (click)=\"navigeerNaarLinks($event)\" [hidden]=\"(kanLinks$ | async) === false\">\n <span id=\"previous-page\" class=\"loxia-carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Previous</span>\n</a>\n <a class=\"loxia-carousel-control-next\" style=\"width: 2%;\" role=\"button\" data-slide=\"next\" (click)=\"navigeerNaarRechts($event)\"\n [hidden]=\"(kanRechts$ | async) === false\">\n <span id=\"next-page\" class=\"loxia-carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"loxia-sr-only\">Next</span>\n </a>\n</div>\n", styles: [".loxia-carousel-control-prev{left:0}.loxia-carousel-control-next{right:0}.loxia-carousel-control-next-icon,.loxia-carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.loxia-carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\")}.loxia-carousel-control-next:focus,.loxia-carousel-control-next:hover,.loxia-carousel-control-prev:focus,.loxia-carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.loxia-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.loxia-carousel-control-next,.loxia-carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}.carousel-sidebar{width:2%}.carousel-sidebar-open{width:2%;transition:all .3s;left:470px}[hidden]{display:none!important}\n"] }]
3227
- }], ctorParameters: () => [{ type: i2$1.Store }], propDecorators: { paginationSize: [{
3228
- type: Input
3229
- }], iaversieinfo: [{
3230
- type: Input
3231
- }], sideNavOpen: [{
3232
- type: Input
3233
- }] } });
3234
-
3235
3235
  class ViewerControlsComponent {
3236
3236
  constructor(store, viewerControlsService, bewegingUtils) {
3237
3237
  this.store = store;
3238
3238
  this.viewerControlsService = viewerControlsService;
3239
3239
  this.bewegingUtils = bewegingUtils;
3240
3240
  this.paginationSize = 4;
3241
+ this.treinpad = undefined;
3242
+ this.goedgekeurd = new EventEmitter();
3241
3243
  this.printing$ = this.viewerControlsService.isPrinting$();
3242
3244
  this.valideRit$ = this.viewerControlsService.isValideRit$();
3243
3245
  this.subscriptions = new Subscription();
3246
+ this.editable = false;
3244
3247
  this.subscriptions.add(this.store.select('editable').subscribe(editable => this.editable = editable));
3245
3248
  }
3246
3249
  ngOnChanges({ treinpad }) {
@@ -3252,24 +3255,23 @@ class ViewerControlsComponent {
3252
3255
  return this.editable && this.viewerControlsService.selectieInfos.length !== 0;
3253
3256
  }
3254
3257
  goedkeurenClick() {
3255
- const ritDelen = this.viewerControlsService.ritdelen;
3256
- if (ritDelen) {
3257
- delete this.treinpad.aantalRitActies;
3258
- this.treinpad.bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(ritDelen, this.viewerControlsService.origineelTreinPad.bewegingen);
3259
- this.goedgekeurd.emit(this.treinpad);
3260
- this.viewerControlsService.setOrigineelTreinPad(this.treinpad);
3261
- }
3258
+ this.store.select('ritDelen').pipe(filter(ritdelen => !!ritdelen), tap(ritDelen => {
3259
+ if (this.treinpad) {
3260
+ delete this.treinpad.aantalRitActies;
3261
+ this.treinpad.bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(ritDelen, this.viewerControlsService.origineelTreinPad.bewegingen);
3262
+ this.goedgekeurd.emit(this.treinpad);
3263
+ this.viewerControlsService.setOrigineelTreinPad(this.treinpad);
3264
+ }
3265
+ })).subscribe();
3262
3266
  }
3263
3267
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ViewerControlsComponent, deps: [{ token: i2$1.Store }, { token: ViewerControlService }, { token: BewegingUtils }], target: i0.ɵɵFactoryTarget.Component }); }
3264
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ViewerControlsComponent, selector: "viewer-controls", inputs: { paginationSize: "paginationSize", iaversieinfo: "iaversieinfo", treinpad: "treinpad", goedgekeurd: "goedgekeurd" }, usesOnChanges: true, ngImport: i0, template: "<button id=\"toonSideNavKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm open-sidenav-button\"\n (click)=\"viewerControlsService.toggleSideNavVisible()\"\n [class.active]=\"viewerControlsService.sideNavOpen$ | async\"\n [hidden]=\"printing$ | async\">Ritdetails\n</button>\n<button *ngIf=\"showGoedkeuren()\"\n id=\"goedkeurenKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm goedkeuren-button\"\n (click)=\"goedkeurenClick()\"\n [disabled]=\"(valideRit$ | async ) === false\"\n [hidden]=\"printing$ | async\">Goedkeuren\n</button>\n\n<carousel-controls [paginationSize]=\"paginationSize\"\n [iaversieinfo]=\"iaversieinfo\"\n [sideNavOpen]=\"viewerControlsService.sideNavOpen$ | async\">\n</carousel-controls>\n", styles: [".open-sidenav-button.active{visibility:hidden}.open-sidenav-button,.goedkeuren-button{position:absolute;top:15px;z-index:600}.open-sidenav-button{left:15px}.goedkeuren-button{right:15px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CarouselControlsComponent, selector: "carousel-controls", inputs: ["paginationSize", "iaversieinfo", "sideNavOpen"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
3268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ViewerControlsComponent, selector: "viewer-controls", inputs: { paginationSize: "paginationSize", treinpad: "treinpad", goedgekeurd: "goedgekeurd" }, usesOnChanges: true, ngImport: i0, template: "<button id=\"toonSideNavKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm open-sidenav-button\"\n (click)=\"viewerControlsService.toggleSideNavVisible()\"\n [class.active]=\"viewerControlsService.sideNavOpen$ | async\"\n [hidden]=\"printing$ | async\">Ritdetails\n</button>\n<button *ngIf=\"showGoedkeuren()\"\n id=\"goedkeurenKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm goedkeuren-button\"\n (click)=\"goedkeurenClick()\"\n [disabled]=\"(valideRit$ | async ) === false\"\n [hidden]=\"printing$ | async\">Goedkeuren\n</button>\n\n<carousel-controls [paginationSize]=\"paginationSize\"\n [sideNavOpen]=\"viewerControlsService.sideNavOpen$ | async\">\n</carousel-controls>\n", styles: [".open-sidenav-button.active{visibility:hidden}.open-sidenav-button,.goedkeuren-button{position:absolute;top:15px;z-index:600}.open-sidenav-button{left:15px}.goedkeuren-button{right:15px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CarouselControlsComponent, selector: "carousel-controls", inputs: ["paginationSize", "sideNavOpen"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
3265
3269
  }
3266
3270
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ViewerControlsComponent, decorators: [{
3267
3271
  type: Component,
3268
- args: [{ selector: 'viewer-controls', template: "<button id=\"toonSideNavKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm open-sidenav-button\"\n (click)=\"viewerControlsService.toggleSideNavVisible()\"\n [class.active]=\"viewerControlsService.sideNavOpen$ | async\"\n [hidden]=\"printing$ | async\">Ritdetails\n</button>\n<button *ngIf=\"showGoedkeuren()\"\n id=\"goedkeurenKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm goedkeuren-button\"\n (click)=\"goedkeurenClick()\"\n [disabled]=\"(valideRit$ | async ) === false\"\n [hidden]=\"printing$ | async\">Goedkeuren\n</button>\n\n<carousel-controls [paginationSize]=\"paginationSize\"\n [iaversieinfo]=\"iaversieinfo\"\n [sideNavOpen]=\"viewerControlsService.sideNavOpen$ | async\">\n</carousel-controls>\n", styles: [".open-sidenav-button.active{visibility:hidden}.open-sidenav-button,.goedkeuren-button{position:absolute;top:15px;z-index:600}.open-sidenav-button{left:15px}.goedkeuren-button{right:15px}\n"] }]
3272
+ args: [{ selector: 'viewer-controls', template: "<button id=\"toonSideNavKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm open-sidenav-button\"\n (click)=\"viewerControlsService.toggleSideNavVisible()\"\n [class.active]=\"viewerControlsService.sideNavOpen$ | async\"\n [hidden]=\"printing$ | async\">Ritdetails\n</button>\n<button *ngIf=\"showGoedkeuren()\"\n id=\"goedkeurenKnop\"\n class=\"loxia-btn loxia-btn-primary loxia-btn-sm goedkeuren-button\"\n (click)=\"goedkeurenClick()\"\n [disabled]=\"(valideRit$ | async ) === false\"\n [hidden]=\"printing$ | async\">Goedkeuren\n</button>\n\n<carousel-controls [paginationSize]=\"paginationSize\"\n [sideNavOpen]=\"viewerControlsService.sideNavOpen$ | async\">\n</carousel-controls>\n", styles: [".open-sidenav-button.active{visibility:hidden}.open-sidenav-button,.goedkeuren-button{position:absolute;top:15px;z-index:600}.open-sidenav-button{left:15px}.goedkeuren-button{right:15px}\n"] }]
3269
3273
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: BewegingUtils }], propDecorators: { paginationSize: [{
3270
3274
  type: Input
3271
- }], iaversieinfo: [{
3272
- type: Input
3273
3275
  }], treinpad: [{
3274
3276
  type: Input
3275
3277
  }], goedgekeurd: [{
@@ -3324,7 +3326,7 @@ class ActiePopoverBepaler {
3324
3326
  ongeplandeActies.entries.forEach(entry => {
3325
3327
  const treinNummerActieInfos = puicNaarOngeplandeActieMap.get(entry.key);
3326
3328
  if (!treinNummerActieInfos?.map(({ actie }) => actie).includes(entry.value.actie)) {
3327
- puicNaarOngeplandeActieMap.put(entry.key, { treinNummer: undefined, actie: entry.value.actie });
3329
+ puicNaarOngeplandeActieMap.put(entry.key, { actie: entry.value.actie });
3328
3330
  }
3329
3331
  });
3330
3332
  }
@@ -3384,12 +3386,15 @@ class SvgVisualisatieComponent {
3384
3386
  this.actieHelper = actieHelper;
3385
3387
  this.sbmService = sbmService;
3386
3388
  this.editorService = editorService;
3389
+ this.nietGeplandeActies = [];
3390
+ this.useClickArea = false;
3387
3391
  this.svgInfos$ = this.store.select('svgInfos');
3388
3392
  this.popoverInfos = [];
3389
3393
  this.clickableIds = [];
3390
3394
  this.rightClickableIds = [];
3391
3395
  this.contextMenuActions = [];
3392
3396
  this.contextMenuStyle = { display: 'none' };
3397
+ this.editable = false;
3393
3398
  this.puicNaarBeginSeinRitdeel = new Map();
3394
3399
  this.puicNaarEindSeinCombinatie = new Map();
3395
3400
  this.puicNaarAlternatieveRoute = new Map();
@@ -3413,7 +3418,7 @@ class SvgVisualisatieComponent {
3413
3418
  }));
3414
3419
  }
3415
3420
  ngOnInit() {
3416
- document.getElementById('contextMenu').addEventListener('mouseleave', () => this.hideContextMenu());
3421
+ document.getElementById('contextMenu')?.addEventListener('mouseleave', () => this.hideContextMenu());
3417
3422
  }
3418
3423
  ngOnDestroy() {
3419
3424
  this.subscriptions.forEach(s => s.unsubscribe());
@@ -3440,7 +3445,6 @@ class SvgVisualisatieComponent {
3440
3445
  this.store.dispatch(navigeerBuitenRit(puic));
3441
3446
  }
3442
3447
  }
3443
- this.store.dispatch(SetSelectedRitdeel(undefined));
3444
3448
  }
3445
3449
  handleImxviewRightClick(evt) {
3446
3450
  const fn = () => {
@@ -3471,7 +3475,7 @@ class SvgVisualisatieComponent {
3471
3475
  handleNieuweRouteToegevoegd() {
3472
3476
  this.store.select('nieuweRoute')
3473
3477
  .subscribe((nieuweRoute) => {
3474
- if (nieuweRoute.isValid()) {
3478
+ if (nieuweRoute?.isValid()) {
3475
3479
  this.store.dispatch(ResetNieuweRoute());
3476
3480
  this.store.dispatch(ritdeelInvoegen(nieuweRoute));
3477
3481
  }
@@ -3584,7 +3588,7 @@ class SvgVisualisatieComponent {
3584
3588
  });
3585
3589
  this.viewerControlsService.setValideRit(!gebrokenRit);
3586
3590
  this.store.dispatch(SetGeplandeActies(actieOpRitSelectiePuics));
3587
- const actieOpRitSelectiePuicsArray = Utils.flatMap(Array.from(actieOpRitSelectiePuics.values()), x => x);
3591
+ const actieOpRitSelectiePuicsArray = Array.from(actieOpRitSelectiePuics.values()).flat();
3588
3592
  this.store.dispatch(SetActieOpRitSelectieIds(actieOpRitSelectiePuicsArray));
3589
3593
  ritSelectiePuics = ritSelectiePuics.filter(item => actieOpRitSelectiePuicsArray.indexOf(item) < 0); // make mutually exclusive
3590
3594
  this.store.dispatch(SetRitSelectieIds(ritSelectiePuics));
@@ -3640,6 +3644,9 @@ class MstviewerComponent {
3640
3644
  this.printBewegingService = printBewegingService;
3641
3645
  this.paginationSize = 4;
3642
3646
  this.baseurl = 'https://acceptatie.raildesign.nl';
3647
+ this.debug = false;
3648
+ this.viewer = false;
3649
+ this.useClickArea = false;
3643
3650
  this.goedgekeurd = new EventEmitter();
3644
3651
  this.subscriptions = new Subscription();
3645
3652
  this.subscriptions.add(this.store.select('nieuweBewegingen').subscribe(nieuweRit => {
@@ -3690,23 +3697,26 @@ class MstviewerComponent {
3690
3697
  }
3691
3698
  }
3692
3699
  printFocusBeweging(bewegingId) {
3693
- return this.printBewegingService.printBeweging(bewegingId, this.paginationSize, this.iaversieinfo);
3700
+ return this.printBewegingService.printBeweging(bewegingId, this.paginationSize);
3694
3701
  }
3695
3702
  keurAlleActiesGoed() {
3696
3703
  this.viewerControlsService.keurAlleActiesGoed(this.ongeplandeActies);
3697
3704
  }
3698
3705
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MstviewerComponent, deps: [{ token: i2$1.Store }, { token: ViewerControlService }, { token: DebugService }, { token: PrintBewegingService }], target: i0.ɵɵFactoryTarget.Component }); }
3699
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: MstviewerComponent, selector: "mst-viewer", inputs: { iaversieinfo: "iaversieinfo", treinpad: "treinpad", ongeplandeActies: "ongeplandeActies", paginationSize: "paginationSize", baseurl: "baseurl", debug: "debug", viewer: "viewer", useClickArea: "useClickArea" }, outputs: { goedgekeurd: "goedgekeurd" }, usesOnChanges: true, ngImport: i0, template: "<loxia-messages></loxia-messages>\n<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <svg-visualisatie [useClickArea]=\"useClickArea\" [nietGeplandeActies]=\"ongeplandeActies\"></svg-visualisatie>\n\n <nav [class.active]=\"(viewerControlsService.sideNavOpen$ | async) === false\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"viewerControlsService.toggleSideNavVisible()\">&times;</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" (keurAlleActiesGoed)=\"keurAlleActiesGoed()\"\n [nietGeplandeActies]=\"ongeplandeActies\"></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\"></ritdelen-view>\n </nav>\n\n <viewer-controls [paginationSize]=\"paginationSize\"\n [iaversieinfo]=\"iaversieinfo\"\n [treinpad]=\"treinpad\"\n [goedgekeurd]=\"goedgekeurd\"\n ></viewer-controls>\n\n</div>\n", styles: ["#sidebar{min-width:350px;max-width:475px;background:#fff;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000;z-index:300}[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OverlayComponent, selector: "loxia-overlay" }, { kind: "component", type: ProgressIndicatorComponent, selector: "loxia-progress-indicator" }, { kind: "component", type: RpeComponent, selector: "rpe-component", inputs: ["baseurl", "path"] }, { kind: "component", type: RitdelenLijstComponent, selector: "ritdelen-lijst", inputs: ["nietGeplandeActies"], outputs: ["focusEmitter", "keurAlleActiesGoed"] }, { kind: "component", type: RitdelenViewComponent, selector: "ritdelen-view", outputs: ["focusEmitter"] }, { kind: "component", type: ViewerControlsComponent, selector: "viewer-controls", inputs: ["paginationSize", "iaversieinfo", "treinpad", "goedgekeurd"] }, { kind: "component", type: SvgVisualisatieComponent, selector: "svg-visualisatie", inputs: ["nietGeplandeActies", "useClickArea"] }, { kind: "component", type: MessagesComponent, selector: "loxia-messages" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
3706
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: MstviewerComponent, selector: "mst-viewer", inputs: { iaversieinfo: "iaversieinfo", treinpad: "treinpad", ongeplandeActies: "ongeplandeActies", paginationSize: "paginationSize", baseurl: "baseurl", debug: "debug", viewer: "viewer", useClickArea: "useClickArea" }, outputs: { goedgekeurd: "goedgekeurd" }, usesOnChanges: true, ngImport: i0, template: "<loxia-messages></loxia-messages>\n<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <svg-visualisatie [useClickArea]=\"useClickArea\" [nietGeplandeActies]=\"ongeplandeActies\"></svg-visualisatie>\n\n <nav [class.active]=\"(viewerControlsService.sideNavOpen$ | async) === false\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"viewerControlsService.toggleSideNavVisible()\">&times;</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" (keurAlleActiesGoed)=\"keurAlleActiesGoed()\"\n [nietGeplandeActies]=\"ongeplandeActies\"></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\"></ritdelen-view>\n </nav>\n\n <viewer-controls [paginationSize]=\"paginationSize\"\n [treinpad]=\"treinpad\"\n [goedgekeurd]=\"goedgekeurd\"\n ></viewer-controls>\n\n</div>\n", styles: ["#sidebar{min-width:350px;max-width:475px;background:#fff;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000;z-index:300}[hidden]{display:none}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OverlayComponent, selector: "loxia-overlay" }, { kind: "component", type: ProgressIndicatorComponent, selector: "loxia-progress-indicator" }, { kind: "component", type: RpeComponent, selector: "rpe-component", inputs: ["baseurl", "path"] }, { kind: "component", type: RitdelenLijstComponent, selector: "ritdelen-lijst", inputs: ["nietGeplandeActies"], outputs: ["focusEmitter", "keurAlleActiesGoed"] }, { kind: "component", type: RitdelenViewComponent, selector: "ritdelen-view", outputs: ["focusEmitter"] }, { kind: "component", type: ViewerControlsComponent, selector: "viewer-controls", inputs: ["paginationSize", "treinpad", "goedgekeurd"] }, { kind: "component", type: SvgVisualisatieComponent, selector: "svg-visualisatie", inputs: ["nietGeplandeActies", "useClickArea"] }, { kind: "component", type: MessagesComponent, selector: "loxia-messages" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
3700
3707
  }
3701
3708
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MstviewerComponent, decorators: [{
3702
3709
  type: Component,
3703
- args: [{ selector: 'mst-viewer', template: "<loxia-messages></loxia-messages>\n<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <svg-visualisatie [useClickArea]=\"useClickArea\" [nietGeplandeActies]=\"ongeplandeActies\"></svg-visualisatie>\n\n <nav [class.active]=\"(viewerControlsService.sideNavOpen$ | async) === false\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"viewerControlsService.toggleSideNavVisible()\">&times;</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" (keurAlleActiesGoed)=\"keurAlleActiesGoed()\"\n [nietGeplandeActies]=\"ongeplandeActies\"></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\"></ritdelen-view>\n </nav>\n\n <viewer-controls [paginationSize]=\"paginationSize\"\n [iaversieinfo]=\"iaversieinfo\"\n [treinpad]=\"treinpad\"\n [goedgekeurd]=\"goedgekeurd\"\n ></viewer-controls>\n\n</div>\n", styles: ["#sidebar{min-width:350px;max-width:475px;background:#fff;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000;z-index:300}[hidden]{display:none}\n"] }]
3710
+ args: [{ selector: 'mst-viewer', template: "<loxia-messages></loxia-messages>\n<loxia-overlay *ngIf=\"(progressIndicator$ | async)\">\n <loxia-progress-indicator id=\"progress-indicator\" [border]=\"false\" upperText=\"\">\n </loxia-progress-indicator>\n</loxia-overlay>\n\n<div style=\"position: relative\">\n <rpe-component [baseurl]=\"baseurl\" path=\"/mst/editor/editor.nocache.js\"></rpe-component>\n\n <svg-visualisatie [useClickArea]=\"useClickArea\" [nietGeplandeActies]=\"ongeplandeActies\"></svg-visualisatie>\n\n <nav [class.active]=\"(viewerControlsService.sideNavOpen$ | async) === false\" id=\"sidebar\">\n <div id=\"dismiss\">\n <em id=\"verbergSideNav\" class=\"fa fa-arrow-left\" (click)=\"viewerControlsService.toggleSideNavVisible()\">&times;</em>\n </div>\n <ritdelen-lijst *ngIf=\"!viewer\" (focusEmitter)=\"focusRitdeel($event)\" (keurAlleActiesGoed)=\"keurAlleActiesGoed()\"\n [nietGeplandeActies]=\"ongeplandeActies\"></ritdelen-lijst>\n <ritdelen-view *ngIf=\"viewer\" (focusEmitter)=\"focusRitdeel($event)\"></ritdelen-view>\n </nav>\n\n <viewer-controls [paginationSize]=\"paginationSize\"\n [treinpad]=\"treinpad\"\n [goedgekeurd]=\"goedgekeurd\"\n ></viewer-controls>\n\n</div>\n", styles: ["#sidebar{min-width:350px;max-width:475px;background:#fff;transition:all .3s;height:93vh;position:absolute;top:0;z-index:20}#sidebar.active{margin-left:-475px}#sidebar .sidebar-header{padding:20px;background:#6d7fcc}#dismiss{width:20px;height:20px;position:absolute;cursor:pointer;top:5px;right:0;color:#000;z-index:300}[hidden]{display:none}\n"] }]
3704
3711
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: DebugService }, { type: PrintBewegingService }], propDecorators: { iaversieinfo: [{
3705
- type: Input
3712
+ type: Input,
3713
+ args: [{ required: true }]
3706
3714
  }], treinpad: [{
3707
- type: Input
3715
+ type: Input,
3716
+ args: [{ required: true }]
3708
3717
  }], ongeplandeActies: [{
3709
- type: Input
3718
+ type: Input,
3719
+ args: [{ required: true }]
3710
3720
  }], paginationSize: [{
3711
3721
  type: Input
3712
3722
  }], baseurl: [{
@@ -3722,24 +3732,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
3722
3732
  }] } });
3723
3733
 
3724
3734
  let SignaleringsbeeldInfoResource = class SignaleringsbeeldInfoResource extends Resource {
3725
- constructor(restHandler, store) {
3735
+ constructor(restHandler, store, sbControllerService) {
3726
3736
  super(restHandler);
3737
+ this.restHandler = restHandler;
3727
3738
  this.store = store;
3739
+ this.sbControllerService = sbControllerService;
3728
3740
  this.subscriptions = new Subscription();
3729
- this.subscriptions.add(this.store.select('baseUrl').subscribe(baseUrl => this.$setUrl(baseUrl)));
3741
+ this.subscriptions.add(this.store.select('baseUrl').subscribe(baseUrl => {
3742
+ this.$setUrl(baseUrl);
3743
+ sbControllerService.configuration.basePath = baseUrl + '/mst';
3744
+ }));
3730
3745
  }
3731
3746
  ngOnDestroy() {
3732
3747
  this.subscriptions.unsubscribe();
3733
3748
  }
3734
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SignaleringsbeeldInfoResource, deps: [{ token: i1$1.ResourceHandler }, { token: i2$1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
3749
+ laadSignaleringsbeeldInfo(versie, pplgs) {
3750
+ return this.sbControllerService.getSignaleringsbeelden(versie, pplgs);
3751
+ }
3752
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SignaleringsbeeldInfoResource, deps: [{ token: i1$1.ResourceHandler }, { token: i2$1.Store }, { token: SbControllerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3735
3753
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SignaleringsbeeldInfoResource }); }
3736
3754
  };
3737
- __decorate([
3738
- ResourceAction({
3739
- path: '/',
3740
- method: ResourceRequestMethod.Post
3741
- })
3742
- ], SignaleringsbeeldInfoResource.prototype, "laadSignaleringsbeeldInfo", void 0);
3743
3755
  __decorate([
3744
3756
  ResourceAction({
3745
3757
  path: '/valideeriaversie'
@@ -3752,7 +3764,7 @@ SignaleringsbeeldInfoResource = __decorate([
3752
3764
  ], SignaleringsbeeldInfoResource);
3753
3765
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SignaleringsbeeldInfoResource, decorators: [{
3754
3766
  type: Injectable
3755
- }], ctorParameters: () => [{ type: i1$1.ResourceHandler }, { type: i2$1.Store }], propDecorators: { laadSignaleringsbeeldInfo: [], getBestaatIALevering: [] } });
3767
+ }], ctorParameters: () => [{ type: i1$1.ResourceHandler }, { type: i2$1.Store }, { type: SbControllerService }], propDecorators: { getBestaatIALevering: [] } });
3756
3768
  class SignaleringsbeeldInfoDto extends ResourceModel {
3757
3769
  constructor(data) {
3758
3770
  super();
@@ -3780,6 +3792,8 @@ class BaseRestService {
3780
3792
  this.httpClient = httpClient;
3781
3793
  this.store = store;
3782
3794
  this.subscriptions = new Subscription();
3795
+ this.baseUrl = '';
3796
+ this.iaVersie = '';
3783
3797
  this.subscriptions.add(this.store.select('baseUrl').subscribe(baseUrl => this.baseUrl = baseUrl));
3784
3798
  this.subscriptions.add(this.store.select('iaVersie').subscribe(iaVersie => this.iaVersie = iaVersie.versie));
3785
3799
  }
@@ -3955,13 +3969,13 @@ class Ritdeel {
3955
3969
  return retval;
3956
3970
  }
3957
3971
  getVrijebaanRijwegplan() {
3958
- return this.vrijebaanRijwegplanRijwegDwangCombi.rijwegplan;
3972
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.rijwegplan;
3959
3973
  }
3960
3974
  getVrijebaanRijweg() {
3961
- return this.vrijebaanRijwegplanRijwegDwangCombi.rijweg;
3975
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.rijweg;
3962
3976
  }
3963
3977
  getVrijebaanDwang() {
3964
- return this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
3978
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.dwang;
3965
3979
  }
3966
3980
  getDwangNummer() {
3967
3981
  return this.rijwegplanRijwegDwangCombi.getDwangNummer();
@@ -3978,7 +3992,7 @@ class Ritdeel {
3978
3992
  isBinnenWindow() {
3979
3993
  return (this.zichtbaarheid === RitdeelZichtbaarheid.ZICHTBAAR ||
3980
3994
  this.zichtbaarheid === RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_GEBRUIKER)
3981
- && this.zichtbaarBuitenPaginatie === false;
3995
+ && !this.zichtbaarBuitenPaginatie;
3982
3996
  }
3983
3997
  isNietBeschikbaar() {
3984
3998
  return this.zichtbaarheid === RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM;
@@ -4001,10 +4015,10 @@ class Ritdeel {
4001
4015
  }
4002
4016
  }
4003
4017
  heeftVrijebaanInfo() {
4004
- return this.vrijebaanRijwegplanRijwegDwangCombi && !!this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
4018
+ return !!this.vrijebaanRijwegplanRijwegDwangCombi && !!this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
4005
4019
  }
4006
4020
  getVrijebaanPrlRoute() {
4007
- return this.vrijebaanRijwegplanRijwegDwangCombi.getRoute();
4021
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.getRoute();
4008
4022
  }
4009
4023
  getTopologieElementen() {
4010
4024
  return this.topoElementen;
@@ -4036,10 +4050,10 @@ class Ritdeel {
4036
4050
  getZichtbaarheidBuitenPaginatie() {
4037
4051
  return this.zichtbaarBuitenPaginatie;
4038
4052
  }
4039
- bepaalTopologieElementen(signaleringsBeeldManagerService) {
4040
- const topoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getRoute());
4053
+ bepaalTopologieElementen(sbmService) {
4054
+ const topoElementen = sbmService.bepaalRouteElementen(this.getRoute());
4041
4055
  if (this.heeftVrijebaanInfo()) {
4042
- const vrijebaanTopoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4056
+ const vrijebaanTopoElementen = sbmService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4043
4057
  topoElementen.push(...vrijebaanTopoElementen);
4044
4058
  }
4045
4059
  this.topoElementen = topoElementen;
@@ -4085,7 +4099,7 @@ class RitLezerService {
4085
4099
  ritDelen.push(new Ritdeel(dwangInfo, beweging.ritActies, beweging, vrijebaanDwangInfo, vervolgSpoor, []));
4086
4100
  }
4087
4101
  extractVrijebaanDwangInfo(beweging, rijwegPlan, rijweg) {
4088
- let vrijebaanDwangInfo = null;
4102
+ let vrijebaanDwangInfo = undefined;
4089
4103
  let vervolgSpoor;
4090
4104
  if (beweging.naarSpoor.endsWith(SPOOR_NAAR_VRIJEBAAN_POSTFIX) ||
4091
4105
  beweging.naarSpoor.endsWith(SPOOR_NAAR_VEERWISSEL_VRIJEBAAN_POSTFIX)) {
@@ -4099,9 +4113,9 @@ class RitLezerService {
4099
4113
  vrijebaanRijweg = vrijebaanRijwegen[0];
4100
4114
  vrijebaanDwang = vrijebaanRijweg.getDwangVoorDwangNummer(0);
4101
4115
  vervolgSpoor = vrijebaanRijwegplan.getVervolgSpoor(vrijebaanRijweg);
4116
+ vrijebaanDwangInfo =
4117
+ new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4102
4118
  }
4103
- vrijebaanDwangInfo =
4104
- new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4105
4119
  }
4106
4120
  }
4107
4121
  return { vrijebaanDwangInfo, vervolgSpoor };
@@ -4154,7 +4168,7 @@ class BepaalOngeplandeActiesEffect {
4154
4168
  this.bepaalOngeplandeActies$ = createEffect(() => this.actions$.pipe(ofType(BepaalOngeplandeActies), withLatestFrom(this.store), map(([action, store]) => {
4155
4169
  const puicActieMap = new ArrayMultimap();
4156
4170
  const nietGevondenTakken = [];
4157
- const logMeldingDTOs = [];
4171
+ const logMeldingDTOs$ = [];
4158
4172
  const acties = store.ritDelen.flatMap(rd => rd.acties);
4159
4173
  action.ongeplandeActies.forEach(actie => {
4160
4174
  const alreadyAdded = acties.filter(a => a.id === actie.id).length > 0;
@@ -4170,11 +4184,11 @@ class BepaalOngeplandeActiesEffect {
4170
4184
  if (!spoortak && nietGevondenTakken.indexOf(takId) < 0) {
4171
4185
  nietGevondenTakken.push(takId);
4172
4186
  const melding = MeldingBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken);
4173
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4187
+ logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4174
4188
  }
4175
4189
  else if (spoortak) {
4176
4190
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
4177
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4191
+ logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4178
4192
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
4179
4193
  }
4180
4194
  }
@@ -4183,8 +4197,8 @@ class BepaalOngeplandeActiesEffect {
4183
4197
  if (nietGevondenTakken.length > 0) {
4184
4198
  this.messagesService.showMessage(MessageBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken));
4185
4199
  }
4186
- if (logMeldingDTOs.length > 0) {
4187
- this.mstLogResource.logMessages(logMeldingDTOs);
4200
+ if (logMeldingDTOs$.length > 0) {
4201
+ forkJoin(logMeldingDTOs$).pipe(tap(dtos => this.mstLogResource.logMessages(dtos))).subscribe();
4188
4202
  }
4189
4203
  this.store.dispatch(SetOngeplandeActies(puicActieMap));
4190
4204
  this.store.dispatch(SetOngeplandeActieSelectieIds(Array.from(puicActieMap.keys())));
@@ -4377,7 +4391,7 @@ class FocusEffect {
4377
4391
  const dwangPuics = this.getPuics(topoElementen);
4378
4392
  if (ritdeel.isNietBeschikbaar()) {
4379
4393
  this.store.dispatch(SetOngeplandeActiesBepaald(false));
4380
- this.store.dispatch(navigeerVanaf(actie.paginationSize, actie.iaVersieInfo, ritdeel));
4394
+ this.store.dispatch(navigeerVanaf(actie.paginationSize, ritdeel));
4381
4395
  }
4382
4396
  return focusOpIds(dwangPuics);
4383
4397
  })));
@@ -4399,16 +4413,16 @@ class LaadRouteFilesEffect {
4399
4413
  this.ritLezer = ritLezer;
4400
4414
  this.editorService = editorService;
4401
4415
  this.messagesService = messagesService;
4402
- this.authActions$ = createEffect(() => this.actions$.pipe(ofType(SetSignaleringsbeeldInfoDtos), map(action => this.laadRouteFiles(action))), { dispatch: false });
4416
+ this.authActions$ = createEffect(() => this.actions$.pipe(ofType(SetSignaleringsbeeldInfoDtos), withLatestFrom(this.store), map(([action, storeState]) => this.laadRouteFiles(action, storeState.iaVersie.versie))), { dispatch: false });
4403
4417
  }
4404
- laadRouteFiles(actie) {
4418
+ laadRouteFiles(actie, iaVersie) {
4405
4419
  const isReady = this.editorService.isReady();
4406
4420
  isReady.then(() => {
4407
4421
  const pplgs = this.bepaalSbDtoPplgs(actie.dtos);
4408
- const promise = this.editorService.laadRouteFiles(actie.iaversieinfo.versie, pplgs);
4422
+ const promise = this.editorService.laadRouteFiles(iaVersie, pplgs);
4409
4423
  promise.then(() => {
4410
4424
  this.updateRitdelen(actie);
4411
- }, err => {
4425
+ }, (err) => {
4412
4426
  this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4413
4427
  });
4414
4428
  });
@@ -4419,7 +4433,7 @@ class LaadRouteFilesEffect {
4419
4433
  if (ritdelen.length === 0) {
4420
4434
  ritdelen = this.ritLezer.parseRit(actie.treinpad, actie.ritGewijzigdToegestaan);
4421
4435
  }
4422
- this.store.dispatch(setRitDelen(ritdelen, actie.paginationSize, actie.iaversieinfo));
4436
+ this.store.dispatch(setRitDelen(ritdelen, actie.paginationSize));
4423
4437
  this.store.dispatch(setEditable(actie.treinpad.ritStatus !== 'Definitief'));
4424
4438
  });
4425
4439
  }, 0);
@@ -4427,7 +4441,7 @@ class LaadRouteFilesEffect {
4427
4441
  bepaalSbDtoPplgs(dtos) {
4428
4442
  const pplgs = [];
4429
4443
  dtos.forEach(dto => {
4430
- dto.pplgs.forEach(pplg => {
4444
+ dto.pplgs?.forEach(pplg => {
4431
4445
  if (!pplgs.includes(pplg)) {
4432
4446
  pplgs.push(pplg);
4433
4447
  }
@@ -4468,14 +4482,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4468
4482
  }] });
4469
4483
 
4470
4484
  class LaadSignaleringsbeeldenEffect {
4471
- constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesSerivce) {
4485
+ constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesService) {
4472
4486
  this.actions$ = actions$;
4473
4487
  this.store = store;
4474
4488
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
4475
4489
  this.editorService = editorService;
4476
4490
  this.sbiResource = sbiResource;
4477
4491
  this.connectorService = connectorService;
4478
- this.messagesSerivce = messagesSerivce;
4492
+ this.messagesService = messagesService;
4479
4493
  this.SVG_PIXEL_RUIMTE = 30;
4480
4494
  this.verwerkRitdelen$ = createEffect(() => this.actions$.pipe(ofType(setRitDelen, navigeer, navigeerVanaf), withLatestFrom(this.store), map(([actie, storeState]) => {
4481
4495
  this.store.dispatch(SetOngeplandeActiesBepaald(false));
@@ -4489,14 +4503,14 @@ class LaadSignaleringsbeeldenEffect {
4489
4503
  }).pipe(switchMap(this.getOtherRand.bind(this)), switchMap(this.loadRouteFilesAndSignaleringsbeeldInfo.bind(this)), switchMap(this.loadSignaleringsbeelden.bind(this)), map(this.processSvgsAndUpdateRitdelen.bind(this))))), { dispatch: false });
4490
4504
  }
4491
4505
  handleSignaleringsbeeldInfo({ actie, storeState }) {
4492
- return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto(actie.pplgs, storeState.iaVersie)).pipe(take(1), tap((dtos) => this.processResponse({ dtos, storeState, actie })), catchError((err) => {
4493
- this.messagesSerivce.showMessage(MessageBuilder.nietGevondenSBI(err));
4506
+ return this.sbiResource.laadSignaleringsbeeldInfo(storeState.iaVersie.versie, actie.pplgs).pipe(take(1), tap((dtos) => this.processResponse({ dtos, storeState, actie })), catchError((err) => {
4507
+ this.messagesService.showMessage(MessageBuilder.nietGevondenSBI(err));
4494
4508
  return throwError(() => err);
4495
4509
  }));
4496
4510
  }
4497
4511
  processResponse({ dtos, storeState, actie }) {
4498
4512
  if (dtos && dtos.filter(dto => dto.metVisualisatie).length > 12) {
4499
- this.messagesSerivce.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4513
+ this.messagesService.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4500
4514
  }
4501
4515
  this.store.dispatch(SetSignaleringsbeeldInfoDtos(dtos, storeState.iaVersie, actie.rit, actie.paginationSize, actie.ritGewijzigdToegestaan));
4502
4516
  this.store.dispatch(SetVisibleSignaleringsbeeldInfoDtos(dtos));
@@ -4506,14 +4520,14 @@ class LaadSignaleringsbeeldenEffect {
4506
4520
  }
4507
4521
  loadRouteFilesAndSignaleringsbeeldInfo({ otherPplg, rand, storeState }) {
4508
4522
  this.editorService.laadRouteFiles(storeState.iaVersie.versie, [rand.getPPLG(), otherPplg]);
4509
- return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto([rand.getPPLG(), otherPplg], storeState.iaVersie)).pipe(map(dtos => ({ dtos, storeState })));
4523
+ return this.sbiResource.laadSignaleringsbeeldInfo(storeState.iaVersie.versie, [rand.getPPLG(), otherPplg]).pipe(map(dtos => ({ dtos, storeState })));
4510
4524
  }
4511
4525
  loadSignaleringsbeelden({ dtos, storeState }) {
4512
- return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, storeState, dtos })));
4526
+ return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, ritDelen: storeState.ritDelen, dtos })));
4513
4527
  }
4514
- processSvgsAndUpdateRitdelen({ svgDataUrls, storeState, dtos }) {
4528
+ processSvgsAndUpdateRitdelen({ svgDataUrls, ritDelen, dtos }) {
4515
4529
  this.verwerkSvgs(svgDataUrls);
4516
- const nieuweRitdelen = this.updateRitdelen(storeState.ritDelen, dtos);
4530
+ const nieuweRitdelen = this.updateRitdelen(ritDelen, dtos);
4517
4531
  this.store.dispatch(UpdateVisibleSignaleringsbeeldInfoDtos(dtos));
4518
4532
  this.store.dispatch(updateRitDelen(nieuweRitdelen));
4519
4533
  }
@@ -4526,11 +4540,11 @@ class LaadSignaleringsbeeldenEffect {
4526
4540
  const visibleRitPplgs = visibleRitDelen.map(r => r.getPplg()).filter(this.distinct);
4527
4541
  const visibleDtos = this.bepaalZichtbareDtos(visibleRitPplgs, storeDtos);
4528
4542
  const loadingDtos = this.bepaalToLoadDtos(visibleDtos, ritDelen, visibleRitDelen, visibleRitPplgs, storeState);
4529
- this.editorService.laadSignaleringsbeelden(actie.iaversieinfo.versie, loadingDtos).pipe(tap(svgDataUrls => {
4543
+ this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, loadingDtos).pipe(tap(svgDataUrls => {
4530
4544
  this.verwerkSvgs(svgDataUrls);
4531
4545
  this.updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos);
4532
4546
  }), catchError(err => {
4533
- this.messagesSerivce.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4547
+ this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4534
4548
  throw err;
4535
4549
  })).subscribe();
4536
4550
  }
@@ -4545,10 +4559,6 @@ class LaadSignaleringsbeeldenEffect {
4545
4559
  this.store.dispatch(updateRitDelen(nieuweRitdelen));
4546
4560
  }, 0);
4547
4561
  }
4548
- createSignaleringsbeeldInfoQueryDto(pplgs, iainfo) {
4549
- const datum = iainfo.ingangsDatum && !isNaN(iainfo.ingangsDatum.getTime()) ? iainfo.ingangsDatum.toISOString() : undefined;
4550
- return { pplgs, versie: iainfo.versie, ingangsDatum: datum };
4551
- }
4552
4562
  verwerkSvgs(svgDataUrls) {
4553
4563
  this.store.dispatch(SetSvgInfos(this.bepaalSvgInfos(svgDataUrls)));
4554
4564
  }
@@ -4575,7 +4585,7 @@ class LaadSignaleringsbeeldenEffect {
4575
4585
  bepaalZichtbareDtos(visibleRitPplgs, dtos) {
4576
4586
  const visibleDtos = [];
4577
4587
  visibleRitPplgs.forEach(pplg => {
4578
- dtos.filter(dto => dto.pplgs.includes(pplg)).forEach(dto => {
4588
+ dtos.filter(dto => dto.pplgs?.includes(pplg)).forEach(dto => {
4579
4589
  if (!visibleDtos.includes(dto)) {
4580
4590
  visibleDtos.push(dto);
4581
4591
  }
@@ -4585,13 +4595,13 @@ class LaadSignaleringsbeeldenEffect {
4585
4595
  dtos.filter(d => !visibleDtos.includes(d)).forEach(d => d.metVisualisatie = false);
4586
4596
  return visibleDtos;
4587
4597
  }
4588
- distinct(value, index, self) {
4589
- return self.indexOf(value) === index;
4598
+ distinct(value, index, values) {
4599
+ return values.indexOf(value) === index;
4590
4600
  }
4591
4601
  addPrevNonVisibleDto(firstIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
4592
4602
  if (firstIdx >= 0) {
4593
4603
  const pplg = ritdelen[firstIdx].getPplg();
4594
- const ritdeelDtos = allDtos.filter(dto => dto.pplgs.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
4604
+ const ritdeelDtos = allDtos.filter(dto => dto.pplgs?.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
4595
4605
  if (!visibleRitPplgs.includes(pplg) && ritdeelDtos.length > 0) {
4596
4606
  ritdeelDtos.filter(d => !loadingDtos.includes(d)).forEach(d => {
4597
4607
  d.metVisualisatie = false;
@@ -4606,7 +4616,7 @@ class LaadSignaleringsbeeldenEffect {
4606
4616
  addNextNonVisibleDto(lastIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
4607
4617
  if (lastIdx <= ritdelen.length - 1) {
4608
4618
  const pplg = ritdelen[lastIdx].getPplg();
4609
- const ritdeelDtos = allDtos.filter(dto => dto.pplgs.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
4619
+ const ritdeelDtos = allDtos.filter(dto => dto.pplgs?.includes(pplg)).filter(dto => !loadingDtos.includes(dto));
4610
4620
  if (!visibleRitPplgs.includes(pplg) && ritdeelDtos.length > 0) {
4611
4621
  ritdeelDtos.filter(d => !loadingDtos.includes(d)).forEach(d => {
4612
4622
  d.metVisualisatie = false;
@@ -4675,7 +4685,7 @@ class LaadSignaleringsbeeldenEffect {
4675
4685
  }
4676
4686
  }
4677
4687
  }
4678
- this.updateZichtbaarheidAangrezendeRitdelen(min, max, ritdelen, visibleDtos);
4688
+ this.updateZichtbaarheidAangrenzendeRitdelen(min, max, ritdelen, visibleDtos);
4679
4689
  return this.updateZichtbaarheidBuitenWindow(ritdelen, visibleDtos);
4680
4690
  }
4681
4691
  updateZichtbaarheidBuitenWindow(nieuweRitdelen, visibleDtos) {
@@ -4691,7 +4701,7 @@ class LaadSignaleringsbeeldenEffect {
4691
4701
  }
4692
4702
  return nieuweRitdelen;
4693
4703
  }
4694
- updateZichtbaarheidAangrezendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4704
+ updateZichtbaarheidAangrenzendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4695
4705
  let i = min - 1;
4696
4706
  while (i >= 0) {
4697
4707
  i = this.updateZichtbaarHeid(i, 0, visibleDtos, nieuweRitdelen) - 1;
@@ -4727,9 +4737,11 @@ class LaadSignaleringsbeeldenEffect {
4727
4737
  }
4728
4738
  bevatGevisualiseerdePplg(visibleDtos, pplg) {
4729
4739
  for (const dto of visibleDtos) {
4730
- for (const dtopplg of dto.pplgs) {
4731
- if (dtopplg === pplg) {
4732
- return true;
4740
+ if (dto.pplgs) {
4741
+ for (const dtopplg of dto.pplgs) {
4742
+ if (dtopplg === pplg) {
4743
+ return true;
4744
+ }
4733
4745
  }
4734
4746
  }
4735
4747
  }
@@ -4779,7 +4791,7 @@ class LaadSignaleringsbeeldenEffect {
4779
4791
  pplgsWindow.push(itemPplg);
4780
4792
  }
4781
4793
  const pplgDtos = [];
4782
- dtos.filter(dto => dto.pplgs.includes(itemPplg)).forEach(dto => {
4794
+ dtos.filter(dto => dto.pplgs?.includes(itemPplg)).forEach(dto => {
4783
4795
  if (!pplgDtos.includes(dto)) {
4784
4796
  pplgDtos.push(dto);
4785
4797
  }
@@ -4826,11 +4838,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4826
4838
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: BewegingVerrijkerService }] });
4827
4839
 
4828
4840
  class RitdelenEffect {
4829
- constructor(actions$, store, sbmService, rijwegPlanEditorService) {
4841
+ constructor(actions$, store, sbmService, editorService) {
4830
4842
  this.actions$ = actions$;
4831
4843
  this.store = store;
4832
4844
  this.sbmService = sbmService;
4833
- this.rijwegPlanEditorService = rijwegPlanEditorService;
4845
+ this.editorService = editorService;
4834
4846
  this.updateRitDelen$ = createEffect(() => this.actions$.pipe(ofType(updateRitDelen), withLatestFrom(this.store), map(([actie, _storeState]) => {
4835
4847
  const nieuweRitDelen = actie.ritDelen.map(ritDeel => ritDeel.isZichtbaar() ?
4836
4848
  ritDeel.copyMetAlternatieveRoutes(this.sbmService.bepaalAlternativeRoutes(ritDeel.getRijweg())) : ritDeel);
@@ -4848,25 +4860,25 @@ class RitdelenEffect {
4848
4860
  return setRitdelenAfterUpdate(ritDelen);
4849
4861
  })));
4850
4862
  this.ritdeelInvoegen$ = createEffect(() => this.actions$.pipe(ofType(ritdeelInvoegen), withLatestFrom(this.store), map(([actie, storeState]) => {
4851
- const ritDelen = this.ritdeelInvoegenFunc(storeState.ritDelen, actie.nieuweRoute, this.rijwegPlanEditorService, this.sbmService);
4863
+ const ritDelen = this.ritdeelInvoegenFunc(storeState.ritDelen, actie.nieuweRoute);
4852
4864
  return setRitdelenAfterUpdate(ritDelen);
4853
4865
  })));
4854
4866
  }
4855
- ritdeelInvoegenFunc(ritDelen, nieuweRoute, rijwegPlanEditorService, sbmService) {
4867
+ ritdeelInvoegenFunc(ritDelen, nieuweRoute) {
4856
4868
  const origineelRitdeel = nieuweRoute.beginSeinOpRitdeel.ritdeel;
4857
4869
  const beginSein = nieuweRoute.beginSeinOpRitdeel.sein;
4858
- const rijwegplan = rijwegPlanEditorService.getRijwegplan(beginSein.getPPLG());
4870
+ const rijwegplan = this.editorService.getRijwegplan(beginSein.getPPLG());
4859
4871
  const dwangen = JsJavaUtil.listToArray(rijwegplan.getOnderliggendeDwangenTotEnVanSein(origineelRitdeel.getDwang(), beginSein));
4860
4872
  const isSamengesteldeRoute = dwangen[0] && dwangen[1];
4861
4873
  let newRitdeel1 = origineelRitdeel;
4862
4874
  if (isSamengesteldeRoute) {
4863
- newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen);
4875
+ newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen);
4864
4876
  }
4865
- if (nieuweRoute.combinatieVoorEindsein.isVrijeBaanRijweg()) {
4866
- this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService);
4877
+ if (nieuweRoute.combinatieVoorEindsein?.isVrijeBaanRijweg()) {
4878
+ this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute);
4867
4879
  }
4868
4880
  else {
4869
- this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen);
4881
+ this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen);
4870
4882
  }
4871
4883
  if (isSamengesteldeRoute) {
4872
4884
  ritDelen.splice(ritDelen.indexOf(origineelRitdeel), 1);
@@ -4881,38 +4893,39 @@ class RitdelenEffect {
4881
4893
  }
4882
4894
  }
4883
4895
  }
4884
- verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen) {
4896
+ verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen) {
4885
4897
  // dwangen in 2 nieuwe ritdelen verwerken voor de knip
4886
4898
  const nieuweRijweg1 = rijwegplan.getRijwegVoorSeinen(dwangen[0].getRoute().getBeginSein(), dwangen[0].getRoute().getEindSein());
4887
4899
  const dwangInfo1 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg1, dwangen[0]);
4888
- const newRitdeel1 = new Ritdeel(dwangInfo1, [], null, null, null, []);
4900
+ const newRitdeel1 = new Ritdeel(dwangInfo1, [], undefined, undefined, undefined, []);
4889
4901
  // remove vrijbaan info uit ritdeel
4890
- newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = null;
4891
- newRitdeel1.vervolgSpoor = null;
4892
- newRitdeel1.bepaalTopologieElementen(sbmService);
4902
+ newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = undefined;
4903
+ newRitdeel1.vervolgSpoor = undefined;
4904
+ newRitdeel1.bepaalTopologieElementen(this.sbmService);
4893
4905
  this.insertRitdeel(ritDelen, origineelRitdeel, newRitdeel1);
4894
4906
  const nieuweRijweg2 = rijwegplan.getRijwegVoorSeinen(dwangen[1].getRoute().getBeginSein(), dwangen[1].getRoute().getEindSein());
4895
4907
  const dwangInfo2 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg2, dwangen[1]);
4896
- const newRitdeel2 = new Ritdeel(dwangInfo2, [], null, null, null, []);
4897
- newRitdeel2.bepaalTopologieElementen(sbmService);
4908
+ const newRitdeel2 = new Ritdeel(dwangInfo2, [], undefined, undefined, undefined, []);
4909
+ newRitdeel2.bepaalTopologieElementen(this.sbmService);
4898
4910
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel2);
4899
4911
  return newRitdeel1;
4900
4912
  }
4901
- extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService) {
4913
+ extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute) {
4902
4914
  newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = nieuweRoute.combinatieVoorEindsein;
4903
- const vbrwp = nieuweRoute.combinatieVoorEindsein.rijwegplan;
4904
- newRitdeel1.vervolgSpoor = vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein.rijweg);
4905
- newRitdeel1.bepaalTopologieElementen(sbmService);
4915
+ const vbrwp = nieuweRoute.combinatieVoorEindsein?.rijwegplan;
4916
+ newRitdeel1.vervolgSpoor = nieuweRoute.combinatieVoorEindsein ?
4917
+ vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein?.rijweg) : undefined;
4918
+ newRitdeel1.bepaalTopologieElementen(this.sbmService);
4906
4919
  }
4907
- maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen) {
4920
+ maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen) {
4908
4921
  let newRitdeel = this.createRitdeel(nieuweRoute);
4909
- const altRoutes = sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4922
+ const altRoutes = this.sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4910
4923
  newRitdeel = newRitdeel.copyMetAlternatieveRoutes(altRoutes);
4911
- newRitdeel.bepaalTopologieElementen(sbmService);
4924
+ newRitdeel.bepaalTopologieElementen(this.sbmService);
4912
4925
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel);
4913
4926
  }
4914
4927
  createRitdeel(nieuweRoute) {
4915
- return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], null, null, null, []);
4928
+ return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], undefined, undefined, undefined, []);
4916
4929
  }
4917
4930
  insertRitdeel(ritdelen, naRitdeelPositie, newRitdeel) {
4918
4931
  const idx = ritdelen.indexOf(naRitdeelPositie);
@@ -4963,13 +4976,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4963
4976
  type: Injectable
4964
4977
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: SignaleringsBeeldManagerService }, { type: i4.SignaleringsbeeldSvgUtilityService }] });
4965
4978
 
4979
+ class ProgressIndicator {
4980
+ constructor(lowerText, upperText, iconClass) {
4981
+ this.lowerText = '';
4982
+ this.upperText = '';
4983
+ this.iconClass = '';
4984
+ this.lowerText = lowerText ?? this.lowerText;
4985
+ this.upperText = upperText ?? this.upperText;
4986
+ this.iconClass = iconClass ?? this.iconClass;
4987
+ }
4988
+ }
4989
+
4966
4990
  class NieuweRoute {
4967
4991
  constructor(beginSeinOpRitdeel, combinatieVoorEindsein) {
4968
4992
  this.beginSeinOpRitdeel = beginSeinOpRitdeel;
4969
4993
  this.combinatieVoorEindsein = combinatieVoorEindsein;
4970
4994
  }
4971
4995
  isValid() {
4972
- return this.combinatieVoorEindsein !== null;
4996
+ return !!this.combinatieVoorEindsein;
4973
4997
  }
4974
4998
  }
4975
4999
 
@@ -5035,7 +5059,7 @@ function addRitdeelActieFunc(ritDelen, { ritDeel, actie }) {
5035
5059
  const onIdsActionHandler = (action) => on(action, (_, { ids }) => ids);
5036
5060
  const createIdsReducer = (action) => createReducer([], onIdsActionHandler(action));
5037
5061
  const editableReducer = createReducer(true, on(setEditable, (_, { editable }) => editable));
5038
- const progressIndicatorReducer = createReducer(undefined, on(ShowProgress, () => ({ progressIndicator: {} })), on(ClearProgress, () => undefined));
5062
+ const progressIndicatorReducer = createReducer({}, on(ShowProgress, () => ({ progressIndicator: new ProgressIndicator() })), on(ClearProgress, () => ({})));
5039
5063
  const svgInfoReducer = createReducer([], on(SetSvgInfos, (_, { svgInfos }) => svgInfos));
5040
5064
  const debugReducer = createReducer(false, on(SetDebug, (_, { debug }) => debug));
5041
5065
  const ritSelectieIdsReducer = createIdsReducer(SetRitSelectieIds);
@@ -5061,12 +5085,10 @@ const ongeplandeActieReducer = createReducer(new ArrayMultimap(), on(SetOngeplan
5061
5085
  ongeplandeActie.puics.forEach(puic => ongeplandeActies.delete(puic, ongeplandeActie));
5062
5086
  return new ArrayMultimap(ongeplandeActies);
5063
5087
  }));
5064
- const ongeplandeActieSelectieIdsReducer = createReducer([],
5065
- // on(MstActions.SetOngeplandeActieSelectieIds, (_, { ids }) => ids),
5066
- onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5088
+ const ongeplandeActieSelectieIdsReducer = createReducer([], onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5067
5089
  ongeplandeActie.puics.filter(puic => !ids.includes(puic)).forEach(puic => ids.push(puic));
5068
5090
  return [...ids];
5069
- }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => [].concat(ids.includes(id) ? ids.filter(_id => _id !== id) : ids)));
5091
+ }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => ids.includes(id) ? ids.filter(_id => _id !== id) : ids));
5070
5092
  const gebrokenRitSelectieIdsReducer = createIdsReducer(SetGebrokenRitSelectieIds);
5071
5093
  const alternatievenSelectieIdsReducer = createIdsReducer(SetAlternatievenSelectieIds);
5072
5094
  const beginSeinSelectieIdsReducer = createIdsReducer(SetBeginSeinSelectieIds);
@@ -5075,16 +5097,15 @@ const alternatievenClickableIdsReducer = createIdsReducer(SetAlternatievenClicka
5075
5097
  const eindSeinenClickableIdsReducer = createIdsReducer(SetEindSeinenClickableIds);
5076
5098
  const connectorClickableIdsReducer = createIdsReducer(SetConnectorenClickableIds);
5077
5099
  const beginSeinRightClickableIdsReducer = createIdsReducer(SetBeginSeinRightClickableIds);
5078
- const nieuweRouteReducer = createReducer(new NieuweRoute(null, null), on(SetNieuwRouteBeginSein, (_, { startSeinOpRitdeel }) => new NieuweRoute(startSeinOpRitdeel, null)), on(SetNieuwRouteEindSein, (nieuweRoute, { combinatieVoorEindsein }) => new NieuweRoute(nieuweRoute.beginSeinOpRitdeel, combinatieVoorEindsein)), on(ResetNieuweRoute, () => new NieuweRoute(null, null)));
5100
+ const nieuweRouteReducer = createReducer(undefined, on(SetNieuwRouteBeginSein, (_, { startSeinOpRitdeel }) => new NieuweRoute(startSeinOpRitdeel, undefined)), on(SetNieuwRouteEindSein, (nieuweRoute, { combinatieVoorEindsein }) => nieuweRoute ? new NieuweRoute(nieuweRoute.beginSeinOpRitdeel, combinatieVoorEindsein) : undefined), on(ResetNieuweRoute, () => undefined));
5079
5101
  const signaleringsbeeldInfoDtosReducer = createReducer([], on(SetSignaleringsbeeldInfoDtos, (_, { dtos }) => dtos), on(UpdateSignaleringsbeeldInfoDtos, (_, { dtos }) => [...dtos]));
5080
5102
  const visibleSbInfoDtosReducer = createReducer([], on(SetVisibleSignaleringsbeeldInfoDtos, (_, { dtos }) => dtos), on(UpdateVisibleSignaleringsbeeldInfoDtos, (_, { dtos }) => [...dtos]));
5081
- const iaVersieReducer = createReducer({}, on(SetIaVersie, (_, { iaVersie }) => Object.assign({}, iaVersie, { versie: iaVersie.versie.toUpperCase() })));
5103
+ const iaVersieReducer = createReducer({ versie: 'unknown', ingangsDatum: new Date() }, on(SetIaVersie, (_, { iaVersie }) => Object.assign({}, iaVersie, { versie: iaVersie.versie.toUpperCase() })));
5082
5104
  const algemeneRitInfoDtoReducer = createReducer({}, on(SetAlgemeneRitInfo, (_, { algemeneRitInfoDto }) => algemeneRitInfoDto));
5083
5105
  const ongeplandeActiesBepaaldReducer = createReducer(false, on(SetOngeplandeActiesBepaald, (_, { bepaald }) => bepaald));
5084
- const nieuweBewegingReducer = createReducer({}, on(UpdateRit, (_, { bewegingen }) => bewegingen));
5085
- const baseUrlReducer = createReducer(undefined, on(SetBaseUrl, (_, { baseUrl }) => baseUrl));
5086
- const focusIdsReducer = createReducer({}, on(focusOpIds, (_, { puics }) => puics));
5087
- const selectedRitdeelIdReducer = createReducer({}, on(SetSelectedRitdeel, (_, { id }) => id));
5106
+ const nieuweBewegingReducer = createReducer([], on(UpdateRit, (_, { bewegingen }) => bewegingen));
5107
+ const baseUrlReducer = createReducer('', on(SetBaseUrl, (_, { baseUrl }) => baseUrl));
5108
+ const focusIdsReducer = createReducer([], on(focusOpIds, (_, { puics }) => puics));
5088
5109
  const storeReducers = {
5089
5110
  ritDelen: ritdelenReducer,
5090
5111
  ritSelectieIds: ritSelectieIdsReducer,
@@ -5113,9 +5134,9 @@ const storeReducers = {
5113
5134
  nieuweBewegingen: nieuweBewegingReducer,
5114
5135
  baseUrl: baseUrlReducer,
5115
5136
  focusIds: focusIdsReducer,
5116
- selectedRitdeelId: selectedRitdeelIdReducer
5117
5137
  };
5118
5138
 
5139
+ // @ts-nocheck
5119
5140
  class ZoneUtil {
5120
5141
  constructor(ngZone) {
5121
5142
  this.ngZone = ngZone;
@@ -5178,6 +5199,7 @@ class MstViewerModule {
5178
5199
  constructor(service, zoneUtil) {
5179
5200
  this.service = service;
5180
5201
  // maak de EditorService toegankelijk voor GWT code
5202
+ // @ts-ignore
5181
5203
  window['rpe'] = {
5182
5204
  EditorService: zoneUtil.proxy(service)
5183
5205
  };