@mediusinc/mng-commons 0.0.1-rc.2

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 (187) hide show
  1. package/README.md +19 -0
  2. package/esm2020/lib/api/models/builders/query-param.builder.mjs +49 -0
  3. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -0
  4. package/esm2020/lib/api/models/filter-param.model.mjs +46 -0
  5. package/esm2020/lib/api/models/index.mjs +9 -0
  6. package/esm2020/lib/api/models/mappers.mjs +17 -0
  7. package/esm2020/lib/api/models/query-mode.model.mjs +19 -0
  8. package/esm2020/lib/api/models/query-param.model.mjs +69 -0
  9. package/esm2020/lib/api/models/query-result.model.mjs +45 -0
  10. package/esm2020/lib/api/models/serialization.model.mjs +2 -0
  11. package/esm2020/lib/api/services/abstract-crud-api.service.mjs +72 -0
  12. package/esm2020/lib/api/services/index.mjs +2 -0
  13. package/esm2020/lib/api/utils/index.mjs +3 -0
  14. package/esm2020/lib/api/utils/medius-rest.util.mjs +70 -0
  15. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -0
  16. package/esm2020/lib/components/action/action.component.mjs +63 -0
  17. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -0
  18. package/esm2020/lib/components/action/index.mjs +4 -0
  19. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -0
  20. package/esm2020/lib/components/form/editor/form-editor.component.mjs +140 -0
  21. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +58 -0
  22. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +51 -0
  23. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -0
  24. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -0
  25. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +94 -0
  26. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +124 -0
  27. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -0
  28. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -0
  29. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -0
  30. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -0
  31. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -0
  32. package/esm2020/lib/components/form/index.mjs +2 -0
  33. package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +27 -0
  34. package/esm2020/lib/components/layout/app.footer.component.mjs +35 -0
  35. package/esm2020/lib/components/layout/app.main.component.mjs +25 -0
  36. package/esm2020/lib/components/layout/app.main.component.service.mjs +133 -0
  37. package/esm2020/lib/components/layout/app.menu.component.mjs +38 -0
  38. package/esm2020/lib/components/layout/app.menuitem.component.mjs +243 -0
  39. package/esm2020/lib/components/layout/app.topbar.component.mjs +135 -0
  40. package/esm2020/lib/components/layout/index.mjs +7 -0
  41. package/esm2020/lib/components/tableview/index.mjs +4 -0
  42. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +31 -0
  43. package/esm2020/lib/components/tableview/table/table.component.mjs +173 -0
  44. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -0
  45. package/esm2020/lib/components/tableview/tableview.component.service.mjs +18 -0
  46. package/esm2020/lib/config/formly.config.mjs +165 -0
  47. package/esm2020/lib/config/index.mjs +2 -0
  48. package/esm2020/lib/directives/index.mjs +2 -0
  49. package/esm2020/lib/directives/template.directive.mjs +25 -0
  50. package/esm2020/lib/mng-commons.module.mjs +338 -0
  51. package/esm2020/lib/models/action/action.model.mjs +58 -0
  52. package/esm2020/lib/models/action/index.mjs +2 -0
  53. package/esm2020/lib/models/config/index.mjs +2 -0
  54. package/esm2020/lib/models/config/mng-config.model.mjs +3 -0
  55. package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +283 -0
  56. package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +647 -0
  57. package/esm2020/lib/models/descriptors/index.mjs +6 -0
  58. package/esm2020/lib/models/descriptors/model-descriptor.model.mjs +34 -0
  59. package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +123 -0
  60. package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +124 -0
  61. package/esm2020/lib/models/events/editor-event.model.mjs +14 -0
  62. package/esm2020/lib/models/events/index.mjs +3 -0
  63. package/esm2020/lib/models/events/table-event.model.mjs +16 -0
  64. package/esm2020/lib/models/interfaces/confirmation-service.model.mjs +2 -0
  65. package/esm2020/lib/models/interfaces/index.mjs +2 -0
  66. package/esm2020/lib/models/providers/data-provider.model.mjs +86 -0
  67. package/esm2020/lib/models/providers/index.mjs +2 -0
  68. package/esm2020/lib/models/types/index.mjs +3 -0
  69. package/esm2020/lib/models/types/type.decorator.mjs +8 -0
  70. package/esm2020/lib/models/types/type.model.mjs +2 -0
  71. package/esm2020/lib/models/validators/field.validator.mjs +21 -0
  72. package/esm2020/lib/models/validators/index.mjs +2 -0
  73. package/esm2020/lib/pipes/index.mjs +2 -0
  74. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -0
  75. package/esm2020/lib/services/action.service.mjs +239 -0
  76. package/esm2020/lib/services/breadcrumb.service.mjs +21 -0
  77. package/esm2020/lib/services/configuration.service.mjs +77 -0
  78. package/esm2020/lib/services/index.mjs +7 -0
  79. package/esm2020/lib/services/menu.service.mjs +26 -0
  80. package/esm2020/lib/services/navigation.service.mjs +49 -0
  81. package/esm2020/lib/services/providers/config-service.provider.mjs +12 -0
  82. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -0
  83. package/esm2020/lib/services/providers/index.mjs +3 -0
  84. package/esm2020/lib/services/settings.service.mjs +40 -0
  85. package/esm2020/lib/utils/editor-formly.util.mjs +165 -0
  86. package/esm2020/lib/utils/i18n.util.mjs +75 -0
  87. package/esm2020/lib/utils/index.mjs +5 -0
  88. package/esm2020/lib/utils/model.util.mjs +38 -0
  89. package/esm2020/lib/utils/type.util.mjs +43 -0
  90. package/esm2020/mediusinc-mng-commons.mjs +5 -0
  91. package/esm2020/public-api.mjs +33 -0
  92. package/fesm2015/mediusinc-mng-commons.mjs +5056 -0
  93. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -0
  94. package/fesm2020/mediusinc-mng-commons.mjs +5012 -0
  95. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -0
  96. package/lib/api/models/builders/query-param.builder.d.ts +11 -0
  97. package/lib/api/models/filter-match-type.model.d.ts +21 -0
  98. package/lib/api/models/filter-param.model.d.ts +23 -0
  99. package/lib/api/models/index.d.ts +8 -0
  100. package/lib/api/models/mappers.d.ts +6 -0
  101. package/lib/api/models/query-mode.model.d.ts +16 -0
  102. package/lib/api/models/query-param.model.d.ts +31 -0
  103. package/lib/api/models/query-result.model.d.ts +36 -0
  104. package/lib/api/models/serialization.model.d.ts +8 -0
  105. package/lib/api/services/abstract-crud-api.service.d.ts +23 -0
  106. package/lib/api/services/index.d.ts +1 -0
  107. package/lib/api/utils/index.d.ts +2 -0
  108. package/lib/api/utils/medius-rest.util.d.ts +6 -0
  109. package/lib/api/utils/object-serializer.util.d.ts +30 -0
  110. package/lib/components/action/action.component.d.ts +36 -0
  111. package/lib/components/action/dialog/action-dialog.component.d.ts +48 -0
  112. package/lib/components/action/index.d.ts +3 -0
  113. package/lib/components/action/route/action-route.component.d.ts +32 -0
  114. package/lib/components/form/editor/form-editor.component.d.ts +37 -0
  115. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +21 -0
  116. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +19 -0
  117. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -0
  118. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -0
  119. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -0
  120. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -0
  121. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -0
  122. package/lib/components/form/formly/fields/index.d.ts +7 -0
  123. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -0
  124. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -0
  125. package/lib/components/form/formly/wrappers/index.d.ts +2 -0
  126. package/lib/components/form/index.d.ts +1 -0
  127. package/lib/components/layout/app.breadcrumb.component.d.ts +16 -0
  128. package/lib/components/layout/app.footer.component.d.ts +8 -0
  129. package/lib/components/layout/app.main.component.d.ts +12 -0
  130. package/lib/components/layout/app.main.component.service.d.ts +40 -0
  131. package/lib/components/layout/app.menu.component.d.ts +14 -0
  132. package/lib/components/layout/app.menuitem.component.d.ts +31 -0
  133. package/lib/components/layout/app.topbar.component.d.ts +16 -0
  134. package/lib/components/layout/index.d.ts +6 -0
  135. package/lib/components/tableview/index.d.ts +3 -0
  136. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +15 -0
  137. package/lib/components/tableview/table/table.component.d.ts +47 -0
  138. package/lib/components/tableview/tableview.component.d.ts +36 -0
  139. package/lib/components/tableview/tableview.component.service.d.ts +11 -0
  140. package/lib/config/formly.config.d.ts +8 -0
  141. package/lib/config/index.d.ts +1 -0
  142. package/lib/directives/index.d.ts +1 -0
  143. package/lib/directives/template.directive.d.ts +11 -0
  144. package/lib/mng-commons.module.d.ts +74 -0
  145. package/lib/models/action/action.model.d.ts +53 -0
  146. package/lib/models/action/index.d.ts +1 -0
  147. package/lib/models/config/index.d.ts +1 -0
  148. package/lib/models/config/mng-config.model.d.ts +19 -0
  149. package/lib/models/descriptors/action-descriptor.model.d.ts +124 -0
  150. package/lib/models/descriptors/editor-descriptor.model.d.ts +248 -0
  151. package/lib/models/descriptors/index.d.ts +5 -0
  152. package/lib/models/descriptors/model-descriptor.model.d.ts +15 -0
  153. package/lib/models/descriptors/table-descriptor.model.d.ts +45 -0
  154. package/lib/models/descriptors/tableview-descriptor.model.d.ts +38 -0
  155. package/lib/models/events/editor-event.model.d.ts +11 -0
  156. package/lib/models/events/index.d.ts +2 -0
  157. package/lib/models/events/table-event.model.d.ts +17 -0
  158. package/lib/models/interfaces/confirmation-service.model.d.ts +6 -0
  159. package/lib/models/interfaces/index.d.ts +1 -0
  160. package/lib/models/providers/data-provider.model.d.ts +62 -0
  161. package/lib/models/providers/index.d.ts +1 -0
  162. package/lib/models/types/index.d.ts +2 -0
  163. package/lib/models/types/type.decorator.d.ts +2 -0
  164. package/lib/models/types/type.model.d.ts +10 -0
  165. package/lib/models/validators/field.validator.d.ts +18 -0
  166. package/lib/models/validators/index.d.ts +1 -0
  167. package/lib/pipes/index.d.ts +1 -0
  168. package/lib/pipes/property-path.pipe.d.ts +7 -0
  169. package/lib/services/action.service.d.ts +92 -0
  170. package/lib/services/breadcrumb.service.d.ts +9 -0
  171. package/lib/services/configuration.service.d.ts +35 -0
  172. package/lib/services/index.d.ts +6 -0
  173. package/lib/services/menu.service.d.ts +11 -0
  174. package/lib/services/navigation.service.d.ts +14 -0
  175. package/lib/services/providers/config-service.provider.d.ts +5 -0
  176. package/lib/services/providers/formly-config.provider.d.ts +4 -0
  177. package/lib/services/providers/index.d.ts +2 -0
  178. package/lib/services/settings.service.d.ts +18 -0
  179. package/lib/utils/editor-formly.util.d.ts +9 -0
  180. package/lib/utils/i18n.util.d.ts +14 -0
  181. package/lib/utils/index.d.ts +4 -0
  182. package/lib/utils/model.util.d.ts +5 -0
  183. package/lib/utils/type.util.d.ts +15 -0
  184. package/mediusinc-mng-commons-0.0.1-rc.2.tgz +0 -0
  185. package/mediusinc-mng-commons.d.ts +5 -0
  186. package/package.json +38 -0
  187. package/public-api.d.ts +22 -0
