@provoly/hypervisor 0.0.29 → 0.0.31

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 (68) hide show
  1. package/esm2022/public-api.mjs +3 -1
  2. package/esm2022/src/lib/event/detail/event-detail.component.mjs +1 -1
  3. package/esm2022/src/lib/event/list/event-column-order.component.mjs +23 -0
  4. package/esm2022/src/lib/event/list/event-list.component.mjs +19 -24
  5. package/esm2022/src/lib/event/procedure-association-modal/procedure-association-modal.component.mjs +60 -0
  6. package/esm2022/src/lib/event/public-api.mjs +3 -1
  7. package/esm2022/src/lib/general/column-order/column-order.component.mjs +4 -9
  8. package/esm2022/src/lib/general/i18n/en.translations.mjs +21 -3
  9. package/esm2022/src/lib/general/i18n/fr.translations.mjs +21 -3
  10. package/esm2022/src/lib/general/infiniteScroll.service.mjs +26 -0
  11. package/esm2022/src/lib/hypervisor.module.mjs +28 -30
  12. package/esm2022/src/lib/model/procedure/hyp-action.interface.mjs +2 -0
  13. package/esm2022/src/lib/model/procedure/hyp-procedure-model.interface.mjs +2 -0
  14. package/esm2022/src/lib/model/procedure/hyp-procedure.interface.mjs +6 -0
  15. package/esm2022/src/lib/model/public-api.mjs +4 -2
  16. package/esm2022/src/lib/procedure/list/procedure-column-order.component.mjs +24 -0
  17. package/esm2022/src/lib/procedure/list/procedure-list.component.mjs +57 -0
  18. package/esm2022/src/lib/procedure/public-api.mjs +3 -0
  19. package/esm2022/src/lib/store/event/event.actions.mjs +4 -2
  20. package/esm2022/src/lib/store/event/event.effects.mjs +5 -2
  21. package/esm2022/src/lib/store/event/event.reducer.mjs +1 -1
  22. package/esm2022/src/lib/store/event/event.selectors.mjs +3 -1
  23. package/esm2022/src/lib/store/event/event.service.mjs +7 -2
  24. package/esm2022/src/lib/store/procedure/procedure.actions.mjs +10 -0
  25. package/esm2022/src/lib/store/procedure/procedure.effects.mjs +25 -0
  26. package/esm2022/src/lib/store/procedure/procedure.reducer.mjs +37 -0
  27. package/esm2022/src/lib/store/procedure/procedure.selectors.mjs +17 -0
  28. package/esm2022/src/lib/store/procedure/procedure.service.mjs +49 -0
  29. package/esm2022/src/lib/store/procedure/public-api.mjs +6 -0
  30. package/fesm2022/provoly-hypervisor.mjs +376 -88
  31. package/fesm2022/provoly-hypervisor.mjs.map +1 -1
  32. package/package.json +1 -1
  33. package/public-api.d.ts +2 -0
  34. package/src/lib/event/detail/event-detail.component.d.ts +2 -2
  35. package/src/lib/event/list/event-column-order.component.d.ts +9 -0
  36. package/src/lib/event/list/event-list.component.d.ts +4 -5
  37. package/src/lib/event/procedure-association-modal/procedure-association-modal.component.d.ts +27 -0
  38. package/src/lib/event/public-api.d.ts +2 -0
  39. package/src/lib/general/column-order/column-order.component.d.ts +1 -1
  40. package/src/lib/general/i18n/en.translations.d.ts +18 -0
  41. package/src/lib/general/i18n/fr.translations.d.ts +18 -0
  42. package/src/lib/general/infiniteScroll.service.d.ts +13 -0
  43. package/src/lib/hypervisor.module.d.ts +25 -21
  44. package/src/lib/model/procedure/hyp-procedure-model.interface.d.ts +11 -0
  45. package/src/lib/model/{hyp-procedure.interface.d.ts → procedure/hyp-procedure.interface.d.ts} +1 -1
  46. package/src/lib/model/public-api.d.ts +3 -1
  47. package/src/lib/procedure/list/procedure-column-order.component.d.ts +9 -0
  48. package/src/lib/procedure/list/procedure-list.component.d.ts +30 -0
  49. package/src/lib/procedure/public-api.d.ts +2 -0
  50. package/src/lib/store/event/event.actions.d.ts +11 -1
  51. package/src/lib/store/event/event.effects.d.ts +8 -0
  52. package/src/lib/store/event/event.reducer.d.ts +1 -1
  53. package/src/lib/store/event/event.selectors.d.ts +1 -0
  54. package/src/lib/store/event/event.service.d.ts +2 -1
  55. package/src/lib/store/procedure/procedure.actions.d.ts +37 -0
  56. package/src/lib/store/procedure/procedure.effects.d.ts +21 -0
  57. package/src/lib/store/procedure/procedure.reducer.d.ts +15 -0
  58. package/src/lib/store/procedure/procedure.selectors.d.ts +15 -0
  59. package/src/lib/store/procedure/procedure.service.d.ts +17 -0
  60. package/src/lib/store/procedure/public-api.d.ts +5 -0
  61. package/styles/components/_index.scss +2 -0
  62. package/styles/components/_m-hvy-procedure-association-modal.scss +34 -0
  63. package/styles/components/_o-hvy-column-order.scss +1 -0
  64. package/styles/components/_o-hvy-events-table.scss +1 -4
  65. package/styles/components/_o-hvy-procedure-list.scss +15 -0
  66. package/esm2022/src/lib/model/hyp-action.interface.mjs +0 -2
  67. package/esm2022/src/lib/model/hyp-procedure.interface.mjs +0 -6
  68. /package/src/lib/model/{hyp-action.interface.d.ts → procedure/hyp-action.interface.d.ts} +0 -0
