@c8y/ngx-components 1021.62.9 → 1021.64.0

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 (99) hide show
  1. package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
  2. package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
  3. package/core/plugins/plugins.model.d.ts +1 -0
  4. package/core/plugins/plugins.model.d.ts.map +1 -1
  5. package/core/plugins/plugins.service.d.ts +5 -2
  6. package/core/plugins/plugins.service.d.ts.map +1 -1
  7. package/echart/services/echarts-options.service.d.ts +3 -1
  8. package/echart/services/echarts-options.service.d.ts.map +1 -1
  9. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
  10. package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
  11. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
  12. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  13. package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
  14. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  15. package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
  16. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  17. package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
  18. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  19. package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
  20. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
  21. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
  22. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  23. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
  24. package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
  25. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +6 -3
  26. package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
  27. package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
  28. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  29. package/esm2022/alarms/alarm-details.component.mjs +3 -3
  30. package/esm2022/alarms/alarms-filter.component.mjs +3 -3
  31. package/esm2022/alarms/alarms-icon.component.mjs +3 -3
  32. package/esm2022/alarms/alarms-interval-refresh.component.mjs +3 -3
  33. package/esm2022/alarms/alarms-list.component.mjs +3 -3
  34. package/esm2022/alarms/alarms.component.mjs +3 -3
  35. package/esm2022/auth-configuration/sso-configuration/sso-configuration.component.mjs +3 -3
  36. package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
  37. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  38. package/esm2022/core/plugins/plugins.model.mjs +1 -1
  39. package/esm2022/core/plugins/plugins.service.mjs +25 -5
  40. package/esm2022/echart/services/echarts-options.service.mjs +28 -12
  41. package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
  42. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +26 -11
  43. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
  44. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
  45. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
  46. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
  47. package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
  48. package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
  49. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
  50. package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
  51. package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +13 -6
  52. package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
  53. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
  54. package/esm2022/register-device/device-registration-view.component.mjs +39 -9
  55. package/esm2022/register-device/general/general-device-registration-button.component.mjs +13 -14
  56. package/esm2022/register-device/general/general-device-registration.component.mjs +19 -5
  57. package/esm2022/register-device/general/general-device-registration.service.mjs +30 -0
  58. package/esm2022/register-device/index.mjs +2 -1
  59. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +3 -3
  60. package/fesm2022/c8y-ngx-components-alarms.mjs +12 -12
  61. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
  63. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components-echart.mjs +26 -11
  65. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  66. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +205 -138
  67. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  68. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -2
  69. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  70. package/fesm2022/c8y-ngx-components-ecosystem.mjs +257 -176
  71. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  72. package/fesm2022/c8y-ngx-components-register-device.mjs +86 -19
  73. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  74. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -2
  75. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components.mjs +33 -7
  77. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  78. package/locales/de.po +3 -0
  79. package/locales/es.po +3 -0
  80. package/locales/fr.po +3 -0
  81. package/locales/ja_JP.po +3 -0
  82. package/locales/ko.po +3 -0
  83. package/locales/locales.pot +36 -6
  84. package/locales/nl.po +3 -0
  85. package/locales/pl.po +3 -0
  86. package/locales/pt_BR.po +3 -0
  87. package/locales/zh_CN.po +3 -0
  88. package/locales/zh_TW.po +3 -0
  89. package/package.json +1 -1
  90. package/register-device/device-registration-view.component.d.ts +6 -1
  91. package/register-device/device-registration-view.component.d.ts.map +1 -1
  92. package/register-device/general/general-device-registration-button.component.d.ts +3 -3
  93. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  94. package/register-device/general/general-device-registration.component.d.ts +5 -0
  95. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  96. package/register-device/general/general-device-registration.service.d.ts +9 -0
  97. package/register-device/general/general-device-registration.service.d.ts.map +1 -0
  98. package/register-device/index.d.ts +1 -0
  99. package/register-device/index.d.ts.map +1 -1