@@ -0,0 +1,135 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/settings.service";
4
+ import * as i2 from "@ngx-translate/core";
5
+ import * as i3 from "./app.main.component.service";
6
+ import * as i4 from "./app.breadcrumb.component";
7
+ import * as i5 from "./app.menu.component";
8
+ import * as i6 from "primeng/dropdown";
9
+ import * as i7 from "@angular/common";
10
+ export class AppTopbarComponent {
11
+ constructor(appSettings, translateService, appMainService
12
+ // private userService: UserApiService TODO
13
+ ) {
14
+ this.appSettings = appSettings;
15
+ this.translateService = translateService;
16
+ this.appMainService = appMainService;
17
+ this.languages = translateService.getLangs();
18
+ }
19
+ switchLanguage(language) {
20
+ this.translateService.use(language);
21
+ }
22
+ ngOnInit() {
23
+ // this.userService.getCurrentUser().subscribe(obj => this.user = obj);
24
+ }
25
+ }
26
+ AppTopbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AppTopbarComponent, deps: [{ token: i1.AppSettingsService }, { token: i2.TranslateService }, { token: i3.AppMainComponentService }], target: i0.ɵɵFactoryTarget.Component });
27
+ AppTopbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: AppTopbarComponent, selector: "app-topbar", ngImport: i0, template: `
28
+ <div class="layout-topbar">
29
+ <div class="layout-topbar-left">
30
+ <a href="#" class="topbar-menu-button" (click)="appMainService.onMenuButtonClick($event)" *ngIf="appSettings.isOverlay() || appMainService.isMobile()">
31
+ <i class="pi pi-bars"></i>
32
+ </a>
33
+
34
+ <app-breadcrumb></app-breadcrumb>
35
+ </div>
36
+
37
+ <app-menu></app-menu>
38
+
39
+ <div class="layout-topbar-right">
40
+ <ul class="layout-topbar-right-items">
41
+ <li #profile class="profile-item" [ngClass]="{'active-topmenuitem':appMainService.activeTopbarItem === profile}">
42
+ <!-- {{user?.name}} TODO -->
43
+ <a href="#" (click)="appMainService.onTopbarItemClick($event,profile)">
44
+ <i class="pi pi-fw pi-user"></i>
45
+ </a>
46
+
47
+ <ul class="fadeInDown">
48
+ <li role="menuitem">
49
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
50
+ <i class="pi pi-fw pi-user"></i>
51
+ <span>{{ 'topbar.profile' | translate }}</span>
52
+ </a>
53
+ </li>
54
+ <li role="menuitem">
55
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
56
+ <i class="pi pi-fw pi-globe"></i>
57
+ <p-dropdown [options]=languages (onChange)="switchLanguage($event.value)"></p-dropdown>
58
+ </a>
59
+ </li>
60
+ <li role="menuitem">
61
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
62
+ <i class="pi pi-fw pi-cog"></i>
63
+ <span>{{ 'topbar.settings' | translate }}</span>
64
+ </a>
65
+ </li>
66
+ <li role="menuitem">
67
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
68
+ <i class="pi pi-fw pi-sign-out"></i>
69
+ <span>{{ 'topbar.logout' | translate }}</span>
70
+ </a>
71
+ </li>
72
+ </ul>
73
+ </li>
74
+ </ul>
75
+ </div>
76
+ </div>
77
+ `, isInline: true, components: [{ type: i4.AppBreadcrumbComponent, selector: "app-breadcrumb" }, { type: i5.AppMenuComponent, selector: "app-menu" }, { type: i6.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "virtualScroll", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaFilterLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "disabled", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i2.TranslatePipe } });
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AppTopbarComponent, decorators: [{
79
+ type: Component,
80
+ args: [{
81
+ selector: 'app-topbar',
82
+ template: `
83
+ <div class="layout-topbar">
84
+ <div class="layout-topbar-left">
85
+ <a href="#" class="topbar-menu-button" (click)="appMainService.onMenuButtonClick($event)" *ngIf="appSettings.isOverlay() || appMainService.isMobile()">
86
+ <i class="pi pi-bars"></i>
87
+ </a>
88
+
89
+ <app-breadcrumb></app-breadcrumb>
90
+ </div>
91
+
92
+ <app-menu></app-menu>
93
+
94
+ <div class="layout-topbar-right">
95
+ <ul class="layout-topbar-right-items">
96
+ <li #profile class="profile-item" [ngClass]="{'active-topmenuitem':appMainService.activeTopbarItem === profile}">
97
+ <!-- {{user?.name}} TODO -->
98
+ <a href="#" (click)="appMainService.onTopbarItemClick($event,profile)">
99
+ <i class="pi pi-fw pi-user"></i>
100
+ </a>
101
+
102
+ <ul class="fadeInDown">
103
+ <li role="menuitem">
104
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
105
+ <i class="pi pi-fw pi-user"></i>
106
+ <span>{{ 'topbar.profile' | translate }}</span>
107
+ </a>
108
+ </li>
109
+ <li role="menuitem">
110
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
111
+ <i class="pi pi-fw pi-globe"></i>
112
+ <p-dropdown [options]=languages (onChange)="switchLanguage($event.value)"></p-dropdown>
113
+ </a>
114
+ </li>
115
+ <li role="menuitem">
116
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
117
+ <i class="pi pi-fw pi-cog"></i>
118
+ <span>{{ 'topbar.settings' | translate }}</span>
119
+ </a>
120
+ </li>
121
+ <li role="menuitem">
122
+ <a href="#" (click)="appMainService.onTopbarSubItemClick($event)">
123
+ <i class="pi pi-fw pi-sign-out"></i>
124
+ <span>{{ 'topbar.logout' | translate }}</span>
125
+ </a>
126
+ </li>
127
+ </ul>
128
+ </li>
129
+ </ul>
130
+ </div>
131
+ </div>
132
+ `
133
+ }]
134
+ }], ctorParameters: function () { return [{ type: i1.AppSettingsService }, { type: i2.TranslateService }, { type: i3.AppMainComponentService }]; } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnRvcGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0L2FwcC50b3BiYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7OztBQTREaEQsTUFBTSxPQUFPLGtCQUFrQjtJQUszQixZQUFtQixXQUErQixFQUMvQixnQkFBa0MsRUFDbEMsY0FBdUM7SUFDOUMsMkNBQTJDOztRQUhwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBeUI7UUFHdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFFBQVE7UUFDSix1RUFBdUU7SUFDM0UsQ0FBQzs7K0dBbkJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLGtEQXBEakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0RUOzJGQUVRLGtCQUFrQjtrQkF0RDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrRFQ7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QXBwU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7QXBwTWFpbkNvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4vYXBwLm1haW4uY29tcG9uZW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC10b3BiYXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtdG9wYmFyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXRvcGJhci1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInRvcGJhci1tZW51LWJ1dHRvblwiIChjbGljayk9XCJhcHBNYWluU2VydmljZS5vbk1lbnVCdXR0b25DbGljaygkZXZlbnQpXCIgKm5nSWY9XCJhcHBTZXR0aW5ncy5pc092ZXJsYXkoKSB8fCBhcHBNYWluU2VydmljZS5pc01vYmlsZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktYmFyc1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8YXBwLWJyZWFkY3J1bWI+PC9hcHAtYnJlYWRjcnVtYj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YXBwLW1lbnU+PC9hcHAtbWVudT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC10b3BiYXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsYXlvdXQtdG9wYmFyLXJpZ2h0LWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSAjcHJvZmlsZSBjbGFzcz1cInByb2ZpbGUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLXRvcG1lbnVpdGVtJzphcHBNYWluU2VydmljZS5hY3RpdmVUb3BiYXJJdGVtID09PSBwcm9maWxlfVwiPlxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIHt7dXNlcj8ubmFtZX19IFRPRE8gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJhcHBNYWluU2VydmljZS5vblRvcGJhckl0ZW1DbGljaygkZXZlbnQscHJvZmlsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWZ3IHBpLXVzZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImZhZGVJbkRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cImFwcE1haW5TZXJ2aWNlLm9uVG9wYmFyU3ViSXRlbUNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktZncgcGktdXNlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICd0b3BiYXIucHJvZmlsZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwiYXBwTWFpblNlcnZpY2Uub25Ub3BiYXJTdWJJdGVtQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1mdyBwaS1nbG9iZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1sYW5ndWFnZXMgKG9uQ2hhbmdlKT1cInN3aXRjaExhbmd1YWdlKCRldmVudC52YWx1ZSlcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwiYXBwTWFpblNlcnZpY2Uub25Ub3BiYXJTdWJJdGVtQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1mdyBwaS1jb2dcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAndG9wYmFyLnNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIChjbGljayk9XCJhcHBNYWluU2VydmljZS5vblRvcGJhclN1Ykl0ZW1DbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWZ3IHBpLXNpZ24tb3V0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgJ3RvcGJhci5sb2dvdXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIEFwcFRvcGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICAvLyBwdWJsaWMgdXNlcjogVXNlckR0bzsgVE9ET1xuICAgIHB1YmxpYyBsYW5ndWFnZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYXBwU2V0dGluZ3M6IEFwcFNldHRpbmdzU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgYXBwTWFpblNlcnZpY2U6IEFwcE1haW5Db21wb25lbnRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLy8gcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlckFwaVNlcnZpY2UgVE9ET1xuICAgICkge1xuICAgICAgICB0aGlzLmxhbmd1YWdlcyA9IHRyYW5zbGF0ZVNlcnZpY2UuZ2V0TGFuZ3MoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2hMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UobGFuZ3VhZ2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkuc3Vic2NyaWJlKG9iaiA9PiB0aGlzLnVzZXIgPSBvYmopO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export * from './app.breadcrumb.component';
2
+ export * from './app.footer.component';
3
+ export * from './app.main.component';
4
+ export * from './app.menu.component';
5
+ export * from './app.menuitem.component';
6
+ export * from './app.topbar.component';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvbGF5b3V0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hcHAuYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAuZm9vdGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC5tYWluLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC5tZW51LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2FwcC5tZW51aXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9hcHAudG9wYmFyLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './tableview.component';
2
+ export * from './route/tableview-route.abstract.component';
3
+ export * from './table/table.component';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZXZpZXcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcm91dGUvdGFibGV2aWV3LXJvdXRlLmFic3RyYWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlL3RhYmxlLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { Directive } from '@angular/core';
2
+ import { ActionDeleteDescriptor, ActionEditorAddDescriptor, ActionEditorEditDescriptor, ActionEditorDetailsDescriptor } from '../../../models/descriptors';
3
+ import * as i0 from "@angular/core";
4
+ export const mngTableviewRouteComponentTemplate = `
5
+ <div class="grid">
6
+ <div class="col-12">
7
+ <mng-tableview [descriptor]="descriptor" [dataProvider]="dataProvider" [actions]="actions"></mng-tableview>
8
+ </div>
9
+ </div>
10
+ `;
11
+ export class AMngTableviewRouteComponent {
12
+ constructor() {
13
+ this.descriptor = this.createTableviewDescriptor();
14
+ this.dataProvider = this.createTableviewDataProvider();
15
+ this.actions = this.createActionDescriptors();
16
+ }
17
+ createActionDescriptors() {
18
+ const actions = [];
19
+ actions.push(new ActionEditorDetailsDescriptor(this.descriptor.viewEditor));
20
+ actions.push(new ActionEditorAddDescriptor(this.descriptor.addEditor));
21
+ actions.push(new ActionEditorEditDescriptor(this.descriptor.editEditor));
22
+ actions.push(new ActionDeleteDescriptor(this.descriptor.model));
23
+ return actions;
24
+ }
25
+ }
26
+ AMngTableviewRouteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AMngTableviewRouteComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
27
+ AMngTableviewRouteComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: AMngTableviewRouteComponent, ngImport: i0 });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: AMngTableviewRouteComponent, decorators: [{
29
+ type: Directive
30
+ }], ctorParameters: function () { return []; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLmFic3RyYWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvcm91dGUvdGFibGV2aWV3LXJvdXRlLmFic3RyYWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBc0Isc0JBQXNCLEVBQW9CLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0FBR2hNLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFXOzs7Ozs7Q0FNekQsQ0FBQztBQUdGLE1BQU0sT0FBZ0IsMkJBQTJCO0lBTTdDO1FBRUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUtTLHVCQUF1QjtRQUM3QixNQUFNLE9BQU8sR0FBK0IsRUFBRSxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEUsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs7d0hBdkJpQiwyQkFBMkI7NEdBQTNCLDJCQUEyQjsyRkFBM0IsMkJBQTJCO2tCQURoRCxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3IsIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7SVRhYmxldmlld0RhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Byb3ZpZGVycyc7XG5cbmV4cG9ydCBjb25zdCBtbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudFRlbXBsYXRlOiBzdHJpbmcgPSBgXG48ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPG1uZy10YWJsZXZpZXcgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvclwiIFtkYXRhUHJvdmlkZXJdPVwiZGF0YVByb3ZpZGVyXCIgW2FjdGlvbnNdPVwiYWN0aW9uc1wiPjwvbW5nLXRhYmxldmlldz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQU1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50PFQsIFM+IHtcblxuICAgIHB1YmxpYyBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIHB1YmxpYyBkYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgcHVibGljIGFjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICkge1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IgPSB0aGlzLmNyZWF0ZVRhYmxldmlld0Rlc2NyaXB0b3IoKTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIgPSB0aGlzLmNyZWF0ZVRhYmxldmlld0RhdGFQcm92aWRlcigpO1xuICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmNyZWF0ZUFjdGlvbkRlc2NyaXB0b3JzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGNyZWF0ZVRhYmxldmlld0Rlc2NyaXB0b3IoKTogVGFibGV2aWV3RGVzY3JpcHRvcjxUPjtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY3JlYXRlVGFibGV2aWV3RGF0YVByb3ZpZGVyKCk6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8VCwgUz47XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlQWN0aW9uRGVzY3JpcHRvcnMoKTogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxUPj4ge1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgICAgICBhY3Rpb25zLnB1c2gobmV3IEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvci52aWV3RWRpdG9yKSk7XG4gICAgICAgIGFjdGlvbnMucHVzaChuZXcgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IuYWRkRWRpdG9yKSk7XG4gICAgICAgIGFjdGlvbnMucHVzaChuZXcgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3IodGhpcy5kZXNjcmlwdG9yLmVkaXRFZGl0b3IpKTtcbiAgICAgICAgYWN0aW9ucy5wdXNoKG5ldyBBY3Rpb25EZWxldGVEZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvci5tb2RlbCkpO1xuICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,173 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { Table } from 'primeng/table';
3
+ import { Observable, of, ReplaySubject } from 'rxjs';
4
+ import { finalize, first, map } from 'rxjs/operators';
5
+ import { QueryParam, QueryResult } from '../../../api/models';
6
+ import { MediusRestUtil } from '../../../api/utils';
7
+ import { MngTableCellClickEvent, MngTableLoadEvent } from '../../../models/events';
8
+ import { TemplateDirective } from '../../../directives';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "primeng/table";
11
+ import * as i2 from "@angular/common";
12
+ import * as i3 from "primeng/api";
13
+ import * as i4 from "@ngx-translate/core";
14
+ import * as i5 from "../../../pipes/property-path.pipe";
15
+ export class TableComponent {
16
+ constructor(injector) {
17
+ this.injector = injector;
18
+ // extra features input
19
+ this.selectionEnabled = false;
20
+ // event outputs
21
+ this.loadEventEmitter = new EventEmitter();
22
+ this.cellClickEventEmitter = new EventEmitter();
23
+ this.selectionChangeEventEmitter = new EventEmitter();
24
+ this.useDataProvider = false;
25
+ this.dataProviderService = null;
26
+ this.dataProviderQueryResultSubject = new ReplaySubject(1);
27
+ this.dataProviderLoadingSubject = new ReplaySubject(1);
28
+ this.rowsPerPageOptions = [10, 25, 50];
29
+ this.selection = [];
30
+ this.subscriptions = [];
31
+ }
32
+ ngOnInit() {
33
+ // initalize if default sort is set
34
+ if (this.descriptor.hasDefaultSort) {
35
+ this.multiSortMeta = this.descriptor.defaultSortProperty.map((p, idx) => ({
36
+ field: p,
37
+ order: this.descriptor.defaultSortAsc[idx] ? 1 : -1
38
+ }));
39
+ }
40
+ // check if data provider is supplied, if is, use it primarily
41
+ if (this.dataProvider) {
42
+ // map subjects to observables and initiate data
43
+ this.useDataProvider = true;
44
+ this.queryResult$ = this.dataProviderQueryResultSubject.asObservable();
45
+ this.loading$ = this.dataProviderLoadingSubject.asObservable();
46
+ const emptyQueryResult = new QueryResult();
47
+ emptyQueryResult.pageData = [];
48
+ emptyQueryResult.allDataCount = 0;
49
+ this.dataProviderLoadingSubject.next(false);
50
+ this.dataProviderQueryResultSubject.next(emptyQueryResult);
51
+ // inject service
52
+ if (this.dataProvider.serviceType) {
53
+ this.dataProviderService = this.injector.get(this.dataProvider.serviceType);
54
+ }
55
+ }
56
+ else {
57
+ // if query result is provided, use it as secondary source or else try to use items
58
+ if (this.queryResult) {
59
+ this.queryResult$ = this.queryResult instanceof Observable ? this.queryResult : of(this.queryResult);
60
+ }
61
+ else if (!this.queryResult && this.items) {
62
+ this.queryResult$ = (this.items instanceof Observable ? this.items : of(this.items)).pipe(
63
+ // distinctUntilChanged((v1, v2) => v1.length === v2.length &&
64
+ // v1.every((v1i, idx) => v1i[this.descriptor.dataKeyProperty] === v2[idx][this.descriptor.dataKeyProperty])),
65
+ map(items => {
66
+ const queryResult = new QueryResult();
67
+ queryResult.pageData = items;
68
+ queryResult.allDataCount = items.length;
69
+ return queryResult;
70
+ }));
71
+ }
72
+ if (typeof this.loading !== 'undefined') {
73
+ this.loading$ = this.loading instanceof Observable ? this.loading : of(this.loading);
74
+ }
75
+ }
76
+ }
77
+ ngAfterContentInit() {
78
+ this.templates.forEach(template => {
79
+ switch (template.getType()) {
80
+ case 'caption':
81
+ this.captionTemplate = template.template;
82
+ break;
83
+ case 'columnAction':
84
+ this.columnActionTemplate = template.template;
85
+ break;
86
+ }
87
+ });
88
+ }
89
+ ngOnDestroy() {
90
+ this.subscriptions.forEach(s => s.unsubscribe());
91
+ }
92
+ reload(emitEvent = false, resetParams = false) {
93
+ this.loadTableWithDataProvider(resetParams ? null : (this.dataProviderLatestLazyLoadEvent ?? null), emitEvent);
94
+ }
95
+ onTableLazyLoad(event) {
96
+ if (this.useDataProvider) {
97
+ this.loadTableWithDataProvider(event);
98
+ }
99
+ }
100
+ onCellClick(col, item, idx) {
101
+ const mngEvent = new MngTableCellClickEvent(col, item, idx);
102
+ this.cellClickEventEmitter.next(mngEvent);
103
+ }
104
+ onSelectionChange(event) {
105
+ this.selectionChangeEventEmitter.emit(event);
106
+ }
107
+ loadTableWithDataProvider(lazyLoadEvent, emitEvent = true) {
108
+ if (!this.useDataProvider) {
109
+ return;
110
+ }
111
+ if (this.dataProviderSubscription) {
112
+ this.dataProviderSubscription.unsubscribe();
113
+ }
114
+ this.dataProviderLoadingSubject.next(true);
115
+ this.multiSortMeta = lazyLoadEvent?.multiSortMeta;
116
+ const queryParams = lazyLoadEvent
117
+ ? MediusRestUtil.fromLazyLoadEventToQueryParams(lazyLoadEvent)
118
+ : new QueryParam();
119
+ if (!queryParams.sortProperty && this.descriptor.hasDefaultSort) {
120
+ queryParams.sortProperty = [...this.descriptor.defaultSortProperty];
121
+ queryParams.sortAsc = [...this.descriptor.defaultSortAsc];
122
+ }
123
+ this.dataProviderSubscription = this.dataProvider?.getAll(queryParams, this.dataProviderService)
124
+ .pipe(first(), finalize(() => this.dataProviderLoadingSubject.next(false)))
125
+ .subscribe(res => {
126
+ this.dataProviderLatestLazyLoadEvent = lazyLoadEvent ?? undefined;
127
+ this.dataProviderQueryResultSubject.next(res);
128
+ }, err => {
129
+ // this.messageService.add({severity: 'error', summary: 'Error', detail: 'Failed to fetch table items', life: 3000});
130
+ console.error(err);
131
+ });
132
+ if (emitEvent) {
133
+ const mngEvent = new MngTableLoadEvent();
134
+ mngEvent.originalEvent = lazyLoadEvent ?? undefined;
135
+ mngEvent.queryParam = queryParams;
136
+ this.loadEventEmitter.next(mngEvent);
137
+ }
138
+ }
139
+ }
140
+ TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
141
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TableComponent, selector: "mng-table", inputs: { descriptor: "descriptor", items: "items", queryResult: "queryResult", loading: "loading", dataProvider: "dataProvider", selectionEnabled: "selectionEnabled" }, outputs: { loadEventEmitter: "onLoad", cellClickEventEmitter: "onCellClick", selectionChangeEventEmitter: "onSelectionChange" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "primeTable", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<p-table [value]=\"(queryResult$ | async)?.pageData ?? []\"\n [dataKey]=\"$any(descriptor.dataKeyProperty)\"\n [lazy]=\"useDataProvider\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n [loading]=\"(loading$ | async) ?? false\"\n [paginator]=\"useDataProvider\"\n [rows]=\"rowsPerPageOptions[0]\"\n [totalRecords]=\"(queryResult$ | async)?.allDataCount ?? 0\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"$any(multiSortMeta)\"\n sortMode=\"multiple\"\n [(selection)]=\"selection\"\n (selectionChange)=\"onSelectionChange($event)\"\n responsiveLayout=\"scroll\">\n {{ descriptor.hasDefaultSort}}\n\n <ng-template *ngIf=\"captionTemplate || descriptor.title\" pTemplate=\"caption\">\n <ng-container *ngIf=\"captionTemplate; else defaultCaption\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultCaption>\n <h5 class=\"p-m-0\">{{ descriptor.title }}</h5>\n </ng-template>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngIf=\"selectionEnabled\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <ng-container *ngFor=\"let col of descriptor.columns\">\n <th *ngIf=\"col.isSortEnabled\" [pSortableColumn]=\"col.property\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ descriptor.model.typeName + \".properties.\" + col.property | translate }}\n <p-sortIcon [field]=\"col.property\"></p-sortIcon>\n <p-columnFilter *ngIf=\"col.isFilterEnabled\" class=\"ml-auto\" type=\"text\" display=\"menu\" matchMode=\"equals\"\n [field]=\"col.property\"\n [showOperator]=\"false\" [showAddButton]=\"false\" [hideOnClear]=\"true\">\n </p-columnFilter>\n </div>\n </th>\n <th *ngIf=\"!col.isSortEnabled\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ descriptor.model.typeName + \".properties.\" + col.property | translate }}\n <p-columnFilter *ngIf=\"col.isFilterEnabled\" class=\"ml-auto\" type=\"text\" display=\"menu\" matchMode=\"equals\"\n [field]=\"col.property\"\n [showOperator]=\"false\" [showAddButton]=\"false\" [hideOnClear]=\"true\">\n </p-columnFilter>\n </div>\n </th>\n </ng-container>\n <th *ngIf=\"columnActionTemplate\"></th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\">\n <tr>\n <td *ngIf=\"selectionEnabled\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <td *ngFor=\"let col of descriptor.columns\" (click)=\"onCellClick(col, item, idx)\" class=\"clickable\">\n {{ col.displayPropertyPath ? (item | propertyPath: col.displayPropertyPath) : item[col.property] }}\n </td>\n <td *ngIf=\"columnActionTemplate\" class=\"text-right\">\n <ng-container *ngTemplateOutlet=\"columnActionTemplate; context: { rowItem: item, rowIndex: idx }\"></ng-container>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n</p-table>\n", components: [{ type: i1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i1.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i1.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i1.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping"] }, { type: i1.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }], pipes: { "async": i2.AsyncPipe, "translate": i4.TranslatePipe, "propertyPath": i5.PropertyPathPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'mng-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-table [value]=\"(queryResult$ | async)?.pageData ?? []\"\n [dataKey]=\"$any(descriptor.dataKeyProperty)\"\n [lazy]=\"useDataProvider\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n [loading]=\"(loading$ | async) ?? false\"\n [paginator]=\"useDataProvider\"\n [rows]=\"rowsPerPageOptions[0]\"\n [totalRecords]=\"(queryResult$ | async)?.allDataCount ?? 0\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"$any(multiSortMeta)\"\n sortMode=\"multiple\"\n [(selection)]=\"selection\"\n (selectionChange)=\"onSelectionChange($event)\"\n responsiveLayout=\"scroll\">\n {{ descriptor.hasDefaultSort}}\n\n <ng-template *ngIf=\"captionTemplate || descriptor.title\" pTemplate=\"caption\">\n <ng-container *ngIf=\"captionTemplate; else defaultCaption\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultCaption>\n <h5 class=\"p-m-0\">{{ descriptor.title }}</h5>\n </ng-template>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngIf=\"selectionEnabled\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <ng-container *ngFor=\"let col of descriptor.columns\">\n <th *ngIf=\"col.isSortEnabled\" [pSortableColumn]=\"col.property\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ descriptor.model.typeName + \".properties.\" + col.property | translate }}\n <p-sortIcon [field]=\"col.property\"></p-sortIcon>\n <p-columnFilter *ngIf=\"col.isFilterEnabled\" class=\"ml-auto\" type=\"text\" display=\"menu\" matchMode=\"equals\"\n [field]=\"col.property\"\n [showOperator]=\"false\" [showAddButton]=\"false\" [hideOnClear]=\"true\">\n </p-columnFilter>\n </div>\n </th>\n <th *ngIf=\"!col.isSortEnabled\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ descriptor.model.typeName + \".properties.\" + col.property | translate }}\n <p-columnFilter *ngIf=\"col.isFilterEnabled\" class=\"ml-auto\" type=\"text\" display=\"menu\" matchMode=\"equals\"\n [field]=\"col.property\"\n [showOperator]=\"false\" [showAddButton]=\"false\" [hideOnClear]=\"true\">\n </p-columnFilter>\n </div>\n </th>\n </ng-container>\n <th *ngIf=\"columnActionTemplate\"></th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\">\n <tr>\n <td *ngIf=\"selectionEnabled\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <td *ngFor=\"let col of descriptor.columns\" (click)=\"onCellClick(col, item, idx)\" class=\"clickable\">\n {{ col.displayPropertyPath ? (item | propertyPath: col.displayPropertyPath) : item[col.property] }}\n </td>\n <td *ngIf=\"columnActionTemplate\" class=\"text-right\">\n <ng-container *ngTemplateOutlet=\"columnActionTemplate; context: { rowItem: item, rowIndex: idx }\"></ng-container>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n</p-table>\n" }]
145
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { descriptor: [{
146
+ type: Input
147
+ }], items: [{
148
+ type: Input
149
+ }], queryResult: [{
150
+ type: Input
151
+ }], loading: [{
152
+ type: Input
153
+ }], dataProvider: [{
154
+ type: Input
155
+ }], selectionEnabled: [{
156
+ type: Input
157
+ }], loadEventEmitter: [{
158
+ type: Output,
159
+ args: ['onLoad']
160
+ }], cellClickEventEmitter: [{
161
+ type: Output,
162
+ args: ['onCellClick']
163
+ }], selectionChangeEventEmitter: [{
164
+ type: Output,
165
+ args: ['onSelectionChange']
166
+ }], templates: [{
167
+ type: ContentChildren,
168
+ args: [TemplateDirective]
169
+ }], primeTable: [{
170
+ type: ViewChild,
171
+ args: [Table]
172
+ }] } });
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW5nLWNvbW1vbnMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQVksS0FBSyxFQUFxQixNQUFNLEVBQTBCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqTSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNqRSxPQUFPLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUlsRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU90RCxNQUFNLE9BQU8sY0FBYztJQTBDdkIsWUFBb0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQS9CdEMsdUJBQXVCO1FBQ1AscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWxELGdCQUFnQjtRQUNVLHFCQUFnQixHQUFH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QUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFHVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBR29CLGdCQUFnQjtzQkFBekMsTUFBTTt1QkFBQyxRQUFRO2dCQUNlLHFCQUFxQjtzQkFBbkQsTUFBTTt1QkFBQyxhQUFhO2dCQUNnQiwyQkFBMkI7c0JBQS9ELE1BQU07dUJBQUMsbUJBQW1CO2dCQUdTLFNBQVM7c0JBQTVDLGVBQWU7dUJBQUMsaUJBQWlCO2dCQUNSLFVBQVU7c0JBQW5DLFNBQVM7dUJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJDb250ZW50SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUYWJsZX0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQge0xhenlMb2FkRXZlbnQsIFNvcnRNZXRhfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZSwgZmlyc3QsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1F1ZXJ5UGFyYW0sIFF1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7TWVkaXVzUmVzdFV0aWx9IGZyb20gJy4uLy4uLy4uL2FwaS91dGlscyc7XG5cbmltcG9ydCB7VGFibGVEZXNjcmlwdG9yLCBDb2x1bW5EZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVGFibGVEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wcm92aWRlcnMnO1xuaW1wb3J0IHtNbmdUYWJsZUNlbGxDbGlja0V2ZW50LCBNbmdUYWJsZUxvYWRFdmVudH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50cyc7XG5pbXBvcnQge1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBtZXRhZGF0YSBpbnB1dFxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZXNjcmlwdG9yITogVGFibGVEZXNjcmlwdG9yPFQ+O1xuICAgIFxuICAgIC8vIGRhdGEgc291cmNlIGlucHV0c1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtcz86IE9ic2VydmFibGU8QXJyYXk8VD4+fEFycmF5PFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBxdWVyeVJlc3VsdD86IE9ic2VydmFibGU8UXVlcnlSZXN1bHQ8VD4+fFF1ZXJ5UmVzdWx0PFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nPzogT2JzZXJ2YWJsZTxib29sZWFuPnxib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJVGFibGVEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICBcbiAgICAvLyBleHRyYSBmZWF0dXJlcyBpbnB1dFxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3Rpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBldmVudCBvdXRwdXRzXG4gICAgQE91dHB1dCgnb25Mb2FkJykgcHJpdmF0ZSBsb2FkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUxvYWRFdmVudD4oKTtcbiAgICBAT3V0cHV0KCdvbkNlbGxDbGljaycpIHByaXZhdGUgY2VsbENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoJ29uU2VsZWN0aW9uQ2hhbmdlJykgcHJpdmF0ZSBzZWxlY3Rpb25DaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuXG4gICAgLy8gY29udGVudCBhbmQgdmlldyBxdWVyaWVzXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPjtcbiAgICBAVmlld0NoaWxkKFRhYmxlKSBwcml2YXRlIHByaW1lVGFibGUhOiBUYWJsZTtcblxuICAgIHB1YmxpYyBjYXB0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHB1YmxpYyBjb2x1bW5BY3Rpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwdWJsaWMgdXNlRGF0YVByb3ZpZGVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIHF1ZXJ5UmVzdWx0JD86IE9ic2VydmFibGU8UXVlcnlSZXN1bHQ8VD4+O1xuICAgIHB1YmxpYyBsb2FkaW5nJD86IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJTZXJ2aWNlOiBhbnkgPSBudWxsO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8UXVlcnlSZXN1bHQ8VD4+KDEpO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnQ/OiBMYXp5TG9hZEV2ZW50O1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHJvd3NQZXJQYWdlT3B0aW9ucyA9IFsxMCwgMjUsIDUwXTtcbiAgICBwdWJsaWMgbXVsdGlTb3J0TWV0YT86IFNvcnRNZXRhW107XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBBcnJheTxUPiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG5cbiAgICAgICAgLy8gaW5pdGFsaXplIGlmIGRlZmF1bHQgc29ydCBpcyBzZXRcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5oYXNEZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNvcnRNZXRhID0gdGhpcy5kZXNjcmlwdG9yLmRlZmF1bHRTb3J0UHJvcGVydHkubWFwKChwLCBpZHgpID0+IDxTb3J0TWV0YT57XG4gICAgICAgICAgICAgICAgZmllbGQ6IHAsXG4gICAgICAgICAgICAgICAgb3JkZXI6IHRoaXMuZGVzY3JpcHRvci5kZWZhdWx0U29ydEFzY1tpZHhdID8gMSA6IC0xXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBpZiBkYXRhIHByb3ZpZGVyIGlzIHN1cHBsaWVkLCBpZiBpcywgdXNlIGl0IHByaW1hcmlseVxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIC8vIG1hcCBzdWJqZWN0cyB0byBvYnNlcnZhYmxlcyBhbmQgaW5pdGlhdGUgZGF0YVxuICAgICAgICAgICAgdGhpcy51c2VEYXRhUHJvdmlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCQgPSB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgY29uc3QgZW1wdHlRdWVyeVJlc3VsdCA9IG5ldyBRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5wYWdlRGF0YSA9IFtdO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5hbGxEYXRhQ291bnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0Lm5leHQoZW1wdHlRdWVyeVJlc3VsdClcblxuICAgICAgICAgICAgLy8gaW5qZWN0IHNlcnZpY2VcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PGFueT4odGhpcy5kYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgcXVlcnkgcmVzdWx0IGlzIHByb3ZpZGVkLCB1c2UgaXQgYXMgc2Vjb25kYXJ5IHNvdXJjZSBvciBlbHNlIHRyeSB0byB1c2UgaXRlbXNcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCQgPSB0aGlzLnF1ZXJ5UmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHRoaXMucXVlcnlSZXN1bHQgOiBvZih0aGlzLnF1ZXJ5UmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucXVlcnlSZXN1bHQgJiYgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHQkID0gKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gdGhpcy5pdGVtcyA6IG9mKHRoaXMuaXRlbXMpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgodjEsIHYyKSA9PiB2MS5sZW5ndGggPT09IHYyLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdjEuZXZlcnkoKHYxaSwgaWR4KSA9PiB2MWlbdGhpcy5kZXNjcmlwdG9yLmRhdGFLZXlQcm9wZXJ0eV0gPT09IHYyW2lkeF1bdGhpcy5kZXNjcmlwdG9yLmRhdGFLZXlQcm9wZXJ0eV0pKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gbmV3IFF1ZXJ5UmVzdWx0PFQ+KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdC5wYWdlRGF0YSA9IGl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQuYWxsRGF0YUNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9hZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5sb2FkaW5nIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHRoaXMubG9hZGluZyA6IG9mKHRoaXMubG9hZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCh0ZW1wbGF0ZS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnY29sdW1uQWN0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZChlbWl0RXZlbnQ6IGJvb2xlYW4gPSBmYWxzZSwgcmVzZXRQYXJhbXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIocmVzZXRQYXJhbXMgPyBudWxsIDogKHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudCA/PyBudWxsKSwgZW1pdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLnVzZURhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNlbGxDbGljayhjb2w6IENvbHVtbkRlc2NyaXB0b3I8YW55PiwgaXRlbTogVCwgaWR4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbW5nRXZlbnQgPSBuZXcgTW5nVGFibGVDZWxsQ2xpY2tFdmVudDxUPihjb2wsIGl0ZW0sIGlkeCk7XG4gICAgICAgIHRoaXMuY2VsbENsaWNrRXZlbnRFbWl0dGVyLm5leHQobW5nRXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShldmVudDogQXJyYXk8VD4pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VFdmVudEVtaXR0ZXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKGxhenlMb2FkRXZlbnQ6IExhenlMb2FkRXZlbnR8bnVsbCwgZW1pdEV2ZW50OiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXRoaXMudXNlRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBsYXp5TG9hZEV2ZW50Py5tdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGxhenlMb2FkRXZlbnRcbiAgICAgICAgICAgID8gTWVkaXVzUmVzdFV0aWwuZnJvbUxhenlMb2FkRXZlbnRUb1F1ZXJ5UGFyYW1zKGxhenlMb2FkRXZlbnQpXG4gICAgICAgICAgICA6IG5ldyBRdWVyeVBhcmFtKCk7XG4gICAgICAgIGlmICghcXVlcnlQYXJhbXMuc29ydFByb3BlcnR5ICYmIHRoaXMuZGVzY3JpcHRvci5oYXNEZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMuc29ydFByb3BlcnR5ID0gWy4uLnRoaXMuZGVzY3JpcHRvci5kZWZhdWx0U29ydFByb3BlcnR5XTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLnNvcnRBc2MgPSBbLi4udGhpcy5kZXNjcmlwdG9yLmRlZmF1bHRTb3J0QXNjXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhUHJvdmlkZXI/LmdldEFsbChxdWVyeVBhcmFtcywgdGhpcy5kYXRhUHJvdmlkZXJTZXJ2aWNlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudCA9IGxhenlMb2FkRXZlbnQgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0Lm5leHQocmVzKTtcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe3NldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdGYWlsZWQgdG8gZmV0Y2ggdGFibGUgaXRlbXMnLCBsaWZlOiAzMDAwfSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgICAgY29uc3QgbW5nRXZlbnQgPSBuZXcgTW5nVGFibGVMb2FkRXZlbnQoKTtcbiAgICAgICAgICAgIG1uZ0V2ZW50Lm9yaWdpbmFsRXZlbnQgPSBsYXp5TG9hZEV2ZW50ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG1uZ0V2ZW50LnF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtcztcbiAgICAgICAgICAgIHRoaXMubG9hZEV2ZW50RW1pdHRlci5uZXh0KG1uZ0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxwLXRhYmxlIFt2YWx1ZV09XCIocXVlcnlSZXN1bHQkIHwgYXN5bmMpPy5wYWdlRGF0YSA/PyBbXVwiXG4gICAgICAgICBbZGF0YUtleV09XCIkYW55KGRlc2NyaXB0b3IuZGF0YUtleVByb3BlcnR5KVwiXG4gICAgICAgICBbbGF6eV09XCJ1c2VEYXRhUHJvdmlkZXJcIlxuICAgICAgICAgKG9uTGF6eUxvYWQpPVwib25UYWJsZUxhenlMb2FkKCRldmVudClcIlxuICAgICAgICAgW2xvYWRpbmddPVwiKGxvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgIFtwYWdpbmF0b3JdPVwidXNlRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgIFtyb3dzXT1cInJvd3NQZXJQYWdlT3B0aW9uc1swXVwiXG4gICAgICAgICBbdG90YWxSZWNvcmRzXT1cIihxdWVyeVJlc3VsdCQgfCBhc3luYyk/LmFsbERhdGFDb3VudCA/PyAwXCJcbiAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgICBbY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZV09XCInbW5nVGFibGUucGFnaW5hdGlvbk1zZycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgW211bHRpU29ydE1ldGFdPVwiJGFueShtdWx0aVNvcnRNZXRhKVwiXG4gICAgICAgICBzb3J0TW9kZT1cIm11bHRpcGxlXCJcbiAgICAgICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3Rpb25cIlxuICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIj5cbiAgICB7eyBkZXNjcmlwdG9yLmhhc0RlZmF1bHRTb3J0fX1cblxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNhcHRpb25UZW1wbGF0ZSB8fCBkZXNjcmlwdG9yLnRpdGxlXCIgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FwdGlvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRDYXB0aW9uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FwdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDYXB0aW9uPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwicC1tLTBcIj57eyBkZXNjcmlwdG9yLnRpdGxlIH19PC9oNT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZGVzY3JpcHRvci5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiY29sLmlzU29ydEVuYWJsZWRcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5wcm9wZXJ0eVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2NyaXB0b3IubW9kZWwudHlwZU5hbWUgKyBcIi5wcm9wZXJ0aWVzLlwiICsgY29sLnByb3BlcnR5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLnByb3BlcnR5XCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyICpuZ0lmPVwiY29sLmlzRmlsdGVyRW5hYmxlZFwiIGNsYXNzPVwibWwtYXV0b1wiIHR5cGU9XCJ0ZXh0XCIgZGlzcGxheT1cIm1lbnVcIiBtYXRjaE1vZGU9XCJlcXVhbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wucHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93T3BlcmF0b3JdPVwiZmFsc2VcIiBbc2hvd0FkZEJ1dHRvbl09XCJmYWxzZVwiIFtoaWRlT25DbGVhcl09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFjb2wuaXNTb3J0RW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2NyaXB0b3IubW9kZWwudHlwZU5hbWUgKyBcIi5wcm9wZXJ0aWVzLlwiICsgY29sLnByb3BlcnR5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgKm5nSWY9XCJjb2wuaXNGaWx0ZXJFbmFibGVkXCIgY2xhc3M9XCJtbC1hdXRvXCIgdHlwZT1cInRleHRcIiBkaXNwbGF5PVwibWVudVwiIG1hdGNoTW9kZT1cImVxdWFsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5wcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dPcGVyYXRvcl09XCJmYWxzZVwiIFtzaG93QWRkQnV0dG9uXT1cImZhbHNlXCIgW2hpZGVPbkNsZWFyXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDx0aCAqbmdJZj1cImNvbHVtbkFjdGlvblRlbXBsYXRlXCI+PC90aD5cbiAgICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtaXRlbSBsZXQtaWR4PVwicm93SW5kZXhcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uRW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVDaGVja2JveD5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBkZXNjcmlwdG9yLmNvbHVtbnNcIiAoY2xpY2spPVwib25DZWxsQ2xpY2soY29sLCBpdGVtLCBpZHgpXCIgIGNsYXNzPVwiY2xpY2thYmxlXCI+XG4gICAgICAgICAgICAgICAge3sgY29sLmRpc3BsYXlQcm9wZXJ0eVBhdGggPyAoaXRlbSB8IHByb3BlcnR5UGF0aDogY29sLmRpc3BsYXlQcm9wZXJ0eVBhdGgpIDogaXRlbVtjb2wucHJvcGVydHldIH19XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uQWN0aW9uVGVtcGxhdGVcIiBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uQWN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHsgcm93SXRlbTogaXRlbSwgcm93SW5kZXg6IGlkeCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImRlc2NyaXB0b3IuY29sdW1ucy5sZW5ndGggKyAoY29sdW1uQWN0aW9uVGVtcGxhdGUgPyAxIDogMCkgKyAoc2VsZWN0aW9uRW5hYmxlZCA/IDEgOiAwKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdtbmdUYWJsZS5ub0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9wLXRhYmxlPlxuIl19
@@ -0,0 +1,82 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { ConfirmationService, MessageService } from 'primeng/api';
3
+ import { ActionPositionEnum } from '../../models/descriptors';
4
+ import { TableComponent } from './table/table.component';
5
+ import { TableviewComponentService } from './tableview.component.service';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ import * as i2 from "primeng/api";
9
+ import * as i3 from "@ngx-translate/core";
10
+ import * as i4 from "primeng/dynamicdialog";
11
+ import * as i5 from "../../services";
12
+ import * as i6 from "./tableview.component.service";
13
+ import * as i7 from "primeng/toast";
14
+ import * as i8 from "primeng/toolbar";
15
+ import * as i9 from "../action/action.component";
16
+ import * as i10 from "./table/table.component";
17
+ import * as i11 from "@angular/common";
18
+ import * as i12 from "../../directives/template.directive";
19
+ import * as i13 from "primeng/inputtext";
20
+ export class TableviewComponent {
21
+ constructor(route, messageService, translateService, dialogService, confirmationService, actionService, tableviewService) {
22
+ this.route = route;
23
+ this.messageService = messageService;
24
+ this.translateService = translateService;
25
+ this.dialogService = dialogService;
26
+ this.confirmationService = confirmationService;
27
+ this.actionService = actionService;
28
+ this.tableviewService = tableviewService;
29
+ this.actions = [];
30
+ this.tableComponent = null;
31
+ this.rowClickActions = [];
32
+ this.rowInlineActions = [];
33
+ this.toolbarLeftActions = [];
34
+ this.toolbarRightActions = [];
35
+ }
36
+ ngOnInit() {
37
+ this.tableviewService.actions = this.actions;
38
+ this.tableviewService.dataProvider = this.dataProvider;
39
+ for (const action of this.actions) {
40
+ switch (action.position) {
41
+ case ActionPositionEnum.RowClick:
42
+ this.rowClickActions.push(action);
43
+ break;
44
+ case ActionPositionEnum.RowInline:
45
+ this.rowInlineActions.push(action);
46
+ break;
47
+ case ActionPositionEnum.ToolbarLeft:
48
+ this.toolbarLeftActions.push(action);
49
+ break;
50
+ case ActionPositionEnum.ToolbarRight:
51
+ this.toolbarRightActions.push(action);
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ reloadTable() {
57
+ this.tableComponent?.reload();
58
+ }
59
+ onTableCellClick(event) {
60
+ if (this.rowClickActions.length) {
61
+ for (const action of this.rowClickActions) {
62
+ this.actionService.triggerRowClickAction(action, event, this.route);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ TableviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableviewComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.MessageService }, { token: i3.TranslateService }, { token: i4.DialogService }, { token: i2.ConfirmationService }, { token: i5.ActionService }, { token: i6.TableviewComponentService }], target: i0.ɵɵFactoryTarget.Component });
68
+ TableviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TableviewComponent, selector: "mng-tableview", inputs: { descriptor: "descriptor", dataProvider: "dataProvider", actions: "actions" }, providers: [MessageService, ConfirmationService, TableviewComponentService], viewQueries: [{ propertyName: "tableComponent", first: true, predicate: TableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mng-tableview\">\n\t<p-toast></p-toast>\n\n\t<div class=\"card\">\n\t\t<p-toolbar styleClass=\"mb-4\">\n\t\t\t<ng-template pTemplate=\"left\">\n\t\t\t\t<mng-action *ngFor=\"let action of toolbarLeftActions\"\n\t\t\t\t\t\t\t[action]=\"action\">\n\t\t\t\t</mng-action>\n\t\t\t</ng-template>\n\n\t\t\t<ng-template pTemplate=\"right\">\n\t\t\t\t<mng-action *ngFor=\"let action of toolbarRightActions\"\n\t\t\t\t\t\t\t[action]=\"action\">\n\t\t\t\t</mng-action>\n\t\t\t</ng-template>\n\t\t</p-toolbar>\n\n\t\t<mng-table [descriptor]=\"descriptor.table\"\n\t\t\t\t [dataProvider]=\"dataProvider\"\n\t\t\t\t (onCellClick)=\"onTableCellClick($event)\">\n\t\t\t<ng-template mngTemplate=\"caption\">\n\t\t\t\t<div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n\t\t\t\t\t<h5 class=\"p-m-0\">{{ descriptor.tableTitle | translate }}</h5>\n\t\t\t\t\t<span class=\"p-input-icon-left\">\n\t\t\t\t\t\t<i class=\"pi pi-search\"></i>\n\t\t\t\t\t\t<input pInputText type=\"text\" [placeholder]=\"'mngTable.search' | translate\" />\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n\t\t\t\t<mng-action *ngFor=\"let action of rowInlineActions\"\n\t\t\t\t\t\t\t[action]=\"action\" [item]=\"item\" [itemId]=\"descriptor.model.idPropertyName ? item[descriptor.model.idPropertyName] : null\">\n\t\t\t\t</mng-action>\n\t\t\t</ng-template>\n\t\t</mng-table>\n\t</div>\n\n\t<router-outlet></router-outlet>\n</div>\n", components: [{ type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i8.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { type: i9.ActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData"] }, { type: i10.TableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "selectionEnabled"], outputs: ["onLoad", "onCellClick", "onSelectionChange"] }], directives: [{ type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.TemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i13.InputText, selector: "[pInputText]" }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], pipes: { "translate": i3.TranslatePipe } });
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableviewComponent, decorators: [{
70
+ type: Component,
71
+ args: [{ selector: 'mng-tableview', providers: [MessageService, ConfirmationService, TableviewComponentService], template: "<div class=\"mng-tableview\">\n\t<p-toast></p-toast>\n\n\t<div class=\"card\">\n\t\t<p-toolbar styleClass=\"mb-4\">\n\t\t\t<ng-template pTemplate=\"left\">\n\t\t\t\t<mng-action *ngFor=\"let action of toolbarLeftActions\"\n\t\t\t\t\t\t\t[action]=\"action\">\n\t\t\t\t</mng-action>\n\t\t\t</ng-template>\n\n\t\t\t<ng-template pTemplate=\"right\">\n\t\t\t\t<mng-action *ngFor=\"let action of toolbarRightActions\"\n\t\t\t\t\t\t\t[action]=\"action\">\n\t\t\t\t</mng-action>\n\t\t\t</ng-template>\n\t\t</p-toolbar>\n\n\t\t<mng-table [descriptor]=\"descriptor.table\"\n\t\t\t\t [dataProvider]=\"dataProvider\"\n\t\t\t\t (onCellClick)=\"onTableCellClick($event)\">\n\t\t\t<ng-template mngTemplate=\"caption\">\n\t\t\t\t<div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n\t\t\t\t\t<h5 class=\"p-m-0\">{{ descriptor.tableTitle | translate }}</h5>\n\t\t\t\t\t<span class=\"p-input-icon-left\">\n\t\t\t\t\t\t<i class=\"pi pi-search\"></i>\n\t\t\t\t\t\t<input pInputText type=\"text\" [placeholder]=\"'mngTable.search' | translate\" />\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t\t<ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n\t\t\t\t<mng-action *ngFor=\"let action of rowInlineActions\"\n\t\t\t\t\t\t\t[action]=\"action\" [item]=\"item\" [itemId]=\"descriptor.model.idPropertyName ? item[descriptor.model.idPropertyName] : null\">\n\t\t\t\t</mng-action>\n\t\t\t</ng-template>\n\t\t</mng-table>\n\t</div>\n\n\t<router-outlet></router-outlet>\n</div>\n" }]
72
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.MessageService }, { type: i3.TranslateService }, { type: i4.DialogService }, { type: i2.ConfirmationService }, { type: i5.ActionService }, { type: i6.TableviewComponentService }]; }, propDecorators: { descriptor: [{
73
+ type: Input
74
+ }], dataProvider: [{
75
+ type: Input
76
+ }], actions: [{
77
+ type: Input
78
+ }], tableComponent: [{
79
+ type: ViewChild,
80
+ args: [TableComponent]
81
+ }] } });
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlsRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBT2hFLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU94RSxNQUFNLE9BQU8sa0JBQWtCO0lBYTNCLFlBQ1ksS0FBcUIsRUFDckIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxhQUE0QixFQUM1QixnQkFBaUQ7UUFOakQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlDO1FBaEJwRCxZQUFPLEdBQStCLEVBQUUsQ0FBQztRQUV2QixtQkFBYyxHQUEyQixJQUFJLENBQUM7UUFFbEUsb0JBQWUsR0FBMEIsRUFBRSxDQUFDO1FBQzVDLHFCQUFnQixHQUEwQixFQUFFLENBQUM7UUFDN0MsdUJBQWtCLEdBQTBCLEVBQUUsQ0FBQztRQUMvQyx3QkFBbUIsR0FBMEIsRUFBRSxDQUFDO0lBV3ZELENBQUM7SUFFRCxRQUFRO1FBRUosSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2RCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsUUFBUSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUNyQixLQUFLLGtCQUFrQixDQUFDLFFBQVE7b0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsU0FBUztvQkFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtnQkFDVixLQUFLLGtCQUFrQixDQUFDLFdBQVc7b0JBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JDLE1BQU07Z0JBQ1YsS0FBSyxrQkFBa0IsQ0FBQyxZQUFZO29CQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxNQUFNO2FBQ2I7U0FDSjtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBZ0M7UUFDcEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM3QixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkU7U0FDSjtJQUNMLENBQUM7OytHQXhEUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixnSUFGaEIsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLENBQUMsMEVBUWhFLGNBQWMsZ0RDMUI3QiwrK0NBd0NBOzJGRHBCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0ksZUFBZSxhQUVkLENBQUMsY0FBYyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDO21TQUlsRSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVxQixjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5cbmltcG9ydCB7QWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9tb2RlbHMvZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvdmlkZXJzJztcbmltcG9ydCB7TW5nVGFibGVDZWxsQ2xpY2tFdmVudH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V2ZW50cyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvblBvc2l0aW9uRW51bX0gZnJvbSAnLi4vLi4vbW9kZWxzL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7VGFibGVDb21wb25lbnR9IGZyb20gJy4vdGFibGUvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGV2aWV3Q29tcG9uZW50U2VydmljZX0gZnJvbSAnLi90YWJsZXZpZXcuY29tcG9uZW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlLCBDb25maXJtYXRpb25TZXJ2aWNlLCBUYWJsZXZpZXdDb21wb25lbnRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdDb21wb25lbnQ8VCwgUz4gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgZGVzY3JpcHRvciE6IFRhYmxldmlld0Rlc2NyaXB0b3I8VD47XG4gICAgQElucHV0KCkgZGF0YVByb3ZpZGVyPzogSVRhYmxldmlld0RhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoKSBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgQFZpZXdDaGlsZChUYWJsZUNvbXBvbmVudCkgdGFibGVDb21wb25lbnQ6IFRhYmxlQ29tcG9uZW50PFQ+fG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHJvd0NsaWNrQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHJvd0lubGluZUFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0YWJsZXZpZXdTZXJ2aWNlOiBUYWJsZXZpZXdDb21wb25lbnRTZXJ2aWNlPFQsIFM+XG4gICAgKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG5cbiAgICAgICAgdGhpcy50YWJsZXZpZXdTZXJ2aWNlLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIHRoaXMudGFibGV2aWV3U2VydmljZS5kYXRhUHJvdmlkZXIgPSB0aGlzLmRhdGFQcm92aWRlcjtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0NsaWNrQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dJbmxpbmVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckxlZnRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWxvYWRUYWJsZSgpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudD8ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVDZWxsQ2xpY2soZXZlbnQ6IE1uZ1RhYmxlQ2VsbENsaWNrRXZlbnQ8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMucm93Q2xpY2tBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5yb3dDbGlja0FjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvblNlcnZpY2UudHJpZ2dlclJvd0NsaWNrQWN0aW9uKGFjdGlvbiwgZXZlbnQsIHRoaXMucm91dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1uZy10YWJsZXZpZXdcIj5cblx0PHAtdG9hc3Q+PC9wLXRvYXN0PlxuXG5cdDxkaXYgY2xhc3M9XCJjYXJkXCI+XG5cdFx0PHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibWItNFwiPlxuXHRcdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cblx0XHRcdFx0PG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyTGVmdEFjdGlvbnNcIlxuXHRcdFx0XHRcdFx0XHRbYWN0aW9uXT1cImFjdGlvblwiPlxuXHRcdFx0XHQ8L21uZy1hY3Rpb24+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXG5cdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cblx0XHRcdFx0PG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zXCJcblx0XHRcdFx0XHRcdFx0W2FjdGlvbl09XCJhY3Rpb25cIj5cblx0XHRcdFx0PC9tbmctYWN0aW9uPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L3AtdG9vbGJhcj5cblxuXHRcdDxtbmctdGFibGUgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci50YWJsZVwiXG5cdFx0XHRcdCAgIFtkYXRhUHJvdmlkZXJdPVwiZGF0YVByb3ZpZGVyXCJcblx0XHRcdFx0ICAgKG9uQ2VsbENsaWNrKT1cIm9uVGFibGVDZWxsQ2xpY2soJGV2ZW50KVwiPlxuXHRcdFx0PG5nLXRlbXBsYXRlIG1uZ1RlbXBsYXRlPVwiY2FwdGlvblwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBtZDpmbGV4LXJvdyBtZDpqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB0YWJsZS1oZWFkZXJcIj5cblx0XHRcdFx0XHQ8aDUgY2xhc3M9XCJwLW0tMFwiPnt7IGRlc2NyaXB0b3IudGFibGVUaXRsZSB8IHRyYW5zbGF0ZSB9fTwvaDU+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxuXHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG5cdFx0XHRcdFx0XHQ8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCInbW5nVGFibGUuc2VhcmNoJyB8IHRyYW5zbGF0ZVwiIC8+XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8bmctdGVtcGxhdGUgbW5nVGVtcGxhdGU9XCJjb2x1bW5BY3Rpb25cIiBsZXQtaXRlbT1cInJvd0l0ZW1cIj5cblx0XHRcdFx0PG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dJbmxpbmVBY3Rpb25zXCJcblx0XHRcdFx0XHRcdFx0W2FjdGlvbl09XCJhY3Rpb25cIiBbaXRlbV09XCJpdGVtXCIgW2l0ZW1JZF09XCJkZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHlOYW1lID8gaXRlbVtkZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHlOYW1lXSA6IG51bGxcIj5cblx0XHRcdFx0PC9tbmctYWN0aW9uPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L21uZy10YWJsZT5cblx0PC9kaXY+XG5cblx0PHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ // TODO: check if legit solution
4
+ export class TableviewComponentService {
5
+ constructor() {
6
+ this.actions = [];
7
+ console.log('TableviewComponentService init.');
8
+ }
9
+ reloadTable() {
10
+ // TODO: add callback functions to implement
11
+ }
12
+ }
13
+ TableviewComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableviewComponentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
+ TableviewComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableviewComponentService });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TableviewComponentService, decorators: [{
16
+ type: Injectable
17
+ }], ctorParameters: function () { return []; } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW5nLWNvbW1vbnMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy90YWJsZXZpZXcuY29tcG9uZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLekMsZ0NBQWdDO0FBRWhDLE1BQU0sT0FBTyx5QkFBeUI7SUFLbEM7UUFGQSxZQUFPLEdBQStCLEVBQUUsQ0FBQztRQUdyQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFdBQVc7UUFDUCw0Q0FBNEM7SUFDaEQsQ0FBQzs7c0hBWFEseUJBQXlCOzBIQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7SVRhYmxldmlld0RhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uLy4uL21vZGVscy9kZXNjcmlwdG9ycyc7XG5cbi8vIFRPRE86IGNoZWNrIGlmIGxlZ2l0IHNvbHV0aW9uXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3Q29tcG9uZW50U2VydmljZTxULCBTPiB7XG5cbiAgICBkYXRhUHJvdmlkZXI/OiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIGFjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3I8VD4+ID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RhYmxldmlld0NvbXBvbmVudFNlcnZpY2UgaW5pdC4nKTtcbiAgICB9XG5cbiAgICByZWxvYWRUYWJsZSgpIHtcbiAgICAgICAgLy8gVE9ETzogYWRkIGNhbGxiYWNrIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnRcbiAgICB9XG59XG4iXX0=