@c8y/ngx-components 1017.0.30 → 1017.0.32

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 (38) hide show
  1. package/ecosystem/application-plugins/application-plugins.component.d.ts +54 -3
  2. package/ecosystem/application-plugins/plugin-list.component.d.ts +5 -3
  3. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts +4 -2
  4. package/ecosystem/application-properties/application-properties.component.d.ts +5 -3
  5. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +5 -4
  6. package/ecosystem/packages/package-availability.service.d.ts +4 -2
  7. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts +4 -2
  8. package/ecosystem/shared/application-card.component.d.ts +5 -3
  9. package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts +4 -2
  10. package/ecosystem/shared/ecosystem.model.d.ts +49 -0
  11. package/esm2020/core/help/help.component.mjs +3 -3
  12. package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +32 -9
  13. package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +18 -6
  14. package/esm2020/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +20 -5
  15. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +13 -6
  16. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +20 -7
  17. package/esm2020/ecosystem/packages/package-availability.service.mjs +18 -5
  18. package/esm2020/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.mjs +43 -6
  19. package/esm2020/ecosystem/shared/application-card.component.mjs +28 -5
  20. package/esm2020/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.mjs +21 -8
  21. package/esm2020/ecosystem/shared/ecosystem.model.mjs +50 -1
  22. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
  23. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  24. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +90 -7
  25. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  26. package/fesm2015/c8y-ngx-components-ecosystem.mjs +143 -24
  27. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  28. package/fesm2015/c8y-ngx-components.mjs +2 -2
  29. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  30. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
  31. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  32. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +90 -7
  33. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  34. package/fesm2020/c8y-ngx-components-ecosystem.mjs +143 -24
  35. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  36. package/fesm2020/c8y-ngx-components.mjs +2 -2
  37. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  38. package/package.json +2 -2
@@ -39,6 +39,55 @@ var ERROR_TYPE;
39
39
  ERROR_TYPE["INVALID_APPLICATION"] = "INVALID_APPLICATION";
40
40
  ERROR_TYPE["MICROSERVICE_NAME_TOO_LONG"] = "MICROSERVICE_NAME_TOO_LONG";
41
41
  })(ERROR_TYPE || (ERROR_TYPE = {}));
42
+ const PRODUCT_EXPERIENCE = {
43
+ APPLICATIONS: {
44
+ EVENTS: {
45
+ AVAILABILITY: 'availability',
46
+ APPLICATION_CARD: 'applicationCard',
47
+ APPLICATION_PROPERTIES: 'applicationProperties',
48
+ DEPLOY_APPLICATION: 'deployApplication',
49
+ DUPLICATE_APPLICATION: 'duplicateApplication',
50
+ INSTALLED_PLUGINS: 'installedPlugins',
51
+ PACKAGE_PLUGINS: 'packagePlugins',
52
+ PACKAGE_VERSIONS: 'packageVersions'
53
+ },
54
+ COMPONENTS: {
55
+ APPLICATION_CARD: 'application-card',
56
+ APPLICATION_PLUGINS: 'application-plugins',
57
+ APPLICATION_PROPERTIES: 'application-properties',
58
+ DEPLOY_APPLICATION: 'deploy-application',
59
+ DUPLICATE_APPLICATION_PROPERTIES: 'duplicate-application-properties',
60
+ PLUGIN_LIST: 'plugin-list',
61
+ PACKAGE_VERSIONS: 'package-versions-list',
62
+ UPDATE_PLUGIN_OF_APP: 'update-plugin-of-app'
63
+ },
64
+ ACTIONS: {
65
+ AVAILABILITY_CHANGE: 'availabilityChange',
66
+ CANCEL: 'cancel',
67
+ CLONE: 'clone',
68
+ CHANGE_PLUGIN_VERSION: 'changePluginVersion',
69
+ DELETE: 'delete',
70
+ DOWNLOAD: 'download',
71
+ DEPLOY_APPLICATION: 'deployApplication',
72
+ EDIT: 'edit',
73
+ INSTALL_PLUGIN: 'installPlugin',
74
+ INSTALL_PLUGINS: 'installPlugins',
75
+ SELECT_VERSION: 'selectVersion',
76
+ SET_AS_LATEST: 'setAsLatest',
77
+ UPDATE_AVAILABLE: 'updateAvailable',
78
+ UPLOAD: 'upload'
79
+ },
80
+ RESULTS: {
81
+ DEPLOYED: 'deployed',
82
+ DUPLICATED: 'duplicated',
83
+ PLUGIN_INSTALLED: 'pluginInstalled',
84
+ PLUGIN_REMOVED: 'pluginRemoved',
85
+ PLUGIN_VERSION_CHANGED: 'pluginVersionChanged',
86
+ SERVER_FAILURE: 'serverFailure',
87
+ SUCCESS: 'success'
88
+ }
89
+ }
90
+ };
42
91
 
