@indigina/kendo 1.2.23 → 1.2.24

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 (147) hide show
  1. package/{esm2020 → esm2022}/lib/angular/forms/directives/debounce.directive.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/angular/forms/widgets/field/field-input/field-input.component.mjs +6 -6
  3. package/{esm2020 → esm2022}/lib/angular/forms/widgets/field/field-input/field-input.module.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/angular/forms/widgets/field/field-input/number-input.component.mjs +6 -6
  5. package/{esm2020 → esm2022}/lib/angular/forms/widgets/field/field.component.mjs +4 -4
  6. package/{esm2020 → esm2022}/lib/angular/forms/widgets/general-errors/general-errors.component.mjs +4 -4
  7. package/esm2022/lib/angular/indigina.module.mjs +193 -0
  8. package/{esm2020 → esm2022}/lib/angular/models/AppSettings.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/angular/models/IndiginaConfiguration.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/angular/services/http.service.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/angular/services/locale-settings.service.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/angular/services/settings.service.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/angular/services/toastr.service.mjs +4 -4
  14. package/{esm2020 → esm2022}/lib/angular/widgets/live-updates-control/live-updates-control.component.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/angular/widgets/side-menu/menu-item-group/menu-item-group.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/angular/widgets/side-menu/side-menu.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/tree-view-node/tree-view-node.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/tree-view.component.mjs +5 -5
  19. package/{esm2020 → esm2022}/lib/components/account-menu/account-menu.component.mjs +4 -4
  20. package/{esm2020 → esm2022}/lib/components/azure-login-callback/azure-login-callback.component.mjs +4 -4
  21. package/{esm2020 → esm2022}/lib/components/language-selector/language-selector.component.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/directives/requirePermission.directive.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/interceptors/auth-headers.interceptor.mjs +4 -4
  24. package/esm2022/lib/kendo.module.mjs +275 -0
  25. package/{esm2020 → esm2022}/lib/services/account.service.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/services/activity.filter.service.mjs +4 -4
  27. package/{esm2020 → esm2022}/lib/services/auth-provider.resolver.mjs +4 -4
  28. package/{esm2020 → esm2022}/lib/services/partner.service.mjs +4 -4
  29. package/{esm2020 → esm2022}/lib/services/permissions.service.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/services/signalr/signalr.service.mjs +4 -4
  31. package/{esm2020 → esm2022}/lib/widgets/activity-filter/activity-filter.component.mjs +4 -4
  32. package/{esm2020 → esm2022}/lib/widgets/confirm-dialog/confirm-dialog.component.mjs +4 -4
  33. package/{esm2020 → esm2022}/lib/widgets/current-timezone/current-timezone.component.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/widgets/entity-edit/buttons-bar/buttons-bar.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/widgets/entity-edit/entity-edit-form.component.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/widgets/entity-edit/field-dropdown/field-dropdown.component.mjs +6 -6
  37. package/{esm2020 → esm2022}/lib/widgets/entity-edit/field-dropdown/field-dropdown.module.mjs +11 -11
  38. package/esm2022/lib/widgets/entity-edit/field-multiselect/field-multiselect.component.mjs +72 -0
  39. package/{esm2020 → esm2022}/lib/widgets/entity-list/entity-list.component.mjs +4 -4
  40. package/{esm2020 → esm2022}/lib/widgets/entity-list/field-dropdownlist/field-dropdownlist.component.mjs +4 -4
  41. package/{esm2020 → esm2022}/lib/widgets/entity-list/user-list-admin.component.mjs +4 -4
  42. package/{esm2020 → esm2022}/lib/widgets/excel-export-button/excel-export-button.component.mjs +4 -4
  43. package/{esm2020 → esm2022}/lib/widgets/footer-bar/footer-bar.component.mjs +4 -4
  44. package/{esm2020 → esm2022}/lib/widgets/modal-window/modal-window.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/lib/widgets/multicheck-filter/multicheck-filter.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/lib/widgets/top-bar/top-bar.component.mjs +4 -4
  47. package/{fesm2020 → fesm2022}/indigina-kendo.mjs +327 -327
  48. package/fesm2022/indigina-kendo.mjs.map +1 -0
  49. package/lib/angular/forms/directives/debounce.directive.d.ts +1 -1
  50. package/lib/angular/forms/widgets/field/field-input/field-input.component.d.ts +1 -1
  51. package/lib/angular/forms/widgets/field/field-input/number-input.component.d.ts +1 -1
  52. package/lib/angular/forms/widgets/field/field.component.d.ts +1 -1
  53. package/lib/angular/forms/widgets/general-errors/general-errors.component.d.ts +1 -1
  54. package/lib/angular/widgets/live-updates-control/live-updates-control.component.d.ts +1 -1
  55. package/lib/angular/widgets/side-menu/menu-item-group/menu-item-group.component.d.ts +1 -1
  56. package/lib/angular/widgets/side-menu/side-menu.component.d.ts +1 -1
  57. package/lib/angular/widgets/tree-view/tree-view-node/tree-view-node.component.d.ts +1 -1
  58. package/lib/angular/widgets/tree-view/tree-view.component.d.ts +1 -1
  59. package/lib/components/account-menu/account-menu.component.d.ts +1 -1
  60. package/lib/components/language-selector/language-selector.component.d.ts +1 -1
  61. package/lib/directives/requirePermission.directive.d.ts +1 -1
  62. package/lib/widgets/activity-filter/activity-filter.component.d.ts +1 -1
  63. package/lib/widgets/entity-edit/buttons-bar/buttons-bar.component.d.ts +1 -1
  64. package/lib/widgets/entity-edit/entity-edit-form.component.d.ts +1 -1
  65. package/lib/widgets/entity-edit/field-dropdown/field-dropdown.component.d.ts +1 -1
  66. package/lib/widgets/entity-edit/field-multiselect/field-multiselect.component.d.ts +1 -1
  67. package/lib/widgets/entity-list/entity-list.component.d.ts +1 -1
  68. package/lib/widgets/entity-list/field-dropdownlist/field-dropdownlist.component.d.ts +1 -1
  69. package/lib/widgets/modal-window/modal-window.component.d.ts +1 -1
  70. package/lib/widgets/multicheck-filter/multicheck-filter.component.d.ts +1 -1
  71. package/lib/widgets/top-bar/top-bar.component.d.ts +1 -1
  72. package/package.json +34 -40
  73. package/esm2020/lib/angular/indigina.module.mjs +0 -193
  74. package/esm2020/lib/kendo.module.mjs +0 -275
  75. package/esm2020/lib/widgets/entity-edit/field-multiselect/field-multiselect.component.mjs +0 -72
  76. package/fesm2015/indigina-kendo.mjs +0 -3344
  77. package/fesm2015/indigina-kendo.mjs.map +0 -1
  78. package/fesm2020/indigina-kendo.mjs.map +0 -1
  79. /package/{esm2020 → esm2022}/indigina-kendo.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/angular/extensions/ISubscriptionControl.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/angular/extensions/ReEntrySubscription.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/angular/forms/extensions/FormGroupWithErrors.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/angular/models/CustomHttpErrorResponse.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/angular/models/HttpCodes.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/angular/models/HttpMethods.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/angular/models/IdentifiedModel.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/angular/models/Language.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/angular/models/NamedModel.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/angular/models/removable.interface.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/angular/widgets/side-menu/MenuItem.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/AbstractContentResolver.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/ContentResolver.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Converters/EnumTypeGetter.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Converters/JsonConverter.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Converters/TextConverter.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Converters/XmlConverter.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/IContentResolver.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Resolvers/JsonResolver.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Resolvers/TextResolver.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/ContentResolver/Resolvers/XmlResolver.mjs +0 -0
  101. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/Prettifiers/IPrettifier.mjs +0 -0
  102. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/Prettifiers/JsonPrettifier.mjs +0 -0
  103. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/Prettifiers/PrettifierFactory.mjs +0 -0
  104. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/Prettifiers/TextPrettifier.mjs +0 -0
  105. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/Prettifiers/XMLPrettifier.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/models/Brackets.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/models/ContentTypesFormat.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/models/ResolverResult.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/models/TreeViewNode.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/angular/widgets/tree-view/models/TreeViewNodeTypes.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/components/account-menu/AccountMenuItem.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/config/msal-instance.factory.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/models/ActivityFilter.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/models/AzureB2CSettings.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/models/CustomFilter.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/models/CustomFilterElement.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/models/FieldTypes.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/models/FilterTargets.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/models/Member.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/models/MemberBase.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/models/MemberTypes.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/models/Operators.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/models/Page.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/models/PermissionTypes.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/models/Permissions.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/models/SystemInfo.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/models/User.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/services/IActivityEndpoints.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/services/IEntityEndpoints.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/services/IEntityService.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/services/activity.filter.service.config.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/services/auth.providers/AuthProvider.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/services/auth.providers/azureb2c.provider.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/services/base.account.service.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/services/endpoints.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/services/entity.service.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/services/get-page.service.interface.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/services/services.config.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/services/signalr/EventNames.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/services/url-params.model.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/widgets/activity-filter/FilterConverter.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/widgets/entity-edit/IFormAdapter.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/widgets/entity-edit/entity-edit.component.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/widgets/entity-list/Command.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/widgets/entity-list/Field.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/widgets/entity-list/UrlSerializer.mjs +0 -0
  147. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,3344 +0,0 @@
