@loxia/mst-viewer 8.1.3-202511190346 → 8.1.3-202511191508

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 (67) hide show
  1. package/esm2022/lib/atomic-components/message/message.component.mjs +3 -3
  2. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +7 -4
  3. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +5 -6
  4. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +13 -7
  5. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +18 -12
  6. package/esm2022/lib/components/rpe/rpe.component.mjs +6 -2
  7. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +8 -7
  8. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +16 -13
  9. package/esm2022/lib/model/km-range.mjs +2 -2
  10. package/esm2022/lib/model/nieuwe-route.mjs +2 -2
  11. package/esm2022/lib/model/ritdeel.mjs +10 -10
  12. package/esm2022/lib/mst-viewer.module.mjs +6 -5
  13. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +2 -1
  14. package/esm2022/lib/services/base-rest.service.mjs +3 -1
  15. package/esm2022/lib/services/beweging-utils.service.mjs +6 -6
  16. package/esm2022/lib/services/debug.service.mjs +3 -3
  17. package/esm2022/lib/services/editor.service.mjs +3 -1
  18. package/esm2022/lib/services/print-beweging.service.mjs +23 -20
  19. package/esm2022/lib/services/rit-lezer.service.mjs +4 -4
  20. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +1 -1
  21. package/esm2022/lib/services/viewer-control.service.mjs +8 -6
  22. package/esm2022/lib/state/actions/actions.mjs +2 -5
  23. package/esm2022/lib/state/actions/ritdelen.actions.mjs +4 -4
  24. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +8 -7
  25. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +1 -1
  26. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +1 -1
  27. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +1 -1
  28. package/esm2022/lib/state/effect/focus-effect.mjs +2 -2
  29. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +7 -7
  30. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +14 -14
  31. package/esm2022/lib/state/effect/ritdelen.effect.mjs +26 -25
  32. package/esm2022/lib/state/mst-editor-state.mjs +10 -13
  33. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +1 -1
  34. package/esm2022/lib/util/actie-helper.mjs +26 -22
  35. package/esm2022/lib/util/actie-popover-bepaler.mjs +2 -2
  36. package/esm2022/lib/util/logging-helper.mjs +31 -33
  37. package/esm2022/lib/util/multi-map.mjs +2 -3
  38. package/esm2022/lib/util/utils.mjs +5 -5
  39. package/esm2022/lib/util/zone-util.mjs +2 -1
  40. package/fesm2022/loxia-mst-viewer.mjs +346 -313
  41. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  42. package/lib/atomic-components/message/message.component.d.ts +2 -2
  43. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +1 -1
  44. package/lib/components/carousel-controls/carousel-controls.component.d.ts +1 -3
  45. package/lib/components/mstviewer/mstviewer.component.d.ts +2 -2
  46. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +2 -2
  47. package/lib/components/rpe/rpe.component.d.ts +1 -1
  48. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +1 -1
  49. package/lib/components/viewer-controls/viewer-controls.component.d.ts +3 -4
  50. package/lib/model/km-range.d.ts +1 -1
  51. package/lib/model/nieuwe-route.d.ts +2 -2
  52. package/lib/model/ritdeel.d.ts +11 -10
  53. package/lib/services/print-beweging.service.d.ts +1 -3
  54. package/lib/services/signalerings-beeld-manager.service.d.ts +2 -2
  55. package/lib/services/viewer-control.service.d.ts +0 -2
  56. package/lib/state/actions/actions.d.ts +1 -7
  57. package/lib/state/actions/ritdelen.actions.d.ts +3 -7
  58. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +2 -1
  59. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +1 -1
  60. package/lib/state/effect/laad-route-files.effect.d.ts +2 -3
  61. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +9 -9
  62. package/lib/state/effect/ritdelen.effect.d.ts +7 -6
  63. package/lib/state/mst-editor-state.d.ts +20 -83
  64. package/lib/util/actie-helper.d.ts +4 -4
  65. package/lib/util/logging-helper.d.ts +2 -1
  66. package/lib/util/utils.d.ts +0 -1
  67. package/package.json +1 -1
@@ -11,8 +11,8 @@ 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';
@@ -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 => 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);
@@ -2372,38 +2411,35 @@ class LoggingHelper {
2372
2411
  this.store = store;
2373
2412
  }
2374
2413
  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
2414
+ return combineLatest([
2415
+ this.store.select('algemeneRitInfoDto'),
2416
+ this.store.select('iaVersie')
2417
+ ]).pipe(take(1), map(([algemeneRitInfoDto, iaVersie]) => {
2418
+ let actieDto = null;
2419
+ if (actie) {
2420
+ actieDto = {
2421
+ pplgNaam: actie.pplgNaam,
2422
+ ritActieTypeOmschrijving: actie.ritActieTypeOmschrijving,
2423
+ ritActieStatus: actie.ritActieStatus,
2424
+ bewegingId: actie.bewegingId,
2425
+ wisselType: actie.wisselType,
2426
+ wisselNaam: actie.wisselNaam,
2427
+ wisselKantCode: actie.wisselKantCode,
2428
+ vanKilometerlint: actie.vanKilometerlint,
2429
+ vanKilometrering: actie.vanKilometrering,
2430
+ totKilometerlint: actie.totKilometerlint,
2431
+ totKilometrering: actie.totKilometrering
2432
+ };
2433
+ }
2434
+ return {
2435
+ iaVersie: iaVersie.versie,
2436
+ meldingLevel: melding.meldingLevel,
2437
+ meldingMessage: melding.meldingMessage,
2438
+ actieDto,
2439
+ algemeneRitInfoDto,
2440
+ sbinfoDtos: this.getSbInfoDtos()
2397
2441
  };
2398
- }
2399
- return {
2400
- iaVersie,
2401
- meldingLevel: melding.meldingLevel,
2402
- meldingMessage: melding.meldingMessage,
2403
- actieDto,
2404
- algemeneRitInfoDto,
2405
- sbinfoDtos: this.getSbInfoDtos()
2406
- };
2442
+ }));
2407
2443
  }