@@ -7,7 +7,7 @@ import { createAction, props, createReducer, on, createFeatureSelector, createSe
7
7
  import * as i3$1 from '@angular/cdk/overlay';
8
8
  import { OverlayConfig } from '@angular/cdk/overlay';
9
9
  import { TemplatePortal } from '@angular/cdk/portal';
10
- import { mergeMap, of, fromEvent, combineLatest, map, withLatestFrom, filter, auditTime, BehaviorSubject } from 'rxjs';
10
+ import { mergeMap, of, fromEvent, withLatestFrom, filter, auditTime, combineLatest, map as map$1, BehaviorSubject, Subject, debounceTime, switchMap, distinctUntilChanged } from 'rxjs';
11
11
  import * as i1 from '@angular/common/http';
12
12
  import { HttpParams } from '@angular/common/http';
13
13
  import * as i4 from '@provoly/dashboard/components/checkbox';
@@ -18,9 +18,9 @@ import * as i1$2 from '@angular/common';
18
18
  import { NgForOf, AsyncPipe, NgStyle, DatePipe, KeyValuePipe, JsonPipe } from '@angular/common';
19
19
  import * as i2 from '@angular/router';
20
20
  import { RouterLink } from '@angular/router';
21
- import * as i10 from '@provoly/dashboard/components/sinceDate';
21
+ import { map, startWith, catchError, debounceTime as debounceTime$1, mergeMap as mergeMap$1 } from 'rxjs/operators';
22
+ import * as i11 from '@provoly/dashboard/components/sinceDate';
22
23
  import { PrySinceDateModule } from '@provoly/dashboard/components/sinceDate';
23
- import { map as map$1, debounceTime, mergeMap as mergeMap$1, catchError } from 'rxjs/operators';
24
24
  import * as i1$3 from '@ngrx/effects';
25
25
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
26
26
 
@@ -60,7 +60,9 @@ const EventActions = {
60
60
  status: createAction('[Event] Close Event or Procedure', props()),
61
61
  statusSuccess: createAction('[Event] Close success'),
62
62
  statusFailure: createAction('[Event] Close failure', props()),
63
- sort: createAction('[Event] set log event sorting', props())
63
+ sort: createAction('[Event] set log event sorting', props()),
64
+ associateProcedure: createAction('[Event] Associate Procedure to Event', props()),
65
+ associateProcedureFailure: createAction('[Event] Associate Procedure to Event Failure', props())
64
66
  };
65
67
 
66
68
  const HypervisorActions = {
@@ -71,18 +73,18 @@ const hypFeatureKey = '@hvy/general';
71
73
  const hypInitialState = {
72
74
  url: '/api/hypervisor',
73
75
  };
74
- const internalReducer$2 = createReducer(hypInitialState, on(HypervisorActions.setUrl, (state, action) => ({
76
+ const internalReducer$3 = createReducer(hypInitialState, on(HypervisorActions.setUrl, (state, action) => ({
75
77
  ...state,
76
78
  url: action.url ?? state.url,
77
79
  })));
78
80
  function hypervisorReducer(state, action) {
79
- return internalReducer$2(state, action);
81
+ return internalReducer$3(state, action);
80
82
  }
81
83
 
82
- const feature$2 = createFeatureSelector(hypFeatureKey);
83
- const url = createSelector(feature$2, (state) => state.url);
84
+ const feature$3 = createFeatureSelector(hypFeatureKey);
85
+ const url = createSelector(feature$3, (state) => state.url);
84
86
  const HypSelectors = {
85
- feature: feature$2,
87
+ feature: feature$3,
86
88
  url
87
89
  };
88
90
 
@@ -542,7 +544,7 @@ const eventInitialState = {
542
544
  selectedIds: [],
543
545
  details: {}
544
546
  };
545
- const internalReducer$1 = createReducer(eventInitialState, on(EventActions.load, (state, action) => ({
547
+ const internalReducer$2 = createReducer(eventInitialState, on(EventActions.load, (state, action) => ({
546
548
  ...state,
547
549
  loading: true
548
550
  })), on(EventActions.loadSuccess, (state, { events, startingFrom }) => {
@@ -579,77 +581,107 @@ const internalReducer$1 = createReducer(eventInitialState, on(EventActions.load,
579
581
  filters: { ...state.filters, [filterSet]: filters }
580
582
  })));
581
583
  function eventReducer(state, action) {
582
- return internalReducer$1(state, action);
584
+ return internalReducer$2(state, action);
583
585
  }
584
586
 
585
- const feature$1 = createFeatureSelector(eventFeatureKey);
586
- const events = createSelector(feature$1, (state) => state.events);
587
- const noMoreEvents = createSelector(feature$1, (state) => state.noMoreEvents);
588
- const selectedIds = createSelector(feature$1, (state) => state.selectedIds);
589
- const loading$1 = createSelector(feature$1, (state) => state.loading);
590
- const filters = createSelector(feature$1, (state) => state.filters);
591
- const details = createSelector(feature$1, (state) => state.details);
592
- const sort = createSelector(feature$1, (state) => state.sort);
587
+ const feature$2 = createFeatureSelector(eventFeatureKey);
588
+ const events = createSelector(feature$2, (state) => state.events);
589
+ const noMoreEvents = createSelector(feature$2, (state) => state.noMoreEvents);
590
+ const selectedIds = createSelector(feature$2, (state) => state.selectedIds);
591
+ const selectedEvents = createSelector(feature$2, (state) => state.events.filter((event) => state.selectedIds.includes(event.id)));
592
+ const loading$2 = createSelector(feature$2, (state) => state.loading);
593
+ const filters = createSelector(feature$2, (state) => state.filters);
594
+ const details = createSelector(feature$2, (state) => state.details);
595
+ const sort$1 = createSelector(feature$2, (state) => state.sort);
593
596
  const EventSelectors = {
594
- feature: feature$1,
597
+ feature: feature$2,
595
598
  events,
596
599
  selectedIds,
597
- loading: loading$1,
600
+ selectedEvents,
601
+ loading: loading$2,
598
602
  filters,
599
603
  details,
600
604
  noMoreEvents,
601
- sort
605
+ sort: sort$1
602
606
  };
603
607
 
608
+ const SCROLL_PX_TO_TRIGGER_FETCH_PAGE = { value: 200 };
609
+ class InfiniteScrollService {
610
+ constructor(store) {
611
+ this.store = store;
612
+ this.isEndOfPage = (scrollContainer, noMoreSelector) => {
613
+ return fromEvent((scrollContainer), 'scroll').pipe(map((e) => {
614
+ const target = e.currentTarget;
615
+ return target.scrollHeight - target.offsetHeight - target.scrollTop;
616
+ }), withLatestFrom(this.store.select(noMoreSelector)), filter(([remaningScroll, noMore]) => !noMore && remaningScroll < SCROLL_PX_TO_TRIGGER_FETCH_PAGE.value), auditTime(200));
617
+ };
618
+ }
619
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: InfiniteScrollService, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
620
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: InfiniteScrollService, providedIn: 'root' }); }
621
+ }
622
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: InfiniteScrollService, decorators: [{
623
+ type: Injectable,
624
+ args: [{
625
+ providedIn: 'root'
626
+ }]
627
+ }], ctorParameters: () => [{ type: i1$1.Store }] });
628
+
604
629
  class ColumnOrderComponent extends SubscriptionnerDirective {
605
630
  constructor(store) {
606
631
  super();
607
632
  this.store = store;
608
633
  this.field = 'no-field-defined';
609
- this.subscriptions.add(this.store.select(EventSelectors.sort).subscribe(sort => this.sortValue = sort));
610
- }
611
- sort(order) {
612
- this.store.dispatch(EventActions.sort({ field: this.field, order }));
613
634
  }
635
+ sort(order) { }
614
636
  isActive(order) {
615
637
  return this.field === this.sortValue?.field && order === this.sortValue.order;
616
638
  }
617
639
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ColumnOrderComponent, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
618
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: ColumnOrderComponent, selector: "hvy-column-order", inputs: { field: "field" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-column-order\">\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }] }); }
640
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: ColumnOrderComponent, selector: "hvy-column-order", inputs: { field: "field" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-column-order\">\n <div class=\"o-hvy-column-order__content\">\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }] }); }
619
641
  }
620
642
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ColumnOrderComponent, decorators: [{
621
643
  type: Component,
622
- args: [{ selector: 'hvy-column-order', template: "<div class=\"o-hvy-column-order\">\n <div>\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n" }]
644
+ args: [{ selector: 'hvy-column-order', template: "<div class=\"o-hvy-column-order\">\n <div class=\"o-hvy-column-order__content\">\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n" }]
623
645
  }], ctorParameters: () => [{ type: i1$1.Store }], propDecorators: { field: [{
624
646
  type: Input
625
647
  }] } });
626
648
 
649
+ class EventColumnOrderComponent extends ColumnOrderComponent {
650
+ constructor(store) {
651
+ super(store);
652
+ this.subscriptions.add(this.store.select(EventSelectors.sort).subscribe(sort => this.sortValue = sort));
653
+ }
654
+ sort(order) {
655
+ this.store.dispatch(EventActions.sort({ field: this.field, order }));
656
+ }
657
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventColumnOrderComponent, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
658
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: EventColumnOrderComponent, selector: "hvy-event-column-order", usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-column-order\">\n <div class=\"o-hvy-column-order__content\">\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }] }); }
659
+ }
660
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventColumnOrderComponent, decorators: [{
661
+ type: Component,
662
+ args: [{ selector: 'hvy-event-column-order', template: "<div class=\"o-hvy-column-order\">\n <div class=\"o-hvy-column-order__content\">\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n" }]
663
+ }], ctorParameters: () => [{ type: i1$1.Store }] });
664
+
627
665
  const EVENT_LINK = {
628
666
  fn: (event, store) => ['./', event.id]
629
667
  };
630
- const SCROLL_PX_TO_TRIGGER_FETCH_PAGE = { value: 200 };
631
668
  class EventListComponent extends SubscriptionnerDirective {
632
- constructor(store, el, router) {
669
+ constructor(store, el, router, scroll) {
633
670
  super();
634
671
  this.store = store;
635
672
  this.el = el;
636
673
  this.router = router;
674
+ this.scroll = scroll;
637
675
  this.EVENT_LINK = EVENT_LINK;
638
676
  this._store = this.store;
639
677
  this._inhibate = true;
640
678
  this.store.dispatch(EventActions.load({}));
641
679
  this.events$ = this.store.select(EventSelectors.events);
642
680
  this.selectedIds$ = this.store.select(EventSelectors.selectedIds);
643
- this.allSelected$ = combineLatest([this.events$, this.selectedIds$]).pipe(map(([events, selectedIds]) => events.filter((ev) => !selectedIds.includes(ev.id)).length === 0));
681
+ this.allSelected$ = combineLatest([this.events$, this.selectedIds$]).pipe(map$1(([events, selectedIds]) => events.filter((ev) => !selectedIds.includes(ev.id)).length === 0));
644
682
  }
645
683
  ngAfterViewInit() {
646
- this.subscriptions.add(fromEvent(this.el.nativeElement, 'scroll')
647
- .pipe(
648
- // Are we close to end
649
- map((e) => {
650
- const target = e.currentTarget;
651
- return target.scrollHeight - target.offsetHeight - target.scrollTop;
652
- }), withLatestFrom(this.store.select(EventSelectors.noMoreEvents)), filter(([remaningScroll, noMore]) => !noMore && remaningScroll < SCROLL_PX_TO_TRIGGER_FETCH_PAGE.value), auditTime(200))
684
+ this.subscriptions.add(this.scroll.isEndOfPage(this.el.nativeElement, EventSelectors.noMoreEvents)
653
685
  .subscribe(() => {
654
686
  this.store.dispatch(EventActions.load({ next: true }));
655
687
  }));
@@ -673,16 +705,16 @@ class EventListComponent extends SubscriptionnerDirective {
673
705
  this._inhibate = true;
674
706
  setTimeout(() => (this._inhibate = false), 100);
675
707
  }
676
- goto(event) {
708
+ goTo(event) {
677
709
  return this.router.navigate(this.EVENT_LINK.fn(event, this.store));
678
710
  }
679
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventListComponent, deps: [{ token: i1$1.Store }, { token: i0.ElementRef }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
680
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: EventListComponent, selector: "hvy-event-list", usesInheritance: true, ngImport: i0, template: "<table class=\"o-hvy-events-table\">\n <thead>\n <tr class=\"o-hvy-events-table__header\">\n <th>\n <pry-checkbox [ngModel]=\"allSelected$|async\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th>{{ '@hvy.event.criticality.name' | i18n }}</th>\n <th>{{ '@hvy.event.name' | i18n }}</th>\n <th>{{ '@hvy.event.category.name' | i18n }}</th>\n <th>{{ '@hvy.event.address' | i18n }}</th>\n <th>\n <hvy-column-order field=\"creationDate\">{{ '@hvy.event.creationDate' | i18n }}</hvy-column-order>\n </th>\n <th>\n <hvy-column-order field=\"lastModificationDate\">{{ '@hvy.event.lastModificationDate' | i18n }}</hvy-column-order>\n </th>\n <th>\n <hvy-column-order field=\"status\">{{ '@hvy.event.status.name' | i18n }}</hvy-column-order>\n </th>\n <th>\n <hvy-column-order field=\"procedureProgress\">{{ '@hvy.procedure.progress' | i18n }}</hvy-column-order>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (event of events$|async; track event.id) {\n <tr class=\"o-hvy-events-table__line\" (click)=\"goto(event)\">\n <td class=\"o-hvy-events-table__line__cell\">\n <pry-checkbox [ngModel]=\"(selectedIds$|async)!.includes(event.id)\"\n (click)=\"select(event, $event)\"></pry-checkbox>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <div class=\"o-hvy-events-table__line__cell__name__main\">{{ event.name }}</div>\n <div\n class=\"o-hvy-events-table__line__cell__name__sub\">{{ event.equipment?.name ? event.equipment?.name : '' }}\n </div>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">{{ '@hvy.event.category.' + event.category | i18n }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.address }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.creationDate| sinceDate: { onlyLocale: true } }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.lastModificationDate | sinceDate: { onlyLocale: true } }}\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-status-display [event]=\"event\"></hvy-status-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n {{ event.procedureProgress }} %\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <a [routerLink]=\"EVENT_LINK.fn(event, _store)\">\n > {{ '@hvy.action.consult' | i18n }} @if (event.linkedEvents > 1) {\n ({{ event.linkedEvents }})\n }\n </a>\n </td>\n </tr>\n } @empty {\n <tr>\n <td class=\"o-hvy-events-table__empty\" colspan=\"50\">\n <div>{{ '@hvy.event.log.empty' | i18n }}.</div>\n <div>\n <ng-content></ng-content>\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: i4.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: IconDisplayComponent, selector: "hvy-icon-display", inputs: ["event"] }, { kind: "component", type: StatusDisplayComponent, selector: "hvy-status-display", inputs: ["event", "modifiable"], outputs: ["modified"] }, { kind: "component", type: ColumnOrderComponent, selector: "hvy-column-order", inputs: ["field"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }, { kind: "pipe", type: i10.PrySinceDatePipe, name: "sinceDate" }] }); }
711
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventListComponent, deps: [{ token: i1$1.Store }, { token: i0.ElementRef }, { token: i2.Router }, { token: InfiniteScrollService }], target: i0.ɵɵFactoryTarget.Component }); }
712
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: EventListComponent, selector: "hvy-event-list", usesInheritance: true, ngImport: i0, template: "<table class=\"o-hvy-events-table\">\n <thead>\n <tr class=\"o-hvy-events-table__header\">\n <th class=\"-checkbox\">\n <pry-checkbox [ngModel]=\"allSelected$|async\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th>{{ '@hvy.event.criticality.name' | i18n }}</th>\n <th>{{ '@hvy.event.name' | i18n }}</th>\n <th>{{ '@hvy.event.category.name' | i18n }}</th>\n <th>{{ '@hvy.event.address' | i18n }}</th>\n <th>\n <hvy-event-column-order field=\"creationDate\">{{ '@hvy.event.creationDate' | i18n }}</hvy-event-column-order>\n </th>\n <th>\n <hvy-event-column-order field=\"lastModificationDate\">{{ '@hvy.event.lastModificationDate' | i18n }}</hvy-event-column-order>\n </th>\n <th>\n <hvy-event-column-order field=\"status\">{{ '@hvy.event.status.name' | i18n }}</hvy-event-column-order>\n </th>\n <th>\n <hvy-event-column-order field=\"procedureProgress\">{{ '@hvy.procedure.progress' | i18n }}</hvy-event-column-order>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (event of events$|async; track event.id) {\n <tr class=\"o-hvy-events-table__line\" (click)=\"goTo(event)\">\n <td class=\"o-hvy-events-table__line__cell\">\n <pry-checkbox [ngModel]=\"(selectedIds$|async)!.includes(event.id)\"\n (click)=\"select(event, $event)\"></pry-checkbox>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <div class=\"o-hvy-events-table__line__cell__name__main\">{{ event.name }}</div>\n <div\n class=\"o-hvy-events-table__line__cell__name__sub\">{{ event.equipment?.name ? event.equipment?.name : '' }}\n </div>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">{{ '@hvy.event.category.' + event.category | i18n }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.address }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.creationDate| sinceDate: { onlyLocale: true } }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.lastModificationDate | sinceDate: { onlyLocale: true } }}\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-status-display [event]=\"event\"></hvy-status-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n {{ event.procedureProgress }} %\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <a [routerLink]=\"EVENT_LINK.fn(event, _store)\">\n > {{ '@hvy.action.consult' | i18n }} @if (event.linkedEvents > 1) {\n ({{ event.linkedEvents }})\n }\n </a>\n </td>\n </tr>\n } @empty {\n <tr>\n <td class=\"o-hvy-events-table__empty\" colspan=\"50\">\n <div>{{ '@hvy.event.log.empty' | i18n }}.</div>\n <div>\n <ng-content></ng-content>\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: i4.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: EventColumnOrderComponent, selector: "hvy-event-column-order" }, { kind: "component", type: IconDisplayComponent, selector: "hvy-icon-display", inputs: ["event"] }, { kind: "component", type: StatusDisplayComponent, selector: "hvy-status-display", inputs: ["event", "modifiable"], outputs: ["modified"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }, { kind: "pipe", type: i11.PrySinceDatePipe, name: "sinceDate" }] }); }
681
713
  }
