@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
100 lines • 13.7 kB
JavaScript
import { Directive, HostListener, Inject, Input, Optional, Self, SkipSelf } from '@angular/core';
import { GainsightService } from './gainsight.service';
import { PRODUCT_EXPERIENCE_EVENT_SOURCE } from './product-experience.model';
import * as i0 from "@angular/core";
import * as i1 from "./gainsight.service";
export class ProductExperienceDirective {
/**
* If set to <code>true</code>, <code>actionName</code> and <code>actionData</code> will be
* inherited from the parent component if it has the <code>c8yProductExperience</code> applied to it.
* With <code>inherit</code> set to <code>true</code> the local <code>actionName</code> value is
* ignored and overriden by the parent component's <code>actionName</code>. This allows for easy
* re-use of core components (e.g. <code><c8y-li-action></code>) that would use the inherited
* action name rather than their generic action name. Own <code>actionData</code> properties with
* the same name take precedence to those inheritted from the parent component.
*/
set _inherit(inherit) {
// allows to use the <input c8yProductExperience inherit [actionData]="{...}"> syntax
this.inherit = inherit === '' || (inherit ?? true);
}
/**
* If set to <code>true</code> own <code>actionData</code> properties would not override
* <code>actionData</code> properties of the parent component. Instead, values will be
* inherited from the parent component. It is only effective if <code>inherit</code>
* is set to <code>true</code>.
*/
set _suppressDataOverriding(suppressDataOverriding) {
// allows to use the <input c8yProductExperience suppressDataOverriding [actionData]="{...}"> syntax
this.suppressDataOverriding = suppressDataOverriding === '' || (suppressDataOverriding ?? true);
}
constructor(component, parentEventSource, gainsightService) {
this.component = component;
this.parentEventSource = parentEventSource;
this.gainsightService = gainsightService;
}
onClick() {
if (!this.component) {
const { actionName, actionData } = this.getAction(this.suppressDataOverriding);
if (actionName) {
this.gainsightService.triggerEvent(actionName, actionData);
}
}
}
ngOnInit() {
if (this.component) {
const { actionName, actionData } = this.getAction();
this.component.productExperienceEvent = {
eventName: actionName,
data: this.mergeData(actionData, this.component?.productExperienceEvent?.data, this.suppressDataOverriding)
};
}
}
getAction(reverse = false) {
let { actionName, actionData } = this;
if (this.inherit && this.parentEventSource?.productExperienceEvent) {
const { productExperienceEvent } = this.parentEventSource;
actionName = productExperienceEvent.eventName;
actionData = this.mergeData(productExperienceEvent.data, this.actionData, reverse);
}
return { actionName, actionData };
}
mergeData(dataA, dataB, reverse = false) {
return reverse ? { ...dataB, ...dataA } : { ...dataA, ...dataB };
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductExperienceDirective, deps: [{ token: PRODUCT_EXPERIENCE_EVENT_SOURCE, optional: true, self: true }, { token: PRODUCT_EXPERIENCE_EVENT_SOURCE, optional: true, skipSelf: true }, { token: i1.GainsightService }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: { actionName: "actionName", actionData: "actionData", _inherit: ["inherit", "_inherit"], _suppressDataOverriding: ["suppressDataOverriding", "_suppressDataOverriding"] }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductExperienceDirective, decorators: [{
type: Directive,
args: [{
selector: '[c8yProductExperience]'
}]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Self
}, {
type: Optional
}, {
type: Inject,
args: [PRODUCT_EXPERIENCE_EVENT_SOURCE]
}] }, { type: undefined, decorators: [{
type: SkipSelf
}, {
type: Optional
}, {
type: Inject,
args: [PRODUCT_EXPERIENCE_EVENT_SOURCE]
}] }, { type: i1.GainsightService }], propDecorators: { actionName: [{
type: Input
}], actionData: [{
type: Input
}], _inherit: [{
type: Input,
args: ['inherit']
}], _suppressDataOverriding: [{
type: Input,
args: ['suppressDataOverriding']
}], onClick: [{
type: HostListener,
args: ['click']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1leHBlcmllbmNlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcHJvZHVjdC1leHBlcmllbmNlL3Byb2R1Y3QtZXhwZXJpZW5jZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBRUwsK0JBQStCLEVBRWhDLE1BQU0sNEJBQTRCLENBQUM7OztBQUtwQyxNQUFNLE9BQU8sMEJBQTBCO0lBU3JDOzs7Ozs7OztPQVFHO0lBQ0gsSUFBc0IsUUFBUSxDQUFDLE9BQU87UUFDcEMscUZBQXFGO1FBQ3JGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxJQUFxQyx1QkFBdUIsQ0FBQyxzQkFBc0I7UUFDakYsb0dBQW9HO1FBQ3BHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBSUQsWUFJVSxTQUF1QyxFQUl2QyxpQkFBK0MsRUFDL0MsZ0JBQWtDO1FBTGxDLGNBQVMsR0FBVCxTQUFTLENBQThCO1FBSXZDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBOEI7UUFDL0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUN6QyxDQUFDO0lBR0osT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBRS9FLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEdBQUc7Z0JBQ3RDLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDbEIsVUFBVSxFQUNWLElBQUksQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQzVCO2FBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLO1FBQy9CLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXRDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztZQUNuRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDMUQsVUFBVSxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQztZQUM5QyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWtCLEVBQUUsS0FBa0IsRUFBRSxPQUFPLEdBQUcsS0FBSztRQUN2RSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDbkUsQ0FBQzsrR0F0RlUsMEJBQTBCLGtCQXNDM0IsK0JBQStCLHlDQUkvQiwrQkFBK0I7bUdBMUM5QiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHdCQUF3QjtpQkFDbkM7OzBCQXFDSSxJQUFJOzswQkFDSixRQUFROzswQkFDUixNQUFNOzJCQUFDLCtCQUErQjs7MEJBRXRDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsK0JBQStCO3dFQXRDaEMsVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQVVnQixRQUFRO3NCQUE3QixLQUFLO3VCQUFDLFNBQVM7Z0JBVXFCLHVCQUF1QjtzQkFBM0QsS0FBSzt1QkFBQyx3QkFBd0I7Z0JBb0IvQixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPcHRpb25hbCwgU2VsZiwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICcuL2dhaW5zaWdodC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFByb2R1Y3RFeHBlcmllbmNlRXZlbnRTb3VyY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9FVkVOVF9TT1VSQ0UsXG4gIFB4RXZlbnREYXRhXG59IGZyb20gJy4vcHJvZHVjdC1leHBlcmllbmNlLm1vZGVsJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2M4eVByb2R1Y3RFeHBlcmllbmNlXSdcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdEV4cGVyaWVuY2VEaXJlY3RpdmUge1xuICAvKipcbiAgICogQSB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhIGN1c3RvbSBldmVudCBuYW1lLlxuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogRGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBldmVudCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uRGF0YTogb2JqZWN0O1xuICAvKipcbiAgICogSWYgc2V0IHRvIDxjb2RlPnRydWU8L2NvZGU+LCA8Y29kZT5hY3Rpb25OYW1lPC9jb2RlPiBhbmQgPGNvZGU+YWN0aW9uRGF0YTwvY29kZT4gd2lsbCBiZVxuICAgKiBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCBpZiBpdCBoYXMgdGhlIDxjb2RlPmM4eVByb2R1Y3RFeHBlcmllbmNlPC9jb2RlPiBhcHBsaWVkIHRvIGl0LlxuICAgKiBXaXRoIDxjb2RlPmluaGVyaXQ8L2NvZGU+IHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiB0aGUgbG9jYWwgPGNvZGU+YWN0aW9uTmFtZTwvY29kZT4gdmFsdWUgaXNcbiAgICogaWdub3JlZCBhbmQgb3ZlcnJpZGVuIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50J3MgPGNvZGU+YWN0aW9uTmFtZTwvY29kZT4uIFRoaXMgYWxsb3dzIGZvciBlYXN5XG4gICAqIHJlLXVzZSBvZiBjb3JlIGNvbXBvbmVudHMgKGUuZy4gPGNvZGU+Jmx0O2M4eS1saS1hY3Rpb24mZ3Q7PC9jb2RlPikgdGhhdCB3b3VsZCB1c2UgdGhlIGluaGVyaXRlZFxuICAgKiBhY3Rpb24gbmFtZSByYXRoZXIgdGhhbiB0aGVpciBnZW5lcmljIGFjdGlvbiBuYW1lLiBPd24gPGNvZGU+YWN0aW9uRGF0YTwvY29kZT4gcHJvcGVydGllcyB3aXRoXG4gICAqIHRoZSBzYW1lIG5hbWUgdGFrZSBwcmVjZWRlbmNlIHRvIHRob3NlIGluaGVyaXR0ZWQgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgnaW5oZXJpdCcpIHNldCBfaW5oZXJpdChpbmhlcml0KSB7XG4gICAgLy8gYWxsb3dzIHRvIHVzZSB0aGUgPGlucHV0IGM4eVByb2R1Y3RFeHBlcmllbmNlIGluaGVyaXQgW2FjdGlvbkRhdGFdPVwiey4uLn1cIj4gc3ludGF4XG4gICAgdGhpcy5pbmhlcml0ID0gaW5oZXJpdCA9PT0gJycgfHwgKGluaGVyaXQgPz8gdHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIElmIHNldCB0byA8Y29kZT50cnVlPC9jb2RlPiBvd24gPGNvZGU+YWN0aW9uRGF0YTwvY29kZT4gcHJvcGVydGllcyB3b3VsZCBub3Qgb3ZlcnJpZGVcbiAgICogPGNvZGU+YWN0aW9uRGF0YTwvY29kZT4gcHJvcGVydGllcyBvZiB0aGUgcGFyZW50IGNvbXBvbmVudC4gSW5zdGVhZCwgdmFsdWVzIHdpbGwgYmVcbiAgICogaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBjb21wb25lbnQuIEl0IGlzIG9ubHkgZWZmZWN0aXZlIGlmIDxjb2RlPmluaGVyaXQ8L2NvZGU+XG4gICAqIGlzIHNldCB0byA8Y29kZT50cnVlPC9jb2RlPi5cbiAgICovXG4gIEBJbnB1dCgnc3VwcHJlc3NEYXRhT3ZlcnJpZGluZycpIHNldCBfc3VwcHJlc3NEYXRhT3ZlcnJpZGluZyhzdXBwcmVzc0RhdGFPdmVycmlkaW5nKSB7XG4gICAgLy8gYWxsb3dzIHRvIHVzZSB0aGUgPGlucHV0IGM4eVByb2R1Y3RFeHBlcmllbmNlIHN1cHByZXNzRGF0YU92ZXJyaWRpbmcgW2FjdGlvbkRhdGFdPVwiey4uLn1cIj4gc3ludGF4XG4gICAgdGhpcy5zdXBwcmVzc0RhdGFPdmVycmlkaW5nID0gc3VwcHJlc3NEYXRhT3ZlcnJpZGluZyA9PT0gJycgfHwgKHN1cHByZXNzRGF0YU92ZXJyaWRpbmcgPz8gdHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBpbmhlcml0OiBib29sZWFuO1xuICBwcml2YXRlIHN1cHByZXNzRGF0YU92ZXJyaWRpbmc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKVxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChQUk9EVUNUX0VYUEVSSUVOQ0VfRVZFTlRfU09VUkNFKVxuICAgIHByaXZhdGUgY29tcG9uZW50OiBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50U291cmNlLFxuICAgIEBTa2lwU2VsZigpXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFBST0RVQ1RfRVhQRVJJRU5DRV9FVkVOVF9TT1VSQ0UpXG4gICAgcHJpdmF0ZSBwYXJlbnRFdmVudFNvdXJjZTogUHJvZHVjdEV4cGVyaWVuY2VFdmVudFNvdXJjZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgb25DbGljaygpIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50KSB7XG4gICAgICBjb25zdCB7IGFjdGlvbk5hbWUsIGFjdGlvbkRhdGEgfSA9IHRoaXMuZ2V0QWN0aW9uKHRoaXMuc3VwcHJlc3NEYXRhT3ZlcnJpZGluZyk7XG5cbiAgICAgIGlmIChhY3Rpb25OYW1lKSB7XG4gICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoYWN0aW9uTmFtZSwgYWN0aW9uRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XG4gICAgICBjb25zdCB7IGFjdGlvbk5hbWUsIGFjdGlvbkRhdGEgfSA9IHRoaXMuZ2V0QWN0aW9uKCk7XG4gICAgICB0aGlzLmNvbXBvbmVudC5wcm9kdWN0RXhwZXJpZW5jZUV2ZW50ID0ge1xuICAgICAgICBldmVudE5hbWU6IGFjdGlvbk5hbWUsXG4gICAgICAgIGRhdGE6IHRoaXMubWVyZ2VEYXRhKFxuICAgICAgICAgIGFjdGlvbkRhdGEsXG4gICAgICAgICAgdGhpcy5jb21wb25lbnQ/LnByb2R1Y3RFeHBlcmllbmNlRXZlbnQ/LmRhdGEsXG4gICAgICAgICAgdGhpcy5zdXBwcmVzc0RhdGFPdmVycmlkaW5nXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3Rpb24ocmV2ZXJzZSA9IGZhbHNlKTogeyBhY3Rpb25OYW1lOiBzdHJpbmc7IGFjdGlvbkRhdGE6IFB4RXZlbnREYXRhIH0ge1xuICAgIGxldCB7IGFjdGlvbk5hbWUsIGFjdGlvbkRhdGEgfSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5pbmhlcml0ICYmIHRoaXMucGFyZW50RXZlbnRTb3VyY2U/LnByb2R1Y3RFeHBlcmllbmNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IHsgcHJvZHVjdEV4cGVyaWVuY2VFdmVudCB9ID0gdGhpcy5wYXJlbnRFdmVudFNvdXJjZTtcbiAgICAgIGFjdGlvbk5hbWUgPSBwcm9kdWN0RXhwZXJpZW5jZUV2ZW50LmV2ZW50TmFtZTtcbiAgICAgIGFjdGlvbkRhdGEgPSB0aGlzLm1lcmdlRGF0YShwcm9kdWN0RXhwZXJpZW5jZUV2ZW50LmRhdGEsIHRoaXMuYWN0aW9uRGF0YSwgcmV2ZXJzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWN0aW9uTmFtZSwgYWN0aW9uRGF0YSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZURhdGEoZGF0YUE6IFB4RXZlbnREYXRhLCBkYXRhQjogUHhFdmVudERhdGEsIHJldmVyc2UgPSBmYWxzZSk6IFB4RXZlbnREYXRhIHtcbiAgICByZXR1cm4gcmV2ZXJzZSA/IHsgLi4uZGF0YUIsIC4uLmRhdGFBIH0gOiB7IC4uLmRhdGFBLCAuLi5kYXRhQiB9O1xuICB9XG59XG4iXX0=