@universis/ngx-tables 0.8.5 → 15.0.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 (163) hide show
  1. package/esm2020/lib/actions/table.actions.mjs +27 -0
  2. package/esm2020/lib/advanced-aggregator.mjs +2 -0
  3. package/esm2020/lib/components/add-items/add-items.component.mjs +138 -0
  4. package/esm2020/lib/components/advanced-aggregator/advanced-aggregator.component.mjs +126 -0
  5. package/esm2020/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.mjs +53 -0
  6. package/esm2020/lib/components/advanced-list/advanced-list.component.mjs +184 -0
  7. package/esm2020/lib/components/advanced-row-action/advanced-row-action.component.mjs +178 -0
  8. package/esm2020/lib/components/advanced-search-form/advanced-search-form.component.mjs +154 -0
  9. package/esm2020/lib/components/advanced-select/advanced-select.component.mjs +42 -0
  10. package/esm2020/lib/components/advanced-select/advanced-select.service.mjs +38 -0
  11. package/esm2020/lib/components/advanced-table/advanced-filter-value-provider.service.mjs +31 -0
  12. package/esm2020/lib/components/advanced-table/advanced-table-resolvers.mjs +40 -0
  13. package/esm2020/lib/components/advanced-table/advanced-table-search-base.mjs +31 -0
  14. package/esm2020/lib/components/advanced-table/advanced-table-search.component.mjs +525 -0
  15. package/esm2020/lib/components/advanced-table/advanced-table-settings.component.mjs +108 -0
  16. package/esm2020/lib/components/advanced-table/advanced-table.component.mjs +1599 -0
  17. package/esm2020/lib/components/advanced-table/advanced-table.formatters.interface.mjs +17 -0
  18. package/esm2020/lib/components/advanced-table/advanced-table.formatters.mjs +429 -0
  19. package/esm2020/lib/components/advanced-table/advanced-table.interfaces.mjs +2 -0
  20. package/esm2020/lib/components/advanced-table-modal/advanced-table-modal-base.component.mjs +420 -0
  21. package/esm2020/lib/components/column-selector/column-selector.component.mjs +205 -0
  22. package/esm2020/lib/components/column-selector/column-selector.service.mjs +45 -0
  23. package/esm2020/lib/components/table-simple-header/table-simple-header.component.mjs +52 -0
  24. package/esm2020/lib/directives/advance-search-state.directive.mjs +111 -0
  25. package/esm2020/lib/directives/advance-table-state.directive.mjs +63 -0
  26. package/esm2020/lib/directives/advanced-search-router-state.directive.mjs +64 -0
  27. package/esm2020/lib/directives/advanced-table-editor.directive.mjs +154 -0
  28. package/esm2020/lib/directives/btnexp.directive.mjs +222 -0
  29. package/esm2020/lib/i18n/tables.el.mjs +129 -0
  30. package/esm2020/lib/i18n/tables.en.mjs +128 -0
  31. package/esm2020/lib/pipes/advanced-aggregator.pipe.mjs +38 -0
  32. package/esm2020/lib/pipes/advansed-aggregator-list-title-parse.pipe.mjs +45 -0
  33. package/esm2020/lib/reducers/index.mjs +37 -0
  34. package/esm2020/lib/services/advanced-aggregator/advanced-aggregator.service.mjs +119 -0
  35. package/esm2020/lib/tables.activated-table.service.mjs +46 -0
  36. package/esm2020/lib/tables.module.mjs +218 -0
  37. package/esm2020/public_api.mjs +37 -0
  38. package/esm2020/universis-ngx-tables.mjs +5 -0
  39. package/fesm2015/{universis-ngx-tables.js → universis-ngx-tables.mjs} +2927 -2729
  40. package/fesm2015/universis-ngx-tables.mjs.map +1 -0
  41. package/fesm2020/universis-ngx-tables.mjs +5609 -0
  42. package/fesm2020/universis-ngx-tables.mjs.map +1 -0
  43. package/index.d.ts +5 -0
  44. package/lib/actions/table.actions.d.ts +4 -4
  45. package/lib/components/add-items/add-items.component.d.ts +14 -21
  46. package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +15 -9
  47. package/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.d.ts +4 -1
  48. package/lib/components/advanced-list/advanced-list.component.d.ts +17 -14
  49. package/lib/components/advanced-row-action/advanced-row-action.component.d.ts +20 -23
  50. package/lib/components/advanced-search-form/advanced-search-form.component.d.ts +7 -4
  51. package/lib/components/advanced-select/advanced-select.component.d.ts +3 -1
  52. package/lib/components/advanced-select/advanced-select.service.d.ts +3 -0
  53. package/lib/components/advanced-table/advanced-filter-value-provider.service.d.ts +3 -0
  54. package/lib/components/advanced-table/advanced-table-resolvers.d.ts +5 -0
  55. package/lib/components/advanced-table/advanced-table-search-base.d.ts +6 -2
  56. package/lib/components/advanced-table/advanced-table-search.component.d.ts +11 -7
  57. package/lib/components/advanced-table/advanced-table-settings.component.d.ts +8 -6
  58. package/lib/components/advanced-table/advanced-table.component.d.ts +33 -25
  59. package/lib/components/advanced-table/advanced-table.formatters.d.ts +11 -11
  60. package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +15 -12
  61. package/lib/components/column-selector/column-selector.component.d.ts +9 -6
  62. package/lib/components/column-selector/column-selector.service.d.ts +3 -0
  63. package/lib/components/table-simple-header/table-simple-header.component.d.ts +8 -3
  64. package/lib/directives/advance-search-state.directive.d.ts +6 -3
  65. package/lib/directives/advance-table-state.directive.d.ts +4 -1
  66. package/lib/directives/advanced-search-router-state.directive.d.ts +9 -6
  67. package/lib/directives/advanced-table-editor.directive.d.ts +4 -1
  68. package/lib/directives/btnexp.directive.d.ts +12 -9
  69. package/lib/i18n/tables.el.d.ts +107 -107
  70. package/lib/i18n/tables.en.d.ts +106 -106
  71. package/lib/pipes/advanced-aggregator.pipe.d.ts +7 -4
  72. package/lib/pipes/advansed-aggregator-list-title-parse.pipe.d.ts +9 -6
  73. package/lib/reducers/index.d.ts +5 -3
  74. package/lib/services/advanced-aggregator/advanced-aggregator.service.d.ts +11 -8
  75. package/lib/tables.activated-table.service.d.ts +10 -6
  76. package/lib/tables.module.d.ts +36 -0
  77. package/package.json +44 -36
  78. package/public_api.d.ts +3 -0
  79. package/bundles/universis-ngx-tables.umd.js +0 -6101
  80. package/bundles/universis-ngx-tables.umd.js.map +0 -1
  81. package/bundles/universis-ngx-tables.umd.min.js +0 -2
  82. package/bundles/universis-ngx-tables.umd.min.js.map +0 -1
  83. package/esm2015/lib/actions/table.actions.js +0 -28
  84. package/esm2015/lib/advanced-aggregator.js +0 -2
  85. package/esm2015/lib/components/add-items/add-items.component.js +0 -142
  86. package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +0 -120
  87. package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +0 -53
  88. package/esm2015/lib/components/advanced-list/advanced-list.component.js +0 -173
  89. package/esm2015/lib/components/advanced-row-action/advanced-row-action.component.js +0 -184
  90. package/esm2015/lib/components/advanced-search-form/advanced-search-form.component.js +0 -142
  91. package/esm2015/lib/components/advanced-select/advanced-select.component.js +0 -65
  92. package/esm2015/lib/components/advanced-select/advanced-select.service.js +0 -40
  93. package/esm2015/lib/components/advanced-table/advanced-filter-value-provider.service.js +0 -37
  94. package/esm2015/lib/components/advanced-table/advanced-table-resolvers.js +0 -44
  95. package/esm2015/lib/components/advanced-table/advanced-table-search-base.js +0 -28
  96. package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +0 -526
  97. package/esm2015/lib/components/advanced-table/advanced-table-settings.component.js +0 -109
  98. package/esm2015/lib/components/advanced-table/advanced-table.component.js +0 -1523
  99. package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +0 -18
  100. package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +0 -429
  101. package/esm2015/lib/components/advanced-table/advanced-table.interfaces.js +0 -2
  102. package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +0 -397
  103. package/esm2015/lib/components/column-selector/column-selector.component.js +0 -202
  104. package/esm2015/lib/components/column-selector/column-selector.service.js +0 -47
  105. package/esm2015/lib/components/table-simple-header/table-simple-header.component.js +0 -52
  106. package/esm2015/lib/directives/advance-search-state.directive.js +0 -108
  107. package/esm2015/lib/directives/advance-table-state.directive.js +0 -63
  108. package/esm2015/lib/directives/advanced-search-router-state.directive.js +0 -63
  109. package/esm2015/lib/directives/advanced-table-editor.directive.js +0 -156
  110. package/esm2015/lib/directives/btnexp.directive.js +0 -229
  111. package/esm2015/lib/i18n/tables.el.js +0 -130
  112. package/esm2015/lib/i18n/tables.en.js +0 -129
  113. package/esm2015/lib/pipes/advanced-aggregator.pipe.js +0 -35
  114. package/esm2015/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +0 -46
  115. package/esm2015/lib/reducers/index.js +0 -32
  116. package/esm2015/lib/services/advanced-aggregator/advanced-aggregator.service.js +0 -120
  117. package/esm2015/lib/tables.activated-table.service.js +0 -50
  118. package/esm2015/lib/tables.module.js +0 -149
  119. package/esm2015/public_api.js +0 -33
  120. package/esm2015/universis-ngx-tables.js +0 -9
  121. package/esm5/lib/actions/table.actions.js +0 -34
  122. package/esm5/lib/advanced-aggregator.js +0 -2
  123. package/esm5/lib/components/add-items/add-items.component.js +0 -153
  124. package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +0 -169
  125. package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +0 -56
  126. package/esm5/lib/components/advanced-list/advanced-list.component.js +0 -185
  127. package/esm5/lib/components/advanced-row-action/advanced-row-action.component.js +0 -188
  128. package/esm5/lib/components/advanced-search-form/advanced-search-form.component.js +0 -145
  129. package/esm5/lib/components/advanced-select/advanced-select.component.js +0 -71
  130. package/esm5/lib/components/advanced-select/advanced-select.service.js +0 -43
  131. package/esm5/lib/components/advanced-table/advanced-filter-value-provider.service.js +0 -50
  132. package/esm5/lib/components/advanced-table/advanced-table-resolvers.js +0 -48
  133. package/esm5/lib/components/advanced-table/advanced-table-search-base.js +0 -34
  134. package/esm5/lib/components/advanced-table/advanced-table-search.component.js +0 -563
  135. package/esm5/lib/components/advanced-table/advanced-table-settings.component.js +0 -115
  136. package/esm5/lib/components/advanced-table/advanced-table.component.js +0 -1548
  137. package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +0 -18
  138. package/esm5/lib/components/advanced-table/advanced-table.formatters.js +0 -480
  139. package/esm5/lib/components/advanced-table/advanced-table.interfaces.js +0 -2
  140. package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +0 -314
  141. package/esm5/lib/components/column-selector/column-selector.component.js +0 -270
  142. package/esm5/lib/components/column-selector/column-selector.service.js +0 -50
  143. package/esm5/lib/components/table-simple-header/table-simple-header.component.js +0 -58
  144. package/esm5/lib/directives/advance-search-state.directive.js +0 -116
  145. package/esm5/lib/directives/advance-table-state.directive.js +0 -65
  146. package/esm5/lib/directives/advanced-search-router-state.directive.js +0 -71
  147. package/esm5/lib/directives/advanced-table-editor.directive.js +0 -196
  148. package/esm5/lib/directives/btnexp.directive.js +0 -257
  149. package/esm5/lib/i18n/tables.el.js +0 -130
  150. package/esm5/lib/i18n/tables.en.js +0 -129
  151. package/esm5/lib/pipes/advanced-aggregator.pipe.js +0 -39
  152. package/esm5/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +0 -49
  153. package/esm5/lib/reducers/index.js +0 -34
  154. package/esm5/lib/services/advanced-aggregator/advanced-aggregator.service.js +0 -134
  155. package/esm5/lib/tables.activated-table.service.js +0 -57
  156. package/esm5/lib/tables.module.js +0 -154
  157. package/esm5/public_api.js +0 -33
  158. package/esm5/universis-ngx-tables.js +0 -9
  159. package/fesm2015/universis-ngx-tables.js.map +0 -1
  160. package/fesm5/universis-ngx-tables.js +0 -5737
  161. package/fesm5/universis-ngx-tables.js.map +0 -1
  162. package/universis-ngx-tables.d.ts +0 -8
  163. package/universis-ngx-tables.metadata.json +0 -1