1
- import * as momentModule from 'moment-timezone';
2
- import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
3
- export * from '@angular/platform-browser/animations';
4
- import * as i1 from '@azure/msal-angular';
5
- import { MSAL_INSTANCE, MsalModule, MsalService } from '@azure/msal-angular';
6
- export * from '@azure/msal-angular';
7
- import * as signalR from '@microsoft/signalr';
8
- export { LogLevel } from '@microsoft/signalr';
9
- import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';
10
- export * from '@ngx-loading-bar/http-client';
11
- import * as i1$1 from '@ngx-translate/core';
12
- import { TranslateModule, TranslateStore, TranslateLoader } from '@ngx-translate/core';
13
- export * from '@ngx-translate/core';
14
- import * as i1$2 from 'ngx-clipboard';
15
- import { ClipboardModule } from 'ngx-clipboard';
16
- export * from 'ngx-clipboard';
17
- import * as i1$3 from 'ngx-toastr';
18
- import { ToastrModule } from 'ngx-toastr';
19
- export * from 'ngx-toastr';
20
- import * as i2 from '@angular/common';
21
- import { CommonModule } from '@angular/common';
22
- import * as i2$1 from '@angular/common/http';
23
- import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
24
- import * as i0 from '@angular/core';
25
- import { EventEmitter, Directive, Input, Output, HostListener, Component, NgModule, ChangeDetectionStrategy, Injectable, ViewChildren, APP_INITIALIZER, ViewChild, InjectionToken, Inject } from '@angular/core';
26
- import * as i1$4 from '@angular/forms';
27
- import { UntypedFormControl, Validators, ControlContainer, FormGroupDirective, ReactiveFormsModule, FormsModule, UntypedFormGroup } from '@angular/forms';
28
- import { BrowserModule } from '@angular/platform-browser';
29
- import * as i1$5 from '@angular/router';
30
- import { NavigationEnd, RouterModule } from '@angular/router';
31
- import { Subject, of, BehaviorSubject, throwError, from, tap as tap$1, map as map$1 } from 'rxjs';
32
- import { debounceTime, map, mergeMap, catchError, tap, filter, take, finalize } from 'rxjs/operators';
33
- import XmlBeautify from 'xml-beautify';
34
- import { __awaiter } from 'tslib';
35
- import { toODataString, distinct, filterBy } from '@progress/kendo-data-query';
36
- import { InteractionRequiredAuthError, BrowserCacheLocation, PublicClientApplication } from '@azure/msal-browser';
37
- import * as i5 from '@progress/kendo-angular-popup';
38
- import { PopupModule } from '@progress/kendo-angular-popup';
39
- import * as i3 from '@progress/kendo-angular-dialog';
40
- import { DialogsModule, WindowModule } from '@progress/kendo-angular-dialog';
41
- import * as i5$1 from '@progress/kendo-angular-grid';
42
- import { GridModule, ExcelModule } from '@progress/kendo-angular-grid';
43
- import * as i6 from '@progress/kendo-angular-inputs';
44
- import { InputsModule } from '@progress/kendo-angular-inputs';
45
- import * as i3$1 from '@progress/kendo-angular-buttons';
46
- import { ButtonsModule } from '@progress/kendo-angular-buttons';
47
- import * as i5$2 from '@progress/kendo-angular-dateinputs';
48
- import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
49
- import * as i4 from '@progress/kendo-angular-dropdowns';
50
- import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
51
- import { TooltipModule } from '@progress/kendo-angular-tooltip';
52
-
53
- class DebounceDirective {
54
- constructor() {
55
- this.debounceTime = 500;
56
- this.debounceKeyup = new EventEmitter();
57
- this.keyUp = new Subject();
58
- }
59
- ngOnInit() {
60
- this.subscription = this.keyUp.pipe(debounceTime(this.debounceTime)).subscribe(e => this.debounceKeyup.emit(e));
61
- }
62
- ngOnDestroy() {
63
- this.subscription.unsubscribe();
64
- }
65
- keyUpEvent(event) {
66
- event.preventDefault();
67
- event.stopPropagation();
68
- this.keyUp.next(event);
69
- }
70
- }
71
- DebounceDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: DebounceDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
72
- DebounceDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.3", type: DebounceDirective, selector: "[appDebounce]", inputs: { debounceTime: "debounceTime" }, outputs: { debounceKeyup: "debounceKeyup" }, host: { listeners: { "keyup": "keyUpEvent($event)" } }, ngImport: i0 });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: DebounceDirective, decorators: [{
74
- type: Directive,
75
- args: [{
76
- selector: '[appDebounce]',
77
- }]
78
- }], ctorParameters: function () { return []; }, propDecorators: { debounceTime: [{
79
- type: Input
80
- }], debounceKeyup: [{
81
- type: Output
82
- }], keyUpEvent: [{
83
- type: HostListener,
84
- args: ['keyup', ['$event']]
85
- }] } });
86
-
87
- let id = 0;
88
- const disabledKey = 'disabled';
89
- class FieldComponent {
90
- constructor(parent, eref, defaultValue) {
91
- this.parent = parent;
92
- this.eref = eref;
93
- this.defaultValue = defaultValue;
94
- this.disabled = false;
95
- }
96
- ngOnInit() {
97
- this.id = '_' + this.fieldName + ++id;
98
- this.setUp();
99
- }
100
- ngOnChanges() {
101
- this.setUp();
102
- }
103
- setUp() {
104
- const validators = [];
105
- for (const attr of this.eref.nativeElement.attributes) {
106
- const validator = this.setAttribute(attr.name, attr.value);
107
- if (validator) {
108
- validators.push(validator);
109
- }
110
- }
111
- const control = this.parent.form.get(this.fieldName);
112
- if (control) {
113
- if (control.validator) {
114
- validators.push(control.validator);
115
- }
116
- control.setValidators(validators);
117
- control.updateValueAndValidity();
118
- }
119
- else {
120
- this.parent.form.addControl(this.fieldName, new UntypedFormControl(this.defaultValue, validators));
121
- }
122
- this.updateState();
123
- }
124
- setAttribute(name, value) {
125
- if (name === disabledKey) {
126
- this.disabled = true;
127
- return;
128
- }
129
- if (name === 'required') {
130
- return Validators.required;
131
- }
132
- }
133
- updateState() {
134
- const control = this.parent.form.get(this.fieldName);
135
- if (!control) {
136
- return;
137
- }
138
- if (this.disabled) {
139
- control.disable();
140
- }
141
- else {
142
- control.enable();
143
- }
144
- }
145
- }
146
- FieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
147
- FieldComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.3", type: FieldComponent, inputs: { labelKey: "labelKey", fieldName: "fieldName", disabled: "disabled" }, usesOnChanges: true, ngImport: i0 });
148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldComponent, decorators: [{
149
- type: Directive
150
- }], ctorParameters: function () { return [{ type: i1$4.FormGroupDirective }, { type: i0.ElementRef }, { type: undefined }]; }, propDecorators: { labelKey: [{
151
- type: Input
152
- }], fieldName: [{
153
- type: Input
154
- }], disabled: [{
155
- type: Input
156
- }] } });
157
-
158
- class FieldInputComponent extends FieldComponent {
159
- constructor(parent, eref) {
160
- super(parent, eref, '');
161
- this.parent = parent;
162
- this.eref = eref;
163
- this.type = 'text';
164
- }
165
- setAttribute(name, value) {
166
- if (name === 'type') {
167
- this.type = value;
168
- }
169
- if (name === 'max-length') {
170
- return Validators.maxLength(parseInt(value, 10));
171
- }
172
- return super.setAttribute(name, value);
173
- }
174
- }
175
- FieldInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldInputComponent, deps: [{ token: i1$4.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
176
- FieldInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: FieldInputComponent, selector: "field-input", inputs: { labelKey: "labelKey", fieldName: "fieldName" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ id }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\">\n <input\n [formControlName]=\"fieldName\"\n id=\"{{ id }}\"\n [type]=\"type\"\n class=\"k-input\"\n autocomplete=\"new-{{ fieldName }}\"\n placeholder=\"{{ labelKey | translate }}\"\n />\n <ng-content></ng-content>\n <div\n class=\"bg-danger\"\n *ngIf=\"\n parent.form.get(fieldName) &&\n parent.form.get(fieldName).invalid &&\n parent.form.get(fieldName).touched\n \"\n >\n <span *ngIf=\"parent.form.get(fieldName).errors['required']\">{{\n \"Required\" | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['email']\">{{\n \"ValidEmail\" | translate\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['serverErrorMsg']\">{{\n parent.form.get(fieldName).errors[\"serverErrorMsg\"]\n }}</span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], viewProviders: [
177
- { provide: ControlContainer, useExisting: FormGroupDirective },
178
- ] });
179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldInputComponent, decorators: [{
180
- type: Component,
181
- args: [{ selector: 'field-input', viewProviders: [
182
- { provide: ControlContainer, useExisting: FormGroupDirective },
183
- ], template: "<div class=\"form-group\">\n <label\n for=\"{{ id }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\">\n <input\n [formControlName]=\"fieldName\"\n id=\"{{ id }}\"\n [type]=\"type\"\n class=\"k-input\"\n autocomplete=\"new-{{ fieldName }}\"\n placeholder=\"{{ labelKey | translate }}\"\n />\n <ng-content></ng-content>\n <div\n class=\"bg-danger\"\n *ngIf=\"\n parent.form.get(fieldName) &&\n parent.form.get(fieldName).invalid &&\n parent.form.get(fieldName).touched\n \"\n >\n <span *ngIf=\"parent.form.get(fieldName).errors['required']\">{{\n \"Required\" | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['email']\">{{\n \"ValidEmail\" | translate\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['serverErrorMsg']\">{{\n parent.form.get(fieldName).errors[\"serverErrorMsg\"]\n }}</span>\n </div>\n </div>\n</div>\n" }]
184
- }], ctorParameters: function () { return [{ type: i1$4.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { labelKey: [{
185
- type: Input
186
- }], fieldName: [{
187
- type: Input
188
- }] } });
189
-
190
- const defaultValue = null;
191
- const minusSign = '-';
192
- const emptyString = '';
193
- class NumberInputComponent extends FieldInputComponent {
194
- constructor(parent, eref) {
195
- super(parent, eref);
196
- this.parent = parent;
197
- this.eref = eref;
198
- this.isPositive = false;
199
- this.type = 'text';
200
- }
201
- ngAfterContentInit() {
202
- const control = this.parent.form.get(this.fieldName);
203
- control.setValue(this.presetDefaultValue(control.value));
204
- control.setValidators(this.isNaNValidator());
205
- control.valueChanges.subscribe((value) => {
206
- if (((typeof value === 'undefined' || (value === null || value === void 0 ? void 0 : value.toString()) === emptyString) &&
207
- this.cachedValue !== defaultValue) ||
208
- (this.presetDefaultValue(value) === defaultValue &&
209
- control.value !== defaultValue)) {
210
- this.cachedValue = defaultValue;
211
- control.setValue(this.cachedValue);
212
- return;
213
- }
214
- if (value && value.toString().includes(minusSign)) {
215
- let newValue = this.isPositive
216
- ? value.replaceAll(minusSign, emptyString)
217
- : value.slice(0, 1) + value.replaceAll(minusSign, emptyString);
218
- this.cachedValue = !isNaN(newValue + 1) ? newValue : this.cachedValue;
219
- if (this.cachedValue !== value) {
220
- control.setValue(this.cachedValue);
221
- }
222
- return;
223
- }
224
- if (isNaN(value)) {
225
- this.cachedValue !== defaultValue
226
- ? control.setValue(this.cachedValue)
227
- : control.setValue(defaultValue);
228
- return;
229
- }
230
- this.cachedValue = +value;
231
- if (this.cachedValue !== value &&
232
- value !== null &&
233
- !value.toString().endsWith('.')) {
234
- control.setValue(this.cachedValue);
235
- }
236
- });
237
- }
238
- presetDefaultValue(value) {
239
- return (value === null || value === void 0 ? void 0 : value.toString().replace(/\s/g, emptyString)) === emptyString
240
- ? defaultValue
241
- : value;
242
- }
243
- isNaNValidator() {
244
- return (control) => {
245
- const notValid = isNaN(control.value);
246
- return notValid ? { forbiddenName: { value: control.value } } : null;
247
- };
248
- }
249
- }
250
- NumberInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NumberInputComponent, deps: [{ token: i1$4.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
251
- NumberInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: NumberInputComponent, selector: "number-input", inputs: { isPositive: "isPositive" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ id }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\">\n <input\n [formControlName]=\"fieldName\"\n id=\"{{ id }}\"\n [type]=\"type\"\n class=\"k-input\"\n autocomplete=\"new-{{ fieldName }}\"\n placeholder=\"{{ labelKey | translate }}\"\n />\n <ng-content></ng-content>\n <div\n class=\"bg-danger\"\n *ngIf=\"\n parent.form.get(fieldName) &&\n parent.form.get(fieldName).invalid &&\n parent.form.get(fieldName).touched\n \"\n >\n <span *ngIf=\"parent.form.get(fieldName).errors['required']\">{{\n \"Required\" | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['email']\">{{\n \"ValidEmail\" | translate\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['serverErrorMsg']\">{{\n parent.form.get(fieldName).errors[\"serverErrorMsg\"]\n }}</span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], viewProviders: [
252
- { provide: ControlContainer, useExisting: FormGroupDirective },
253
- ] });
254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: NumberInputComponent, decorators: [{
255
- type: Component,
256
- args: [{ selector: 'number-input', viewProviders: [
257
- { provide: ControlContainer, useExisting: FormGroupDirective },
258
- ], template: "<div class=\"form-group\">\n <label\n for=\"{{ id }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\">\n <input\n [formControlName]=\"fieldName\"\n id=\"{{ id }}\"\n [type]=\"type\"\n class=\"k-input\"\n autocomplete=\"new-{{ fieldName }}\"\n placeholder=\"{{ labelKey | translate }}\"\n />\n <ng-content></ng-content>\n <div\n class=\"bg-danger\"\n *ngIf=\"\n parent.form.get(fieldName) &&\n parent.form.get(fieldName).invalid &&\n parent.form.get(fieldName).touched\n \"\n >\n <span *ngIf=\"parent.form.get(fieldName).errors['required']\">{{\n \"Required\" | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['email']\">{{\n \"ValidEmail\" | translate\n }}</span>\n <span *ngIf=\"parent.form.get(fieldName).errors['serverErrorMsg']\">{{\n parent.form.get(fieldName).errors[\"serverErrorMsg\"]\n }}</span>\n </div>\n </div>\n</div>\n" }]
259
- }], ctorParameters: function () { return [{ type: i1$4.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { isPositive: [{
260
- type: Input
261
- }] } });
262
-
263
- class FieldInputModule {
264
- }
265
- FieldInputModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
266
- FieldInputModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: FieldInputModule, declarations: [FieldInputComponent, NumberInputComponent], imports: [ReactiveFormsModule, FormsModule, TranslateModule, CommonModule], exports: [FieldInputComponent, NumberInputComponent] });
267
- FieldInputModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldInputModule, imports: [ReactiveFormsModule, FormsModule, TranslateModule, CommonModule] });
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldInputModule, decorators: [{
269
- type: NgModule,
270
- args: [{
271
- declarations: [FieldInputComponent, NumberInputComponent],
272
- exports: [FieldInputComponent, NumberInputComponent],
273
- imports: [ReactiveFormsModule, FormsModule, TranslateModule, CommonModule],
274
- }]
275
- }] });
276
-
277
- class GeneralErrorsComponent {
278
- constructor() {
279
- this.errors = [];
280
- }
281
- ngOnChanges() {
282
- this.form.setErrors({ _general_errors_: this.errors });
283
- }
284
- }
285
- GeneralErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: GeneralErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
286
- GeneralErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: GeneralErrorsComponent, selector: "app-general-errors", inputs: { form: "form", errors: "errors" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"form\" [formGroup]=\"form\">\n <div class=\"bg-danger\" *ngIf=\"form.invalid && errors.length\">\n <ul class=\"custom-error\">\n <li *ngFor=\"let error of errors\">{{ error }}</li>\n </ul>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: GeneralErrorsComponent, decorators: [{
288
- type: Component,
289
- args: [{ selector: 'app-general-errors', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"form\" [formGroup]=\"form\">\n <div class=\"bg-danger\" *ngIf=\"form.invalid && errors.length\">\n <ul class=\"custom-error\">\n <li *ngFor=\"let error of errors\">{{ error }}</li>\n </ul>\n </div>\n</div>\n" }]
290
- }], propDecorators: { form: [{
291
- type: Input
292
- }], errors: [{
293
- type: Input
294
- }] } });
295
-
296
- class AppSettings {
297
- }
298
- AppSettings.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AppSettings, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
299
- AppSettings.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AppSettings, providedIn: 'root' });
300
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AppSettings, decorators: [{
301
- type: Injectable,
302
- args: [{
303
- providedIn: 'root',
304
- }]
305
- }] });
306
-
307
- class IndiginaConfiguration {
308
- }
309
- IndiginaConfiguration.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IndiginaConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
310
- IndiginaConfiguration.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IndiginaConfiguration, providedIn: 'root' });
311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IndiginaConfiguration, decorators: [{
312
- type: Injectable,
313
- args: [{ providedIn: 'root' }]
314
- }] });
315
-
316
- const languageKey = 'language';
317
- class LocaleSettingsService {
318
- constructor(translate) {
319
- this.translate = translate;
320
- this.languages = [
321
- { name: 'English', code: 'en-US' },
322
- { name: 'Русский', code: 'ru-RU' },
323
- ];
324
- }
325
- init() {
326
- this.translate.addLangs(this.languages.map((x) => x.code));
327
- this.localeId = this.getLocale();
328
- this.setLocale(this.localeId || this.languages[0].code);
329
- }
330
- getLocales() {
331
- return this.languages;
332
- }
333
- getLocale() {
334
- if (localStorage) {
335
- return localStorage.getItem(languageKey) || this.localeId;
336
- }
337
- else {
338
- return this.localeId;
339
- }
340
- }
341
- setLocale(locale) {
342
- this.translate.use(locale);
343
- this.localeId = locale;
344
- if (localStorage) {
345
- localStorage.setItem(languageKey, locale);
346
- }
347
- }
348
- }
349
- LocaleSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LocaleSettingsService, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
350
- LocaleSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LocaleSettingsService, providedIn: 'root' });
351
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LocaleSettingsService, decorators: [{
352
- type: Injectable,
353
- args: [{
354
- providedIn: 'root',
355
- }]
356
- }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
357
-
358
- const urlDelimiter = '/';
359
- const collapsedEvent$1 = 'collapsed';
360
- class MenuItemGroupComponent {
361
- constructor(router) {
362
- this.router = router;
363
- this.collapsed = false;
364
- this.router.isActive = function (url, matchOptions) {
365
- var _a;
366
- return ((_a = this.routerState.snapshot.root.children) === null || _a === void 0 ? void 0 : _a.length)
367
- ? url.toString() ===
368
- urlDelimiter +
369
- this.routerState.snapshot.root.children[0].routeConfig.path.split('/:')[0]
370
- : false;
371
- };
372
- }
373
- ngOnInit() {
374
- this.setActualPath(this.router.routerState.snapshot);
375
- this.router.events.subscribe((event) => {
376
- if (event instanceof NavigationEnd) {
377
- this.setActualPath(this.router.routerState.snapshot);
378
- }
379
- });
380
- }
381
- ngOnChanges() {
382
- this.setItemExpand();
383
- }
384
- collapseChild(activeItem, event) {
385
- this.item.expanded =
386
- this.item.text === activeItem.text &&
387
- !this.item.expanded &&
388
- !!this.item.items;
389
- if (!activeItem.items || activeItem.items.length === 0) {
390
- event[collapsedEvent$1] = true;
391
- }
392
- else {
393
- event[collapsedEvent$1] = false;
394
- }
395
- }
396
- setItemExpand() {
397
- var _a;
398
- this.item.expanded = (_a = this.item.items) === null || _a === void 0 ? void 0 : _a.some((x) => {
399
- return x.link !== undefined && x.link === this.actualPath;
400
- });
401
- }
402
- setActualPath(snapshot) {
403
- var _a;
404
- if ((_a = snapshot.root.children) === null || _a === void 0 ? void 0 : _a.length) {
405
- this.actualPath =
406
- urlDelimiter +
407
- snapshot.root.children[0].routeConfig.path.split('/:')[0];
408
- this.setItemExpand();
409
- }
410
- }
411
- }
412
- MenuItemGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: MenuItemGroupComponent, deps: [{ token: i1$5.Router }], target: i0.ɵɵFactoryTarget.Component });
413
- MenuItemGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: MenuItemGroupComponent, selector: "[menu-item-group]", inputs: { item: "item" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"item.items && item.items.length\">\n <a (click)=\"collapseChild(item, $event)\">\n <ng-container *ngIf=\"!item.iconClass; else labelWithIcon\">\n {{ item.text | translate }}\n </ng-container>\n </a>\n <ul\n [ngClass]=\"\n item.expanded == true\n ? 'nav nav-second-level collapse in'\n : 'nav nav-second-level collapse'\n \"\n >\n <ng-template ngFor let-item [ngForOf]=\"item.items\">\n <li menu-item-group [item]=\"item\"></li>\n </ng-template>\n </ul>\n</ng-container>\n<ng-container *ngIf=\"!item.items || !item.items.length\">\n <a\n *ngIf=\"item.link\"\n routerLink=\"{{ item.link }}\"\n routerLinkActive=\"active-route\"\n class=\"sub-menu-link\"\n (click)=\"collapseChild(item, $event)\"\n >\n <ng-container *ngIf=\"!item.iconClass; else labelWithIcon\">\n {{ item.text | translate }}\n </ng-container>\n </a>\n <a\n *ngIf=\"item.url\"\n class=\"sub-menu-link\"\n href=\"{{ item.url }}\"\n target=\"_blank\"\n (click)=\"collapseChild(item, $event)\"\n >\n <ng-container *ngIf=\"!item.iconClass; else labelWithIcon\">\n {{ item.text | translate }}\n </ng-container>\n </a>\n</ng-container>\n<ng-template #labelWithIcon>\n <i class=\"menu-icon fa {{ item.iconClass }}\"></i>\n <span class=\"nav-label\">{{ item.text | translate }}</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: MenuItemGroupComponent, selector: "[menu-item-group]", inputs: ["item"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
414
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: MenuItemGroupComponent, decorators: [{
415
- type: Component,
416
- args: [{ selector: '[menu-item-group]', template: "<ng-container *ngIf=\"item.items && item.items.length\">\n <a (click)=\"collapseChild(item, $event)\">\n <ng-container *ngIf=\"!item.iconClass; else labelWithIcon\">\n {{ item.text | translate }}\n </ng-container>\n </a>\n <ul\n [ngClass]=\"\n item.expanded == true\n ? 'nav nav-second-level collapse in'\n : 'nav nav-second-level collapse'\n \"\n >\n <ng-template ngFor let-item [ngForOf]=\"item.items\">\n <li menu-item-group [item]=\"item\"></li>\n </ng-template>\n </ul>\n</ng-container>\n<ng-container *ngIf=\"!item.items || !item.items.length\">\n <a\n *ngIf=\"item.link\"\n routerLink=\"{{ item.link }}\"\n routerLinkActive=\"active-route\"\n class=\"sub-menu-link\"\n (click)=\"collapseChild(item, $event)\"\n >\n <ng-container *ngIf=\"!item.iconClass; else labelWithIcon\">\n {{ item.text | translate }}\n </ng-container>\n </a>\n <a\n *ngIf=\"item.url\"\n class=\"sub-menu-link\"\n href=\"{{ item.url }}\"\n target=\"_blank\"\n (click)=\"collapseChild(item, $event)\"\n >\n <ng-container *ngIf=\"!item.iconClass; else labelWithIcon\">\n {{ item.text | translate }}\n </ng-container>\n </a>\n</ng-container>\n<ng-template #labelWithIcon>\n <i class=\"menu-icon fa {{ item.iconClass }}\"></i>\n <span class=\"nav-label\">{{ item.text | translate }}</span>\n</ng-template>\n" }]
417
- }], ctorParameters: function () { return [{ type: i1$5.Router }]; }, propDecorators: { item: [{
418
- type: Input
419
- }] } });
420
-
421
- const collapsedEvent = 'collapsed';
422
- class SideMenuComponent {
423
- constructor() {
424
- this.logoClick = new EventEmitter();
425
- }
426
- onLogoClick() {
427
- this.logoClick.emit();
428
- }
429
- collapse(itemComponent, activeItem, event) {
430
- var _a;
431
- (_a = this.items) === null || _a === void 0 ? void 0 : _a.forEach((item) => {
432
- if (item.text !== activeItem.text && item.expanded) {
433
- item.expanded = false;
434
- }
435
- });
436
- if (event[collapsedEvent]) {
437
- itemComponent.collapsed = true;
438
- }
439
- else {
440
- itemComponent.collapsed = false;
441
- }
442
- }
443
- }
444
- SideMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SideMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
445
- SideMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: SideMenuComponent, selector: "side-menu", inputs: { items: "items" }, outputs: { logoClick: "logoClick" }, ngImport: i0, template: "<nav\n id=\"menu-left\"\n class=\"navbar-default navbar-main navbar-static-side open\"\n role=\"navigation\"\n>\n <div class=\"sidebar-collapse\">\n <ul id=\"side-menu\" class=\"nav\">\n <li class=\"nav-header\">\n <div class=\"profile-element\">\n <a [routerLink]=\"['/']\" class=\"img-supply\">\n <img alt=\"Supply Stream logo\" />\n </a>\n </div>\n <div class=\"logo-element\" (click)=\"onLogoClick()\">\n <i class=\"fa fa-exchange\"></i>\n </div>\n </li>\n </ul>\n\n <div class=\"sidebar-collapse\">\n <ul class=\"nav\">\n <ng-template ngFor let-item [ngForOf]=\"items\">\n <li\n #itemComponent\n menu-item-group\n [item]=\"item\"\n [ngClass]=\"{\n menu: true,\n active: item.expanded ? item.expanded : false,\n collapsed: itemComponent.collapsed\n }\"\n (click)=\"collapse(itemComponent, item, $event)\"\n ></li>\n </ng-template>\n </ul>\n </div>\n </div>\n</nav>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: MenuItemGroupComponent, selector: "[menu-item-group]", inputs: ["item"] }] });
446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SideMenuComponent, decorators: [{
447
- type: Component,
448
- args: [{ selector: 'side-menu', template: "<nav\n id=\"menu-left\"\n class=\"navbar-default navbar-main navbar-static-side open\"\n role=\"navigation\"\n>\n <div class=\"sidebar-collapse\">\n <ul id=\"side-menu\" class=\"nav\">\n <li class=\"nav-header\">\n <div class=\"profile-element\">\n <a [routerLink]=\"['/']\" class=\"img-supply\">\n <img alt=\"Supply Stream logo\" />\n </a>\n </div>\n <div class=\"logo-element\" (click)=\"onLogoClick()\">\n <i class=\"fa fa-exchange\"></i>\n </div>\n </li>\n </ul>\n\n <div class=\"sidebar-collapse\">\n <ul class=\"nav\">\n <ng-template ngFor let-item [ngForOf]=\"items\">\n <li\n #itemComponent\n menu-item-group\n [item]=\"item\"\n [ngClass]=\"{\n menu: true,\n active: item.expanded ? item.expanded : false,\n collapsed: itemComponent.collapsed\n }\"\n (click)=\"collapse(itemComponent, item, $event)\"\n ></li>\n </ng-template>\n </ul>\n </div>\n </div>\n</nav>\n" }]
449
- }], propDecorators: { items: [{
450
- type: Input
451
- }], logoClick: [{
452
- type: Output
453
- }] } });
454
-
455
- class TreeViewNodeComponent {
456
- constructor() {
457
- this.expanded = true;
458
- }
459
- ngOnInit() {
460
- this.expanded = !this.hasExpand;
461
- }
462
- toggleExpand() {
463
- this.expanded = !this.expanded;
464
- }
465
- expandAll() {
466
- if (this.hasExpand) {
467
- this.expanded = true;
468
- }
469
- this.treeViewProps.forEach((x) => x.expandAll());
470
- }
471
- collapseAll() {
472
- if (this.hasExpand) {
473
- this.expanded = false;
474
- }
475
- this.treeViewProps.forEach((x) => x.collapseAll());
476
- }
477
- }
478
- TreeViewNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: TreeViewNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
479
- TreeViewNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: TreeViewNodeComponent, selector: "tree-view-node", inputs: { node: "node", hasExpand: "hasExpand" }, viewQueries: [{ propertyName: "treeViewProps", predicate: ["node"], descendants: true }], ngImport: i0, template: "<span class=\"tree-view-node\">\n <span class=\"bracket\">{{ node.brackets?.inside }}</span>\n <ng-container\n *ngIf=\"node.isPrimitive; then primitiveNode; else baseNode\"\n ></ng-container>\n <span class=\"bracket\">{{ node.brackets?.outside }}</span>\n</span>\n\n<ng-template #primitiveNode>\n <span class=\"tree-view-prop\">\n {{ node.startTag }}\n <span [ngClass]=\"node.nodeType\">\n {{ node.value }}\n </span>\n {{ node.endTag }}\n </span>\n</ng-template>\n\n<ng-template #baseNode>\n <span>\n <em\n [ngClass]=\"\n expanded\n ? 'fa fa-caret-down node-toggler'\n : 'fa fa-caret-right node-toggler'\n \"\n *ngIf=\"hasExpand\"\n (click)=\"toggleExpand()\"\n ></em>\n <span class=\"ellipsis\" *ngIf=\"!expanded && !node.startTag\">...</span>\n <ul [ngClass]=\"!expanded ? 'hidden' : ''\">\n <li class=\"tree-view-prop\" *ngFor=\"let child of node.children\">\n <span class=\"prop-name\">{{ child.startTag }}</span>\n <span *ngIf=\"child.isPrimitive\" [ngClass]=\"child.nodeType\">{{\n child.value\n }}</span>\n <ng-container *ngIf=\"child.isComplex\">\n <tree-view-node\n [node]=\"child\"\n [hasExpand]=\"true\"\n #node\n ></tree-view-node>\n </ng-container>\n <span class=\"prop-name\">{{ child.endTag }}</span>\n </li>\n </ul>\n </span>\n</ng-template>\n", styles: ["*{font-size:14px}li{position:relative}.prop-name{color:#555;font-weight:700}.tree-view-prop{list-style-type:none;margin:4px 0;word-wrap:break-word}.tree-view-prop{position:relative;padding-left:20px}.tree-view-prop .number{color:#00f}.tree-view-prop .string{color:green}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TreeViewNodeComponent, selector: "tree-view-node", inputs: ["node", "hasExpand"] }] });
480
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: TreeViewNodeComponent, decorators: [{
481
- type: Component,
482
- args: [{ selector: 'tree-view-node', template: "<span class=\"tree-view-node\">\n <span class=\"bracket\">{{ node.brackets?.inside }}</span>\n <ng-container\n *ngIf=\"node.isPrimitive; then primitiveNode; else baseNode\"\n ></ng-container>\n <span class=\"bracket\">{{ node.brackets?.outside }}</span>\n</span>\n\n<ng-template #primitiveNode>\n <span class=\"tree-view-prop\">\n {{ node.startTag }}\n <span [ngClass]=\"node.nodeType\">\n {{ node.value }}\n </span>\n {{ node.endTag }}\n </span>\n</ng-template>\n\n<ng-template #baseNode>\n <span>\n <em\n [ngClass]=\"\n expanded\n ? 'fa fa-caret-down node-toggler'\n : 'fa fa-caret-right node-toggler'\n \"\n *ngIf=\"hasExpand\"\n (click)=\"toggleExpand()\"\n ></em>\n <span class=\"ellipsis\" *ngIf=\"!expanded && !node.startTag\">...</span>\n <ul [ngClass]=\"!expanded ? 'hidden' : ''\">\n <li class=\"tree-view-prop\" *ngFor=\"let child of node.children\">\n <span class=\"prop-name\">{{ child.startTag }}</span>\n <span *ngIf=\"child.isPrimitive\" [ngClass]=\"child.nodeType\">{{\n child.value\n }}</span>\n <ng-container *ngIf=\"child.isComplex\">\n <tree-view-node\n [node]=\"child\"\n [hasExpand]=\"true\"\n #node\n ></tree-view-node>\n </ng-container>\n <span class=\"prop-name\">{{ child.endTag }}</span>\n </li>\n </ul>\n </span>\n</ng-template>\n", styles: ["*{font-size:14px}li{position:relative}.prop-name{color:#555;font-weight:700}.tree-view-prop{list-style-type:none;margin:4px 0;word-wrap:break-word}.tree-view-prop{position:relative;padding-left:20px}.tree-view-prop .number{color:#00f}.tree-view-prop .string{color:green}\n"] }]
483
- }], propDecorators: { treeViewProps: [{
484
- type: ViewChildren,
485
- args: ['node']
486
- }], node: [{
487
- type: Input
488
- }], hasExpand: [{
489
- type: Input
490
- }] } });
491
-
492
- var ContentTypesFormat;
493
- (function (ContentTypesFormat) {
494
- ContentTypesFormat["Json"] = "json";
495
- ContentTypesFormat["Xml"] = "xml";
496
- ContentTypesFormat["Text"] = "text";
497
- })(ContentTypesFormat || (ContentTypesFormat = {}));
498
-
499
- class AbstractContentResolver {
500
- constructor(resolver) {
501
- this.nextResolver = resolver;
502
- }
503
- resolve(data) {
504
- if (this.nextResolver) {
505
- return this.nextResolver.resolve(data);
506
- }
507
- return null;
508
- }
509
- }
510
-
511
- var TreeViewNodeTypes;
512
- (function (TreeViewNodeTypes) {
513
- TreeViewNodeTypes["Object"] = "object";
514
- TreeViewNodeTypes["Array"] = "array";
515
- TreeViewNodeTypes["String"] = "string";
516
- TreeViewNodeTypes["Number"] = "number";
517
- TreeViewNodeTypes["Boolean"] = "boolean";
518
- })(TreeViewNodeTypes || (TreeViewNodeTypes = {}));
519
-
520
- class TreeViewNode {
521
- get isPrimitive() {
522
- return (this.nodeType === TreeViewNodeTypes.Number ||
523
- this.nodeType === TreeViewNodeTypes.String ||
524
- this.nodeType === TreeViewNodeTypes.Boolean);
525
- }
526
- get isArray() {
527
- return this.nodeType === TreeViewNodeTypes.Array;
528
- }
529
- get isObject() {
530
- return this.nodeType === TreeViewNodeTypes.Object;
531
- }
532
- get isComplex() {
533
- return this.isArray || this.isObject;
534
- }
535
- get children() {
536
- return Array.isArray(this.value)
537
- ? this.value
538
- : [this.value];
539
- }
540
- constructor(init) {
541
- Object.assign(this, init);
542
- }
543
- }
544
-
545
- function getNodeTypeFromKey(key) {
546
- return (Object.values(TreeViewNodeTypes).find((x) => x === key) ||
547
- TreeViewNodeTypes.Object);
548
- }
549
-
550
- const objectBrackets = { inside: '{', outside: '}' };
551
- const arrayBrackets = { inside: '[', outside: ']' };
552
- class JsonConverter {
553
- static convert(source) {
554
- if (Array.isArray(source)) {
555
- return this.convertArray(source);
556
- }
557
- return this.convertObject(source);
558
- }
559
- static convertObject(source) {
560
- const props = [];
561
- for (const name of Object.keys(source)) {
562
- const value = source[name];
563
- let propType = value !== null
564
- ? getNodeTypeFromKey(typeof value)
565
- : TreeViewNodeTypes.String;
566
- if (Array.isArray(value)) {
567
- const result = this.convertArray(value);
568
- const nodeType = Array.isArray(result)
569
- ? TreeViewNodeTypes.Array
570
- : TreeViewNodeTypes.Object;
571
- props.push(new TreeViewNode({
572
- startTag: `${name}: `,
573
- value: result,
574
- nodeType,
575
- brackets: arrayBrackets,
576
- }));
577
- continue;
578
- }
579
- if (propType === TreeViewNodeTypes.Object) {
580
- props.push(new TreeViewNode({
581
- startTag: `${name}: `,
582
- value: this.convertObject(value),
583
- nodeType: propType,
584
- }));
585
- continue;
586
- }
587
- props.push(new TreeViewNode({
588
- startTag: `${name}: `,
589
- value,
590
- nodeType: propType,
591
- }));
592
- }
593
- return new TreeViewNode({
594
- value: props,
595
- nodeType: TreeViewNodeTypes.Object,
596
- brackets: objectBrackets,
597
- });
598
- }
599
- static convertArray(source) {
600
- const nodes = [];
601
- source.forEach((item, index) => {
602
- if (typeof item !== TreeViewNodeTypes.Object) {
603
- nodes.push(this.getPrimitive(item, index));
604
- }
605
- else {
606
- const brackets = Array.isArray(item) ? arrayBrackets : objectBrackets;
607
- const inside = brackets.inside;
608
- const outside = brackets.outside;
609
- nodes.push(new TreeViewNode(Object.assign(Object.assign({}, this.convertObject(item)), { nodeType: Array.isArray(item)
610
- ? TreeViewNodeTypes.Array
611
- : getNodeTypeFromKey(typeof item), brackets: {
612
- inside: `${index}: ${inside}`,
613
- outside,
614
- } })));
615
- }
616
- });
617
- return new TreeViewNode({
618
- value: [
619
- new TreeViewNode({
620
- value: nodes,
621
- nodeType: TreeViewNodeTypes.Array,
622
- }),
623
- ],
624
- brackets: arrayBrackets,
625
- nodeType: TreeViewNodeTypes.Array,
626
- });
627
- }
628
- static getPrimitive(source, index) {
629
- const nodeType = getNodeTypeFromKey(typeof source);
630
- return new TreeViewNode({
631
- startTag: `${index}: `,
632
- value: source,
633
- nodeType,
634
- });
635
- }
636
- }
637
-
638
- class JsonResolver extends AbstractContentResolver {
639
- resolve(data) {
640
- try {
641
- const json = JSON.parse(data);
642
- return {
643
- data: JsonConverter.convert(json),
644
- format: ContentTypesFormat.Json,
645
- };
646
- }
647
- catch (e) {
648
- return super.resolve(data);
649
- }
650
- }
651
- }
652
-
653
- class TextConverter {
654
- static convert(source) {
655
- return new TreeViewNode({
656
- value: source,
657
- nodeType: TreeViewNodeTypes.String,
658
- });
659
- }
660
- }
661
-
662
- class TextResolver extends AbstractContentResolver {
663
- resolve(data) {
664
- return {
665
- data: TextConverter.convert(data),
666
- format: ContentTypesFormat.Text,
667
- };
668
- }
669
- }
670
-
671
- class XmlConverter {
672
- static convert(source) {
673
- if (source.childElementCount > 1) {
674
- return this.convertObject(source.childNodes);
675
- }
676
- return new TreeViewNode({
677
- value: [this.convertProp(source.children[0])],
678
- nodeType: TreeViewNodeTypes.Array,
679
- });
680
- }
681
- static convertProp(source) {
682
- const name = source.tagName;
683
- let value;
684
- let nodeType;
685
- if (source.childElementCount > 0) {
686
- value = this.convertObject(source.children);
687
- nodeType = TreeViewNodeTypes.Array;
688
- }
689
- else {
690
- value = source.textContent;
691
- nodeType = getNodeTypeFromKey(typeof value);
692
- }
693
- return new TreeViewNode({
694
- startTag: `<${name}>`,
695
- endTag: `</${name}>`,
696
- value,
697
- nodeType,
698
- });
699
- }
700
- static convertObject(childs) {
701
- const nodes = Array();
702
- for (const item of childs) {
703
- nodes.push(this.convertProp(item));
704
- }
705
- return nodes;
706
- }
707
- }
708
-
709
- class XmlResolver extends AbstractContentResolver {
710
- resolve(data) {
711
- if (!this.isValidXMLOrHtmlDocument(data)) {
712
- return super.resolve(data);
713
- }
714
- try {
715
- const oParser = new DOMParser();
716
- const oDOM = oParser.parseFromString(data, 'text/xml');
717
- if (oDOM.childElementCount > 0 &&
718
- oDOM.getElementsByTagName('parsererror').length === 0) {
719
- return {
720
- data: XmlConverter.convert(oDOM),
721
- format: ContentTypesFormat.Xml,
722
- };
723
- }
724
- }
725
- catch (e) { }
726
- return super.resolve(data);
727
- }
728
- isValidXMLOrHtmlDocument(data) {
729
- return data.trim().startsWith('<');
730
- }
731
- }
732
-
733
- class ContentResolver {
734
- constructor() {
735
- this.chain = new JsonResolver(new XmlResolver(new TextResolver(null)));
736
- }
737
- resolve(data) {
738
- return this.chain.resolve(data);
739
- }
740
- }
741
-
742
- class TextPrettifier {
743
- prettify(data) {
744
- return data;
745
- }
746
- }
747
-
748
- class XmlPrettifier {
749
- prettify(data) {
750
- data = data.replace(/\s*\</g, '<');
751
- return new XmlBeautify().beautify(data, {
752
- collapseContent: true,
753
- });
754
- }
755
- }
756
-
757
- class JsonPrettifier {
758
- prettify(data) {
759
- return JSON.stringify(JSON.parse(data), null, 2);
760
- }
761
- }
762
-
763
- class PrettifierFactory {
764
- static Create(format) {
765
- switch (format) {
766
- case ContentTypesFormat.Json:
767
- return new JsonPrettifier();
768
- case ContentTypesFormat.Xml:
769
- return new XmlPrettifier();
770
- default:
771
- return new TextPrettifier();
772
- }
773
- }
774
- }
775
-
776
- class TreeViewComponent {
777
- get IsArray() {
778
- return this.data ? Array.isArray(this.resolved.data) : false;
779
- }
780
- get hasCollapse() {
781
- if (!this.data) {
782
- return false;
783
- }
784
- return this.resolved.format === ContentTypesFormat.Text
785
- ? this.hasTextCollapse()
786
- : this.hasNodeCollapse();
787
- }
788
- get format() {
789
- return !this.rawView ? this.resolved.format : ContentTypesFormat.Text;
790
- }
791
- constructor(clipboardService) {
792
- this.clipboardService = clipboardService;
793
- this.maxTextLength = 1200;
794
- this.maxRootItems = 10;
795
- this.ContentTypesFormat = ContentTypesFormat;
796
- }
797
- ngOnChanges() {
798
- const contentResolver = new ContentResolver();
799
- this.allShow = false;
800
- this.rawView = false;
801
- this.resolved = contentResolver.resolve(this.data);
802
- this.collapsed = this.hasCollapse;
803
- }
804
- expandToggle() {
805
- this.collapsed = !this.collapsed;
806
- }
807
- toggleExpandAll() {
808
- if (this.allShow) {
809
- this.treeViewNodes.forEach((x) => x.collapseAll());
810
- }
811
- else {
812
- this.treeViewNodes.forEach((x) => x.expandAll());
813
- }
814
- this.collapsed = this.hasCollapse ? this.allShow : false;
815
- this.allShow = !this.allShow;
816
- }
817
- toggleRawView() {
818
- this.rawView = !this.rawView;
819
- }
820
- copyToClipboard() {
821
- this.clipboardService.copy(this.data);
822
- }
823
- prettyCopyToClipboard() {
824
- this.clipboardService.copy(PrettifierFactory.Create(this.format).prettify(this.data));
825
- }
826
- hasTextCollapse() {
827
- return this.data.length > this.maxTextLength;
828
- }
829
- hasNodeCollapse() {
830
- if (!Array.isArray(this.resolved.data)) {
831
- return (this.resolved.data.value.length > this.maxRootItems);
832
- }
833
- return false;
834
- }
835
- }
836
- TreeViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: TreeViewComponent, deps: [{ token: i1$2.ClipboardService }], target: i0.ɵɵFactoryTarget.Component });
837
- TreeViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: TreeViewComponent, selector: "tree-view", inputs: { data: "data", maxTextLength: "maxTextLength", maxRootItems: "maxRootItems" }, viewQueries: [{ propertyName: "treeViewNodes", predicate: ["node"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"tree-view\"\n [ngClass]=\"collapsed ? 'collapsed' : 'expanded'\"\n [class]=\"format\"\n *ngIf=\"data\"\n>\n <ng-container *ngIf=\"format != ContentTypesFormat.Text; else textFormat\">\n <div>\n <ng-container *ngTemplateOutlet=\"defaultActions\"></ng-container>\n </div>\n <div [ngClass]=\"allShow ? 'show-all tree-view-body' : 'tree-view-body'\">\n <ng-container *ngIf=\"IsArray; then arrayNode; else singleNode\">\n </ng-container>\n <ng-template #singleNode>\n <tree-view-node [node]=\"resolved.data\" #node> </tree-view-node>\n </ng-template>\n\n <ng-template #arrayNode>\n <tree-view-node\n *ngFor=\"let node of resolved.data\"\n [node]=\"node\"\n [hasExpand]=\"true\"\n class=\"array-node\"\n #node\n >\n </tree-view-node>\n </ng-template>\n </div>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n (click)=\"toggleExpandAll()\"\n *ngIf=\"resolved.format !== ContentTypesFormat.Text\"\n [disabled]=\"rawView\"\n class=\"tree-view-action\"\n title=\"{{\n (collapsed ? 'TreeViewMessages.Expand' : 'TreeViewMessages.Collapse')\n | translate\n }}\"\n >\n <i [ngClass]=\"allShow ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </button>\n <button\n (click)=\"copyToClipboard()\"\n class=\"tree-view-action\"\n title=\"{{ 'TreeViewMessages.CopyToClipboard' | translate }}\"\n >\n <i class=\"fa fa-clipboard\"></i>\n </button>\n <button\n (click)=\"prettyCopyToClipboard()\"\n class=\"tree-view-action\"\n title=\"{{ 'TreeViewMessages.PrettyCopyToClipboard' | translate }}\"\n >\n <i class=\"fa fa-magic\"></i>\n </button>\n <button\n (click)=\"toggleRawView()\"\n class=\"tree-view-action\"\n [ngClass]=\"rawView ? 'pressed' : ''\"\n *ngIf=\"resolved.format !== ContentTypesFormat.Text\"\n title=\"{{\n (rawView\n ? 'TreeViewMessages.ToJsonView'\n : 'TreeViewMessages.ToFormattedView'\n ) | translate\n }}\"\n >\n <i class=\"fa fa-file-text-o\"></i>\n </button>\n </ng-template>\n\n <ng-template #textFormat>\n <ng-container *ngTemplateOutlet=\"defaultActions\"> </ng-container>\n <pre class=\"text-view tree-view-body\">{{ data }}</pre>\n </ng-template>\n <div *ngIf=\"hasCollapse\">\n <button (click)=\"expandToggle()\" class=\"expand-toggler\">\n <i\n class=\"fa\"\n [ngClass]=\"\n collapsed ? 'fa-chevron-circle-down' : 'fa-chevron-circle-up'\n \"\n ></i>\n </button>\n </div>\n</div>\n", styles: [":host ::ng-deep .tree-view ul{padding-left:20px;margin:0}:host ::ng-deep .node-toggler{position:absolute;left:3px;color:#222;font-size:14px;font-weight:700;padding:1px;cursor:pointer;width:20px}:host .tree-view{position:relative}:host ::ng-deep .hidden{display:none}:host .tree-view-action{margin:3px}:host .tree-view-body{position:relative;margin:5px;padding:0 20px;font-family:monospace;overflow:hidden}:host .collapsed .tree-view-body{max-height:200px}:host .expand-toggler{width:100%;height:30px;background:none;border:none;outline:none;cursor:pointer;position:relative;background:linear-gradient(#fff0,#ffff 45%);max-width:100%;padding:0;left:0;transition:all ease-in-out .1s;margin-top:15px}:host .expand-toggler .fa{font-size:16px;color:#444;transition:all ease-in-out .3s}:host .collapsed .expand-toggler{height:60px;margin-top:-40px;padding-top:20px;position:absolute}:host .expand-toggler:hover .fa{color:#36517e;transform:scale(1.7) rotate(-90deg)}:host .collapsed{padding-bottom:20px}:host .text-view{white-space:pre-wrap}:host .tree-view-action:disabled{opacity:.65}:host .tree-view-action.pressed{box-shadow:1px 1px 3px #0004 inset}::ng-deep .json .array-node{display:block}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TreeViewNodeComponent, selector: "tree-view-node", inputs: ["node", "hasExpand"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
838
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: TreeViewComponent, decorators: [{
839
- type: Component,
840
- args: [{ selector: 'tree-view', template: "<div\n class=\"tree-view\"\n [ngClass]=\"collapsed ? 'collapsed' : 'expanded'\"\n [class]=\"format\"\n *ngIf=\"data\"\n>\n <ng-container *ngIf=\"format != ContentTypesFormat.Text; else textFormat\">\n <div>\n <ng-container *ngTemplateOutlet=\"defaultActions\"></ng-container>\n </div>\n <div [ngClass]=\"allShow ? 'show-all tree-view-body' : 'tree-view-body'\">\n <ng-container *ngIf=\"IsArray; then arrayNode; else singleNode\">\n </ng-container>\n <ng-template #singleNode>\n <tree-view-node [node]=\"resolved.data\" #node> </tree-view-node>\n </ng-template>\n\n <ng-template #arrayNode>\n <tree-view-node\n *ngFor=\"let node of resolved.data\"\n [node]=\"node\"\n [hasExpand]=\"true\"\n class=\"array-node\"\n #node\n >\n </tree-view-node>\n </ng-template>\n </div>\n </ng-container>\n\n <ng-template #defaultActions>\n <button\n (click)=\"toggleExpandAll()\"\n *ngIf=\"resolved.format !== ContentTypesFormat.Text\"\n [disabled]=\"rawView\"\n class=\"tree-view-action\"\n title=\"{{\n (collapsed ? 'TreeViewMessages.Expand' : 'TreeViewMessages.Collapse')\n | translate\n }}\"\n >\n <i [ngClass]=\"allShow ? 'fa fa-minus' : 'fa fa-plus'\"></i>\n </button>\n <button\n (click)=\"copyToClipboard()\"\n class=\"tree-view-action\"\n title=\"{{ 'TreeViewMessages.CopyToClipboard' | translate }}\"\n >\n <i class=\"fa fa-clipboard\"></i>\n </button>\n <button\n (click)=\"prettyCopyToClipboard()\"\n class=\"tree-view-action\"\n title=\"{{ 'TreeViewMessages.PrettyCopyToClipboard' | translate }}\"\n >\n <i class=\"fa fa-magic\"></i>\n </button>\n <button\n (click)=\"toggleRawView()\"\n class=\"tree-view-action\"\n [ngClass]=\"rawView ? 'pressed' : ''\"\n *ngIf=\"resolved.format !== ContentTypesFormat.Text\"\n title=\"{{\n (rawView\n ? 'TreeViewMessages.ToJsonView'\n : 'TreeViewMessages.ToFormattedView'\n ) | translate\n }}\"\n >\n <i class=\"fa fa-file-text-o\"></i>\n </button>\n </ng-template>\n\n <ng-template #textFormat>\n <ng-container *ngTemplateOutlet=\"defaultActions\"> </ng-container>\n <pre class=\"text-view tree-view-body\">{{ data }}</pre>\n </ng-template>\n <div *ngIf=\"hasCollapse\">\n <button (click)=\"expandToggle()\" class=\"expand-toggler\">\n <i\n class=\"fa\"\n [ngClass]=\"\n collapsed ? 'fa-chevron-circle-down' : 'fa-chevron-circle-up'\n \"\n ></i>\n </button>\n </div>\n</div>\n", styles: [":host ::ng-deep .tree-view ul{padding-left:20px;margin:0}:host ::ng-deep .node-toggler{position:absolute;left:3px;color:#222;font-size:14px;font-weight:700;padding:1px;cursor:pointer;width:20px}:host .tree-view{position:relative}:host ::ng-deep .hidden{display:none}:host .tree-view-action{margin:3px}:host .tree-view-body{position:relative;margin:5px;padding:0 20px;font-family:monospace;overflow:hidden}:host .collapsed .tree-view-body{max-height:200px}:host .expand-toggler{width:100%;height:30px;background:none;border:none;outline:none;cursor:pointer;position:relative;background:linear-gradient(#fff0,#ffff 45%);max-width:100%;padding:0;left:0;transition:all ease-in-out .1s;margin-top:15px}:host .expand-toggler .fa{font-size:16px;color:#444;transition:all ease-in-out .3s}:host .collapsed .expand-toggler{height:60px;margin-top:-40px;padding-top:20px;position:absolute}:host .expand-toggler:hover .fa{color:#36517e;transform:scale(1.7) rotate(-90deg)}:host .collapsed{padding-bottom:20px}:host .text-view{white-space:pre-wrap}:host .tree-view-action:disabled{opacity:.65}:host .tree-view-action.pressed{box-shadow:1px 1px 3px #0004 inset}::ng-deep .json .array-node{display:block}\n"] }]
841
- }], ctorParameters: function () { return [{ type: i1$2.ClipboardService }]; }, propDecorators: { treeViewNodes: [{
842
- type: ViewChildren,
843
- args: ['node']
844
- }], data: [{
845
- type: Input
846
- }], maxTextLength: [{
847
- type: Input
848
- }], maxRootItems: [{
849
- type: Input
850
- }] } });
851
-
852
- let defaultConfig = {
853
- langs: {
854
- getTranslation() {
855
- return of({});
856
- },
857
- },
858
- appSettings: {
859
- accountUrl: '',
860
- apiUrl: '',
861
- toastrTimeOut: 2500,
862
- azureB2C: {
863
- clientId: '',
864
- authority: '',
865
- knownAuthorities: [''],
866
- },
867
- },
868
- };
869
- class IndiginaModule {
870
- static forRoot(configuration) {
871
- return {
872
- ngModule: IndiginaModule,
873
- providers: [
874
- {
875
- provide: APP_INITIALIZER,
876
- useFactory: LocaleServiceSettingsFactory,
877
- multi: true,
878
- deps: [LocaleSettingsService],
879
- },
880
- {
881
- provide: IndiginaConfiguration,
882
- useValue: configuration ? configuration : defaultConfig,
883
- },
884
- ],
885
- };
886
- }
887
- }
888
- IndiginaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IndiginaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
889
- IndiginaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: IndiginaModule, declarations: [SideMenuComponent,
890
- MenuItemGroupComponent,
891
- TreeViewComponent,
892
- TreeViewNodeComponent,
893
- DebounceDirective,
894
- GeneralErrorsComponent], imports: [BrowserModule,
895
- HttpClientModule, i1$1.TranslateModule, LoadingBarHttpClientModule,
896
- CommonModule,
897
- RouterModule,
898
- ReactiveFormsModule, i1$3.ToastrModule, BrowserAnimationsModule,
899
- FieldInputModule], exports: [SideMenuComponent,
900
- TreeViewComponent,
901
- DebounceDirective,
902
- GeneralErrorsComponent,
903
- TranslateModule,
904
- ClipboardModule,
905
- LoadingBarHttpClientModule,
906
- ToastrModule,
907
- BrowserAnimationsModule,
908
- FieldInputModule] });
909
- IndiginaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IndiginaModule, providers: [
910
- {
911
- provide: APP_INITIALIZER,
912
- useFactory: LocaleServiceSettingsFactory,
913
- multi: true,
914
- deps: [LocaleSettingsService],
915
- },
916
- {
917
- provide: IndiginaConfiguration,
918
- useValue: defaultConfig,
919
- },
920
- {
921
- provide: AppSettings,
922
- useFactory: AppSettingsFactory,
923
- deps: [IndiginaConfiguration],
924
- },
925
- TranslateStore,
926
- ], imports: [BrowserModule,
927
- HttpClientModule,
928
- TranslateModule.forChild({
929
- loader: {
930
- provide: TranslateLoader,
931
- useFactory: TranslateLoaderFactory,
932
- deps: [IndiginaConfiguration, HttpClient],
933
- },
934
- }),
935
- LoadingBarHttpClientModule,
936
- CommonModule,
937
- RouterModule,
938
- ReactiveFormsModule,
939
- ToastrModule.forRoot(),
940
- BrowserAnimationsModule,
941
- FieldInputModule, TranslateModule,
942
- ClipboardModule,
943
- LoadingBarHttpClientModule,
944
- ToastrModule,
945
- BrowserAnimationsModule,
946
- FieldInputModule] });
947
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IndiginaModule, decorators: [{
948
- type: NgModule,
949
- args: [{
950
- declarations: [
951
- SideMenuComponent,
952
- MenuItemGroupComponent,
953
- TreeViewComponent,
954
- TreeViewNodeComponent,
955
- DebounceDirective,
956
- GeneralErrorsComponent,
957
- ],
958
- imports: [
959
- BrowserModule,
960
- HttpClientModule,
961
- TranslateModule.forChild({
962
- loader: {
963
- provide: TranslateLoader,
964
- useFactory: TranslateLoaderFactory,
965
- deps: [IndiginaConfiguration, HttpClient],
966
- },
967
- }),
968
- LoadingBarHttpClientModule,
969
- CommonModule,
970
- RouterModule,
971
- ReactiveFormsModule,
972
- ToastrModule.forRoot(),
973
- BrowserAnimationsModule,
974
- FieldInputModule,
975
- ],
976
- providers: [
977
- {
978
- provide: APP_INITIALIZER,
979
- useFactory: LocaleServiceSettingsFactory,
980
- multi: true,
981
- deps: [LocaleSettingsService],
982
- },
983
- {
984
- provide: IndiginaConfiguration,
985
- useValue: defaultConfig,
986
- },
987
- {
988
- provide: AppSettings,
989
- useFactory: AppSettingsFactory,
990
- deps: [IndiginaConfiguration],
991
- },
992
- TranslateStore,
993
- ],
994
- exports: [
995
- SideMenuComponent,
996
- TreeViewComponent,
997
- DebounceDirective,
998
- GeneralErrorsComponent,
999
- TranslateModule,
1000
- ClipboardModule,
1001
- LoadingBarHttpClientModule,
1002
- ToastrModule,
1003
- BrowserAnimationsModule,
1004
- FieldInputModule,
1005
- ],
1006
- }]
1007
- }] });
1008
- function LocaleServiceSettingsFactory(localeService) {
1009
- return function () {
1010
- localeService.init();
1011
- };
1012
- }
1013
- function TranslateLoaderFactory(configuration) {
1014
- return configuration.langs;
1015
- }
1016
- function AppSettingsFactory(configuration) {
1017
- return configuration.appSettings;
1018
- }
1019
-
1020
- const endpoints = {
1021
- signalr: {
1022
- eventsHub: 'EventsHub',
1023
- },
1024
- oidc: {
1025
- config: 'oidc/config',
1026
- },
1027
- members: {
1028
- me: 'members/me',
1029
- },
1030
- admins: Object.assign(Object.assign({}, buildEntityEndpoints('admins')), { roles: Object.assign({}, buildEntityEndpoints('admins/roles')) }),
1031
- system: {
1032
- info: 'system/info',
1033
- },
1034
- firstUser: 'admins/first',
1035
- partners: buildEntityEndpoints('partners'),
1036
- permissions: {
1037
- all: (type) => `permissions/${type}s`,
1038
- member: (id) => `permissions/${id}`,
1039
- mine: 'permissions/me',
1040
- },
1041
- users: Object.assign(Object.assign({}, buildEntityEndpoints('users')), { roles: Object.assign({}, buildEntityEndpoints('users/roles')) }),
1042
- apiTokens: buildEntityEndpoints('apiTokens'),
1043
- };
1044
- const guidFormat = /'((\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1})'/g;
1045
- function buildEntityEndpoints(name) {
1046
- return {
1047
- path: name,
1048
- query: (state) => `${name}?${toODataString(state, { utcDates: true }).replace(guidFormat, '$1')}`,
1049
- entityPath: (id) => `${name}/${id}`,
1050
- };
1051
- }
1052
- function buildActivityEndpoints(name) {
1053
- return {
1054
- query: (state) => `activities/${name}?${toODataString(state, {
1055
- utcDates: true,
1056
- }).replace(guidFormat, '$1')}`,
1057
- search: (state, searchTerm) => {
1058
- let uri = `activities/${name}/search?${toODataString(state, {
1059
- utcDates: true,
1060
- })}`;
1061
- if (searchTerm) {
1062
- uri += `&searchTerm=${searchTerm}`;
1063
- }
1064
- return uri;
1065
- },
1066
- detailedActivity: (id, partnerId) => partnerId
1067
- ? `activities/${name}/${id}/${partnerId}`
1068
- : `activities/${name}/${id}`,
1069
- };
1070
- }
1071
-
1072
- var EventNames;
1073
- (function (EventNames) {
1074
- EventNames["UserUpdated"] = "userUpdated";
1075
- EventNames["PermissionsUpdated"] = "permissionsUpdated";
1076
- })(EventNames || (EventNames = {}));
1077
-
1078
- const adminUriPart = '/admin/';
1079
- class BaseAccountService {
1080
- constructor(resolver, httpService, settingsService, signalRService) {
1081
- this.resolver = resolver;
1082
- this.httpService = httpService;
1083
- this.settingsService = settingsService;
1084
- this.signalRService = signalRService;
1085
- this.user = new BehaviorSubject(null);
1086
- this.resolver
1087
- .getProvider()
1088
- .pipe(map((provider) => {
1089
- this.initialize(provider);
1090
- }))
1091
- .subscribe();
1092
- }
1093
- login() {
1094
- this.resolver
1095
- .getProvider()
1096
- .pipe(map((provider) => {
1097
- provider.login();
1098
- }))
1099
- .subscribe();
1100
- }
1101
- logout() {
1102
- this.settingsService.clearLoginAsUser();
1103
- this.resolver
1104
- .getProvider()
1105
- .pipe(map((provider) => {
1106
- provider.logout();
1107
- }))
1108
- .subscribe();
1109
- }
1110
- initialize(provider) {
1111
- this.getCurrentUser().subscribe((user) => {
1112
- if (!user) {
1113
- return;
1114
- }
1115
- const path = this.settingsService.getCallbackPath();
1116
- if (path) {
1117
- this.settingsService.clearCallbackPath();
1118
- window.location.href = window.location.origin + path;
1119
- return;
1120
- }
1121
- if (this.isAdmin(user) &&
1122
- !window.location.pathname.startsWith(adminUriPart)) {
1123
- window.location.href = `${window.location.origin}${adminUriPart}`;
1124
- return;
1125
- }
1126
- provider.getAccessToken().subscribe((token) => {
1127
- this.signalRService.startConnection(token);
1128
- this.signalRService
1129
- .on(EventNames.UserUpdated)
1130
- .subscribe(() => __awaiter(this, void 0, void 0, function* () {
1131
- provider.getAccessToken().subscribe((token) => {
1132
- this.signalRService.reconnect(token);
1133
- });
1134
- this.httpService
1135
- .get(endpoints.members.me)
1136
- .subscribe((user) => this.user.next(user));
1137
- }));
1138
- });
1139
- });
1140
- }
1141
- getCurrentUser() {
1142
- return this.resolver.getProvider().pipe(mergeMap((provider) => {
1143
- if (this.user.getValue() || !provider.isUserLoggedIn()) {
1144
- return this.user;
1145
- }
1146
- return provider.getAccessToken().pipe(mergeMap(() => {
1147
- return this.httpService.get(endpoints.members.me).pipe(map((user) => {
1148
- this.user.next(user);
1149
- return user;
1150
- }));
1151
- }));
1152
- }));
1153
- }
1154
- isUserLoggedIn() {
1155
- return this.resolver
1156
- .getProvider()
1157
- .pipe(map((provider) => provider.isUserLoggedIn()));
1158
- }
1159
- }
1160
-
1161
- class ReEntrySubscription {
1162
- constructor(observable, action) {
1163
- this.observable = observable;
1164
- this.action = action;
1165
- }
1166
- get connected() {
1167
- return !this.subscription.closed;
1168
- }
1169
- resume() {
1170
- this.subscription = this.observable.subscribe(this.action);
1171
- }
1172
- pause() {
1173
- this.subscription.unsubscribe();
1174
- }
1175
- }
1176
-
1177
- class FormGroupWithErrors extends UntypedFormGroup {
1178
- constructor(controls, validatorOrOpts, asyncValidator) {
1179
- super(controls, validatorOrOpts, asyncValidator);
1180
- this.generalErrors = [];
1181
- }
1182
- getControl(name) {
1183
- if (!this.contains(name)) {
1184
- this.addControl(name, new UntypedFormControl({}));
1185
- }
1186
- return this.get(name);
1187
- }
1188
- applyServerErrors(error, form) {
1189
- this.generalErrors = [];
1190
- if (error.title) {
1191
- this.generalErrors.push(error.title);
1192
- }
1193
- if (!form) {
1194
- form = this;
1195
- }
1196
- for (const key in error.errors) {
1197
- const ctrl = form.controls[key];
1198
- if (ctrl) {
1199
- ctrl.setErrors({ serverErrorMsg: error.errors[key].join(',') });
1200
- }
1201
- else {
1202
- this.generalErrors.push(error.errors[key].join(','));
1203
- }
1204
- }
1205
- }
1206
- }
1207
-
1208
- var HttpCodes;
1209
- (function (HttpCodes) {
1210
- HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
1211
- HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
1212
- HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
1213
- HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
1214
- HttpCodes[HttpCodes["OK"] = 200] = "OK";
1215
- HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
1216
- })(HttpCodes || (HttpCodes = {}));
1217
-
1218
- const HttpMethods = [
1219
- { name: 'POST', id: 'POST' },
1220
- { name: 'PUT', id: 'PUT' },
1221
- { name: 'GET', id: 'GET' },
1222
- { name: 'DELETE', id: 'DELETE' },
1223
- ];
1224
-
1225
- class AppToastrService {
1226
- constructor(toastr, appSettings) {
1227
- this.toastr = toastr;
1228
- this.appSettings = appSettings;
1229
- this.timeout = this.appSettings.toastrTimeOut;
1230
- }
1231
- showError(message, title = 'Error') {
1232
- this.toastr.error(message, title, { timeOut: this.timeout });
1233
- }
1234
- showSuccess(message, title = '') {
1235
- this.toastr.success(message, title, { timeOut: this.timeout });
1236
- }
1237
- }
1238
- AppToastrService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AppToastrService, deps: [{ token: i1$3.ToastrService }, { token: AppSettings }], target: i0.ɵɵFactoryTarget.Injectable });
1239
- AppToastrService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AppToastrService, providedIn: 'root' });
1240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AppToastrService, decorators: [{
1241
- type: Injectable,
1242
- args: [{
1243
- providedIn: 'root',
1244
- }]
1245
- }], ctorParameters: function () { return [{ type: i1$3.ToastrService }, { type: AppSettings }]; } });
1246
-
1247
- const callbackPathKey = 'callbackPath';
1248
- const homePath = '/home';
1249
- const loginAsKey = 'X-User-Id';
1250
- const tokenKey = 'access_token';
1251
- class SettingsService {
1252
- putCurrentCallbackPath() {
1253
- this.putCallbackPath(window.location.pathname + window.location.hash);
1254
- }
1255
- putCallbackPath(pathUri) {
1256
- if (!this.getCallbackPath() && pathUri !== homePath) {
1257
- localStorage.setItem(callbackPathKey, pathUri);
1258
- }
1259
- }
1260
- getCallbackPath() {
1261
- return localStorage.getItem(callbackPathKey);
1262
- }
1263
- clearCallbackPath() {
1264
- localStorage.removeItem(callbackPathKey);
1265
- }
1266
- setLoginAsUser(id) {
1267
- localStorage.setItem(loginAsKey, id);
1268
- }
1269
- getLoginAsUser() {
1270
- return localStorage.getItem(loginAsKey);
1271
- }
1272
- clearLoginAsUser() {
1273
- localStorage.removeItem(loginAsKey);
1274
- }
1275
- clearToken() {
1276
- localStorage.removeItem(tokenKey);
1277
- }
1278
- setToken(token) {
1279
- localStorage.setItem(tokenKey, token);
1280
- }
1281
- getToken() {
1282
- return localStorage.getItem(tokenKey);
1283
- }
1284
- }
1285
- SettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1286
- SettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SettingsService, providedIn: 'root' });
1287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SettingsService, decorators: [{
1288
- type: Injectable,
1289
- args: [{ providedIn: 'root' }]
1290
- }] });
1291
-
1292
- const absoluteUrlRegExp = /^http(s)?:\/\//;
1293
- const slash = '/';
1294
- class HttpService {
1295
- constructor(appToastrService, httpClient, appSettings, translate, router, settingsService) {
1296
- this.appToastrService = appToastrService;
1297
- this.httpClient = httpClient;
1298
- this.appSettings = appSettings;
1299
- this.translate = translate;
1300
- this.router = router;
1301
- this.settingsService = settingsService;
1302
- }
1303
- get(path) {
1304
- return this.httpClient
1305
- .get(this.createUrl(path))
1306
- .pipe(catchError((err) => this.handleServerError(err)));
1307
- }
1308
- delete(path) {
1309
- return this.httpClient.delete(this.createUrl(path)).pipe(tap(() => this.showSuccessMessage('ToastrMessages.RemovedSuccessfully')), catchError((err) => this.handleServerError(err)));
1310
- }
1311
- post(path, data, successTranslateMessage = null) {
1312
- return this.httpClient.post(this.createUrl(path), data).pipe(tap(() => this.showSuccessMessage(successTranslateMessage !== null && successTranslateMessage !== void 0 ? successTranslateMessage : 'ToastrMessages.SavedSuccessfully')), catchError((err) => this.handleServerError(err)));
1313
- }
1314
- put(path, data, successTranslateMessage = null) {
1315
- return this.httpClient.put(this.createUrl(path), data).pipe(tap(() => this.showSuccessMessage(successTranslateMessage !== null && successTranslateMessage !== void 0 ? successTranslateMessage : 'ToastrMessages.SavedSuccessfully')), catchError((err) => this.handleServerError(err)));
1316
- }
1317
- createUrl(path) {
1318
- if (absoluteUrlRegExp.test(path)) {
1319
- return path;
1320
- }
1321
- path = path.startsWith(slash) ? path.slice(1) : path;
1322
- const apiUrl = this.appSettings.apiUrl.endsWith(slash)
1323
- ? this.appSettings.apiUrl
1324
- : this.appSettings.apiUrl + slash;
1325
- return apiUrl + path;
1326
- }
1327
- handleServerError(error) {
1328
- if (error.error instanceof ErrorEvent) {
1329
- // A client-side or network error occurred. Handle it accordingly.
1330
- this.appToastrService.showError('An error occurred: ' + error.error.message);
1331
- return of(null);
1332
- }
1333
- if (error.status === HttpCodes.Unauthorized) {
1334
- this.settingsService.putCurrentCallbackPath();
1335
- this.appToastrService.showError(this.translate.instant('ToastrMessages.Unauthorized'));
1336
- return of(null);
1337
- }
1338
- if (error.status === HttpCodes.Forbidden) {
1339
- this.appToastrService.showError(this.translate.instant('ToastrMessages.Forbidden'));
1340
- this.router.navigate(['forbidden']);
1341
- return of(null);
1342
- }
1343
- if (error.status === HttpCodes.NotFound) {
1344
- if (this.settingsService.getLoginAsUser()) {
1345
- this.settingsService.clearLoginAsUser();
1346
- this.appToastrService.showError(this.translate.instant('ToastrMessages.CanNotLoginAsUser'));
1347
- setTimeout(() => {
1348
- window.location.href = '/';
1349
- }, 1000);
1350
- }
1351
- this.appToastrService.showError(this.translate.instant('ToastrMessages.NotFound'));
1352
- return of(null);
1353
- }
1354
- if (error.status >= HttpCodes.InternalServerError) {
1355
- this.appToastrService.showError(this.translate.instant('ToastrMessages.ServerError') + error.error.title);
1356
- return of(null);
1357
- }
1358
- return throwError(error);
1359
- }
1360
- showSuccessMessage(message) {
1361
- this.appToastrService.showSuccess(this.translate.instant(message));
1362
- }
1363
- }
1364
- HttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: HttpService, deps: [{ token: AppToastrService }, { token: i2$1.HttpClient }, { token: AppSettings }, { token: i1$1.TranslateService }, { token: i1$5.Router }, { token: SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
1365
- HttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: HttpService, providedIn: 'root' });
1366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: HttpService, decorators: [{
1367
- type: Injectable,
1368
- args: [{ providedIn: 'root' }]
1369
- }], ctorParameters: function () { return [{ type: AppToastrService }, { type: i2$1.HttpClient }, { type: AppSettings }, { type: i1$1.TranslateService }, { type: i1$5.Router }, { type: SettingsService }]; } });
1370
-
1371
- class LiveUpdatesControlComponent {
1372
- ngOnInit() {
1373
- this.subscription.resume();
1374
- }
1375
- toggle() {
1376
- this.subscription.connected
1377
- ? this.subscription.pause()
1378
- : this.subscription.resume();
1379
- }
1380
- }
1381
- LiveUpdatesControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LiveUpdatesControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1382
- LiveUpdatesControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: LiveUpdatesControlComponent, selector: "live-updates-control", inputs: { subscription: "subscription" }, ngImport: i0, template: "<button (click)=\"toggle()\" class=\"k-button\">\n <em [ngClass]=\"subscription.connected ? 'fa fa-pause' : 'fa fa-play'\"></em>\n {{\n (subscription.connected ? 'LiveFeed.Pause' : 'LiveFeed.Resume') | translate\n }}\n</button>\n", styles: [":host .fa{margin-right:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
1383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LiveUpdatesControlComponent, decorators: [{
1384
- type: Component,
1385
- args: [{ selector: 'live-updates-control', template: "<button (click)=\"toggle()\" class=\"k-button\">\n <em [ngClass]=\"subscription.connected ? 'fa fa-pause' : 'fa fa-play'\"></em>\n {{\n (subscription.connected ? 'LiveFeed.Pause' : 'LiveFeed.Resume') | translate\n }}\n</button>\n", styles: [":host .fa{margin-right:5px}\n"] }]
1386
- }], propDecorators: { subscription: [{
1387
- type: Input
1388
- }] } });
1389
-
1390
- class AuthProvider {
1391
- }
1392
-
1393
- class AzureB2CProvider extends AuthProvider {
1394
- constructor(authService, settingsService, indiginaConfiguration) {
1395
- super();
1396
- this.authService = authService;
1397
- this.settingsService = settingsService;
1398
- this.indiginaConfiguration = indiginaConfiguration;
1399
- this.isUserLoggedIn = () => { var _a; return !!((_a = this.authService.instance.getActiveAccount()) === null || _a === void 0 ? void 0 : _a.localAccountId); };
1400
- }
1401
- initialize() {
1402
- return of(true);
1403
- }
1404
- login() {
1405
- this.authService.handleRedirectObservable().subscribe();
1406
- if (!this.isUserLoggedIn()) {
1407
- this.authService.loginRedirect().subscribe();
1408
- }
1409
- }
1410
- logout() {
1411
- this.settingsService.clearToken();
1412
- this.authService.logoutRedirect({
1413
- postLogoutRedirectUri: this.indiginaConfiguration.appSettings.azureB2C.logoutRedirectUri,
1414
- });
1415
- }
1416
- getAccessToken() {
1417
- const request = {
1418
- scopes: ['openid', 'offline_access', 'profile'],
1419
- };
1420
- return from(this.authService.instance
1421
- .acquireTokenSilent(request)
1422
- .then((authenticationResult) => {
1423
- const token = authenticationResult.idToken;
1424
- this.settingsService.setToken(token);
1425
- return token;
1426
- })
1427
- .catch((error) => __awaiter(this, void 0, void 0, function* () {
1428
- if (error instanceof InteractionRequiredAuthError) {
1429
- yield this.authService.instance.acquireTokenRedirect(request);
1430
- return this.settingsService.getToken();
1431
- }
1432
- })));
1433
- }
1434
- }
1435
-
1436
- class AuthProviderResolver {
1437
- constructor(msalService, settingsService, indiginaConfiguration) {
1438
- this.AuthProvider$ = new BehaviorSubject(null);
1439
- this.getProvider = () => this.AuthProvider$.pipe(filter((x) => !!x));
1440
- const provider = new AzureB2CProvider(msalService, settingsService, indiginaConfiguration);
1441
- provider.initialize().subscribe(() => this.AuthProvider$.next(provider));
1442
- }
1443
- }
1444
- AuthProviderResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthProviderResolver, deps: [{ token: i1.MsalService }, { token: SettingsService }, { token: IndiginaConfiguration }], target: i0.ɵɵFactoryTarget.Injectable });
1445
- AuthProviderResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthProviderResolver, providedIn: 'root' });
1446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthProviderResolver, decorators: [{
1447
- type: Injectable,
1448
- args: [{
1449
- providedIn: 'root',
1450
- }]
1451
- }], ctorParameters: function () { return [{ type: i1.MsalService }, { type: SettingsService }, { type: IndiginaConfiguration }]; } });
1452
-
1453
- class SignalRService {
1454
- constructor(appSettings) {
1455
- this.appSettings = appSettings;
1456
- this.isConnectionEstablished = false;
1457
- this.eventEmitters = {};
1458
- }
1459
- createConnection(token) {
1460
- var _a;
1461
- this.hubConnection = new signalR.HubConnectionBuilder()
1462
- .withUrl(this.appSettings.apiUrl + endpoints.signalr.eventsHub, {
1463
- accessTokenFactory: () => {
1464
- return token;
1465
- },
1466
- })
1467
- .configureLogging((_a = this.appSettings.signalRLogLevel) !== null && _a !== void 0 ? _a : signalR.LogLevel.None)
1468
- .build();
1469
- this.hubConnection.onclose((err) => {
1470
- if (err !== undefined) {
1471
- this.isConnectionEstablished = false;
1472
- this.startConnection(token);
1473
- }
1474
- });
1475
- }
1476
- startConnection(token) {
1477
- if (!this.isConnectionEstablished) {
1478
- this.createConnection(token);
1479
- this.hubConnection
1480
- .start()
1481
- .then(() => {
1482
- this.isConnectionEstablished = true;
1483
- Object.keys(this.eventEmitters).forEach((eventName) => {
1484
- this.hubConnection.on(eventName, (model) => {
1485
- this.eventEmitters[eventName].emit(model);
1486
- });
1487
- });
1488
- })
1489
- .catch(() => {
1490
- console.warn('Error while establishing connection, retrying...');
1491
- setTimeout(() => this.startConnection(token), 5000);
1492
- });
1493
- }
1494
- }
1495
- reconnect(token) {
1496
- if (this.isConnectionEstablished) {
1497
- this.hubConnection.stop().then(() => {
1498
- this.isConnectionEstablished = false;
1499
- this.startConnection(token);
1500
- });
1501
- }
1502
- }
1503
- on(eventName) {
1504
- if (!this.eventEmitters[eventName]) {
1505
- this.eventEmitters[eventName] = new EventEmitter();
1506
- if (this.hubConnection) {
1507
- this.hubConnection.on(eventName, (model) => {
1508
- this.eventEmitters[eventName].emit(model);
1509
- });
1510
- }
1511
- }
1512
- return this.eventEmitters[eventName];
1513
- }
1514
- }
1515
- SignalRService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SignalRService, deps: [{ token: AppSettings }], target: i0.ɵɵFactoryTarget.Injectable });
1516
- SignalRService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SignalRService, providedIn: 'root' });
1517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: SignalRService, decorators: [{
1518
- type: Injectable,
1519
- args: [{ providedIn: 'root' }]
1520
- }], ctorParameters: function () { return [{ type: AppSettings }]; } });
1521
-
1522
- const adminKey = 'Admin';
1523
- class AccountService extends BaseAccountService {
1524
- constructor(resolver, httpService, settingsService, signalRService) {
1525
- super(resolver, httpService, settingsService, signalRService);
1526
- this.resolver = resolver;
1527
- this.isAdmin = (member) => { var _a; return (_a = (member === null || member === void 0 ? void 0 : member.type) === adminKey) !== null && _a !== void 0 ? _a : false; };
1528
- }
1529
- }
1530
- AccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AccountService, deps: [{ token: AuthProviderResolver }, { token: HttpService }, { token: SettingsService }, { token: SignalRService }], target: i0.ɵɵFactoryTarget.Injectable });
1531
- AccountService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AccountService, providedIn: 'root' });
1532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AccountService, decorators: [{
1533
- type: Injectable,
1534
- args: [{
1535
- providedIn: 'root',
1536
- }]
1537
- }], ctorParameters: function () { return [{ type: AuthProviderResolver }, { type: HttpService }, { type: SettingsService }, { type: SignalRService }]; } });
1538
-
1539
- class LanguageSelectorComponent {
1540
- constructor(eref, settings) {
1541
- this.eref = eref;
1542
- this.settings = settings;
1543
- this.visibleChange = new EventEmitter();
1544
- this.currentLanguageCode = '';
1545
- this.currentLanguageCode = this.settings.getLocale();
1546
- this.languages = this.settings.getLocales();
1547
- }
1548
- changeLanguage(code) {
1549
- return __awaiter(this, void 0, void 0, function* () {
1550
- this.currentLanguageCode = code;
1551
- this.settings.setLocale(this.currentLanguageCode);
1552
- this.close();
1553
- });
1554
- }
1555
- close() {
1556
- this.visible = false;
1557
- this.visibleChange.emit(this.visible);
1558
- }
1559
- clickedOutside(event) {
1560
- if (!this.eref.nativeElement.contains(event.target)) {
1561
- this.close();
1562
- }
1563
- }
1564
- }
1565
- LanguageSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LanguageSelectorComponent, deps: [{ token: i0.ElementRef }, { token: LocaleSettingsService }], target: i0.ɵɵFactoryTarget.Component });
1566
- LanguageSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: LanguageSelectorComponent, selector: "language-selector", inputs: { visible: "visible" }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "document:click": "clickedOutside($event)" } }, ngImport: i0, template: "<kendo-window\n *ngIf=\"visible\"\n class=\"language-selector\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n>\n <kendo-window-titlebar>\n <div>{{ 'ChangeLanguage' | translate }}</div>\n <button kendoWindowCloseAction (click)=\"close()\"></button>\n </kendo-window-titlebar>\n <div class=\"languages\" *ngIf=\"languages\">\n <div *ngFor=\"let language of languages\" class=\"language-change-action\">\n <button class=\"btn\" (click)=\"changeLanguage(language.code)\">\n <span\n *ngIf=\"currentLanguageCode == language.code\"\n class=\"fa fa-check\"\n aria-hidden=\"true\"\n ></span>\n {{ language.name }}\n </button>\n </div>\n </div>\n</kendo-window>\n", styles: [".language-selector{right:40px;top:52px!important;left:auto}.language-selector kendo-window-titlebar{padding:5px 8px}.language-selector kendo-window-titlebar div{width:100%}.language-selector .btn{width:95%}.language-selector .fa{margin-right:5px}.language-change-action{padding:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.WindowComponent, selector: "kendo-window", inputs: ["autoFocusedElement", "title", "draggable", "resizable", "themeColor", "keepContent", "state", "minWidth", "minHeight", "width", "height", "top", "left"], outputs: ["dragStart", "dragEnd", "resizeStart", "resizeEnd", "close", "widthChange", "heightChange", "topChange", "leftChange", "stateChange"], exportAs: ["kendoWindow"] }, { kind: "component", type: i3.WindowCloseActionDirective, selector: "button[kendoWindowCloseAction]", inputs: ["window"], exportAs: ["kendoWindowCloseAction"] }, { kind: "component", type: i3.WindowTitleBarComponent, selector: "kendo-window-titlebar", inputs: ["template", "id"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
1567
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LanguageSelectorComponent, decorators: [{
1568
- type: Component,
1569
- args: [{ selector: 'language-selector', template: "<kendo-window\n *ngIf=\"visible\"\n class=\"language-selector\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n>\n <kendo-window-titlebar>\n <div>{{ 'ChangeLanguage' | translate }}</div>\n <button kendoWindowCloseAction (click)=\"close()\"></button>\n </kendo-window-titlebar>\n <div class=\"languages\" *ngIf=\"languages\">\n <div *ngFor=\"let language of languages\" class=\"language-change-action\">\n <button class=\"btn\" (click)=\"changeLanguage(language.code)\">\n <span\n *ngIf=\"currentLanguageCode == language.code\"\n class=\"fa fa-check\"\n aria-hidden=\"true\"\n ></span>\n {{ language.name }}\n </button>\n </div>\n </div>\n</kendo-window>\n", styles: [".language-selector{right:40px;top:52px!important;left:auto}.language-selector kendo-window-titlebar{padding:5px 8px}.language-selector kendo-window-titlebar div{width:100%}.language-selector .btn{width:95%}.language-selector .fa{margin-right:5px}.language-change-action{padding:5px}\n"] }]
1570
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: LocaleSettingsService }]; }, propDecorators: { visible: [{
1571
- type: Input
1572
- }], visibleChange: [{
1573
- type: Output
1574
- }], clickedOutside: [{
1575
- type: HostListener,
1576
- args: ['document:click', ['$event']]
1577
- }] } });
1578
-
1579
- class AccountMenuComponent {
1580
- constructor(eref, accountService, appSettings) {
1581
- this.eref = eref;
1582
- this.accountService = accountService;
1583
- this.appSettings = appSettings;
1584
- this.expand = false;
1585
- this.languageSelectorVisible = false;
1586
- }
1587
- get fullName() {
1588
- var _a, _b;
1589
- return `${(_a = this.user) === null || _a === void 0 ? void 0 : _a.firstName} ${(_b = this.user) === null || _b === void 0 ? void 0 : _b.lastName}`;
1590
- }
1591
- get accountUrl() {
1592
- return this.appSettings.accountUrl;
1593
- }
1594
- toogle() {
1595
- this.expand = !this.expand;
1596
- }
1597
- logout() {
1598
- this.accountService.logout();
1599
- }
1600
- openLanguageSelector(event) {
1601
- event.stopPropagation();
1602
- this.toogle();
1603
- this.languageSelectorVisible = true;
1604
- }
1605
- clickedOutside(event) {
1606
- if (!this.eref.nativeElement.contains(event.target) && this.expand) {
1607
- this.toogle();
1608
- }
1609
- }
1610
- }
1611
- AccountMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AccountMenuComponent, deps: [{ token: i0.ElementRef }, { token: AccountService }, { token: AppSettings }], target: i0.ɵɵFactoryTarget.Component });
1612
- AccountMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: AccountMenuComponent, selector: "account-menu", inputs: { user: "user", menuItems: "menuItems" }, host: { listeners: { "document:click": "clickedOutside($event)" } }, viewQueries: [{ propertyName: "accountMenu", first: true, predicate: ["accountMenuElement"], descendants: true }], ngImport: i0, template: "<div class=\"profile-img left\" id=\"accountMenu\">\n <div #accountMenuElement title=\"User Account\" (click)=\"toogle()\">\n <img alt=\"image\" class=\"img-circle top-bar-profile left\" />\n </div>\n <kendo-popup\n *ngIf=\"expand\"\n [anchor]=\"accountMenu\"\n popupClass=\"k-widget dropdown open\"\n >\n <ul class=\"dropdown-menu top-bar-dropdown animated fadeInLeft\">\n <li class=\"top-bar-header-row media\">\n <div class=\"media-left\">\n <img alt=\"image\" class=\"img-circle\" />\n </div>\n <div class=\"media-body\">\n <span class=\"left fa fa-user\" aria-hidden=\"true\"></span>\n <span class=\"left pad5left\">{{ fullName }}</span>\n </div>\n </li>\n <li class=\"pad5top\">\n <a (click)=\"openLanguageSelector($event)\" data-icon=\"globe\">{{\n 'ChangeLanguage' | translate\n }}</a>\n </li>\n <li>\n <a [href]=\"accountUrl\" data-icon=\"desktop\" translate=\"Account\"></a>\n </li>\n <li *ngFor=\"let menuItem of menuItems\">\n <a\n [href]=\"menuItem.link\"\n [attr.data-icon]=\"menuItem.iconClass\"\n >{{ menuItem.text | translate }}</a>\n </li>\n <li>\n <a translate=\"Logout\" data-icon=\"sign-out\" (click)=\"logout()\"></a>\n </li>\n </ul>\n </kendo-popup>\n\n <language-selector [(visible)]=\"languageSelectorVisible\"></language-selector>\n</div>\n", styles: [".top-bar-dropdown{right:-24px;top:42px}.top-bar-profile{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.PopupComponent, selector: "kendo-popup", inputs: ["animate", "anchor", "anchorAlign", "collision", "popupAlign", "copyAnchorStyles", "popupClass", "positionMode", "offset", "margin"], outputs: ["anchorViewportLeave", "close", "open", "positionChange"], exportAs: ["kendo-popup"] }, { kind: "component", type: LanguageSelectorComponent, selector: "language-selector", inputs: ["visible"], outputs: ["visibleChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
1613
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AccountMenuComponent, decorators: [{
1614
- type: Component,
1615
- args: [{ selector: 'account-menu', template: "<div class=\"profile-img left\" id=\"accountMenu\">\n <div #accountMenuElement title=\"User Account\" (click)=\"toogle()\">\n <img alt=\"image\" class=\"img-circle top-bar-profile left\" />\n </div>\n <kendo-popup\n *ngIf=\"expand\"\n [anchor]=\"accountMenu\"\n popupClass=\"k-widget dropdown open\"\n >\n <ul class=\"dropdown-menu top-bar-dropdown animated fadeInLeft\">\n <li class=\"top-bar-header-row media\">\n <div class=\"media-left\">\n <img alt=\"image\" class=\"img-circle\" />\n </div>\n <div class=\"media-body\">\n <span class=\"left fa fa-user\" aria-hidden=\"true\"></span>\n <span class=\"left pad5left\">{{ fullName }}</span>\n </div>\n </li>\n <li class=\"pad5top\">\n <a (click)=\"openLanguageSelector($event)\" data-icon=\"globe\">{{\n 'ChangeLanguage' | translate\n }}</a>\n </li>\n <li>\n <a [href]=\"accountUrl\" data-icon=\"desktop\" translate=\"Account\"></a>\n </li>\n <li *ngFor=\"let menuItem of menuItems\">\n <a\n [href]=\"menuItem.link\"\n [attr.data-icon]=\"menuItem.iconClass\"\n >{{ menuItem.text | translate }}</a>\n </li>\n <li>\n <a translate=\"Logout\" data-icon=\"sign-out\" (click)=\"logout()\"></a>\n </li>\n </ul>\n </kendo-popup>\n\n <language-selector [(visible)]=\"languageSelectorVisible\"></language-selector>\n</div>\n", styles: [".top-bar-dropdown{right:-24px;top:42px}.top-bar-profile{cursor:pointer}\n"] }]
1616
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: AccountService }, { type: AppSettings }]; }, propDecorators: { accountMenu: [{
1617
- type: ViewChild,
1618
- args: ['accountMenuElement']
1619
- }], user: [{
1620
- type: Input
1621
- }], menuItems: [{
1622
- type: Input
1623
- }], clickedOutside: [{
1624
- type: HostListener,
1625
- args: ['document:click', ['$event']]
1626
- }] } });
1627
-
1628
- const resetPasswordCanceledErrorCode = 'AADB2C90091';
1629
- class AzureLoginCallbackComponent {
1630
- constructor(authService, settingsService, router) {
1631
- this.authService = authService;
1632
- this.settingsService = settingsService;
1633
- this.router = router;
1634
- }
1635
- ngOnInit() {
1636
- this.authService.handleRedirectObservable().subscribe((result) => {
1637
- if (result) {
1638
- this.settingsService.setToken(result.idToken);
1639
- this.authService.instance.setActiveAccount(result.account);
1640
- }
1641
- this.router.navigate(['home']);
1642
- }, (error) => {
1643
- if (error.errorMessage.includes(resetPasswordCanceledErrorCode)) {
1644
- this.router.navigate(['home']);
1645
- }
1646
- });
1647
- }
1648
- logout() {
1649
- this.authService.logout();
1650
- }
1651
- }
1652
- AzureLoginCallbackComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AzureLoginCallbackComponent, deps: [{ token: i1.MsalService }, { token: SettingsService }, { token: i1$5.Router }], target: i0.ɵɵFactoryTarget.Component });
1653
- AzureLoginCallbackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: AzureLoginCallbackComponent, selector: "lib-azure-login", ngImport: i0, template: '', isInline: true });
1654
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AzureLoginCallbackComponent, decorators: [{
1655
- type: Component,
1656
- args: [{
1657
- selector: 'lib-azure-login',
1658
- template: '',
1659
- }]
1660
- }], ctorParameters: function () { return [{ type: i1.MsalService }, { type: SettingsService }, { type: i1$5.Router }]; } });
1661
-
1662
- const isIE = window.navigator.userAgent.includes('MSIE ') ||
1663
- window.navigator.userAgent.includes('Trident/');
1664
- const MSALInstanceFactory = (config) => {
1665
- const defaultRedirectUri = `${window.location.origin}/azure/login/callback`;
1666
- const msalConfig = {
1667
- auth: {
1668
- clientId: config.appSettings.azureB2C.clientId,
1669
- authority: config.appSettings.azureB2C.authority,
1670
- knownAuthorities: config.appSettings.azureB2C.knownAuthorities,
1671
- redirectUri: config.appSettings.azureB2C.redirectUri || defaultRedirectUri,
1672
- postLogoutRedirectUri: config.appSettings.azureB2C.logoutRedirectUri || window.location.origin,
1673
- navigateToLoginRequestUrl: false,
1674
- },
1675
- cache: {
1676
- cacheLocation: BrowserCacheLocation.LocalStorage,
1677
- storeAuthStateInCookie: isIE,
1678
- },
1679
- system: {
1680
- loggerOptions: {
1681
- loggerCallback: () => { },
1682
- piiLoggingEnabled: false,
1683
- },
1684
- },
1685
- };
1686
- return new PublicClientApplication(msalConfig);
1687
- };
1688
-
1689
- class PermissionsService {
1690
- constructor(httpService, accountService, signalRService) {
1691
- this.httpService = httpService;
1692
- this.accountService = accountService;
1693
- this.signalRService = signalRService;
1694
- this.loaded = false;
1695
- this.mine = new BehaviorSubject({});
1696
- this.accountService.user.subscribe((user) => __awaiter(this, void 0, void 0, function* () {
1697
- if (!user) {
1698
- this.mine.next({});
1699
- return;
1700
- }
1701
- this.httpService
1702
- .get(endpoints.permissions.mine)
1703
- .subscribe((permissions) => {
1704
- this.mine.next(permissions);
1705
- this.loaded = true;
1706
- this.signalRService
1707
- .on(EventNames.PermissionsUpdated)
1708
- .subscribe(() => {
1709
- this.getPermissionsFromServer().subscribe();
1710
- });
1711
- });
1712
- }));
1713
- }
1714
- getAll(memberType) {
1715
- return this.httpService.get(endpoints.permissions.all(memberType));
1716
- }
1717
- getMine() {
1718
- if (this.loaded) {
1719
- return this.mine;
1720
- }
1721
- return this.getPermissionsFromServer();
1722
- }
1723
- getPermissionsFromServer() {
1724
- return this.httpService.get(endpoints.permissions.mine).pipe(map((permissions) => {
1725
- this.mine.next(permissions);
1726
- return permissions;
1727
- }));
1728
- }
1729
- }
1730
- PermissionsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: PermissionsService, deps: [{ token: HttpService }, { token: AccountService }, { token: SignalRService }], target: i0.ɵɵFactoryTarget.Injectable });
1731
- PermissionsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: PermissionsService });
1732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: PermissionsService, decorators: [{
1733
- type: Injectable
1734
- }], ctorParameters: function () { return [{ type: HttpService }, { type: AccountService }, { type: SignalRService }]; } });
1735
-
1736
- const hiddenClass = 'hidden';
1737
- class RequirePermissionDirective {
1738
- constructor(elementRef, route, permissionsService, renderer) {
1739
- this.elementRef = elementRef;
1740
- this.route = route;
1741
- this.permissionsService = permissionsService;
1742
- this.renderer = renderer;
1743
- }
1744
- ngOnInit() {
1745
- this.hide();
1746
- const category = this.permissionCategory
1747
- ? this.permissionCategory
1748
- : this.getRouteCategory(this.route);
1749
- if (!category) {
1750
- this.show();
1751
- return;
1752
- }
1753
- this.permissionsService.mine.subscribe((permissions) => {
1754
- const hasAccess = permissions[category] && this.hasType(permissions[category]);
1755
- if (hasAccess) {
1756
- this.show();
1757
- }
1758
- else {
1759
- this.hide();
1760
- }
1761
- });
1762
- }
1763
- hide() {
1764
- this.renderer.addClass(this.elementRef.nativeElement, hiddenClass);
1765
- }
1766
- show() {
1767
- this.renderer.removeClass(this.elementRef.nativeElement, hiddenClass);
1768
- }
1769
- hasType(types) {
1770
- return Array.isArray(this.permissionType)
1771
- ? types.map((x) => this.permissionType.includes(x)).some((x) => x)
1772
- : types.includes(this.permissionType);
1773
- }
1774
- getRouteCategory(route) {
1775
- const routeData = route.snapshot.data;
1776
- if (routeData && routeData.permission) {
1777
- return routeData.permission.category;
1778
- }
1779
- if (this.route.parent) {
1780
- return this.getRouteCategory(this.route.parent);
1781
- }
1782
- return null;
1783
- }
1784
- }
1785
- RequirePermissionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: RequirePermissionDirective, deps: [{ token: i0.ElementRef }, { token: i1$5.ActivatedRoute }, { token: PermissionsService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
1786
- RequirePermissionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.3", type: RequirePermissionDirective, selector: "[requirePermission]", inputs: { permissionType: "permissionType", permissionCategory: "permissionCategory" }, ngImport: i0 });
1787
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: RequirePermissionDirective, decorators: [{
1788
- type: Directive,
1789
- args: [{
1790
- selector: '[requirePermission]',
1791
- }]
1792
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$5.ActivatedRoute }, { type: PermissionsService }, { type: i0.Renderer2 }]; }, propDecorators: { permissionType: [{
1793
- type: Input
1794
- }], permissionCategory: [{
1795
- type: Input
1796
- }] } });
1797
-
1798
- class EntityService {
1799
- constructor(httpService, endpoints) {
1800
- this.httpService = httpService;
1801
- this.endpoints = endpoints;
1802
- }
1803
- getPage(state, urlParams) {
1804
- return this.httpService.get(applyUrlParams(this.endpoints.query(state), urlParams));
1805
- }
1806
- get(id, urlParams) {
1807
- return this.httpService.get(applyUrlParams(this.endpoints.entityPath(id), urlParams));
1808
- }
1809
- delete(id, urlParams) {
1810
- return this.httpService.delete(applyUrlParams(this.endpoints.entityPath(id), urlParams));
1811
- }
1812
- save(model, urlParams) {
1813
- if (model.id) {
1814
- return this.httpService.put(applyUrlParams(this.endpoints.entityPath(model.id), urlParams), model);
1815
- }
1816
- return this.httpService.post(applyUrlParams(this.endpoints.path, urlParams), model);
1817
- }
1818
- }
1819
- function applyUrlParams(url, urlParams) {
1820
- Object.keys(urlParams || {}).forEach((key) => {
1821
- url = url.replace(`{${key}}`, urlParams[key]);
1822
- });
1823
- return url;
1824
- }
1825
-
1826
- class PartnerService extends EntityService {
1827
- constructor(httpService) {
1828
- super(httpService, endpoints.partners);
1829
- }
1830
- }
1831
- PartnerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: PartnerService, deps: [{ token: HttpService }], target: i0.ɵɵFactoryTarget.Injectable });
1832
- PartnerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: PartnerService });
1833
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: PartnerService, decorators: [{
1834
- type: Injectable
1835
- }], ctorParameters: function () { return [{ type: HttpService }]; } });
1836
-
1837
- const urlSerialize = (object) => {
1838
- let serialized = '';
1839
- Object.keys(object).forEach((key) => {
1840
- if (typeof object[key] === 'object') {
1841
- const serializedObject = !isEmptyObject(object[key])
1842
- ? JSON.stringify(object[key])
1843
- : '';
1844
- serialized += serializedObject ? `${key}=${serializedObject}&` : '';
1845
- }
1846
- else {
1847
- serialized +=
1848
- object[key] || object[key] === 0 ? `${key}=${object[key]}&` : '';
1849
- }
1850
- });
1851
- return serialized.slice(0, -1);
1852
- };
1853
- const isEmptyObject = (object) => {
1854
- return object === null || Object.keys(object).length === 0;
1855
- };
1856
- const isDate = (date) => {
1857
- try {
1858
- const parsedDate = new Date(date);
1859
- return isNaN(date) && parsedDate.toISOString() === date;
1860
- }
1861
- catch (ex) {
1862
- return false;
1863
- }
1864
- };
1865
- const urlDeserialize = (params) => {
1866
- const deserialized = {};
1867
- params.forEach((param, key) => {
1868
- if (key === 'sort' || key === 'group') {
1869
- deserialized[key] = JSON.parse(param);
1870
- }
1871
- else if (key === 'filter') {
1872
- deserialized[key] = transformFilter(JSON.parse(param));
1873
- }
1874
- else {
1875
- deserialized[key] = param;
1876
- }
1877
- });
1878
- return deserialized;
1879
- };
1880
- function transformFilter(gridFilter) {
1881
- transformFilters(gridFilter);
1882
- return gridFilter;
1883
- }
1884
- function transformFilters(gridFilter) {
1885
- if (gridFilter.filters.length) {
1886
- gridFilter.filters.forEach((filter) => {
1887
- let filterDescriptor = filter;
1888
- filterDescriptor.value = isDate(filterDescriptor.value)
1889
- ? new Date(filterDescriptor.value)
1890
- : filterDescriptor.value;
1891
- let compositeFilterDescriptor = filter;
1892
- if (compositeFilterDescriptor.filters) {
1893
- transformFilters(compositeFilterDescriptor);
1894
- }
1895
- });
1896
- }
1897
- }
1898
-
1899
- class ConfirmDialogComponent {
1900
- constructor(dialogService) {
1901
- this.dialogService = dialogService;
1902
- }
1903
- cancel() {
1904
- this.dialog.close();
1905
- this.callback = undefined;
1906
- }
1907
- confirm() {
1908
- this.callback();
1909
- this.cancel();
1910
- }
1911
- open(content, callback) {
1912
- this.callback = callback;
1913
- this.dialog = this.dialogService.open({
1914
- content,
1915
- actions: this.dialogActions,
1916
- });
1917
- }
1918
- }
1919
- ConfirmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: i3.DialogService }], target: i0.ɵɵFactoryTarget.Component });
1920
- ConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: ConfirmDialogComponent, selector: "confirm-dialog", viewQueries: [{ propertyName: "dialogActions", first: true, predicate: ["dialogActions"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #dialogActions>\n <button kendoButton (click)=\"cancel()\" translate=\"Cancel\"></button>\n <button kendoButton (click)=\"confirm()\" translate=\"Confirm\"></button>\n</ng-template>\n<div kendoDialogContainer></div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3$1.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: i3.DialogContainerDirective, selector: "[kendoDialogContainer]" }] });
1921
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
1922
- type: Component,
1923
- args: [{ selector: 'confirm-dialog', template: "<ng-template #dialogActions>\n <button kendoButton (click)=\"cancel()\" translate=\"Cancel\"></button>\n <button kendoButton (click)=\"confirm()\" translate=\"Confirm\"></button>\n</ng-template>\n<div kendoDialogContainer></div>\n" }]
1924
- }], ctorParameters: function () { return [{ type: i3.DialogService }]; }, propDecorators: { dialogActions: [{
1925
- type: ViewChild,
1926
- args: ['dialogActions', { static: true }]
1927
- }] } });
1928
-
1929
- class ExcelExportButtonComponent {
1930
- }
1931
- ExcelExportButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ExcelExportButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1932
- ExcelExportButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: ExcelExportButtonComponent, selector: "excel-export-button", ngImport: i0, template: "<button type=\"button\" kendoGridExcelCommand>\n <em ngClass=\"fa fa-file-excel-o\"></em>\n {{ 'Buttons.ExcelExport' | translate }}\n</button>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.GridToolbarFocusableDirective, selector: " [kendoGridToolbarFocusable], [kendoGridAddCommand], [kendoGridCancelCommand], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridExcelCommand], [kendoGridPDFCommand] " }, { kind: "component", type: i5$1.ExcelCommandDirective, selector: "[kendoGridExcelCommand]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
1933
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ExcelExportButtonComponent, decorators: [{
1934
- type: Component,
1935
- args: [{ selector: 'excel-export-button', template: "<button type=\"button\" kendoGridExcelCommand>\n <em ngClass=\"fa fa-file-excel-o\"></em>\n {{ 'Buttons.ExcelExport' | translate }}\n</button>\n" }]
1936
- }] });
1937
-
1938
- const nameField = 'name';
1939
- class EntityListComponent {
1940
- constructor(translate, route, router) {
1941
- this.translate = translate;
1942
- this.route = route;
1943
- this.router = router;
1944
- this.mapItemFn = (item) => item;
1945
- this.pageButtonsCount = 5;
1946
- this.filterChange = new EventEmitter();
1947
- this.gridState = {};
1948
- this.page = new BehaviorSubject(null);
1949
- this.loadings = 0;
1950
- this.selected = [];
1951
- this.gridFields = [];
1952
- this.defaultFields = [
1953
- { name: 'name', label: 'Name', sortable: true, position: 0 },
1954
- ];
1955
- this.getAllData = this.getAllData.bind(this);
1956
- this.getRowClass = this.getRowClass.bind(this);
1957
- }
1958
- ngOnChanges(changes) {
1959
- if (!changes.filters || changes.filters.firstChange) {
1960
- return;
1961
- }
1962
- this.getFilteredData();
1963
- }
1964
- ngOnInit() {
1965
- this.gridFields = (this.fields || [])
1966
- .concat(this.defaultFields)
1967
- .sort((left, right) => (left.position || 0) - (right.position || 0));
1968
- this.filters = this.filters ? this.filters : [];
1969
- this.commands = this.commands ? this.commands : [];
1970
- this.route.fragment.subscribe((fragment) => __awaiter(this, void 0, void 0, function* () {
1971
- yield this.restoreGridState(new URLSearchParams(fragment));
1972
- }));
1973
- this.route.firstChild.params.subscribe((params) => {
1974
- if (params.id) {
1975
- this.selected[0] = params.id;
1976
- }
1977
- else {
1978
- this.selected.pop();
1979
- }
1980
- });
1981
- }
1982
- removeHandler({ dataItem }) {
1983
- this.dialog.open(this.translate.instant('Confirmation.Delete') +
1984
- ': "' +
1985
- dataItem.name +
1986
- '"?', () => this.remove(dataItem));
1987
- }
1988
- selectItem({ dataItem }) {
1989
- this.router.navigate([dataItem.id], {
1990
- relativeTo: this.route,
1991
- fragment: urlSerialize(this.gridState),
1992
- });
1993
- }
1994
- onActivate(child) {
1995
- if (child.saved) {
1996
- child.saved.subscribe((data) => this.updateGrid(data));
1997
- }
1998
- }
1999
- onDeactivate(child) {
2000
- if (child.saved) {
2001
- child.saved.unsubscribe();
2002
- }
2003
- }
2004
- dataStateChange(state) {
2005
- this.gridState = state;
2006
- this.gridState.filter = this.getFilter();
2007
- this.router.navigate([], {
2008
- relativeTo: this.route,
2009
- fragment: urlSerialize(this.gridState),
2010
- });
2011
- }
2012
- onSearch(value) {
2013
- this.searchTerm = value;
2014
- this.gridState.skip = 0;
2015
- this.getFilteredData();
2016
- }
2017
- getAllData() {
2018
- const state = Object.assign({}, this.gridState);
2019
- delete state.skip;
2020
- delete state.take;
2021
- return this.service.getPage(state).pipe(map((pageResult) => {
2022
- pageResult.data = pageResult.data.map(this.mapItemFn);
2023
- return pageResult;
2024
- }));
2025
- }
2026
- getRowClass(context) {
2027
- return this.rowClass && context
2028
- ? this.rowClass(context.dataItem, context.index)
2029
- : {};
2030
- }
2031
- getFilteredData() {
2032
- this.gridState.filter = this.getFilter();
2033
- this.router.navigate([], {
2034
- relativeTo: this.route,
2035
- fragment: urlSerialize(this.gridState),
2036
- });
2037
- }
2038
- updateGrid(data) {
2039
- const currentPage = Object.assign({}, this.page.value);
2040
- const exists = currentPage.data.filter((x) => x.id === data.id);
2041
- if (exists.length) {
2042
- currentPage.data[currentPage.data.indexOf(exists[0])] = data;
2043
- this.page.next(currentPage);
2044
- return;
2045
- }
2046
- currentPage.total++;
2047
- currentPage.data.splice(0, 0, data);
2048
- if (currentPage.data.length > this.gridState.take) {
2049
- currentPage.data.splice(this.page.value.data.length - 1, 1);
2050
- }
2051
- this.page.next(currentPage);
2052
- this.selected[0] = data.id;
2053
- this.router.navigate([data.id], {
2054
- relativeTo: this.route,
2055
- preserveFragment: true,
2056
- });
2057
- }
2058
- getData() {
2059
- this.loadings++;
2060
- return this.service
2061
- .getPage(this.gridState)
2062
- .pipe(map((pageResult) => {
2063
- pageResult.data = pageResult.data.map(this.mapItemFn);
2064
- return pageResult;
2065
- }))
2066
- .subscribe((page) => {
2067
- this.page.next(page);
2068
- this.loadings--;
2069
- });
2070
- }
2071
- remove(entity) {
2072
- this.loadings++;
2073
- this.service
2074
- .delete(entity.id)
2075
- .pipe(map(() => {
2076
- if (this.selected.length &&
2077
- this.selected[this.selected.length - 1] === entity.id) {
2078
- this.router.navigate(['../'], {
2079
- preserveFragment: true,
2080
- relativeTo: this.route.firstChild,
2081
- });
2082
- }
2083
- this.loadings--;
2084
- }))
2085
- .subscribe(() => {
2086
- this.getData();
2087
- });
2088
- }
2089
- getFilter() {
2090
- const filter = {
2091
- logic: 'and',
2092
- filters: this.searchTerm
2093
- ? [
2094
- { field: nameField, operator: 'contains', value: this.searchTerm },
2095
- ...this.filters,
2096
- ]
2097
- : this.filters,
2098
- };
2099
- return filter;
2100
- }
2101
- onFilterChange() {
2102
- var _a;
2103
- const filter = (_a = this.gridState.filter) === null || _a === void 0 ? void 0 : _a.filters.find((x) => x.field === nameField);
2104
- this.searchTerm = filter === null || filter === void 0 ? void 0 : filter.value;
2105
- this.filterChange.emit(this.gridState.filter);
2106
- }
2107
- restoreGridState(params) {
2108
- return __awaiter(this, void 0, void 0, function* () {
2109
- const defaultGridState = {
2110
- sort: this.defaultSort || [{ field: nameField, dir: 'asc' }],
2111
- skip: 0,
2112
- take: 10,
2113
- filter: this.getFilter(),
2114
- };
2115
- const state = urlDeserialize(params);
2116
- this.gridState = state.hasOwnProperty('take') ? state : defaultGridState;
2117
- this.gridState.skip = +this.gridState.skip;
2118
- this.gridState.take = +this.gridState.take;
2119
- this.onFilterChange();
2120
- this.getData();
2121
- });
2122
- }
2123
- }
2124
- EntityListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: EntityListComponent, deps: [{ token: i1$1.TranslateService }, { token: i1$5.ActivatedRoute }, { token: i1$5.Router }], target: i0.ɵɵFactoryTarget.Component });
2125
- EntityListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: EntityListComponent, selector: "entity-list", inputs: { service: "service", filters: "filters", fields: "fields", commands: "commands", rowClass: "rowClass", defaultSort: "defaultSort", mapItemFn: "mapItemFn", pageButtonsCount: "pageButtonsCount" }, outputs: { filterChange: "filterChange" }, viewQueries: [{ propertyName: "dialog", first: true, predicate: ["confirmDialog"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page | async\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngIf=\"!dataItem.suppressDeletion\"\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <em class=\"k-icon glyphicon glyphicon-trash\"></em>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <em\n *ngIf=\"command.iconClass\"\n class=\"{{ command.iconClass }}\"\n ></em>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ \"Messages.NoRecords\" | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"pageButtonsCount\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: DebounceDirective, selector: "[appDebounce]", inputs: ["debounceTime"], outputs: ["debounceKeyup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5$1.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i5$1.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "component", type: i5$1.GridSpacerComponent, selector: "kendo-grid-spacer, kendo-pager-spacer", inputs: ["width"] }, { kind: "directive", type: i5$1.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "directive", type: i5$1.GridToolbarFocusableDirective, selector: " [kendoGridToolbarFocusable], [kendoGridAddCommand], [kendoGridCancelCommand], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridExcelCommand], [kendoGridPDFCommand] " }, { kind: "component", type: i5$1.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i5$1.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { kind: "component", type: i5$1.CommandColumnComponent, selector: "kendo-grid-command-column" }, { kind: "directive", type: i5$1.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i5$1.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { kind: "component", type: i5$1.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { kind: "component", type: i5$1.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { kind: "component", type: i5$1.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { kind: "component", type: i5$1.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { kind: "component", type: i5$1.PagerInfoComponent, selector: "kendo-pager-info" }, { kind: "directive", type: i5$1.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { kind: "component", type: i5$1.ExcelComponent, selector: "kendo-grid-excel", inputs: ["fileName", "filterable", "creator", "date", "forceProxy", "proxyURL", "fetchData", "paddingCellOptions", "headerPaddingCellOptions", "collapsible"] }, { kind: "directive", type: i6.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ConfirmDialogComponent, selector: "confirm-dialog" }, { kind: "component", type: ExcelExportButtonComponent, selector: "excel-export-button" }, { kind: "directive", type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
2126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: EntityListComponent, decorators: [{
2127
- type: Component,
2128
- args: [{ selector: 'entity-list', template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page | async\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngIf=\"!dataItem.suppressDeletion\"\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <em class=\"k-icon glyphicon glyphicon-trash\"></em>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <em\n *ngIf=\"command.iconClass\"\n class=\"{{ command.iconClass }}\"\n ></em>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ \"Messages.NoRecords\" | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"pageButtonsCount\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n" }]
2129
- }], ctorParameters: function () { return [{ type: i1$1.TranslateService }, { type: i1$5.ActivatedRoute }, { type: i1$5.Router }]; }, propDecorators: { service: [{
2130
- type: Input
2131
- }], filters: [{
2132
- type: Input
2133
- }], fields: [{
2134
- type: Input
2135
- }], commands: [{
2136
- type: Input
2137
- }], rowClass: [{
2138
- type: Input
2139
- }], defaultSort: [{
2140
- type: Input
2141
- }], mapItemFn: [{
2142
- type: Input
2143
- }], pageButtonsCount: [{
2144
- type: Input
2145
- }], filterChange: [{
2146
- type: Output
2147
- }], dialog: [{
2148
- type: ViewChild,
2149
- args: ['confirmDialog', { static: true }]
2150
- }] } });
2151
-
2152
- class UserListAdminComponent extends EntityListComponent {
2153
- constructor(translate, route, router, partnerService) {
2154
- super(translate, route, router);
2155
- this.partnerService = partnerService;
2156
- }
2157
- onActivate(child) {
2158
- if (child.saved) {
2159
- child.saved.subscribe((data) => this.partnerService
2160
- .get(data.partnerId)
2161
- .subscribe((partner) => {
2162
- data.partnerName = partner.name;
2163
- this.updateGrid(data);
2164
- }));
2165
- }
2166
- }
2167
- }
2168
- UserListAdminComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: UserListAdminComponent, deps: [{ token: i1$1.TranslateService }, { token: i1$5.ActivatedRoute }, { token: i1$5.Router }, { token: PartnerService }], target: i0.ɵɵFactoryTarget.Component });
2169
- UserListAdminComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: UserListAdminComponent, selector: "lib-user-list-admin", providers: [PartnerService], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page | async\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngIf=\"!dataItem.suppressDeletion\"\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <em class=\"k-icon glyphicon glyphicon-trash\"></em>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <em\n *ngIf=\"command.iconClass\"\n class=\"{{ command.iconClass }}\"\n ></em>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ \"Messages.NoRecords\" | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"pageButtonsCount\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: DebounceDirective, selector: "[appDebounce]", inputs: ["debounceTime"], outputs: ["debounceKeyup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5$1.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i5$1.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { kind: "component", type: i5$1.GridSpacerComponent, selector: "kendo-grid-spacer, kendo-pager-spacer", inputs: ["width"] }, { kind: "directive", type: i5$1.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "directive", type: i5$1.GridToolbarFocusableDirective, selector: " [kendoGridToolbarFocusable], [kendoGridAddCommand], [kendoGridCancelCommand], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridExcelCommand], [kendoGridPDFCommand] " }, { kind: "component", type: i5$1.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i5$1.FocusableDirective, selector: "[kendoGridFocusable], [kendoGridEditCommand], [kendoGridRemoveCommand], [kendoGridSaveCommand], [kendoGridCancelCommand], [kendoGridSelectionCheckbox] ", inputs: ["kendoGridFocusable"] }, { kind: "component", type: i5$1.CommandColumnComponent, selector: "kendo-grid-command-column" }, { kind: "directive", type: i5$1.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i5$1.NoRecordsTemplateDirective, selector: "[kendoGridNoRecordsTemplate]" }, { kind: "component", type: i5$1.RemoveCommandDirective, selector: "[kendoGridRemoveCommand]" }, { kind: "component", type: i5$1.PagerPrevButtonsComponent, selector: "kendo-pager-prev-buttons" }, { kind: "component", type: i5$1.PagerNextButtonsComponent, selector: "kendo-pager-next-buttons" }, { kind: "component", type: i5$1.PagerNumericButtonsComponent, selector: "kendo-pager-numeric-buttons", inputs: ["buttonCount"] }, { kind: "component", type: i5$1.PagerInfoComponent, selector: "kendo-pager-info" }, { kind: "directive", type: i5$1.PagerTemplateDirective, selector: "[kendoPagerTemplate]" }, { kind: "component", type: i5$1.ExcelComponent, selector: "kendo-grid-excel", inputs: ["fileName", "filterable", "creator", "date", "forceProxy", "proxyURL", "fetchData", "paddingCellOptions", "headerPaddingCellOptions", "collapsible"] }, { kind: "directive", type: i6.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ConfirmDialogComponent, selector: "confirm-dialog" }, { kind: "component", type: ExcelExportButtonComponent, selector: "excel-export-button" }, { kind: "directive", type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
2170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: UserListAdminComponent, decorators: [{
2171
- type: Component,
2172
- args: [{ selector: 'lib-user-list-admin', providers: [PartnerService], template: "<div class=\"row\">\n <div class=\"col-md-4\">\n <header class=\"header-page-bg\"></header>\n <div class=\"panel search-panel hero-unit\">\n <div class=\"header-selection-field\">\n <label for=\"searchinput\" class=\"title-field\" translate=\"Search\"></label>\n <input\n kendoTextBox\n class=\"quick-filter input input-field\"\n title=\"\"\n id=\"searchinput\"\n type=\"text\"\n appDebounce\n (debounceKeyup)=\"onSearch($event.target.value)\"\n [ngModel]=\"searchTerm\"\n [debounceTime]=\"600\"\n />\n </div>\n <ng-content></ng-content>\n <div class=\"divide-line\"></div>\n\n <kendo-grid\n [data]=\"page | async\"\n [pageSize]=\"gridState.take\"\n [skip]=\"gridState.skip\"\n [sort]=\"gridState.sort\"\n [pageable]=\"true\"\n [sortable]=\"true\"\n [style.maxHeight.px]=\"480\"\n (remove)=\"removeHandler($event)\"\n (dataStateChange)=\"dataStateChange($event)\"\n [loading]=\"loadings > 0\"\n (cellClick)=\"selectItem($event)\"\n culture\n class=\"rows-pointable\"\n kendoGridSelectBy=\"id\"\n [selectedKeys]=\"selected\"\n [rowClass]=\"getRowClass\"\n >\n <ng-template kendoGridToolbarTemplate>\n <excel-export-button></excel-export-button>\n </ng-template>\n <kendo-grid-excel [fetchData]=\"getAllData\"></kendo-grid-excel>\n <kendo-grid-command-column width=\"65\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngIf=\"!dataItem.suppressDeletion\"\n kendoGridRemoveCommand\n requirePermission\n permissionType=\"Delete\"\n >\n <em class=\"k-icon glyphicon glyphicon-trash\"></em>\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <kendo-grid-column\n *ngFor=\"let field of gridFields\"\n field=\"{{ field.name }}\"\n title=\"{{ field.label | translate }}\"\n [sortable]=\"field.sortable !== false\"\n >\n </kendo-grid-column>\n <kendo-grid-command-column width=\"65\" *ngIf=\"commands.length > 0\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <button\n *ngFor=\"let command of commands\"\n (click)=\"command.handler(dataItem)\"\n title=\"{{ command.title | translate }}\"\n class=\"k-button\"\n >\n <em\n *ngIf=\"command.iconClass\"\n class=\"{{ command.iconClass }}\"\n ></em>\n {{ command.name | translate }}\n </button>\n </ng-template>\n </kendo-grid-command-column>\n <ng-template kendoGridNoRecordsTemplate>\n {{ \"Messages.NoRecords\" | translate }}\n </ng-template>\n <ng-template kendoPagerTemplate>\n <kendo-grid-spacer></kendo-grid-spacer>\n <kendo-pager-prev-buttons></kendo-pager-prev-buttons>\n <kendo-pager-numeric-buttons\n [buttonCount]=\"pageButtonsCount\"\n ></kendo-pager-numeric-buttons>\n <kendo-pager-next-buttons></kendo-pager-next-buttons>\n <kendo-pager-info></kendo-pager-info>\n </ng-template>\n </kendo-grid>\n </div>\n </div>\n <router-outlet\n (activate)=\"onActivate($event)\"\n (deactivate)=\"onDeactivate($event)\"\n ></router-outlet>\n</div>\n<confirm-dialog #confirmDialog></confirm-dialog>\n" }]
2173
- }], ctorParameters: function () { return [{ type: i1$1.TranslateService }, { type: i1$5.ActivatedRoute }, { type: i1$5.Router }, { type: PartnerService }]; } });
2174
-
2175
- const AuthorizationHeader = 'Authorization';
2176
- class AuthHeadersInterceptor {
2177
- constructor(settingsService) {
2178
- this.settingsService = settingsService;
2179
- }
2180
- intercept(request, next) {
2181
- if (!request.headers.keys().find((x) => x === AuthorizationHeader)) {
2182
- const token = this.settingsService.getToken();
2183
- if (token) {
2184
- const modified = request.clone({
2185
- setHeaders: {
2186
- Authorization: `Bearer ${token}`,
2187
- },
2188
- });
2189
- return next.handle(modified);
2190
- }
2191
- else {
2192
- return next.handle(request);
2193
- }
2194
- }
2195
- return next.handle(request);
2196
- }
2197
- }
2198
- AuthHeadersInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthHeadersInterceptor, deps: [{ token: SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
2199
- AuthHeadersInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthHeadersInterceptor });
2200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: AuthHeadersInterceptor, decorators: [{
2201
- type: Injectable
2202
- }], ctorParameters: function () { return [{ type: SettingsService }]; } });
2203
-
2204
- var FieldTypes;
2205
- (function (FieldTypes) {
2206
- FieldTypes[FieldTypes["Text"] = 0] = "Text";
2207
- FieldTypes[FieldTypes["Checkbox"] = 1] = "Checkbox";
2208
- FieldTypes[FieldTypes["Dropdown"] = 2] = "Dropdown";
2209
- FieldTypes[FieldTypes["Multiselect"] = 3] = "Multiselect";
2210
- })(FieldTypes || (FieldTypes = {}));
2211
-
2212
- const moment = momentModule['default'] || momentModule;
2213
- class CurrentTimezoneComponent {
2214
- constructor() { }
2215
- ngOnInit() {
2216
- const timeZone = moment.tz.guess();
2217
- this.timeZoneAndOffset = timeZone + ' ' + moment().format('Z');
2218
- }
2219
- }
2220
- CurrentTimezoneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: CurrentTimezoneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2221
- CurrentTimezoneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: CurrentTimezoneComponent, selector: "current-timezone", ngImport: i0, template: "<div class=\"divide-line\"></div>\n<div class=\"time-zone\">\n {{ 'CurrentTimeZone' | translate }}: {{ timeZoneAndOffset }}\n</div>\n", styles: [""], dependencies: [{ kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
2222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: CurrentTimezoneComponent, decorators: [{
2223
- type: Component,
2224
- args: [{ selector: 'current-timezone', template: "<div class=\"divide-line\"></div>\n<div class=\"time-zone\">\n {{ 'CurrentTimeZone' | translate }}: {{ timeZoneAndOffset }}\n</div>\n" }]
2225
- }], ctorParameters: function () { return []; } });
2226
-
2227
- const allKey = 'All';
2228
- const defaultValueField = 'id';
2229
- class ActivityFilterComponent {
2230
- constructor(translate) {
2231
- this.translate = translate;
2232
- this.showArchiveSwitcher = true;
2233
- this.showSearhText = true;
2234
- this.FieldTypes = FieldTypes;
2235
- this.defaultNamedModel = {
2236
- name: this.translate.instant(allKey),
2237
- id: null,
2238
- };
2239
- }
2240
- ngOnInit() {
2241
- var _a;
2242
- (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.forEach((element) => (element.valueField = element.valueField
2243
- ? element.valueField
2244
- : defaultValueField));
2245
- this.filterService.filter$.subscribe((filter) => {
2246
- this.filter = filter;
2247
- this.changeFilter();
2248
- });
2249
- }
2250
- ngOnChanges() {
2251
- this.changeFilter();
2252
- }
2253
- setTodayFilter() {
2254
- this.filterService.setToday();
2255
- }
2256
- clearFilter() {
2257
- var _a;
2258
- (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.forEach((element) => {
2259
- element.filter.value = null;
2260
- if (element.filter.values) {
2261
- element.filter.values = [];
2262
- }
2263
- });
2264
- this.filterService.reset();
2265
- this.emitChangeEvents();
2266
- }
2267
- applyFilter() {
2268
- this.setCustomFilters();
2269
- this.filterService.applyFilter(this.filter);
2270
- }
2271
- fieldChange(value, element) {
2272
- if (element.change) {
2273
- element.change(value);
2274
- }
2275
- }
2276
- fillFilter() {
2277
- var _a, _b;
2278
- if (!this.filter) {
2279
- return;
2280
- }
2281
- (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.forEach((element) => {
2282
- element.filter = Object.assign(Object.assign({}, element.filter), { value: null, values: null });
2283
- });
2284
- (_b = this.filter.customFilters) === null || _b === void 0 ? void 0 : _b.forEach((filter) => {
2285
- var _a;
2286
- const element = (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.find((x) => x.filter.field === filter.field &&
2287
- x.filter.filterTarget === filter.filterTarget);
2288
- if (element) {
2289
- element.filter = Object.assign({}, filter);
2290
- }
2291
- });
2292
- }
2293
- setCustomFilters() {
2294
- var _a, _b;
2295
- (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.forEach((element) => {
2296
- var _a;
2297
- const index = (_a = this.filter.customFilters) === null || _a === void 0 ? void 0 : _a.findIndex((x) => x.field === element.filter.field);
2298
- if (index !== -1) {
2299
- this.filter.customFilters.splice(index, 1);
2300
- }
2301
- });
2302
- (_b = this.customFilterElements) === null || _b === void 0 ? void 0 : _b.forEach((element) => this.filter.customFilters.push(element.filter));
2303
- }
2304
- fixMultiselectFilters() {
2305
- var _a;
2306
- const multiSelectFilters = (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.map((element) => {
2307
- if (element.fieldType === FieldTypes.Multiselect) {
2308
- return element.filter;
2309
- }
2310
- });
2311
- if (multiSelectFilters) {
2312
- multiSelectFilters.forEach((filter) => {
2313
- if (filter === null || filter === void 0 ? void 0 : filter.value) {
2314
- filter.values = [filter.value];
2315
- filter.value = null;
2316
- }
2317
- });
2318
- }
2319
- }
2320
- changeFilter() {
2321
- this.fillFilter();
2322
- this.fixMultiselectFilters();
2323
- this.emitChangeEvents();
2324
- }
2325
- emitChangeEvents() {
2326
- var _a;
2327
- (_a = this.customFilterElements) === null || _a === void 0 ? void 0 : _a.forEach((element) => {
2328
- var _a;
2329
- if (element.filter.value || element.filter.values) {
2330
- this.fieldChange((_a = element.filter.value) !== null && _a !== void 0 ? _a : element.filter.values, element);
2331
- }
2332
- });
2333
- }
2334
- }
2335
- ActivityFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ActivityFilterComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
2336
- ActivityFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: ActivityFilterComponent, selector: "activity-filter", inputs: { showArchiveSwitcher: "showArchiveSwitcher", showSearhText: "showSearhText", customFilterElements: "customFilterElements", filterService: "filterService" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"header-selection-field activity-filter\">\n <div class=\"filter-row\">\n <div>\n <label for=\"datefrom\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateFrom' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateFrom\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label for=\"dateto\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateTo' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateTo\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label class=\"title-field\">\n <span class=\"link-button\" (click)=\"setTodayFilter()\">\n {{ 'ActivitiesFilter.FilterToday' | translate }}\n </span>\n </label>\n </div>\n <div class=\"filter-row\">\n <div class=\"flag\" *ngIf=\"showArchiveSwitcher\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"filter.switchToArchive\" type=\"checkbox\" />\n {{ 'ActivitiesFilter.SwitchToArchiveLabel' | translate }}\n </label>\n </div>\n </div>\n <div *ngIf=\"showSearhText\">\n <label class=\"title-field\">\n <span>{{ 'ActivitiesFilter.SearchLabel' | translate }}:</span>\n </label>\n <input\n type=\"text\"\n k-input\n class=\"input k-input searchtext-input\"\n [(ngModel)]=\"filter.searchText\"\n (keyup.enter)=\"applyFilter()\"\n [disabled]=\"filter.switchToArchive\"\n />\n </div>\n </div>\n </div>\n <div class=\"filter-row\">\n <ng-container *ngFor=\"let field of customFilterElements\">\n <ng-container [ngSwitch]=\"field.fieldType\">\n <ng-template [ngSwitchCase]=\"FieldTypes.Text\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <input\n type=\"text\"\n class=\"input k-input\"\n [(ngModel)]=\"field.filter.value\"\n [placeholder]=\"field.placeholder | translate\"\n />\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Dropdown\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-dropdownlist\n [data]=\"field.data\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [defaultItem]=\"defaultNamedModel\"\n [(ngModel)]=\"field.filter.value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-dropdownlist>\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Checkbox\">\n <div class=\"flag\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"field.filter.value\" type=\"checkbox\" />\n {{ field.title | translate }}\n </label>\n </div>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Multiselect\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-multiselect\n kendoMultiSelectSummaryTag\n [autoClose]=\"false\"\n [data]=\"field.data\"\n [(ngModel)]=\"field.filter.values\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [valuePrimitive]=\"true\"\n [placeholder]=\"field.placeholder | translate\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-multiselect>\n </div>\n </label>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <button class=\"btn btn-inverse\" (click)=\"applyFilter()\">\n {{ 'Buttons.Apply' | translate }}\n </button>\n <button class=\"btn btn-inverse\" (click)=\"clearFilter()\">\n {{ 'Buttons.Clear' | translate }}\n </button>\n </div>\n </div>\n</div>\n<current-timezone></current-timezone>\n", styles: ["::ng-deep .filter-row{display:flex;flex-flow:row wrap;margin-bottom:20px}::ng-deep .filter-row>div{margin:0 10px 30px 5px;min-width:100px}::ng-deep .filter-row .title-field{margin:0;width:100%}::ng-deep .filter-row .flag{margin-top:10px!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "component", type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { kind: "directive", type: i4.SummaryTagDirective, selector: "[kendoMultiSelectSummaryTag]", inputs: ["kendoMultiSelectSummaryTag"] }, { kind: "component", type: i5$2.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["focusableId", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "title", "subtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "adaptiveMode", "defaultTab", "size", "rounded", "fillMode"], outputs: ["valueChange", "open", "close", "focus", "blur"], exportAs: ["kendo-datetimepicker"] }, { kind: "component", type: CurrentTimezoneComponent, selector: "current-timezone" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
2337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ActivityFilterComponent, decorators: [{
2338
- type: Component,
2339
- args: [{ selector: 'activity-filter', template: "<div class=\"header-selection-field activity-filter\">\n <div class=\"filter-row\">\n <div>\n <label for=\"datefrom\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateFrom' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateFrom\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label for=\"dateto\" class=\"title-field\">\n <span>{{ 'ActivitiesFilter.DateTo' | translate }}:</span>\n <div>\n <kendo-datetimepicker\n format=\"dd/MM/yyyy HH:mm\"\n [(value)]=\"filter.dateTo\"\n ></kendo-datetimepicker>\n </div>\n </label>\n </div>\n <div>\n <label class=\"title-field\">\n <span class=\"link-button\" (click)=\"setTodayFilter()\">\n {{ 'ActivitiesFilter.FilterToday' | translate }}\n </span>\n </label>\n </div>\n <div class=\"filter-row\">\n <div class=\"flag\" *ngIf=\"showArchiveSwitcher\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"filter.switchToArchive\" type=\"checkbox\" />\n {{ 'ActivitiesFilter.SwitchToArchiveLabel' | translate }}\n </label>\n </div>\n </div>\n <div *ngIf=\"showSearhText\">\n <label class=\"title-field\">\n <span>{{ 'ActivitiesFilter.SearchLabel' | translate }}:</span>\n </label>\n <input\n type=\"text\"\n k-input\n class=\"input k-input searchtext-input\"\n [(ngModel)]=\"filter.searchText\"\n (keyup.enter)=\"applyFilter()\"\n [disabled]=\"filter.switchToArchive\"\n />\n </div>\n </div>\n </div>\n <div class=\"filter-row\">\n <ng-container *ngFor=\"let field of customFilterElements\">\n <ng-container [ngSwitch]=\"field.fieldType\">\n <ng-template [ngSwitchCase]=\"FieldTypes.Text\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <input\n type=\"text\"\n class=\"input k-input\"\n [(ngModel)]=\"field.filter.value\"\n [placeholder]=\"field.placeholder | translate\"\n />\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Dropdown\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-dropdownlist\n [data]=\"field.data\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [defaultItem]=\"defaultNamedModel\"\n [(ngModel)]=\"field.filter.value\"\n [valuePrimitive]=\"true\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-dropdownlist>\n </div>\n </label>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Checkbox\">\n <div class=\"flag\">\n <div class=\"checkbox\">\n <label>\n <input [(ngModel)]=\"field.filter.value\" type=\"checkbox\" />\n {{ field.title | translate }}\n </label>\n </div>\n </div>\n </ng-template>\n <ng-template [ngSwitchCase]=\"FieldTypes.Multiselect\">\n <div>\n <label class=\"title-field\">\n <span>{{ field.title | translate }}:</span>\n <div>\n <kendo-multiselect\n kendoMultiSelectSummaryTag\n [autoClose]=\"false\"\n [data]=\"field.data\"\n [(ngModel)]=\"field.filter.values\"\n textField=\"name\"\n [valueField]=\"field.valueField\"\n [valuePrimitive]=\"true\"\n [placeholder]=\"field.placeholder | translate\"\n (valueChange)=\"fieldChange($event, field)\"\n ></kendo-multiselect>\n </div>\n </label>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-content></ng-content>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <button class=\"btn btn-inverse\" (click)=\"applyFilter()\">\n {{ 'Buttons.Apply' | translate }}\n </button>\n <button class=\"btn btn-inverse\" (click)=\"clearFilter()\">\n {{ 'Buttons.Clear' | translate }}\n </button>\n </div>\n </div>\n</div>\n<current-timezone></current-timezone>\n", styles: ["::ng-deep .filter-row{display:flex;flex-flow:row wrap;margin-bottom:20px}::ng-deep .filter-row>div{margin:0 10px 30px 5px;min-width:100px}::ng-deep .filter-row .title-field{margin:0;width:100%}::ng-deep .filter-row .flag{margin-top:10px!important}\n"] }]
2340
- }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { showArchiveSwitcher: [{
2341
- type: Input
2342
- }], showSearhText: [{
2343
- type: Input
2344
- }], customFilterElements: [{
2345
- type: Input
2346
- }], filterService: [{
2347
- type: Input
2348
- }] } });
2349
-
2350
- class EntityEditButtonsBarComponent {
2351
- constructor() {
2352
- this.save = new EventEmitter();
2353
- }
2354
- }
2355
- EntityEditButtonsBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: EntityEditButtonsBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2356
- EntityEditButtonsBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: EntityEditButtonsBarComponent, selector: "entity-edit-buttons-bar", inputs: { valid: "valid" }, outputs: { save: "save" }, ngImport: i0, template: "<div class=\"form-group buttons-panel\">\n <div class=\"col-md-4\">\n <a\n [routerLink]=\"['../new']\"\n preserveFragment\n class=\"btn btn-succes\"\n translate=\"CreateNew\"\n requirePermission\n permissionType=\"Create\"\n >\n </a>\n </div>\n <div class=\"col-md-8 text-right\">\n <a\n [routerLink]=\"['../']\"\n preserveFragment\n class=\"btn btn-inverse\"\n translate=\"Cancel\"\n ></a>\n <button\n type=\"submit\"\n class=\"btn btn-success\"\n (click)=\"save.emit()\"\n translate=\"Save\"\n [disabled]=\"!valid\"\n requirePermission\n [permissionType]=\"['Edit', 'Create', 'Set']\"\n ></button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: RequirePermissionDirective, selector: "[requirePermission]", inputs: ["permissionType", "permissionCategory"] }] });
2357
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: EntityEditButtonsBarComponent, decorators: [{
2358
- type: Component,
2359
- args: [{ selector: 'entity-edit-buttons-bar', template: "<div class=\"form-group buttons-panel\">\n <div class=\"col-md-4\">\n <a\n [routerLink]=\"['../new']\"\n preserveFragment\n class=\"btn btn-succes\"\n translate=\"CreateNew\"\n requirePermission\n permissionType=\"Create\"\n >\n </a>\n </div>\n <div class=\"col-md-8 text-right\">\n <a\n [routerLink]=\"['../']\"\n preserveFragment\n class=\"btn btn-inverse\"\n translate=\"Cancel\"\n ></a>\n <button\n type=\"submit\"\n class=\"btn btn-success\"\n (click)=\"save.emit()\"\n translate=\"Save\"\n [disabled]=\"!valid\"\n requirePermission\n [permissionType]=\"['Edit', 'Create', 'Set']\"\n ></button>\n </div>\n</div>\n" }]
2360
- }], propDecorators: { valid: [{
2361
- type: Input
2362
- }], save: [{
2363
- type: Output
2364
- }] } });
2365
-
2366
- class EntityEditFormComponent {
2367
- constructor(route) {
2368
- this.route = route;
2369
- this.formGroup = new BehaviorSubject(null);
2370
- this.saveInProgress = false;
2371
- }
2372
- ngOnChanges() {
2373
- if (this.entityId) {
2374
- this.loadEntity(this.entityId);
2375
- }
2376
- }
2377
- ngOnDestroy() {
2378
- var _a;
2379
- (_a = this.routeService) === null || _a === void 0 ? void 0 : _a.unsubscribe();
2380
- }
2381
- ngOnInit() {
2382
- if (!this.entityId) {
2383
- this.routeService = this.route.params.subscribe((params) => {
2384
- this.loadEntity(params.id);
2385
- });
2386
- }
2387
- }
2388
- loadEntity(id) {
2389
- this.formGroup.next(null);
2390
- const formGroup = new FormGroupWithErrors({});
2391
- if (!id) {
2392
- this.adapter.setForm(formGroup);
2393
- this.formGroup.next(formGroup);
2394
- return;
2395
- }
2396
- this.adapter
2397
- .getService()
2398
- .get(id, this.adapter.getUrlParams())
2399
- .subscribe((model) => {
2400
- formGroup.addControl('id', new UntypedFormControl(model.id));
2401
- for (const key of Object.keys(model)) {
2402
- formGroup.addControl(key, new UntypedFormControl(model[key]));
2403
- }
2404
- this.adapter.setForm(formGroup);
2405
- this.formGroup.next(formGroup);
2406
- });
2407
- }
2408
- save() {
2409
- this.saveInProgress = true;
2410
- this.adapter
2411
- .getService()
2412
- .save(this.adapter.getValue(), this.adapter.getUrlParams())
2413
- .pipe(take(1), finalize(() => (this.saveInProgress = false)))
2414
- .subscribe({
2415
- next: (result) => {
2416
- this.adapter.onSaved(result);
2417
- this.formGroup.value.applyServerErrors({ errors: {} }, this.formGroup.value);
2418
- this.formGroup.next(this.formGroup.value);
2419
- },
2420
- error: (error) => {
2421
- this.formGroup.value.applyServerErrors(error.error, this.formGroup.value);
2422
- this.formGroup.next(this.formGroup.value);
2423
- },
2424
- });
2425
- }
2426
- }
2427
- EntityEditFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: EntityEditFormComponent, deps: [{ token: i1$5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
2428
- EntityEditFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: EntityEditFormComponent, selector: "entity-edit-form", inputs: { title: "title", entityId: "entityId", adapter: "adapter" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"col-md-8\">\n <header class=\"header-page-bg\">\n <h4>{{ title | translate }}</h4>\n </header>\n <div class=\"panel editor-area hero-unit\">\n <form\n *ngIf=\"formGroup | async as form\"\n class=\"form-horizontal\"\n [formGroup]=\"form\"\n novalidate\n autocomplete=\"off\"\n >\n <div class=\"col-md-3\"></div>\n <div class=\"col-md-9\">\n <app-general-errors\n [form]=\"form\"\n [errors]=\"form.generalErrors\"\n ></app-general-errors>\n </div>\n <ng-content></ng-content>\n <entity-edit-buttons-bar\n (save)=\"save()\"\n [valid]=\"form.valid && form.dirty && !saveInProgress\"\n >\n </entity-edit-buttons-bar>\n </form>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GeneralErrorsComponent, selector: "app-general-errors", inputs: ["form", "errors"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: EntityEditButtonsBarComponent, selector: "entity-edit-buttons-bar", inputs: ["valid"], outputs: ["save"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
2429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: EntityEditFormComponent, decorators: [{
2430
- type: Component,
2431
- args: [{ selector: 'entity-edit-form', template: "<div class=\"col-md-8\">\n <header class=\"header-page-bg\">\n <h4>{{ title | translate }}</h4>\n </header>\n <div class=\"panel editor-area hero-unit\">\n <form\n *ngIf=\"formGroup | async as form\"\n class=\"form-horizontal\"\n [formGroup]=\"form\"\n novalidate\n autocomplete=\"off\"\n >\n <div class=\"col-md-3\"></div>\n <div class=\"col-md-9\">\n <app-general-errors\n [form]=\"form\"\n [errors]=\"form.generalErrors\"\n ></app-general-errors>\n </div>\n <ng-content></ng-content>\n <entity-edit-buttons-bar\n (save)=\"save()\"\n [valid]=\"form.valid && form.dirty && !saveInProgress\"\n >\n </entity-edit-buttons-bar>\n </form>\n </div>\n</div>\n" }]
2432
- }], ctorParameters: function () { return [{ type: i1$5.ActivatedRoute }]; }, propDecorators: { title: [{
2433
- type: Input
2434
- }], entityId: [{
2435
- type: Input
2436
- }], adapter: [{
2437
- type: Input
2438
- }] } });
2439
-
2440
- class FieldMultiSelectComponent extends FieldComponent {
2441
- get control() {
2442
- return this.parent.form.get(this.fieldName);
2443
- }
2444
- constructor(parent, eref) {
2445
- var _a, _b;
2446
- super(parent, eref, []);
2447
- this.parent = parent;
2448
- this.eref = eref;
2449
- this.singleMode = false;
2450
- this.autoClose = false;
2451
- this.changed = new EventEmitter();
2452
- this.data = [];
2453
- this.textField = (_a = this.textField) !== null && _a !== void 0 ? _a : 'name';
2454
- this.valueField = (_b = this.valueField) !== null && _b !== void 0 ? _b : 'id';
2455
- }
2456
- ngOnChanges() {
2457
- this.getData().subscribe((data) => {
2458
- this.data = data.data;
2459
- this.control.setValue(this.control.value.filter((x) => this.data.filter((d) => d.id === x).length));
2460
- });
2461
- }
2462
- onPopupOpen(event) {
2463
- if (!this.singleMode) {
2464
- return;
2465
- }
2466
- this.control.value.length > 0 && event.preventDefault();
2467
- }
2468
- getData() {
2469
- return this.service.getPage(this.filter ? { filter: this.filter } : {});
2470
- }
2471
- }
2472
- FieldMultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldMultiSelectComponent, deps: [{ token: i1$4.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2473
- FieldMultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: FieldMultiSelectComponent, selector: "field-multiselect", inputs: { service: "service", rebind: "rebind", filter: "filter", textField: "textField", valueField: "valueField", singleMode: "singleMode", autoClose: "autoClose" }, outputs: { changed: "changed" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div *ngIf=\"control\" class=\"col-md-9\">\n <kendo-multiselect\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n [autoClose]=\"autoClose\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [valuePrimitive]=\"true\"\n (open)=\"onPopupOpen($event)\"\n >\n </kendo-multiselect>\n\n <div *ngIf=\"control.invalid && control.touched\" class=\"bg-danger\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], viewProviders: [
2474
- {
2475
- provide: ControlContainer,
2476
- useExisting: FormGroupDirective,
2477
- },
2478
- ] });
2479
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldMultiSelectComponent, decorators: [{
2480
- type: Component,
2481
- args: [{ selector: 'field-multiselect', viewProviders: [
2482
- {
2483
- provide: ControlContainer,
2484
- useExisting: FormGroupDirective,
2485
- },
2486
- ], template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div *ngIf=\"control\" class=\"col-md-9\">\n <kendo-multiselect\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data\"\n [autoClose]=\"autoClose\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [valuePrimitive]=\"true\"\n (open)=\"onPopupOpen($event)\"\n >\n </kendo-multiselect>\n\n <div *ngIf=\"control.invalid && control.touched\" class=\"bg-danger\">\n <span *ngIf=\"control.errors['required']\">{{\n 'Required' | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors['serverErrorMsg']\n }}</span>\n </div>\n </div>\n</div>\n" }]
2487
- }], ctorParameters: function () { return [{ type: i1$4.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { service: [{
2488
- type: Input
2489
- }], rebind: [{
2490
- type: Input
2491
- }], filter: [{
2492
- type: Input
2493
- }], textField: [{
2494
- type: Input
2495
- }], valueField: [{
2496
- type: Input
2497
- }], singleMode: [{
2498
- type: Input
2499
- }], autoClose: [{
2500
- type: Input
2501
- }], changed: [{
2502
- type: Output
2503
- }] } });
2504
-
2505
- const All = 'All';
2506
- class FieldDropdownlistComponent {
2507
- constructor(translate) {
2508
- this.translate = translate;
2509
- this.valueChange = new EventEmitter();
2510
- }
2511
- ngOnInit() {
2512
- return __awaiter(this, void 0, void 0, function* () {
2513
- this.defaultItem = { id: null, name: this.translate.instant(All) };
2514
- this.getData();
2515
- this.translate.onLangChange.subscribe((_event) => {
2516
- this.defaultItem = { id: null, name: this.translate.instant(All) };
2517
- });
2518
- });
2519
- }
2520
- getData() {
2521
- this.service.getPage({ sort: this.sort }).subscribe((data) => {
2522
- this.data = data.data;
2523
- if (this.initialSelectedId) {
2524
- const selectedItem = this.data.find((x) => x.id === this.initialSelectedId);
2525
- if (selectedItem) {
2526
- this.kendoDropDown.writeValue(selectedItem);
2527
- }
2528
- }
2529
- });
2530
- }
2531
- onValueChange(event) {
2532
- this.valueChange.emit(event);
2533
- }
2534
- initSelectedId(id) {
2535
- this.initialSelectedId = id;
2536
- }
2537
- }
2538
- FieldDropdownlistComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownlistComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
2539
- FieldDropdownlistComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: FieldDropdownlistComponent, selector: "field-dropdownlist", inputs: { service: "service", label: "label", sort: "sort" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "kendoDropDown", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<div class=\"header-selection-field\">\n <label\n for=\"{{ '_' + label }}\"\n class=\"title-field\"\n translate=\"{{ label }}\"\n ></label>\n <kendo-dropdownlist\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n id=\"{{ '_' + label }}\"\n (valueChange)=\"onValueChange($event)\"\n [defaultItem]=\"defaultItem\"\n #inputElement\n >\n </kendo-dropdownlist>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }] });
2540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownlistComponent, decorators: [{
2541
- type: Component,
2542
- args: [{ selector: 'field-dropdownlist', template: "<div class=\"header-selection-field\">\n <label\n for=\"{{ '_' + label }}\"\n class=\"title-field\"\n translate=\"{{ label }}\"\n ></label>\n <kendo-dropdownlist\n [data]=\"data\"\n textField=\"name\"\n valueField=\"id\"\n id=\"{{ '_' + label }}\"\n (valueChange)=\"onValueChange($event)\"\n [defaultItem]=\"defaultItem\"\n #inputElement\n >\n </kendo-dropdownlist>\n</div>\n" }]
2543
- }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { service: [{
2544
- type: Input
2545
- }], label: [{
2546
- type: Input
2547
- }], sort: [{
2548
- type: Input
2549
- }], valueChange: [{
2550
- type: Output
2551
- }], kendoDropDown: [{
2552
- type: ViewChild,
2553
- args: ['inputElement']
2554
- }] } });
2555
-
2556
- class FooterBarComponent {
2557
- }
2558
- FooterBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FooterBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2559
- FooterBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: FooterBarComponent, selector: "footer-bar", ngImport: i0, template: "<nav class=\"footer navbar navbar-default navbar-fixed-bottom\">\n <div class=\"container\">\n <a class=\"navbar-brand pull-right\" href=\"http://www.indigina.com/\">\n <ng-content></ng-content>\n </a>\n </div>\n</nav>\n", styles: [""] });
2560
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FooterBarComponent, decorators: [{
2561
- type: Component,
2562
- args: [{ selector: 'footer-bar', template: "<nav class=\"footer navbar navbar-default navbar-fixed-bottom\">\n <div class=\"container\">\n <a class=\"navbar-brand pull-right\" href=\"http://www.indigina.com/\">\n <ng-content></ng-content>\n </a>\n </div>\n</nav>\n" }]
2563
- }] });
2564
-
2565
- class ModalWindowComponent {
2566
- constructor(route, router) {
2567
- this.route = route;
2568
- this.router = router;
2569
- this.opened = true;
2570
- }
2571
- close() {
2572
- var _a;
2573
- this.opened = false;
2574
- this.router.navigate([this.callbackPath], {
2575
- relativeTo: this.route,
2576
- fragment: (_a = this.route.snapshot) === null || _a === void 0 ? void 0 : _a.fragment,
2577
- });
2578
- }
2579
- }
2580
- ModalWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ModalWindowComponent, deps: [{ token: i1$5.ActivatedRoute }, { token: i1$5.Router }], target: i0.ɵɵFactoryTarget.Component });
2581
- ModalWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: ModalWindowComponent, selector: "modal-window", inputs: { callbackPath: "callbackPath" }, ngImport: i0, template: "<div class=\"modal-window window-wrapper\">\n <div class=\"k-overlay\" *ngIf=\"opened\" (click)=\"close()\"></div>\n <kendo-window (close)=\"close()\" [height]=\"830\" [width]=\"800\" *ngIf=\"opened\">\n <kendo-window-titlebar>\n <div class=\"k-window-title\"></div>\n <button kendoWindowCloseAction></button>\n </kendo-window-titlebar>\n <ng-content></ng-content>\n </kendo-window>\n</div>\n", styles: [".modal-window{z-index:11002}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.WindowComponent, selector: "kendo-window", inputs: ["autoFocusedElement", "title", "draggable", "resizable", "themeColor", "keepContent", "state", "minWidth", "minHeight", "width", "height", "top", "left"], outputs: ["dragStart", "dragEnd", "resizeStart", "resizeEnd", "close", "widthChange", "heightChange", "topChange", "leftChange", "stateChange"], exportAs: ["kendoWindow"] }, { kind: "component", type: i3.WindowCloseActionDirective, selector: "button[kendoWindowCloseAction]", inputs: ["window"], exportAs: ["kendoWindowCloseAction"] }, { kind: "component", type: i3.WindowTitleBarComponent, selector: "kendo-window-titlebar", inputs: ["template", "id"] }] });
2582
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ModalWindowComponent, decorators: [{
2583
- type: Component,
2584
- args: [{ selector: 'modal-window', template: "<div class=\"modal-window window-wrapper\">\n <div class=\"k-overlay\" *ngIf=\"opened\" (click)=\"close()\"></div>\n <kendo-window (close)=\"close()\" [height]=\"830\" [width]=\"800\" *ngIf=\"opened\">\n <kendo-window-titlebar>\n <div class=\"k-window-title\"></div>\n <button kendoWindowCloseAction></button>\n </kendo-window-titlebar>\n <ng-content></ng-content>\n </kendo-window>\n</div>\n", styles: [".modal-window{z-index:11002}\n"] }]
2585
- }], ctorParameters: function () { return [{ type: i1$5.ActivatedRoute }, { type: i1$5.Router }]; }, propDecorators: { callbackPath: [{
2586
- type: Input
2587
- }] } });
2588
-
2589
- const defaultValueKey = 'id';
2590
- class MulticheckFilterComponent {
2591
- constructor() {
2592
- this.valueChange = new EventEmitter();
2593
- this.showFilter = true;
2594
- this.value = [];
2595
- this.filters = [];
2596
- }
2597
- get ValueKey() {
2598
- return this.valueField ? this.valueField : defaultValueKey;
2599
- }
2600
- ngAfterViewInit() {
2601
- this.currentData = this.data;
2602
- if (this.currentData && this.currentData.length) {
2603
- this.traverseFilters(this.currentFilter);
2604
- this.value = this.filters.map((f) => f.value);
2605
- this.showFilter = typeof this.currentData[0].name === 'string';
2606
- }
2607
- }
2608
- traverseFilters(filters) {
2609
- let compositeFilterDescriptor = filters;
2610
- if (compositeFilterDescriptor.filters) {
2611
- for (let i = 0; i < compositeFilterDescriptor.filters.length; i++) {
2612
- const innerFilter = compositeFilterDescriptor.filters[i];
2613
- if (innerFilter.value && innerFilter.field === this.field) {
2614
- this.filters.push(innerFilter);
2615
- }
2616
- this.traverseFilters(innerFilter);
2617
- }
2618
- }
2619
- }
2620
- isItemSelected(item) {
2621
- return this.value.some((x) => x === item[this.ValueKey]);
2622
- }
2623
- onSelectionChange(item) {
2624
- const selectedValue = item[this.ValueKey];
2625
- if (this.value.some((x) => x === selectedValue)) {
2626
- this.value = this.value.filter((x) => x !== selectedValue);
2627
- }
2628
- else {
2629
- this.value.push(selectedValue);
2630
- }
2631
- this.filterService.filter({
2632
- filters: this.value.map((value) => ({
2633
- field: this.field,
2634
- operator: 'eq',
2635
- value,
2636
- })),
2637
- logic: 'or',
2638
- });
2639
- }
2640
- onInput(e) {
2641
- this.currentData = distinct([
2642
- ...this.currentData.filter((dataItem) => this.value.some((val) => val === dataItem.id)),
2643
- ...filterBy(this.data, {
2644
- operator: 'contains',
2645
- field: 'name',
2646
- value: e.target.value,
2647
- }),
2648
- ], 'name');
2649
- }
2650
- }
2651
- MulticheckFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: MulticheckFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2652
- MulticheckFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: MulticheckFilterComponent, selector: "multicheck-filter", inputs: { currentFilter: "currentFilter", data: "data", filterService: "filterService", field: "field", valueField: "valueField" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<ul>\n <li *ngIf=\"showFilter\">\n <input class=\"k-textbox\" (input)=\"onInput($event)\" />\n </li>\n <li\n *ngFor=\"let item of currentData; let i = index\"\n (click)=\"onSelectionChange(item)\"\n [ngClass]=\"{ 'k-state-selected': isItemSelected(item) }\"\n >\n <input\n type=\"checkbox\"\n style=\"margin-right: 5px\"\n id=\"chk-{{ item.id }}\"\n class=\"k-checkbox\"\n [checked]=\"isItemSelected(item)\"\n />\n <label\n class=\"k-multiselect-checkbox k-checkbox-label\"\n for=\"chk-{{ item.id }}\"\n >\n {{ item.name }}\n </label>\n </li>\n</ul>\n", styles: ["ul{list-style-type:none;height:200px;overflow-y:scroll;padding-left:0;padding-right:12px}ul>li{padding:8px 12px;border:1px solid rgba(0,0,0,.08);border-bottom:none}ul>li:last-of-type{border-bottom:1px solid rgba(0,0,0,.08)}.k-multiselect-checkbox{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2653
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: MulticheckFilterComponent, decorators: [{
2654
- type: Component,
2655
- args: [{ selector: 'multicheck-filter', template: "<ul>\n <li *ngIf=\"showFilter\">\n <input class=\"k-textbox\" (input)=\"onInput($event)\" />\n </li>\n <li\n *ngFor=\"let item of currentData; let i = index\"\n (click)=\"onSelectionChange(item)\"\n [ngClass]=\"{ 'k-state-selected': isItemSelected(item) }\"\n >\n <input\n type=\"checkbox\"\n style=\"margin-right: 5px\"\n id=\"chk-{{ item.id }}\"\n class=\"k-checkbox\"\n [checked]=\"isItemSelected(item)\"\n />\n <label\n class=\"k-multiselect-checkbox k-checkbox-label\"\n for=\"chk-{{ item.id }}\"\n >\n {{ item.name }}\n </label>\n </li>\n</ul>\n", styles: ["ul{list-style-type:none;height:200px;overflow-y:scroll;padding-left:0;padding-right:12px}ul>li{padding:8px 12px;border:1px solid rgba(0,0,0,.08);border-bottom:none}ul>li:last-of-type{border-bottom:1px solid rgba(0,0,0,.08)}.k-multiselect-checkbox{pointer-events:none}\n"] }]
2656
- }], propDecorators: { currentFilter: [{
2657
- type: Input
2658
- }], data: [{
2659
- type: Input
2660
- }], filterService: [{
2661
- type: Input
2662
- }], field: [{
2663
- type: Input
2664
- }], valueField: [{
2665
- type: Input
2666
- }], valueChange: [{
2667
- type: Output
2668
- }] } });
2669
-
2670
- class TopMenuComponent {
2671
- toggleButtonClick() {
2672
- document.body.classList.toggle('mini-navbar');
2673
- }
2674
- }
2675
- TopMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: TopMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2676
- TopMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: TopMenuComponent, selector: "top-bar", inputs: { currentUser: "currentUser", menuItems: "menuItems" }, ngImport: i0, template: "<div id=\"supply-top-navbar\" class=\"supply-nav-margin\">\n <nav class=\"navbar navbar-static-top white-bg\">\n <div class=\"navbar-header\" [style.display]=\"currentUser != null\">\n <button type=\"button\" class=\"navbar-minimalize minimalize-style-2 btn btn-primary\" (click)=\"toggleButtonClick()\">\n <i class=\"fa fa-bars\"></i>\n </button>\n </div>\n <ng-content></ng-content>\n <div id=\"topBarIcons\" class=\"clearfix\" *ngIf=\"currentUser != null\">\n <a [routerLink]=\"['/security/admins', currentUser.id]\" class=\"message-icons left container-login\">\n <span class=\"fa fa-user\" aria-hidden=\"true\"></span>\n <span class=\"pad5left\">{{currentUser.userName}}</span>\n </a>\n <account-menu [user]=\"currentUser\" [menuItems]=\"menuItems\"></account-menu>\n </div>\n </nav>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: AccountMenuComponent, selector: "account-menu", inputs: ["user", "menuItems"] }] });
2677
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: TopMenuComponent, decorators: [{
2678
- type: Component,
2679
- args: [{ selector: 'top-bar', template: "<div id=\"supply-top-navbar\" class=\"supply-nav-margin\">\n <nav class=\"navbar navbar-static-top white-bg\">\n <div class=\"navbar-header\" [style.display]=\"currentUser != null\">\n <button type=\"button\" class=\"navbar-minimalize minimalize-style-2 btn btn-primary\" (click)=\"toggleButtonClick()\">\n <i class=\"fa fa-bars\"></i>\n </button>\n </div>\n <ng-content></ng-content>\n <div id=\"topBarIcons\" class=\"clearfix\" *ngIf=\"currentUser != null\">\n <a [routerLink]=\"['/security/admins', currentUser.id]\" class=\"message-icons left container-login\">\n <span class=\"fa fa-user\" aria-hidden=\"true\"></span>\n <span class=\"pad5left\">{{currentUser.userName}}</span>\n </a>\n <account-menu [user]=\"currentUser\" [menuItems]=\"menuItems\"></account-menu>\n </div>\n </nav>\n</div>\n" }]
2680
- }], propDecorators: { currentUser: [{
2681
- type: Input
2682
- }], menuItems: [{
2683
- type: Input
2684
- }] } });
2685
-
2686
- class FieldDropdownComponent extends FieldComponent {
2687
- get control() {
2688
- return this.parent.form.get(this.fieldName);
2689
- }
2690
- constructor(parent, eref) {
2691
- super(parent, eref, '');
2692
- this.parent = parent;
2693
- this.eref = eref;
2694
- }
2695
- ngOnInit() {
2696
- super.ngOnInit();
2697
- this.setData();
2698
- }
2699
- ngOnChanges() {
2700
- super.ngOnChanges();
2701
- this.setData();
2702
- }
2703
- setData() {
2704
- this.data$ = this.service
2705
- .getPage(this.filter ? { filter: this.filter } : {})
2706
- .pipe(tap$1((x) => {
2707
- const entity = x.data.find((d) => d.id === this.control.value) || x.data[0];
2708
- if (entity) {
2709
- this.control.setValue(entity.id);
2710
- }
2711
- }), map$1((x) => x.data));
2712
- }
2713
- }
2714
- FieldDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownComponent, deps: [{ token: i1$4.FormGroupDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2715
- FieldDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: FieldDropdownComponent, selector: "field-dropdown", inputs: { service: "service", rebind: "rebind", filter: "filter" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-dropdownlist\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data$ | async\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-dropdownlist>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n \"Required\" | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors[\"serverErrorMsg\"]\n }}</span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i4.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], viewProviders: [
2716
- { provide: ControlContainer, useExisting: FormGroupDirective },
2717
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2718
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownComponent, decorators: [{
2719
- type: Component,
2720
- args: [{ selector: 'field-dropdown', viewProviders: [
2721
- { provide: ControlContainer, useExisting: FormGroupDirective },
2722
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group\">\n <label\n for=\"{{ '_' + fieldName }}\"\n class=\"col-md-3 control-label\"\n translate=\"{{ labelKey }}\"\n ></label>\n <div class=\"col-md-9\" *ngIf=\"control\">\n <kendo-dropdownlist\n id=\"{{ '_' + fieldName }}\"\n [formControl]=\"control\"\n [data]=\"data$ | async\"\n textField=\"name\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n >\n </kendo-dropdownlist>\n\n <div class=\"bg-danger\" *ngIf=\"control.invalid && control.touched\">\n <span *ngIf=\"control.errors['required']\">{{\n \"Required\" | translate : { param0: labelKey | translate }\n }}</span>\n <span *ngIf=\"control.errors['serverErrorMsg']\">{{\n control.errors[\"serverErrorMsg\"]\n }}</span>\n </div>\n </div>\n</div>\n" }]
2723
- }], ctorParameters: function () { return [{ type: i1$4.FormGroupDirective }, { type: i0.ElementRef }]; }, propDecorators: { service: [{
2724
- type: Input
2725
- }], rebind: [{
2726
- type: Input
2727
- }], filter: [{
2728
- type: Input
2729
- }] } });
2730
-
2731
- class FieldDropdownModule {
2732
- }
2733
- FieldDropdownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2734
- FieldDropdownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownModule, declarations: [FieldDropdownComponent], imports: [TranslateModule,
2735
- DropDownsModule,
2736
- ReactiveFormsModule,
2737
- CommonModule], exports: [FieldDropdownComponent] });
2738
- FieldDropdownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownModule, imports: [TranslateModule,
2739
- DropDownsModule,
2740
- ReactiveFormsModule,
2741
- CommonModule] });
2742
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: FieldDropdownModule, decorators: [{
2743
- type: NgModule,
2744
- args: [{
2745
- declarations: [FieldDropdownComponent],
2746
- imports: [
2747
- TranslateModule,
2748
- DropDownsModule,
2749
- ReactiveFormsModule,
2750
- CommonModule,
2751
- ],
2752
- exports: [FieldDropdownComponent],
2753
- }]
2754
- }] });
2755
-
2756
- const dateFilterParameter = new InjectionToken('dateFilterParameter', {
2757
- factory: () => 'start',
2758
- providedIn: 'root',
2759
- });
2760
-
2761
- class KendoModule {
2762
- static forRoot(config, servicesConfig) {
2763
- var _a;
2764
- let module = {
2765
- ngModule: KendoModule,
2766
- providers: [
2767
- {
2768
- provide: IndiginaConfiguration,
2769
- useValue: config,
2770
- },
2771
- {
2772
- provide: MSAL_INSTANCE,
2773
- useFactory: MSALInstanceFactory,
2774
- deps: [IndiginaConfiguration],
2775
- },
2776
- ],
2777
- };
2778
- const filterParameter = (_a = servicesConfig === null || servicesConfig === void 0 ? void 0 : servicesConfig.activityFilterServiceConfig) === null || _a === void 0 ? void 0 : _a.dateFilterParameter;
2779
- if (filterParameter) {
2780
- module.providers.push({
2781
- provide: dateFilterParameter,
2782
- useValue: filterParameter,
2783
- });
2784
- }
2785
- return module;
2786
- }
2787
- }
2788
- KendoModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: KendoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2789
- KendoModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: KendoModule, declarations: [TopMenuComponent,
2790
- FooterBarComponent,
2791
- AccountMenuComponent,
2792
- LanguageSelectorComponent,
2793
- EntityEditButtonsBarComponent,
2794
- EntityEditFormComponent,
2795
- EntityListComponent,
2796
- FieldMultiSelectComponent,
2797
- FieldDropdownlistComponent,
2798
- ConfirmDialogComponent,
2799
- ExcelExportButtonComponent,
2800
- MulticheckFilterComponent,
2801
- RequirePermissionDirective,
2802
- ActivityFilterComponent,
2803
- CurrentTimezoneComponent,
2804
- ModalWindowComponent,
2805
- LiveUpdatesControlComponent,
2806
- AzureLoginCallbackComponent,
2807
- UserListAdminComponent], imports: [CommonModule,
2808
- RouterModule,
2809
- IndiginaModule,
2810
- PopupModule,
2811
- GridModule,
2812
- ExcelModule,
2813
- InputsModule,
2814
- ButtonsModule,
2815
- DialogsModule,
2816
- CommonModule,
2817
- FormsModule,
2818
- WindowModule,
2819
- DialogsModule,
2820
- ReactiveFormsModule,
2821
- DropDownsModule,
2822
- TooltipModule,
2823
- DateInputsModule,
2824
- MsalModule,
2825
- FieldDropdownModule], exports: [TopMenuComponent,
2826
- FooterBarComponent,
2827
- AccountMenuComponent,
2828
- LanguageSelectorComponent,
2829
- IndiginaModule,
2830
- PopupModule,
2831
- DropDownsModule,
2832
- TooltipModule,
2833
- DateInputsModule,
2834
- WindowModule,
2835
- DialogsModule,
2836
- PopupModule,
2837
- GridModule,
2838
- ExcelModule,
2839
- InputsModule,
2840
- ButtonsModule,
2841
- EntityEditButtonsBarComponent,
2842
- EntityEditFormComponent,
2843
- EntityListComponent,
2844
- FieldMultiSelectComponent,
2845
- FieldDropdownlistComponent,
2846
- ConfirmDialogComponent,
2847
- ExcelExportButtonComponent,
2848
- MulticheckFilterComponent,
2849
- RequirePermissionDirective,
2850
- ActivityFilterComponent,
2851
- CurrentTimezoneComponent,
2852
- ModalWindowComponent,
2853
- LiveUpdatesControlComponent,
2854
- MsalModule,
2855
- AzureLoginCallbackComponent,
2856
- UserListAdminComponent,
2857
- FieldDropdownModule] });
2858
- KendoModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: KendoModule, providers: [
2859
- {
2860
- provide: HTTP_INTERCEPTORS,
2861
- useClass: AuthHeadersInterceptor,
2862
- multi: true,
2863
- },
2864
- AccountService,
2865
- PermissionsService,
2866
- SignalRService,
2867
- MsalService,
2868
- ], imports: [CommonModule,
2869
- RouterModule,
2870
- IndiginaModule,
2871
- PopupModule,
2872
- GridModule,
2873
- ExcelModule,
2874
- InputsModule,
2875
- ButtonsModule,
2876
- DialogsModule,
2877
- CommonModule,
2878
- FormsModule,
2879
- WindowModule,
2880
- DialogsModule,
2881
- ReactiveFormsModule,
2882
- DropDownsModule,
2883
- TooltipModule,
2884
- DateInputsModule,
2885
- MsalModule,
2886
- FieldDropdownModule, IndiginaModule,
2887
- PopupModule,
2888
- DropDownsModule,
2889
- TooltipModule,
2890
- DateInputsModule,
2891
- WindowModule,
2892
- DialogsModule,
2893
- PopupModule,
2894
- GridModule,
2895
- ExcelModule,
2896
- InputsModule,
2897
- ButtonsModule,
2898
- MsalModule,
2899
- FieldDropdownModule] });
2900
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: KendoModule, decorators: [{
2901
- type: NgModule,
2902
- args: [{
2903
- declarations: [
2904
- TopMenuComponent,
2905
- FooterBarComponent,
2906
- AccountMenuComponent,
2907
- LanguageSelectorComponent,
2908
- EntityEditButtonsBarComponent,
2909
- EntityEditFormComponent,
2910
- EntityListComponent,
2911
- FieldMultiSelectComponent,
2912
- FieldDropdownlistComponent,
2913
- ConfirmDialogComponent,
2914
- ExcelExportButtonComponent,
2915
- MulticheckFilterComponent,
2916
- RequirePermissionDirective,
2917
- ActivityFilterComponent,
2918
- CurrentTimezoneComponent,
2919
- ModalWindowComponent,
2920
- LiveUpdatesControlComponent,
2921
- AzureLoginCallbackComponent,
2922
- UserListAdminComponent,
2923
- ],
2924
- imports: [
2925
- CommonModule,
2926
- RouterModule,
2927
- IndiginaModule,
2928
- PopupModule,
2929
- GridModule,
2930
- ExcelModule,
2931
- InputsModule,
2932
- ButtonsModule,
2933
- DialogsModule,
2934
- CommonModule,
2935
- FormsModule,
2936
- WindowModule,
2937
- DialogsModule,
2938
- ReactiveFormsModule,
2939
- DropDownsModule,
2940
- TooltipModule,
2941
- DateInputsModule,
2942
- MsalModule,
2943
- FieldDropdownModule,
2944
- ],
2945
- providers: [
2946
- {
2947
- provide: HTTP_INTERCEPTORS,
2948
- useClass: AuthHeadersInterceptor,
2949
- multi: true,
2950
- },
2951
- AccountService,
2952
- PermissionsService,
2953
- SignalRService,
2954
- MsalService,
2955
- ],
2956
- exports: [
2957
- TopMenuComponent,
2958
- FooterBarComponent,
2959
- AccountMenuComponent,
2960
- LanguageSelectorComponent,
2961
- IndiginaModule,
2962
- PopupModule,
2963
- DropDownsModule,
2964
- TooltipModule,
2965
- DateInputsModule,
2966
- WindowModule,
2967
- DialogsModule,
2968
- PopupModule,
2969
- GridModule,
2970
- ExcelModule,
2971
- InputsModule,
2972
- ButtonsModule,
2973
- EntityEditButtonsBarComponent,
2974
- EntityEditFormComponent,
2975
- EntityListComponent,
2976
- FieldMultiSelectComponent,
2977
- FieldDropdownlistComponent,
2978
- ConfirmDialogComponent,
2979
- ExcelExportButtonComponent,
2980
- MulticheckFilterComponent,
2981
- RequirePermissionDirective,
2982
- ActivityFilterComponent,
2983
- CurrentTimezoneComponent,
2984
- ModalWindowComponent,
2985
- LiveUpdatesControlComponent,
2986
- MsalModule,
2987
- AzureLoginCallbackComponent,
2988
- UserListAdminComponent,
2989
- FieldDropdownModule,
2990
- ],
2991
- }]
2992
- }] });
2993
-
2994
- var FilterTargets;
2995
- (function (FilterTargets) {
2996
- FilterTargets[FilterTargets["Url"] = 0] = "Url";
2997
- FilterTargets[FilterTargets["Grid"] = 1] = "Grid";
2998
- })(FilterTargets || (FilterTargets = {}));
2999
-
3000
- var MemberTypes;
3001
- (function (MemberTypes) {
3002
- MemberTypes["Admin"] = "Admin";
3003
- MemberTypes["User"] = "User";
3004
- })(MemberTypes || (MemberTypes = {}));
3005
-
3006
- var Operators;
3007
- (function (Operators) {
3008
- Operators["eq"] = "eq";
3009
- Operators["neq"] = "neq";
3010
- Operators["isnull"] = "isnull";
3011
- Operators["isnotnull"] = "isnotnull";
3012
- Operators["lt"] = "lt";
3013
- Operators["lte"] = "lte";
3014
- Operators["gt"] = "gt";
3015
- Operators["gte"] = "gte";
3016
- Operators["startswith"] = "startswith";
3017
- Operators["endswith"] = "endswith";
3018
- Operators["contains"] = "contains";
3019
- Operators["doesnotcontain"] = "doesnotcontain";
3020
- Operators["isempty"] = "isempty";
3021
- Operators["isnotempty"] = "isnotempty";
3022
- })(Operators || (Operators = {}));
3023
-
3024
- var PermissionTypes;
3025
- (function (PermissionTypes) {
3026
- PermissionTypes["Create"] = "Create";
3027
- PermissionTypes["Delete"] = "Delete";
3028
- PermissionTypes["Edit"] = "Edit";
3029
- PermissionTypes["View"] = "View";
3030
- PermissionTypes["Set"] = "Set";
3031
- })(PermissionTypes || (PermissionTypes = {}));
3032
-
3033
- class FilterConverter {
3034
- static toGridState(filter, DateFilterFieldName) {
3035
- var _a;
3036
- const gridState = {
3037
- filter: {
3038
- logic: 'and',
3039
- filters: [],
3040
- },
3041
- };
3042
- const mainFilter = {
3043
- logic: 'and',
3044
- filters: [],
3045
- };
3046
- gridState.skip = +filter.skip;
3047
- gridState.take = +filter.take;
3048
- if (filter.group) {
3049
- gridState.group = filter.group;
3050
- }
3051
- if (filter.sort) {
3052
- gridState.sort = filter.sort;
3053
- }
3054
- else {
3055
- gridState.sort = [{ field: DateFilterFieldName, dir: 'desc' }];
3056
- }
3057
- if (filter.dateFrom) {
3058
- mainFilter.filters.push({
3059
- operator: Operators.gte,
3060
- field: DateFilterFieldName,
3061
- value: filter.dateFrom,
3062
- });
3063
- }
3064
- if (filter.dateTo) {
3065
- mainFilter.filters.push({
3066
- operator: Operators.lte,
3067
- field: DateFilterFieldName,
3068
- value: filter.dateTo,
3069
- });
3070
- }
3071
- (_a = filter.customFilters) === null || _a === void 0 ? void 0 : _a.forEach((x) => {
3072
- if (x.filterTarget === FilterTargets.Grid) {
3073
- if (x.values && x.values.length) {
3074
- const multiselectFilter = {
3075
- logic: 'or',
3076
- filters: [],
3077
- };
3078
- x.values.forEach((value) => {
3079
- multiselectFilter.filters.push({
3080
- operator: x.operator,
3081
- field: x.field,
3082
- value,
3083
- });
3084
- });
3085
- gridState.filter.filters.push(multiselectFilter);
3086
- }
3087
- else {
3088
- if (x.value !== null && typeof x.value !== 'undefined') {
3089
- mainFilter.filters.push({
3090
- operator: x.operator,
3091
- field: x.field,
3092
- value: x.value,
3093
- });
3094
- }
3095
- }
3096
- }
3097
- });
3098
- if (mainFilter.filters.length) {
3099
- if (gridState.filter.filters.length) {
3100
- gridState.filter.filters.push(mainFilter);
3101
- }
3102
- else {
3103
- gridState.filter.filters = mainFilter.filters;
3104
- }
3105
- }
3106
- return gridState;
3107
- }
3108
- }
3109
-
3110
- const filterKey = 'filter';
3111
- const filtersKey = 'filters';
3112
- const dateToKey = 'dateTo';
3113
- const dateFromKey = 'dateFrom';
3114
- const customFiltersKey = 'customFilters';
3115
- const nullKey = 'null';
3116
- class ActivityFilterService {
3117
- constructor(route, router, dateFilterParameterName) {
3118
- this.route = route;
3119
- this.router = router;
3120
- this.dateFilterParameterName = dateFilterParameterName;
3121
- this.defaultFilter = {
3122
- dateTo: null,
3123
- dateFrom: null,
3124
- switchToArchive: false,
3125
- searchText: '',
3126
- skip: 0,
3127
- take: 10,
3128
- };
3129
- this.filterBehavior = new BehaviorSubject(this.defaultFilter);
3130
- this.gridStateBehavior = new BehaviorSubject(FilterConverter.toGridState(this.defaultFilter, this.dateFilterParameterName));
3131
- this.filter$ = this.filterBehavior.asObservable();
3132
- this.gridState$ = this.gridStateBehavior.asObservable();
3133
- this.currentFilter = Object.assign({}, this.defaultFilter);
3134
- this.route.fragment.subscribe((fragment) => __awaiter(this, void 0, void 0, function* () {
3135
- const parsed = urlDeserialize(new URLSearchParams(fragment));
3136
- if (Object.keys(parsed).some((key) => key === filterKey)) {
3137
- this.currentGridState = parsed;
3138
- this.fillCurrentFilter(parsed);
3139
- }
3140
- else {
3141
- this.clearFilter();
3142
- this.setTodayDates();
3143
- this.currentGridState = FilterConverter.toGridState(this.currentFilter, this.dateFilterParameterName);
3144
- }
3145
- this.filterBehavior.next(this.currentFilter);
3146
- }));
3147
- this.filter$.subscribe((filter) => {
3148
- this.gridStateBehavior.next(FilterConverter.toGridState(filter, this.dateFilterParameterName));
3149
- });
3150
- }
3151
- reset() {
3152
- this.clearFilter();
3153
- this.applyFilter(this.currentFilter);
3154
- this.gridStateBehavior.next(this.currentGridState);
3155
- }
3156
- setFilter(filter) {
3157
- this.currentFilter.skip = 0;
3158
- this.currentFilter = Object.assign(filter);
3159
- this.currentGridState = FilterConverter.toGridState(this.currentFilter, this.dateFilterParameterName);
3160
- }
3161
- applyFilter(filter) {
3162
- this.setFilter(filter);
3163
- this.stateNavigation(this.prepareFilterToSerialize());
3164
- }
3165
- setToday() {
3166
- this.setTodayDates();
3167
- this.applyFilter(this.currentFilter);
3168
- }
3169
- clearFilter() {
3170
- if (this.currentFilter) {
3171
- const customFilters = Object.assign([], this.currentFilter.customFilters);
3172
- customFilters.forEach((x) => {
3173
- x.value = null;
3174
- if (x.values) {
3175
- x.values = [];
3176
- }
3177
- });
3178
- this.currentFilter = Object.assign({}, this.defaultFilter);
3179
- this.currentFilter.customFilters = customFilters;
3180
- }
3181
- else {
3182
- this.currentFilter = Object.assign({}, this.defaultFilter);
3183
- }
3184
- }
3185
- setGridState(state) {
3186
- this.currentGridState = state;
3187
- const { switchToArchive, searchText } = this.currentFilter;
3188
- this.clearFilter();
3189
- this.currentFilter = Object.assign(this.currentFilter, {
3190
- switchToArchive,
3191
- searchText,
3192
- });
3193
- this.fillCurrentFilter(this.currentGridState);
3194
- this.stateNavigation(this.currentGridState);
3195
- }
3196
- setTodayDates() {
3197
- const now = new Date();
3198
- this.currentFilter.dateTo = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 0, 0, 0);
3199
- this.currentFilter.dateFrom = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);
3200
- }
3201
- stateNavigation(object) {
3202
- return __awaiter(this, void 0, void 0, function* () {
3203
- const navigate = yield this.router.navigate([], {
3204
- relativeTo: this.route,
3205
- fragment: urlSerialize(object),
3206
- });
3207
- if (!navigate) {
3208
- this.filterBehavior.next(this.currentFilter);
3209
- }
3210
- });
3211
- }
3212
- prepareFilterToSerialize() {
3213
- var _a;
3214
- const result = {};
3215
- Object.keys(this.currentFilter).forEach((key) => {
3216
- if (key !== dateToKey &&
3217
- key !== dateFromKey &&
3218
- key !== customFiltersKey) {
3219
- result[key] = this.currentFilter[key];
3220
- }
3221
- });
3222
- (_a = this.currentFilter.customFilters) === null || _a === void 0 ? void 0 : _a.forEach((filter) => {
3223
- if (filter.filterTarget == FilterTargets.Url) {
3224
- result[filter.field] = filter.value;
3225
- }
3226
- });
3227
- result[filterKey] = FilterConverter.toGridState(this.currentFilter, this.dateFilterParameterName).filter;
3228
- return result;
3229
- }
3230
- fillCurrentFilter(object) {
3231
- this.currentFilter.customFilters = [];
3232
- this.fillFromDescriptor(object.filter);
3233
- Object.keys(object).forEach((key) => {
3234
- if (key !== filterKey && key !== nullKey && key !== filtersKey) {
3235
- if (Object.keys(this.currentFilter).some((x) => x == key)) {
3236
- this.currentFilter[key] = object[key];
3237
- }
3238
- else {
3239
- this.fillUrlFilter(key, object[key]);
3240
- }
3241
- }
3242
- });
3243
- }
3244
- fillUrlFilter(key, val) {
3245
- const index = this.currentFilter.customFilters.findIndex((filter) => filter.field == key);
3246
- if (index !== -1) {
3247
- this.currentFilter.customFilters[index].value = val;
3248
- }
3249
- else {
3250
- this.currentFilter.customFilters.push({
3251
- field: key,
3252
- value: val,
3253
- operator: Operators.eq,
3254
- filterTarget: FilterTargets.Url,
3255
- });
3256
- }
3257
- }
3258
- fillFromDescriptor(gridFilter) {
3259
- gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.filters.forEach((filter) => {
3260
- const filterDescriptor = filter;
3261
- if (filterDescriptor.field === this.dateFilterParameterName &&
3262
- filterDescriptor.operator === Operators.lte) {
3263
- this.currentFilter.dateTo = filterDescriptor.value;
3264
- }
3265
- if (filterDescriptor.field === this.dateFilterParameterName &&
3266
- filterDescriptor.operator === Operators.gte) {
3267
- this.currentFilter.dateFrom = filterDescriptor.value;
3268
- }
3269
- if (filterDescriptor.field &&
3270
- filterDescriptor.field !== this.dateFilterParameterName) {
3271
- this.setFieldFilter({
3272
- field: filterDescriptor.field,
3273
- filterTarget: FilterTargets.Grid,
3274
- operator: Operators[filterDescriptor.operator],
3275
- value: filterDescriptor.value,
3276
- });
3277
- }
3278
- const compositeFilterDescriptor = filter;
3279
- if (compositeFilterDescriptor.filters) {
3280
- this.fillFromDescriptor(compositeFilterDescriptor);
3281
- }
3282
- });
3283
- }
3284
- setFieldFilter(filter) {
3285
- const index = this.currentFilter.customFilters.findIndex((x) => x.field === filter.field && x.operator === filter.operator);
3286
- if (index !== -1) {
3287
- const values = this.currentFilter.customFilters[index].values;
3288
- const value = this.currentFilter.customFilters[index].value;
3289
- this.currentFilter.customFilters[index].values = values ? values : [];
3290
- if (value) {
3291
- this.currentFilter.customFilters[index].values.push(value);
3292
- this.currentFilter.customFilters[index].value = null;
3293
- }
3294
- this.currentFilter.customFilters[index].values.push(filter.value);
3295
- }
3296
- else {
3297
- this.currentFilter.customFilters.push(filter);
3298
- }
3299
- }
3300
- }
3301
- ActivityFilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ActivityFilterService, deps: [{ token: i1$5.ActivatedRoute }, { token: i1$5.Router }, { token: dateFilterParameter }], target: i0.ɵɵFactoryTarget.Injectable });
3302
- ActivityFilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ActivityFilterService });
3303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ActivityFilterService, decorators: [{
3304
- type: Injectable
3305
- }], ctorParameters: function () {
3306
- return [{ type: i1$5.ActivatedRoute }, { type: i1$5.Router }, { type: undefined, decorators: [{
3307
- type: Inject,
3308
- args: [dateFilterParameter]
3309
- }] }];
3310
- } });
3311
-
3312
- class EntityEditComponent {
3313
- get adapter() {
3314
- return this;
3315
- }
3316
- constructor(service) {
3317
- this.service = service;
3318
- this.saved = new EventEmitter();
3319
- }
3320
- getValue() {
3321
- return this.form.getRawValue();
3322
- }
3323
- getService() {
3324
- return this.service;
3325
- }
3326
- getUrlParams() {
3327
- return {};
3328
- }
3329
- setForm(form) {
3330
- this.form = form;
3331
- }
3332
- onSaved(value) {
3333
- this.saved.emit(value);
3334
- }
3335
- }
3336
-
3337
- const momentTimezone = momentModule;
3338
-
3339
- /**
3340
- * Generated bundle index. Do not edit.
3341
- */
3342
-
3343
- export { AccountMenuComponent, AccountService, ActivityFilterComponent, ActivityFilterService, AppSettings, AppToastrService, AuthProvider, AuthProviderResolver, AzureLoginCallbackComponent, BaseAccountService, ConfirmDialogComponent, ContentTypesFormat, CurrentTimezoneComponent, DebounceDirective, EntityEditButtonsBarComponent, EntityEditComponent, EntityEditFormComponent, EntityListComponent, EntityService, EventNames, ExcelExportButtonComponent, FieldComponent, FieldDropdownComponent, FieldDropdownModule, FieldDropdownlistComponent, FieldInputComponent, FieldInputModule, FieldMultiSelectComponent, FieldTypes, FilterTargets, FooterBarComponent, FormGroupWithErrors, GeneralErrorsComponent, HttpCodes, HttpMethods, HttpService, IndiginaConfiguration, IndiginaModule, KendoModule, LanguageSelectorComponent, LiveUpdatesControlComponent, LocaleSettingsService, MSALInstanceFactory, MemberTypes, ModalWindowComponent, MulticheckFilterComponent, NumberInputComponent, Operators, PermissionTypes, PermissionsService, PrettifierFactory, ReEntrySubscription, RequirePermissionDirective, SettingsService, SideMenuComponent, SignalRService, TopMenuComponent, TreeViewComponent, UserListAdminComponent, buildActivityEndpoints, buildEntityEndpoints, endpoints, momentTimezone, urlDeserialize, urlSerialize };
3344
- //# sourceMappingURL=indigina-kendo.mjs.map