43
92
  const ERROR_MESSAGES = {
44
93
  [ERROR_TYPE.TYPE_VALIDATION]: gettext('Wrong file format. Expected a *.zip file with a valid manifest.'),
@@ -784,13 +833,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
784
833
  }] } });
785
834
 
786
835
  class ApplicationCardComponent {
787
- constructor(applicationService, ecosystemService, alertService, router, wizardModalService, alert) {
836
+ constructor(applicationService, ecosystemService, alertService, router, wizardModalService, alert, gainsightService) {
788
837
  this.applicationService = applicationService;
789
838
  this.ecosystemService = ecosystemService;
790
839
  this.alertService = alertService;
791
840
  this.router = router;
792
841
  this.wizardModalService = wizardModalService;
793
842
  this.alert = alert;
843
+ this.gainsightService = gainsightService;
844
+ this.CURRENT_LOCATION = location.href;
794
845
  this.canEdit = true;
795
846
  this.onAppDeleted = new EventEmitter();
796
847
  this.onAppCloned = new EventEmitter();
@@ -829,6 +880,11 @@ class ApplicationCardComponent {
829
880
  this.isMicroservice
830
881
  ? this.router.navigateByUrl(`/microservices/${this.app.id}`)
831
882
  : this.router.navigateByUrl(`/ecosystem/application/${this.app.id}`);
883
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.APPLICATION_CARD, {
884
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_CARD,
885
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.EDIT,
886
+ url: this.CURRENT_LOCATION
887
+ });
832
888
  }
833
889
  openApp() {
834
890
  this.ecosystemService.openApp(this.app);
@@ -838,10 +894,20 @@ class ApplicationCardComponent {
838
894
  try {
839
895
  yield this.ecosystemService.deleteApp(this.app);
840
896
  this.onAppDeleted.emit();
897
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.APPLICATION_CARD, {
898
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_CARD,
899
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DELETE,
900
+ url: this.CURRENT_LOCATION
901
+ });
841
902
  }
842
903
  catch (ex) {
843
904
  if (ex) {
844
905
  this.alertService.addServerFailure(ex);
906
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.APPLICATION_CARD, {
907
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_CARD,
908
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
909
+ url: this.CURRENT_LOCATION
910
+ });
845
911
  }
846
912
  }
847
913
  });
@@ -864,6 +930,11 @@ class ApplicationCardComponent {
864
930
  modalRef.content.onClose.subscribe(() => {
865
931
  this.onAppCloned.next();
866
932
  });
933
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.APPLICATION_CARD, {
934
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_CARD,
935
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.CLONE,
936
+ url: this.CURRENT_LOCATION
937
+ });
867
938
  });
868
939
  }
869
940
  isOwnedByManagement() {
@@ -889,12 +960,12 @@ class ApplicationCardComponent {
889
960
  });
890
961
  }
891
962
  }