@@ -1,173 +0,0 @@
1
- import * as tslib_1 from "tslib";
2
- import { Component, ViewChild, Input } from '@angular/core';
3
- import { AngularDataContext } from '@themost/angular';
4
- import { TranslateService } from '@ngx-translate/core';
5
- import { ActivatedRoute } from '@angular/router';
6
- // tslint:disable-next-line: max-line-length
7
- import { AdvancedTableComponent, AdvancedTableConfiguration } from '../advanced-table/advanced-table.component';
8
- import { ErrorService, DIALOG_BUTTONS, ModalService, UserActivityService } from '@universis/common';
9
- import { ResponseError } from '@themost/client';
10
- import { ToastService } from '@universis/common';
11
- export class AdvancedListComponent {
12
- constructor(_context, _translateService, _activatedRoute, _errorService, _toastService, _modalService, _userActivityService) {
13
- this._context = _context;
14
- this._translateService = _translateService;
15
- this._activatedRoute = _activatedRoute;
16
- this._errorService = _errorService;
17
- this._toastService = _toastService;
18
- this._modalService = _modalService;
19
- this._userActivityService = _userActivityService;
20
- this.allowSaveOption = true;
21
- }
22
- ngOnDestroy() {
23
- if (this.dataSubscription) {
24
- this.dataSubscription.unsubscribe();
25
- }
26
- if (this.reloadSubscription) {
27
- this.reloadSubscription.unsubscribe();
28
- }
29
- if (this.subscription) {
30
- this.subscription.unsubscribe();
31
- }
32
- }
33
- ngOnInit() {
34
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
35
- try {
36
- // get metadata
37
- const metadata = yield this._context.getMetadata();
38
- // get route data
39
- this.dataSubscription = this._activatedRoute.data.subscribe(routeData => {
40
- // get entityType
41
- const re = new RegExp(`^${routeData.model}$`, 'ig');
42
- const entitySet = metadata.EntityContainer.EntitySet.find(x => {
43
- return re.test(x.Name);
44
- });
45
- // if entity type is null
46
- if (entitySet == null) {
47
- // navigate to error
48
- return this._errorService.navigateToError(new ResponseError('EntitySet Not Found', 404));
49
- }
50
- // get entity type
51
- const entityType = metadata.EntityType.find(x => {
52
- return x.Name === entitySet.EntityType;
53
- });
54
- if (entityType == null) {
55
- return this._errorService.navigateToError(new ResponseError('EntityType Not Found', 404));
56
- }
57
- if (routeData.searchConfiguration) {
58
- if (Object.prototype.hasOwnProperty.call(routeData.searchConfiguration, 'allowSave')) {
59
- this.allowSaveOption = routeData.searchConfiguration.allowSave;
60
- }
61
- this.searchConfiguration = routeData.searchConfiguration;
62
- }
63
- if (routeData.tableConfiguration) {
64
- this.tableConfiguration = routeData.tableConfiguration;
65
- }
66
- if (routeData.description) {
67
- this.description = this._translateService.instant(routeData.description);
68
- }
69
- if (routeData.longDescription) {
70
- this.longDescription = this._translateService.instant(routeData.longDescription);
71
- }
72
- if (routeData.category) {
73
- this.category = this._translateService.instant(routeData.category);
74
- }
75
- // clone default configuration
76
- const defaultConfiguration = AdvancedTableConfiguration.cast(this.tableConfiguration, true);
77
- // correct edit button link
78
- const column = defaultConfiguration.columns.find(col => {
79
- return col.formatter === 'ButtonFormatter' && col.formatString === '(modal:edit)';
80
- });
81
- if (column) {
82
- const url = [];
83
- this._activatedRoute.snapshot.pathFromRoot.forEach(route => {
84
- url.push.apply(url, route.url);
85
- });
86
- column.formatString = `#/${url.join('/')}/(modal:\$\{id\}/edit)`;
87
- }
88
- // create list configuration by assigning list entity set
89
- this.table.config = Object.assign({
90
- model: entitySet.Name
91
- }, defaultConfiguration);
92
- // fetch data
93
- this.table.fetch(true);
94
- // do reload by using hidden fragment e.g. /classes#reload
95
- this.reloadSubscription = this._activatedRoute.fragment.subscribe(fragment => {
96
- if (fragment && fragment === 'reload') {
97
- this._toastService.show(this.description, this._translateService.instant('Settings.OperationCompleted'));
98
- this.table.fetch(true);
99
- }
100
- });
101
- // finally add user activity
102
- this._userActivityService.setItem({
103
- category: this.category,
104
- description: this.description,
105
- url: window.location.hash.substring(1),
106
- dateCreated: new Date
107
- });
108
- });
109
- }
110
- catch (err) {
111
- console.error(err);
112
- return this._errorService.showError(err);
113
- }
114
- });
115
- }
116
- /**
117
- * Data load event handler of advanced table component
118
- * @param {AdvancedTableDataResult} data
119
- */
120
- onDataLoad(data) {
121
- this.recordsTotal = data.recordsTotal;
122
- }
123
- /**
124
- * Remove selected items
125
- */
126
- remove() {
127
- if (this.table && this.table.selected && this.table.selected.length) {
128
- // get items to remove
129
- const items = this.table.selected;
130
- return this._modalService.showWarningDialog(this._translateService.instant('Tables.RemoveItemsTitle'), this._translateService.instant('Tables.RemoveItemsMessage'), DIALOG_BUTTONS.OkCancel).then(result => {
131
- if (result === 'ok') {
132
- this._context.model(this.table.config.model).remove(items).then(() => {
133
- this._toastService.show(this.description + ':' + this._translateService.instant('Tables.RemoveItemMessage.title'), this._translateService.instant((items.length === 1 ?
134
- 'Tables.RemoveItemMessage.one' : 'Tables.RemoveItemMessage.many'), { value: items.length }));
135
- this.table.fetch(true);
136
- }).catch(err => {
137
- this._errorService.showError(err, {
138
- continueLink: '.'
139
- });
140
- });
141
- }
142
- });
143
- }
144
- }
145
- }
146
- AdvancedListComponent.decorators = [
147
- { type: Component, args: [{
148
- selector: 'app-advanced-list',
149
- template: "<div>\n <div class=\"row\" *ngIf=\"description\">\n <div class=\"col-auto\">\n <h2>{{description}}</h2>\n <p *ngIf=\"longDescription\">{{longDescription}}</p>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"searchConfiguration\">\n <div class=\"col-12\" [ngVar]=\"{}\" #filter=\"ngVar\">\n <app-advanced-table-search #advancedSearch [(filter)]=\"filter.value\" [collapsed]=\"true\" [table]=\"table\" [allowSave]=\"allowSaveOption\">\n <advanced-search>\n <app-advanced-search-form [form]=\"searchConfiguration\" (filterChange)=\"advancedSearch.asyncAdvancedSearch()\" #search [(filter)]=\"filter.value\"></app-advanced-search-form>\n </advanced-search>\n </app-advanced-table-search>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-auto mt-4\">\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal > 1\">\n <span>{{recordsTotal}}</span><span>&nbsp;</span><span [translate]=\"'Tables.Items'\"></span>\n </div>\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal === 1\">\n <span>{{recordsTotal}}</span><span>&nbsp;</span><span [translate]=\"'Tables.Item'\"></span>\n </div>\n </div>\n <div class=\"pull-right ml-auto mr-3 mt-3\">\n <div class=\"font-lg btn-toolbar mt-3\">\n <a *ngIf=\"table && table.selected && table.selected.length\"\n class=\"text-danger text-decoration-none mr-2\" href=\"javascript:void(0)\" (click)=\"remove()\">\n <span>-</span><span>&nbsp;</span><span [translate]=\"'Tables.RemoveItem'\"></span>\n </a>\n <a class=\"text-indigo text-decoration-none\" [routerLink]=\"['.', { outlets:{ modal:'add'} }]\">\n <span>+</span><span>&nbsp;</span><span [translate]=\"'Tables.AddItem'\"></span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mb-4\">\n <app-advanced-table [selectable]=\"true\" #table\n [showFooter]=\"false\"\n (load)=\"onDataLoad($event)\" [height]=\"600\"></app-advanced-table>\n </div>\n </div>\n <router-modal></router-modal>\n</div>\n"
150
- }] }
151
- ];
152
- /** @nocollapse */
153
- AdvancedListComponent.ctorParameters = () => [
154
- { type: AngularDataContext },
155
- { type: TranslateService },
156
- { type: ActivatedRoute },
157
- { type: ErrorService },
158
- { type: ToastService },
159
- { type: ModalService },
160
- { type: UserActivityService }
161
- ];
162
- AdvancedListComponent.propDecorators = {
163
- entitySet: [{ type: Input, args: ['entitySet',] }],
164
- category: [{ type: Input, args: ['category',] }],
165
- description: [{ type: Input, args: ['description',] }],
166
- longDescription: [{ type: Input, args: ['longDescription',] }],
167
- tableConfiguration: [{ type: Input, args: ['tableConfiguration',] }],
168
- searchConfiguration: [{ type: Input, args: ['searchConfiguration',] }],
169
- table: [{ type: ViewChild, args: ['table',] }],
170
- allowSaveOption: [{ type: Input, args: ['allowSaveOption',] }]
171
- };
172
-
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBeUIsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBc0IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsNENBQTRDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBMkIsMEJBQTBCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6SSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTWpELE1BQU07SUFnQkosWUFBb0IsUUFBNEIsRUFDdEMsaUJBQW1DLEVBQ25DLGVBQStCLEVBQy9CLGFBQTJCLEVBQzNCLGFBQTJCLEVBQzNCLGFBQTJCLEVBQzNCLG9CQUF5QztRQU4vQixhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUN0QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQix5QkFBb0IsR0FB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QyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7OztZQWpLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IseWxFQUE2QzthQUM5Qzs7OztZQWRRLGtCQUFrQjtZQUNsQixnQkFBZ0I7WUFFaEIsY0FBYztZQUdkLFlBQVk7WUFHWixZQUFZO1lBSGtCLFlBQVk7WUFBRSxtQkFBbUI7Ozt3QkFnQnJFLEtBQUssU0FBQyxXQUFXO3VCQUNqQixLQUFLLFNBQUMsVUFBVTswQkFDaEIsS0FBSyxTQUFDLGFBQWE7OEJBQ25CLEtBQUssU0FBQyxpQkFBaUI7aUNBQ3ZCLEtBQUssU0FBQyxvQkFBb0I7a0NBQzFCLEtBQUssU0FBQyxxQkFBcUI7b0JBQzNCLFNBQVMsU0FBQyxPQUFPOzhCQUNqQixLQUFLLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBJbmplY3RhYmxlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0LCBBbmd1bGFyRGF0YVNlcnZpY2UgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0LCBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBNb2RhbFNlcnZpY2UsIFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1Jlc3BvbnNlRXJyb3J9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyByZWNvcmRzVG90YWw6IG51bWJlcjtcbiAgcHVibGljIGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRhdGFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCdlbnRpdHlTZXQnKSBlbnRpdHlTZXQ6IHN0cmluZztcbiAgQElucHV0KCdjYXRlZ29yeScpIGNhdGVnb3J5OiBzdHJpbmc7XG4gIEBJbnB1dCgnZGVzY3JpcHRpb24nKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoJ2xvbmdEZXNjcmlwdGlvbicpIGxvbmdEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBASW5wdXQoJ3RhYmxlQ29uZmlndXJhdGlvbicpIHRhYmxlQ29uZmlndXJhdGlvbjogYW55O1xuICBASW5wdXQoJ3NlYXJjaENvbmZpZ3VyYXRpb24nKSBzZWFyY2hDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgnYWxsb3dTYXZlT3B0aW9uJykgYWxsb3dTYXZlT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlckFjdGl2aXR5U2VydmljZTogVXNlckFjdGl2aXR5U2VydmljZVxuICAgICkgeyB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0cnkge1xuICAgICAgLy8gZ2V0IG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IHRoaXMuX2NvbnRleHQuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIC8vIGdldCByb3V0ZSBkYXRhXG4gICAgICB0aGlzLmRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSggcm91dGVEYXRhID0+IHtcbiAgICAgICAgLy8gZ2V0IGVudGl0eVR5cGVcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGBeJHtyb3V0ZURhdGEubW9kZWx9JGAsICdpZycpO1xuICAgICAgICBjb25zdCBlbnRpdHlTZXQgPSBtZXRhZGF0YS5FbnRpdHlDb250YWluZXIuRW50aXR5U2V0LmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiByZS50ZXN0KHguTmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZiBlbnRpdHkgdHlwZSBpcyBudWxsXG4gICAgICAgIGlmIChlbnRpdHlTZXQgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIG5hdmlnYXRlIHRvIGVycm9yXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IobmV3IFJlc3BvbnNlRXJyb3IoJ0VudGl0eVNldCBOb3QgRm91bmQnLCA0MDQpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgZW50aXR5IHR5cGVcbiAgICAgICAgY29uc3QgZW50aXR5VHlwZSA9IG1ldGFkYXRhLkVudGl0eVR5cGUuZmluZCggeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHguTmFtZSA9PT0gZW50aXR5U2V0LkVudGl0eVR5cGU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZW50aXR5VHlwZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5uYXZpZ2F0ZVRvRXJyb3IobmV3IFJlc3BvbnNlRXJyb3IoJ0VudGl0eVR5cGUgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbiwgJ2FsbG93U2F2ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93U2F2ZU9wdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uLmFsbG93U2F2ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hDb25maWd1cmF0aW9uID0gcm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS50YWJsZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS50YWJsZUNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocm91dGVEYXRhLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmxvbmdEZXNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMubG9uZ0Rlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuY2F0ZWdvcnkpIHtcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5jYXRlZ29yeSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvbmUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWd1cmF0aW9uID0gQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24uY2FzdCh0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiwgdHJ1ZSk7XG4gICAgICAgIC8vIGNvcnJlY3QgZWRpdCBidXR0b24gbGlua1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoIGNvbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5mb3JtYXR0ZXIgPT09ICdCdXR0b25Gb3JtYXR0ZXInICYmIGNvbC5mb3JtYXRTdHJpbmcgPT09ICcobW9kYWw6ZWRpdCknO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIGNvbnN0IHVybDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhdGhGcm9tUm9vdC5mb3JFYWNoKCByb3V0ZSA9PiB7XG4gICAgICAgICAgICB1cmwucHVzaC5hcHBseSh1cmwsIHJvdXRlLnVybCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGAjLyR7dXJsLmpvaW4oJy8nKX0vKG1vZGFsOlxcJFxce2lkXFx9L2VkaXQpYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgbGlzdCBjb25maWd1cmF0aW9uIGJ5IGFzc2lnbmluZyBsaXN0IGVudGl0eSBzZXRcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBtb2RlbDogZW50aXR5U2V0Lk5hbWVcbiAgICAgICAgfSwgZGVmYXVsdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICAvLyBmZXRjaCBkYXRhXG4gICAgICAgIHRoaXMudGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgIC8vIGRvIHJlbG9hZCBieSB1c2luZyBoaWRkZW4gZnJhZ21lbnQgZS5nLiAvY2xhc3NlcyNyZWxvYWRcbiAgICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5mcmFnbWVudC5zdWJzY3JpYmUoZnJhZ21lbnQgPT4ge1xuICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBmcmFnbWVudCA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NldHRpbmdzLk9wZXJhdGlvbkNvbXBsZXRlZCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmaW5hbGx5IGFkZCB1c2VyIGFjdGl2aXR5XG4gICAgICAgIHRoaXMuX3VzZXJBY3Rpdml0eVNlcnZpY2Uuc2V0SXRlbSh7XG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuY2F0ZWdvcnksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgZGF0ZUNyZWF0ZWQ6IG5ldyBEYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIERhdGEgbG9hZCBldmVudCBoYW5kbGVyIG9mIGFkdmFuY2VkIHRhYmxlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge0FkdmFuY2VkVGFibGVEYXRhUmVzdWx0fSBkYXRhXG4gICAqL1xuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc2VsZWN0ZWQgaXRlbXNcbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLnNlbGVjdGVkICYmIHRoaXMudGFibGUuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAvLyBnZXQgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc1RpdGxlJyksXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zTWVzc2FnZScpLFxuICAgICAgICBESUFMT0dfQlVUVE9OUy5Pa0NhbmNlbCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLnJlbW92ZShpdGVtcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gKyAnOicgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS50aXRsZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgoaXRlbXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2Uub25lJyA6ICdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UubWFueScpXG4gICAgICAgICAgICAgICAgICAsIHsgdmFsdWU6IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLnRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
@@ -1,184 +0,0 @@
1
- import * as tslib_1 from "tslib";
2
- import { Component, Input, EventEmitter, ViewChild, ElementRef, ViewEncapsulation, Output } from '@angular/core';
3
- import { TranslateService } from '@ngx-translate/core';
4
- import { ActivatedRoute, Router } from '@angular/router';
5
- import { AngularDataContext } from '@themost/angular';
6
- import 'rxjs/add/observable/combineLatest';
7
- import { ErrorService, ModalService } from '@universis/common';
8
- import { RouterModalOkCancel } from '@universis/common/routing';
9
- import { AppEventService } from '@universis/common';
10
- import { Observable } from 'rxjs';
11
- import { AdvancedFormComponent } from '@universis/forms';
12
- import { ProgressbarComponent } from 'ngx-bootstrap/progressbar';
13
- export class AdvancedRowActionComponent extends RouterModalOkCancel {
14
- constructor(router, activatedRoute, _translateService, _context, _errorService, _modalService, _appEvent) {
15
- super(router, activatedRoute);
16
- this._translateService = _translateService;
17
- this._context = _context;
18
- this._errorService = _errorService;
19
- this._modalService = _modalService;
20
- this._appEvent = _appEvent;
21
- this.modalIcon = 'fas fa-project-diagram';
22
- this.progressType = 'indigo';
23
- this.errorMessage = 'Tables.Actions.CompletedWithErrors';
24
- this.loading = false;
25
- this.refresh = new EventEmitter();
26
- // set modal size
27
- this.modalClass = 'modal-lg';
28
- // set modal title
29
- this.modalTitle = 'Tables.Actions.Label';
30
- // disable ok button
31
- this.okButtonDisabled = false;
32
- // set button text
33
- this.okButtonText = 'Tables.Actions.Start';
34
- }
35
- get form() {
36
- return this.formComponent;
37
- }
38
- ngOnInit() {
39
- this.refreshSubscription = this.refresh.subscribe((value) => {
40
- if (value && value.progress) {
41
- let progress = 0;
42
- if (value.progress < 0) {
43
- progress = 0;
44
- }
45
- else if (value.progress > 100) {
46
- progress = 100;
47
- }
48
- else {
49
- progress = value.progress;
50
- }
51
- this.progressComponent.value = progress;
52
- this.showProgress();
53
- }
54
- });
55
- }
56
- ngAfterViewInit() {
57
- if (this.formComponent && this.formComponent.form) {
58
- this.okButtonDisabled = true;
59
- this.invalidSubscription = this.formComponent.form.change.subscribe((event) => {
60
- if (Object.prototype.hasOwnProperty.call(event, "isValid") && (event.changed != null)) {
61
- this.okButtonDisabled = !event.isValid;
62
- }
63
- });
64
- }
65
- }
66
- ngOnDestroy() {
67
- if (this.refreshSubscription) {
68
- this.refreshSubscription.unsubscribe();
69
- }
70
- if (this.executeSubscription) {
71
- this.executeSubscription.unsubscribe();
72
- }
73
- if (this.invalidSubscription) {
74
- this.invalidSubscription.unsubscribe();
75
- }
76
- }
77
- cancel() {
78
- if (this.loading) {
79
- return;
80
- }
81
- // close
82
- if (this._modalService.modalRef) {
83
- return this._modalService.modalRef.hide();
84
- }
85
- }
86
- ok() {
87
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
88
- try {
89
- this.loading = true;
90
- this.lastError = null;
91
- if (this.formComponent && this.formComponent.form &&
92
- this.formComponent.form.formio && this.formComponent.form.formio.data) {
93
- // set data
94
- this.data = this.formComponent.form.formio.data;
95
- }
96
- // do action
97
- this.execute.subscribe((result) => {
98
- this.loading = false;
99
- this.refresh.emit({
100
- progress: 100
101
- });
102
- if (result && result.errors && result.errors > 0) {
103
- // show message for partial success
104
- if (result.errors === 1) {
105
- this.lastError = new Error(this._translateService.instant(`${this.errorMessage}.Description.One`));
106
- }
107
- else {
108
- this.lastError = new Error(this._translateService.instant(`${this.errorMessage}.Description.Many`, result));
109
- }
110
- this.refresh.emit({
111
- progress: 1
112
- });
113
- this.hideProgress();
114
- return;
115
- }
116
- if (this._modalService.modalRef) {
117
- this._modalService.modalRef.hide();
118
- }
119
- }, (err) => {
120
- this.loading = false;
121
- this.lastError = err;
122
- this.refresh.emit({
123
- progress: 0
124
- });
125
- });
126
- }
127
- catch (err) {
128
- this.loading = false;
129
- this.lastError = err;
130
- }
131
- });
132
- }
133
- showProgress() {
134
- this.progressContainer.nativeElement.classList.replace('invisible', 'visible');
135
- }
136
- hideProgress() {
137
- this.progressContainer.nativeElement.classList.replace('visible', 'invisible');
138
- }
139
- }
140
- AdvancedRowActionComponent.decorators = [
141
- { type: Component, args: [{
142
- selector: 'app-advanced-row-action',
143
- template: "<div>\n <div class=\"modal-header\" *ngIf=\"modalTitle\">\n <h5 class=\"modal-title\">{{modalTitle | translate}}</h5>\n <button (click)=\"cancel()\" [disabled]=\"loading\"\n type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Cancel\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body pt-0 mt-2 pb-0\">\n <div class=\"row\" *ngIf=\"lastError\">\n <div class=\"col-12\">\n <div class=\"alert alert-warning\" role=\"alert\">\n <span>{{ 'Tables.Actions.CompletedWithErrors.Title' | translate }}</span><br>\n <small *ngIf=\"lastError.status >= 0\" [translate]=\"'E' + lastError.status + '.message'\"></small>\n <small *ngIf=\"lastError.status == null\">{{lastError.message}}</small>\n </div>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"description\">\n <div class=\"col-12 mb-3\">\n <div class=\"text-justify\">\n {{description | translate}}\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\">\n <div *ngIf=\"items && items.length > 1\" [translate]=\"'Tables.Actions.ActionMessage.Many'\" [translateParams]=\"items\"></div>\n <div *ngIf=\"items && items.length === 1\" [translate]=\"'Tables.Actions.ActionMessage.One'\"></div>\n <div class=\"font-weight-bold text-danger\" *ngIf=\"items && items.length <= 0\" [translate]=\"'Tables.Actions.ActionMessage.None'\"></div>\n <div class=\"pt-2 font-weight-bold text-danger\" *ngIf=\"additionalMessage && items && items.length <= 0\">{{additionalMessage}}</div>\n </div>\n </div>\n <div class=\"row pt-3\" *ngIf=\"formTemplate\">\n <div class=\"col-12 mb-3\">\n <div>\n <advanced-form-edit #formComponent [formName]=\"formTemplate\" [(data)]=\"data\"></advanced-form-edit>\n </div>\n </div>\n </div>\n\n <div class=\"row mt-3\">\n <div class=\"col-12 invisible\" #progressContainer>\n <progressbar #progress [type]=\"progressType\" [max]=\"100\">\n </progressbar>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer justify-content-end\">\n <button [disabled]=\"okButtonDisabled || loading || (items && items.length === 0)\" (click)=\"ok()\"\n type=\"button\" [ngClass]=\"okButtonClass\">\n {{okButtonText | translate}}\n </button>\n <button [disabled]=\"cancelButtonDisabled || loading\"\n (click)=\"cancel()\" type=\"button\" [ngClass]=\"cancelButtonClass\" data-dismiss=\"modal\">\n {{cancelButtonText | translate}}\n </button>\n </div>\n</div>\n",
144
- encapsulation: ViewEncapsulation.None,
145
- styles: [`
146
- .fa-1_5x {
147
- font-size: 1.5rem;
148
- }
149
- .form-control:disabled, .form-control[readonly] {
150
- background-color: inherit;
151
- }
152
- .form-check.checkbox {
153
- position: relative
154
- }
155
- `]
156
- }] }
157
- ];
158
- /** @nocollapse */
159
- AdvancedRowActionComponent.ctorParameters = () => [
160
- { type: Router },
161
- { type: ActivatedRoute },
162
- { type: TranslateService },
163
- { type: AngularDataContext },
164
- { type: ErrorService },
165
- { type: ModalService },
166
- { type: AppEventService }
167
- ];
168
- AdvancedRowActionComponent.propDecorators = {
169
- items: [{ type: Input }],
170
- modalIcon: [{ type: Input }],
171
- description: [{ type: Input }],
172
- formTemplate: [{ type: Input }],
173
- progressType: [{ type: Input }],
174
- data: [{ type: Output }],
175
- additionalMessage: [{ type: Input }],
176
- errorMessage: [{ type: Input }],
177
- progressComponent: [{ type: ViewChild, args: ['progress',] }],
178
- progressContainer: [{ type: ViewChild, args: ['progressContainer',] }],
179
- formComponent: [{ type: ViewChild, args: ['formComponent',] }],
180
- refresh: [{ type: Input }],
181
- execute: [{ type: Input }]
182
- };
183
-
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC1yb3ctYWN0aW9uL2FkdmFuY2VkLXJvdy1hY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFxQixLQUFLLEVBQUUsWUFBWSxFQUNyRCxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUEyQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFvQmpFLE1BQU0saUNBQWtDLFNBQVEsbUJBQW1CO0lBdUIvRCxZQUFZLE1BQWMsRUFDZCxjQUE4QixFQUN0QixpQkFBbUMsRUFDbkMsUUFBNEIsRUFDNUIsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsU0FBMEI7UUFDMUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxjQUFjLENB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QjtnQkFDbkMseTRGQUFtRDtnQkFjbkQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7eUJBWmpDOzs7Ozs7Ozs7O1NBVUM7YUFHUjs7OztZQTNCdUIsTUFBTTtZQUF0QixjQUFjO1lBRGQsZ0JBQWdCO1lBRWhCLGtCQUFrQjtZQUVsQixZQUFZO1lBQUUsWUFBWTtZQUUxQixlQUFlOzs7b0JBNEJsQixLQUFLO3dCQUNMLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLOzJCQUNMLEtBQUs7bUJBQ0wsTUFBTTtnQ0FDTixLQUFLOzJCQUNMLEtBQUs7Z0NBR0wsU0FBUyxTQUFDLFVBQVU7Z0NBQ3BCLFNBQVMsU0FBQyxtQkFBbUI7NEJBQzdCLFNBQVMsU0FBQyxlQUFlO3NCQUN6QixLQUFLO3NCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBFdmVudEVtaXR0ZXIsXG4gICAgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QW5ndWxhckRhdGFDb250ZXh0fSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCB7RXJyb3JTZXJ2aWNlLCBNb2RhbFNlcnZpY2UsIFRvYXN0U2VydmljZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE9rQ2FuY2VsfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7QXBwRXZlbnRTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybUNvbXBvbmVudH0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQgeyBQcm9ncmVzc2JhckNvbXBvbmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1yb3ctYWN0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgLmZhLTFfNXgge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICAgIH1cbiAgICAgICAgLmZvcm0tY29udHJvbDpkaXNhYmxlZCwgLmZvcm0tY29udHJvbFtyZWFkb25seV0ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgICAuZm9ybS1jaGVjay5jaGVja2JveCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIH1cbiAgICAgICAgYFxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCBleHRlbmRzIFJvdXRlck1vZGFsT2tDYW5jZWwgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgaW52YWxpZFN1YnNjcmlwdGlvbjogYW55O1xuXG5cbiAgICBASW5wdXQoKSBpdGVtczogYW55O1xuICAgIEBJbnB1dCgpIG1vZGFsSWNvbiA9ICdmYXMgZmEtcHJvamVjdC1kaWFncmFtJztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZvcm1UZW1wbGF0ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb2dyZXNzVHlwZSA9ICdpbmRpZ28nO1xuICAgIEBPdXRwdXQoKSBkYXRhOiBhbnk7XG4gICAgQElucHV0KCkgYWRkaXRpb25hbE1lc3NhZ2U6IHN0cmluZztcbiAgICBASW5wdXQoKSBlcnJvck1lc3NhZ2UgPSAnVGFibGVzLkFjdGlvbnMuQ29tcGxldGVkV2l0aEVycm9ycyc7XG4gICAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gICAgQFZpZXdDaGlsZCgncHJvZ3Jlc3MnKSBwcm9ncmVzc0NvbXBvbmVudDogUHJvZ3Jlc3NiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgncHJvZ3Jlc3NDb250YWluZXInKSBwcm9ncmVzc0NvbnRhaW5lcjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdmb3JtQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudDogQWR2YW5jZWRGb3JtQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIHJlZnJlc2g6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBJbnB1dCgpIGV4ZWN1dGU6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHJlZnJlc2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGV4ZWN1dGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9hcHBFdmVudDogQXBwRXZlbnRTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgICAgICAvLyBzZXQgbW9kYWwgc2l6ZVxuICAgICAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwtbGcnO1xuICAgICAgICAvLyBzZXQgbW9kYWwgdGl0bGVcbiAgICAgICAgdGhpcy5tb2RhbFRpdGxlID0gJ1RhYmxlcy5BY3Rpb25zLkxhYmVsJztcbiAgICAgICAgLy8gZGlzYWJsZSBvayBidXR0b25cbiAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCBidXR0b24gdGV4dFxuICAgICAgICB0aGlzLm9rQnV0dG9uVGV4dCA9ICdUYWJsZXMuQWN0aW9ucy5TdGFydCc7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50O1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWZyZXNoLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5wcm9ncmVzcyA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHZhbHVlLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29tcG9uZW50LnZhbHVlID0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtKSB7XG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJpc1ZhbGlkXCIpICYmIChldmVudC5jaGFuZ2VkICE9IG51bGwpKSB7XG4gICAgICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICFldmVudC5pc1ZhbGlkO1xuICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvc2VcbiAgICAgICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgICAgICAgcmV0dXJuICB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybSAmJlxuICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8gJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGEpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGRhdGFcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvIGFjdGlvblxuICAgICAgICAgICAgdGhpcy5leGVjdXRlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMTAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3cgbWVzc2FnZSBmb3IgcGFydGlhbCBzdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk9uZWApKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbmV3IEVycm9yKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvck1lc3NhZ2V9LkRlc2NyaXB0aW9uLk1hbnlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAxXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVQcm9ncmVzcygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dQcm9ncmVzcygpIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKCdpbnZpc2libGUnLCAndmlzaWJsZScpO1xuICAgIH1cblxuICAgIGhpZGVQcm9ncmVzcygpIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKCd2aXNpYmxlJywgJ2ludmlzaWJsZScpO1xuICAgIH1cblxuXG5cbn1cbiJdfQ==
@@ -1,142 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { FormioComponent } from 'angular-formio';
3
- import { AngularDataContext } from '@themost/angular';
4
- import { ActivatedRoute } from '@angular/router';
5
- import { ServiceUrlPreProcessor, TranslatePreProcessor } from '@universis/forms';
6
- import { AdvancedTableSearchBaseComponent } from '../advanced-table/advanced-table-search-base';
7
- import { TranslateService } from '@ngx-translate/core';
8
- import { HttpClient } from '@angular/common/http';
9
- export class AdvancedSearchFormComponent extends AdvancedTableSearchBaseComponent {
10
- constructor(_context, _translateService, _activatedRoute, _http) {
11
- super();
12
- this._context = _context;
13
- this._translateService = _translateService;
14
- this._activatedRoute = _activatedRoute;
15
- this._http = _http;
16
- this.form = {};
17
- this.refreshForm = new EventEmitter();
18
- this.loading = new EventEmitter();
19
- this.submission = { data: {} };
20
- this.componentLoading = true;
21
- }
22
- ngOnChanges(changes) {
23
- if (Object.prototype.hasOwnProperty.call(changes, 'form')) {
24
- if (changes.form != null) {
25
- if (changes.form.currentValue &&
26
- changes.form.currentValue != changes.form.previousValue) {
27
- this.ngOnInit();
28
- }
29
- }
30
- }
31
- if (Object.prototype.hasOwnProperty.call(changes, 'formSrc')) {
32
- if (changes.formSrc != null) {
33
- if (changes.formSrc.currentValue &&
34
- changes.formSrc.currentValue != changes.formSrc.previousValue) {
35
- this._http.get(changes.formSrc.currentValue).toPromise().then((form) => {
36
- // set form
37
- this.form = form;
38
- // and init
39
- this.ngOnInit();
40
- }).catch((err) => {
41
- console.error('An error occurred while loading search configuration');
42
- console.error(err);
43
- });
44
- }
45
- }
46
- }
47
- if (Object.prototype.hasOwnProperty.call(changes, 'filter')) {
48
- if (changes.filter != null) {
49
- this.submission.data = changes.filter.currentValue || {};
50
- this.refreshForm.emit({
51
- submission: this.submission
52
- });
53
- }
54
- }
55
- }
56
- ngOnInit() {
57
- if (this.form) {
58
- new ServiceUrlPreProcessor(this._context).parse(this.form);
59
- new TranslatePreProcessor(this._translateService).parse(this.form);
60
- this.submission = {
61
- data: this.filter
62
- };
63
- this.loading.emit({
64
- target: this
65
- });
66
- this.refreshForm.emit({
67
- form: this.form
68
- });
69
- this.componentLoading = false;
70
- this.filterSubscription = this.filterChange.subscribe(filter => {
71
- this.submission.data = filter;
72
- this.refreshForm.emit({
73
- submission: this.submission
74
- });
75
- });
76
- }
77
- }
78
- onChange(event) {
79
- Object.keys(this.formComponent.submission.data).forEach(key => {
80
- if (Object.prototype.hasOwnProperty.call(this.formComponent.submission.data, key)) {
81
- const value = this.formComponent.submission.data[key];
82
- // the filter with type is a string and is not empty
83
- const isEmptyString = typeof value === 'string' && value.length === 0;
84
- // do not include empty objects in filter
85
- const isEmptyObject = typeof value === 'object' && Object.keys(value).length === 0;
86
- // make isEmptyString, isEmptyObject mutex
87
- if (!isEmptyString && !isEmptyObject) {
88
- Object.defineProperty(this.filter, key, {
89
- configurable: true,
90
- enumerable: true,
91
- value: value
92
- });
93
- }
94
- else {
95
- delete this.filter[key];
96
- }
97
- }
98
- });
99
- }
100
- onFormLoad(form) {
101
- const currentLang = this._translateService.currentLang;
102
- this.formComponent.formio.i18next.options.resources[currentLang] = { translation: this._translateService.instant(`Forms`) };
103
- this.formComponent.formio.language = currentLang;
104
- }
105
- ngAfterViewInit() {
106
- //
107
- }
108
- ngOnDestroy() {
109
- if (this.filterSubscription) {
110
- this.filterSubscription.unsubscribe();
111
- }
112
- }
113
- }
114
- AdvancedSearchFormComponent.decorators = [
115
- { type: Component, args: [{
116
- selector: 'app-advanced-search-form',
117
- template: `
118
- <div class="p-4">
119
- <formio #formioComponent class="formio-search" (keydown)="onKeyEnter($event)" (change)="onChange($event)" (formLoad)="onFormLoad($event)"
120
- [refresh]="refreshForm" [submission]="submission" [form]="form"></formio>
121
- </div>
122
- `,
123
- encapsulation: ViewEncapsulation.None,
124
- styles: ["formio.formio-search .form-group{margin-bottom:0}formio.formio-search .form-group .col-form-label{font-size:90%;padding-top:4px;padding-bottom:4px}.choices__list.choices__list--single .choices__item:first-child.choices__item--selectable{width:85%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}"]
125
- }] }
126
- ];
127
- /** @nocollapse */
128
- AdvancedSearchFormComponent.ctorParameters = () => [
129
- { type: AngularDataContext },
130
- { type: TranslateService },
131
- { type: ActivatedRoute },
132
- { type: HttpClient }
133
- ];
134
- AdvancedSearchFormComponent.propDecorators = {
135
- formComponent: [{ type: ViewChild, args: ['formioComponent',] }],
136
- form: [{ type: Input }],
137
- formSrc: [{ type: Input }],
138
- refreshForm: [{ type: Output }],
139
- loading: [{ type: Output }]
140
- };
141
-
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFDLHNCQUFzQixFQUFFLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0UsT0FBTyxFQUFDLGdDQUFnQyxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDOUYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBYWxELE1BQU0sa0NBQW1DLFNBQVEsZ0NBQWdDO0lBWS9FLFlBQW9CLFFBQTRCLEVBQzVCLGlCQUFtQyxFQUNuQyxlQUErQixFQUMvQixLQUFpQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQUxVLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLFVBQUssR0FBTCxLQUFLLENBQVk7UUFYNUIsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUVkLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FB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LEVBQUcsS0FBSztxQkFDZCxDQUFDLENBQUM7aUJBQ0o7cUJBQU07b0JBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN6QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWdCO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzdILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7SUFDbkQsQ0FBQztJQUVELGVBQWU7UUFDYixFQUFFO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDOzs7WUE3SEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLFFBQVEsRUFBRTs7Ozs7R0FLVDtnQkFFRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDdEM7Ozs7WUFuQk8sa0JBQWtCO1lBSWxCLGdCQUFnQjtZQUhoQixjQUFjO1lBTWIsVUFBVTs7OzRCQWdCaEIsU0FBUyxTQUFDLGlCQUFpQjttQkFDM0IsS0FBSztzQkFDTCxLQUFLOzBCQUNMLE1BQU07c0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9Db21wb25lbnQsIEZvcm1pb0Zvcm19IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7QW5ndWxhckRhdGFDb250ZXh0fSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1NlcnZpY2VVcmxQcmVQcm9jZXNzb3IsIFRyYW5zbGF0ZVByZVByb2Nlc3Nvcn0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXNlYXJjaC1mb3JtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgICA8Zm9ybWlvICNmb3JtaW9Db21wb25lbnQgY2xhc3M9XCJmb3JtaW8tc2VhcmNoXCIgKGtleWRvd24pPVwib25LZXlFbnRlcigkZXZlbnQpXCIgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgKGZvcm1Mb2FkKT1cIm9uRm9ybUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hGb3JtXCIgW3N1Ym1pc3Npb25dPVwic3VibWlzc2lvblwiIFtmb3JtXT1cImZvcm1cIj48L2Zvcm1pbz5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXG5cbiAgQFZpZXdDaGlsZCgnZm9ybWlvQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudDogRm9ybWlvQ29tcG9uZW50O1xuICBASW5wdXQoKSBmb3JtOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgZm9ybVNyYzogc3RyaW5nO1xuICBAT3V0cHV0KCkgcmVmcmVzaEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxvYWRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFyZ2V0OiBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnR9PigpO1xuICBzdWJtaXNzaW9uOiBhbnkgPSB7IGRhdGE6IHt9IH07XG4gIHByaXZhdGUgZmlsdGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjb21wb25lbnRMb2FkaW5nID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2Zvcm0nKSkge1xuICAgICAgaWYgKGNoYW5nZXMuZm9ybSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm0uY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmZvcm0ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmb3JtU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmZvcm1TcmMgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtU3JjLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmZvcm1TcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgZm9ybVxuICAgICAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICAgICAgICAgIC8vIGFuZCBpbml0XG4gICAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyBzZWFyY2ggY29uZmlndXJhdGlvbicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2ZpbHRlcicpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5maWx0ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGNoYW5nZXMuZmlsdGVyLmN1cnJlbnRWYWx1ZSB8fCB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgbmV3IFNlcnZpY2VVcmxQcmVQcm9jZXNzb3IodGhpcy5fY29udGV4dCkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIG5ldyBUcmFuc2xhdGVQcmVQcm9jZXNzb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZSkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbiA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5maWx0ZXJcbiAgICAgIH07XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtOiB0aGlzLmZvcm1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnRMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSggZmlsdGVyID0+IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uLmRhdGEgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgc3VibWlzc2lvbjogdGhpcy5zdWJtaXNzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQ6IG9iamVjdCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5mb3JtQ29tcG9uZW50LnN1Ym1pc3Npb24uZGF0YSwga2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGFba2V5XTtcbiAgICAgICAgLy8gdGhlIGZpbHRlciB3aXRoIHR5cGUgaXMgYSBzdHJpbmcgYW5kIGlzIG5vdCBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5U3RyaW5nID0gIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBkbyBub3QgaW5jbHVkZSBlbXB0eSBvYmplY3RzIGluIGZpbHRlclxuICAgICAgICBjb25zdCBpc0VtcHR5T2JqZWN0ID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBtYWtlIGlzRW1wdHlTdHJpbmcsIGlzRW1wdHlPYmplY3QgbXV0ZXhcbiAgICAgICAgaWYgKCFpc0VtcHR5U3RyaW5nICYmICFpc0VtcHR5T2JqZWN0KSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuZmlsdGVyLCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZSA6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkZvcm1Mb2FkKGZvcm06IEZvcm1pb0Zvcm0pIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5pMThuZXh0Lm9wdGlvbnMucmVzb3VyY2VzW2N1cnJlbnRMYW5nXSA9IHsgdHJhbnNsYXRpb24gOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEZvcm1zYCkgfTtcbiAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybWlvLmxhbmd1YWdlID0gY3VycmVudExhbmc7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==