682
714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventListComponent, decorators: [{
683
715
  type: Component,
684
- args: [{ selector: 'hvy-event-list', template: "<table class=\"o-hvy-events-table\">\n <thead>\n <tr class=\"o-hvy-events-table__header\">\n <th>\n <pry-checkbox [ngModel]=\"allSelected$|async\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th>{{ '@hvy.event.criticality.name' | i18n }}</th>\n <th>{{ '@hvy.event.name' | i18n }}</th>\n <th>{{ '@hvy.event.category.name' | i18n }}</th>\n <th>{{ '@hvy.event.address' | i18n }}</th>\n <th>\n <hvy-column-order field=\"creationDate\">{{ '@hvy.event.creationDate' | i18n }}</hvy-column-order>\n </th>\n <th>\n <hvy-column-order field=\"lastModificationDate\">{{ '@hvy.event.lastModificationDate' | i18n }}</hvy-column-order>\n </th>\n <th>\n <hvy-column-order field=\"status\">{{ '@hvy.event.status.name' | i18n }}</hvy-column-order>\n </th>\n <th>\n <hvy-column-order field=\"procedureProgress\">{{ '@hvy.procedure.progress' | i18n }}</hvy-column-order>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (event of events$|async; track event.id) {\n <tr class=\"o-hvy-events-table__line\" (click)=\"goto(event)\">\n <td class=\"o-hvy-events-table__line__cell\">\n <pry-checkbox [ngModel]=\"(selectedIds$|async)!.includes(event.id)\"\n (click)=\"select(event, $event)\"></pry-checkbox>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <div class=\"o-hvy-events-table__line__cell__name__main\">{{ event.name }}</div>\n <div\n class=\"o-hvy-events-table__line__cell__name__sub\">{{ event.equipment?.name ? event.equipment?.name : '' }}\n </div>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">{{ '@hvy.event.category.' + event.category | i18n }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.address }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.creationDate| sinceDate: { onlyLocale: true } }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.lastModificationDate | sinceDate: { onlyLocale: true } }}\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-status-display [event]=\"event\"></hvy-status-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n {{ event.procedureProgress }} %\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <a [routerLink]=\"EVENT_LINK.fn(event, _store)\">\n > {{ '@hvy.action.consult' | i18n }} @if (event.linkedEvents > 1) {\n ({{ event.linkedEvents }})\n }\n </a>\n </td>\n </tr>\n } @empty {\n <tr>\n <td class=\"o-hvy-events-table__empty\" colspan=\"50\">\n <div>{{ '@hvy.event.log.empty' | i18n }}.</div>\n <div>\n <ng-content></ng-content>\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n" }]
685
- }], ctorParameters: () => [{ type: i1$1.Store }, { type: i0.ElementRef }, { type: i2.Router }] });
716
+ args: [{ selector: 'hvy-event-list', template: "<table class=\"o-hvy-events-table\">\n <thead>\n <tr class=\"o-hvy-events-table__header\">\n <th class=\"-checkbox\">\n <pry-checkbox [ngModel]=\"allSelected$|async\" (ngModelChange)=\"selectAll($event)\"></pry-checkbox>\n </th>\n <th>{{ '@hvy.event.criticality.name' | i18n }}</th>\n <th>{{ '@hvy.event.name' | i18n }}</th>\n <th>{{ '@hvy.event.category.name' | i18n }}</th>\n <th>{{ '@hvy.event.address' | i18n }}</th>\n <th>\n <hvy-event-column-order field=\"creationDate\">{{ '@hvy.event.creationDate' | i18n }}</hvy-event-column-order>\n </th>\n <th>\n <hvy-event-column-order field=\"lastModificationDate\">{{ '@hvy.event.lastModificationDate' | i18n }}</hvy-event-column-order>\n </th>\n <th>\n <hvy-event-column-order field=\"status\">{{ '@hvy.event.status.name' | i18n }}</hvy-event-column-order>\n </th>\n <th>\n <hvy-event-column-order field=\"procedureProgress\">{{ '@hvy.procedure.progress' | i18n }}</hvy-event-column-order>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (event of events$|async; track event.id) {\n <tr class=\"o-hvy-events-table__line\" (click)=\"goTo(event)\">\n <td class=\"o-hvy-events-table__line__cell\">\n <pry-checkbox [ngModel]=\"(selectedIds$|async)!.includes(event.id)\"\n (click)=\"select(event, $event)\"></pry-checkbox>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <div class=\"o-hvy-events-table__line__cell__name__main\">{{ event.name }}</div>\n <div\n class=\"o-hvy-events-table__line__cell__name__sub\">{{ event.equipment?.name ? event.equipment?.name : '' }}\n </div>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">{{ '@hvy.event.category.' + event.category | i18n }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.address }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.creationDate| sinceDate: { onlyLocale: true } }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ event.lastModificationDate | sinceDate: { onlyLocale: true } }}\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n <hvy-status-display [event]=\"event\"></hvy-status-display>\n </td>\n <td class=\"o-hvy-events-table__line__cell -centered\">\n {{ event.procedureProgress }} %\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <a [routerLink]=\"EVENT_LINK.fn(event, _store)\">\n > {{ '@hvy.action.consult' | i18n }} @if (event.linkedEvents > 1) {\n ({{ event.linkedEvents }})\n }\n </a>\n </td>\n </tr>\n } @empty {\n <tr>\n <td class=\"o-hvy-events-table__empty\" colspan=\"50\">\n <div>{{ '@hvy.event.log.empty' | i18n }}.</div>\n <div>\n <ng-content></ng-content>\n </div>\n </td>\n </tr>\n }\n </tbody>\n</table>\n" }]
717
+ }], ctorParameters: () => [{ type: i1$1.Store }, { type: i0.ElementRef }, { type: i2.Router }, { type: InfiniteScrollService }] });
686
718
 