2408
2444
  getSbInfoDtos() {
2409
2445
  const sbInfoDtos = [];
@@ -2515,6 +2551,7 @@ class ActieHelper {
2515
2551
  this.messagesService = messagesService;
2516
2552
  this.store = store;
2517
2553
  this.loggingHelper = loggingHelper;
2554
+ this.debug = false;
2518
2555
  this.store.select('debug').subscribe(debug => this.debug = debug);
2519
2556
  }
2520
2557
  static getActieTopoElements(ritDeel, sbmService) {
@@ -2548,10 +2585,10 @@ class ActieHelper {
2548
2585
  }
2549
2586
  }
2550
2587
  static actieComparator(actie1, actie2) {
2551
- if (actie1.vanKilometrering !== actie2.vanKilometrering) {
2588
+ if (actie1.vanKilometrering && actie2.vanKilometrering && actie1.vanKilometrering !== actie2.vanKilometrering) {
2552
2589
  return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
2553
2590
  }
2554
- if (actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2591
+ if (actie1.ritActieTypeOmschrijving && actie2.ritActieTypeOmschrijving && actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2555
2592
  return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
2556
2593
  }
2557
2594
  if (actie1.wisselNaam !== actie2.wisselNaam) {
@@ -2591,9 +2628,9 @@ class ActieHelper {
2591
2628
  // make sure the elems are sorted in ascending order
2592
2629
  static sorteerTopoElementen(topoElems) {
2593
2630
  const topoElementen = topoElems.slice();
2594
- let lint = null;
2595
- let first = null;
2596
- let second = null;
2631
+ let lint = undefined;
2632
+ let first;
2633
+ let second;
2597
2634
  for (const topoElement of topoElementen) {
2598
2635
  let kilometreringen = null;
2599
2636
  const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
@@ -2625,11 +2662,11 @@ class ActieHelper {
2625
2662
  if (!totKilometreringen && vanKilometreringen) {
2626
2663
  totKilometreringen = [new MstKilometrering(vanKilometreringen[0].getKmLint(), 100000)];
2627
2664
  }
2628
- if (vanKilometreringen[0] > totKilometreringen[0]) {
2665
+ if (vanKilometreringen && totKilometreringen && vanKilometreringen[0] > totKilometreringen[0]) {
2629
2666
  kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, -1), this.addKm(totKilometreringen, 1)));
2630
2667
  }
2631
2668
  else {
2632
- kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, 1), this.addKm(totKilometreringen, -1)));
2669
+ kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen ?? [], 1), this.addKm(totKilometreringen ?? [], -1)));
2633
2670
  }
2634
2671
  });
2635
2672
  }
@@ -2720,21 +2757,23 @@ class ActieHelper {
2720
2757
  else {
2721
2758
  const puics = [];
2722
2759
  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());
2760
+ if (actie.vanKilometrering && actie.vanKilometerlint && actie.totKilometrering && actie.totKilometerlint) {
2761
+ let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
2762
+ let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
2763
+ if (actie.vanKilometrering > actie.totKilometrering) {
2764
+ const temp = { van: vanKilometrering, tot: totKilometrering };
2765
+ vanKilometrering = temp.tot;
2766
+ totKilometrering = temp.van;
2767
+ }
2768
+ if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
2769
+ puics.push(kmRange.topologyElement.getPuic());
2770
+ }
2732
2771
  }
2733
2772
  });
2734
2773
  if (puics.length === 0) {
2735
2774
  actieZonderElementen.push(actie.id);
2736
2775
  const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
2737
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
2776
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(dto => logMeldingDTOs.push(dto))).subscribe();
2738
2777
  }
2739
2778
  retval.putAll(actie, puics);
2740
2779
  }
@@ -2750,7 +2789,7 @@ class ActieHelper {
2750
2789
  verwerkTopoElementen(topoElementen) {
2751
2790
  const kmRanges = [];
2752
2791
  let topoElementenZonderKms = [];
2753
- let laatstePuntKms = null;
2792
+ let laatstePuntKms = undefined;
2754
2793
  topoElementen.forEach(elem => {
2755
2794
  const kms = JsJavaUtil.listToArray(elem.getKilometreringen());
2756
2795
  if (kms.length > 0) {
@@ -2764,7 +2803,7 @@ class ActieHelper {
2764
2803
  }
2765
2804
  });
2766
2805
  if (topoElementenZonderKms.length > 0 && laatstePuntKms) {
2767
- ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, null, kmRanges);
2806
+ ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, undefined, kmRanges);
2768
2807
  }
2769
2808
  return kmRanges;
2770
2809
  }
@@ -2827,14 +2866,14 @@ class ActieHelper {
2827
2866
  if (ActieHelper.isKantCodeLinks(kantcode)) {
2828
2867
  return wissel.getLeft();
2829
2868
  }
2830
- return null;
2869
+ return undefined;
2831
2870
  }
2832
2871
  bepaalPuicVoorWisselSlijpenActie(actie) {
2833
2872
  const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
2834
2873
  if (!storingsSymboolPuic && this.debug) {
2835
2874
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
2836
2875
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
2837
- this.mstLogResource.logMessages([this.loggingHelper.maakLogDTO(melding, actie)]);
2876
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(logDto => this.mstLogResource.logMessages([logDto]))).subscribe();
2838
2877
  }
2839
2878
  return storingsSymboolPuic ? [storingsSymboolPuic] : [];
2840
2879
  }