@@ -0,0 +1,200 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { AlertService, GainsightService, gettext, HumanizeAppNamePipe, PluginsService } from '@c8y/ngx-components';
3
+ import { ApplicationType } from '@c8y/client';
4
+ import { AppsToUpdateRemotesSelectComponent } from './apps-to-update-remotes-select.component';
5
+ import { firstValueFrom } from 'rxjs';
6
+ import { TranslateService } from '@ngx-translate/core';
7
+ import { pick } from 'lodash-es';
8
+ import { BsModalService } from 'ngx-bootstrap/modal';
9
+ import { EcosystemService, PRODUCT_EXPERIENCE_ECOSYSTEM } from '@c8y/ngx-components/ecosystem/shared';
10
+ import * as i0 from "@angular/core";
11
+ export class PluginListService {
12
+ constructor() {
13
+ this.CURRENT_LOCATION = location.href;
14
+ this.updatingPluginId = { install: '', uninstall: '' };
15
+ this.appsDisabled = new Set();
16
+ this.gainsightService = inject(GainsightService);
17
+ this.pluginsService = inject(PluginsService);
18
+ this.alertService = inject(AlertService);
19
+ this.ecosystemService = inject(EcosystemService);
20
+ this.humanizeAppNamePipe = inject(HumanizeAppNamePipe);
21
+ this.translateService = inject(TranslateService);
22
+ this.bsModalService = inject(BsModalService);
23
+ }
24
+ async updateAppRemotes(plugin, updateType, pluginPackage) {
25
+ this.updatingPluginId[updateType] = plugin?.id;
26
+ let initialState;
27
+ try {
28
+ const apps = await this.getAppsForUpdate(plugin, updateType);
29
+ initialState = {
30
+ apps,
31
+ updateType,
32
+ pluginName: plugin.name,
33
+ appsDisabled: this.appsDisabled
34
+ };
35
+ }
36
+ catch (e) {
37
+ this.alertService.addServerFailure(e);
38
+ this.updatingPluginId[updateType] = '';
39
+ return;
40
+ }
41
+ let selectedApps;
42
+ try {
43
+ selectedApps = await this.selectApps(initialState);
44
+ if (!selectedApps) {
45
+ this.updatingPluginId[updateType] = '';
46
+ return;
47
+ }
48
+ }
49
+ catch {
50
+ // unreached
51
+ }
52
+ if (updateType === 'install') {
53
+ const isArchived = await this.ecosystemService.verifyArchived([plugin]);
54
+ if (!isArchived) {
55
+ this.updatingPluginId[updateType] = '';
56
+ return;
57
+ }
58
+ const licensesVerifiedByUser = await this.ecosystemService.verifyLicenses([plugin]);
59
+ if (!licensesVerifiedByUser) {
60
+ this.updatingPluginId[updateType] = '';
61
+ return;
62
+ }
63
+ }
64
+ for (const app of selectedApps) {
65
+ try {
66
+ if (updateType === 'install') {
67
+ const versionIsCompatible = await this.ecosystemService.verifyPluginVersionsCompatibility([plugin], app);
68
+ if (!versionIsCompatible) {
69
+ continue;
70
+ }
71
+ }
72
+ await this.handleRemotesUpdate(app, plugin, updateType, pluginPackage);
73
+ const humanizedAppName = await firstValueFrom(this.humanizeAppNamePipe.transform(app));
74
+ const successText = updateType === 'install'
75
+ ? this.translateService.instant(gettext('Plugin installed to application "{{ appName }}".'), {
76
+ appName: humanizedAppName
77
+ })
78
+ : this.translateService.instant(gettext('Plugin uninstalled from application "{{ appName }}".'), { appName: humanizedAppName });
79
+ this.alertService.success(successText);
80
+ this.onUpdateEventHandleGS(plugin, app, updateType);
81
+ }
82
+ catch (error) {
83
+ this.onUpdateEventHandleGS(plugin, app, updateType, error);
84
+ }
85
+ }
86
+ this.updatingPluginId[updateType] = '';
87
+ }
88
+ async getAppsForUpdate(plugin, updateType) {
89
+ let apps = (await this.ecosystemService.getWebApplications()).filter(app => this.ecosystemService.isOwner(app) && app.type !== ApplicationType.EXTERNAL);
90
+ if (updateType === 'install') {
91
+ this.appsDisabled.clear();
92
+ for (const app of apps) {
93
+ if (this.isPluginInstalledInApp(plugin, app)) {
94
+ this.appsDisabled.add(app.id);
95
+ }
96
+ }
97
+ }
98
+ if (updateType === 'uninstall') {
99
+ const installedApps = [];
100
+ for (const app of apps) {
101
+ if (this.isPluginInstalledInApp(plugin, app)) {
102
+ installedApps.push(app);
103
+ }
104
+ }
105
+ apps = installedApps;
106
+ }
107
+ return apps;
108
+ }
109
+ onUpdateEventHandleGS(plugin, app, updateType, error) {
110
+ const pluginCustomEventInfo = pick(plugin, [
111
+ 'name',
112
+ 'contextPath',
113
+ 'module',
114
+ 'version',
115
+ 'type',
116
+ 'id'
117
+ ]);
118
+ const gsEventResult = updateType === 'install'
119
+ ? PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_INSTALLED
120
+ : PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_REMOVED;
121
+ const eventData = {
122
+ component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.PLUGIN_LIST,
123
+ result: error || gsEventResult,
124
+ url: this.CURRENT_LOCATION,
125
+ ...pluginCustomEventInfo,
126
+ targetApplicationName: app.name,
127
+ targetApplicationContextPath: app.contextPath,
128
+ ...(error && { error })
129
+ };
130
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.PACKAGE_PLUGINS, eventData);
131
+ }
132
+ isPluginInstalledInApp(plugin, app) {
133
+ const appRemotes = this.pluginsService.getMFRemotes(app) || {};
134
+ for (const [remoteName, modules] of Object.entries(appRemotes)) {
135
+ const pluginFromThisPackageIsInstalled = this.getPluginContextPathWithoutVersion(remoteName) === plugin.contextPath;
136
+ const specificPluginModuleIsInstalled = modules.some(module => module === plugin.module);
137
+ if (pluginFromThisPackageIsInstalled && specificPluginModuleIsInstalled) {
138
+ return true;
139
+ }
140
+ }
141
+ return false;
142
+ }
143
+ getPluginContextPathWithoutVersion(remote) {
144
+ return remote.split('@')[0];
145
+ }
146
+ async handleRemotesUpdate(application, plugin, updateType, pluginPackage) {
147
+ try {
148
+ // When remotes object is not set in the configuration object of an application.
149
+ // Fallback to setInitialRemotes is triggered.
150
+ const { remotes, excludedRemotes } = await (updateType === 'install'
151
+ ? this.pluginsService.addRemotes(application, plugin)
152
+ : this.pluginsService.removeRemotes(application, this.getAllPluginsToRemove(plugin, pluginPackage)));
153
+ if (!application.config) {
154
+ application.config = {};
155
+ }
156
+ application.config.remotes = remotes;
157
+ application.config.excludedRemotes = excludedRemotes;
158
+ const actualRemotes = this.pluginsService.getMFRemotes(application);
159
+ return actualRemotes;
160
+ }
161
+ catch (er) {
162
+ if (er) {
163
+ this.alertService.addServerFailure(er);
164
+ }
165
+ throw er;
166
+ }
167
+ }
168
+ getAllPluginsToRemove(plugin, pluginPackage) {
169
+ return pluginPackage.applicationVersions.map(av => ({
170
+ id: `${plugin.contextPath}@${av.version}/${plugin.module}`,
171
+ idLatest: `${plugin.contextPath}/${plugin.module}`,
172
+ module: plugin.module,
173
+ path: plugin.path
174
+ }));
175
+ }
176
+ async selectApps(initialState) {
177
+ try {
178
+ return await this.bsModalService.show(AppsToUpdateRemotesSelectComponent, {
179
+ class: 'modal-sm',
180
+ ariaDescribedby: 'modal-body',
181
+ ariaLabelledBy: 'modal-title',
182
+ initialState,
183
+ ignoreBackdropClick: true,
184
+ keyboard: false
185
+ }).content.result;
186
+ }
187
+ catch (er) {
188
+ return;
189
+ }
190
+ }
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
192
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListService, providedIn: 'root' }); }
193
+ }
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListService, decorators: [{
195
+ type: Injectable,
196
+ args: [{
197
+ providedIn: 'root'
198
+ }]
199
+ }] });
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxpc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL3BsdWdpbi1saXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixjQUFjLEVBQ2YsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzdCLE1BQU0sc0NBQXNDLENBQUM7O0FBSzlDLE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJRSxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2pDLHFCQUFnQixHQUErQixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3RFLGlCQUFZLEdBQTRCLElBQUksR0FBRyxFQUFzQixDQUFDO1FBRXRFLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLGlCQUFZLEdBQUcsTUFB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LEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUMxRCxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtTQUNsQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUN0QixZQUdDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFO2dCQUMzRCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsZUFBZSxFQUFFLFlBQVk7Z0JBQzdCLGNBQWMsRUFBRSxhQUFhO2dCQUM3QixZQUFZO2dCQUNaLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCLFFBQVEsRUFBRSxLQUFLO2FBQ2hCLENBQUMsQ0FBQyxPQUNKLENBQUMsTUFBTSxDQUFDO1FBQ1gsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7K0dBalBVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIFBsdWdpbnNTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVXBkYXRlVHlwZSB9IGZyb20gJy4vYXBwcy10by11cGRhdGUtcmVtb3Rlcy1zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UeXBlLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hcHBzLXRvLXVwZGF0ZS1yZW1vdGVzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHBpY2sgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7XG4gIEVjb3N5c3RlbVNlcnZpY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU1cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGx1Z2luTGlzdFNlcnZpY2Uge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcbiAgdXBkYXRpbmdQbHVnaW5JZDogUmVjb3JkPFVwZGF0ZVR5cGUsIHN0cmluZz4gPSB7IGluc3RhbGw6ICcnLCB1bmluc3RhbGw6ICcnIH07XG4gIHByaXZhdGUgYXBwc0Rpc2FibGVkOiBTZXQ8SUFwcGxpY2F0aW9uWydpZCddPiA9IG5ldyBTZXQ8SUFwcGxpY2F0aW9uWydpZCddPigpO1xuXG4gIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZSA9IGluamVjdChHYWluc2lnaHRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZSA9IGluamVjdChQbHVnaW5zU2VydmljZSk7XG4gIHByaXZhdGUgYWxlcnRTZXJ2aWNlID0gaW5qZWN0KEFsZXJ0U2VydmljZSk7XG4gIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZSA9IGluamVjdChFY29zeXN0ZW1TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBodW1hbml6ZUFwcE5hbWVQaXBlID0gaW5qZWN0KEh1bWFuaXplQXBwTmFtZVBpcGUpO1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgYnNNb2RhbFNlcnZpY2UgPSBpbmplY3QoQnNNb2RhbFNlcnZpY2UpO1xuXG4gIGFzeW5jIHVwZGF0ZUFwcFJlbW90ZXMoXG4gICAgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbixcbiAgICB1cGRhdGVUeXBlOiBVcGRhdGVUeXBlLFxuICAgIHBsdWdpblBhY2thZ2U6IElBcHBsaWNhdGlvblxuICApIHtcbiAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSBwbHVnaW4/LmlkO1xuICAgIGxldCBpbml0aWFsU3RhdGU6IFBpY2s8XG4gICAgICBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LFxuICAgICAgJ2FwcHMnIHwgJ3VwZGF0ZVR5cGUnIHwgJ3BsdWdpbk5hbWUnIHwgJ2FwcHNEaXNhYmxlZCdcbiAgICA+O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5nZXRBcHBzRm9yVXBkYXRlKHBsdWdpbiwgdXBkYXRlVHlwZSk7XG5cbiAgICAgIGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgICAgYXBwcyxcbiAgICAgICAgdXBkYXRlVHlwZSxcbiAgICAgICAgcGx1Z2luTmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICAgIGFwcHNEaXNhYmxlZDogdGhpcy5hcHBzRGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICAgIHRoaXMudXBkYXRpbmdQbHVnaW5JZFt1cGRhdGVUeXBlXSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBzZWxlY3RlZEFwcHM6IElBcHBsaWNhdGlvbltdO1xuICAgIHRyeSB7XG4gICAgICBzZWxlY3RlZEFwcHMgPSBhd2FpdCB0aGlzLnNlbGVjdEFwcHMoaW5pdGlhbFN0YXRlKTtcbiAgICAgIGlmICghc2VsZWN0ZWRBcHBzKSB7XG4gICAgICAgIHRoaXMudXBkYXRpbmdQbHVnaW5JZFt1cGRhdGVUeXBlXSA9ICcnO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyB1bnJlYWNoZWRcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlVHlwZSA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICBjb25zdCBpc0FyY2hpdmVkID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeUFyY2hpdmVkKFtwbHVnaW5dKTtcbiAgICAgIGlmICghaXNBcmNoaXZlZCkge1xuICAgICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeUxpY2Vuc2VzKFtwbHVnaW5dKTtcbiAgICAgIGlmICghbGljZW5zZXNWZXJpZmllZEJ5VXNlcikge1xuICAgICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYXBwIG9mIHNlbGVjdGVkQXBwcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdpbnN0YWxsJykge1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25Jc0NvbXBhdGlibGUgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmVyaWZ5UGx1Z2luVmVyc2lvbnNDb21wYXRpYmlsaXR5KFxuICAgICAgICAgICAgW3BsdWdpbl0sXG4gICAgICAgICAgICBhcHBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCF2ZXJzaW9uSXNDb21wYXRpYmxlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlbW90ZXNVcGRhdGUoYXBwLCBwbHVnaW4sIHVwZGF0ZVR5cGUsIHBsdWdpblBhY2thZ2UpO1xuICAgICAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odW1hbml6ZUFwcE5hbWVQaXBlLnRyYW5zZm9ybShhcHApKTtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc1RleHQgPVxuICAgICAgICAgIHVwZGF0ZVR5cGUgPT09ICdpbnN0YWxsJ1xuICAgICAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICBnZXR0ZXh0KCdQbHVnaW4gaW5zdGFsbGVkIHRvIGFwcGxpY2F0aW9uIFwie3sgYXBwTmFtZSB9fVwiLicpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFwcE5hbWU6IGh1bWFuaXplZEFwcE5hbWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgZ2V0dGV4dCgnUGx1Z2luIHVuaW5zdGFsbGVkIGZyb20gYXBwbGljYXRpb24gXCJ7eyBhcHBOYW1lIH19XCIuJyksXG4gICAgICAgICAgICAgICAgeyBhcHBOYW1lOiBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhzdWNjZXNzVGV4dCk7XG4gICAgICAgIHRoaXMub25VcGRhdGVFdmVudEhhbmRsZUdTKHBsdWdpbiwgYXBwLCB1cGRhdGVUeXBlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMub25VcGRhdGVFdmVudEhhbmRsZUdTKHBsdWdpbiwgYXBwLCB1cGRhdGVUeXBlLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRpbmdQbHVnaW5JZFt1cGRhdGVUeXBlXSA9ICcnO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwc0ZvclVwZGF0ZShwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luLCB1cGRhdGVUeXBlOiBVcGRhdGVUeXBlKSB7XG4gICAgbGV0IGFwcHMgPSAoYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFdlYkFwcGxpY2F0aW9ucygpKS5maWx0ZXIoXG4gICAgICBhcHAgPT4gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIoYXBwKSAmJiBhcHAudHlwZSAhPT0gQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMXG4gICAgKTtcblxuICAgIGlmICh1cGRhdGVUeXBlID09PSAnaW5zdGFsbCcpIHtcbiAgICAgIHRoaXMuYXBwc0Rpc2FibGVkLmNsZWFyKCk7XG4gICAgICBmb3IgKGNvbnN0IGFwcCBvZiBhcHBzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGx1Z2luSW5zdGFsbGVkSW5BcHAocGx1Z2luLCBhcHApKSB7XG4gICAgICAgICAgdGhpcy5hcHBzRGlzYWJsZWQuYWRkKGFwcC5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXBkYXRlVHlwZSA9PT0gJ3VuaW5zdGFsbCcpIHtcbiAgICAgIGNvbnN0IGluc3RhbGxlZEFwcHM6IElBcHBsaWNhdGlvbltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFwcCBvZiBhcHBzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUGx1Z2luSW5zdGFsbGVkSW5BcHAocGx1Z2luLCBhcHApKSB7XG4gICAgICAgICAgaW5zdGFsbGVkQXBwcy5wdXNoKGFwcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFwcHMgPSBpbnN0YWxsZWRBcHBzO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcztcbiAgfVxuXG4gIHByaXZhdGUgb25VcGRhdGVFdmVudEhhbmRsZUdTKFxuICAgIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgdXBkYXRlVHlwZTogVXBkYXRlVHlwZSxcbiAgICBlcnJvcj86IHVua25vd25cbiAgKSB7XG4gICAgY29uc3QgcGx1Z2luQ3VzdG9tRXZlbnRJbmZvID0gcGljayhwbHVnaW4sIFtcbiAgICAgICduYW1lJyxcbiAgICAgICdjb250ZXh0UGF0aCcsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICd2ZXJzaW9uJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdpZCdcbiAgICBdIHNhdGlzZmllcyAoa2V5b2YgQXBwbGljYXRpb25QbHVnaW4pW10pO1xuXG4gICAgY29uc3QgZ3NFdmVudFJlc3VsdCA9XG4gICAgICB1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRURcbiAgICAgICAgOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9SRU1PVkVEO1xuXG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBMVUdJTl9MSVNULFxuICAgICAgcmVzdWx0OiBlcnJvciB8fCBnc0V2ZW50UmVzdWx0LFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAuLi5wbHVnaW5DdXN0b21FdmVudEluZm8sXG4gICAgICB0YXJnZXRBcHBsaWNhdGlvbk5hbWU6IGFwcC5uYW1lLFxuICAgICAgdGFyZ2V0QXBwbGljYXRpb25Db250ZXh0UGF0aDogYXBwLmNvbnRleHRQYXRoLFxuICAgICAgLi4uKGVycm9yICYmIHsgZXJyb3IgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1BMVUdJTlMsXG4gICAgICBldmVudERhdGFcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BsdWdpbkluc3RhbGxlZEluQXBwKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXBwUmVtb3RlcyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZSZW1vdGVzKGFwcCkgfHwge307XG5cbiAgICBmb3IgKGNvbnN0IFtyZW1vdGVOYW1lLCBtb2R1bGVzXSBvZiBPYmplY3QuZW50cmllcyhhcHBSZW1vdGVzKSkge1xuICAgICAgY29uc3QgcGx1Z2luRnJvbVRoaXNQYWNrYWdlSXNJbnN0YWxsZWQgPVxuICAgICAgICB0aGlzLmdldFBsdWdpbkNvbnRleHRQYXRoV2l0aG91dFZlcnNpb24ocmVtb3RlTmFtZSkgPT09IHBsdWdpbi5jb250ZXh0UGF0aDtcbiAgICAgIGNvbnN0IHNwZWNpZmljUGx1Z2luTW9kdWxlSXNJbnN0YWxsZWQgPSBtb2R1bGVzLnNvbWUobW9kdWxlID0+IG1vZHVsZSA9PT0gcGx1Z2luLm1vZHVsZSk7XG4gICAgICBpZiAocGx1Z2luRnJvbVRoaXNQYWNrYWdlSXNJbnN0YWxsZWQgJiYgc3BlY2lmaWNQbHVnaW5Nb2R1bGVJc0luc3RhbGxlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQbHVnaW5Db250ZXh0UGF0aFdpdGhvdXRWZXJzaW9uKHJlbW90ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlbW90ZS5zcGxpdCgnQCcpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZW1vdGVzVXBkYXRlKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbixcbiAgICB1cGRhdGVUeXBlOiBVcGRhdGVUeXBlLFxuICAgIHBsdWdpblBhY2thZ2U6IElBcHBsaWNhdGlvblxuICApIHtcbiAgICB0cnkge1xuICAgICAgLy8gV2hlbiByZW1vdGVzIG9iamVjdCBpcyBub3Qgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBvZiBhbiBhcHBsaWNhdGlvbi5cbiAgICAgIC8vIEZhbGxiYWNrIHRvIHNldEluaXRpYWxSZW1vdGVzIGlzIHRyaWdnZXJlZC5cbiAgICAgIGNvbnN0IHsgcmVtb3RlcywgZXhjbHVkZWRSZW1vdGVzIH0gPSBhd2FpdCAodXBkYXRlVHlwZSA9PT0gJ2luc3RhbGwnXG4gICAgICAgID8gdGhpcy5wbHVnaW5zU2VydmljZS5hZGRSZW1vdGVzKGFwcGxpY2F0aW9uLCBwbHVnaW4pXG4gICAgICAgIDogdGhpcy5wbHVnaW5zU2VydmljZS5yZW1vdmVSZW1vdGVzKFxuICAgICAgICAgICAgYXBwbGljYXRpb24sXG4gICAgICAgICAgICB0aGlzLmdldEFsbFBsdWdpbnNUb1JlbW92ZShwbHVnaW4sIHBsdWdpblBhY2thZ2UpXG4gICAgICAgICAgKSk7XG4gICAgICBpZiAoIWFwcGxpY2F0aW9uLmNvbmZpZykge1xuICAgICAgICBhcHBsaWNhdGlvbi5jb25maWcgPSB7fTtcbiAgICAgIH1cbiAgICAgIGFwcGxpY2F0aW9uLmNvbmZpZy5yZW1vdGVzID0gcmVtb3RlcztcbiAgICAgIGFwcGxpY2F0aW9uLmNvbmZpZy5leGNsdWRlZFJlbW90ZXMgPSBleGNsdWRlZFJlbW90ZXM7XG4gICAgICBjb25zdCBhY3R1YWxSZW1vdGVzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRlJlbW90ZXMoYXBwbGljYXRpb24pO1xuICAgICAgcmV0dXJuIGFjdHVhbFJlbW90ZXM7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVyKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsUGx1Z2luc1RvUmVtb3ZlKFxuICAgIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sXG4gICAgcGx1Z2luUGFja2FnZTogSUFwcGxpY2F0aW9uXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIHJldHVybiBwbHVnaW5QYWNrYWdlLmFwcGxpY2F0aW9uVmVyc2lvbnMubWFwKGF2ID0+ICh7XG4gICAgICBpZDogYCR7cGx1Z2luLmNvbnRleHRQYXRofUAke2F2LnZlcnNpb259LyR7cGx1Z2luLm1vZHVsZX1gLFxuICAgICAgaWRMYXRlc3Q6IGAke3BsdWdpbi5jb250ZXh0UGF0aH0vJHtwbHVnaW4ubW9kdWxlfWAsXG4gICAgICBtb2R1bGU6IHBsdWdpbi5tb2R1bGUsXG4gICAgICBwYXRoOiBwbHVnaW4ucGF0aFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0QXBwcyhcbiAgICBpbml0aWFsU3RhdGU6IFBpY2s8XG4gICAgICBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LFxuICAgICAgJ2FwcHMnIHwgJ3VwZGF0ZVR5cGUnIHwgJ3BsdWdpbk5hbWUnIHwgJ2FwcHNEaXNhYmxlZCdcbiAgICA+XG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IChcbiAgICAgICAgdGhpcy5ic01vZGFsU2VydmljZS5zaG93KEFwcHNUb1VwZGF0ZVJlbW90ZXNTZWxlY3RDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgICAgfSkuY29udGVudCBhcyBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50XG4gICAgICApLnJlc3VsdDtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -131,7 +131,7 @@ export class UpdateApplicationModalComponent {
131
131
  });
