@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
121 lines • 15 kB
JavaScript
import { cloneDeep } from 'lodash-es';
import { BehaviorSubject } from 'rxjs';
import { DismissAlertStrategy } from './dynamic-component-alert.model';
/**
* Order of widget alerts due to alerts severity.
*/
const WIDGET_ALERTS_ORDER = [
'danger',
'warning',
'info',
'system',
'success'
];
export class DynamicComponentAlertAggregator {
constructor(alerts = []) {
this.anyAlertExistsSubject = new BehaviorSubject(false);
this.anyAlertExists$ = this.anyAlertExistsSubject.asObservable();
this.initAlertsGroups();
this.setAlerts(alerts);
}
/**
* Adds alert to aggregator.
*
* @param {DynamicComponentAlert[]} alerts List of alerts that should be added to aggregator.
*
*/
addAlerts(...alerts) {
this.setAlerts(alerts);
}
/**
* Remove alerts in group by provided alert type or removes all alerts when no param is provided.
*
* @param {AlertType} type Type of alerts group that should be removed.
*
*/
clear(type) {
if (type) {
this.aggregatedAlertsData.get(type).alerts = [];
}
else {
this.aggregatedAlertsData.forEach(value => (value.alerts = []));
}
this.onDataChanged();
}
/**
* Sets possibility of alert to be dismissed in specific way.
*
* @param {AlertType} alertType Type of alerts for which the dismissal strategy should be set.
* @param {dismissStrategy} dismissStrategy Type of dismissal strategy that will be set for the alert type.
*
*/
setAlertGroupDismissStrategy(alertType, dismissStrategy) {
this.aggregatedAlertsData.get(alertType).alertDismissal.dismissStrategy = dismissStrategy;
this.onDataChanged();
}
/**
* Removes alerts in group due to dismissal dismissStrategy and sets userDismissalChoice property.
* If group has dismissal strategy declared as TEMPORARY_OR_PERMANENT, its userDismissalChoice property can be set to
* REMIND_ALLOWED or REMIND_DISALLOWED depending on parameter.
*
* @param {AlertType} alertType Type of alerts group that should be dismissed.
* @param {boolean} permanent Determines whether the dismissal of alerts of a given type is permanent.
*
*/
dismissAlertGroup(alertType, isPermanent = false) {
const groupDismissStrategy = this.aggregatedAlertsData.get(alertType).alertDismissal.dismissStrategy;
switch (groupDismissStrategy) {
case DismissAlertStrategy.NONE:
return;
case DismissAlertStrategy.TEMPORARY:
this.aggregatedAlertsData.get(alertType).alertDismissal.userDismissalChoice =
'REMIND_ALLOWED';
break;
case DismissAlertStrategy.TEMPORARY_OR_PERMANENT:
this.aggregatedAlertsData.get(alertType).alertDismissal.userDismissalChoice = isPermanent
? 'REMIND_DISALLOWED'
: 'REMIND_ALLOWED';
}
this.clear(alertType);
}
/**
* Alert aggregator as a widget property should not be serialized and stored in database.
*/
toJSON() {
return undefined;
}
initAlertsGroups() {
this.aggregatedAlertsData = new Map(WIDGET_ALERTS_ORDER.map(alertType => {
return [
alertType,
{
alerts: [],
alertDismissal: { dismissStrategy: DismissAlertStrategy.NONE }
}
];
}));
}
setAlerts(alerts) {
alerts.forEach(alert => {
if (this.aggregatedAlertsData.get(alert.type).alertDismissal.userDismissalChoice ===
'REMIND_DISALLOWED') {
return;
}
if (!this.aggregatedAlertsData.get(alert.type)) {
this.aggregatedAlertsData.get(alert.type).alerts = [];
}
this.aggregatedAlertsData.get(alert.type).alerts.push(alert);
});
this.onDataChanged();
}
onDataChanged() {
this.alertGroups = [...cloneDeep(this.aggregatedAlertsData)].map(([key, value]) => ({
type: key,
value
}));
queueMicrotask(() => {
this.anyAlertExistsSubject.next(this.alertGroups.some(({ value }) => !!value.alerts.length));
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQtYWxlcnQtYWdncmVnYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUVMLG9CQUFvQixFQUVyQixNQUFNLGlDQUFpQyxDQUFDO0FBR3pDOztHQUVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixRQUFRO0lBQ1IsU0FBUztJQUNULE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztDQUNrQyxDQUFDO0FBRTlDLE1BQU0sT0FBTywrQkFBK0I7SUFlMUMsWUFBWSxTQUFrQyxFQUFFO1FBRnhDLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBR2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLEdBQUcsTUFBK0I7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNO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QUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxFQUFFLEdBQUc7WUFDVCxLQUFLO1NBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSixjQUFjLENBQUMsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQWxlcnRHcm91cERhdGEsXG4gIERpc21pc3NBbGVydFN0cmF0ZWd5LFxuICBEeW5hbWljQ29tcG9uZW50QWxlcnRcbn0gZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC1hbGVydC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFR5cGUgfSBmcm9tICcuLi9hbGVydCc7XG5cbi8qKlxuICogT3JkZXIgb2Ygd2lkZ2V0IGFsZXJ0cyBkdWUgdG8gYWxlcnRzIHNldmVyaXR5LlxuICovXG5jb25zdCBXSURHRVRfQUxFUlRTX09SREVSID0gW1xuICAnZGFuZ2VyJyxcbiAgJ3dhcm5pbmcnLFxuICAnaW5mbycsXG4gICdzeXN0ZW0nLFxuICAnc3VjY2Vzcydcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlYWRvbmx5QXJyYXk8QWxlcnRUeXBlPjtcblxuZXhwb3J0IGNsYXNzIER5bmFtaWNDb21wb25lbnRBbGVydEFnZ3JlZ2F0b3Ige1xuICBhbnlBbGVydEV4aXN0cyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBBcnJheSBjb250YWluaW5nIGdyb3VwZWQgYWxlcnRzIHdpdGggZGF0YSBuZWNlc3NhcnkgdG8gZGlzcGxheSBhbGVydHMgYW5kIHdoZXRoZXIgYWxlcnQgZ3JvdXAgc2hvdWxkIGJlIGRpc21pc3NpYmxlLlxuICAgKi9cbiAgYWxlcnRHcm91cHM6IEFycmF5PHtcbiAgICB0eXBlOiBBbGVydFR5cGU7XG4gICAgdmFsdWU6IEFsZXJ0R3JvdXBEYXRhO1xuICB9PjtcbiAgLyoqXG4gICAqIFByaXZhdGUgTWFwIG9mIGFsZXJ0cyBkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBhZ2dyZWdhdGVkQWxlcnRzRGF0YTogTWFwPEFsZXJ0VHlwZSwgQWxlcnRHcm91cERhdGE+O1xuICBwcml2YXRlIGFueUFsZXJ0RXhpc3RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKGFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0W10gPSBbXSkge1xuICAgIHRoaXMuYW55QWxlcnRFeGlzdHMkID0gdGhpcy5hbnlBbGVydEV4aXN0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5pbml0QWxlcnRzR3JvdXBzKCk7XG4gICAgdGhpcy5zZXRBbGVydHMoYWxlcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFsZXJ0IHRvIGFnZ3JlZ2F0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RHluYW1pY0NvbXBvbmVudEFsZXJ0W119IGFsZXJ0cyBMaXN0IG9mIGFsZXJ0cyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byBhZ2dyZWdhdG9yLlxuICAgKlxuICAgKi9cbiAgYWRkQWxlcnRzKC4uLmFsZXJ0czogRHluYW1pY0NvbXBvbmVudEFsZXJ0W10pIHtcbiAgICB0aGlzLnNldEFsZXJ0cyhhbGVydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGVydHMgaW4gZ3JvdXAgYnkgcHJvdmlkZWQgYWxlcnQgdHlwZSBvciByZW1vdmVzIGFsbCBhbGVydHMgd2hlbiBubyBwYXJhbSBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IHR5cGUgVHlwZSBvZiBhbGVydHMgZ3JvdXAgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZC5cbiAgICpcbiAgICovXG4gIGNsZWFyKHR5cGU/OiBBbGVydFR5cGUpIHtcbiAgICBpZiAodHlwZSkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5nZXQodHlwZSkuYWxlcnRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEuZm9yRWFjaCh2YWx1ZSA9PiAodmFsdWUuYWxlcnRzID0gW10pKTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFDaGFuZ2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBwb3NzaWJpbGl0eSBvZiBhbGVydCB0byBiZSBkaXNtaXNzZWQgaW4gc3BlY2lmaWMgd2F5LlxuICAgKlxuICAgKiBAcGFyYW0ge0FsZXJ0VHlwZX0gYWxlcnRUeXBlIFR5cGUgb2YgYWxlcnRzIGZvciB3aGljaCB0aGUgZGlzbWlzc2FsIHN0cmF0ZWd5IHNob3VsZCBiZSBzZXQuXG4gICAqIEBwYXJhbSB7ZGlzbWlzc1N0cmF0ZWd5fSBkaXNtaXNzU3RyYXRlZ3kgVHlwZSBvZiBkaXNtaXNzYWwgc3RyYXRlZ3kgdGhhdCB3aWxsIGJlIHNldCBmb3IgdGhlIGFsZXJ0IHR5cGUuXG4gICAqXG4gICAqL1xuICBzZXRBbGVydEdyb3VwRGlzbWlzc1N0cmF0ZWd5KGFsZXJ0VHlwZTogQWxlcnRUeXBlLCBkaXNtaXNzU3RyYXRlZ3k6IERpc21pc3NBbGVydFN0cmF0ZWd5KSB7XG4gICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5nZXQoYWxlcnRUeXBlKS5hbGVydERpc21pc3NhbC5kaXNtaXNzU3RyYXRlZ3kgPSBkaXNtaXNzU3RyYXRlZ3k7XG4gICAgdGhpcy5vbkRhdGFDaGFuZ2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGVydHMgaW4gZ3JvdXAgZHVlIHRvIGRpc21pc3NhbCBkaXNtaXNzU3RyYXRlZ3kgYW5kIHNldHMgdXNlckRpc21pc3NhbENob2ljZSBwcm9wZXJ0eS5cbiAgICogSWYgZ3JvdXAgaGFzIGRpc21pc3NhbCBzdHJhdGVneSBkZWNsYXJlZCBhcyBURU1QT1JBUllfT1JfUEVSTUFORU5ULCBpdHMgdXNlckRpc21pc3NhbENob2ljZSBwcm9wZXJ0eSBjYW4gYmUgc2V0IHRvXG4gICAqIFJFTUlORF9BTExPV0VEIG9yIFJFTUlORF9ESVNBTExPV0VEIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QWxlcnRUeXBlfSBhbGVydFR5cGUgVHlwZSBvZiBhbGVydHMgZ3JvdXAgdGhhdCBzaG91bGQgYmUgZGlzbWlzc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBlcm1hbmVudCBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRpc21pc3NhbCBvZiBhbGVydHMgb2YgYSBnaXZlbiB0eXBlIGlzIHBlcm1hbmVudC5cbiAgICpcbiAgICovXG4gIGRpc21pc3NBbGVydEdyb3VwKGFsZXJ0VHlwZTogQWxlcnRUeXBlLCBpc1Blcm1hbmVudCA9IGZhbHNlKSB7XG4gICAgY29uc3QgZ3JvdXBEaXNtaXNzU3RyYXRlZ3kgPVxuICAgICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5nZXQoYWxlcnRUeXBlKS5hbGVydERpc21pc3NhbC5kaXNtaXNzU3RyYXRlZ3k7XG5cbiAgICBzd2l0Y2ggKGdyb3VwRGlzbWlzc1N0cmF0ZWd5KSB7XG4gICAgICBjYXNlIERpc21pc3NBbGVydFN0cmF0ZWd5Lk5PTkU6XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuVEVNUE9SQVJZOlxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydFR5cGUpLmFsZXJ0RGlzbWlzc2FsLnVzZXJEaXNtaXNzYWxDaG9pY2UgPVxuICAgICAgICAgICdSRU1JTkRfQUxMT1dFRCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEaXNtaXNzQWxlcnRTdHJhdGVneS5URU1QT1JBUllfT1JfUEVSTUFORU5UOlxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydFR5cGUpLmFsZXJ0RGlzbWlzc2FsLnVzZXJEaXNtaXNzYWxDaG9pY2UgPSBpc1Blcm1hbmVudFxuICAgICAgICAgID8gJ1JFTUlORF9ESVNBTExPV0VEJ1xuICAgICAgICAgIDogJ1JFTUlORF9BTExPV0VEJztcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyKGFsZXJ0VHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQWxlcnQgYWdncmVnYXRvciBhcyBhIHdpZGdldCBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHNlcmlhbGl6ZWQgYW5kIHN0b3JlZCBpbiBkYXRhYmFzZS5cbiAgICovXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0QWxlcnRzR3JvdXBzKCkge1xuICAgIHRoaXMuYWdncmVnYXRlZEFsZXJ0c0RhdGEgPSBuZXcgTWFwKFxuICAgICAgV0lER0VUX0FMRVJUU19PUkRFUi5tYXAoYWxlcnRUeXBlID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBhbGVydFR5cGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxlcnRzOiBbXSxcbiAgICAgICAgICAgIGFsZXJ0RGlzbWlzc2FsOiB7IGRpc21pc3NTdHJhdGVneTogRGlzbWlzc0FsZXJ0U3RyYXRlZ3kuTk9ORSB9XG4gICAgICAgICAgfSBhcyBBbGVydEdyb3VwRGF0YVxuICAgICAgICBdO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBbGVydHMoYWxlcnRzOiBEeW5hbWljQ29tcG9uZW50QWxlcnRbXSkge1xuICAgIGFsZXJ0cy5mb3JFYWNoKGFsZXJ0ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5nZXQoYWxlcnQudHlwZSkuYWxlcnREaXNtaXNzYWwudXNlckRpc21pc3NhbENob2ljZSA9PT1cbiAgICAgICAgJ1JFTUlORF9ESVNBTExPV0VEJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5nZXQoYWxlcnQudHlwZSkpIHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YS5nZXQoYWxlcnQudHlwZSkuYWxlcnRzID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZWRBbGVydHNEYXRhLmdldChhbGVydC50eXBlKS5hbGVydHMucHVzaChhbGVydCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkRhdGFDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRGF0YUNoYW5nZWQoKSB7XG4gICAgdGhpcy5hbGVydEdyb3VwcyA9IFsuLi5jbG9uZURlZXAodGhpcy5hZ2dyZWdhdGVkQWxlcnRzRGF0YSldLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgdHlwZToga2V5LFxuICAgICAgdmFsdWVcbiAgICB9KSk7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy5hbnlBbGVydEV4aXN0c1N1YmplY3QubmV4dCh0aGlzLmFsZXJ0R3JvdXBzLnNvbWUoKHsgdmFsdWUgfSkgPT4gISF2YWx1ZS5hbGVydHMubGVuZ3RoKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==