@@ -2849,10 +2888,16 @@ class RitdelenLijstComponent {
2849
2888
  constructor(store, sbmService) {
2850
2889
  this.store = store;
2851
2890
  this.sbmService = sbmService;
2891
+ this.nietGeplandeActies = [];
2852
2892
  this.focusEmitter = new EventEmitter();
2853
2893
  this.keurAlleActiesGoed = new EventEmitter();
2894
+ this.ritdeelViewModels = [];
2854
2895
  this.selectedRitdeelActies = [];
2855
2896
  this.selectedRitdeelOngeplandeActies = [];
2897
+ this.disableActieKnoppenVanRitdeel = true;
2898
+ this.editable = false;
2899
+ this.ongeplandeActiesMap = new ArrayMultimap();
2900
+ this.geplandeActies = new ArrayMultimap();
2856
2901
  this.NG_ACTIE_PREFIX = '* ';
2857
2902
  this.subscriptions = [];
2858
2903
  this.subscriptions.push(store.select('ritDelen').subscribe((ritdelen) => {
@@ -2863,9 +2908,6 @@ class RitdelenLijstComponent {
2863
2908
  this.subscriptions.push(store.select('ongeplandeActies').subscribe(acties => this.ongeplandeActiesMap = acties));
2864
2909
  this.subscriptions.push(store.select('geplandeActies').subscribe(acties => this.geplandeActies = acties));
2865
2910
  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
2911
  this.subscriptions.push(combineLatest([
2870
2912
  this.store.select('ritDelen'),
2871
2913
  this.store.select('ongeplandeActies')
@@ -2902,12 +2944,14 @@ class RitdelenLijstComponent {
2902
2944
  this.store.dispatch(deleteRitdeel(ritdeel));
2903
2945
  }
2904
2946
  deleteActiesUitRit() {
2905
- this.selectedRitdeel.acties.slice().forEach(actie => {
2947
+ this.selectedRitdeel?.acties.slice().forEach(actie => {
2906
2948
  this.deleteActieUitRit(actie);
2907
2949
  });
2908
2950
  }
2909
2951
  deleteActieUitRit(actie) {
2910
- const acties = this.selectedRitdeel.acties;
2952
+ if (!this.selectedRitdeel)
2953
+ return;
2954
+ const acties = this.selectedRitdeel.acties ?? [];
2911
2955
  const idx = acties.indexOf(actie);
2912
2956
  if (idx >= 0) {
2913
2957
  this.verhuisActieNaarOngepland(actie);
@@ -2933,7 +2977,7 @@ class RitdelenLijstComponent {
2933
2977
  }
2934
2978
  voegActieToeAanRit(ongeplandeActie) {
2935
2979
  const idx = this.selectedRitdeelOngeplandeActies.indexOf(ongeplandeActie);
2936
- if (idx >= 0) {
2980
+ if (idx >= 0 && this.selectedRitdeel) {
2937
2981
  this.store.dispatch(addRitdeelActie(this.selectedRitdeel, this.selectedRitdeelOngeplandeActies[idx].actie));
2938
2982
  this.store.dispatch(AddGeplandeActie(ongeplandeActie.actie, ongeplandeActie.puics));
2939
2983
  this.store.dispatch(DeleteOngeplandeActie(ongeplandeActie));
@@ -3035,13 +3079,13 @@ class RitdelenLijstComponent {
3035
3079
  return `${prefix}${ActieHelper.getVSTActieOmschrijving(actie)}`;
3036
3080
  }
3037
3081
  bepaalPrefixVoorActieOmschrijving(actie) {
3038
- const prefix = '';
3039
- if (this.selectedRitdeel.acties.includes(actie)) {
3082
+ const noPrefix = '';
3083
+ if (this.selectedRitdeel?.acties.includes(actie)) {
3040
3084
  // Afwijkende naam bij niet gevisualiseerde actie in rit
3041
3085
  const puics = this.geplandeActies.get(actie);
3042
- return puics.length > 0 ? prefix : this.NG_ACTIE_PREFIX;
3086
+ return puics.length > 0 ? noPrefix : this.NG_ACTIE_PREFIX;
3043
3087
  }
3044
- return prefix;
3088
+ return noPrefix;
3045
3089
  }
3046
3090
  actieVanKmTekst(actie) {
3047
3091
  if (ActieHelper.isWisselSlijpenActie(actie)) {
@@ -3062,6 +3106,7 @@ class RitdelenLijstComponent {
3062
3106
  return ritdeel.getPplgString();
3063
3107
  }
3064
3108
  getKantCode(stand) {
3109
+ // @ts-ignore
3065
3110
  if (stand === window['domein'].Stand.LINKS) {
3066
3111
  return 'L';
3067
3112
  }
@@ -3198,49 +3243,18 @@ class RitdeelViewModel {
3198
3243
  }
3199
3244
  }
3200
3245
 
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
3246
  class ViewerControlsComponent {
3236
3247
  constructor(store, viewerControlsService, bewegingUtils) {
3237
3248
  this.store = store;
3238
3249
  this.viewerControlsService = viewerControlsService;
3239
3250
  this.bewegingUtils = bewegingUtils;
3240
3251
  this.paginationSize = 4;
3252
+ this.treinpad = undefined;
3253
+ this.goedgekeurd = new EventEmitter();
3241
3254
  this.printing$ = this.viewerControlsService.isPrinting$();
3242
3255
  this.valideRit$ = this.viewerControlsService.isValideRit$();
3243
3256
  this.subscriptions = new Subscription();
3257
+ this.editable = false;
3244
3258
  this.subscriptions.add(this.store.select('editable').subscribe(editable => this.editable = editable));
3245
3259
  }
3246
3260
  ngOnChanges({ treinpad }) {
@@ -3252,24 +3266,23 @@ class ViewerControlsComponent {
3252
3266
  return this.editable && this.viewerControlsService.selectieInfos.length !== 0;
3253
3267
  }
3254
3268
  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
- }
3269
+ this.store.select('ritDelen').pipe(filter(ritdelen => !!ritdelen), tap(ritDelen => {
3270
+ if (this.treinpad) {
3271
+ delete this.treinpad.aantalRitActies;
3272
+ this.treinpad.bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(ritDelen, this.viewerControlsService.origineelTreinPad.bewegingen);
3273
+ this.goedgekeurd.emit(this.treinpad);
3274
+ this.viewerControlsService.setOrigineelTreinPad(this.treinpad);
3275
+ }
3276
+ })).subscribe();
3262
3277
  }
3263
3278
  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" }] }); }
3279
+ 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
3280
  }
3266
3281
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ViewerControlsComponent, decorators: [{
3267
3282
  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"] }]
3283
+ 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
3284
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: BewegingUtils }], propDecorators: { paginationSize: [{
3270
3285
  type: Input
3271
- }], iaversieinfo: [{
3272
- type: Input
3273
3286
  }], treinpad: [{
3274
3287
  type: Input
3275
3288
  }], goedgekeurd: [{
@@ -3324,7 +3337,7 @@ class ActiePopoverBepaler {
3324
3337
  ongeplandeActies.entries.forEach(entry => {
3325
3338
  const treinNummerActieInfos = puicNaarOngeplandeActieMap.get(entry.key);
3326
3339
  if (!treinNummerActieInfos?.map(({ actie }) => actie).includes(entry.value.actie)) {
3327
- puicNaarOngeplandeActieMap.put(entry.key, { treinNummer: undefined, actie: entry.value.actie });
3340
+ puicNaarOngeplandeActieMap.put(entry.key, { actie: entry.value.actie });
3328
3341
  }
3329
3342
  });
3330
3343
  }
@@ -3384,12 +3397,15 @@ class SvgVisualisatieComponent {
3384
3397
  this.actieHelper = actieHelper;
3385
3398
  this.sbmService = sbmService;
3386
3399
  this.editorService = editorService;
3400
+ this.nietGeplandeActies = [];
3401
+ this.useClickArea = false;
3387
3402
  this.svgInfos$ = this.store.select('svgInfos');
3388
3403
  this.popoverInfos = [];
3389
3404
  this.clickableIds = [];
3390
3405
  this.rightClickableIds = [];
3391
3406
  this.contextMenuActions = [];
3392
3407
  this.contextMenuStyle = { display: 'none' };
3408
+ this.editable = false;
3393
3409
  this.puicNaarBeginSeinRitdeel = new Map();
3394
3410
  this.puicNaarEindSeinCombinatie = new Map();
3395
3411
  this.puicNaarAlternatieveRoute = new Map();
@@ -3413,7 +3429,7 @@ class SvgVisualisatieComponent {
3413
3429
  }));
3414
3430
  }
3415
3431
  ngOnInit() {
3416
- document.getElementById('contextMenu').addEventListener('mouseleave', () => this.hideContextMenu());
3432
+ document.getElementById('contextMenu')?.addEventListener('mouseleave', () => this.hideContextMenu());
3417
3433
  }
3418
3434
  ngOnDestroy() {
3419
3435
  this.subscriptions.forEach(s => s.unsubscribe());
@@ -3440,7 +3456,6 @@ class SvgVisualisatieComponent {
3440
3456
  this.store.dispatch(navigeerBuitenRit(puic));
3441
3457
  }
3442
3458
  }
3443
- this.store.dispatch(SetSelectedRitdeel(undefined));
3444
3459
  }
3445
3460
  handleImxviewRightClick(evt) {
3446
3461
  const fn = () => {
@@ -3471,7 +3486,7 @@ class SvgVisualisatieComponent {
3471
3486
  handleNieuweRouteToegevoegd() {
3472
3487
  this.store.select('nieuweRoute')
3473
3488
  .subscribe((nieuweRoute) => {
3474
- if (nieuweRoute.isValid()) {
3489
+ if (nieuweRoute?.isValid()) {
3475
3490
  this.store.dispatch(ResetNieuweRoute());
3476
3491
  this.store.dispatch(ritdeelInvoegen(nieuweRoute));
3477
3492
  }
@@ -3584,7 +3599,7 @@ class SvgVisualisatieComponent {
3584
3599
  });
3585
3600
  this.viewerControlsService.setValideRit(!gebrokenRit);
3586
3601
  this.store.dispatch(SetGeplandeActies(actieOpRitSelectiePuics));
3587
- const actieOpRitSelectiePuicsArray = Utils.flatMap(Array.from(actieOpRitSelectiePuics.values()), x => x);
3602
+ const actieOpRitSelectiePuicsArray = Array.from(actieOpRitSelectiePuics.values()).reduce((acc, val) => acc.concat(val), []);
3588
3603
  this.store.dispatch(SetActieOpRitSelectieIds(actieOpRitSelectiePuicsArray));
3589
3604
  ritSelectiePuics = ritSelectiePuics.filter(item => actieOpRitSelectiePuicsArray.indexOf(item) < 0); // make mutually exclusive
3590
3605
  this.store.dispatch(SetRitSelectieIds(ritSelectiePuics));
@@ -3640,6 +3655,9 @@ class MstviewerComponent {
3640
3655
  this.printBewegingService = printBewegingService;
3641
3656
  this.paginationSize = 4;
3642
3657
  this.baseurl = 'https://acceptatie.raildesign.nl';
3658
+ this.debug = false;
3659
+ this.viewer = false;
3660
+ this.useClickArea = false;
3643
3661
  this.goedgekeurd = new EventEmitter();
3644
3662
  this.subscriptions = new Subscription();
3645
3663
  this.subscriptions.add(this.store.select('nieuweBewegingen').subscribe(nieuweRit => {
@@ -3690,23 +3708,26 @@ class MstviewerComponent {
3690
3708
  }
3691
3709
  }
3692
3710
  printFocusBeweging(bewegingId) {
3693
- return this.printBewegingService.printBeweging(bewegingId, this.paginationSize, this.iaversieinfo);
3711
+ return this.printBewegingService.printBeweging(bewegingId, this.paginationSize);
3694
3712
  }
3695
3713
  keurAlleActiesGoed() {
3696
3714
  this.viewerControlsService.keurAlleActiesGoed(this.ongeplandeActies);
3697
3715
  }
3698
3716
  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" }] }); }
3717
+ 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
3718
  }
3701
3719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: MstviewerComponent, decorators: [{
3702
3720
  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"] }]
3721
+ 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
3722
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: DebugService }, { type: PrintBewegingService }], propDecorators: { iaversieinfo: [{
3705
- type: Input
3723
+ type: Input,
3724
+ args: [{ required: true }]
3706
3725
  }], treinpad: [{
3707
- type: Input
3726
+ type: Input,
3727
+ args: [{ required: true }]
3708
3728
  }], ongeplandeActies: [{
3709
- type: Input
3729
+ type: Input,
3730
+ args: [{ required: true }]
3710
3731
  }], paginationSize: [{
3711
3732
  type: Input
3712
3733
  }], baseurl: [{
@@ -3780,6 +3801,8 @@ class BaseRestService {
3780
3801
  this.httpClient = httpClient;
3781
3802
  this.store = store;
3782
3803
  this.subscriptions = new Subscription();
3804
+ this.baseUrl = '';
3805
+ this.iaVersie = '';
3783
3806
  this.subscriptions.add(this.store.select('baseUrl').subscribe(baseUrl => this.baseUrl = baseUrl));
3784
3807
  this.subscriptions.add(this.store.select('iaVersie').subscribe(iaVersie => this.iaVersie = iaVersie.versie));
3785
3808
  }
@@ -3955,13 +3978,13 @@ class Ritdeel {
3955
3978
  return retval;
3956
3979
  }
3957
3980
  getVrijebaanRijwegplan() {
3958
- return this.vrijebaanRijwegplanRijwegDwangCombi.rijwegplan;
3981
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.rijwegplan;
3959
3982
  }
3960
3983
  getVrijebaanRijweg() {
3961
- return this.vrijebaanRijwegplanRijwegDwangCombi.rijweg;
3984
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.rijweg;
3962
3985
  }
3963
3986
  getVrijebaanDwang() {
3964
- return this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
3987
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.dwang;
3965
3988
  }
3966
3989
  getDwangNummer() {
3967
3990
  return this.rijwegplanRijwegDwangCombi.getDwangNummer();
@@ -3978,7 +4001,7 @@ class Ritdeel {
3978
4001
  isBinnenWindow() {
3979
4002
  return (this.zichtbaarheid === RitdeelZichtbaarheid.ZICHTBAAR ||
3980
4003
  this.zichtbaarheid === RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_GEBRUIKER)
3981
- && this.zichtbaarBuitenPaginatie === false;
4004
+ && !this.zichtbaarBuitenPaginatie;
3982
4005
  }
3983
4006
  isNietBeschikbaar() {
3984
4007
  return this.zichtbaarheid === RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM;
@@ -4001,10 +4024,10 @@ class Ritdeel {
4001
4024
  }
4002
4025
  }
4003
4026
  heeftVrijebaanInfo() {
4004
- return this.vrijebaanRijwegplanRijwegDwangCombi && !!this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
4027
+ return !!this.vrijebaanRijwegplanRijwegDwangCombi && !!this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
4005
4028
  }
4006
4029
  getVrijebaanPrlRoute() {
4007
- return this.vrijebaanRijwegplanRijwegDwangCombi.getRoute();
4030
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.getRoute();
4008
4031
  }
4009
4032
  getTopologieElementen() {
4010
4033
  return this.topoElementen;
@@ -4036,10 +4059,10 @@ class Ritdeel {
4036
4059
  getZichtbaarheidBuitenPaginatie() {
4037
4060
  return this.zichtbaarBuitenPaginatie;
4038
4061
  }
4039
- bepaalTopologieElementen(signaleringsBeeldManagerService) {
4040
- const topoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getRoute());
4062
+ bepaalTopologieElementen(sbmService) {
4063
+ const topoElementen = sbmService.bepaalRouteElementen(this.getRoute());
4041
4064
  if (this.heeftVrijebaanInfo()) {
4042
- const vrijebaanTopoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4065
+ const vrijebaanTopoElementen = sbmService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4043
4066
  topoElementen.push(...vrijebaanTopoElementen);
4044
4067
  }
4045
4068
  this.topoElementen = topoElementen;
@@ -4085,7 +4108,7 @@ class RitLezerService {
4085
4108
  ritDelen.push(new Ritdeel(dwangInfo, beweging.ritActies, beweging, vrijebaanDwangInfo, vervolgSpoor, []));
4086
4109
  }
4087
4110
  extractVrijebaanDwangInfo(beweging, rijwegPlan, rijweg) {
4088
- let vrijebaanDwangInfo = null;
4111
+ let vrijebaanDwangInfo = undefined;
4089
4112
  let vervolgSpoor;
4090
4113
  if (beweging.naarSpoor.endsWith(SPOOR_NAAR_VRIJEBAAN_POSTFIX) ||
4091
4114
  beweging.naarSpoor.endsWith(SPOOR_NAAR_VEERWISSEL_VRIJEBAAN_POSTFIX)) {
@@ -4099,9 +4122,9 @@ class RitLezerService {
4099
4122
  vrijebaanRijweg = vrijebaanRijwegen[0];
4100
4123
  vrijebaanDwang = vrijebaanRijweg.getDwangVoorDwangNummer(0);
4101
4124
  vervolgSpoor = vrijebaanRijwegplan.getVervolgSpoor(vrijebaanRijweg);
4125
+ vrijebaanDwangInfo =
4126
+ new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4102
4127
  }
4103
- vrijebaanDwangInfo =
4104
- new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4105
4128
  }
4106
4129
  }
4107
4130
  return { vrijebaanDwangInfo, vervolgSpoor };
@@ -4154,7 +4177,7 @@ class BepaalOngeplandeActiesEffect {
4154
4177
  this.bepaalOngeplandeActies$ = createEffect(() => this.actions$.pipe(ofType(BepaalOngeplandeActies), withLatestFrom(this.store), map(([action, store]) => {
4155
4178
  const puicActieMap = new ArrayMultimap();
4156
4179
  const nietGevondenTakken = [];
4157
- const logMeldingDTOs = [];
4180
+ const logMeldingDTOs$ = [];
4158
4181
  const acties = store.ritDelen.flatMap(rd => rd.acties);
4159
4182
  action.ongeplandeActies.forEach(actie => {
4160
4183
  const alreadyAdded = acties.filter(a => a.id === actie.id).length > 0;
@@ -4170,11 +4193,11 @@ class BepaalOngeplandeActiesEffect {
4170
4193
  if (!spoortak && nietGevondenTakken.indexOf(takId) < 0) {
4171
4194
  nietGevondenTakken.push(takId);
4172
4195
  const melding = MeldingBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken);
4173
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4196
+ logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4174
4197
  }
4175
4198
  else if (spoortak) {
4176
4199
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
4177
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4200
+ logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4178
4201
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
4179
4202
  }
4180
4203
  }
@@ -4183,8 +4206,8 @@ class BepaalOngeplandeActiesEffect {
4183
4206
  if (nietGevondenTakken.length > 0) {
4184
4207
  this.messagesService.showMessage(MessageBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken));
4185
4208
  }
4186
- if (logMeldingDTOs.length > 0) {
4187
- this.mstLogResource.logMessages(logMeldingDTOs);
4209
+ if (logMeldingDTOs$.length > 0) {
4210
+ forkJoin(logMeldingDTOs$).pipe(tap(dtos => this.mstLogResource.logMessages(dtos))).subscribe();
4188
4211
  }
4189
4212
  this.store.dispatch(SetOngeplandeActies(puicActieMap));
4190
4213
  this.store.dispatch(SetOngeplandeActieSelectieIds(Array.from(puicActieMap.keys())));
@@ -4377,7 +4400,7 @@ class FocusEffect {
4377
4400
  const dwangPuics = this.getPuics(topoElementen);
4378
4401
  if (ritdeel.isNietBeschikbaar()) {
4379
4402
  this.store.dispatch(SetOngeplandeActiesBepaald(false));
4380
- this.store.dispatch(navigeerVanaf(actie.paginationSize, actie.iaVersieInfo, ritdeel));
4403
+ this.store.dispatch(navigeerVanaf(actie.paginationSize, ritdeel));
4381
4404
  }
4382
4405
  return focusOpIds(dwangPuics);
4383
4406
  })));
@@ -4399,16 +4422,16 @@ class LaadRouteFilesEffect {
4399
4422
  this.ritLezer = ritLezer;
4400
4423
  this.editorService = editorService;
4401
4424
  this.messagesService = messagesService;
4402
- this.authActions$ = createEffect(() => this.actions$.pipe(ofType(SetSignaleringsbeeldInfoDtos), map(action => this.laadRouteFiles(action))), { dispatch: false });
4425
+ this.authActions$ = createEffect(() => this.actions$.pipe(ofType(SetSignaleringsbeeldInfoDtos), withLatestFrom(this.store), map(([action, storeState]) => this.laadRouteFiles(action, storeState.iaVersie.versie))), { dispatch: false });
4403
4426
  }
4404
- laadRouteFiles(actie) {
4427
+ laadRouteFiles(actie, iaVersie) {
4405
4428
  const isReady = this.editorService.isReady();
4406
4429
  isReady.then(() => {
4407
4430
  const pplgs = this.bepaalSbDtoPplgs(actie.dtos);
4408
- const promise = this.editorService.laadRouteFiles(actie.iaversieinfo.versie, pplgs);
4431
+ const promise = this.editorService.laadRouteFiles(iaVersie, pplgs);
4409
4432
  promise.then(() => {
4410
4433
  this.updateRitdelen(actie);
4411
- }, err => {
4434
+ }, (err) => {
4412
4435
  this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4413
4436
  });
4414
4437
  });
@@ -4419,7 +4442,7 @@ class LaadRouteFilesEffect {
4419
4442
  if (ritdelen.length === 0) {
4420
4443
  ritdelen = this.ritLezer.parseRit(actie.treinpad, actie.ritGewijzigdToegestaan);
4421
4444
  }
4422
- this.store.dispatch(setRitDelen(ritdelen, actie.paginationSize, actie.iaversieinfo));
4445
+ this.store.dispatch(setRitDelen(ritdelen, actie.paginationSize));
4423
4446
  this.store.dispatch(setEditable(actie.treinpad.ritStatus !== 'Definitief'));
4424
4447
  });
4425
4448
  }, 0);
@@ -4468,14 +4491,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4468
4491
  }] });
4469
4492
 
4470
4493
  class LaadSignaleringsbeeldenEffect {
4471
- constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesSerivce) {
4494
+ constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesService) {
4472
4495
  this.actions$ = actions$;
4473
4496
  this.store = store;
4474
4497
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
4475
4498
  this.editorService = editorService;
4476
4499
  this.sbiResource = sbiResource;
4477
4500
  this.connectorService = connectorService;
4478
- this.messagesSerivce = messagesSerivce;
4501
+ this.messagesService = messagesService;
4479
4502
  this.SVG_PIXEL_RUIMTE = 30;
4480
4503
  this.verwerkRitdelen$ = createEffect(() => this.actions$.pipe(ofType(setRitDelen, navigeer, navigeerVanaf), withLatestFrom(this.store), map(([actie, storeState]) => {
4481
4504
  this.store.dispatch(SetOngeplandeActiesBepaald(false));
@@ -4490,13 +4513,13 @@ class LaadSignaleringsbeeldenEffect {
4490
4513
  }
4491
4514
  handleSignaleringsbeeldInfo({ actie, storeState }) {
4492
4515
  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));
4516
+ this.messagesService.showMessage(MessageBuilder.nietGevondenSBI(err));
4494
4517
  return throwError(() => err);
4495
4518
  }));
4496
4519
  }
4497
4520
  processResponse({ dtos, storeState, actie }) {
4498
4521
  if (dtos && dtos.filter(dto => dto.metVisualisatie).length > 12) {
4499
- this.messagesSerivce.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4522
+ this.messagesService.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4500
4523
  }
4501
4524
  this.store.dispatch(SetSignaleringsbeeldInfoDtos(dtos, storeState.iaVersie, actie.rit, actie.paginationSize, actie.ritGewijzigdToegestaan));
4502
4525
  this.store.dispatch(SetVisibleSignaleringsbeeldInfoDtos(dtos));
@@ -4509,11 +4532,11 @@ class LaadSignaleringsbeeldenEffect {
4509
4532
  return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto([rand.getPPLG(), otherPplg], storeState.iaVersie)).pipe(map(dtos => ({ dtos, storeState })));
4510
4533
  }
4511
4534
  loadSignaleringsbeelden({ dtos, storeState }) {
4512
- return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, storeState, dtos })));
4535
+ return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, ritDelen: storeState.ritDelen, dtos })));
4513
4536
  }
4514
- processSvgsAndUpdateRitdelen({ svgDataUrls, storeState, dtos }) {
4537
+ processSvgsAndUpdateRitdelen({ svgDataUrls, ritDelen, dtos }) {
4515
4538
  this.verwerkSvgs(svgDataUrls);
4516
- const nieuweRitdelen = this.updateRitdelen(storeState.ritDelen, dtos);
4539
+ const nieuweRitdelen = this.updateRitdelen(ritDelen, dtos);
4517
4540
  this.store.dispatch(UpdateVisibleSignaleringsbeeldInfoDtos(dtos));
4518
4541
  this.store.dispatch(updateRitDelen(nieuweRitdelen));
4519
4542
  }
@@ -4526,11 +4549,11 @@ class LaadSignaleringsbeeldenEffect {
4526
4549
  const visibleRitPplgs = visibleRitDelen.map(r => r.getPplg()).filter(this.distinct);
4527
4550
  const visibleDtos = this.bepaalZichtbareDtos(visibleRitPplgs, storeDtos);
4528
4551
  const loadingDtos = this.bepaalToLoadDtos(visibleDtos, ritDelen, visibleRitDelen, visibleRitPplgs, storeState);
4529
- this.editorService.laadSignaleringsbeelden(actie.iaversieinfo.versie, loadingDtos).pipe(tap(svgDataUrls => {
4552
+ this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, loadingDtos).pipe(tap(svgDataUrls => {
4530
4553
  this.verwerkSvgs(svgDataUrls);
4531
4554
  this.updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos);
4532
4555
  }), catchError(err => {
4533
- this.messagesSerivce.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4556
+ this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4534
4557
  throw err;
4535
4558
  })).subscribe();
4536
4559
  }
@@ -4585,8 +4608,8 @@ class LaadSignaleringsbeeldenEffect {
4585
4608
  dtos.filter(d => !visibleDtos.includes(d)).forEach(d => d.metVisualisatie = false);
4586
4609
  return visibleDtos;
4587
4610
  }
4588
- distinct(value, index, self) {
4589
- return self.indexOf(value) === index;
4611
+ distinct(value, index, values) {
4612
+ return values.indexOf(value) === index;
4590
4613
  }
4591
4614
  addPrevNonVisibleDto(firstIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
4592
4615
  if (firstIdx >= 0) {
@@ -4675,7 +4698,7 @@ class LaadSignaleringsbeeldenEffect {
4675
4698
  }
4676
4699
  }
4677
4700
  }
4678
- this.updateZichtbaarheidAangrezendeRitdelen(min, max, ritdelen, visibleDtos);
4701
+ this.updateZichtbaarheidAangrenzendeRitdelen(min, max, ritdelen, visibleDtos);
4679
4702
  return this.updateZichtbaarheidBuitenWindow(ritdelen, visibleDtos);
4680
4703
  }
4681
4704
  updateZichtbaarheidBuitenWindow(nieuweRitdelen, visibleDtos) {
@@ -4691,7 +4714,7 @@ class LaadSignaleringsbeeldenEffect {
4691
4714
  }
4692
4715
  return nieuweRitdelen;
4693
4716
  }
4694
- updateZichtbaarheidAangrezendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4717
+ updateZichtbaarheidAangrenzendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4695
4718
  let i = min - 1;
4696
4719
  while (i >= 0) {
4697
4720
  i = this.updateZichtbaarHeid(i, 0, visibleDtos, nieuweRitdelen) - 1;
@@ -4826,11 +4849,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4826
4849
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: BewegingVerrijkerService }] });
4827
4850
 
4828
4851
  class RitdelenEffect {
4829
- constructor(actions$, store, sbmService, rijwegPlanEditorService) {
4852
+ constructor(actions$, store, sbmService, editorService) {
4830
4853
  this.actions$ = actions$;
4831
4854
  this.store = store;
4832
4855
  this.sbmService = sbmService;
4833
- this.rijwegPlanEditorService = rijwegPlanEditorService;
4856
+ this.editorService = editorService;
4834
4857
  this.updateRitDelen$ = createEffect(() => this.actions$.pipe(ofType(updateRitDelen), withLatestFrom(this.store), map(([actie, _storeState]) => {
4835
4858
  const nieuweRitDelen = actie.ritDelen.map(ritDeel => ritDeel.isZichtbaar() ?
4836
4859
  ritDeel.copyMetAlternatieveRoutes(this.sbmService.bepaalAlternativeRoutes(ritDeel.getRijweg())) : ritDeel);
@@ -4848,25 +4871,25 @@ class RitdelenEffect {
4848
4871
  return setRitdelenAfterUpdate(ritDelen);
4849
4872
  })));
4850
4873
  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);
4874
+ const ritDelen = this.ritdeelInvoegenFunc(storeState.ritDelen, actie.nieuweRoute);
4852
4875
  return setRitdelenAfterUpdate(ritDelen);
4853
4876
  })));
4854
4877
  }
4855
- ritdeelInvoegenFunc(ritDelen, nieuweRoute, rijwegPlanEditorService, sbmService) {
4878
+ ritdeelInvoegenFunc(ritDelen, nieuweRoute) {
4856
4879
  const origineelRitdeel = nieuweRoute.beginSeinOpRitdeel.ritdeel;
4857
4880
  const beginSein = nieuweRoute.beginSeinOpRitdeel.sein;
4858
- const rijwegplan = rijwegPlanEditorService.getRijwegplan(beginSein.getPPLG());
4881
+ const rijwegplan = this.editorService.getRijwegplan(beginSein.getPPLG());
4859
4882
  const dwangen = JsJavaUtil.listToArray(rijwegplan.getOnderliggendeDwangenTotEnVanSein(origineelRitdeel.getDwang(), beginSein));
4860
4883
  const isSamengesteldeRoute = dwangen[0] && dwangen[1];
4861
4884
  let newRitdeel1 = origineelRitdeel;
4862
4885
  if (isSamengesteldeRoute) {
4863
- newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen);
4886
+ newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen);
4864
4887
  }
4865
- if (nieuweRoute.combinatieVoorEindsein.isVrijeBaanRijweg()) {
4866
- this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService);
4888
+ if (nieuweRoute.combinatieVoorEindsein?.isVrijeBaanRijweg()) {
4889
+ this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute);
4867
4890
  }
4868
4891
  else {
4869
- this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen);
4892
+ this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen);
4870
4893
  }
4871
4894
  if (isSamengesteldeRoute) {
4872
4895
  ritDelen.splice(ritDelen.indexOf(origineelRitdeel), 1);
@@ -4881,38 +4904,39 @@ class RitdelenEffect {
4881
4904
  }
4882
4905
  }
4883
4906
  }
4884
- verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen) {
4907
+ verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen) {
4885
4908
  // dwangen in 2 nieuwe ritdelen verwerken voor de knip
4886
4909
  const nieuweRijweg1 = rijwegplan.getRijwegVoorSeinen(dwangen[0].getRoute().getBeginSein(), dwangen[0].getRoute().getEindSein());
4887
4910
  const dwangInfo1 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg1, dwangen[0]);
4888
- const newRitdeel1 = new Ritdeel(dwangInfo1, [], null, null, null, []);
4911
+ const newRitdeel1 = new Ritdeel(dwangInfo1, [], undefined, undefined, undefined, []);
4889
4912
  // remove vrijbaan info uit ritdeel
4890
- newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = null;
4891
- newRitdeel1.vervolgSpoor = null;
4892
- newRitdeel1.bepaalTopologieElementen(sbmService);
4913
+ newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = undefined;
4914
+ newRitdeel1.vervolgSpoor = undefined;
4915
+ newRitdeel1.bepaalTopologieElementen(this.sbmService);
4893
4916
  this.insertRitdeel(ritDelen, origineelRitdeel, newRitdeel1);
4894
4917
  const nieuweRijweg2 = rijwegplan.getRijwegVoorSeinen(dwangen[1].getRoute().getBeginSein(), dwangen[1].getRoute().getEindSein());
4895
4918
  const dwangInfo2 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg2, dwangen[1]);
4896
- const newRitdeel2 = new Ritdeel(dwangInfo2, [], null, null, null, []);
4897
- newRitdeel2.bepaalTopologieElementen(sbmService);
4919
+ const newRitdeel2 = new Ritdeel(dwangInfo2, [], undefined, undefined, undefined, []);
4920
+ newRitdeel2.bepaalTopologieElementen(this.sbmService);
4898
4921
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel2);
4899
4922
  return newRitdeel1;
4900
4923
  }
4901
- extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService) {
4924
+ extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute) {
4902
4925
  newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = nieuweRoute.combinatieVoorEindsein;
4903
- const vbrwp = nieuweRoute.combinatieVoorEindsein.rijwegplan;
4904
- newRitdeel1.vervolgSpoor = vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein.rijweg);
4905
- newRitdeel1.bepaalTopologieElementen(sbmService);
4926
+ const vbrwp = nieuweRoute.combinatieVoorEindsein?.rijwegplan;
4927
+ newRitdeel1.vervolgSpoor = nieuweRoute.combinatieVoorEindsein ?
4928
+ vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein?.rijweg) : undefined;
4929
+ newRitdeel1.bepaalTopologieElementen(this.sbmService);
4906
4930
  }
4907
- maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen) {
4931
+ maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen) {
4908
4932
  let newRitdeel = this.createRitdeel(nieuweRoute);
4909
- const altRoutes = sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4933
+ const altRoutes = this.sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4910
4934
  newRitdeel = newRitdeel.copyMetAlternatieveRoutes(altRoutes);
4911
- newRitdeel.bepaalTopologieElementen(sbmService);
4935
+ newRitdeel.bepaalTopologieElementen(this.sbmService);
4912
4936
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel);
4913
4937
  }
4914
4938
  createRitdeel(nieuweRoute) {
4915
- return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], null, null, null, []);
4939
+ return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], undefined, undefined, undefined, []);
4916
4940
  }
4917
4941
  insertRitdeel(ritdelen, naRitdeelPositie, newRitdeel) {
4918
4942
  const idx = ritdelen.indexOf(naRitdeelPositie);
@@ -4963,13 +4987,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4963
4987
  type: Injectable
4964
4988
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: SignaleringsBeeldManagerService }, { type: i4.SignaleringsbeeldSvgUtilityService }] });
4965
4989
 
4990
+ class ProgressIndicator {
4991
+ constructor(lowerText, upperText, iconClass) {
4992
+ this.lowerText = '';
4993
+ this.upperText = '';
4994
+ this.iconClass = '';
4995
+ this.lowerText = lowerText ?? this.lowerText;
4996
+ this.upperText = upperText ?? this.upperText;
4997
+ this.iconClass = iconClass ?? this.iconClass;
4998
+ }
4999
+ }
5000
+
4966
5001
  class NieuweRoute {
4967
5002
  constructor(beginSeinOpRitdeel, combinatieVoorEindsein) {
4968
5003
  this.beginSeinOpRitdeel = beginSeinOpRitdeel;
4969
5004
  this.combinatieVoorEindsein = combinatieVoorEindsein;
4970
5005
  }
4971
5006
  isValid() {
4972
- return this.combinatieVoorEindsein !== null;
5007
+ return !!this.combinatieVoorEindsein;
4973
5008
  }
4974
5009
  }
4975
5010
 
@@ -5035,7 +5070,7 @@ function addRitdeelActieFunc(ritDelen, { ritDeel, actie }) {
5035
5070
  const onIdsActionHandler = (action) => on(action, (_, { ids }) => ids);
5036
5071
  const createIdsReducer = (action) => createReducer([], onIdsActionHandler(action));
5037
5072
  const editableReducer = createReducer(true, on(setEditable, (_, { editable }) => editable));
5038
- const progressIndicatorReducer = createReducer(undefined, on(ShowProgress, () => ({ progressIndicator: {} })), on(ClearProgress, () => undefined));
5073
+ const progressIndicatorReducer = createReducer({}, on(ShowProgress, () => ({ progressIndicator: new ProgressIndicator() })), on(ClearProgress, () => ({})));
5039
5074
  const svgInfoReducer = createReducer([], on(SetSvgInfos, (_, { svgInfos }) => svgInfos));
5040
5075
  const debugReducer = createReducer(false, on(SetDebug, (_, { debug }) => debug));
5041
5076
  const ritSelectieIdsReducer = createIdsReducer(SetRitSelectieIds);
@@ -5061,12 +5096,10 @@ const ongeplandeActieReducer = createReducer(new ArrayMultimap(), on(SetOngeplan
5061
5096
  ongeplandeActie.puics.forEach(puic => ongeplandeActies.delete(puic, ongeplandeActie));
5062
5097
  return new ArrayMultimap(ongeplandeActies);
5063
5098
  }));
5064
- const ongeplandeActieSelectieIdsReducer = createReducer([],
5065
- // on(MstActions.SetOngeplandeActieSelectieIds, (_, { ids }) => ids),
5066
- onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5099
+ const ongeplandeActieSelectieIdsReducer = createReducer([], onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5067
5100
  ongeplandeActie.puics.filter(puic => !ids.includes(puic)).forEach(puic => ids.push(puic));
5068
5101
  return [...ids];
5069
- }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => [].concat(ids.includes(id) ? ids.filter(_id => _id !== id) : ids)));
5102
+ }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => ids.includes(id) ? ids.filter(_id => _id !== id) : ids));
5070
5103
  const gebrokenRitSelectieIdsReducer = createIdsReducer(SetGebrokenRitSelectieIds);
