@loxia/mst-viewer 8.1.3-202511172000 → 8.1.3-202511180833

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 (51) 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 +4 -7
  3. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +12 -18
  4. package/esm2022/lib/components/rpe/rpe.component.mjs +2 -6
  5. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +7 -8
  6. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +3 -7
  7. package/esm2022/lib/model/nieuwe-route.mjs +2 -2
  8. package/esm2022/lib/model/ritdeel.mjs +4 -4
  9. package/esm2022/lib/mst-viewer.module.mjs +5 -6
  10. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +1 -2
  11. package/esm2022/lib/services/base-rest.service.mjs +1 -3
  12. package/esm2022/lib/services/editor.service.mjs +1 -3
  13. package/esm2022/lib/services/rit-lezer.service.mjs +4 -4
  14. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +1 -1
  15. package/esm2022/lib/state/actions/actions.mjs +4 -2
  16. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +7 -8
  17. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +1 -1
  18. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +1 -1
  19. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +1 -1
  20. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +2 -2
  21. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +13 -13
  22. package/esm2022/lib/state/effect/ritdelen.effect.mjs +25 -26
  23. package/esm2022/lib/state/mst-editor-state.mjs +13 -10
  24. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +1 -1
  25. package/esm2022/lib/util/actie-helper.mjs +19 -23
  26. package/esm2022/lib/util/actie-popover-bepaler.mjs +2 -2
  27. package/esm2022/lib/util/logging-helper.mjs +33 -31
  28. package/esm2022/lib/util/multi-map.mjs +3 -2
  29. package/esm2022/lib/util/utils.mjs +5 -2
  30. package/esm2022/lib/util/zone-util.mjs +1 -2
  31. package/fesm2022/loxia-mst-viewer.mjs +248 -273
  32. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  33. package/lib/atomic-components/message/message.component.d.ts +2 -2
  34. package/lib/atomic-components/progress-indicator/progress-indicator.entity.d.ts +1 -1
  35. package/lib/components/ritdelen-lijst/ritdelen-lijst.component.d.ts +2 -2
  36. package/lib/components/rpe/rpe.component.d.ts +1 -1
  37. package/lib/components/svg-visualisatie/svg-visualisatie.component.d.ts +1 -1
  38. package/lib/components/viewer-controls/viewer-controls.component.d.ts +2 -2
  39. package/lib/model/nieuwe-route.d.ts +2 -2
  40. package/lib/model/ritdeel.d.ts +6 -7
  41. package/lib/state/actions/actions.d.ts +6 -1
  42. package/lib/state/effect/bepaal-ongeplande-acties.effect.d.ts +1 -2
  43. package/lib/state/effect/delete-ongeplande-actie.effect.d.ts +1 -1
  44. package/lib/state/effect/laad-route-files.effect.d.ts +1 -2
  45. package/lib/state/effect/laad-signaleringsbeelden.effect.d.ts +9 -9
  46. package/lib/state/effect/ritdelen.effect.d.ts +6 -7
  47. package/lib/state/mst-editor-state.d.ts +83 -20
  48. package/lib/util/actie-helper.d.ts +4 -4
  49. package/lib/util/logging-helper.d.ts +1 -2
  50. package/lib/util/utils.d.ts +1 -0
  51. 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, forkJoin, of, throwError } from 'rxjs';