687
719
  class EventFiltersComponent extends SubscriptionnerDirective {
688
720
  constructor(store) {
@@ -902,6 +934,152 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
902
934
  args: ['template', { read: TemplateRef }]
903
935
  }] } });
904
936
 
937
+ const ProcedureActions = {
938
+ load: createAction('[Procedure] Load Procedures', props()),
939
+ loadSuccess: createAction('[Procedure] (bus) Load Procedure Success', props()),
940
+ loadFailure: createAction('[Procedure] Load Procedures Failure', props()),
941
+ sort: createAction('[Procedure] Set Procedure List Sorting', props()),
942
+ search: createAction('[Procedure] Set Search Query Value', props()),
943
+ setCategory: createAction('[Procedure] Set Category Value', props())
944
+ };
945
+
946
+ const procedureFeatureKey = '@hvy/procedure';
947
+ const procedureInitialState = {
948
+ procedures: [],
949
+ noMoreProcedures: false,
950
+ loading: false,
951
+ };
952
+ const internalReducer$1 = createReducer(procedureInitialState, on(ProcedureActions.load, (state) => ({
953
+ ...state,
954
+ loading: true
955
+ })), on(ProcedureActions.loadSuccess, (state, { procedures, startingFrom }) => {
956
+ return {
957
+ ...state,
958
+ loading: false,
959
+ noMoreProcedures: procedures.length < 20,
960
+ procedures: [...state.procedures.slice(0, startingFrom), ...procedures]
961
+ };
962
+ }), on(ProcedureActions.loadFailure, (state) => ({
963
+ ...state,
964
+ loading: false,
965
+ procedures: []
966
+ })), on(ProcedureActions.search, (state, { search }) => ({
967
+ ...state,
968
+ events: [],
969
+ noMoreProcedures: false,
970
+ search
971
+ })), on(ProcedureActions.sort, (state, { field, order }) => ({
972
+ ...state,
973
+ events: [],
974
+ noMoreProcedures: false,
975
+ sort: { field, order }
976
+ })));
977
+ function procedureReducer(state, action) {
978
+ return internalReducer$1(state, action);
979
+ }
980
+
981
+ const feature$1 = createFeatureSelector(procedureFeatureKey);
982
+ const procedures = createSelector(feature$1, (state) => state.procedures);
983
+ const noMoreProcedures = createSelector(feature$1, (state) => state.noMoreProcedures);
984
+ const loading$1 = createSelector(feature$1, (state) => state.loading);
985
+ const search = createSelector(feature$1, (state) => state.search);
986
+ const sort = createSelector(feature$1, (state) => state.sort);
987
+ const ProcedureSelectors = {
988
+ feature: feature$1,
989
+ procedures,
990
+ loading: loading$1,
991
+ noMoreProcedures,
992
+ search,
993
+ sort
994
+ };
995
+
996
+ const PROCEDURE_PAGE_SIZE_FETCH = { value: 20 };
997
+ class ProcedureService {
998
+ constructor(httpClient, store) {
999
+ this.httpClient = httpClient;
1000
+ this.store = store;
1001
+ }
1002
+ list(startWith = 0, pageSize = PROCEDURE_PAGE_SIZE_FETCH.value) {
1003
+ return this.store.select(HypSelectors.url).pipe(withLatestFrom(this.store.select(ProcedureSelectors.sort), this.store.select(ProcedureSelectors.search)), mergeMap(([url, sort, search]) => {
1004
+ let params = new HttpParams();
1005
+ params = params.set('page', startWith / pageSize + 1);
1006
+ if (search)
1007
+ params = params.set('search', search);
1008
+ if (sort)
1009
+ params = params.set('sort', sort.field).set('order', sort.order);
1010
+ return this.httpClient.get(encodeURI(`${url}/procedures/catalog`), { params });
1011
+ }));
1012
+ }
1013
+ getTop10ByUsage(domain, nameSearch) {
1014
+ return this.store.select(HypSelectors.url).pipe(mergeMap((url) => {
1015
+ let params = new HttpParams();
1016
+ params = params
1017
+ .set('sort', 'useCount')
1018
+ .set('order', 'desc')
1019
+ .set('pageSize', '10');
1020
+ if (nameSearch)
1021
+ params = params.set('name', nameSearch);
1022
+ if (domain)
1023
+ params = params.set('domain', domain);
1024
+ return this.httpClient.get(encodeURI(`${url}/procedures/catalog`), { params });
1025
+ }));
1026
+ }
1027
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureService, deps: [{ token: i1.HttpClient }, { token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
1028
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureService, providedIn: 'root' }); }
1029
+ }
1030
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureService, decorators: [{
1031
+ type: Injectable,
1032
+ args: [{
1033
+ providedIn: 'root'
1034
+ }]
1035
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$1.Store }] });
1036
+
1037
+ class ProcedureAssociationModalComponent extends SubscriptionnerDirective {
1038
+ constructor(store, procedureService, dialog) {
1039
+ super();
1040
+ this.store = store;
1041
+ this.procedureService = procedureService;
1042
+ this.dialog = dialog;
1043
+ this.onDomainSelect$ = new Subject;
1044
+ this.onProcedureSearch$ = new Subject;
1045
+ this.DOMAINS = DOMAINS.values;
1046
+ this.selectedEvents$ = this.store.select(EventSelectors.selectedEvents);
1047
+ this.procedures$ = combineLatest([
1048
+ this.onDomainSelect$.pipe(startWith()),
1049
+ this.onProcedureSearch$.pipe(startWith(), debounceTime(500)),
1050
+ ]).pipe(switchMap(([_, __]) => {
1051
+ const search = typeof this.procedureSelectValue === 'string' && this.procedureSelectValue.length > 2 ? this.procedureSelectValue : undefined;
1052
+ return this.procedureService.getTop10ByUsage(this.selectedDomain, search);
1053
+ }), catchError(() => {
1054
+ throw new Error('Procedure catalog not implemented yet');
1055
+ }));
1056
+ }
1057
+ onDomainChange() {
1058
+ this.onDomainSelect$.next();
1059
+ this.procedureSelectValue = undefined;
1060
+ }
1061
+ selectedProcedureChange($event) {
1062
+ this.procedureSelectValue = $event;
1063
+ this.onProcedureSearch$.next();
1064
+ }
1065
+ associateProcedure() {
1066
+ this.store.dispatch(EventActions.associateProcedure({ procedureId: this.procedureSelectValue.id }));
1067
+ this.closeModal();
1068
+ }
1069
+ isProcedureSelected() {
1070
+ return typeof this.procedureSelectValue === 'object';
1071
+ }
1072
+ closeModal() {
1073
+ this.dialog.close();
1074
+ }
1075
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureAssociationModalComponent, deps: [{ token: i1$1.Store }, { token: ProcedureService }, { token: i3.PryDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
1076
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: ProcedureAssociationModalComponent, selector: "hvy-procedure-association-modal", usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-association-modal u-display-flex -column -align-center\">\n <h3>{{ '@hvy.associationModal.title' | i18n }}</h3>\n <span class=\"o-hvy-association-modal__description\">{{ '@hvy.associationModal.description' | i18n }}</span>\n <div class=\"o-hvy-association-modal__content u-display-flex -justify-space-between\">\n @if (selectedEvents$ | async; as selectedEvents) {\n <div>\n <label>\u00C9v\u00E9nements li\u00E9s ({{ selectedEvents.length }}) :</label>\n <ul class=\"o-hvy-association-modal__events\">\n @for (event of selectedEvents; track event.id) {\n <li class=\"o-hvy-association-modal__event u-display-flex -align-center\">\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n <div class=\"o-hvy-association-modal__event-detail u-display-flex -column\">\n <span class=\"o-hvy-association-modal__event-name\">{{ event.name }}</span>\n @if (event.equipment) {\n <span class=\"o-hvy-association-modal__equipment-name\">{{ event.equipment.name }}</span>\n }\n </div>\n </li>\n }\n </ul>\n </div>\n }\n <div class=\"o-hvy-association-modal__form\">\n <div class=\"m-form-label-field\">\n <label>{{ '@hvy.associationModal.categoryFilter' | i18n }}</label>\n <pry-select\n [items]=\"DOMAINS\"\n [(ngModel)]=\"selectedDomain\"\n (ngModelChange)=\"onDomainChange()\"\n [placeholder]=\"'@hvy.associationModal.domainPlaceholder' | i18n\"\n i18nPrefix=\"@hvy.event.domain.\"\n id=\"category-filter\"></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"procedure-filter\">{{ '@hvy.associationModal.searchProcedure' | i18n }}<span class=\"text-error\">*</span> : </label>\n <pry-select\n [items]=\"procedures$ | async\"\n bindLabel=\"name\"\n [(ngModel)]=\"procedureSelectValue\"\n (ngModelChange)=\"selectedProcedureChange($event)\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n [placeholder]=\"'@hvy.associationModal.procedurePlaceholder' | i18n\"\n id=\"procedure-filter\"></pry-select>\n </div>\n </div>\n </div>\n <div class=\"o-hvy-association-modal__buttons u-display-flex -justify-center\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"!isProcedureSelected()\" (click)=\"associateProcedure()\">{{ '@hvy.action.validate' | i18n }}</button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeModal()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: IconDisplayComponent, selector: "hvy-icon-display", inputs: ["event"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
1077
+ }
1078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureAssociationModalComponent, decorators: [{
1079
+ type: Component,
1080
+ args: [{ selector: 'hvy-procedure-association-modal', template: "<div class=\"o-hvy-association-modal u-display-flex -column -align-center\">\n <h3>{{ '@hvy.associationModal.title' | i18n }}</h3>\n <span class=\"o-hvy-association-modal__description\">{{ '@hvy.associationModal.description' | i18n }}</span>\n <div class=\"o-hvy-association-modal__content u-display-flex -justify-space-between\">\n @if (selectedEvents$ | async; as selectedEvents) {\n <div>\n <label>\u00C9v\u00E9nements li\u00E9s ({{ selectedEvents.length }}) :</label>\n <ul class=\"o-hvy-association-modal__events\">\n @for (event of selectedEvents; track event.id) {\n <li class=\"o-hvy-association-modal__event u-display-flex -align-center\">\n <hvy-icon-display [event]=\"event\"></hvy-icon-display>\n <div class=\"o-hvy-association-modal__event-detail u-display-flex -column\">\n <span class=\"o-hvy-association-modal__event-name\">{{ event.name }}</span>\n @if (event.equipment) {\n <span class=\"o-hvy-association-modal__equipment-name\">{{ event.equipment.name }}</span>\n }\n </div>\n </li>\n }\n </ul>\n </div>\n }\n <div class=\"o-hvy-association-modal__form\">\n <div class=\"m-form-label-field\">\n <label>{{ '@hvy.associationModal.categoryFilter' | i18n }}</label>\n <pry-select\n [items]=\"DOMAINS\"\n [(ngModel)]=\"selectedDomain\"\n (ngModelChange)=\"onDomainChange()\"\n [placeholder]=\"'@hvy.associationModal.domainPlaceholder' | i18n\"\n i18nPrefix=\"@hvy.event.domain.\"\n id=\"category-filter\"></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"procedure-filter\">{{ '@hvy.associationModal.searchProcedure' | i18n }}<span class=\"text-error\">*</span> : </label>\n <pry-select\n [items]=\"procedures$ | async\"\n bindLabel=\"name\"\n [(ngModel)]=\"procedureSelectValue\"\n (ngModelChange)=\"selectedProcedureChange($event)\"\n [autocomplete]=\"true\"\n [externalAutocompleteService]=\"true\"\n [placeholder]=\"'@hvy.associationModal.procedurePlaceholder' | i18n\"\n id=\"procedure-filter\"></pry-select>\n </div>\n </div>\n </div>\n <div class=\"o-hvy-association-modal__buttons u-display-flex -justify-center\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"!isProcedureSelected()\" (click)=\"associateProcedure()\">{{ '@hvy.action.validate' | i18n }}</button>\n <button class=\"a-btn a-btn--secondary\" (click)=\"closeModal()\">{{ '@hvy.action.cancel' | i18n }}</button>\n </div>\n</div>\n" }]
1081
+ }], ctorParameters: () => [{ type: i1$1.Store }, { type: ProcedureService }, { type: i3.PryDialogRef }] });
1082
+
905
1083
  const EventSummaryActions = {
906
1084
  load: createAction('[Event] Load Summaries'),
907
1085
  loadSuccess: createAction('[Event Api] Load Summaries Success', props()),
@@ -1009,6 +1187,11 @@ class EventService {
1009
1187
  return this.httpClient.put(encodeURI(`${url}/procedures/id/${procedure.id}/close`), { status, comment });
1010
1188
  }));