5071
5104
  const alternatievenSelectieIdsReducer = createIdsReducer(SetAlternatievenSelectieIds);
5072
5105
  const beginSeinSelectieIdsReducer = createIdsReducer(SetBeginSeinSelectieIds);
@@ -5075,16 +5108,15 @@ const alternatievenClickableIdsReducer = createIdsReducer(SetAlternatievenClicka
5075
5108
  const eindSeinenClickableIdsReducer = createIdsReducer(SetEindSeinenClickableIds);
5076
5109
  const connectorClickableIdsReducer = createIdsReducer(SetConnectorenClickableIds);
5077
5110
  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)));
5111
+ 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
5112
  const signaleringsbeeldInfoDtosReducer = createReducer([], on(SetSignaleringsbeeldInfoDtos, (_, { dtos }) => dtos), on(UpdateSignaleringsbeeldInfoDtos, (_, { dtos }) => [...dtos]));
5080
5113
  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() })));
5114
+ const iaVersieReducer = createReducer({ versie: 'unknown', ingangsDatum: new Date() }, on(SetIaVersie, (_, { iaVersie }) => Object.assign({}, iaVersie, { versie: iaVersie.versie.toUpperCase() })));
5082
5115
  const algemeneRitInfoDtoReducer = createReducer({}, on(SetAlgemeneRitInfo, (_, { algemeneRitInfoDto }) => algemeneRitInfoDto));