15
- import { filter, map, take, tap, catchError, withLatestFrom, switchMap } from 'rxjs/operators';
14
+ import { BehaviorSubject, from, Subscription, combineLatest, of, throwError } from 'rxjs';
15
+ import { take, filter, map, catchError, withLatestFrom, switchMap, tap } 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 && this.message.timeout > 0) {
44
+ if (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,84 +124,6 @@ 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
-
205
127
  const version = '8.1.3-SNAPSHOT';
206
128
 
207
129
  const SET_EDITABLE = '[mst] SetEditable';
@@ -291,6 +213,7 @@ const navigeerBuitenRit = createAction(NAVIGEER_BUITEN_RIT, (randPuic) => ({ ran
291
213
  const focusOpRitdeel = createAction(FOCUS_OP_RITDEEL, (ritdeel, paginationSize, iaVersieInfo) => ({ ritdeel, paginationSize, iaVersieInfo }));
292
214
  const focusOpIds = createAction(FOCUS_OP_IDS, (puics) => ({ puics }));
293
215
  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 }));
294
217
  // do not export return value
295
218
  const mstActions = union({
296
219
  setEditable,
@@ -328,9 +251,89 @@ const mstActions = union({
328
251
  ClearProgress,
329
252
  BewegingInvoegen,
330
253
  KeurAlleActiesGoed,
331
- UpdateRit
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
332
300
  });
333
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
+
334
337
  /**
335
338
  * https://gist.github.com/jordanluyke/609a4fffb69d1ebafdadd313ee2ee804
336
339
  *
@@ -394,7 +397,7 @@ class ArrayMultimap {
394
397
  return Array.from(new Set(this._entries.map(entry => entry.key)));
395
398
  }
396
399
  values() {
397
- return this._entries.reduce((acc, x) => acc.concat(x.value), []);
400
+ return Utils.flatMap(this._entries, x => x.value);
398
401
  }
399
402
  put(key, value) {
400
403
  this._entries.push(new MultimapEntry(key, value));
@@ -500,7 +503,6 @@ class EditorService {
500
503
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
501
504
  this.initReadyPromise();
502
505
  }
503
- // Called from GWT only, can be removed when GWT is gone. any is used because it will be removed with GWT
504
506
  setEditor(editor) {
505
507
  this.editor = editor;
506
508
  this.resolveReadyPromise();
@@ -508,7 +510,6 @@ class EditorService {
508
510
  isReady() {
509
511
  return this.promise;
510
512
  }
511
- // Called from GWT only, can be removed when GWT is gone
512
513
  setSignaleringsBeeldManager(signaleringsBeeldManager) {
513
514
  this.signaleringsBeeldManagerService.set(signaleringsBeeldManager);
514
515
  }
@@ -885,12 +886,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
885
886
  }], ctorParameters: () => [{ type: i2$1.Store }, { type: ViewerControlService }, { type: SignaleringsBeeldManagerService }] });
886
887
 
887
888
  class RpeComponent {
888
- constructor() {
889
- this.baseurl = '';
890
- this.path = '';
891
- }
892
889
  convertToScript() {
893
- const element = this.script?.nativeElement;
890
+ const element = this.script.nativeElement;
894
891
  const script = document.createElement('script');
895
892
  script.type = 'text/javascript';
896
893
  if (this.baseurl && this.path) {
@@ -990,38 +987,6 @@ class MeldingBuilder {
990
987
  }
991
988
  }
992
989
 
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
-
1025
990
  class MessageBuilder {
1026
991
  static rwpDataNietGevonden(err) {
1027
992
  return new Message(Severity.ERROR, 'Error bij ophalen van rijwegplan data: ' + err);
@@ -2407,35 +2372,38 @@ class LoggingHelper {
2407
2372
  this.store = store;
2408
2373
  }
2409
2374
  maakLogDTO(melding, actie) {
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()
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
2437
2397
  };
2438
- }));
2398
+ }
2399
+ return {
2400
+ iaVersie,
2401
+ meldingLevel: melding.meldingLevel,
2402
+ meldingMessage: melding.meldingMessage,
2403
+ actieDto,
2404
+ algemeneRitInfoDto,
2405
+ sbinfoDtos: this.getSbInfoDtos()
2406
+ };
2439
2407
  }
2440
2408
  getSbInfoDtos() {
2441
2409
  const sbInfoDtos = [];
@@ -2547,7 +2515,6 @@ class ActieHelper {
2547
2515
  this.messagesService = messagesService;
2548
2516
  this.store = store;
2549
2517
  this.loggingHelper = loggingHelper;
2550
- this.debug = false;
2551
2518
  this.store.select('debug').subscribe(debug => this.debug = debug);
2552
2519
  }
2553
2520
  static getActieTopoElements(ritDeel, sbmService) {
@@ -2581,10 +2548,10 @@ class ActieHelper {
2581
2548
  }
2582
2549
  }
2583
2550
  static actieComparator(actie1, actie2) {
2584
- if (actie1.vanKilometrering && actie2.vanKilometrering && actie1.vanKilometrering !== actie2.vanKilometrering) {
2551
+ if (actie1.vanKilometrering !== actie2.vanKilometrering) {
2585
2552
  return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
2586
2553
  }
2587
- if (actie1.ritActieTypeOmschrijving && actie2.ritActieTypeOmschrijving && actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2554
+ if (actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
2588
2555
  return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
2589
2556
  }
2590
2557
  if (actie1.wisselNaam !== actie2.wisselNaam) {
@@ -2624,9 +2591,9 @@ class ActieHelper {
2624
2591
  // make sure the elems are sorted in ascending order
2625
2592
  static sorteerTopoElementen(topoElems) {
2626
2593
  const topoElementen = topoElems.slice();
2627
- let lint = undefined;
2628
- let first;
2629
- let second;
2594
+ let lint = null;
2595
+ let first = null;
2596
+ let second = null;
2630
2597
  for (const topoElement of topoElementen) {
2631
2598
  let kilometreringen = null;
2632
2599
  const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
@@ -2638,7 +2605,7 @@ class ActieHelper {
2638
2605
  lint = kilometreringen[0].getKmLint();
2639
2606
  }
2640
2607
  else if (kilometreringen && first && !second) {
2641
- const km = KmRange.getKilometrering(lint ?? '', kilometreringen);
2608
+ const km = KmRange.getKilometrering(lint, kilometreringen);
2642
2609
  if (km) {
2643
2610
  second = km.getKmWaarde();
2644
2611
  }
@@ -2753,23 +2720,21 @@ class ActieHelper {
2753
2720
  else {
2754
2721
  const puics = [];
2755
2722
  kmRanges.forEach(kmRange => {
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
- }
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());
2767
2732
  }
2768
2733
  });
2769
2734
  if (puics.length === 0) {
2770
2735
  actieZonderElementen.push(actie.id);
2771
2736
  const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
2772
- this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(dto => logMeldingDTOs.push(dto))).subscribe();
2737
+ logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
2773
2738
  }
2774
2739
  retval.putAll(actie, puics);
2775
2740
  }
@@ -2862,14 +2827,14 @@ class ActieHelper {
2862
2827
  if (ActieHelper.isKantCodeLinks(kantcode)) {
2863
2828
  return wissel.getLeft();
2864
2829
  }
2865
- return undefined;
2830
+ return null;
2866
2831
  }
2867
2832
  bepaalPuicVoorWisselSlijpenActie(actie) {
2868
2833
  const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
2869
2834
  if (!storingsSymboolPuic && this.debug) {
2870
2835
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
2871
2836
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
2872
- this.loggingHelper.maakLogDTO(melding, actie).pipe(tap(logDto => this.mstLogResource.logMessages([logDto]))).subscribe();
2837
+ this.mstLogResource.logMessages([this.loggingHelper.maakLogDTO(melding, actie)]);
2873
2838
  }
2874
2839
  return storingsSymboolPuic ? [storingsSymboolPuic] : [];
2875
2840
  }
@@ -2884,16 +2849,10 @@ class RitdelenLijstComponent {
2884
2849
  constructor(store, sbmService) {
2885
2850
  this.store = store;
2886
2851
  this.sbmService = sbmService;
2887
- this.nietGeplandeActies = [];
2888
2852
  this.focusEmitter = new EventEmitter();
2889
2853
  this.keurAlleActiesGoed = new EventEmitter();
2890
- this.ritdeelViewModels = [];
2891
2854
  this.selectedRitdeelActies = [];
2892
2855
  this.selectedRitdeelOngeplandeActies = [];
2893
- this.disableActieKnoppenVanRitdeel = true;
2894
- this.editable = false;
2895
- this.ongeplandeActiesMap = new ArrayMultimap();
2896
- this.geplandeActies = new ArrayMultimap();
2897
2856
  this.NG_ACTIE_PREFIX = '* ';
2898
2857
  this.subscriptions = [];
2899
2858
  this.subscriptions.push(store.select('ritDelen').subscribe((ritdelen) => {
@@ -2904,6 +2863,9 @@ class RitdelenLijstComponent {
2904
2863
  this.subscriptions.push(store.select('ongeplandeActies').subscribe(acties => this.ongeplandeActiesMap = acties));
2905
2864
  this.subscriptions.push(store.select('geplandeActies').subscribe(acties => this.geplandeActies = acties));
2906
2865
  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));
2907
2869
  this.subscriptions.push(combineLatest([
2908
2870
  this.store.select('ritDelen'),
2909
2871
  this.store.select('ongeplandeActies')
@@ -2940,14 +2902,12 @@ class RitdelenLijstComponent {
2940
2902
  this.store.dispatch(deleteRitdeel(ritdeel));
2941
2903
  }
2942
2904
  deleteActiesUitRit() {
2943
- this.selectedRitdeel?.acties.slice().forEach(actie => {
2905
+ this.selectedRitdeel.acties.slice().forEach(actie => {
2944
2906
  this.deleteActieUitRit(actie);
2945
2907
  });
2946
2908
  }
2947
2909
  deleteActieUitRit(actie) {
2948
- if (!this.selectedRitdeel)
2949
- return;
2950
- const acties = this.selectedRitdeel.acties ?? [];
2910
+ const acties = this.selectedRitdeel.acties;
2951
2911
  const idx = acties.indexOf(actie);
2952
2912
  if (idx >= 0) {
2953
2913
  this.verhuisActieNaarOngepland(actie);
@@ -2973,7 +2933,7 @@ class RitdelenLijstComponent {
2973
2933
  }
2974
2934
  voegActieToeAanRit(ongeplandeActie) {
2975
2935
  const idx = this.selectedRitdeelOngeplandeActies.indexOf(ongeplandeActie);
2976
- if (idx >= 0 && this.selectedRitdeel) {
2936
+ if (idx >= 0) {
2977
2937
  this.store.dispatch(addRitdeelActie(this.selectedRitdeel, this.selectedRitdeelOngeplandeActies[idx].actie));
2978
2938
  this.store.dispatch(AddGeplandeActie(ongeplandeActie.actie, ongeplandeActie.puics));
2979
2939
  this.store.dispatch(DeleteOngeplandeActie(ongeplandeActie));
@@ -3075,13 +3035,13 @@ class RitdelenLijstComponent {
3075
3035
  return `${prefix}${ActieHelper.getVSTActieOmschrijving(actie)}`;
3076
3036
  }
3077
3037
  bepaalPrefixVoorActieOmschrijving(actie) {
3078
- const noPrefix = '';
3079
- if (this.selectedRitdeel?.acties.includes(actie)) {
3038
+ const prefix = '';
3039
+ if (this.selectedRitdeel.acties.includes(actie)) {
3080
3040
  // Afwijkende naam bij niet gevisualiseerde actie in rit
3081
3041
  const puics = this.geplandeActies.get(actie);
3082
- return puics.length > 0 ? noPrefix : this.NG_ACTIE_PREFIX;
3042
+ return puics.length > 0 ? prefix : this.NG_ACTIE_PREFIX;
3083
3043
  }
3084
- return noPrefix;
3044
+ return prefix;
3085
3045
  }
3086
3046
  actieVanKmTekst(actie) {
3087
3047
  if (ActieHelper.isWisselSlijpenActie(actie)) {
@@ -3102,7 +3062,6 @@ class RitdelenLijstComponent {
3102
3062
  return ritdeel.getPplgString();
3103
3063
  }
3104
3064
  getKantCode(stand) {
3105
- // @ts-ignore
3106
3065
  if (stand === window['domein'].Stand.LINKS) {
3107
3066
  return 'L';
3108
3067
  }
@@ -3239,19 +3198,49 @@ class RitdeelViewModel {
3239
3198
  }
3240
3199
  }
3241
3200
 
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
+
3242
3235
  class ViewerControlsComponent {
3243
3236
  constructor(store, viewerControlsService, bewegingUtils) {
3244
3237
  this.store = store;
3245
3238
  this.viewerControlsService = viewerControlsService;
3246
3239
  this.bewegingUtils = bewegingUtils;
3247
3240
  this.paginationSize = 4;
3248
- this.iaversieinfo = undefined;
3249
- this.treinpad = undefined;
3250
- this.goedgekeurd = new EventEmitter();
3251
3241
  this.printing$ = this.viewerControlsService.isPrinting$();
3252
3242
  this.valideRit$ = this.viewerControlsService.isValideRit$();
3253
3243
  this.subscriptions = new Subscription();
3254
- this.editable = false;
3255
3244
  this.subscriptions.add(this.store.select('editable').subscribe(editable => this.editable = editable));
3256
3245
  }
3257
3246
  ngOnChanges({ treinpad }) {
@@ -3264,7 +3253,7 @@ class ViewerControlsComponent {
3264
3253
  }
3265
3254
  goedkeurenClick() {
3266
3255
  const ritDelen = this.viewerControlsService.ritdelen;
3267
- if (ritDelen && this.treinpad) {
3256
+ if (ritDelen) {
3268
3257
  delete this.treinpad.aantalRitActies;
3269
3258
  this.treinpad.bewegingen = this.bewegingUtils.extractBewegingenUitRitdelen(ritDelen, this.viewerControlsService.origineelTreinPad.bewegingen);
3270
3259
  this.goedgekeurd.emit(this.treinpad);
@@ -3335,7 +3324,7 @@ class ActiePopoverBepaler {
3335
3324
  ongeplandeActies.entries.forEach(entry => {
3336
3325
  const treinNummerActieInfos = puicNaarOngeplandeActieMap.get(entry.key);
3337
3326
  if (!treinNummerActieInfos?.map(({ actie }) => actie).includes(entry.value.actie)) {
3338
- puicNaarOngeplandeActieMap.put(entry.key, { actie: entry.value.actie });
3327
+ puicNaarOngeplandeActieMap.put(entry.key, { treinNummer: undefined, actie: entry.value.actie });
3339
3328
  }
3340
3329
  });
3341
3330
  }
@@ -3395,15 +3384,12 @@ class SvgVisualisatieComponent {
3395
3384
  this.actieHelper = actieHelper;
3396
3385
  this.sbmService = sbmService;
3397
3386
  this.editorService = editorService;
3398
- this.nietGeplandeActies = [];
3399
- this.useClickArea = false;
3400
3387
  this.svgInfos$ = this.store.select('svgInfos');
3401
3388
  this.popoverInfos = [];
3402
3389
  this.clickableIds = [];
3403
3390
  this.rightClickableIds = [];
3404
3391
  this.contextMenuActions = [];
3405
3392
  this.contextMenuStyle = { display: 'none' };
3406
- this.editable = false;
3407
3393
  this.puicNaarBeginSeinRitdeel = new Map();
3408
3394
  this.puicNaarEindSeinCombinatie = new Map();
3409
3395
  this.puicNaarAlternatieveRoute = new Map();
@@ -3427,7 +3413,7 @@ class SvgVisualisatieComponent {
3427
3413
  }));
3428
3414
  }
3429
3415
  ngOnInit() {
3430
- document.getElementById('contextMenu')?.addEventListener('mouseleave', () => this.hideContextMenu());
3416
+ document.getElementById('contextMenu').addEventListener('mouseleave', () => this.hideContextMenu());
3431
3417
  }
3432
3418
  ngOnDestroy() {
3433
3419
  this.subscriptions.forEach(s => s.unsubscribe());
@@ -3454,6 +3440,7 @@ class SvgVisualisatieComponent {
3454
3440
  this.store.dispatch(navigeerBuitenRit(puic));
3455
3441
  }
3456
3442
  }
3443
+ this.store.dispatch(SetSelectedRitdeel(undefined));
3457
3444
  }
3458
3445
  handleImxviewRightClick(evt) {
3459
3446
  const fn = () => {
@@ -3484,7 +3471,7 @@ class SvgVisualisatieComponent {
3484
3471
  handleNieuweRouteToegevoegd() {
3485
3472
  this.store.select('nieuweRoute')
3486
3473
  .subscribe((nieuweRoute) => {
3487
- if (nieuweRoute?.isValid()) {
3474
+ if (nieuweRoute.isValid()) {
3488
3475
  this.store.dispatch(ResetNieuweRoute());
3489
3476
  this.store.dispatch(ritdeelInvoegen(nieuweRoute));
3490
3477
  }
@@ -3597,7 +3584,7 @@ class SvgVisualisatieComponent {
3597
3584
  });
3598
3585
  this.viewerControlsService.setValideRit(!gebrokenRit);
3599
3586
  this.store.dispatch(SetGeplandeActies(actieOpRitSelectiePuics));
3600
- const actieOpRitSelectiePuicsArray = Array.from(actieOpRitSelectiePuics.values()).reduce((acc, val) => acc.concat(val), []);
3587
+ const actieOpRitSelectiePuicsArray = Utils.flatMap(Array.from(actieOpRitSelectiePuics.values()), x => x);
3601
3588
  this.store.dispatch(SetActieOpRitSelectieIds(actieOpRitSelectiePuicsArray));
3602
3589
  ritSelectiePuics = ritSelectiePuics.filter(item => actieOpRitSelectiePuicsArray.indexOf(item) < 0); // make mutually exclusive
3603
3590
  this.store.dispatch(SetRitSelectieIds(ritSelectiePuics));
@@ -3793,8 +3780,6 @@ class BaseRestService {
3793
3780
  this.httpClient = httpClient;
3794
3781
  this.store = store;
3795
3782
  this.subscriptions = new Subscription();
3796
- this.baseUrl = '';
3797
- this.iaVersie = '';
3798
3783
  this.subscriptions.add(this.store.select('baseUrl').subscribe(baseUrl => this.baseUrl = baseUrl));
3799
3784
  this.subscriptions.add(this.store.select('iaVersie').subscribe(iaVersie => this.iaVersie = iaVersie.versie));
3800
3785
  }
@@ -4051,10 +4036,10 @@ class Ritdeel {
4051
4036
  getZichtbaarheidBuitenPaginatie() {
4052
4037
  return this.zichtbaarBuitenPaginatie;
4053
4038
  }
4054
- bepaalTopologieElementen(sbmService) {
4055
- const topoElementen = sbmService.bepaalRouteElementen(this.getRoute());
4039
+ bepaalTopologieElementen(signaleringsBeeldManagerService) {
4040
+ const topoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getRoute());
4056
4041
  if (this.heeftVrijebaanInfo()) {
4057
- const vrijebaanTopoElementen = sbmService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4042
+ const vrijebaanTopoElementen = signaleringsBeeldManagerService.bepaalRouteElementen(this.getVrijebaanPrlRoute());
4058
4043
  topoElementen.push(...vrijebaanTopoElementen);
4059
4044
  }
4060
4045
  this.topoElementen = topoElementen;
@@ -4100,7 +4085,7 @@ class RitLezerService {
4100
4085
  ritDelen.push(new Ritdeel(dwangInfo, beweging.ritActies, beweging, vrijebaanDwangInfo, vervolgSpoor, []));
4101
4086
  }
4102
4087
  extractVrijebaanDwangInfo(beweging, rijwegPlan, rijweg) {
4103
- let vrijebaanDwangInfo = undefined;
4088
+ let vrijebaanDwangInfo = null;
4104
4089
  let vervolgSpoor;
4105
4090
  if (beweging.naarSpoor.endsWith(SPOOR_NAAR_VRIJEBAAN_POSTFIX) ||
4106
4091
  beweging.naarSpoor.endsWith(SPOOR_NAAR_VEERWISSEL_VRIJEBAAN_POSTFIX)) {
@@ -4114,9 +4099,9 @@ class RitLezerService {
4114
4099
  vrijebaanRijweg = vrijebaanRijwegen[0];
4115
4100
  vrijebaanDwang = vrijebaanRijweg.getDwangVoorDwangNummer(0);
4116
4101
  vervolgSpoor = vrijebaanRijwegplan.getVervolgSpoor(vrijebaanRijweg);
4117
- vrijebaanDwangInfo =
4118
- new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4119
4102
  }
4103
+ vrijebaanDwangInfo =
4104
+ new RijwegplanRijwegDwangCombinatie(vrijebaanRijwegplan, vrijebaanRijweg, vrijebaanDwang);
4120
4105
  }
4121
4106
  }
4122
4107
  return { vrijebaanDwangInfo, vervolgSpoor };
@@ -4169,7 +4154,7 @@ class BepaalOngeplandeActiesEffect {
4169
4154
  this.bepaalOngeplandeActies$ = createEffect(() => this.actions$.pipe(ofType(BepaalOngeplandeActies), withLatestFrom(this.store), map(([action, store]) => {
4170
4155
  const puicActieMap = new ArrayMultimap();
4171
4156
  const nietGevondenTakken = [];
4172
- const logMeldingDTOs$ = [];
4157
+ const logMeldingDTOs = [];
4173
4158
  const acties = store.ritDelen.flatMap(rd => rd.acties);
4174
4159
  action.ongeplandeActies.forEach(actie => {
4175
4160
  const alreadyAdded = acties.filter(a => a.id === actie.id).length > 0;
@@ -4185,11 +4170,11 @@ class BepaalOngeplandeActiesEffect {
4185
4170
  if (!spoortak && nietGevondenTakken.indexOf(takId) < 0) {
4186
4171
  nietGevondenTakken.push(takId);
4187
4172
  const melding = MeldingBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken);
4188
- logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4173
+ logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4189
4174
  }
4190
4175
  else if (spoortak) {
4191
4176
  const melding = MeldingBuilder.actieHighlightError([actie.id]);
4192
- logMeldingDTOs$.push(this.loggingHelper.maakLogDTO(melding, actie));
4177
+ logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
4193
4178
  this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
4194
4179
  }
4195
4180
  }
@@ -4198,8 +4183,8 @@ class BepaalOngeplandeActiesEffect {
4198
4183
  if (nietGevondenTakken.length > 0) {
4199
4184
  this.messagesService.showMessage(MessageBuilder.nietGevondenTakkenOngeplandeActies(nietGevondenTakken));
4200
4185
  }
4201
- if (logMeldingDTOs$.length > 0) {
4202
- forkJoin(logMeldingDTOs$).pipe(tap(dtos => this.mstLogResource.logMessages(dtos))).subscribe();
4186
+ if (logMeldingDTOs.length > 0) {
4187
+ this.mstLogResource.logMessages(logMeldingDTOs);
4203
4188
  }
4204
4189
  this.store.dispatch(SetOngeplandeActies(puicActieMap));
4205
4190
  this.store.dispatch(SetOngeplandeActieSelectieIds(Array.from(puicActieMap.keys())));
@@ -4423,7 +4408,7 @@ class LaadRouteFilesEffect {
4423
4408
  const promise = this.editorService.laadRouteFiles(actie.iaversieinfo.versie, pplgs);
4424
4409
  promise.then(() => {
4425
4410
  this.updateRitdelen(actie);
4426
- }, (err) => {
4411
+ }, err => {
4427
4412
  this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4428
4413
  });
4429
4414
  });
@@ -4483,14 +4468,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4483
4468
  }] });
4484
4469
 
4485
4470
  class LaadSignaleringsbeeldenEffect {
4486
- constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesService) {
4471
+ constructor(actions$, store, signaleringsBeeldManagerService, editorService, sbiResource, connectorService, messagesSerivce) {
4487
4472
  this.actions$ = actions$;
4488
4473
  this.store = store;
4489
4474
  this.signaleringsBeeldManagerService = signaleringsBeeldManagerService;
4490
4475
  this.editorService = editorService;
4491
4476
  this.sbiResource = sbiResource;
4492
4477
  this.connectorService = connectorService;
4493
- this.messagesService = messagesService;
4478
+ this.messagesSerivce = messagesSerivce;
4494
4479
  this.SVG_PIXEL_RUIMTE = 30;
4495
4480
  this.verwerkRitdelen$ = createEffect(() => this.actions$.pipe(ofType(setRitDelen, navigeer, navigeerVanaf), withLatestFrom(this.store), map(([actie, storeState]) => {
4496
4481
  this.store.dispatch(SetOngeplandeActiesBepaald(false));
@@ -4505,13 +4490,13 @@ class LaadSignaleringsbeeldenEffect {
4505
4490
  }
4506
4491
  handleSignaleringsbeeldInfo({ actie, storeState }) {
4507
4492
  return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto(actie.pplgs, storeState.iaVersie)).pipe(take(1), tap((dtos) => this.processResponse({ dtos, storeState, actie })), catchError((err) => {
4508
- this.messagesService.showMessage(MessageBuilder.nietGevondenSBI(err));
4493
+ this.messagesSerivce.showMessage(MessageBuilder.nietGevondenSBI(err));
4509
4494
  return throwError(() => err);
4510
4495
  }));
4511
4496
  }
4512
4497
  processResponse({ dtos, storeState, actie }) {
4513
4498
  if (dtos && dtos.filter(dto => dto.metVisualisatie).length > 12) {
4514
- this.messagesService.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4499
+ this.messagesSerivce.showMessage(MessageBuilder.meerDan12BladenGevonden(dtos.length));
4515
4500
  }
4516
4501
  this.store.dispatch(SetSignaleringsbeeldInfoDtos(dtos, storeState.iaVersie, actie.rit, actie.paginationSize, actie.ritGewijzigdToegestaan));
4517
4502
  this.store.dispatch(SetVisibleSignaleringsbeeldInfoDtos(dtos));
@@ -4524,11 +4509,11 @@ class LaadSignaleringsbeeldenEffect {
4524
4509
  return this.sbiResource.laadSignaleringsbeeldInfo(this.createSignaleringsbeeldInfoQueryDto([rand.getPPLG(), otherPplg], storeState.iaVersie)).pipe(map(dtos => ({ dtos, storeState })));
4525
4510
  }
4526
4511
  loadSignaleringsbeelden({ dtos, storeState }) {
4527
- return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, ritDelen: storeState.ritDelen, dtos })));
4512
+ return this.editorService.laadSignaleringsbeelden(storeState.iaVersie.versie, dtos).pipe(map(svgDataUrls => ({ svgDataUrls, storeState, dtos })));
4528
4513
  }
4529
- processSvgsAndUpdateRitdelen({ svgDataUrls, ritDelen, dtos }) {
4514
+ processSvgsAndUpdateRitdelen({ svgDataUrls, storeState, dtos }) {
4530
4515
  this.verwerkSvgs(svgDataUrls);
4531
- const nieuweRitdelen = this.updateRitdelen(ritDelen, dtos);
4516
+ const nieuweRitdelen = this.updateRitdelen(storeState.ritDelen, dtos);
4532
4517
  this.store.dispatch(UpdateVisibleSignaleringsbeeldInfoDtos(dtos));
4533
4518
  this.store.dispatch(updateRitDelen(nieuweRitdelen));
4534
4519
  }
@@ -4545,7 +4530,7 @@ class LaadSignaleringsbeeldenEffect {
4545
4530
  this.verwerkSvgs(svgDataUrls);
4546
4531
  this.updateState(ritDelen, visibleDtos, storeState, visibleRitPplgs, loadingDtos, isInit, storeDtos);
4547
4532
  }), catchError(err => {
4548
- this.messagesService.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4533
+ this.messagesSerivce.showMessage(MessageBuilder.rwpDataNietGevonden(Utils.getValidErorrMessage(err)));
4549
4534
  throw err;
4550
4535
  })).subscribe();
4551
4536
  }
@@ -4600,8 +4585,8 @@ class LaadSignaleringsbeeldenEffect {
4600
4585
  dtos.filter(d => !visibleDtos.includes(d)).forEach(d => d.metVisualisatie = false);
4601
4586
  return visibleDtos;
4602
4587
  }
4603
- distinct(value, index, values) {
4604
- return values.indexOf(value) === index;
4588
+ distinct(value, index, self) {
4589
+ return self.indexOf(value) === index;
4605
4590
  }
4606
4591
  addPrevNonVisibleDto(firstIdx, ritdelen, loadingDtos, visibleRitPplgs, allDtos) {
4607
4592
  if (firstIdx >= 0) {
@@ -4690,7 +4675,7 @@ class LaadSignaleringsbeeldenEffect {
4690
4675
  }
4691
4676
  }
4692
4677
  }
4693
- this.updateZichtbaarheidAangrenzendeRitdelen(min, max, ritdelen, visibleDtos);
4678
+ this.updateZichtbaarheidAangrezendeRitdelen(min, max, ritdelen, visibleDtos);
4694
4679
  return this.updateZichtbaarheidBuitenWindow(ritdelen, visibleDtos);
4695
4680
  }
4696
4681
  updateZichtbaarheidBuitenWindow(nieuweRitdelen, visibleDtos) {
@@ -4706,7 +4691,7 @@ class LaadSignaleringsbeeldenEffect {
4706
4691
  }
4707
4692
  return nieuweRitdelen;
4708
4693
  }
4709
- updateZichtbaarheidAangrenzendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4694
+ updateZichtbaarheidAangrezendeRitdelen(min, max, nieuweRitdelen, visibleDtos) {
4710
4695
  let i = min - 1;
4711
4696
  while (i >= 0) {
4712
4697
  i = this.updateZichtbaarHeid(i, 0, visibleDtos, nieuweRitdelen) - 1;
@@ -4841,11 +4826,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4841
4826
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: BewegingVerrijkerService }] });
4842
4827
 
4843
4828
  class RitdelenEffect {
4844
- constructor(actions$, store, sbmService, editorService) {
4829
+ constructor(actions$, store, sbmService, rijwegPlanEditorService) {
4845
4830
  this.actions$ = actions$;
4846
4831
  this.store = store;
4847
4832
  this.sbmService = sbmService;
4848
- this.editorService = editorService;
4833
+ this.rijwegPlanEditorService = rijwegPlanEditorService;
4849
4834
  this.updateRitDelen$ = createEffect(() => this.actions$.pipe(ofType(updateRitDelen), withLatestFrom(this.store), map(([actie, _storeState]) => {
4850
4835
  const nieuweRitDelen = actie.ritDelen.map(ritDeel => ritDeel.isZichtbaar() ?
4851
4836
  ritDeel.copyMetAlternatieveRoutes(this.sbmService.bepaalAlternativeRoutes(ritDeel.getRijweg())) : ritDeel);
@@ -4863,25 +4848,25 @@ class RitdelenEffect {
4863
4848
  return setRitdelenAfterUpdate(ritDelen);
4864
4849
  })));
4865
4850
  this.ritdeelInvoegen$ = createEffect(() => this.actions$.pipe(ofType(ritdeelInvoegen), withLatestFrom(this.store), map(([actie, storeState]) => {
4866
- const ritDelen = this.ritdeelInvoegenFunc(storeState.ritDelen, actie.nieuweRoute);
4851
+ const ritDelen = this.ritdeelInvoegenFunc(storeState.ritDelen, actie.nieuweRoute, this.rijwegPlanEditorService, this.sbmService);
4867
4852
  return setRitdelenAfterUpdate(ritDelen);
4868
4853
  })));
4869
4854
  }
4870
- ritdeelInvoegenFunc(ritDelen, nieuweRoute) {
4855
+ ritdeelInvoegenFunc(ritDelen, nieuweRoute, rijwegPlanEditorService, sbmService) {
4871
4856
  const origineelRitdeel = nieuweRoute.beginSeinOpRitdeel.ritdeel;
4872
4857
  const beginSein = nieuweRoute.beginSeinOpRitdeel.sein;
4873
- const rijwegplan = this.editorService.getRijwegplan(beginSein.getPPLG());
4858
+ const rijwegplan = rijwegPlanEditorService.getRijwegplan(beginSein.getPPLG());
4874
4859
  const dwangen = JsJavaUtil.listToArray(rijwegplan.getOnderliggendeDwangenTotEnVanSein(origineelRitdeel.getDwang(), beginSein));
4875
4860
  const isSamengesteldeRoute = dwangen[0] && dwangen[1];
4876
4861
  let newRitdeel1 = origineelRitdeel;
4877
4862
  if (isSamengesteldeRoute) {
4878
- newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen);
4863
+ newRitdeel1 = this.verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen);
4879
4864
  }
4880
- if (nieuweRoute.combinatieVoorEindsein?.isVrijeBaanRijweg()) {
4881
- this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute);
4865
+ if (nieuweRoute.combinatieVoorEindsein.isVrijeBaanRijweg()) {
4866
+ this.extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService);
4882
4867
  }
4883
4868
  else {
4884
- this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen);
4869
+ this.maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen);
4885
4870
  }
4886
4871
  if (isSamengesteldeRoute) {
4887
4872
  ritDelen.splice(ritDelen.indexOf(origineelRitdeel), 1);
@@ -4896,39 +4881,38 @@ class RitdelenEffect {
4896
4881
  }
4897
4882
  }
4898
4883
  }
4899
- verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, ritDelen) {
4884
+ verwerkSamengesteldeRoute(origineelRitdeel, rijwegplan, dwangen, sbmService, ritDelen) {
4900
4885
  // dwangen in 2 nieuwe ritdelen verwerken voor de knip
4901
4886
  const nieuweRijweg1 = rijwegplan.getRijwegVoorSeinen(dwangen[0].getRoute().getBeginSein(), dwangen[0].getRoute().getEindSein());
4902
4887
  const dwangInfo1 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg1, dwangen[0]);
4903
- const newRitdeel1 = new Ritdeel(dwangInfo1, [], undefined, undefined, undefined, []);
4888
+ const newRitdeel1 = new Ritdeel(dwangInfo1, [], null, null, null, []);
4904
4889
  // remove vrijbaan info uit ritdeel
4905
- newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = undefined;
4906
- newRitdeel1.vervolgSpoor = undefined;
4907
- newRitdeel1.bepaalTopologieElementen(this.sbmService);
4890
+ newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = null;
4891
+ newRitdeel1.vervolgSpoor = null;
4892
+ newRitdeel1.bepaalTopologieElementen(sbmService);
4908
4893
  this.insertRitdeel(ritDelen, origineelRitdeel, newRitdeel1);
4909
4894
  const nieuweRijweg2 = rijwegplan.getRijwegVoorSeinen(dwangen[1].getRoute().getBeginSein(), dwangen[1].getRoute().getEindSein());
4910
4895
  const dwangInfo2 = new RijwegplanRijwegDwangCombinatie(rijwegplan, nieuweRijweg2, dwangen[1]);
4911
- const newRitdeel2 = new Ritdeel(dwangInfo2, [], undefined, undefined, undefined, []);
4912
- newRitdeel2.bepaalTopologieElementen(this.sbmService);
4896
+ const newRitdeel2 = new Ritdeel(dwangInfo2, [], null, null, null, []);
4897
+ newRitdeel2.bepaalTopologieElementen(sbmService);
4913
4898
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel2);
4914
4899
  return newRitdeel1;
4915
4900
  }
4916
- extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute) {
4901
+ extendRitdeelMetVrijebaanInfo(newRitdeel1, nieuweRoute, sbmService) {
4917
4902
  newRitdeel1.vrijebaanRijwegplanRijwegDwangCombi = nieuweRoute.combinatieVoorEindsein;
4918
- const vbrwp = nieuweRoute.combinatieVoorEindsein?.rijwegplan;
4919
- newRitdeel1.vervolgSpoor = nieuweRoute.combinatieVoorEindsein ?
4920
- vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein?.rijweg) : undefined;
4921
- newRitdeel1.bepaalTopologieElementen(this.sbmService);
4903
+ const vbrwp = nieuweRoute.combinatieVoorEindsein.rijwegplan;
4904
+ newRitdeel1.vervolgSpoor = vbrwp.getVervolgSpoor(nieuweRoute.combinatieVoorEindsein.rijweg);
4905
+ newRitdeel1.bepaalTopologieElementen(sbmService);
4922
4906
  }
4923
- maakNieuwRitdeel(newRitdeel1, nieuweRoute, ritDelen) {
4907
+ maakNieuwRitdeel(newRitdeel1, nieuweRoute, sbmService, ritDelen) {
4924
4908
  let newRitdeel = this.createRitdeel(nieuweRoute);
4925
- const altRoutes = this.sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4909
+ const altRoutes = sbmService.bepaalAlternativeRoutes(newRitdeel.getRijweg());
4926
4910
  newRitdeel = newRitdeel.copyMetAlternatieveRoutes(altRoutes);
4927
- newRitdeel.bepaalTopologieElementen(this.sbmService);
4911
+ newRitdeel.bepaalTopologieElementen(sbmService);
4928
4912
  this.insertRitdeel(ritDelen, newRitdeel1, newRitdeel);
4929
4913
  }
4930
4914
  createRitdeel(nieuweRoute) {
4931
- return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], undefined, undefined, undefined, []);
4915
+ return new Ritdeel(nieuweRoute.combinatieVoorEindsein, [], null, null, null, []);
4932
4916
  }
4933
4917
  insertRitdeel(ritdelen, naRitdeelPositie, newRitdeel) {
4934
4918
  const idx = ritdelen.indexOf(naRitdeelPositie);
@@ -4979,24 +4963,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
4979
4963
  type: Injectable
4980
4964
  }], ctorParameters: () => [{ type: i1$2.Actions }, { type: i2$1.Store }, { type: SignaleringsBeeldManagerService }, { type: i4.SignaleringsbeeldSvgUtilityService }] });
4981
4965
 
4982
- class ProgressIndicator {
4983
- constructor(lowerText, upperText, iconClass) {
4984
- this.lowerText = '';
4985
- this.upperText = '';
4986
- this.iconClass = '';
4987
- this.lowerText = lowerText ?? this.lowerText;
4988
- this.upperText = upperText ?? this.upperText;
4989
- this.iconClass = iconClass ?? this.iconClass;
4990
- }
4991
- }
4992
-
4993
4966
  class NieuweRoute {
4994
4967
  constructor(beginSeinOpRitdeel, combinatieVoorEindsein) {
4995
4968
  this.beginSeinOpRitdeel = beginSeinOpRitdeel;
4996
4969
  this.combinatieVoorEindsein = combinatieVoorEindsein;
4997
4970
  }
4998
4971
  isValid() {
4999
- return !!this.combinatieVoorEindsein;
4972
+ return this.combinatieVoorEindsein !== null;
5000
4973
  }
5001
4974
  }
5002
4975
 
@@ -5062,7 +5035,7 @@ function addRitdeelActieFunc(ritDelen, { ritDeel, actie }) {
5062
5035
  const onIdsActionHandler = (action) => on(action, (_, { ids }) => ids);
5063
5036
  const createIdsReducer = (action) => createReducer([], onIdsActionHandler(action));
5064
5037
  const editableReducer = createReducer(true, on(setEditable, (_, { editable }) => editable));
5065
- const progressIndicatorReducer = createReducer({}, on(ShowProgress, () => ({ progressIndicator: new ProgressIndicator() })), on(ClearProgress, () => ({})));
5038
+ const progressIndicatorReducer = createReducer(undefined, on(ShowProgress, () => ({ progressIndicator: {} })), on(ClearProgress, () => undefined));
5066
5039
  const svgInfoReducer = createReducer([], on(SetSvgInfos, (_, { svgInfos }) => svgInfos));
5067
5040
  const debugReducer = createReducer(false, on(SetDebug, (_, { debug }) => debug));
5068
5041
  const ritSelectieIdsReducer = createIdsReducer(SetRitSelectieIds);
@@ -5088,10 +5061,12 @@ const ongeplandeActieReducer = createReducer(new ArrayMultimap(), on(SetOngeplan
5088
5061
  ongeplandeActie.puics.forEach(puic => ongeplandeActies.delete(puic, ongeplandeActie));
5089
5062
  return new ArrayMultimap(ongeplandeActies);
5090
5063
  }));
5091
- const ongeplandeActieSelectieIdsReducer = createReducer([], onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5064
+ const ongeplandeActieSelectieIdsReducer = createReducer([],
5065
+ // on(MstActions.SetOngeplandeActieSelectieIds, (_, { ids }) => ids),
5066
+ onIdsActionHandler(SetOngeplandeActieSelectieIds), on(AddOngeplandeActie, (ids, { ongeplandeActie }) => {
5092
5067
  ongeplandeActie.puics.filter(puic => !ids.includes(puic)).forEach(puic => ids.push(puic));
5093
5068
  return [...ids];
5094
- }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => ids.includes(id) ? ids.filter(_id => _id !== id) : ids));
5069
+ }), on(DeleteOngeplandeActieSelectieId, (ids, { id }) => [].concat(ids.includes(id) ? ids.filter(_id => _id !== id) : ids)));
5095
5070
  const gebrokenRitSelectieIdsReducer = createIdsReducer(SetGebrokenRitSelectieIds);
5096
5071
  const alternatievenSelectieIdsReducer = createIdsReducer(SetAlternatievenSelectieIds);
5097
5072
  const beginSeinSelectieIdsReducer = createIdsReducer(SetBeginSeinSelectieIds);
@@ -5100,15 +5075,16 @@ const alternatievenClickableIdsReducer = createIdsReducer(SetAlternatievenClicka
5100
5075
  const eindSeinenClickableIdsReducer = createIdsReducer(SetEindSeinenClickableIds);
5101
5076
  const connectorClickableIdsReducer = createIdsReducer(SetConnectorenClickableIds);
5102
5077
  const beginSeinRightClickableIdsReducer = createIdsReducer(SetBeginSeinRightClickableIds);
5103
- const nieuweRouteReducer = createReducer(undefined, on(SetNieuwRouteBeginSein, (_, { startSeinOpRitdeel }) => new NieuweRoute(startSeinOpRitdeel, undefined)), on(SetNieuwRouteEindSein, (nieuweRoute, { combinatieVoorEindsein }) => new NieuweRoute(nieuweRoute.beginSeinOpRitdeel, combinatieVoorEindsein)), on(ResetNieuweRoute, () => undefined));
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)));
5104
5079
  const signaleringsbeeldInfoDtosReducer = createReducer([], on(SetSignaleringsbeeldInfoDtos, (_, { dtos }) => dtos), on(UpdateSignaleringsbeeldInfoDtos, (_, { dtos }) => [...dtos]));
5105
5080
  const visibleSbInfoDtosReducer = createReducer([], on(SetVisibleSignaleringsbeeldInfoDtos, (_, { dtos }) => dtos), on(UpdateVisibleSignaleringsbeeldInfoDtos, (_, { dtos }) => [...dtos]));
5106
- const iaVersieReducer = createReducer({ versie: 'unknown', ingangsDatum: new Date() }, on(SetIaVersie, (_, { iaVersie }) => Object.assign({}, iaVersie, { versie: iaVersie.versie.toUpperCase() })));
5081
+ const iaVersieReducer = createReducer({}, on(SetIaVersie, (_, { iaVersie }) => Object.assign({}, iaVersie, { versie: iaVersie.versie.toUpperCase() })));
5107
5082
  const algemeneRitInfoDtoReducer = createReducer({}, on(SetAlgemeneRitInfo, (_, { algemeneRitInfoDto }) => algemeneRitInfoDto));
5108
5083
  const ongeplandeActiesBepaaldReducer = createReducer(false, on(SetOngeplandeActiesBepaald, (_, { bepaald }) => bepaald));
5109
- const nieuweBewegingReducer = createReducer([], on(UpdateRit, (_, { bewegingen }) => bewegingen));
5110
- const baseUrlReducer = createReducer('', on(SetBaseUrl, (_, { baseUrl }) => baseUrl));
5111
- const focusIdsReducer = createReducer([], on(focusOpIds, (_, { puics }) => puics));
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));
5112
5088
  const storeReducers = {
5113
5089
  ritDelen: ritdelenReducer,
5114
5090
  ritSelectieIds: ritSelectieIdsReducer,
@@ -5137,9 +5113,9 @@ const storeReducers = {
5137
5113
  nieuweBewegingen: nieuweBewegingReducer,
5138
5114
  baseUrl: baseUrlReducer,
5139
5115
  focusIds: focusIdsReducer,
5116
+ selectedRitdeelId: selectedRitdeelIdReducer
5140
5117
  };
5141
5118
 
5142
- // @ts-nocheck
5143
5119
  class ZoneUtil {
5144
5120
  constructor(ngZone) {
5145
5121
  this.ngZone = ngZone;
@@ -5202,7 +5178,6 @@ class MstViewerModule {
5202
5178
  constructor(service, zoneUtil) {
5203
5179
  this.service = service;
5204
5180
  // maak de EditorService toegankelijk voor GWT code
5205
- // @ts-ignore
5206
5181
  window['rpe'] = {
5207
5182
  EditorService: zoneUtil.proxy(service)
5208
5183
  };