892
- ApplicationCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationCardComponent, deps: [{ token: i3.ApplicationService }, { token: EcosystemService }, { token: i2.AlertService }, { token: i4.Router }, { token: i2.WizardModalService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component });
963
+ ApplicationCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationCardComponent, deps: [{ token: i3.ApplicationService }, { token: EcosystemService }, { token: i2.AlertService }, { token: i4.Router }, { token: i2.WizardModalService }, { token: i2.AlertService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
893
964
  ApplicationCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ApplicationCardComponent, selector: "c8y-application-card", inputs: { app: "app", canEdit: "canEdit" }, outputs: { onAppDeleted: "onAppDeleted", onAppCloned: "onAppCloned" }, ngImport: i0, template: "<div class=\"card pointer card--d-col\" *ngIf=\"!isFeature\">\n <div (click)=\"detail()\" class=\"card-block text-center card-column-40\">\n <div class=\"card-appicon\">\n <c8y-app-icon\n *ngIf=\"!isPackage && !isFeature && !isMicroservice && !isExternal\"\n [app]=\"app\"\n [contextPath]=\"app.contextPath\"\n [name]=\"app.name\"\n ></c8y-app-icon>\n <i *ngIf=\"isPackage\" c8yIcon=\"big-parcel\"></i>\n <i *ngIf=\"isMicroservice\" c8yIcon=\"microchip\"></i>\n <i *ngIf=\"isExternal\" c8yIcon=\"globe1\"></i>\n </div>\n <div>\n <p class=\"e2e-appCardName text-medium\" title=\"{{ app | humanizeAppName | async }}\">\n {{ app | humanizeAppName | async }}\n </p>\n <ng-container *ngIf=\"isShowVersion\">\n <p class=\"small text-muted\">\n <em>{{ app.manifest.version }}</em>\n <i\n *ngIf=\"shouldUpgradePackage && isUnpacked\"\n [tooltip]=\"'Update available' | translate\"\n c8yIcon=\"exclamation-triangle\"\n class=\"text-warning m-l-4\"\n ></i>\n </p>\n </ng-container>\n </div>\n </div>\n <div (click)=\"detail()\" class=\"card-block p-0 no-min-height card--d-col card-column-80 flex-grow\">\n <div class=\"card-block no-min-height p-t-0 p-b-0 card-column-80\">\n <div *ngIf=\"app.description || app.manifest?.description\" class=\"text-center-grid\">\n <div class=\"p-b-8 card-hidden-grid\"></div>\n <p class=\"small l-h-tight p-b-8 p-l-0 p-r-0\">\n {{ app.description || app.manifest?.description | translate }}\n </p>\n </div>\n </div>\n <div\n *ngIf=\"!app.label\"\n class=\"card-block no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\"\n >\n <span [ngClass]=\"appState.class\" class=\"label\">\n {{ isUnpacked ? ('Unpacked' | translate) : (appState.label | translate) }}\n </span>\n </div>\n <div\n *ngIf=\"app.label\"\n class=\"card-block no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\"\n >\n <span [ngClass]=\"appState.class\" class=\"label text-warning\">\n {{ isOwnedByManagementTenant ? app.label : ('COMMUNITY' | translate) }}\n </span>\n </div>\n <div class=\"card-footer no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\">\n <div class=\"p-b-16 card-hidden-list\"></div>\n <button\n (click)=\"openApp(); $event.stopPropagation()\"\n *ngIf=\"canOpenInBrowser\"\n [disabled]=\"disableOpenInBrowser\"\n class=\"btn btn-sm btn-default\"\n [title]=\"openButtonTitle | translate\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </button>\n <div class=\"p-b-32 card-hidden-list\"></div>\n </div>\n </div>\n <div class=\"p-r-40 card-hidden-grid\"></div>\n <div *ngIf=\"canEdit || canOpenInBrowser || canDelete\" class=\"card-actions m-t-0\">\n <div class=\"dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n title=\"{{ 'Settings' | translate }}\"\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right\">\n <li *ngIf=\"canEdit\">\n <button (click)=\"detail()\" title=\"{{ 'Edit' | translate }}\">\n <i c8yIcon=\"pencil\" class=\"m-r-4\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <ng-container *c8yIfAllowed=\"['ROLE_APPLICATION_MANAGEMENT_ADMIN']\">\n <li>\n <button\n (click)=\"delete()\"\n type=\"button\"\n [title]=\"canDelete ? ('Delete' | translate) : (CANNOT_DELETE_HINT | translate)\"\n [disabled]=\"!canDelete\"\n >\n <i c8yIcon=\"delete\" class=\"m-r-4\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n <li *ngIf=\"canClone\">\n <button\n *ngIf=\"isPackage\"\n (click)=\"clone()\"\n type=\"button\"\n [title]=\"'Clone`package`' | translate\"\n >\n <i c8yIcon=\"copy\" class=\"m-r-4\"></i>\n {{ 'Clone`package`' | translate }}\n </button>\n <button\n *ngIf=\"!isPackage\"\n (click)=\"clone()\"\n type=\"button\"\n [title]=\"'Clone`application`' | translate\"\n >\n <i c8yIcon=\"copy\" class=\"m-r-4\"></i>\n {{ 'Clone`application`' | translate }}\n </button>\n </li>\n </ng-container>\n </ul>\n </div>\n </div>\n</div>\n\n<button (click)=\"detail()\" class=\"card pointer card--d-col\" *ngIf=\"isFeature\">\n <div class=\"card-block text-center card-column-40\">\n <div class=\"card-appicon\">\n <c8y-app-icon\n *ngIf=\"!isPackage && !isFeature && !isMicroservice && !isExternal\"\n [app]=\"app\"\n [contextPath]=\"app.contextPath\"\n [name]=\"app.name\"\n ></c8y-app-icon>\n <i c8yIcon=\"tab\"></i>\n </div>\n <div>\n <p class=\"e2e-appCardName text-medium\" title=\"{{ app | humanizeAppName | async }}\">\n {{ app | humanizeAppName | async }}\n </p>\n <ng-container *ngIf=\"isShowVersion\">\n <p class=\"small text-muted\">\n <em>{{ app.manifest.version }}</em>\n <i\n *ngIf=\"shouldUpgradePackage && isUnpacked\"\n [tooltip]=\"'Update available' | translate\"\n c8yIcon=\"exclamation-triangle\"\n class=\"text-warning m-l-4\"\n ></i>\n </p>\n </ng-container>\n </div>\n </div>\n <div class=\"card-block p-0 no-min-height card--d-col card-column-80 flex-grow\">\n <div class=\"card-block no-min-height p-t-0 p-b-0 card-column-80\">\n <div *ngIf=\"app.description || app.manifest?.description\" class=\"text-center-grid\">\n <div class=\"p-b-8 card-hidden-grid\"></div>\n <p class=\"small l-h-tight p-b-8 p-l-0 p-r-0\">\n {{ app.description || app.manifest?.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"card-block no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\">\n <span [ngClass]=\"appState.class\" class=\"label\">\n {{ isUnpacked ? ('Unpacked' | translate) : (appState.label | translate) }}\n </span>\n </div>\n <div class=\"p-b-32 card-hidden-list\"></div>\n </div>\n</button>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i2.AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "directive", type: i6.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i6.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i6.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.HumanizeAppNamePipe, name: "humanizeAppName" }] });
894
965
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationCardComponent, decorators: [{
895
966
  type: Component,
896
967
  args: [{ selector: 'c8y-application-card', template: "<div class=\"card pointer card--d-col\" *ngIf=\"!isFeature\">\n <div (click)=\"detail()\" class=\"card-block text-center card-column-40\">\n <div class=\"card-appicon\">\n <c8y-app-icon\n *ngIf=\"!isPackage && !isFeature && !isMicroservice && !isExternal\"\n [app]=\"app\"\n [contextPath]=\"app.contextPath\"\n [name]=\"app.name\"\n ></c8y-app-icon>\n <i *ngIf=\"isPackage\" c8yIcon=\"big-parcel\"></i>\n <i *ngIf=\"isMicroservice\" c8yIcon=\"microchip\"></i>\n <i *ngIf=\"isExternal\" c8yIcon=\"globe1\"></i>\n </div>\n <div>\n <p class=\"e2e-appCardName text-medium\" title=\"{{ app | humanizeAppName | async }}\">\n {{ app | humanizeAppName | async }}\n </p>\n <ng-container *ngIf=\"isShowVersion\">\n <p class=\"small text-muted\">\n <em>{{ app.manifest.version }}</em>\n <i\n *ngIf=\"shouldUpgradePackage && isUnpacked\"\n [tooltip]=\"'Update available' | translate\"\n c8yIcon=\"exclamation-triangle\"\n class=\"text-warning m-l-4\"\n ></i>\n </p>\n </ng-container>\n </div>\n </div>\n <div (click)=\"detail()\" class=\"card-block p-0 no-min-height card--d-col card-column-80 flex-grow\">\n <div class=\"card-block no-min-height p-t-0 p-b-0 card-column-80\">\n <div *ngIf=\"app.description || app.manifest?.description\" class=\"text-center-grid\">\n <div class=\"p-b-8 card-hidden-grid\"></div>\n <p class=\"small l-h-tight p-b-8 p-l-0 p-r-0\">\n {{ app.description || app.manifest?.description | translate }}\n </p>\n </div>\n </div>\n <div\n *ngIf=\"!app.label\"\n class=\"card-block no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\"\n >\n <span [ngClass]=\"appState.class\" class=\"label\">\n {{ isUnpacked ? ('Unpacked' | translate) : (appState.label | translate) }}\n </span>\n </div>\n <div\n *ngIf=\"app.label\"\n class=\"card-block no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\"\n >\n <span [ngClass]=\"appState.class\" class=\"label text-warning\">\n {{ isOwnedByManagementTenant ? app.label : ('COMMUNITY' | translate) }}\n </span>\n </div>\n <div class=\"card-footer no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\">\n <div class=\"p-b-16 card-hidden-list\"></div>\n <button\n (click)=\"openApp(); $event.stopPropagation()\"\n *ngIf=\"canOpenInBrowser\"\n [disabled]=\"disableOpenInBrowser\"\n class=\"btn btn-sm btn-default\"\n [title]=\"openButtonTitle | translate\"\n >\n <i c8yIcon=\"external-link\" class=\"m-r-4\"></i>\n {{ 'Open' | translate }}\n </button>\n <div class=\"p-b-32 card-hidden-list\"></div>\n </div>\n </div>\n <div class=\"p-r-40 card-hidden-grid\"></div>\n <div *ngIf=\"canEdit || canOpenInBrowser || canDelete\" class=\"card-actions m-t-0\">\n <div class=\"dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n title=\"{{ 'Settings' | translate }}\"\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right\">\n <li *ngIf=\"canEdit\">\n <button (click)=\"detail()\" title=\"{{ 'Edit' | translate }}\">\n <i c8yIcon=\"pencil\" class=\"m-r-4\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <ng-container *c8yIfAllowed=\"['ROLE_APPLICATION_MANAGEMENT_ADMIN']\">\n <li>\n <button\n (click)=\"delete()\"\n type=\"button\"\n [title]=\"canDelete ? ('Delete' | translate) : (CANNOT_DELETE_HINT | translate)\"\n [disabled]=\"!canDelete\"\n >\n <i c8yIcon=\"delete\" class=\"m-r-4\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n <li *ngIf=\"canClone\">\n <button\n *ngIf=\"isPackage\"\n (click)=\"clone()\"\n type=\"button\"\n [title]=\"'Clone`package`' | translate\"\n >\n <i c8yIcon=\"copy\" class=\"m-r-4\"></i>\n {{ 'Clone`package`' | translate }}\n </button>\n <button\n *ngIf=\"!isPackage\"\n (click)=\"clone()\"\n type=\"button\"\n [title]=\"'Clone`application`' | translate\"\n >\n <i c8yIcon=\"copy\" class=\"m-r-4\"></i>\n {{ 'Clone`application`' | translate }}\n </button>\n </li>\n </ng-container>\n </ul>\n </div>\n </div>\n</div>\n\n<button (click)=\"detail()\" class=\"card pointer card--d-col\" *ngIf=\"isFeature\">\n <div class=\"card-block text-center card-column-40\">\n <div class=\"card-appicon\">\n <c8y-app-icon\n *ngIf=\"!isPackage && !isFeature && !isMicroservice && !isExternal\"\n [app]=\"app\"\n [contextPath]=\"app.contextPath\"\n [name]=\"app.name\"\n ></c8y-app-icon>\n <i c8yIcon=\"tab\"></i>\n </div>\n <div>\n <p class=\"e2e-appCardName text-medium\" title=\"{{ app | humanizeAppName | async }}\">\n {{ app | humanizeAppName | async }}\n </p>\n <ng-container *ngIf=\"isShowVersion\">\n <p class=\"small text-muted\">\n <em>{{ app.manifest.version }}</em>\n <i\n *ngIf=\"shouldUpgradePackage && isUnpacked\"\n [tooltip]=\"'Update available' | translate\"\n c8yIcon=\"exclamation-triangle\"\n class=\"text-warning m-l-4\"\n ></i>\n </p>\n </ng-container>\n </div>\n </div>\n <div class=\"card-block p-0 no-min-height card--d-col card-column-80 flex-grow\">\n <div class=\"card-block no-min-height p-t-0 p-b-0 card-column-80\">\n <div *ngIf=\"app.description || app.manifest?.description\" class=\"text-center-grid\">\n <div class=\"p-b-8 card-hidden-grid\"></div>\n <p class=\"small l-h-tight p-b-8 p-l-0 p-r-0\">\n {{ app.description || app.manifest?.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"card-block no-min-height p-t-0 p-b-0 card-column-20 text-center-grid\">\n <span [ngClass]=\"appState.class\" class=\"label\">\n {{ isUnpacked ? ('Unpacked' | translate) : (appState.label | translate) }}\n </span>\n </div>\n <div class=\"p-b-32 card-hidden-list\"></div>\n </div>\n</button>\n" }]
897
- }], ctorParameters: function () { return [{ type: i3.ApplicationService }, { type: EcosystemService }, { type: i2.AlertService }, { type: i4.Router }, { type: i2.WizardModalService }, { type: i2.AlertService }]; }, propDecorators: { app: [{
968
+ }], ctorParameters: function () { return [{ type: i3.ApplicationService }, { type: EcosystemService }, { type: i2.AlertService }, { type: i4.Router }, { type: i2.WizardModalService }, { type: i2.AlertService }, { type: i2.GainsightService }]; }, propDecorators: { app: [{
898
969
  type: Input
899
970
  }], canEdit: [{
900
971
  type: Input
@@ -1056,10 +1127,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
1056
1127
  }] } });
1057
1128
 
1058
1129
  class DuplicateApplicationPropertiesComponent {
1059
- constructor(bsModalRef, ecosystemService, applicationService) {
1130
+ constructor(bsModalRef, ecosystemService, applicationService, gainsightService) {
1060
1131
  this.bsModalRef = bsModalRef;
1061
1132
  this.ecosystemService = ecosystemService;
1062
1133
  this.applicationService = applicationService;
1134
+ this.gainsightService = gainsightService;
1135
+ this.CURRENT_LOCATION = location.href;
1063
1136
  this.isFirstStep = false;
1064
1137
  this.duplicatedApp = new EventEmitter();
1065
1138
  this.disableForm = false;
@@ -1083,10 +1156,20 @@ class DuplicateApplicationPropertiesComponent {
1083
1156
  delete clonedApp.type;
1084
1157
  yield this.updateApp(clonedApp);
1085
1158
  this.inProgress = false;
1159
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DUPLICATE_APPLICATION, {
1160
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DUPLICATE_APPLICATION_PROPERTIES,
1161
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.DUPLICATED,
1162
+ url: this.CURRENT_LOCATION
1163
+ });
1086
1164
  });
1087
1165
  }
1088
1166
  cancel() {
1089
1167
  this.bsModalRef.hide();
1168
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DUPLICATE_APPLICATION, {
1169
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DUPLICATE_APPLICATION_PROPERTIES,
1170
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.CANCEL,
1171
+ url: this.CURRENT_LOCATION
1172
+ });
1090
1173
  }