5083
5116
  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));
5117
+ const nieuweBewegingReducer = createReducer([], on(UpdateRit, (_, { bewegingen }) => bewegingen));
5118
+ const baseUrlReducer = createReducer('', on(SetBaseUrl, (_, { baseUrl }) => baseUrl));
5119
+ const focusIdsReducer = createReducer([], on(focusOpIds, (_, { puics }) => puics));
5088
5120
  const storeReducers = {
5089
5121
  ritDelen: ritdelenReducer,
5090
5122
  ritSelectieIds: ritSelectieIdsReducer,
@@ -5113,9 +5145,9 @@ const storeReducers = {
5113
5145
  nieuweBewegingen: nieuweBewegingReducer,
5114
5146
  baseUrl: baseUrlReducer,
5115
5147
  focusIds: focusIdsReducer,
5116
- selectedRitdeelId: selectedRitdeelIdReducer
5117
5148
  };
5118
5149
 
5150
+ // @ts-nocheck
5119
5151
  class ZoneUtil {
5120
5152
  constructor(ngZone) {
5121
5153
  this.ngZone = ngZone;
@@ -5178,6 +5210,7 @@ class MstViewerModule {
5178
5210
  constructor(service, zoneUtil) {
5179
5211
  this.service = service;
5180
5212
  // maak de EditorService toegankelijk voor GWT code
5213
+ // @ts-ignore
5181
5214
  window['rpe'] = {
5182
5215
  EditorService: zoneUtil.proxy(service)
5183
5216
  };