@loxia/mst-viewer 8.1.3-202511180838 → 8.1.3-202511181036

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 (55) 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/mstviewer/mstviewer.component.mjs +10 -4
  4. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +18 -12
  5. package/esm2022/lib/components/rpe/rpe.component.mjs +6 -2
  6. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +8 -7
  7. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +7 -3
  8. package/esm2022/lib/model/nieuwe-route.mjs +2 -2
  9. package/esm2022/lib/model/ritdeel.mjs +10 -10
  10. package/esm2022/lib/mst-viewer.module.mjs +6 -5
  11. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +2 -1
  12. package/esm2022/lib/services/base-rest.service.mjs +3 -1
  13. package/esm2022/lib/services/debug.service.mjs +3 -3
  14. package/esm2022/lib/services/editor.service.mjs +3 -1
  15. package/esm2022/lib/services/rit-lezer.service.mjs +4 -4
  16. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +1 -1
  17. package/esm2022/lib/state/actions/actions.mjs +2 -4
  18. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +8 -7
  19. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +1 -1
  20. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +1 -1
  21. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +1 -1
  22. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +2 -2
  23. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +13 -13
  24. package/esm2022/lib/state/effect/ritdelen.effect.mjs +26 -25
  25. package/esm2022/lib/state/mst-editor-state.mjs +10 -13
  26. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +1 -1
  27. package/esm2022/lib/util/actie-helper.mjs +23 -19
  28. package/esm2022/lib/util/actie-popover-bepaler.mjs +2 -2
  29. package/esm2022/lib/util/logging-helper.mjs +31 -33
  30. package/esm2022/lib/util/multi-map.mjs +2 -3
  31. package/esm2022/lib/util/utils.mjs +2 -5
  32. package/esm2022/lib/util/zone-util.mjs +2 -1
  33. package/fesm2022/loxia-mst-viewer.mjs +290 -259
  34. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  35. package/lib/atomic-components/message/message.component.d.ts +2 -2
  36. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +1 -1
  37. package/lib/components/mstviewer/mstviewer.component.d.ts +2 -2
  38. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +2 -2
  39. package/lib/components/rpe/rpe.component.d.ts +1 -1
  40. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +1 -1
  41. package/lib/components/viewer-controls/viewer-controls.component.d.ts +2 -2
  42. package/lib/model/nieuwe-route.d.ts +2 -2
  43. package/lib/model/ritdeel.d.ts +11 -10
  44. package/lib/services/signalerings-beeld-manager.service.d.ts +1 -1
  45. package/lib/state/actions/actions.d.ts +1 -6
  46. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +2 -1
  47. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +1 -1
  48. package/lib/state/effect/laad-route-files.effect.d.ts +2 -1
  49. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +9 -9
  50. package/lib/state/effect/ritdelen.effect.d.ts +7 -6
  51. package/lib/state/mst-editor-state.d.ts +20 -83
  52. package/lib/util/actie-helper.d.ts +4 -4
  53. package/lib/util/logging-helper.d.ts +2 -1
  54. package/lib/util/utils.d.ts +0 -1
  55. 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,84 @@ 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, iaversieinfo) => ({ ritDelen, paginationSize, iaversieinfo }));
142
+ const setRitdelenAfterUpdate = createAction(SET_RIT_DELEN_AFTER_UPDATE, (ritDelen) => ({ ritDelen }));
143
+ const navigeer = createAction(NAVIGEER, (stapSize, paginationSize, iaversieinfo) => ({ stapSize, paginationSize, iaversieinfo }));
144
+ const navigeerVanaf = createAction(NAVIGEER_VANAF, (paginationSize, iaversieinfo, ritdeel) => ({ paginationSize, iaversieinfo, 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.ritdelen$ = this.store.select('ritDelen').pipe(filter(r => r?.length > 0));
176
+ this.kanLinks$ = this.ritdelen$.pipe(map(r => this.kanLinksNavigeren(r)));
177
+ this.kanRechts$ = this.ritdelen$.pipe(map(r => this.kanRechtsNavigeren(r)));
178
+ }
179
+ kanLinksNavigeren(ritDelen) {
180
+ return ritDelen.length > this.paginationSize && !ritDelen[0].isBinnenWindow();
181
+ }
182
+ kanRechtsNavigeren(ritDelen) {
183
+ return ritDelen.length > this.paginationSize && !ritDelen[ritDelen.length - 1].isBinnenWindow();
184
+ }
185
+ navigeerNaarLinks(event) {
186
+ this.store.dispatch(navigeer(event?.ctrlKey ? -1 : -(this.paginationSize - 1), this.paginationSize, this.iaversieinfo));
187
+ }
188
+ navigeerNaarRechts(event) {
189
+ this.store.dispatch(navigeer(event?.ctrlKey ? 1 : this.paginationSize - 1, this.paginationSize, this.iaversieinfo));
190
+ }
191
+ 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 }); }
192
+ 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" }] }); }
193
+ }
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CarouselControlsComponent, decorators: [{
195
+ type: Component,
196
+ 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"] }]
197
+ }], ctorParameters: () => [{ type: i2$1.Store }], propDecorators: { paginationSize: [{
198
+ type: Input
199
+ }], iaversieinfo: [{
200
+ type: Input
201
+ }], sideNavOpen: [{
202
+ type: Input
203
+ }] } });
204
+
127
205
  const version = '8.1.3-SNAPSHOT';
128
206
 
129
207
  const SET_EDITABLE = '[mst] SetEditable';