1091
1174
  back() {
1092
1175
  this.stepper.previous();
@@ -1143,12 +1226,12 @@ class DuplicateApplicationPropertiesComponent {
1143
1226
  });
1144
1227
  }
1145
1228
  }
1146
- DuplicateApplicationPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DuplicateApplicationPropertiesComponent, deps: [{ token: i1$1.BsModalRef }, { token: EcosystemService }, { token: i3.ApplicationService }], target: i0.ɵɵFactoryTarget.Component });
1229
+ DuplicateApplicationPropertiesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DuplicateApplicationPropertiesComponent, deps: [{ token: i1$1.BsModalRef }, { token: EcosystemService }, { token: i3.ApplicationService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
1147
1230
  DuplicateApplicationPropertiesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DuplicateApplicationPropertiesComponent, selector: "c8y-duplicate-application-properties", inputs: { stepper: "stepper", existingApps: "existingApps", selectedApp: "selectedApp", isFirstStep: "isFirstStep" }, outputs: { duplicatedApp: "duplicatedApp" }, viewQueries: [{ propertyName: "applicationPropertiesForm", first: true, predicate: ApplicationPropertiesFormComponent, descendants: true }], ngImport: i0, template: "<p\n class=\"p-16 text-center text-medium separator-bottom sticky-top bg-level-0 fit-w\"\n *ngIf=\"!inProgress\"\n>\n {{ 'Provide application details' | translate }}\n</p>\n\n<ng-container *ngIf=\"!inProgress\">\n <label class=\"c8y-switch\" *ngIf=\"isSubscribedApp$ | async\">\n <input type=\"checkbox\" [(ngModel)]=\"disableForm\" (change)=\"getAppConfig()\" />\n <span></span> {{ 'Overrule subscribed application' | translate }}\n </label>\n\n <c8y-application-properties-form\n [application]=\"newAppConfig\"\n class=\"d-block fit-w\"\n [disabled]=\"disableForm\"\n ></c8y-application-properties-form>\n</ng-container>\n<c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Duplicating\u2026' | translate\"\n class=\"text-center d-block\"\n></c8y-progress-bar>\n\n<c8y-wizard-footer>\n <button\n *ngIf=\"!isFirstStep\"\n (click)=\"back()\"\n [disabled]=\"inProgress\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Back' | translate }}\"\n >\n {{ 'Back' | translate }}\n </button>\n <button (click)=\"cancel()\" class=\"btn btn-default\" title=\"{{ 'Cancel' | translate }}\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n (click)=\"duplicateApp()\"\n [disabled]=\"inProgress\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Duplicate' | translate }}\"\n >\n {{ 'Duplicate' | translate }}\n </button>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "component", type: ApplicationPropertiesFormComponent, selector: "c8y-application-properties-form", inputs: ["application", "disabled"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }] });
1148
1231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DuplicateApplicationPropertiesComponent, decorators: [{
1149
1232
  type: Component,
1150
1233
  args: [{ selector: 'c8y-duplicate-application-properties', template: "<p\n class=\"p-16 text-center text-medium separator-bottom sticky-top bg-level-0 fit-w\"\n *ngIf=\"!inProgress\"\n>\n {{ 'Provide application details' | translate }}\n</p>\n\n<ng-container *ngIf=\"!inProgress\">\n <label class=\"c8y-switch\" *ngIf=\"isSubscribedApp$ | async\">\n <input type=\"checkbox\" [(ngModel)]=\"disableForm\" (change)=\"getAppConfig()\" />\n <span></span> {{ 'Overrule subscribed application' | translate }}\n </label>\n\n <c8y-application-properties-form\n [application]=\"newAppConfig\"\n class=\"d-block fit-w\"\n [disabled]=\"disableForm\"\n ></c8y-application-properties-form>\n</ng-container>\n<c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Duplicating\u2026' | translate\"\n class=\"text-center d-block\"\n></c8y-progress-bar>\n\n<c8y-wizard-footer>\n <button\n *ngIf=\"!isFirstStep\"\n (click)=\"back()\"\n [disabled]=\"inProgress\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Back' | translate }}\"\n >\n {{ 'Back' | translate }}\n </button>\n <button (click)=\"cancel()\" class=\"btn btn-default\" title=\"{{ 'Cancel' | translate }}\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n (click)=\"duplicateApp()\"\n [disabled]=\"inProgress\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Duplicate' | translate }}\"\n >\n {{ 'Duplicate' | translate }}\n </button>\n</c8y-wizard-footer>\n" }]
1151
- }], ctorParameters: function () { return [{ type: i1$1.BsModalRef }, { type: EcosystemService }, { type: i3.ApplicationService }]; }, propDecorators: { stepper: [{
1234
+ }], ctorParameters: function () { return [{ type: i1$1.BsModalRef }, { type: EcosystemService }, { type: i3.ApplicationService }, { type: i2.GainsightService }]; }, propDecorators: { stepper: [{
1152
1235
  type: Input
1153
1236
  }], existingApps: [{
1154
1237
  type: Input
@@ -1385,5 +1468,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
1385
1468
  * Generated bundle index. Do not edit.
1386
1469
  */
1387
1470
 
1388
- export { APP_STATE, AddApplicationComponent, ApplicationCardComponent, ApplicationPropertiesFormComponent, DuplicateApplicationComponent, DuplicateApplicationListComponent, DuplicateApplicationPropertiesComponent, ERROR_MESSAGES, ERROR_TYPE, EcosystemService, PackageVersionSelectComponent, SharedEcosystemModule, UploadArchiveComponent, Wizards, packageProperties };
1471
+ export { APP_STATE, AddApplicationComponent, ApplicationCardComponent, ApplicationPropertiesFormComponent, DuplicateApplicationComponent, DuplicateApplicationListComponent, DuplicateApplicationPropertiesComponent, ERROR_MESSAGES, ERROR_TYPE, EcosystemService, PRODUCT_EXPERIENCE, PackageVersionSelectComponent, SharedEcosystemModule, UploadArchiveComponent, Wizards, packageProperties };
1389
1472
  //# sourceMappingURL=c8y-ngx-components-ecosystem-shared.mjs.map