@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
91 lines • 15.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { ApplicationAvailability, ApplicationService } from '@c8y/client';
import { TranslateService } from '@ngx-translate/core';
import { AlertService, AppStateService, GainsightService, ModalService, gettext } from '@c8y/ngx-components';
import { PRODUCT_EXPERIENCE_ECOSYSTEM } from './ecosystem.model';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components";
import * as i2 from "@c8y/client";
import * as i3 from "@ngx-translate/core";
export class PackageAvailabilityService {
constructor(appState, alert, modal, application, gainsightService, translateService) {
this.appState = appState;
this.alert = alert;
this.modal = modal;
this.application = application;
this.gainsightService = gainsightService;
this.translateService = translateService;
this.CURRENT_LOCATION = location.href;
this.availabilities = [
{ label: gettext('Private`package availability`'), value: ApplicationAvailability.PRIVATE },
{ label: gettext('Market`package availability`'), value: ApplicationAvailability.MARKET },
{ label: gettext('Shared`package availability`'), value: ApplicationAvailability.SHARED }
];
}
async askIfAvailabilityShouldBeSetTo(applicationPackage, availability) {
// availability does not matter for tenant that do not have or can create subtenants
if (!this.appState.currentTenant.value?.allowCreateTenants) {
return applicationPackage;
}
try {
await this.openAvailabilityModal(availability);
// user confirmed changing availability
return await this.setAvailability(applicationPackage, availability);
}
catch {
// user canceled changing availability
return applicationPackage;
}
}
async setAvailability(applicationPackage, availability) {
try {
const { data: app } = await this.application.updateApplicationAvailability(applicationPackage, availability);
this.alert.success(gettext('Updated package availability.'));
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.AVAILABILITY, {
action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.AVAILABILITY_CHANGE,
result: availability.toString().toLocaleLowerCase(),
url: this.CURRENT_LOCATION
});
return app;
}
catch (e) {
this.alert.warning(gettext('Failed to set package availability.'));
this.alert.addServerFailure(e);
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.AVAILABILITY, {
action: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.ACTIONS.AVAILABILITY_CHANGE,
result: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.SERVER_FAILURE,
url: this.CURRENT_LOCATION
});
return applicationPackage;
}
}
getConfirmationBody(availability) {
switch (availability) {
case ApplicationAvailability.SHARED:
return gettext('Do you want to set the package availability to "Shared"? This will make the package available to all subtenants without explicitly subscribing the package.');
case ApplicationAvailability.MARKET:
return gettext('Do you want to set the package availability to "Market"? This will make the package available to your own tenant and needs to be subscribed to subtenants individually.');
case ApplicationAvailability.PRIVATE:
return gettext('Do you want to set the package availability to "Private"? This will make the package only available to your own tenant.');
default:
return '';
}
}
async openAvailabilityModal(availability) {
const body = this.getConfirmationBody(availability);
const availabilityLabel = this.availabilities.find(obj => obj.value === availability).label;
await this.modal.confirm(gettext('Package availability'), body, 'info', {
ok: this.translateService.instant(gettext('Set to "{{ packageAvailability }}"'), {
packageAvailability: this.translateService.instant(availabilityLabel)
}),
cancel: gettext('Cancel')
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageAvailabilityService, deps: [{ token: i1.AppStateService }, { token: i1.AlertService }, { token: i1.ModalService }, { token: i2.ApplicationService }, { token: i1.GainsightService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageAvailabilityService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PackageAvailabilityService, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: i1.AppStateService }, { type: i1.AlertService }, { type: i1.ModalService }, { type: i2.ApplicationService }, { type: i1.GainsightService }, { type: i3.TranslateService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1hdmFpbGFiaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9zaGFyZWQvcGFja2FnZS1hdmFpbGFiaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFHakUsTUFBTSxPQUFPLDBCQUEwQjtJQVFyQyxZQUNVLFFBQXlCLEVBQ3pCLEtBQW1CLEVBQ25CLEtBQW1CLEVBQ25CLFdBQStCLEVBQy9CLGdCQUFrQyxFQUNsQyxnQkFBa0M7UUFMbEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFiNUMscUJBQWdCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNqQyxtQkFBYyxHQUFHO1lBQ2YsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLCtCQUErQixDQUFDLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixDQUFDLE9BQU8sRUFBRTtZQUMzRixFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsOEJBQThCLENBQUMsRUFBRSxL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QUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFNUYsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3RFLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFO2dCQUMvRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2FBQ3RFLENBQUM7WUFDRixNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDOytHQWxHVSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQURiLE1BQU07OzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksIEFwcGxpY2F0aW9uU2VydmljZSwgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0gfSBmcm9tICcuL2Vjb3N5c3RlbS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGFja2FnZUF2YWlsYWJpbGl0eVNlcnZpY2Uge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcbiAgYXZhaWxhYmlsaXRpZXMgPSBbXG4gICAgeyBsYWJlbDogZ2V0dGV4dCgnUHJpdmF0ZWBwYWNrYWdlIGF2YWlsYWJpbGl0eWAnKSwgdmFsdWU6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlBSSVZBVEUgfSxcbiAgICB7IGxhYmVsOiBnZXR0ZXh0KCdNYXJrZXRgcGFja2FnZSBhdmFpbGFiaWxpdHlgJyksIHZhbHVlOiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5NQVJLRVQgfSxcbiAgICB7IGxhYmVsOiBnZXR0ZXh0KCdTaGFyZWRgcGFja2FnZSBhdmFpbGFiaWxpdHlgJyksIHZhbHVlOiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQgfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBhc2tJZkF2YWlsYWJpbGl0eVNob3VsZEJlU2V0VG8oXG4gICAgYXBwbGljYXRpb25QYWNrYWdlOiBJQXBwbGljYXRpb24sXG4gICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eVxuICApOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIC8vIGF2YWlsYWJpbGl0eSBkb2VzIG5vdCBtYXR0ZXIgZm9yIHRlbmFudCB0aGF0IGRvIG5vdCBoYXZlIG9yIGNhbiBjcmVhdGUgc3VidGVuYW50c1xuICAgIGlmICghdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlPy5hbGxvd0NyZWF0ZVRlbmFudHMpIHtcbiAgICAgIHJldHVybiBhcHBsaWNhdGlvblBhY2thZ2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9wZW5BdmFpbGFiaWxpdHlNb2RhbChhdmFpbGFiaWxpdHkpO1xuICAgICAgLy8gdXNlciBjb25maXJtZWQgY2hhbmdpbmcgYXZhaWxhYmlsaXR5XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRBdmFpbGFiaWxpdHkoYXBwbGljYXRpb25QYWNrYWdlLCBhdmFpbGFiaWxpdHkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdXNlciBjYW5jZWxlZCBjaGFuZ2luZyBhdmFpbGFiaWxpdHlcbiAgICAgIHJldHVybiBhcHBsaWNhdGlvblBhY2thZ2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0QXZhaWxhYmlsaXR5KFxuICAgIGFwcGxpY2F0aW9uUGFja2FnZTogSUFwcGxpY2F0aW9uLFxuICAgIGF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHlcbiAgKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhOiBhcHAgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXBkYXRlQXBwbGljYXRpb25BdmFpbGFiaWxpdHkoXG4gICAgICAgIGFwcGxpY2F0aW9uUGFja2FnZSxcbiAgICAgICAgYXZhaWxhYmlsaXR5XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1VwZGF0ZWQgcGFja2FnZSBhdmFpbGFiaWxpdHkuJykpO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuRVZFTlRTLkFWQUlMQUJJTElUWSxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTS5BUFBMSUNBVElPTlMuQUNUSU9OUy5BVkFJTEFCSUxJVFlfQ0hBTkdFLFxuICAgICAgICAgIHJlc3VsdDogYXZhaWxhYmlsaXR5LnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoKSxcbiAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIGFwcDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnRmFpbGVkIHRvIHNldCBwYWNrYWdlIGF2YWlsYWJpbGl0eS4nKSk7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5FVkVOVFMuQVZBSUxBQklMSVRZLFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkFWQUlMQUJJTElUWV9DSEFOR0UsXG4gICAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFLFxuICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gYXBwbGljYXRpb25QYWNrYWdlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlybWF0aW9uQm9keShhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGF2YWlsYWJpbGl0eSkge1xuICAgICAgY2FzZSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQ6XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFxuICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBzZXQgdGhlIHBhY2thZ2UgYXZhaWxhYmlsaXR5IHRvIFwiU2hhcmVkXCI/IFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIGF2YWlsYWJsZSB0byBhbGwgc3VidGVuYW50cyB3aXRob3V0IGV4cGxpY2l0bHkgc3Vic2NyaWJpbmcgdGhlIHBhY2thZ2UuJ1xuICAgICAgICApO1xuICAgICAgY2FzZSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5NQVJLRVQ6XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFxuICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBzZXQgdGhlIHBhY2thZ2UgYXZhaWxhYmlsaXR5IHRvIFwiTWFya2V0XCI/IFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIGF2YWlsYWJsZSB0byB5b3VyIG93biB0ZW5hbnQgYW5kIG5lZWRzIHRvIGJlIHN1YnNjcmliZWQgdG8gc3VidGVuYW50cyBpbmRpdmlkdWFsbHkuJ1xuICAgICAgICApO1xuICAgICAgY2FzZSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFOlxuICAgICAgICByZXR1cm4gZ2V0dGV4dChcbiAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2V0IHRoZSBwYWNrYWdlIGF2YWlsYWJpbGl0eSB0byBcIlByaXZhdGVcIj8gVGhpcyB3aWxsIG1ha2UgdGhlIHBhY2thZ2Ugb25seSBhdmFpbGFibGUgdG8geW91ciBvd24gdGVuYW50LidcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9wZW5BdmFpbGFiaWxpdHlNb2RhbChhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5KSB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuZ2V0Q29uZmlybWF0aW9uQm9keShhdmFpbGFiaWxpdHkpO1xuICAgIGNvbnN0IGF2YWlsYWJpbGl0eUxhYmVsID0gdGhpcy5hdmFpbGFiaWxpdGllcy5maW5kKG9iaiA9PiBvYmoudmFsdWUgPT09IGF2YWlsYWJpbGl0eSkubGFiZWw7XG5cbiAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oZ2V0dGV4dCgnUGFja2FnZSBhdmFpbGFiaWxpdHknKSwgYm9keSwgJ2luZm8nLCB7XG4gICAgICBvazogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnU2V0IHRvIFwie3sgcGFja2FnZUF2YWlsYWJpbGl0eSB9fVwiJyksIHtcbiAgICAgICAgcGFja2FnZUF2YWlsYWJpbGl0eTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYXZhaWxhYmlsaXR5TGFiZWwpXG4gICAgICB9KSxcbiAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICB9KTtcbiAgfVxufVxuIl19