1011
1189
  }
1190
+ associateProcedure(procedureId) {
1191
+ return this.store.select(HypSelectors.url).pipe(withLatestFrom(this.store.select(EventSelectors.selectedIds)), mergeMap(([url, selectedIds]) => {
1192
+ return this.httpClient.put(encodeURI(`${url}/procedures/catalog/id/${procedureId}`), { id: procedureId, events: selectedIds });
1193
+ }));
1194
+ }
1012
1195
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventService, deps: [{ token: i1.HttpClient }, { token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
1013
1196
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventService, providedIn: 'root' }); }
1014
1197
  }
@@ -1094,7 +1277,7 @@ class EventSummaryPageComponent extends SubscriptionnerDirective {
1094
1277
  this.store.dispatch(EventSummaryActions.load());
1095
1278
  this.selectedCriticality$ = this.store
1096
1279
  .select(EventSelectors.filters)
1097
- .pipe(map$1((filters) => (filters[KNOWN_FILTER_SETS.EVENTS] ?? {})['criticality']?.[0] ?? 'ALL'));
1280
+ .pipe(map((filters) => (filters[KNOWN_FILTER_SETS.EVENTS] ?? {})['criticality']?.[0] ?? 'ALL'));
1098
1281
  this.subscriptions.add(this.store.select(EventSummarySelectors.summaries).subscribe((summaries) => {
1099
1282
  this.summaries = summaries;
1100
1283
  }));
@@ -1120,6 +1303,66 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
1120
1303
  type: Input
1121
1304
  }] } });
1122
1305
 