@@ -213,7 +291,6 @@ const navigeerBuitenRit = createAction(NAVIGEER_BUITEN_RIT, (randPuic) => ({ ran
213
291
  const focusOpRitdeel = createAction(FOCUS_OP_RITDEEL, (ritdeel, paginationSize, iaVersieInfo) => ({ ritdeel, paginationSize, iaVersieInfo }));
214
292
  const focusOpIds = createAction(FOCUS_OP_IDS, (puics) => ({ puics }));
215
293
  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
294
  // do not export return value
218
295
  const mstActions = union({
219
296
  setEditable,
@@ -251,89 +328,9 @@ const mstActions = union({
251
328
  ClearProgress,
252
329
  BewegingInvoegen,
253
330
  KeurAlleActiesGoed,
254
- UpdateRit,
255
- setSelectedRitdeel: SetSelectedRitdeel
331
+ UpdateRit
256
332
  });
257
333
 
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
300
- });
301
-
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
334
  /**
338
335
  * https://gist.github.com/jordanluyke/609a4fffb69d1ebafdadd313ee2ee804
339
336
  *
@@ -397,7 +394,7 @@ class ArrayMultimap {
397
394
  return Array.from(new Set(this._entries.map(entry => entry.key)));
398
395
  }
399
396
  values() {
400
- return Utils.flatMap(this._entries, x => x.value);
397
+ return this._entries.reduce((acc, x) => acc.concat(x.value), []);
401
398
  }
402
399
  put(key, value) {
403
400
  this._entries.push(new MultimapEntry(key, value));
@@ -503,6 +500,7 @@ class EditorService {
503
500
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
504
501
  this.initReadyPromise();
505
502
  }
503
+ // Called from GWT only, can be removed when GWT is gone. any is used because it will be removed with GWT
506
504
  setEditor(editor) {
507
505
  this.editor = editor;
508
506
  this.resolveReadyPromise();
@@ -510,6 +508,7 @@ class EditorService {
510
508
  isReady() {
511
509
  return this.promise;
512
510
  }
511
+ // Called from GWT only, can be removed when GWT is gone
513
512
  setSignaleringsBeeldManager(signaleringsBeeldManager) {
514
513
  this.signaleringsBeeldManagerService.set(signaleringsBeeldManager);
515
514
  }
@@ -783,10 +782,10 @@ class DebugService {
783
782
  setDebugFlag(debug) {
784
783
  this.store.dispatch(SetDebug(debug));
785
784
  if (debug) {
786
- document.getElementById('svgContainer').addEventListener('mouseover', this.listener);
785
+ document.getElementById('svgContainer')?.addEventListener('mouseover', this.listener);
787
786
  }
788
787
  else {
789
- document.getElementById('svgContainer').removeEventListener('mouseover', this.listener);
788
+ document.getElementById('svgContainer')?.removeEventListener('mouseover', this.listener);
790
789
  }
791
790
  }
792
791
  debugEventListener() {
@@ -886,8 +885,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
886
885
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: SignaleringsBeeldManagerService }] });
887
886
 
888
887
  class RpeComponent {
888
+ constructor() {
889
+ this.baseurl = '';
890
+ this.path = '';
891
+ }
889
892
  convertToScript() {
890
- const element = this.script.nativeElement;
893
+ const element = this.script?.nativeElement;
891
894
  const script = document.createElement('script');
892
895
  script.type = 'text/javascript';
893
896
  if (this.baseurl && this.path) {
@@ -987,6 +990,38 @@ class MeldingBuilder {
987
990
  }
988
991
  }
989
992
 
993
+ class Utils {
994
+ static getValidErorrMessage(err) {
995
+ let errorMsg = '';
996
+ if (err.msg) {
997
+ errorMsg += err.msg;
998
+ }
999
+ if (Array.isArray(err.body)) {
1000
+ err.body.forEach((x) => errorMsg += x);
1001
+ }
1002
+ else if (err.body) {
1003
+ if (err.body instanceof ProgressEvent) {
1004
+ errorMsg = 'Kon geen verbinding maken met de server';
1005
+ }
1006
+ else if (err.body.text) {
1007
+ errorMsg += err.body.text;
1008
+ }
1009
+ else {
1010
+ errorMsg += err.body;
1011
+ }
1012
+ }
1013
+ if (err.message) {
1014
+ errorMsg += err.message;
1015
+ }
1016
+ if (typeof err === 'string' || err instanceof String) {
1017
+ errorMsg += err;
1018
+ }
1019
+ if (errorMsg !== '') {
1020
+ return errorMsg;
1021
+ }
1022
+ }
1023
+ }
1024
+
990
1025
  class MessageBuilder {
991
1026
  static rwpDataNietGevonden(err) {
992
1027
  return new Message(Severity.ERROR, 'Error bij ophalen van rijwegplan data: ' + err);
@@ -2372,38 +2407,35 @@ class LoggingHelper {
2372
2407
  this.store = store;
2373
2408
  }
2374
2409
  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
2410
+ return combineLatest([
2411
+ this.store.select('algemeneRitInfoDto'),
2412
+ this.store.select('iaVersie')
2413
+ ]).pipe(take(1), map(([algemeneRitInfoDto, iaVersie]) => {
2414
+ let actieDto = null;
2415
+ if (actie) {
2416
+ actieDto = {
2417
+ pplgNaam: actie.pplgNaam,
2418
+ ritActieTypeOmschrijving: actie.ritActieTypeOmschrijving,
2419
+ ritActieStatus: actie.ritActieStatus,
2420
+ bewegingId: actie.bewegingId,
2421
+ wisselType: actie.wisselType,
2422
+ wisselNaam: actie.wisselNaam,
2423
+ wisselKantCode: actie.wisselKantCode,
2424
+ vanKilometerlint: actie.vanKilometerlint,
2425
+ vanKilometrering: actie.vanKilometrering,
2426
+ totKilometerlint: actie.totKilometerlint,
2427
+ totKilometrering: actie.totKilometrering
2428
+ };
2429
+ }
2430
+ return {
2431
+ iaVersie: iaVersie.versie,
2432
+ meldingLevel: melding.meldingLevel,
2433
+ meldingMessage: melding.meldingMessage,
2434
+ actieDto,
2435
+ algemeneRitInfoDto,
2436
+ sbinfoDtos: this.getSbInfoDtos()
2397
2437
  };
2398
- }
2399
- return {
2400
- iaVersie,
2401
- meldingLevel: melding.meldingLevel,
2402
- meldingMessage: melding.meldingMessage,
2403
- actieDto,
2404
- algemeneRitInfoDto,
2405
- sbinfoDtos: this.getSbInfoDtos()
2406
- };
2438
+ }));
2407
2439
  }
2408
2440
  getSbInfoDtos() {
2409
2441
  const sbInfoDtos = [];
@@ -2515,6 +2547,7 @@ class ActieHelper {
2515
2547
  this.messagesService = messagesService;
2516
2548
  this.store = store;
2517
2549
  this.loggingHelper = loggingHelper;
2550
+ this.debug = false;
2518
2551
  this.store.select('debug').subscribe(debug => this.debug = debug);
2519
2552
  }
2520
2553
  static getActieTopoElements(ritDeel, sbmService) {
@@ -2548,10 +2581,10 @@ class ActieHelper {
2548
2581
  }
2549
2582
  }
2550
2583
  static actieComparator(actie1, actie2) {
2551
- if (actie1.vanKilometrering !== actie2.vanKilometrering) {
2584
+ if (actie1.vanKilometrering && actie2.vanKilometrering && actie1.vanKilometrering !== actie2.vanKilometrering) {
2552
2585
  return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
2553
2586
  }
2554
- if (actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2587
+ if (actie1.ritActieTypeOmschrijving && actie2.ritActieTypeOmschrijving && actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2555
2588
  return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
2556
2589
  }
2557
2590
  if (actie1.wisselNaam !== actie2.wisselNaam) {
@@ -2591,9 +2624,9 @@ class ActieHelper {
2591
2624
  // make sure the elems are sorted in ascending order
2592
2625
  static sorteerTopoElementen(topoElems) {
2593
2626
  const topoElementen = topoElems.slice();
2594
- let lint = null;
2595
- let first = null;
2596
- let second = null;
2627
+ let lint = undefined;
2628
+ let first;
2629
+ let second;
2597
2630
  for (const topoElement of topoElementen) {
2598
2631
  let kilometreringen = null;
2599
2632
  const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
@@ -2605,7 +2638,7 @@ class ActieHelper {
2605
2638
  lint = kilometreringen[0].getKmLint();
2606
2639
  }
2607
2640
  else if (kilometreringen && first && !second) {
2608
- const km = KmRange.getKilometrering(lint, kilometreringen);
2641
+ const km = KmRange.getKilometrering(lint ?? '', kilometreringen);
2609
2642
  if (km) {
2610
2643
  second = km.getKmWaarde();
2611
2644
  }
@@ -2720,21 +2753,23 @@ class ActieHelper {
2720
2753
  else {
2721
2754
  const puics = [];
2722
2755
  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());
2756
+ if (actie.vanKilometrering && actie.vanKilometerlint && actie.totKilometrering && actie.totKilometerlint) {
2757
+ let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
2758
+ let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
2759
+ if (actie.vanKilometrering > actie.totKilometrering) {
2760
+ const temp = { van: vanKilometrering, tot: totKilometrering };
2761
+ vanKilometrering = temp.tot;
2762
+ totKilometrering = temp.van;
2763
+ }
2764
+ if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
2765
+ puics.push(kmRange.topologyElement.getPuic());
2766
+ }
2732
2767
  }
2733
2768
  });
2734
2769
  if (puics.length === 0) {
2735
2770
  actieZonderElementen.push(actie.id);
2736
2771
  const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
2737
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
2772
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(dto => logMeldingDTOs.push(dto))).subscribe();
2738
2773
  }
2739
2774
  retval.putAll(actie, puics);
2740
2775
  }
@@ -2827,14 +2862,14 @@ class ActieHelper {
2827
2862
  if (ActieHelper.isKantCodeLinks(kantcode)) {
2828
2863
  return wissel.getLeft();
2829
2864
  }
2830
- return null;
2865
+ return undefined;
2831
2866
  }
2832
2867
  bepaalPuicVoorWisselSlijpenActie(actie) {
2833
2868
  const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
2834
2869
  if (!storingsSymboolPuic && this.debug) {
2835
2870
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
2836
2871
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
2837
- this.mstLogResource.logMessages([this.loggingHelper.maakLogDTO(melding, actie)]);
2872
+ this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(logDto => this.mstLogResource.logMessages([logDto]))).subscribe();
2838
2873
  }
2839
2874
  return storingsSymboolPuic ? [storingsSymboolPuic] : [];
2840
2875
  }
@@ -2849,10 +2884,16 @@ class RitdelenLijstComponent {
2849
2884
  constructor(store, sbmService) {
2850
2885
  this.store = store;
2851
2886
  this.sbmService = sbmService;
2887
+ this.nietGeplandeActies = [];
2852
2888
  this.focusEmitter = new EventEmitter();
2853
2889
  this.keurAlleActiesGoed = new EventEmitter();
2890
+ this.ritdeelViewModels = [];
2854
2891
  this.selectedRitdeelActies = [];
2855
2892
  this.selectedRitdeelOngeplandeActies = [];
2893
+ this.disableActieKnoppenVanRitdeel = true;
2894
+ this.editable = false;
2895
+ this.ongeplandeActiesMap = new ArrayMultimap();
2896
+ this.geplandeActies = new ArrayMultimap();
2856
2897
  this.NG_ACTIE_PREFIX = '* ';
2857
2898
  this.subscriptions = [];
2858
2899
  this.subscriptions.push(store.select('ritDelen').subscribe((ritdelen) => {
@@ -2863,9 +2904,6 @@ class RitdelenLijstComponent {
2863
2904
  this.subscriptions.push(store.select('ongeplandeActies').subscribe(acties => this.ongeplandeActiesMap = acties));
2864
2905
  this.subscriptions.push(store.select('geplandeActies').subscribe(acties => this.geplandeActies = acties));
2865
2906
  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
2907
  this.subscriptions.push(combineLatest([
2870
2908
  this.store.select('ritDelen'),
2871
2909
  this.store.select('ongeplandeActies')
@@ -2902,12 +2940,14 @@ class RitdelenLijstComponent {
2902
2940
  this.store.dispatch(deleteRitdeel(ritdeel));
2903
2941
  }
2904
2942
  deleteActiesUitRit() {
2905
- this.selectedRitdeel.acties.slice().forEach(actie => {
2943
+ this.selectedRitdeel?.acties.slice().forEach(actie => {
2906
2944
  this.deleteActieUitRit(actie);
2907
2945
  });
2908
2946
  }
2909
2947
  deleteActieUitRit(actie) {
2910
- const acties = this.selectedRitdeel.acties;
2948
+ if (!this.selectedRitdeel)
2949
+ return;
2950
+ const acties = this.selectedRitdeel.acties ?? [];
2911
2951
  const idx = acties.indexOf(actie);
2912
2952
  if (idx >= 0) {
2913
2953
  this.verhuisActieNaarOngepland(actie);
@@ -2933,7 +2973,7 @@ class RitdelenLijstComponent {
2933
2973
  }
2934
2974
  voegActieToeAanRit(ongeplandeActie) {
2935
2975
  const idx = this.selectedRitdeelOngeplandeActies.indexOf(ongeplandeActie);
2936
- if (idx >= 0) {
2976
+ if (idx >= 0 && this.selectedRitdeel) {
2937
2977
  this.store.dispatch(addRitdeelActie(this.selectedRitdeel, this.selectedRitdeelOngeplandeActies[idx].actie));
2938
2978
  this.store.dispatch(AddGeplandeActie(ongeplandeActie.actie, ongeplandeActie.puics));
2939
2979
  this.store.dispatch(DeleteOngeplandeActie(ongeplandeActie));
@@ -3035,13 +3075,13 @@ class RitdelenLijstComponent {
3035
3075
  return `${prefix}${ActieHelper.getVSTActieOmschrijving(actie)}`;
3036
3076
  }
3037
3077
  bepaalPrefixVoorActieOmschrijving(actie) {
3038
- const prefix = '';
3039
- if (this.selectedRitdeel.acties.includes(actie)) {
3078
+ const noPrefix = '';
3079
+ if (this.selectedRitdeel?.acties.includes(actie)) {
3040
3080
  // Afwijkende naam bij niet gevisualiseerde actie in rit
3041
3081
  const puics = this.geplandeActies.get(actie);
3042
- return puics.length > 0 ? prefix : this.NG_ACTIE_PREFIX;
3082
+ return puics.length > 0 ? noPrefix : this.NG_ACTIE_PREFIX;
3043
3083
  }
3044
- return prefix;
3084
+ return noPrefix;
3045
3085
  }
3046
3086
  actieVanKmTekst(actie) {
3047
3087
  if (ActieHelper.isWisselSlijpenActie(actie)) {
@@ -3062,6 +3102,7 @@ class RitdelenLijstComponent {
3062
3102
  return ritdeel.getPplgString();
3063
3103
  }
3064
3104
  getKantCode(stand) {
3105
+ // @ts-ignore
3065
3106
  if (stand === window['domein'].Stand.LINKS) {
3066
3107
  return 'L';
3067
3108
  }
@@ -3198,49 +3239,19 @@ class RitdeelViewModel {
3198
3239
  }
3199
3240
  }
3200
3241
 
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
3242
  class ViewerControlsComponent {
3236
3243
  constructor(store, viewerControlsService, bewegingUtils) {
3237
3244
  this.store = store;
3238
3245
  this.viewerControlsService = viewerControlsService;
3239
3246
  this.bewegingUtils = bewegingUtils;
3240
3247
  this.paginationSize = 4;
3248
+ this.iaversieinfo = undefined;
3249
+ this.treinpad = undefined;
3250
+ this.goedgekeurd = new EventEmitter();
3241
3251
  this.printing$ = this.viewerControlsService.isPrinting$();
3242
3252
  this.valideRit$ = this.viewerControlsService.isValideRit$();
3243
3253
  this.subscriptions = new Subscription();
3254
+ this.editable = false;
3244
3255
  this.subscriptions.add(this.store.select('editable').subscribe(editable => this.editable = editable));
3245
3256
  }
3246
3257
  ngOnChanges({ treinpad }) {
@@ -3253,7 +3264,7 @@ class ViewerControlsComponent {
3253
3264
  }
3254
3265
  goedkeurenClick() {
3255
3266
  const ritDelen = this.viewerControlsService.ritdelen;
3256
- if (ritDelen) {
3267
+ if (ritDelen && this.treinpad) {
3257
3268
  delete this.treinpad.aantalRitActies;
3258
3269
  this.treinpad.bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(ritDelen, this.viewerControlsService.origineelTreinPad.bewegingen);
3259
3270
  this.goedgekeurd.emit(this.treinpad);
@@ -3324,7 +3335,7 @@ class ActiePopoverBepaler {
3324
3335
  ongeplandeActies.entries.forEach(entry => {
3325
3336
  const treinNummerActieInfos = puicNaarOngeplandeActieMap.get(entry.key);
3326
3337
  if (!treinNummerActieInfos?.map(({ actie }) => actie).includes(entry.value.actie)) {
3327
- puicNaarOngeplandeActieMap.put(entry.key, { treinNummer: undefined, actie: entry.value.actie });
3338
+ puicNaarOngeplandeActieMap.put(entry.key, { actie: entry.value.actie });
3328
3339
  }
3329
3340
  });
3330
3341
  }
@@ -3384,12 +3395,15 @@ class SvgVisualisatieComponent {
3384
3395
  this.actieHelper = actieHelper;
3385
3396
  this.sbmService = sbmService;
3386
3397
  this.editorService = editorService;
3398
+ this.nietGeplandeActies = [];
3399
+ this.useClickArea = false;
3387
3400
  this.svgInfos$ = this.store.select('svgInfos');
3388
3401
  this.popoverInfos = [];
3389
3402
  this.clickableIds = [];
3390
3403
  this.rightClickableIds = [];
3391
3404
  this.contextMenuActions = [];
3392
3405
  this.contextMenuStyle = { display: 'none' };
3406
+ this.editable = false;
3393
3407
  this.puicNaarBeginSeinRitdeel = new Map();
3394
3408
  this.puicNaarEindSeinCombinatie = new Map();
3395
3409
  this.puicNaarAlternatieveRoute = new Map();
@@ -3413,7 +3427,7 @@ class SvgVisualisatieComponent {
3413
3427
  }));
3414
3428
  }
3415
3429
  ngOnInit() {
3416
- document.getElementById('contextMenu').addEventListener('mouseleave', () => this.hideContextMenu());
3430
+ document.getElementById('contextMenu')?.addEventListener('mouseleave', () => this.hideContextMenu());
3417
3431
  }
3418
3432
  ngOnDestroy() {
3419
3433
  this.subscriptions.forEach(s => s.unsubscribe());
@@ -3440,7 +3454,6 @@ class SvgVisualisatieComponent {
3440
3454
  this.store.dispatch(navigeerBuitenRit(puic));
3441
3455
  }
3442
3456
  }
3443
- this.store.dispatch(SetSelectedRitdeel(undefined));
3444
3457
  }
3445
3458
  handleImxviewRightClick(evt) {
3446
3459
  const fn = () => {
@@ -3471,7 +3484,7 @@ class SvgVisualisatieComponent {
3471
3484
  handleNieuweRouteToegevoegd() {
3472
3485
  this.store.select('nieuweRoute')
3473
3486
  .subscribe((nieuweRoute) => {
3474
- if (nieuweRoute.isValid()) {
3487
+ if (nieuweRoute?.isValid()) {
3475
3488
  this.store.dispatch(ResetNieuweRoute());
3476
3489
  this.store.dispatch(ritdeelInvoegen(nieuweRoute));
3477
3490
  }
@@ -3584,7 +3597,7 @@ class SvgVisualisatieComponent {
3584
3597
  });
3585
3598
  this.viewerControlsService.setValideRit(!gebrokenRit);
3586
3599
  this.store.dispatch(SetGeplandeActies(actieOpRitSelectiePuics));
3587
- const actieOpRitSelectiePuicsArray = Utils.flatMap(Array.from(actieOpRitSelectiePuics.values()), x => x);
3600
+ const actieOpRitSelectiePuicsArray = Array.from(actieOpRitSelectiePuics.values()).reduce((acc, val) => acc.concat(val), []);
3588
3601
  this.store.dispatch(SetActieOpRitSelectieIds(actieOpRitSelectiePuicsArray));
3589
3602
  ritSelectiePuics = ritSelectiePuics.filter(item => actieOpRitSelectiePuicsArray.indexOf(item) < 0); // make mutually exclusive
3590
3603
  this.store.dispatch(SetRitSelectieIds(ritSelectiePuics));
@@ -3640,6 +3653,9 @@ class MstviewerComponent {
3640
3653
  this.printBewegingService = printBewegingService;
3641
3654
  this.paginationSize = 4;
3642
3655
  this.baseurl = 'https://acceptatie.raildesign.nl';
3656
+ this.debug = false;
3657
+ this.viewer = false;
3658
+ this.useClickArea = false;
3643
3659
  this.goedgekeurd = new EventEmitter();
3644
3660
  this.subscriptions = new Subscription();
3645
3661
  this.subscriptions.add(this.store.select('nieuweBewegingen').subscribe(nieuweRit => {
@@ -3702,11 +3718,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
3702
3718
  type: Component,
3703
3719
  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"] }]
3704
3720
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: DebugService }, { type: PrintBewegingService }], propDecorators: { iaversieinfo: [{
3705
- type: Input
3721
+ type: Input,
3722
+ args: [{ required: true }]
3706
3723
  }], treinpad: [{
3707
- type: Input
3724
+ type: Input,
3725
+ args: [{ required: true }]
3708
3726
  }], ongeplandeActies: [{
3709
- type: Input
3727
+ type: Input,
3728
+ args: [{ required: true }]
3710
3729
  }], paginationSize: [{
3711
3730
  type: Input
3712
3731
  }], baseurl: [{
@@ -3780,6 +3799,8 @@ class BaseRestService {
3780
3799
  this.httpClient = httpClient;
3781
3800
  this.store = store;
3782
3801
  this.subscriptions = new Subscription();
3802
+ this.baseUrl = '';
3803
+ this.iaVersie = '';
3783
3804
  this.subscriptions.add(this.store.select('baseUrl').subscribe(baseUrl => this.baseUrl = baseUrl));
3784
3805
  this.subscriptions.add(this.store.select('iaVersie').subscribe(iaVersie => this.iaVersie = iaVersie.versie));
3785
3806
  }
@@ -3955,13 +3976,13 @@ class Ritdeel {
3955
3976
  return retval;
3956
3977
  }
3957
3978
  getVrijebaanRijwegplan() {
3958
- return this.vrijebaanRijwegplanRijwegDwangCombi.rijwegplan;
3979
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.rijwegplan;
3959
3980
  }
3960
3981
  getVrijebaanRijweg() {
3961
- return this.vrijebaanRijwegplanRijwegDwangCombi.rijweg;
3982
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.rijweg;
3962
3983
  }
3963
3984
  getVrijebaanDwang() {
3964
- return this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
3985
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.dwang;
3965
3986
  }
3966
3987
  getDwangNummer() {
3967
3988
  return this.rijwegplanRijwegDwangCombi.getDwangNummer();
@@ -3978,7 +3999,7 @@ class Ritdeel {
3978
3999
  isBinnenWindow() {
3979
4000
  return (this.zichtbaarheid === RitdeelZichtbaarheid.ZICHTBAAR ||
3980
4001
  this.zichtbaarheid === RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_GEBRUIKER)
3981
- && this.zichtbaarBuitenPaginatie === false;
4002
+ && !this.zichtbaarBuitenPaginatie;
3982
4003
  }
3983
4004
  isNietBeschikbaar() {
3984
4005
  return this.zichtbaarheid === RitdeelZichtbaarheid.ONZICHTBAAR_DOOR_SYSTEEM;
@@ -4001,10 +4022,10 @@ class Ritdeel {
4001
4022
  }
4002
4023
  }
4003
4024
  heeftVrijebaanInfo() {
4004
- return this.vrijebaanRijwegplanRijwegDwangCombi && !!this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
4025
+ return !!this.vrijebaanRijwegplanRijwegDwangCombi && !!this.vrijebaanRijwegplanRijwegDwangCombi.dwang;
4005
4026
  }
4006
4027
  getVrijebaanPrlRoute() {
4007
- return this.vrijebaanRijwegplanRijwegDwangCombi.getRoute();
4028
+ return this.vrijebaanRijwegplanRijwegDwangCombi?.getRoute();
4008
4029
  }
4009
4030
  getTopologieElementen() {
4010
4031
  return this.topoElementen;
@@ -4036,10 +4057,10 @@ class Ritdeel {
4036
4057
  getZichtbaarheidBuitenPaginatie() {
4037
4058
  return this.zichtbaarBuitenPaginatie;
4038
4059
  }
4039
- bepaalTopologieElementen(signaleringsBeeldManagerService) {
4040
- const topoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getRoute());
4060
+ bepaalTopologieElementen(sbmService) {
4061
+ const topoElementen = sbmService.bepaalRouteElementen(this.getRoute());
4041
4062
  if (this.heeftVrijebaanInfo()) {
4042
- const vrijebaanTopoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4063
+ const vrijebaanTopoElementen = sbmService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4043
4064
  topoElementen.push(...vrijebaanTopoElementen);
4044
4065
  }
4045
4066
  this.topoElementen = topoElementen;
@@ -4085,7 +4106,7 @@ class RitLezerService {
4085
4106
  ritDelen.push(new Ritdeel(dwangInfo, beweging.ritActies, beweging, vrijebaanDwangInfo, vervolgSpoor, []));
4086
4107
  }
4087
4108
  extractVrijebaanDwangInfo(beweging, rijwegPlan, rijweg) {
4088
- let vrijebaanDwangInfo = null;
4109
+ let vrijebaanDwangInfo = undefined;
4089
4110
  let vervolgSpoor;
4090
4111
  if (beweging.naarSpoor.endsWith(SPOOR_NAAR_VRIJEBAAN_POSTFIX) ||
4091
4112
  beweging.naarSpoor.endsWith(SPOOR_NAAR_VEERWISSEL_VRIJEBAAN_POSTFIX)) {
@@ -4099,9 +4120,9 @@ class RitLezerService {
4099
4120
  vrijebaanRijweg = vrijebaanRijwegen[0];
4100
4121
  vrijebaanDwang = vrijebaanRijweg.getDwangVoorDwangNummer(0);
4101
4122
  vervolgSpoor = vrijebaanRijwegplan.getVervolgSpoor(vrijebaanRijweg);
4123
+ vrijebaanDwangInfo =
4124
+ new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4102
4125
  }
4103
- vrijebaanDwangInfo =
4104
- new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4105
4126
  }
4106
4127
  }
4107
4128
  return { vrijebaanDwangInfo, vervolgSpoor };
@@ -4154,7 +4175,7 @@ class BepaalOngeplandeActiesEffect {
4154
4175
  this.bepaalOngeplandeActies$ = createEffect(() => this.actions$.pipe(ofType(BepaalOngeplandeActies), withLatestFrom(this.store), map(([action, store]) => {
4155
4176
  const puicActieMap = new ArrayMultimap();
4156
4177
  const nietGevondenTakken = [];
4157
- const logMeldingDTOs = [];
4178
+ const logMeldingDTOs$ = [];
4158
4179
  const acties = store.ritDelen.flatMap(rd => rd.acties);
4159
4180
  action.ongeplandeActies.forEach(actie => {
4160
4181
  const alreadyAdded = acties.filter(a => a.id === actie.id).length > 0;
@@ -4170,11 +4191,11 @@ class BepaalOngeplandeActiesEffect {
4170
4191
  if (!spoortak && nietGevondenTakken.indexOf(takId) < 0) {
4171
4192
  nietGevondenTakken.push(takId);
4172
4193
  const melding = MeldingBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken);
4173
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4194
+ logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4174
4195
  }
4175
4196
  else if (spoortak) {
4176
4197
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
4177
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4198
+ logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4178
4199
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
4179
4200
  }
4180
4201
  }
@@ -4183,8 +4204,8 @@ class BepaalOngeplandeActiesEffect {
4183
4204
  if (nietGevondenTakken.length > 0) {
4184
4205
  this.messagesService.showMessage(MessageBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken));
4185
4206
  }
4186
- if (logMeldingDTOs.length > 0) {
4187
- this.mstLogResource.logMessages(logMeldingDTOs);
4207
+ if (logMeldingDTOs$.length > 0) {
4208
+ forkJoin(logMeldingDTOs$).pipe(tap(dtos => this.mstLogResource.logMessages(dtos))).subscribe();
4188
4209
  }
4189
4210
  this.store.dispatch(SetOngeplandeActies(puicActieMap));
4190
4211
  this.store.dispatch(SetOngeplandeActieSelectieIds(Array.from(puicActieMap.keys())));
@@ -4408,7 +4429,7 @@ class LaadRouteFilesEffect {
4408
4429
  const promise = this.editorService.laadRouteFiles(actie.iaversieinfo.versie, pplgs);
4409
4430
  promise.then(() => {
4410
4431
  this.updateRitdelen(actie);
4411
- }, err => {
4432
+ }, (err) => {
4412
4433
  this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4413
4434
  });
4414
4435
  });
@@ -4468,14 +4489,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4468
4489
  }] });
4469
4490
 
4470
4491
  class LaadSignaleringsbeeldenEffect {
4471
- constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesSerivce) {
4492
+ constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesService) {
4472
4493
  this.actions$ = actions$;
4473
4494
  this.store = store;
4474
4495
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
4475
4496
  this.editorService = editorService;
4476
4497
  this.sbiResource = sbiResource;
4477
4498
  this.connectorService = connectorService;
4478
- this.messagesSerivce = messagesSerivce;
4499
+ this.messagesService = messagesService;
4479
4500
  this.SVG_PIXEL_RUIMTE = 30;
4480
4501
  this.verwerkRitdelen$ = createEffect(() => this.actions$.pipe(ofType(setRitDelen, navigeer, navigeerVanaf), withLatestFrom(this.store), map(([actie, storeState]) => {
4481
4502
  this.store.dispatch(SetOngeplandeActiesBepaald(false));
@@ -4490,13 +4511,13 @@ class LaadSignaleringsbeeldenEffect {
4490
4511
  }
4491
4512
  handleSignaleringsbeeldInfo({ actie, storeState }) {
4492
4513
  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));
4514
+ this.messagesService.showMessage(MessageBuilder.nietGevondenSBI(err));
4494
4515
  return throwError(() => err);
4495
4516
  }));
4496
4517
  }
4497
4518
  processResponse({ dtos, storeState, actie }) {
4498
4519
  if (dtos && dtos.filter(dto => dto.metVisualisatie).length > 12) {
4499
- this.messagesSerivce.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4520
+ this.messagesService.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4500
4521
  }
4501
4522
  this.store.dispatch(SetSignaleringsbeeldInfoDtos(dtos, storeState.iaVersie, actie.rit, actie.paginationSize, actie.ritGewijzigdToegestaan));
4502
4523
  this.store.dispatch(SetVisibleSignaleringsbeeldInfoDtos(dtos));
@@ -4509,11 +4530,11 @@ class LaadSignaleringsbeeldenEffect {
4509
4530
  return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto([rand.getPPLG(), otherPplg], storeState.iaVersie)).pipe(map(dtos => ({ dtos, storeState })));
4510
4531
  }
4511
4532
  loadSignaleringsbeelden({ dtos, storeState }) {
4512
- return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, storeState, dtos })));
4533
+ return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, ritDelen: storeState.ritDelen, dtos })));
4513
4534
  }
4514
- processSvgsAndUpdateRitdelen({ svgDataUrls, storeState, dtos }) {
4535
+ processSvgsAndUpdateRitdelen({ svgDataUrls, ritDelen, dtos }) {
4515
4536
  this.verwerkSvgs(svgDataUrls);
4516
- const nieuweRitdelen = this.updateRitdelen(storeState.ritDelen, dtos);
4537
+ const nieuweRitdelen = this.updateRitdelen(ritDelen, dtos);
4517
4538
  this.store.dispatch(UpdateVisibleSignaleringsbeeldInfoDtos(dtos));
4518
4539
  this.store.dispatch(updateRitDelen(nieuweRitdelen));
4519
4540
  }
@@ -4530,7 +4551,7 @@ class LaadSignaleringsbeeldenEffect {
4530
4551
  this.verwerkSvgs(svgDataUrls);
4531
4552
  this.updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos);
4532
4553
  }), catchError(err => {
4533
- this.messagesSerivce.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4554
+ this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4534
4555
  throw err;
4535
4556
  })).subscribe();
4536
4557
  }
@@ -4585,8 +4606,8 @@ class LaadSignaleringsbeeldenEffect {
4585
4606
  dtos.filter(d => !visibleDtos.includes(d)).forEach(d => d.metVisualisatie = false);
4586
4607
  return visibleDtos;
4587
4608
  }
4588
- distinct(value, index, self) {
4589
- return self.indexOf(value) === index;
4609
+ distinct(value, index, values) {
4610
+ return values.indexOf(value) === index;
4590
4611
  }
4591
4612
  addPrevNonVisibleDto(firstIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
4592
4613
  if (firstIdx >= 0) {
@@ -4675,7 +4696,7 @@ class LaadSignaleringsbeeldenEffect {
4675
4696
  }
4676
4697
  }
4677
4698
  }
4678
- this.updateZichtbaarheidAangrezendeRitdelen(min, max, ritdelen, visibleDtos);
4699
+ this.updateZichtbaarheidAangrenzendeRitdelen(min, max, ritdelen, visibleDtos);
4679
4700
  return this.updateZichtbaarheidBuitenWindow(ritdelen, visibleDtos);
4680
4701
  }
4681
4702
  updateZichtbaarheidBuitenWindow(nieuweRitdelen, visibleDtos) {
@@ -4691,7 +4712,7 @@ class LaadSignaleringsbeeldenEffect {
4691
4712
  }
4692
4713
  return nieuweRitdelen;
4693
4714
  }
4694
- updateZichtbaarheidAangrezendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4715
+ updateZichtbaarheidAangrenzendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4695
4716
  let i = min - 1;
4696
4717
  while (i >= 0) {
4697
4718
  i = this.updateZichtbaarHeid(i, 0, visibleDtos, nieuweRitdelen) - 1;
@@ -4826,11 +4847,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4826
4847
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: BewegingVerrijkerService }] });
4827
4848
 
4828
4849
  class RitdelenEffect {
4829
- constructor(actions$, store, sbmService, rijwegPlanEditorService) {
4850
+ constructor(actions$, store, sbmService, editorService) {
4830
4851
  this.actions$ = actions$;
4831
4852
  this.store = store;
4832
4853
  this.sbmService = sbmService;
4833
- this.rijwegPlanEditorService = rijwegPlanEditorService;
4854
+ this.editorService = editorService;
4834
4855
  this.updateRitDelen$ = createEffect(() => this.actions$.pipe(ofType(updateRitDelen), withLatestFrom(this.store), map(([actie, _storeState]) => {
4835
4856
  const nieuweRitDelen = actie.ritDelen.map(ritDeel => ritDeel.isZichtbaar() ?
4836
4857
  ritDeel.copyMetAlternatieveRoutes(this.sbmService.bepaalAlternativeRoutes(ritDeel.getRijweg())) : ritDeel);
@@ -4848,25 +4869,25 @@ class RitdelenEffect {
4848
4869
  return setRitdelenAfterUpdate(ritDelen);
4849
4870
  })));
4850
4871
  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);
4872
+ const ritDelen = this.ritdeelInvoegenFunc(storeState.ritDelen, actie.nieuweRoute);
4852
4873
  return setRitdelenAfterUpdate(ritDelen);
4853
4874
  })));
4854
4875
  }
4855
- ritdeelInvoegenFunc(ritDelen, nieuweRoute, rijwegPlanEditorService, sbmService) {
4876
+ ritdeelInvoegenFunc(ritDelen, nieuweRoute) {
4856
4877
  const origineelRitdeel = nieuweRoute.beginSeinOpRitdeel.ritdeel;
4857
4878
  const beginSein = nieuweRoute.beginSeinOpRitdeel.sein;
4858
- const rijwegplan = rijwegPlanEditorService.getRijwegplan(beginSein.getPPLG());
4879
+ const rijwegplan = this.editorService.getRijwegplan(beginSein.getPPLG());
4859
4880
  const dwangen = JsJavaUtil.listToArray(rijwegplan.getOnderliggendeDwangenTotEnVanSein(origineelRitdeel.getDwang(), beginSein));
4860
4881
  const isSamengesteldeRoute = dwangen[0] && dwangen[1];
4861
4882
  let newRitdeel1 = origineelRitdeel;
4862
4883
  if (isSamengesteldeRoute) {
4863
- newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen);
4884
+ newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen);
4864
4885
  }
4865
- if (nieuweRoute.combinatieVoorEindsein.isVrijeBaanRijweg()) {
4866
- this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService);
4886
+ if (nieuweRoute.combinatieVoorEindsein?.isVrijeBaanRijweg()) {
4887
+ this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute);
4867
4888
  }
4868
4889
  else {
4869
- this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen);
4890
+ this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen);
4870
4891
  }
4871
4892
  if (isSamengesteldeRoute) {
4872
4893
  ritDelen.splice(ritDelen.indexOf(origineelRitdeel), 1);
@@ -4881,38 +4902,39 @@ class RitdelenEffect {
4881
4902
  }
4882
4903
  }
4883
4904
  }
4884
- verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen) {
4905
+ verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen) {
4885
4906
  // dwangen in 2 nieuwe ritdelen verwerken voor de knip
4886
4907
  const nieuweRijweg1 = rijwegplan.getRijwegVoorSeinen(dwangen[0].getRoute().getBeginSein(), dwangen[0].getRoute().getEindSein());
4887
4908
  const dwangInfo1 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg1, dwangen[0]);
4888
- const newRitdeel1 = new Ritdeel(dwangInfo1, [], null, null, null, []);
4909
+ const newRitdeel1 = new Ritdeel(dwangInfo1, [], undefined, undefined, undefined, []);
4889
4910
  // remove vrijbaan info uit ritdeel
4890
- newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = null;
4891
- newRitdeel1.vervolgSpoor = null;
4892
- newRitdeel1.bepaalTopologieElementen(sbmService);
4911
+ newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = undefined;
4912
+ newRitdeel1.vervolgSpoor = undefined;
4913
+ newRitdeel1.bepaalTopologieElementen(this.sbmService);
4893
4914
  this.insertRitdeel(ritDelen, origineelRitdeel, newRitdeel1);
4894
4915
  const nieuweRijweg2 = rijwegplan.getRijwegVoorSeinen(dwangen[1].getRoute().getBeginSein(), dwangen[1].getRoute().getEindSein());
4895
4916
  const dwangInfo2 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg2, dwangen[1]);
4896
- const newRitdeel2 = new Ritdeel(dwangInfo2, [], null, null, null, []);
4897
- newRitdeel2.bepaalTopologieElementen(sbmService);
4917
+ const newRitdeel2 = new Ritdeel(dwangInfo2, [], undefined, undefined, undefined, []);
4918
+ newRitdeel2.bepaalTopologieElementen(this.sbmService);
4898
4919
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel2);
4899
4920
  return newRitdeel1;
4900
4921
  }
4901
- extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService) {
4922
+ extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute) {
4902
4923
  newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = nieuweRoute.combinatieVoorEindsein;
4903
- const vbrwp = nieuweRoute.combinatieVoorEindsein.rijwegplan;
4904
- newRitdeel1.vervolgSpoor = vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein.rijweg);
4905
- newRitdeel1.bepaalTopologieElementen(sbmService);
4924
+ const vbrwp = nieuweRoute.combinatieVoorEindsein?.rijwegplan;
4925
+ newRitdeel1.vervolgSpoor = nieuweRoute.combinatieVoorEindsein ?
4926
+ vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein?.rijweg) : undefined;
4927
+ newRitdeel1.bepaalTopologieElementen(this.sbmService);
4906
4928
  }
4907
- maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen) {
4929
+ maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen) {
4908
4930
  let newRitdeel = this.createRitdeel(nieuweRoute);
4909
- const altRoutes = sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4931
+ const altRoutes = this.sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4910
4932
  newRitdeel = newRitdeel.copyMetAlternatieveRoutes(altRoutes);
4911
- newRitdeel.bepaalTopologieElementen(sbmService);
4933
+ newRitdeel.bepaalTopologieElementen(this.sbmService);
4912
4934
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel);
4913
4935
  }
4914
4936
  createRitdeel(nieuweRoute) {
4915
- return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], null, null, null, []);
4937
+ return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], undefined, undefined, undefined, []);
4916
4938
  }
4917
4939
  insertRitdeel(ritdelen, naRitdeelPositie, newRitdeel) {
4918
4940
  const idx = ritdelen.indexOf(naRitdeelPositie);
@@ -4963,13 +4985,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4963
4985
  type: Injectable
4964
4986
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: SignaleringsBeeldManagerService }, { type: i4.SignaleringsbeeldSvgUtilityService }] });
4965
4987
 
4988
+ class ProgressIndicator {
4989
+ constructor(lowerText, upperText, iconClass) {
4990
+ this.lowerText = '';
4991
+ this.upperText = '';
4992
+ this.iconClass = '';
4993
+ this.lowerText = lowerText ?? this.lowerText;
4994
+ this.upperText = upperText ?? this.upperText;
4995
+ this.iconClass = iconClass ?? this.iconClass;
4996
+ }
4997
+ }
4998
+
4966
4999
  class NieuweRoute {
4967
5000
  constructor(beginSeinOpRitdeel, combinatieVoorEindsein) {
4968
5001
  this.beginSeinOpRitdeel = beginSeinOpRitdeel;
4969
5002
  this.combinatieVoorEindsein = combinatieVoorEindsein;
4970
5003
  }
4971
5004
  isValid() {
4972
- return this.combinatieVoorEindsein !== null;
5005
+ return !!this.combinatieVoorEindsein;
4973
5006
  }
4974
5007
  }
4975
5008
 
@@ -5035,7 +5068,7 @@ function addRitdeelActieFunc(ritDelen, { ritDeel, actie }) {
5035
5068
  const onIdsActionHandler = (action) => on(action, (_, { ids }) => ids);
5036
5069
  const createIdsReducer = (action) => createReducer([], onIdsActionHandler(action));
5037
5070
  const editableReducer = createReducer(true, on(setEditable, (_, { editable }) => editable));
5038
- const progressIndicatorReducer = createReducer(undefined, on(ShowProgress, () => ({ progressIndicator: {} })), on(ClearProgress, () => undefined));
5071
+ const progressIndicatorReducer = createReducer({}, on(ShowProgress, () => ({ progressIndicator: new ProgressIndicator() })), on(ClearProgress, () => ({})));
5039
5072
  const svgInfoReducer = createReducer([], on(SetSvgInfos, (_, { svgInfos }) => svgInfos));
5040
5073
  const debugReducer = createReducer(false, on(SetDebug, (_, { debug }) => debug));
5041
5074
  const ritSelectieIdsReducer = createIdsReducer(SetRitSelectieIds);
@@ -5061,12 +5094,10 @@ const ongeplandeActieReducer = createReducer(new ArrayMultimap(), on(SetOngeplan
5061
5094
  ongeplandeActie.puics.forEach(puic => ongeplandeActies.delete(puic, ongeplandeActie));
5062
5095
  return new ArrayMultimap(ongeplandeActies);
5063
5096
  }));
5064
- const ongeplandeActieSelectieIdsReducer = createReducer([],
5065
- // on(MstActions.SetOngeplandeActieSelectieIds, (_, { ids }) => ids),
5066
- onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5097
+ const ongeplandeActieSelectieIdsReducer = createReducer([], onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5067
5098
  ongeplandeActie.puics.filter(puic => !ids.includes(puic)).forEach(puic => ids.push(puic));
5068
5099
  return [...ids];
5069
- }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => [].concat(ids.includes(id) ? ids.filter(_id => _id !== id) : ids)));
5100
+ }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => ids.includes(id) ? ids.filter(_id => _id !== id) : ids));
5070
5101
  const gebrokenRitSelectieIdsReducer = createIdsReducer(SetGebrokenRitSelectieIds);
5071
5102
  const alternatievenSelectieIdsReducer = createIdsReducer(SetAlternatievenSelectieIds);
5072
5103
  const beginSeinSelectieIdsReducer = createIdsReducer(SetBeginSeinSelectieIds);
@@ -5075,16 +5106,15 @@ const alternatievenClickableIdsReducer = createIdsReducer(SetAlternatievenClicka
5075
5106
  const eindSeinenClickableIdsReducer = createIdsReducer(SetEindSeinenClickableIds);
5076
5107
  const connectorClickableIdsReducer = createIdsReducer(SetConnectorenClickableIds);
5077
5108
  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)));
5109
+ const nieuweRouteReducer = createReducer(undefined, on(SetNieuwRouteBeginSein, (_, { startSeinOpRitdeel }) => new NieuweRoute(startSeinOpRitdeel, undefined)), on(SetNieuwRouteEindSein, (nieuweRoute, { combinatieVoorEindsein }) => new NieuweRoute(nieuweRoute.beginSeinOpRitdeel, combinatieVoorEindsein)), on(ResetNieuweRoute, () => undefined));
5079
5110
  const signaleringsbeeldInfoDtosReducer = createReducer([], on(SetSignaleringsbeeldInfoDtos, (_, { dtos }) => dtos), on(UpdateSignaleringsbeeldInfoDtos, (_, { dtos }) => [...dtos]));
5080
5111
  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() })));
5112
+ const iaVersieReducer = createReducer({ versie: 'unknown', ingangsDatum: new Date() }, on(SetIaVersie, (_, { iaVersie }) => Object.assign({}, iaVersie, { versie: iaVersie.versie.toUpperCase() })));
5082
5113
  const algemeneRitInfoDtoReducer = createReducer({}, on(SetAlgemeneRitInfo, (_, { algemeneRitInfoDto }) => algemeneRitInfoDto));
5083
5114
  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));
5115
+ const nieuweBewegingReducer = createReducer([], on(UpdateRit, (_, { bewegingen }) => bewegingen));
5116
+ const baseUrlReducer = createReducer('', on(SetBaseUrl, (_, { baseUrl }) => baseUrl));
5117
+ const focusIdsReducer = createReducer([], on(focusOpIds, (_, { puics }) => puics));
5088
5118
  const storeReducers = {
5089
5119
  ritDelen: ritdelenReducer,
5090
5120
  ritSelectieIds: ritSelectieIdsReducer,
@@ -5113,9 +5143,9 @@ const storeReducers = {
5113
5143
  nieuweBewegingen: nieuweBewegingReducer,
5114
5144
  baseUrl: baseUrlReducer,
5115
5145
  focusIds: focusIdsReducer,
5116
- selectedRitdeelId: selectedRitdeelIdReducer
5117
5146
  };
5118
5147
 
5148
+ // @ts-nocheck
5119
5149
  class ZoneUtil {
5120
5150
  constructor(ngZone) {
5121
5151
  this.ngZone = ngZone;
@@ -5178,6 +5208,7 @@ class MstViewerModule {
5178
5208
  constructor(service, zoneUtil) {
5179
5209
  this.service = service;
5180
5210
  // maak de EditorService toegankelijk voor GWT code
5211
+ // @ts-ignore
5181
5212
  window['rpe'] = {
5182
5213
  EditorService: zoneUtil.proxy(service)
5183
5214
  };