132
132
  }
133
133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateApplicationModalComponent, deps: [{ token: i1.InventoryService }, { token: i2.EcosystemService }, { token: i3.PluginsService }], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UpdateApplicationModalComponent, selector: "c8y-update-application-modal", viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true }], ngImport: i0, template: "<c8y-modal\n [title]=\"'Update application' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n #modal\n>\n <ng-container c8y-modal-title>\n <span class=\"dlt-c8y-icon-installing-updates\"></span>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n (orphanedPlugins$ | async).length > 0 || (newPlugins$ | async).length > 0;\n else updateProgress\n \"\n >\n <p\n class=\"text-center text-break-word p-24 text-14\"\n translate\n >\n Updating this blueprint will change the default plugins. Review the plugin changes before\n proceeding.\n </p>\n <c8y-list-group *ngIf=\"(orphanedPlugins$ | async).length > 0\">\n <c8y-li [collapsed]=\"true\">\n <c8y-li-icon>\n <span class=\"badge badge-danger\">{{ (orphanedPlugins$ | async).length }}</span>\n </c8y-li-icon>\n <c8y-li-body>\n <div translate>Orphaned plugins</div>\n </c8y-li-body>\n <c8y-li-footer translate>\n Some plugins are not contained in the new version of this blueprint and will therefore get\n removed.\n </c8y-li-footer>\n <c8y-li-collapse>\n <c8y-plugin-list\n class=\"m-t-16\"\n [emptyListText]=\"'No plugins available' | translate\"\n [plugins$]=\"orphanedPlugins$\"\n [selectable]=\"false\"\n [hideSource]=\"true\"\n ></c8y-plugin-list>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n\n <c8y-list-group *ngIf=\"(newPlugins$ | async).length > 0\">\n <c8y-li [collapsed]=\"false\">\n <c8y-li-icon>\n <span class=\"badge badge-success\">{{ (newPlugins$ | async).length }}</span>\n </c8y-li-icon>\n <c8y-li-body>\n <div translate>New plugins added</div>\n </c8y-li-body>\n <c8y-li-footer translate>\n This blueprint will add new plugins. Please choose which you want to install.\n </c8y-li-footer>\n <c8y-li-collapse>\n <c8y-plugin-list\n class=\"m-t-16\"\n [emptyListText]=\"'No plugins available' | translate\"\n [plugins$]=\"newPlugins$\"\n [selectable]=\"true\"\n [hideSource]=\"false\"\n ></c8y-plugin-list>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n </ng-container>\n\n <ng-container c8y-modal-footer-custom>\n <div\n class=\"modal-footer\"\n *ngIf=\"\n (orphanedPlugins$ | async).length > 0 || (newPlugins$ | async).length > 0;\n else updateProgressButtons\n \"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"close()\"\n [disabled]=\"isUpdateOngoing\"\n >\n {{ 'Close' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Continue' | translate }}\"\n (click)=\"updateApplication()\"\n *ngIf=\"(orphanedPlugins$ | async).length > 0 || (newPlugins$ | async).length > 0\"\n [disabled]=\"isUpdateOngoing\"\n >\n {{ 'Continue' | translate }}\n </button>\n </div>\n </ng-container>\n\n <ng-template #updateProgressButtons>\n <ng-container c8y-modal-footer-custom>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"done()\"\n [disabled]=\"isUpdateOngoing\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #updateProgress>\n <c8y-loading\n class=\"text-center d-block p-t-56 p-b-56 m-t-4 m-b-4\"\n style=\"min-height: 180px\"\n layout=\"application\"\n *ngIf=\"isUpdateOngoing\"\n [message]=\"'Updating\u2026' | translate\"\n ></c8y-loading>\n\n <c8y-operation-result\n type=\"success\"\n *ngIf=\"!isUpdateOngoing && !updateFailure\"\n text=\"{{ 'Update completed' | translate }}\"\n [size]=\"120\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <c8y-operation-result\n type=\"error\"\n *ngIf=\"!isUpdateOngoing && updateFailure\"\n text=\"{{ 'Failed to update application.' | translate }}\"\n [size]=\"120\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemFooterComponent, selector: "c8y-list-item-footer, c8y-li-footer", inputs: ["footer"] }, { kind: "component", type: i3.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i5.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package"], outputs: ["selectedItems"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UpdateApplicationModalComponent, selector: "c8y-update-application-modal", viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true }], ngImport: i0, template: "<c8y-modal\n [title]=\"'Update application' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n #modal\n>\n <ng-container c8y-modal-title>\n <span class=\"dlt-c8y-icon-installing-updates\"></span>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n (orphanedPlugins$ | async).length > 0 || (newPlugins$ | async).length > 0;\n else updateProgress\n \"\n >\n <p\n class=\"text-center text-break-word p-24 text-14\"\n translate\n >\n Updating this blueprint will change the default plugins. Review the plugin changes before\n proceeding.\n </p>\n <c8y-list-group *ngIf=\"(orphanedPlugins$ | async).length > 0\">\n <c8y-li [collapsed]=\"true\">\n <c8y-li-icon>\n <span class=\"badge badge-danger\">{{ (orphanedPlugins$ | async).length }}</span>\n </c8y-li-icon>\n <c8y-li-body>\n <div translate>Orphaned plugins</div>\n </c8y-li-body>\n <c8y-li-footer translate>\n Some plugins are not contained in the new version of this blueprint and will therefore get\n removed.\n </c8y-li-footer>\n <c8y-li-collapse>\n <c8y-plugin-list\n class=\"m-t-16\"\n [emptyListText]=\"'No plugins available' | translate\"\n [plugins$]=\"orphanedPlugins$\"\n [selectable]=\"false\"\n [hideSource]=\"true\"\n ></c8y-plugin-list>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n\n <c8y-list-group *ngIf=\"(newPlugins$ | async).length > 0\">\n <c8y-li [collapsed]=\"false\">\n <c8y-li-icon>\n <span class=\"badge badge-success\">{{ (newPlugins$ | async).length }}</span>\n </c8y-li-icon>\n <c8y-li-body>\n <div translate>New plugins added</div>\n </c8y-li-body>\n <c8y-li-footer translate>\n This blueprint will add new plugins. Please choose which you want to install.\n </c8y-li-footer>\n <c8y-li-collapse>\n <c8y-plugin-list\n class=\"m-t-16\"\n [emptyListText]=\"'No plugins available' | translate\"\n [plugins$]=\"newPlugins$\"\n [selectable]=\"true\"\n [hideSource]=\"false\"\n ></c8y-plugin-list>\n </c8y-li-collapse>\n </c8y-li>\n </c8y-list-group>\n </ng-container>\n\n <ng-container c8y-modal-footer-custom>\n <div\n class=\"modal-footer\"\n *ngIf=\"\n (orphanedPlugins$ | async).length > 0 || (newPlugins$ | async).length > 0;\n else updateProgressButtons\n \"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"close()\"\n [disabled]=\"isUpdateOngoing\"\n >\n {{ 'Close' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Continue' | translate }}\"\n (click)=\"updateApplication()\"\n *ngIf=\"(orphanedPlugins$ | async).length > 0 || (newPlugins$ | async).length > 0\"\n [disabled]=\"isUpdateOngoing\"\n >\n {{ 'Continue' | translate }}\n </button>\n </div>\n </ng-container>\n\n <ng-template #updateProgressButtons>\n <ng-container c8y-modal-footer-custom>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n (click)=\"done()\"\n [disabled]=\"isUpdateOngoing\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #updateProgress>\n <c8y-loading\n class=\"text-center d-block p-t-56 p-b-56 m-t-4 m-b-4\"\n style=\"min-height: 180px\"\n layout=\"application\"\n *ngIf=\"isUpdateOngoing\"\n [message]=\"'Updating\u2026' | translate\"\n ></c8y-loading>\n\n <c8y-operation-result\n type=\"success\"\n *ngIf=\"!isUpdateOngoing && !updateFailure\"\n text=\"{{ 'Update completed' | translate }}\"\n [size]=\"120\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <c8y-operation-result\n type=\"error\"\n *ngIf=\"!isUpdateOngoing && updateFailure\"\n text=\"{{ 'Failed to update application.' | translate }}\"\n [size]=\"120\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemFooterComponent, selector: "c8y-list-item-footer, c8y-li-footer", inputs: ["footer"] }, { kind: "component", type: i3.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i5.PluginListComponent, selector: "c8y-plugin-list", inputs: ["plugins$", "emptyListText", "selectable", "hideSource", "installable", "package", "selectedPlugin"], outputs: ["selectedItems", "showOverview"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
135
135
  }
136
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UpdateApplicationModalComponent, decorators: [{
137
137
  type: Component,