1306
+ class ProcedureColumnOrderComponent extends ColumnOrderComponent {
1307
+ constructor(store) {
1308
+ super(store);
1309
+ this.subscriptions.add(this.store.select(ProcedureSelectors.sort).subscribe(sort => this.sortValue = sort));
1310
+ }
1311
+ sort(order) {
1312
+ throw Error('Sort not implemented.');
1313
+ this.store.dispatch(ProcedureActions.sort({ field: this.field, order }));
1314
+ }
1315
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureColumnOrderComponent, deps: [{ token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
1316
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: ProcedureColumnOrderComponent, selector: "hvy-procedure-column-order", usesInheritance: true, ngImport: i0, template: "<div class=\"o-hvy-column-order\">\n <div class=\"o-hvy-column-order__content\">\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }] }); }
1317
+ }
1318
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureColumnOrderComponent, decorators: [{
1319
+ type: Component,
1320
+ args: [{ selector: 'hvy-procedure-column-order', template: "<div class=\"o-hvy-column-order\">\n <div class=\"o-hvy-column-order__content\">\n <ng-content></ng-content>\n </div>\n <div class=\"o-hvy-column-order__chevrons\">\n <pry-icon iconSvg=\"caret_top\" (click)=\"sort('ASC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('ASC')\"></pry-icon>\n <pry-icon iconSvg=\"caret_bottom\" (click)=\"sort('DESC')\" [height]=\"10\" [width]=\"10\" [class.-active]=\"isActive('DESC')\"></pry-icon>\n </div>\n</div>\n" }]
1321
+ }], ctorParameters: () => [{ type: i1$1.Store }] });
1322
+
1323
+ const PROCEDURE_LINK = {
1324
+ fn: (procedure, store) => ['./', procedure.id]
1325
+ };
1326
+ class ProcedureListComponent extends SubscriptionnerDirective {
1327
+ constructor(store, el, router, scroll) {
1328
+ super();
1329
+ this.store = store;
1330
+ this.el = el;
1331
+ this.router = router;
1332
+ this.scroll = scroll;
1333
+ this.PROCEDURE_LINK = PROCEDURE_LINK;
1334
+ this.search = '';
1335
+ this.search$ = new Subject;
1336
+ this.store.dispatch(ProcedureActions.load({}));
1337
+ this.procedures$ = this.store.select(ProcedureSelectors.procedures);
1338
+ this.subscriptions.add(this.search$.pipe(debounceTime$1(300), distinctUntilChanged()).subscribe((search) => {
1339
+ throw Error('Search not implemented.');
1340
+ this.store.dispatch(ProcedureActions.search({ search }));
1341
+ }));
1342
+ }
1343
+ ngAfterViewInit() {
1344
+ this.subscriptions.add(this.scroll.isEndOfPage(this.el.nativeElement, ProcedureSelectors.noMoreProcedures)
1345
+ .subscribe(() => {
1346
+ this.store.dispatch(ProcedureActions.load({ next: true }));
1347
+ }));
1348
+ }
1349
+ emitSearch() {
1350
+ this.search$.next(this.search);
1351
+ }
1352
+ goTo(procedure) {
1353
+ return this.router.navigate(this.PROCEDURE_LINK.fn(procedure, this.store));
1354
+ }
1355
+ ngOnDestroy() {
1356
+ this.store.dispatch(ProcedureActions.search({ search: undefined }));
1357
+ }
1358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureListComponent, deps: [{ token: i1$1.Store }, { token: i0.ElementRef }, { token: i2.Router }, { token: InfiniteScrollService }], target: i0.ɵɵFactoryTarget.Component }); }
1359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: ProcedureListComponent, selector: "hvy-procedure-list", usesInheritance: true, ngImport: i0, template: "<div class=\"o-procedure-list\">\n <div class=\"m-form-label-field o-procedure-list__search\">\n <input class=\"a-form-field o-procedure-list__search-input\" type=\"text\" [(ngModel)]=\"search\" (ngModelChange)=\"emitSearch()\" placeholder=\"{{ '@hvy.action.search' | i18n }}...\">\n <pry-icon iconSvg=\"search\" class=\"o-procedure-list__search-icon\"></pry-icon>\n </div>\n <table class=\"o-hvy-events-table\">\n <thead>\n <tr class=\"o-hvy-events-table__header\">\n <th>\n <hvy-procedure-column-order field=\"useCount\">{{ '@hvy.procedure.useCount' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"title\">{{ '@hvy.procedure.title' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"domain\">{{ '@hvy.procedure.domain' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"creator\">{{ '@hvy.procedure.author' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"id\">{{ '@hvy.procedure.id' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"creationDate\">{{ '@hvy.event.creationDate' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"lastModificationDate\"><span>{{ '@hvy.event.lastModificationDate' | i18n }}</span></hvy-procedure-column-order>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (procedure of procedures$ | async; track procedure.id) {\n <tr class=\"o-hvy-events-table__line\" (click)=\"goTo(procedure)\">\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.useCount }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.name }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.domain }}</td>\n <td class=\"o-hvy-events-table__line__cell -centered\">{{ procedure.creator }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.id }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.creationDate| date : 'dd/mm/YYYY HH:MM' }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.lastModificationDate | date : 'dd/mm/YYYY HH:MM' }}\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <a [routerLink]=\"PROCEDURE_LINK.fn(procedure, store)\">> {{ '@hvy.action.consult' | i18n }}</a>\n </td>\n </tr>\n } @empty {\n <tr>\n <td class=\"o-hvy-events-table__empty\" colspan=\"50\">\n <div>{{ '@hvy.procedure.noContent' | i18n }}</div>\n <div>\n <ng-content></ng-content>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n", dependencies: [{ kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: ProcedureColumnOrderComponent, selector: "hvy-procedure-column-order" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }] }); }
1360
+ }
1361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureListComponent, decorators: [{
1362
+ type: Component,
1363
+ args: [{ selector: 'hvy-procedure-list', template: "<div class=\"o-procedure-list\">\n <div class=\"m-form-label-field o-procedure-list__search\">\n <input class=\"a-form-field o-procedure-list__search-input\" type=\"text\" [(ngModel)]=\"search\" (ngModelChange)=\"emitSearch()\" placeholder=\"{{ '@hvy.action.search' | i18n }}...\">\n <pry-icon iconSvg=\"search\" class=\"o-procedure-list__search-icon\"></pry-icon>\n </div>\n <table class=\"o-hvy-events-table\">\n <thead>\n <tr class=\"o-hvy-events-table__header\">\n <th>\n <hvy-procedure-column-order field=\"useCount\">{{ '@hvy.procedure.useCount' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"title\">{{ '@hvy.procedure.title' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"domain\">{{ '@hvy.procedure.domain' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"creator\">{{ '@hvy.procedure.author' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"id\">{{ '@hvy.procedure.id' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"creationDate\">{{ '@hvy.event.creationDate' | i18n }}</hvy-procedure-column-order>\n </th>\n <th>\n <hvy-procedure-column-order field=\"lastModificationDate\"><span>{{ '@hvy.event.lastModificationDate' | i18n }}</span></hvy-procedure-column-order>\n </th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (procedure of procedures$ | async; track procedure.id) {\n <tr class=\"o-hvy-events-table__line\" (click)=\"goTo(procedure)\">\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.useCount }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.name }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.domain }}</td>\n <td class=\"o-hvy-events-table__line__cell -centered\">{{ procedure.creator }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.id }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.creationDate| date : 'dd/mm/YYYY HH:MM' }}</td>\n <td class=\"o-hvy-events-table__line__cell\">{{ procedure.lastModificationDate | date : 'dd/mm/YYYY HH:MM' }}\n </td>\n <td class=\"o-hvy-events-table__line__cell\">\n <a [routerLink]=\"PROCEDURE_LINK.fn(procedure, store)\">> {{ '@hvy.action.consult' | i18n }}</a>\n </td>\n </tr>\n } @empty {\n <tr>\n <td class=\"o-hvy-events-table__empty\" colspan=\"50\">\n <div>{{ '@hvy.procedure.noContent' | i18n }}</div>\n <div>\n <ng-content></ng-content>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n" }]
1364
+ }], ctorParameters: () => [{ type: i1$1.Store }, { type: i0.ElementRef }, { type: i2.Router }, { type: InfiniteScrollService }] });
1365
+
1123
1366
  const HYP_BASE_CONFIG = new InjectionToken('base config');
1124
1367
 
1125
1368
  const enTranslations = {
@@ -1228,7 +1471,24 @@ const enTranslations = {
1228
1471
  },
1229
1472
  procedure: {
1230
1473
  name: 'Procedure',
1231
- progress: 'Procedure progress %'
1474
+ progress: 'Procedure progress %',
1475
+ useCount: 'Usage',
1476
+ title: 'Title',
1477
+ category: 'Category',
1478
+ author: 'Author',
1479
+ id: 'Id',
1480
+ missingProperty: 'Missing property',
1481
+ noContent: 'No existing procedures found',
1482
+ domain: "Domain"
1483
+ },
1484
+ "associationModal": {
1485
+ "title": "Link a procedure",
1486
+ "description": "Adding a procedure to selected events allows for selecting a list of actions to be performed to treat the events.",
1487
+ "linkedEvents": "Linked events",
1488
+ "categoryFilter": "Filter by category",
1489
+ "searchProcedure": "Search procedures",
1490
+ "domainPlaceholder": "Select a domain",
1491
+ "procedurePlaceholder": "Input procedure title"
1232
1492
  },
1233
1493
  action: {
1234
1494
  consult: 'Consult',
@@ -1237,7 +1497,8 @@ const enTranslations = {
1237
1497
  comment: 'Comment',
1238
1498
  associate: 'Link to procedure',
1239
1499
  validate: 'Validate',
1240
- cancel: 'Cancel'
1500
+ cancel: 'Cancel',
1501
+ search: 'Search'
1241
1502
  }
1242
1503
  }
1243
1504
  };
@@ -1348,7 +1609,24 @@ const frTranslations = {
1348
1609
  },
1349
1610
  procedure: {
1350
1611
  name: 'Procédure',
1351
- progress: '% avancement procédure'
1612
+ progress: '% avancement procédure',
1613
+ useCount: 'Usage',
1614
+ title: 'Titre',
1615
+ category: 'Métier',
1616
+ author: 'Créateur',
1617
+ id: 'Identifiant',
1618
+ missingProperty: 'Propriété manquante',
1619
+ noContent: 'Aucune procédure n\'a été créée.',
1620
+ domain: "Métier",
1621
+ },
1622
+ associationModal: {
1623
+ title: "Associer à une procédure",
1624
+ description: "Ajouter une procédure à des événements permet de sélectionner la liste d'actions à exécuter pour traiter ces événement",
1625
+ linkedEvents: "Événements liés",
1626
+ categoryFilter: "Filtrer par métier",
1627
+ searchProcedure: "Rechercher une procédure",
1628
+ domainPlaceholder: "Sélectionner un métier",
1629
+ procedurePlaceholder: "Saisissez le titre de la procédure"
1352
1630
  },
1353
1631
  action: {
1354
1632
  consult: 'Consulter',
@@ -1357,7 +1635,8 @@ const frTranslations = {
1357
1635
  comment: 'Commenter',
1358
1636
  associate: 'Associer à une procédure',
1359
1637
  validate: 'Valider',
1360
- cancel: 'Annuler'
1638
+ cancel: 'Annuler',
1639
+ search: 'Rechercher'
1361
1640
  }
1362
1641
  }
1363
1642
  };
@@ -1373,20 +1652,22 @@ class EventEffects {
1373
1652
  this.actions$ = actions$;
1374
1653
  this.eventService = eventService;
1375
1654
  this.store = store;
1376
- this.loadEvents$ = createEffect(() => this.actions$.pipe(ofType(EventActions.load), debounceTime(200), withLatestFrom(this.store.select(EventSelectors.events), this.store.select(EventSelectors.noMoreEvents)), filter(([action, events, noMore]) => !noMore), mergeMap$1(([action, stateEvents]) => this.eventService.list(action.next ? stateEvents.length : 0).pipe(map$1((events) => EventActions.loadSuccess({ events, startingFrom: action.next ? stateEvents.length : 0 })), catchError((error) => [EventActions.loadFailure({ error: error })])))));
1377
- this.getEvent$ = createEffect(() => this.actions$.pipe(ofType(EventActions.get), debounceTime(200), mergeMap$1((action) => this.eventService.get(action.id).pipe(map$1((event) => EventActions.getSuccess({ event })), catchError((error) => [EventActions.getFailure({ error: error })])))));
1378
- this.getForProcedureEvent$ = createEffect(() => this.actions$.pipe(ofType(EventActions.getForProcedure), debounceTime(200), mergeMap$1((action) => this.eventService.getProcedure(action.id).pipe(map$1((procedure) => EventActions.getSuccess({ procedure })), catchError((error) => [EventActions.getFailure({ error: error })])))));
1379
- this.saveEvent$ = createEffect(() => this.actions$.pipe(ofType(EventActions.save), debounceTime(200), mergeMap$1((action) => this.eventService.save(action.event).pipe(map$1((event) => EventActions.saveSuccess({ event: action.event })), catchError((error) => [EventActions.saveFailure({ error: error })])))));
1380
- this.saveProcedure$ = createEffect(() => this.actions$.pipe(ofType(EventActions.saveProcedure), debounceTime(200), mergeMap$1((action) => this.eventService.saveProcedure(action.procedure).pipe(map$1((procedure) => EventActions.saveSuccess({ procedure: action.procedure })), catchError((error) => [EventActions.saveFailure({ error: error })])))));
1381
- this.close$ = createEffect(() => this.actions$.pipe(ofType(EventActions.status), debounceTime(200), mergeMap$1((action) => {
1655
+ this.loadEvents$ = createEffect(() => this.actions$.pipe(ofType(EventActions.load), debounceTime$1(200), withLatestFrom(this.store.select(EventSelectors.events), this.store.select(EventSelectors.noMoreEvents)), filter(([action, events, noMore]) => !noMore), mergeMap$1(([action, stateEvents]) => this.eventService.list(action.next ? stateEvents.length : 0).pipe(map((events) => EventActions.loadSuccess({ events, startingFrom: action.next ? stateEvents.length : 0 })), catchError((error) => [EventActions.loadFailure({ error: error })])))));
1656
+ this.getEvent$ = createEffect(() => this.actions$.pipe(ofType(EventActions.get), debounceTime$1(200), mergeMap$1((action) => this.eventService.get(action.id).pipe(map((event) => EventActions.getSuccess({ event })), catchError((error) => [EventActions.getFailure({ error: error })])))));
1657
+ this.getForProcedureEvent$ = createEffect(() => this.actions$.pipe(ofType(EventActions.getForProcedure), debounceTime$1(200), mergeMap$1((action) => this.eventService.getProcedure(action.id).pipe(map((procedure) => EventActions.getSuccess({ procedure })), catchError((error) => [EventActions.getFailure({ error: error })])))));
1658
+ this.saveEvent$ = createEffect(() => this.actions$.pipe(ofType(EventActions.save), debounceTime$1(200), mergeMap$1((action) => this.eventService.save(action.event).pipe(map((event) => EventActions.saveSuccess({ event: action.event })), catchError((error) => [EventActions.saveFailure({ error: error })])))));
1659
+ this.saveProcedure$ = createEffect(() => this.actions$.pipe(ofType(EventActions.saveProcedure), debounceTime$1(200), mergeMap$1((action) => this.eventService.saveProcedure(action.procedure).pipe(map((procedure) => EventActions.saveSuccess({ procedure: action.procedure })), catchError((error) => [EventActions.saveFailure({ error: error })])))));
1660
+ this.close$ = createEffect(() => this.actions$.pipe(ofType(EventActions.status), debounceTime$1(200), mergeMap$1((action) => {
1382
1661
  if (!!action.event) {
1383
- return this.eventService.status(action.event, action.targetStatus, action.comment).pipe(map$1((event) => EventActions.statusSuccess()), catchError((error) => [EventActions.statusFailure({ error: error })]));
1662
+ return this.eventService.status(action.event, action.targetStatus, action.comment).pipe(map((event) => EventActions.statusSuccess()), catchError((error) => [EventActions.statusFailure({ error: error })]));
1384
1663
  }
1385
1664
  else {
1386
- return this.eventService.statusProcedure(action.procedure, action.targetStatus, action.comment).pipe(map$1((event) => EventActions.statusSuccess()), catchError((error) => [EventActions.statusFailure({ error: error })]));
1665
+ return this.eventService.statusProcedure(action.procedure, action.targetStatus, action.comment).pipe(map((event) => EventActions.statusSuccess()), catchError((error) => [EventActions.statusFailure({ error: error })]));
1387
1666
  }
1388
1667
  })));
1389
- this.sort$ = createEffect(() => this.actions$.pipe(ofType(EventActions.sort, EventActions.filter), debounceTime(200), map$1(() => EventActions.load({}))));
1668
+ this.sort$ = createEffect(() => this.actions$.pipe(ofType(EventActions.sort), debounceTime$1(200), map(() => EventActions.load({}))));
1669
+ this.filter$ = createEffect(() => this.actions$.pipe(ofType(EventActions.filter), filter((action) => action.filterSet === KNOWN_FILTER_SETS.EVENTS), debounceTime$1(200), map(() => EventActions.load({}))));
1670
+ this.associateProcedure$ = createEffect(() => this.actions$.pipe(ofType(EventActions.associateProcedure), mergeMap$1((action) => this.eventService.associateProcedure(action.procedureId).pipe(map(() => EventActions.load({})), catchError((error) => [EventActions.associateProcedureFailure({ error: error })])))));
1390
1671
  }
1391
1672
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventEffects, deps: [{ token: i1$3.Actions }, { token: EventService }, { token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
1392
1673
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventEffects }); }
@@ -1453,7 +1734,7 @@ class EventSummaryEffects {
1453
1734
  constructor(actions$, eventSummaryService) {
1454
1735
  this.actions$ = actions$;
1455
1736
  this.eventSummaryService = eventSummaryService;
1456
- this.loadSummaries$ = createEffect(() => this.actions$.pipe(ofType(EventSummaryActions.load), debounceTime(200), mergeMap$1((action) => this.eventSummaryService.list().pipe(map$1((summaries) => EventSummaryActions.loadSuccess({ summaries })), catchError((error) => [EventSummaryActions.loadFailure({ error: error })])))));
1737
+ this.loadSummaries$ = createEffect(() => this.actions$.pipe(ofType(EventSummaryActions.load), debounceTime$1(200), mergeMap$1((action) => this.eventSummaryService.list().pipe(map((summaries) => EventSummaryActions.loadSuccess({ summaries })), catchError((error) => [EventSummaryActions.loadFailure({ error: error })])))));
1457
1738
  }
1458
1739
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventSummaryEffects, deps: [{ token: i1$3.Actions }, { token: EventSummaryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1459
1740
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: EventSummaryEffects }); }
@@ -1462,9 +1743,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
1462
1743
  type: Injectable
1463
1744
  }], ctorParameters: () => [{ type: i1$3.Actions }, { type: EventSummaryService }] });
1464
1745
 
1746
+ class ProcedureEffects {
1747
+ constructor(actions$, procedureService, store) {
1748
+ this.actions$ = actions$;
1749
+ this.procedureService = procedureService;
1750
+ this.store = store;
1751
+ this.loadProcedures$ = createEffect(() => this.actions$.pipe(ofType(ProcedureActions.load), debounceTime$1(200), withLatestFrom(this.store.select(ProcedureSelectors.procedures), this.store.select(ProcedureSelectors.noMoreProcedures)), filter(([action, stateProcedures, noMore]) => !noMore), mergeMap$1(([action, stateProcedures]) => this.procedureService.list(action.next ? stateProcedures.length : 0).pipe(map((procedures) => ProcedureActions.loadSuccess({ procedures, startingFrom: action.next ? stateProcedures.length : 0 })), catchError((error) => [ProcedureActions.loadFailure({ error: error })])))));
1752
+ this.sort$ = createEffect(() => this.actions$.pipe(ofType(ProcedureActions.sort), debounceTime$1(200), map(() => ProcedureActions.load({}))));
1753
+ }
1754
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureEffects, deps: [{ token: i1$3.Actions }, { token: ProcedureService }, { token: i1$1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
1755
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureEffects }); }
1756
+ }
1757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ProcedureEffects, decorators: [{
1758
+ type: Injectable
1759
+ }], ctorParameters: () => [{ type: i1$3.Actions }, { type: ProcedureService }, { type: i1$1.Store }] });
1760
+
1465
1761
  const components = [
1466
1762
  EventDetailComponent,
1467
1763
  EventListComponent,
1764
+ EventColumnOrderComponent,
1468
1765
  IconDisplayComponent,
1469
1766
  EventSummaryItemComponent,
1470
1767
  EventSummaryListComponent,
@@ -1476,7 +1773,10 @@ const components = [
1476
1773
  ColumnOrderComponent,
1477
1774
  EventFiltersComponent,
1478
1775
  DateFilterComponent,
1479
- ChoiceFilterComponent
1776
+ ChoiceFilterComponent,
1777
+ ProcedureListComponent,
1778
+ ProcedureColumnOrderComponent,
1779
+ ProcedureAssociationModalComponent
1480
1780
  ];
1481
1781
  class PvyHypervisorModule {
1482
1782
  static forRoot(options) {
@@ -1498,6 +1798,7 @@ class PvyHypervisorModule {
1498
1798
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: PvyHypervisorModule, deps: [{ token: HYP_BASE_CONFIG }, { token: i1$1.Store }, { token: i3.PryI18nService }], target: i0.ɵɵFactoryTarget.NgModule }); }
1499
1799
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.4", ngImport: i0, type: PvyHypervisorModule, declarations: [EventDetailComponent,
1500
1800
  EventListComponent,
1801
+ EventColumnOrderComponent,
1501
1802
  IconDisplayComponent,
1502
1803
  EventSummaryItemComponent,
1503
1804
  EventSummaryListComponent,
@@ -1509,12 +1810,13 @@ class PvyHypervisorModule {
1509
1810
  ColumnOrderComponent,
1510
1811
  EventFiltersComponent,
1511
1812
  DateFilterComponent,
1512
- ChoiceFilterComponent], imports: [i1$1.StoreFeatureModule, i1$1.StoreFeatureModule, i1$1.StoreFeatureModule, i1$3.EffectsFeatureModule, NgForOf,
1813
+ ChoiceFilterComponent,
1814
+ ProcedureListComponent,
1815
+ ProcedureColumnOrderComponent,
1816
+ ProcedureAssociationModalComponent], imports: [i1$1.StoreFeatureModule, i1$1.StoreFeatureModule, i1$1.StoreFeatureModule, i1$1.StoreFeatureModule, i1$3.EffectsFeatureModule, NgForOf,
1513
1817
  AsyncPipe,
1514
1818
  PryI18nModule,
1515
1819
  PryCoreModule,
1516
- AsyncPipe,
1517
- PryCoreModule,
1518
1820
  NgStyle,
1519
1821
  PryCheckboxModule,
1520
1822
  FormsModule,
@@ -1524,15 +1826,10 @@ class PvyHypervisorModule {
1524
1826
  PryIconModule,
1525
1827
  KeyValuePipe,
1526
1828
  PrySelectModule,
1527
- FormsModule,
1528
1829
  JsonPipe,
1529
- PryDatePickerModule,
1530
- PryI18nModule,
1531
- PryIconModule,
1532
- PryI18nModule,
1533
- AsyncPipe,
1534
- PryI18nModule], exports: [EventDetailComponent,
1830
+ PryDatePickerModule], exports: [EventDetailComponent,
1535
1831
  EventListComponent,
1832
+ EventColumnOrderComponent,
1536
1833
  IconDisplayComponent,
1537
1834
  EventSummaryItemComponent,
1538
1835
  EventSummaryListComponent,
@@ -1544,25 +1841,23 @@ class PvyHypervisorModule {
1544
1841
  ColumnOrderComponent,
1545
1842
  EventFiltersComponent,
1546
1843
  DateFilterComponent,
1547
- ChoiceFilterComponent] }); }
1844
+ ChoiceFilterComponent,
1845
+ ProcedureListComponent,
1846
+ ProcedureColumnOrderComponent,
1847
+ ProcedureAssociationModalComponent] }); }
1548
1848
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: PvyHypervisorModule, imports: [StoreModule.forFeature(hypFeatureKey, hypervisorReducer),
1549
1849
  StoreModule.forFeature(eventFeatureKey, eventReducer),
1550
1850
  StoreModule.forFeature(eventSummaryFeatureKey, eventSummaryReducer),
1551
- EffectsModule.forFeature([EventEffects, EventSummaryEffects, HypervisorEffects]),
1851
+ StoreModule.forFeature(procedureFeatureKey, procedureReducer),
1852
+ EffectsModule.forFeature([EventEffects, EventSummaryEffects, ProcedureEffects, HypervisorEffects]),
1552
1853
  PryI18nModule,
1553
1854
  PryCoreModule,
1554
- PryCoreModule,
1555
1855
  PryCheckboxModule,
1556
1856
  FormsModule,
1557
1857
  PrySinceDateModule,
1558
1858
  PryIconModule,
1559
1859
  PrySelectModule,
1560
- FormsModule,
1561
- PryDatePickerModule,
1562
- PryI18nModule,
1563
- PryIconModule,
1564
- PryI18nModule,
1565
- PryI18nModule] }); }
1860
+ PryDatePickerModule] }); }
1566
1861
  }
1567
1862
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: PvyHypervisorModule, decorators: [{
1568
1863
  type: NgModule,
@@ -1574,13 +1869,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
1574
1869
  StoreModule.forFeature(hypFeatureKey, hypervisorReducer),
1575
1870
  StoreModule.forFeature(eventFeatureKey, eventReducer),
1576
1871
  StoreModule.forFeature(eventSummaryFeatureKey, eventSummaryReducer),
1577
- EffectsModule.forFeature([EventEffects, EventSummaryEffects, HypervisorEffects]),
1872
+ StoreModule.forFeature(procedureFeatureKey, procedureReducer),
1873
+ EffectsModule.forFeature([EventEffects, EventSummaryEffects, ProcedureEffects, HypervisorEffects]),
1578
1874
  NgForOf,
1579
1875
  AsyncPipe,
1580
1876
  PryI18nModule,
1581
1877
  PryCoreModule,
1582
- AsyncPipe,
1583
- PryCoreModule,
1584
1878
  NgStyle,
1585
1879
  PryCheckboxModule,
1586
1880
  FormsModule,
@@ -1590,14 +1884,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
1590
1884
  PryIconModule,
1591
1885
  KeyValuePipe,
1592
1886
  PrySelectModule,
1593
- FormsModule,
1594
1887
  JsonPipe,
1595
1888
  PryDatePickerModule,
1596
- PryI18nModule,
1597
- PryIconModule,
1598
- PryI18nModule,
1599
- AsyncPipe,
1600
- PryI18nModule,
1601
1889
  ],
1602
1890
  exports: [
1603
1891
  ...components,
@@ -1616,5 +1904,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
1616
1904
  * Generated bundle index. Do not edit.
1617
1905
  */
1618
1906
 
1619
- export { CATEGORIES_BY_TYPE, ChoiceFilterComponent, ColumnOrderComponent, DOMAINS, DateFilterComponent, EVENT_LINK, EVENT_TO_ICON, EquipmentService, EventActions, EventDetailComponent, EventEffects, EventFiltersComponent, EventIconPipe, EventListComponent, EventSelectors, EventService, EventSummaryActions, EventSummaryEffects, EventSummaryItemComponent, EventSummaryListComponent, EventSummaryPageComponent, EventSummarySelectors, ForDatetimeLocalPipe, HYP_BASE_CONFIG, HypEventCategory, HypEventCriticality, HypEventStatus, HypEventType, HypSelectors, HypervisorActions, HypervisorEffects, HypervisorService, IconDisplayComponent, KNOWN_FILTER_SETS, PAGE_SIZE_FETCH, ProgressDisplayComponent, PvyHypervisorModule, SCROLL_PX_TO_TRIGGER_FETCH_PAGE, StatusDisplayComponent, enTranslations, eventFeatureKey, eventForWriteAPI, eventInitialState, eventReducer, eventSummaryFeatureKey, eventSummaryInitialState, eventSummaryReducer, frTranslations, hypFeatureKey, hypInitialState, hypervisorReducer, procedureForWriteAPI };
1907
+ export { CATEGORIES_BY_TYPE, ChoiceFilterComponent, ColumnOrderComponent, DOMAINS, DateFilterComponent, EVENT_LINK, EVENT_TO_ICON, EquipmentService, EventActions, EventColumnOrderComponent, EventDetailComponent, EventEffects, EventFiltersComponent, EventIconPipe, EventListComponent, EventSelectors, EventService, EventSummaryActions, EventSummaryEffects, EventSummaryItemComponent, EventSummaryListComponent, EventSummaryPageComponent, EventSummarySelectors, ForDatetimeLocalPipe, HYP_BASE_CONFIG, HypEventCategory, HypEventCriticality, HypEventStatus, HypEventType, HypSelectors, HypervisorActions, HypervisorEffects, HypervisorService, IconDisplayComponent, KNOWN_FILTER_SETS, PAGE_SIZE_FETCH, PROCEDURE_LINK, PROCEDURE_PAGE_SIZE_FETCH, ProcedureActions, ProcedureAssociationModalComponent, ProcedureColumnOrderComponent, ProcedureEffects, ProcedureListComponent, ProcedureSelectors, ProcedureService, ProgressDisplayComponent, PvyHypervisorModule, StatusDisplayComponent, enTranslations, eventFeatureKey, eventForWriteAPI, eventInitialState, eventReducer, eventSummaryFeatureKey, eventSummaryInitialState, eventSummaryReducer, frTranslations, hypFeatureKey, hypInitialState, hypervisorReducer, procedureFeatureKey, procedureForWriteAPI, procedureInitialState, procedureReducer };
1620
1908
  //# sourceMappingURL=provoly-hypervisor.mjs.map