{"version":3,"file":"c8y-ngx-components-widgets-implementations-alarms.mjs","sources":["../../widgets/implementations/alarms/alarm-list-widget.model.ts","../../widgets/implementations/alarms/alarm-widget.service.ts","../../widgets/implementations/alarms/severity-icon.pipe.ts","../../widgets/implementations/alarms/sorting-description-popover-message.pipe.ts","../../widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.ts","../../widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.html","../../widgets/implementations/alarms/alarm-widget-alarms-reload.component.ts","../../widgets/implementations/alarms/alarm-widget-alarms-reload.component.html","../../widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.ts","../../widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.html","../../widgets/implementations/alarms/alarms-widget.module.ts","../../widgets/implementations/alarms/c8y-ngx-components-widgets-implementations-alarms.ts"],"sourcesContent":["import { gettext, GlobalAutoRefreshWidgetConfig, DateTimeContext } from '@c8y/ngx-components';\nimport { SeverityFilter, AlarmStatusSettings } from '@c8y/client';\nimport { AlarmFilterInterval } from '@c8y/ngx-components/interval-picker';\n\nexport const ALARM_ORDER_VALUES = {\n  BY_ACTIVE: 'BY_ACTIVE',\n  BY_DATE_ASCENDING: 'BY_DATE_ASCENDING',\n  BY_DATE_DESCENDING: 'BY_DATE_DESCENDING',\n  BY_SEVERITY: 'BY_SEVERITY'\n} as const;\n\nexport const ALARM_ORDER_LABELS = {\n  BY_ACTIVE: gettext('By active status') as 'By active status',\n  BY_DATE_ASCENDING: gettext('By date (ascending)') as 'By date (ascending)',\n  BY_DATE_DESCENDING: gettext('By date (descending)') as 'By date (descending)',\n  BY_SEVERITY: gettext('By severity') as 'By severity'\n} as const;\n\nexport type AlarmOrderType = keyof typeof ALARM_ORDER_VALUES;\n\nexport type SelectedDevice = { id: string; name: string };\n\nexport const ASSET_ALARMS_WIDGET_ID = 'Asset Alarms';\n\nexport const RECENT_ALARMS_WIDGET_ID = 'Recent Alarms';\n\nexport type AlarmListRefreshOption = 'none' | 'interval' | 'global-interval';\n\nexport const GLOBAL_INTERVAL_OPTION: AlarmListRefreshOption = 'global-interval';\n\nexport type LegacyAlarmListConfig = {\n  realtime: boolean;\n  options: {\n    severity: SeverityFilter;\n    types: string[];\n    orderMode: string;\n    device: string;\n    status: AlarmStatusSettings;\n  };\n  device?: {\n    name: string;\n    id: string;\n  };\n};\n\nexport enum DATE_SELECTION {\n  CONFIG = 'config',\n  VIEW_AND_CONFIG = 'view_and_config',\n  DASHBOARD_CONTEXT = 'dashboard_context'\n}\nexport interface AlarmListWidgetConfig extends GlobalAutoRefreshWidgetConfig {\n  order: AlarmOrderType;\n  isRealtime?: boolean;\n  showAlarmsForChildren?: boolean;\n  refreshInterval?: number;\n  isAutoRefreshEnabled?: boolean;\n  refreshOption?: AlarmListRefreshOption;\n  device?: SelectedDevice;\n  severities: SeverityFilter;\n  status: AlarmStatusSettings;\n  types?: string[];\n  dateFilter?: DateTimeContext;\n  widgetInstanceGlobalTimeContext?: boolean;\n  displayDateSelection?: boolean;\n  interval?: AlarmFilterInterval['id'];\n  displaySettings?: {\n    globalTimeContext: boolean;\n    globalAutoRefreshContext: boolean;\n  };\n}\n","import { Injectable } from '@angular/core';\nimport {\n  AlarmQueryFilter,\n  AlarmStatusSettings,\n  AlarmStatus,\n  IAlarm,\n  Severity,\n  SeverityFilter,\n  SEVERITY_LABELS\n} from '@c8y/client';\n\nimport { SeveritySettings, SeverityType } from '@c8y/client';\nimport { AlarmsViewService } from '@c8y/ngx-components/alarms';\nimport {\n  ALARM_ORDER_VALUES,\n  AlarmListWidgetConfig,\n  AlarmOrderType,\n  LegacyAlarmListConfig,\n  RECENT_ALARMS_WIDGET_ID\n} from './alarm-list-widget.model';\n\nexport const DEFAULT_PAGE_SIZE = 20;\n\n@Injectable({ providedIn: 'root' })\nexport class AlarmWidgetService {\n  constructor(private alarmsViewService: AlarmsViewService) {}\n\n  /**\n   * Checks if the provided data follows the LegacyAlarmConfig structure.\n   *\n   * This function determines if a given data object is an instance of LegacyAlarmConfig\n   * by checking for the presence of the 'options' property.\n   *\n   * @param data - The data object to be checked.\n   * @returns - Returns `true` if the data object is a LegacyAlarmConfig, otherwise `false`.\n   */\n  isOldAlarmConfigStructure(\n    data: LegacyAlarmListConfig | AlarmListWidgetConfig\n  ): data is LegacyAlarmListConfig {\n    return data !== null && typeof data === 'object' && 'options' in data;\n  }\n\n  /**\n   * Creates predefined widget configuration object.\n   *\n   * This method creates a new configuration object based on\n   * a widgets ID (that determines if is a legacy Recent or Critical alarms widget).\n   *\n   * @param isIntervalRefresh - determines a type of a refresh.\n   * @param widgetId - determines if a config should be done for Recent or Critical alarms widget.\n   * @returns The new, predefined configuration object.\n   */\n  getPredefinedConfiguration(isIntervalRefresh: boolean, widgetId?: string): AlarmListWidgetConfig {\n    return {\n      order: ALARM_ORDER_VALUES.BY_ACTIVE,\n      severities:\n        widgetId === RECENT_ALARMS_WIDGET_ID\n          ? ({\n              [Severity.CRITICAL]: true,\n              [Severity.MAJOR]: true,\n              [Severity.MINOR]: true,\n              [Severity.WARNING]: true\n            } as SeveritySettings)\n          : ({\n              [Severity.CRITICAL]: true,\n              [Severity.MAJOR]: false,\n              [Severity.MINOR]: false,\n              [Severity.WARNING]: false\n            } as SeveritySettings),\n      status:\n        widgetId === RECENT_ALARMS_WIDGET_ID\n          ? ({\n              [AlarmStatus.ACKNOWLEDGED]: true,\n              [AlarmStatus.ACTIVE]: true,\n              [AlarmStatus.CLEARED]: true\n            } as AlarmStatusSettings)\n          : ({\n              [AlarmStatus.ACKNOWLEDGED]: false,\n              [AlarmStatus.ACTIVE]: true,\n              [AlarmStatus.CLEARED]: false\n            } as AlarmStatusSettings),\n      types: [''],\n      isRealtime: !isIntervalRefresh,\n      isAutoRefreshEnabled: true,\n      refreshInterval: isIntervalRefresh ? this.alarmsViewService.DEFAULT_INTERVAL_VALUE : undefined\n    };\n  }\n\n  /**\n   * Transforms a LegacyAlarmConfig object into an AlarmListWidgetConfig object.\n   *\n   * This function maps the properties from an old configuration structure (LegacyAlarmConfig)\n   * to a new configuration structure (AlarmListWidgetConfig).\n   *\n   * @param oldConfig - The old configuration object to be transformed.\n   * @returns - The new configuration object mapped from the old one.\n   */\n  mapToNewConfigStructure(\n    oldConfig: LegacyAlarmListConfig,\n    isIntervalRefresh: boolean\n  ): AlarmListWidgetConfig {\n    const order: AlarmOrderType =\n      oldConfig.options.orderMode === 'ACTIVE_FIRST'\n        ? ALARM_ORDER_VALUES.BY_ACTIVE\n        : ALARM_ORDER_VALUES.BY_SEVERITY;\n\n    if (!this.isContainingAllSeverityTypes(oldConfig.options.severity)) {\n      oldConfig.options.severity = this.addAllMissingSeverityTypes(oldConfig.options.severity);\n    }\n\n    return {\n      order: order,\n      isRealtime: oldConfig.realtime,\n      device: oldConfig.device,\n      showAlarmsForChildren: false,\n      severities: oldConfig.options.severity,\n      status: this.allValuesFalse(oldConfig.options.status)\n        ? ({\n            [AlarmStatus.ACKNOWLEDGED]: true,\n            [AlarmStatus.ACTIVE]: true,\n            [AlarmStatus.CLEARED]: true\n          } as AlarmStatusSettings)\n        : oldConfig.options.status,\n      types: oldConfig.options.types?.length ? oldConfig.options.types : [''],\n      isAutoRefreshEnabled: true,\n      refreshInterval: isIntervalRefresh ? this.alarmsViewService.DEFAULT_INTERVAL_VALUE : undefined\n    };\n  }\n\n  /**\n   * Checks if the provided severity object contains all the predefined severity types.\n   *\n   * @param severity - A record object where keys are severity type strings and values are boolean.\n   *                 - This object is checked against the predefined severity types.\n   * @returns `true` if all predefined severity types are present in the severity object; otherwise, `false`.\n   */\n  isContainingAllSeverityTypes(severity: SeverityFilter): boolean {\n    return Object.keys(SEVERITY_LABELS).every(severityType => severityType in severity);\n  }\n\n  /**\n   * Adds any missing severity types to the provided severity object with a default value of `false`.\n   *\n   * @param severity - A record object where keys are severity type strings and values are boolean.\n   *                 - Missing severity types will be added to this object.\n   * @returns The modified severity object, which includes all predefined severity types, adding any\n   *          that were missing with a value of `false`.\n   */\n  addAllMissingSeverityTypes(severity: SeverityFilter): SeverityFilter {\n    Object.keys(SEVERITY_LABELS).forEach(severityType => {\n      if (!(severityType in severity)) {\n        severity[severityType] = false;\n      }\n    });\n    return severity;\n  }\n\n  /**\n   * Maps an AlarmListWidgetConfig object to an AlarmQueryFilter.\n   *\n   * This function converts the provided AlarmListWidgetConfig into a format suitable for querying alarms.\n   *\n   * @param config - The configuration object for the alarm list widget.\n   * @param pageSize - Optional number specifying the size of the pages to be returned in the query.\n   * @returns - The query filter object constructed from the provided configuration.\n   */\n  mapConfigToQueryFilter(config: AlarmListWidgetConfig, pageSize?: number): AlarmQueryFilter {\n    const filter: AlarmQueryFilter = {\n      pageSize: pageSize || DEFAULT_PAGE_SIZE,\n      query: this.getOrderParameters(config.order),\n      severity: this.extractFilterParams(config.severities || {}),\n      status: this.extractFilterParams(config.status || {}),\n      type: (config.types || []).join(','),\n      withTotalPages: true\n    };\n    if (config.dateFilter) {\n      filter.lastUpdatedFrom =\n        typeof config.dateFilter[0] === 'string'\n          ? config.dateFilter[0]\n          : config.dateFilter[0].toISOString();\n      filter.createdTo =\n        typeof config.dateFilter[1] === 'string'\n          ? config.dateFilter[1]\n          : config.dateFilter[1].toISOString();\n    }\n    if (config.device) {\n      filter.source = config.device.id;\n      filter.withSourceAssets = true;\n      filter.withSourceDevices = true;\n      filter.withSourceAssets = config.showAlarmsForChildren ?? true;\n      filter.withSourceDevices = config.showAlarmsForChildren ?? true;\n    }\n    return filter;\n  }\n\n  /**\n   * Extracts and concatenates filter parameters from a given object.\n   *\n   * This function takes an object containing filter settings (either SeverityFilter\n   * or AlarmStatusSettings) and returns a string of all keys where the corresponding value is true.\n   * If the object is empty or null, an empty string is returned.\n   *\n   * @param obj - The object containing filter settings.\n   * @returns - A concatenated string of keys with true values, separated by commas.\n   */\n  extractFilterParams(obj: SeverityFilter | AlarmStatusSettings): string {\n    if (!obj) {\n      return '';\n    }\n    return Object.entries(obj)\n      .filter(([, value]) => value)\n      .map(([key]) => key)\n      .join(',');\n  }\n\n  /**\n   * Determines if an incoming real-time alarm has a different status than an existing alarm.\n   *\n   * This function checks if the provided incoming real-time alarm's status differs\n   * from that of an existing alarm with the same ID in the given array of alarms.\n   *\n   * @param existingAlarms - The array of existing alarms.\n   * @param incomingRealtimeAlarm - The incoming real-time alarm to check.\n   * @returns - True if the existing alarm's status has changed, otherwise false.\n   */\n  hasExistingAlarmChangedStatus(existingAlarms: IAlarm[], incomingRealtimeAlarm: IAlarm): boolean {\n    const existingAlarm = existingAlarms.find(alarm => alarm.id === incomingRealtimeAlarm.id);\n    return !!existingAlarm && existingAlarm.status !== incomingRealtimeAlarm.status;\n  }\n\n  /**\n   * Filters alarms based on their status, severity, and type.\n   *\n   * This method determines if a given alarm, identified either by a numeric ID or an `IAlarm` object,\n   * matches specific criteria defined in `alarms` and optionally `config`.\n   *\n   * @param alarm - The alarm to check, represented either by a numeric ID or an `IAlarm` object.\n   * @param alarms - An array of `IAlarm` objects against which the given alarm is evaluated.\n   * @param config - Optional. Configuration for the alarm list widget, used to define additional\n   *                 filtering criteria.\n   *\n   * @returns `true` if the alarm matches the specified criteria; otherwise, `false`.\n   *          If `alarm` is a number, it always returns `false`.\n   *          If `config` is not provided, it uses a legacy filter for critical alarms.\n   *\n   * @remarks\n   * - When `alarm` is a numeric ID, the function returns `false` as it cannot match against type and severity.\n   * - If `config` is not provided, the function assumes a legacy scenario for filtering all critical alarms.\n   */\n  filterAlarmsByStatusSeverityAndType(\n    alarm: number | IAlarm,\n    alarms: IAlarm[],\n    config?: AlarmListWidgetConfig\n  ): boolean {\n    if (typeof alarm === 'number') {\n      return false;\n    }\n\n    return this.isAlarmMatchedByConfig(alarm, alarms, config);\n  }\n\n  /**\n   * Determines if all values in the given object are false.\n   *\n   * This function checks every value in the provided object to see if they are all false.\n   *\n   * @param obj - An object with boolean values.\n   * @returns - Returns `true` if all values in the object are false, otherwise `false`.\n   */\n  allValuesFalse(obj: { [key: string]: boolean }): boolean {\n    return Object.values(obj).every(value => !value);\n  }\n\n  /**\n   * Constructs a string of order parameters for a query based on the specified alarm order.\n   *\n   * This function takes an alarm order and maps it to a corresponding set of order parameters.\n   * It supports different ordering types, such as BY_ACTIVE, BY_SEVERITY, and BY_DATE_ASCENDING.\n   * The order parameters are used to construct a query string that determines the order\n   * in which alarms are retrieved or displayed.\n   *\n   * @param order - The specified order for sorting alarms (e.g., BY_ACTIVE).\n   * @returns - A string of order parameters to be used in a query, or an empty string if the order type is unrecognized.\n   */\n  getOrderParameters(order: AlarmOrderType): string {\n    let orderParams: string[];\n\n    switch (order) {\n      case ALARM_ORDER_VALUES.BY_ACTIVE:\n        orderParams = ['status asc', 'severity asc', 'time.date desc', 'text asc'];\n        return this.buildOrderParameters(orderParams);\n      case ALARM_ORDER_VALUES.BY_SEVERITY:\n        orderParams = ['severity asc', 'time.date desc', 'text asc'];\n        return this.buildOrderParameters(orderParams);\n      case ALARM_ORDER_VALUES.BY_DATE_ASCENDING:\n        orderParams = ['time.date asc', 'text asc'];\n        return this.buildOrderParameters(orderParams);\n      default:\n        orderParams = ['time.date desc', 'text asc'];\n        return this.buildOrderParameters(orderParams);\n    }\n  }\n\n  /**\n   * Determines if an alarm is matched by the specified widget configuration.\n   *\n   * This function evaluates whether a given alarm should be included based on the severity,\n   * status, and type filters defined in the AlarmListWidgetConfig. It checks if the alarm's\n   * severity and status match the configuration settings and if the alarm's type is included\n   * in the configuration's types (if specified).\n   *\n   * @ignore\n   * @param alarm - The alarm to evaluate.\n   * @param alarms - An array of existing alarms, used for status matching.\n   * @param config - The configuration settings to match against.\n   * @returns - Returns `true` if the alarm matches the configuration criteria; otherwise, `false`.\n   */\n  isAlarmMatchedByConfig(alarm: IAlarm, alarms: IAlarm[], config: AlarmListWidgetConfig): boolean {\n    const isSeverityMatched = this.isSeverityMatching(alarm.severity, config);\n    const isStatusMatched = this.isStatusMatching(alarm, alarms, config);\n    const isTypeMatched = this.isTypesMatching(config, alarm);\n\n    return isSeverityMatched && isStatusMatched && isTypeMatched;\n  }\n  /**\n   * Checks if the severity of an alarm matches the configuration setting.\n   *\n   * This function determines whether the severity of an alarm is included in the\n   * severity settings defined in the AlarmListWidgetConfig.\n   *\n   * @ignore\n   * @param severity - The severity of the alarm to check.\n   * @param config - The configuration with severity settings.\n   * @returns - Returns `true` if the alarm's severity matches the configuration; otherwise, `false`.\n   */\n  isSeverityMatching(severity: SeverityType, config: AlarmListWidgetConfig): boolean {\n    return !!config.severities[severity];\n  }\n\n  /**\n   * Evaluates if the status of an alarm matches the configuration setting or has changed.\n   *\n   * This function checks if the status of an alarm is included in the status settings defined in\n   * the AlarmListWidgetConfig, or if the alarm's status has changed based on the existing alarms.\n   *\n   * @ignore\n   * @param alarm - The alarm whose status is to be evaluated.\n   * @param alarms - An array of existing alarms to compare against for status changes.\n   * @param config - The configuration with status settings.\n   * @returns - Returns `true` if the alarm's status matches or has changed as per the configuration; otherwise, `false`.\n   */\n  isStatusMatching(alarm: IAlarm, alarms: IAlarm[], config: AlarmListWidgetConfig): boolean {\n    return !!config.status[alarm.status] || this.hasExistingAlarmChangedStatus(alarms, alarm);\n  }\n\n  /**\n   * Checks if the configuration's types array contains only empty string or includes a specific alarm type.\n   *\n   * @param config - The configuration object with a `types` property.\n   * @param alarm - The alarm object with a `type` property to check against the config's types.\n   * @returns `true` if the config's types array contains only empty string or includes the alarm's type, otherwise `false`.\n   */\n  isTypesMatching(config: AlarmListWidgetConfig, alarm: IAlarm): boolean {\n    return Array.isArray(config.types) && config.types.length === 1 && config.types[0] === ''\n      ? true\n      : config.types?.includes(alarm.type) ?? false;\n  }\n\n  /**\n   * Constructs a query string from an array of order parameters.\n   *\n   * This function takes an array of ordering parameters and constructs a query string\n   * for use in alarm ordering queries. The parameters are concatenated into a single string,\n   * prefixed with '$orderby='.\n   *\n   * @ignore\n   * @private\n   * @param orderParams - The order parameters to be included in the query.\n   * @returns - A query string representing the order parameters.\n   */\n  private buildOrderParameters(orderParams: string[]): string {\n    return `$orderby=${orderParams.join(',')}`;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Severity } from '@c8y/client';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\ninterface SeverityIcon {\n  c8yIcon?: string;\n  iconClass: string;\n  severityClass?: string;\n}\n\n@Pipe({\n  name: 'severityIcon'\n})\nexport class SeverityIconPipe implements PipeTransform {\n  transform(severity: string): SeverityIcon {\n    let severityClassName = '';\n    let iconClassName: SupportedIconsSuggestions = '';\n\n    switch (severity) {\n      case Severity.CRITICAL:\n        severityClassName = 'critical';\n        iconClassName = 'exclamation-circle';\n        break;\n      case Severity.MAJOR:\n        severityClassName = 'major';\n        iconClassName = 'warning';\n        break;\n      case Severity.MINOR:\n        severityClassName = 'minor';\n        iconClassName = 'high-priority';\n        break;\n      case Severity.WARNING:\n        severityClassName = 'warning';\n        iconClassName = 'circle';\n        break;\n      default:\n        return { iconClass: '', severityClass: '' };\n    }\n\n    return {\n      iconClass: `status icon-lg stroked-icon dlt-c8y-icon-${iconClassName} ${severityClassName}`,\n      c8yIcon: severityClassName\n    };\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { ALARM_ORDER_VALUES, AlarmOrderType } from './alarm-list-widget.model';\n\n@Pipe({\n  name: 'sortingDescriptionPopoverMessage'\n})\nexport class SortingDescriptionPopoverMessagePipe implements PipeTransform {\n  transform(order: AlarmOrderType): string {\n    switch (order) {\n      case ALARM_ORDER_VALUES.BY_ACTIVE:\n        return gettext('Order alarms by active status, severity, and time.');\n      case ALARM_ORDER_VALUES.BY_DATE_ASCENDING:\n        return gettext('Order alarms by time, starting with the oldest ones.');\n      case ALARM_ORDER_VALUES.BY_DATE_DESCENDING:\n        return gettext('Order alarms by time, starting with the latest ones.');\n      case ALARM_ORDER_VALUES.BY_SEVERITY:\n        return gettext('Order alarms by severity and time.');\n      default:\n        return '';\n    }\n  }\n}\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport {\n  ControlContainer,\n  FormArray,\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  NgForm,\n  ValidatorFn\n} from '@angular/forms';\nimport {\n  ALARM_STATUS_LABELS,\n  AlarmStatus,\n  AlarmService,\n  IAlarm,\n  IResultList,\n  SEVERITY_LABELS\n} from '@c8y/client';\nimport { AlertService, OnBeforeSave, gettext } from '@c8y/ngx-components';\nimport {\n  ALARM_STATUS_ICON,\n  AlarmsViewService,\n  DEFAULT_SEVERITY_VALUES,\n  DEFAULT_STATUS_VALUES\n} from '@c8y/ngx-components/alarms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { isEqual, omit } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { debounceTime, pairwise, startWith } from 'rxjs/operators';\nimport {\n  ALARM_ORDER_LABELS,\n  ALARM_ORDER_VALUES,\n  AlarmListWidgetConfig,\n  AlarmOrderType,\n  DATE_SELECTION,\n  AlarmListRefreshOption,\n  GLOBAL_INTERVAL_OPTION\n} from '../alarm-list-widget.model';\nimport { AlarmWidgetService, DEFAULT_PAGE_SIZE } from '../alarm-widget.service';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\n@Component({\n  selector: 'c8y-alarm-list-widget-config',\n  templateUrl: './alarm-list-widget-config.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class AlarmListWidgetConfigComponent implements OnInit, OnChanges, OnBeforeSave, OnDestroy {\n  @Input() config: AlarmListWidgetConfig;\n\n  readonly REFRESH_INTERVAL_IN_MILLISECONDS = this.alarmsViewService.DEFAULT_INTERVAL_VALUES;\n  readonly SEVERITY_LABELS = SEVERITY_LABELS;\n  readonly STATUS_LABELS = ALARM_STATUS_LABELS;\n\n  readonly ACKNOWLEDGE_STATUS_VALUE = AlarmStatus.ACKNOWLEDGED;\n  readonly CLEARED_STATUS_VALUE = AlarmStatus.CLEARED;\n\n  readonly BELL_SLASH_ICON = ALARM_STATUS_ICON.BELL_SLASH;\n  readonly BELL_ICON = ALARM_STATUS_ICON.BELL;\n  readonly C8Y_ALERT_IDLE_ICON = ALARM_STATUS_ICON.ALERT_IDLE;\n\n  readonly ALARM_ORDER_LABELS = ALARM_ORDER_LABELS;\n  readonly GLOBAL_INTERVAL_OPTION = GLOBAL_INTERVAL_OPTION;\n\n  alarms$: BehaviorSubject<IResultList<IAlarm> | null> = new BehaviorSubject(null);\n  formGroup: ReturnType<AlarmListWidgetConfigComponent['createForm']>;\n\n  isLoading: boolean;\n  orderList = Object.values(ALARM_ORDER_VALUES);\n  refreshTypePopoverMessage: string;\n  refreshTypeTitle: string;\n  severityList = Object.keys(SEVERITY_LABELS);\n  showDateFilter = true;\n  DATE_SELECTION = DATE_SELECTION;\n  dateSelection: DATE_SELECTION | undefined;\n  dateSelectionHelp = this.translateService.instant(\n    gettext(`Choose how to select a date range, the available options are:\n  <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n    <li>\n      <b>Widget configuration:</b>\n      restricts the date selection only to the widget configuration\n    </li>\n    <li>\n      <b>Widget and widget configuration:</b>\n      restricts the date selection to the widget view and widget configuration only\n    </li>\n    <li>\n      <b>Dashboard time range:</b>\n      restricts date selection to the global dashboard configuration only\n    </li>\n  </ul>`)\n  );\n  refreshOption: AlarmListRefreshOption;\n  /**\n   * Order does matter.\n   */\n  statusList = [AlarmStatus.ACTIVE, AlarmStatus.ACKNOWLEDGED, AlarmStatus.CLEARED];\n\n  private formChangesSubscription: Subscription;\n\n  constructor(\n    private alarmListWidgetService: AlarmWidgetService,\n    private alarmService: AlarmService,\n    private alarmsViewService: AlarmsViewService,\n    private alertService: AlertService,\n    private form: NgForm,\n    private formBuilder: FormBuilder,\n    private translateService: TranslateService\n  ) {}\n\n  async ngOnInit(): Promise<void> {\n    this.refreshTypeTitle = this.config.isRealtime\n      ? this.translateService.instant(gettext('Realtime'))\n      : this.translateService.instant(gettext('Auto refresh'));\n\n    this.refreshTypePopoverMessage = this.config.isRealtime\n      ? this.translateService.instant(gettext('Change the default state of realtime refresh.'))\n      : this.translateService.instant(\n          gettext('Change the state of interval automatic refresh and set the refresh frequency.')\n        );\n\n    this.initializeForm();\n\n    if (!this.config.isRealtime) {\n      this.updateConfigBasedOnRefreshOption();\n    }\n    this.config.isRealtime = !this.alarmsViewService.isIntervalRefresh();\n\n    const isWidgetWithExistingConfig =\n      this.config.order && this.config.severities && this.config.status;\n\n    if (isWidgetWithExistingConfig) {\n      await this.getAlarms(this.config);\n    } else {\n      /** Used when creating a new widget */\n      await this.getAlarms(this.formGroup.value as AlarmListWidgetConfig);\n    }\n    this.handlePreviewSubscription();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.formGroup && changes.config) {\n      this.formGroup.get('device').patchValue(this.config.device);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.formChangesSubscription?.unsubscribe();\n  }\n\n  onBeforeSave(config?: AlarmListWidgetConfig): boolean | Promise<boolean> | Observable<boolean> {\n    const { types } = this.formGroup.value;\n    if (types.length > 1) {\n      const stringTypes = types as string[];\n\n      if (this.isContainingOnlyEmptyTypes(stringTypes)) {\n        this.formGroup.value.types = [''];\n      } else {\n        this.formGroup.value.types = this.filterEmptyTypes(stringTypes);\n      }\n    }\n\n    /**\n     * Applies only to converted legacy Alarm list widget\n     */\n    if (config['options']) {\n      delete config['options'];\n    }\n\n    Object.assign(config, this.formGroup.value);\n    return true;\n  }\n\n  onDateFilterChange(event: { selectedDates: [Date, Date]; interval: Interval['id'] }) {\n    this.formGroup.patchValue({\n      dateFilter: event.selectedDates,\n      interval: event.interval\n    });\n  }\n\n  removeType(index: number): void {\n    if (this.types.controls.length === 1) {\n      this.formGroup.get('types').reset();\n    } else {\n      this.types.removeAt(index);\n    }\n  }\n\n  addType(): void {\n    this.types.push(this.formBuilder.control(''));\n  }\n\n  updateRefreshOption() {\n    this.config.refreshOption = this.refreshOption;\n    this.formGroup.controls.refreshOption.setValue(this.refreshOption);\n    const isGlobalInterval = this.refreshOption === GLOBAL_INTERVAL_OPTION;\n\n    this.config.widgetInstanceGlobalAutoRefreshContext = isGlobalInterval;\n    this.formGroup.controls.widgetInstanceGlobalAutoRefreshContext.setValue(isGlobalInterval);\n\n    this.updateConfigBasedOnRefreshOption();\n  }\n\n  get types(): FormArray {\n    return this.formGroup.get('types') as FormArray;\n  }\n\n  dateSelectionChange(dateSelection: DATE_SELECTION): void {\n    if (dateSelection === DATE_SELECTION.CONFIG) {\n      this.showDateFilter = true;\n      this.formGroup.patchValue({\n        displayDateSelection: false,\n        widgetInstanceGlobalTimeContext: false\n      });\n    } else if (dateSelection === DATE_SELECTION.VIEW_AND_CONFIG) {\n      this.showDateFilter = true;\n      this.formGroup.patchValue({\n        displayDateSelection: true,\n        widgetInstanceGlobalTimeContext: false\n      });\n    } else if (dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT) {\n      this.showDateFilter = false;\n      this.formGroup.patchValue({\n        displayDateSelection: false,\n        widgetInstanceGlobalTimeContext: true\n      });\n    }\n  }\n\n  private filterEmptyTypes(types: (string | null)[]): string[] {\n    return types.filter((element: string | null) => element !== '' && element !== null);\n  }\n\n  private isContainingOnlyEmptyTypes(types: (string | null)[]): boolean {\n    return types.every((element: string | null) => element === '' || element === null);\n  }\n\n  private async getAlarms(config: AlarmListWidgetConfig): Promise<void> {\n    try {\n      this.isLoading = true;\n      const result: IResultList<IAlarm> = await this.alarmService.list(\n        this.alarmListWidgetService.mapConfigToQueryFilter(config, DEFAULT_PAGE_SIZE)\n      );\n\n      this.alarms$.next(result);\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  private initializeForm(): void {\n    this.formGroup = this.createForm();\n    this.form.form.addControl('config', this.formGroup);\n    this.formGroup.patchValue(this.config);\n    this.initializeTypes(this.config.types);\n    this.initDateSelection();\n    this.refreshOption = this.config.refreshOption ?? 'interval';\n  }\n\n  private createForm() {\n    return this.formBuilder.group({\n      status: this.formBuilder.group(DEFAULT_STATUS_VALUES, {\n        validators: this.minSelectedCheckboxes(1)\n      }),\n      showAlarmsForChildren: true,\n      types: this.formBuilder.array([]),\n      severities: this.formBuilder.group(DEFAULT_SEVERITY_VALUES, {\n        validators: this.minSelectedCheckboxes(1)\n      }),\n      order: ALARM_ORDER_VALUES.BY_ACTIVE as AlarmOrderType,\n      isAutoRefreshEnabled: [true],\n      refreshInterval: !this.config.isRealtime\n        ? new FormControl({\n            value: this.alarmsViewService.DEFAULT_INTERVAL_VALUE,\n            disabled: this.isAutorefershDisabled()\n          })\n        : new FormControl(undefined),\n      device: this.config.device ? new FormControl(this.config.device) : new FormControl(undefined),\n      dateFilter: this.config.dateFilter\n        ? new FormControl(this.config.dateFilter)\n        : new FormControl([new Date(0), new Date()]),\n      displayDateSelection: this.config.displayDateSelection || false,\n      widgetInstanceGlobalTimeContext: this.config.widgetInstanceGlobalTimeContext || false,\n      interval: this.config.interval || 'none',\n      refreshOption: this.config.isRealtime ? null : 'interval',\n      widgetInstanceGlobalAutoRefreshContext: this.config.refreshOption === GLOBAL_INTERVAL_OPTION\n    });\n  }\n\n  private isAutorefershDisabled(): boolean {\n    /**This check is required on widget creation */\n    if (this.config.isAutoRefreshEnabled === undefined) {\n      return false;\n    }\n\n    return !this.config.isAutoRefreshEnabled;\n  }\n\n  private minSelectedCheckboxes(min = 1): ValidatorFn {\n    const validator: ValidatorFn = (formGroup: FormGroup) => {\n      const totalSelected = Object.values(formGroup.controls).reduce(\n        (prev, next) => (next.value ? prev + next.value : prev),\n        0\n      );\n\n      return totalSelected >= min ? null : { required: true };\n    };\n\n    return validator;\n  }\n\n  private initializeTypes(types: string[]): void {\n    const typesControl = this.formGroup.get('types') as FormArray;\n    if (types) {\n      types.forEach(type => {\n        typesControl.push(this.formBuilder.control(type));\n      });\n    } else {\n      typesControl.push(this.formBuilder.control(''));\n    }\n  }\n\n  private initDateSelection(): void {\n    this.dateSelection = this.config?.widgetInstanceGlobalTimeContext\n      ? DATE_SELECTION.DASHBOARD_CONTEXT\n      : this.config?.displayDateSelection\n        ? DATE_SELECTION.VIEW_AND_CONFIG\n        : DATE_SELECTION.CONFIG;\n\n    this.dateSelectionChange(this.dateSelection);\n\n    const interval = this.config?.interval ?? 'none';\n    if (interval === 'none' || interval === 'custom') {\n      return;\n    }\n\n    this.config.dateFilter = this.alarmsViewService.getDateTimeContextByInterval(\n      this.config.interval\n    );\n    this.formGroup.patchValue({\n      dateFilter: this.config.dateFilter\n    });\n  }\n\n  /**\n   * Initializes and handles the form change subscription for the Alarm list preview at Widget's configuration.\n   *\n   * This method subscribes to form value changes with a debounce time of 500ms.\n   * It compares the previous and current form values to determine if the changes are relevant.\n   * If the only change is in the `isAutoRefreshEnabled` property, the change is ignored.\n   */\n  private handlePreviewSubscription(): void {\n    this.formChangesSubscription = this.formGroup.valueChanges\n      .pipe(startWith(this.formGroup.value), pairwise(), debounceTime(500))\n      .subscribe(([previousConfig, currentConfig]: [unknown, unknown]) => {\n        const typedPreviousConfig: AlarmListWidgetConfig = previousConfig as AlarmListWidgetConfig;\n        const typedCurrentConfig: AlarmListWidgetConfig = currentConfig as AlarmListWidgetConfig;\n\n        if (this.isOnlyAutoRefreshOrIntervalChanged(typedPreviousConfig, typedCurrentConfig)) {\n          return;\n        }\n\n        if (\n          this.alarmListWidgetService.allValuesFalse(typedCurrentConfig.severities) ||\n          this.alarmListWidgetService.allValuesFalse(typedCurrentConfig.status)\n        ) {\n          this.alarms$.next({ data: [], res: null });\n          return;\n        }\n\n        this.getAlarms(typedCurrentConfig);\n      });\n  }\n\n  /**\n   * Determines if the only changes between two `AlarmListWidgetConfig` objects are in the `isAutoRefreshEnabled` and `refreshInterval` properties.\n   *\n   * This method compares two configurations by omitting `isAutoRefreshEnabled` and `refreshInterval`.\n   * It returns true if these are the only properties that differ between the previous and current configurations.\n   * Note that `refreshInterval` is relevant only when the refresh type is set to an interval.\n   *\n   * @param previousConfig - The previous configuration of `AlarmListWidgetConfig`.\n   * @param currentConfig - The current configuration of `AlarmListWidgetConfig`.\n   * @returns `true` if the differences are confined to `isAutoRefreshEnabled` and `refreshInterval`, `false` otherwise.\n   */\n  private isOnlyAutoRefreshOrIntervalChanged(\n    previousConfig: AlarmListWidgetConfig,\n    currentConfig: AlarmListWidgetConfig\n  ): boolean {\n    const prevConfigCopy = omit(previousConfig, 'isAutoRefreshEnabled', 'refreshInterval');\n    const currentConfigCopy = omit(currentConfig, 'isAutoRefreshEnabled', 'refreshInterval');\n\n    return isEqual(prevConfigCopy, currentConfigCopy);\n  }\n\n  private updateConfigBasedOnRefreshOption() {\n    const isInterval = this.refreshOption === 'interval';\n\n    this.config.isAutoRefreshEnabled = isInterval;\n    this.formGroup.controls.isAutoRefreshEnabled.setValue(isInterval);\n\n    isInterval\n      ? this.formGroup.get('refreshInterval').enable()\n      : this.formGroup.get('refreshInterval').disable();\n  }\n}\n","<div\n  class=\"p-l-24 p-r-24\"\n  [style.pointer-events]=\"'auto'\"\n  [style.opacity]=\"1\"\n></div>\n\n<form\n  class=\"row\"\n  [formGroup]=\"formGroup\"\n>\n  <div class=\"form-group col-md-12\">\n    <div class=\"d-flex a-i-center\">\n      <label\n        class=\"m-b-0\"\n        translate\n      >\n        Date selection\n      </label>\n      <button\n        class=\"btn-help btn-help--sm\"\n        [attr.aria-label]=\"'Help' | translate\"\n        [popover]=\"dateSelectionHelpTemplate\"\n        placement=\"bottom\"\n        triggers=\"focus\"\n        container=\"body\"\n        [adaptivePosition]=\"false\"\n      ></button>\n    </div>\n    <div class=\"c8y-select-wrapper\">\n      <select\n        class=\"form-control input-sm\"\n        [ngModel]=\"dateSelection\"\n        (ngModelChange)=\"dateSelectionChange($event)\"\n        [ngModelOptions]=\"{ standalone: true }\"\n      >\n        <option\n          title=\"{{ 'Widget configuration' | translate }}\"\n          [value]=\"DATE_SELECTION.CONFIG\"\n        >\n          {{ 'Widget configuration' | translate }}\n        </option>\n        <option\n          title=\"{{ 'Widget and widget configuration' | translate }}\"\n          [value]=\"DATE_SELECTION.VIEW_AND_CONFIG\"\n        >\n          {{ 'Widget and widget configuration' | translate }}\n        </option>\n        <option\n          title=\"{{ 'Dashboard time range' | translate }}\"\n          [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n        >\n          {{ 'Dashboard time range' | translate }}\n        </option>\n      </select>\n      <span></span>\n    </div>\n  </div>\n  <div class=\"col-md-6\">\n    <fieldset class=\"c8y-fieldset\">\n      <legend>{{ 'Order`of items on a list, noun`' | translate }}</legend>\n      <c8y-form-group class=\"m-b-0\">\n        <div\n          class=\"d-flex m-b-8 a-i-center\"\n          *ngFor=\"let order of orderList; let i = index\"\n        >\n          <label\n            class=\"c8y-radio gap-4\"\n            title=\"{{ ALARM_ORDER_LABELS[order] | translate }}\"\n          >\n            <input\n              type=\"radio\"\n              [value]=\"order\"\n              formControlName=\"order\"\n            />\n            <span class=\"a-s-center\"></span>\n            <span class=\"text-truncate\">{{ ALARM_ORDER_LABELS[order] | translate }}</span>\n          </label>\n          <button\n            class=\"btn-help btn-help--sm\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"order | sortingDescriptionPopoverMessage | translate\"\n            placement=\"right\"\n            triggers=\"focus\"\n            container=\"body\"\n            type=\"button\"\n            [adaptivePosition]=\"true\"\n          ></button>\n        </div>\n      </c8y-form-group>\n    </fieldset>\n    <fieldset\n      class=\"c8y-fieldset\"\n      formArrayName=\"severities\"\n    >\n      <legend>{{ 'Severities' | translate }}</legend>\n      <c8y-form-group\n        [hasError]=\"formGroup.controls.severities.hasError('required')\"\n        [ngClass]=\"{\n          'm-b-8': !formGroup.controls.severities.hasError('required')\n        }\"\n      >\n        <ng-container *ngFor=\"let severityOption of severityList\">\n          <label\n            class=\"c8y-checkbox m-t-0 gap-4\"\n            [title]=\"SEVERITY_LABELS[severityOption] | translate\"\n          >\n            <input\n              type=\"checkbox\"\n              [formControlName]=\"severityOption\"\n              [name]=\"severityOption\"\n            />\n            <span class=\"a-s-center\"></span>\n            <ng-container *ngIf=\"{ result: severityOption | severityIcon } as severityIcon\">\n              <i\n                class=\"a-s-center m-r-4 icon-20 {{ severityIcon.result.iconClass }}\"\n                [c8yIcon]=\"severityIcon.result.c8yIcon\"\n              ></i>\n            </ng-container>\n            <span>{{ SEVERITY_LABELS[severityOption] | translate }}</span>\n          </label>\n        </ng-container>\n        <c8y-messages>\n          <c8y-message *ngIf=\"formGroup.controls.severities.hasError('required')\">\n            {{ 'Select at least one severity.' | translate }}\n          </c8y-message>\n        </c8y-messages>\n      </c8y-form-group>\n    </fieldset>\n    <ng-container *ngIf=\"showDateFilter\">\n      <fieldset class=\"c8y-fieldset\">\n        <legend>{{ 'Date filter' | translate }}</legend>\n        <c8y-form-group class=\"m-b-8\">\n          <c8y-alarms-date-filter\n            [updateQueryParams]=\"false\"\n            [DEFAULT_INTERVAL]=\"config.interval || 'none'\"\n            formControlName=\"dateFilter\"\n            (dateFilterChange)=\"onDateFilterChange($event)\"\n          ></c8y-alarms-date-filter>\n        </c8y-form-group>\n      </fieldset>\n    </ng-container>\n  </div>\n\n  <div class=\"col-md-6\">\n    <fieldset\n      class=\"c8y-fieldset\"\n      formArrayName=\"status\"\n    >\n      <legend>{{ 'Status' | translate }}</legend>\n      <c8y-form-group\n        [hasError]=\"formGroup.controls.status.hasError('required')\"\n        [ngClass]=\"{\n          'm-b-8': !formGroup.controls.status.hasError('required')\n        }\"\n      >\n        <ng-container *ngFor=\"let statusOption of statusList\">\n          <label\n            class=\"c8y-checkbox m-t-0 gap-4\"\n            [title]=\"STATUS_LABELS[statusOption] | translate\"\n          >\n            <input\n              type=\"checkbox\"\n              [formControlName]=\"statusOption\"\n              [name]=\"statusOption\"\n            />\n            <span class=\"a-s-center\"></span>\n            <i\n              class=\"a-s-center m-l-4 m-r-4 text-gray-dark c8y-icon icon-20\"\n              [c8yIcon]=\"\n                statusOption === CLEARED_STATUS_VALUE\n                  ? C8Y_ALERT_IDLE_ICON\n                  : statusOption === ACKNOWLEDGE_STATUS_VALUE\n                    ? BELL_SLASH_ICON\n                    : BELL_ICON\n              \"\n            ></i>\n            <span>{{ STATUS_LABELS[statusOption] | translate }}</span>\n          </label>\n        </ng-container>\n        <c8y-messages>\n          <c8y-message *ngIf=\"formGroup.controls.status.hasError('required')\">\n            {{ 'Select at least one status.' | translate }}\n          </c8y-message>\n        </c8y-messages>\n      </c8y-form-group>\n    </fieldset>\n\n    <fieldset class=\"c8y-fieldset\">\n      <legend>{{ 'Child devices' | translate }}</legend>\n      <c8y-form-group class=\"m-b-8\">\n        <label\n          class=\"c8y-switch\"\n          [title]=\"'Show alarms from child devices' | translate\"\n        >\n          <input\n            type=\"checkbox\"\n            formControlName=\"showAlarmsForChildren\"\n          />\n          <span></span>\n          <span>{{ 'Show alarms' | translate }}</span>\n          <span class=\"sr-only\">{{ 'Show alarms' | translate }}</span>\n        </label>\n      </c8y-form-group>\n    </fieldset>\n\n    <fieldset class=\"c8y-fieldset\">\n      <legend>{{ 'Types' | translate }}</legend>\n      <c8y-form-group\n        class=\"m-b-8\"\n        formArrayName=\"types\"\n      >\n        <div\n          class=\"input-group\"\n          *ngFor=\"let type of types.controls; let i = index\"\n        >\n          <input\n            class=\"form-control\"\n            type=\"text\"\n            [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'c8y_Alarm' }\"\n            [formControlName]=\"i\"\n          />\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn btn-dot btn-dot--danger m-l-auto\"\n              [title]=\"'Remove' | translate\"\n              type=\"button\"\n              (click)=\"removeType(i)\"\n              [disabled]=\"types.controls?.length === 1 && !type.value\"\n            >\n              <i c8yIcon=\"minus-circle\"></i>\n            </button>\n          </div>\n          <div\n            class=\"input-group-btn\"\n            *ngIf=\"i === types.controls.length - 1\"\n          >\n            <button\n              class=\"btn btn-dot btn-dot--primary m-l-auto\"\n              [title]=\"'Add alarm type' | translate\"\n              type=\"button\"\n              (click)=\"addType()\"\n            >\n              <i c8yIcon=\"plus-circle\"></i>\n            </button>\n          </div>\n        </div>\n      </c8y-form-group>\n    </fieldset>\n    <fieldset class=\"c8y-fieldset\">\n      <legend class=\"d-flex\">\n        {{ refreshTypeTitle }}\n        <button\n          class=\"btn-help btn-help--sm\"\n          [attr.aria-label]=\"'Help' | translate\"\n          [popover]=\"refreshTypePopoverMessage\"\n          placement=\"top\"\n          triggers=\"focus\"\n          container=\"body\"\n          type=\"button\"\n          [adaptivePosition]=\"true\"\n        ></button>\n      </legend>\n      <c8y-form-group class=\"m-b-8 form-group-sm\">\n        <div class=\"d-flex gap-8 a-i-center\">\n          <ng-template #realtime>\n            <label class=\"c8y-switch\">\n              <input\n                id=\"refreshToggle\"\n                name=\"isAutoRefreshEnabled\"\n                type=\"checkbox\"\n                formControlName=\"isAutoRefreshEnabled\"\n              />\n              <span></span>\n              <span class=\"sr-only\">{{ 'Realtime refresh' | translate }}</span>\n            </label>\n          </ng-template>\n          <div\n            class=\"c8y-select-wrapper\"\n            *ngIf=\"!config.isRealtime; else realtime\"\n          >\n            <select\n              class=\"form-control\"\n              title=\"{{ 'Refresh options`options for refreshing a view`' | translate }}\"\n              [(ngModel)]=\"refreshOption\"\n              [ngModelOptions]=\"{ standalone: true }\"\n              (change)=\"updateRefreshOption()\"\n            >\n              <option value=\"none\">\n                {{ 'No automatic refresh' | translate }}\n              </option>\n              <option\n                [title]=\"'Refreshing after the given interval' | translate\"\n                value=\"interval\"\n              >\n                {{ 'Use refresh interval' | translate }}\n              </option>\n              <option\n                [title]=\"'Refreshing after the given interval, synchronized globally' | translate\"\n                value=\"global-interval\"\n              >\n                {{ 'Use global refresh interval' | translate }}\n              </option>\n            </select>\n          </div>\n          <ng-container\n            *ngIf=\"!config.isRealtime && config.refreshOption !== GLOBAL_INTERVAL_OPTION\"\n          >\n            <label\n              class=\"m-b-0\"\n              for=\"refreshInterval\"\n            >\n              {{ 'Interval' | translate }}\n            </label>\n            <div class=\"c8y-select-wrapper flex-grow\">\n              <select\n                class=\"form-control text-12\"\n                [title]=\"'Refresh interval in seconds' | translate\"\n                id=\"refreshInterval\"\n                formControlName=\"refreshInterval\"\n              >\n                <option\n                  *ngFor=\"let refreshInterval of REFRESH_INTERVAL_IN_MILLISECONDS\"\n                  [ngValue]=\"refreshInterval\"\n                >\n                  {{ '{{ seconds }} s' | translate: { seconds: refreshInterval / 1000 } }}\n                </option>\n              </select>\n            </div>\n          </ng-container>\n        </div>\n      </c8y-form-group>\n    </fieldset>\n  </div>\n</form>\n\n<div class=\"legend form-block m-b-0\">{{ 'Preview`of an alarm list`' | translate }}</div>\n<c8y-alarms-list\n  [alarms]=\"alarms$ | async\"\n  [isInitialLoading]=\"isLoading\"\n  [navigationOptions]=\"{\n    allowNavigationToAlarmsView: false,\n    alwaysNavigateToAllAlarms: false,\n    includeClearedQueryParams: false,\n    queryParamsHandling: 'merge'\n  }\"\n></c8y-alarms-list>\n\n<ng-template #dateSelectionHelpTemplate>\n  <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {\n  CountdownIntervalComponent,\n  gettext,\n  IntervalBasedReload,\n  WidgetGlobalAutoRefreshService\n} from '@c8y/ngx-components';\nimport { AlarmsViewService } from '@c8y/ngx-components/alarms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { AlarmListWidgetConfig, GLOBAL_INTERVAL_OPTION } from './alarm-list-widget.model';\n\n@Component({\n  selector: 'c8y-alarm-widget-alarms-reload',\n  templateUrl: './alarm-widget-alarms-reload.component.html'\n})\nexport class AlarmWidgetAlarmsReloadComponent\n  extends IntervalBasedReload\n  implements OnInit, AfterViewInit, OnChanges, OnDestroy\n{\n  readonly REALTIME_UPDATE_ALARMS_MESSAGE = this.alarmsViewService.REALTIME_UPDATE_ALARMS_MESSAGE;\n\n  /**\n   * State of this boolean depends on an Application Options \"alarmsRefreshType\" setting.\n   */\n  @Input() isIntervalRefresh: boolean;\n  /**\n   * @inheritdoc\n   */\n  @Input() refreshInterval: number;\n  /**\n   * Alarm widgets config.\n   */\n  @Input() config: AlarmListWidgetConfig;\n  /**\n   * @inheritdoc\n   */\n  @Input() isLoading: BehaviorSubject<boolean>;\n  /**\n   * Indicates whether the alarm list is being scrolled or not.\n   */\n  @Input() isScrolling: boolean;\n  /**\n   * @inheritdoc\n   */\n  @Input() isRefreshDisabled: boolean;\n  /**\n   * @inheritdoc\n   */\n  @Output() onCountdownEnded = new EventEmitter<void>();\n  /**\n   * Emitted to indicate that the widgets realtime button state has changed.\n   */\n  @Output() onRealTimeToggleChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  @ViewChild(CountdownIntervalComponent, { static: false })\n  countdownIntervalComponent: CountdownIntervalComponent;\n  /**\n   * @inheritdoc\n   */\n  protected hideCountdown: boolean;\n  /**\n   * Tooltip for a new realtime alarm indicator.\n   */\n  realtimeIconTitle: string;\n  /**\n   * Indicates whether the countdown has been cleared already.\n   */\n  isNewAlarmMessageCleared = true;\n  /**\n   * @inheritdoc\n   */\n  isIntervalRefreshToggleOn: boolean;\n  /**\n   * Indicates the current state of an realtime toggle button.\n   */\n  isRealtimeToggleOn: boolean;\n  /**\n   * Holds the subscription to a countdown observable.\n   */\n  countdownSubscription: Subscription;\n  /**\n   * @inheritdoc\n   */\n  protected manuallyDisabledCountdown = false;\n\n  toggleCountdownButtonTooltipText: string;\n  globalAutoRefreshEnabled: boolean;\n\n  constructor(\n    private alarmsViewService: AlarmsViewService,\n    private cdRef: ChangeDetectorRef,\n    private translateService: TranslateService,\n    private widgetGlobalAutoRefreshService: WidgetGlobalAutoRefreshService\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    if (!this.isIntervalRefresh) {\n      this.isRealtimeToggleOn = this.config.isAutoRefreshEnabled;\n      this.realtimeIconTitle = this.getRealtimeIconTitle();\n    } else {\n      this.isIntervalRefreshToggleOn =\n        !this.isRefreshDisabled && (this.config.isAutoRefreshEnabled || !!this.refreshInterval);\n      this.updateCountdownButtonTooltipText();\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this.isIntervalRefresh && this.refreshInterval) {\n      this.startCountdown();\n    }\n\n    if (this.globalAutoRefreshEnabled) {\n      this.widgetGlobalAutoRefreshService.countdownActions.countdownEnded$\n        .pipe(tap(() => this.onCountdownEnded.emit()))\n        .subscribe();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { isDisabled, config } = changes;\n    if (config) {\n      this.globalAutoRefreshEnabled = this.config.refreshOption === GLOBAL_INTERVAL_OPTION;\n    }\n    if (isDisabled) {\n      this.isIntervalRefreshToggleOn =\n        !this.isRefreshDisabled && (this.config.isAutoRefreshEnabled || !!this.refreshInterval);\n      this.updateCountdownButtonTooltipText(gettext('Disabled'));\n    }\n\n    if (\n      !this.isIntervalRefresh ||\n      this.manuallyDisabledCountdown ||\n      !this.config.isAutoRefreshEnabled\n    ) {\n      return;\n    }\n\n    this.handleScrolling();\n  }\n\n  ngOnDestroy() {\n    if (this.countdownSubscription) {\n      this.countdownSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * @inheritdoc\n   */\n  countdownEnded(): void {\n    /**\n     * @inheritdoc\n     */\n    this.autoRefreshList();\n  }\n\n  reload(): void {\n    if (this.isIntervalRefresh) {\n      this.autoRefreshList();\n    } else {\n      this.onCountdownEnded.emit();\n      this.isNewAlarmMessageCleared = true;\n    }\n  }\n\n  /**\n   * Toggles the real-time state of the component.\n   *\n   * This method switches the `isRealtimeToggleOn` state between true and false.\n   * When the state is toggled, it emits the current state through `onRealTimeToggleChanged` event.\n   * It also updates the `realtimeIconTitle` based on the new state.\n   */\n  toggleRealtimeState(): void {\n    this.isRealtimeToggleOn = !this.isRealtimeToggleOn;\n    this.onRealTimeToggleChanged.emit(this.isRealtimeToggleOn);\n    this.realtimeIconTitle = this.getRealtimeIconTitle();\n  }\n\n  /**\n   * Stops the countdown and triggers a refresh action.\n   * This function is responsible for halting the countdown interval component's operation.\n   * After stopping the countdown, it emits an `onCountdownEnded` event.\n   * This event is used to inform external components that the countdown has ended,\n   * typically prompting them to reload or refresh their data.\n   */\n  autoRefreshList(): void {\n    if (this.isIntervalRefreshToggleOn && this.config.isAutoRefreshEnabled) {\n      this.countdownIntervalComponent.stop();\n    }\n    this.onCountdownEnded.emit();\n  }\n\n  /**\n   * Sets the tooltip message for a new realtime alarm indicator.\n   * @returns Tooltip message.\n   */\n  getRealtimeIconTitle(): string {\n    return this.isRealtimeToggleOn\n      ? this.translateService.instant(gettext('Realtime active'))\n      : this.translateService.instant(gettext('Realtime inactive'));\n  }\n\n  /**\n   * Enables and starts the countdown timer.\n   *\n   * This method makes the countdown visible (`hideCountdown` is set to false) and then\n   * starts the countdown process. It ensures the countdown timer is updated immediately\n   * by triggering change detection with `cdRef.detectChanges()` before starting the countdown.\n   * This method encapsulates the logic required to initiate the countdown timer.\n   */\n  enableCountdown(): void {\n    this.hideCountdown = false;\n    // Prevents the countdown from getting stuck on an initial value.\n    this.cdRef.detectChanges();\n    this.startCountdown();\n  }\n\n  /**\n   * @inheritdoc\n   */\n  protected updateCountdownButtonTooltipText(customText?: string): void {\n    if (customText) {\n      this.toggleCountdownButtonTooltipText = customText;\n      return;\n    }\n    this.toggleCountdownButtonTooltipText = this.isIntervalRefreshToggleOn\n      ? this.translateService.instant(gettext('Disable auto refresh'))\n      : this.translateService.instant(gettext('Enable auto refresh'));\n  }\n}\n","<div\n  class=\"m-l-auto d-flex p-t-4 p-b-4\"\n  *ngIf=\"!globalAutoRefreshEnabled\"\n>\n  <div class=\"m-l-auto d-flex a-i-center\">\n    <label\n      class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n      title=\" {{ 'Auto refresh' | translate }}\"\n      *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n    >\n      {{ 'Auto refresh' | translate }}\n    </label>\n    <div class=\"input-group\">\n      <label\n        class=\"toggle-countdown\"\n        [class.toggle-countdown-disabled]=\"isRefreshDisabled\"\n        [attr.aria-label]=\"toggleCountdownButtonTooltipText\"\n        [tooltip]=\"toggleCountdownButtonTooltipText\"\n        placement=\"bottom\"\n        *ngIf=\"isIntervalRefresh && refreshInterval && config.isAutoRefreshEnabled\"\n        [adaptivePosition]=\"false\"\n        [container]=\"'body'\"\n        [delay]=\"500\"\n      >\n        <input\n          type=\"checkbox\"\n          data-cy=\"c8y-alarms-widget--interval-toggle-button\"\n          (click)=\"onToggleCountdownButtonState($event)\"\n        />\n        <c8y-countdown-interval\n          *ngIf=\"isIntervalRefreshToggleOn\"\n          [countdownInterval]=\"refreshInterval\"\n          (countdownEnded)=\"countdownEnded()\"\n        ></c8y-countdown-interval>\n        <i\n          c8yIcon=\"pause\"\n          *ngIf=\"!isIntervalRefreshToggleOn\"\n        ></i>\n      </label>\n\n      <div class=\"input-group-btn\">\n        <button\n          class=\"btn btn-default\"\n          [attr.aria-label]=\"'Refresh' | translate\"\n          [tooltip]=\"\n            !isNewAlarmMessageCleared\n              ? (REALTIME_UPDATE_ALARMS_MESSAGE | translate)\n              : ('Refresh' | translate)\n          \"\n          placement=\"bottom\"\n          type=\"button\"\n          [adaptivePosition]=\"false\"\n          [container]=\"'body'\"\n          [delay]=\"500\"\n          [disabled]=\"isRefreshDisabled || (isLoading | async)\"\n          (click)=\"reload()\"\n          data-cy=\"c8y-alarms-widget--reload-button\"\n        >\n          <span\n            class=\"tag tag--info m-r-8\"\n            *ngIf=\"!isNewAlarmMessageCleared\"\n          >\n            {{ 'New alarms' | translate }}\n          </span>\n          <i\n            c8yIcon=\"refresh\"\n            [ngClass]=\"{ 'icon-spin': isLoading | async }\"\n          ></i>\n        </button>\n      </div>\n      <div\n        class=\"input-group-btn input-group-btn--last\"\n        *ngIf=\"!isIntervalRefresh\"\n      >\n        <button\n          class=\"c8y-realtime btn btn-default\"\n          [attr.aria-label]=\"realtimeIconTitle\"\n          [tooltip]=\"realtimeIconTitle\"\n          placement=\"bottom\"\n          type=\"button\"\n          [container]=\"'body'\"\n          (click)=\"toggleRealtimeState()\"\n          [disabled]=\"isRefreshDisabled\"\n        >\n          <span\n            class=\"c8y-pulse m-0\"\n            [ngClass]=\"{\n              active: isRealtimeToggleOn,\n              inactive: !isRealtimeToggleOn\n            }\"\n          ></span>\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import {\n  AfterViewInit,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { AlarmService, IAlarm, IResult, IResultList } from '@c8y/client';\nimport {\n  AlarmRealtimeService,\n  AlarmWithChildrenRealtimeService,\n  AlertService,\n  DashboardChildComponent,\n  DismissAlertStrategy,\n  DynamicComponent,\n  DynamicComponentAlert,\n  DynamicComponentAlertAggregator,\n  gettext,\n  globalAutoRefreshLoading,\n  WidgetGlobalAutoRefreshService\n} from '@c8y/ngx-components';\nimport { AlarmsViewService } from '@c8y/ngx-components/alarms';\nimport { isEmpty, isEqual } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { skip, takeUntil, tap } from 'rxjs/operators';\nimport {\n  ASSET_ALARMS_WIDGET_ID,\n  AlarmListWidgetConfig,\n  RECENT_ALARMS_WIDGET_ID\n} from '../alarm-list-widget.model';\nimport { AlarmWidgetService } from '../alarm-widget.service';\nimport { AlarmWidgetAlarmsReloadComponent } from '../alarm-widget-alarms-reload.component';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\n/**\n * To ensure backward compatibility, legacy widgets will be converted to the new implementation.\n */\n@Component({\n  selector: 'c8y-alarm-list-widget',\n  templateUrl: './alarm-list-widget.component.html',\n  providers: [AlarmRealtimeService, AlarmWithChildrenRealtimeService]\n})\nexport class AlarmListWidgetComponent\n  implements OnInit, AfterViewInit, OnDestroy, DynamicComponent\n{\n  /**\n   *  Alarm widget config.\n   */\n  @Input() config: AlarmListWidgetConfig;\n  /**\n   * Represents current alarms.\n   */\n  alarms$: BehaviorSubject<IResultList<IAlarm> | null> = new BehaviorSubject(null);\n  /**\n   * Current isLoading state. Based on it next countdown cycle is being started.\n   */\n  isLoading$: BehaviorSubject<boolean> = new BehaviorSubject(true);\n  /**\n   * State of this boolean depends on an Application Options \"alarmsRefreshType\" setting.\n   */\n  isIntervalRefresh: boolean;\n  /**\n   * Current refresh interval set in a widget config.\n   */\n  refreshInterval: number;\n\n  @ViewChild(AlarmWidgetAlarmsReloadComponent)\n  alarmWidgetAlarmsReloadComp: AlarmWidgetAlarmsReloadComponent;\n  alerts: DynamicComponentAlertAggregator;\n\n  private TIMEOUT_ERROR_TEXT = gettext(\n    'The request is taking longer than usual. We apologize for the inconvenience.'\n  );\n  private SERVER_ERROR_TEXT = gettext('Server error occurred.');\n  private unsubscribe$ = new Subject<void>();\n  private destroy$: Subject<void> = new Subject();\n  isDisabled = false;\n\n  constructor(\n    private alarmWidgetService: AlarmWidgetService,\n    private alarmRealtimeService: AlarmRealtimeService,\n    private alarmService: AlarmService,\n    private alarmsViewService: AlarmsViewService,\n    private alarmWithChildrenRealtimeService: AlarmWithChildrenRealtimeService,\n    private dashboardChild: DashboardChildComponent,\n    private alertService: AlertService,\n    private widgetGlobalAutoRefresh: WidgetGlobalAutoRefreshService\n  ) {\n    this.isIntervalRefresh = this.alarmsViewService.isIntervalRefresh();\n  }\n\n  async ngOnInit(): Promise<void> {\n    this.alerts.setAlertGroupDismissStrategy(\n      'warning',\n      DismissAlertStrategy.TEMPORARY_OR_PERMANENT\n    );\n\n    if (this.alarmWidgetService.isOldAlarmConfigStructure(this.config)) {\n      const mappedConfig = this.alarmWidgetService.mapToNewConfigStructure(\n        this.config,\n        this.isIntervalRefresh\n      );\n      Object.assign(this.config, mappedConfig);\n    }\n\n    if (this.config.widgetInstanceGlobalAutoRefreshContext && !this.config.isRealtime) {\n      this.handleGlobalRefreshLoading();\n    }\n    const _config = this.dashboardChild['data']?.config;\n    const isLegacyWidgetWithoutConfiguration =\n      isEmpty(_config) || isEqual(_config, { displaySettings: { globalAutoRefreshContext: true } });\n\n    if (isLegacyWidgetWithoutConfiguration) {\n      this.setLegacyRecentOrCriticalAlarmWidgetConfig();\n    }\n\n    this.updateWidgetRefreshMode();\n    this.refreshInterval = !!this.config?.refreshInterval && this.config?.refreshInterval;\n    await this.fetchAlarms();\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.isIntervalRefresh && this.config.refreshOption === 'interval') {\n      this.handleRealtimeAlarms(this.config, this.alarmWidgetAlarmsReloadComp.isRealtimeToggleOn);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes?.config?.currentValue?.date) {\n      this.config.dateFilter = changes.config.currentValue.date;\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.config.isRealtime) {\n      this.unsubscribe$.next();\n      this.unsubscribe$.complete();\n    }\n\n    this.destroy$.next();\n    this.destroy$.complete();\n\n    if (this.config.widgetInstanceGlobalAutoRefreshContext && this.isLoading$.value) {\n      this.widgetGlobalAutoRefresh.decrementLoading();\n    }\n  }\n\n  async fetchAlarms(): Promise<void> {\n    this.updateDateFilter();\n    this.alarms$.next(await this.getAlarms());\n  }\n\n  async onDateFilterChange(event: {\n    selectedDates: [Date, Date];\n    interval: Interval['id'];\n  }): Promise<void> {\n    this.config.dateFilter = event.selectedDates;\n    this.config.interval = event.interval;\n    await this.fetchAlarms();\n  }\n\n  handleRealTimeToggleChange(isRealtimeToggleOn: boolean): void {\n    if (!isRealtimeToggleOn) {\n      this.unsubscribe$.next();\n      this.unsubscribe$.complete();\n    }\n\n    this.unsubscribe$ = new Subject();\n    this.handleRealtimeAlarms(this.config, isRealtimeToggleOn);\n  }\n\n  /**\n   * Updates the widget's date filter based on the currently selected interval.\n   * If the interval is set to last hour, we will configure the date filter to dynamically show alarms only from the last hour.\n   */\n  private updateDateFilter(): void {\n    if (this.config.interval === 'custom' || this.config.widgetInstanceGlobalTimeContext) {\n      return;\n    }\n\n    if (!this.config.interval) {\n      this.config.interval = 'none';\n    }\n\n    this.config.dateFilter = this.alarmsViewService.getDateTimeContextByInterval(\n      this.config.interval\n    );\n  }\n\n  /**\n   * Updates the widget's refresh mode based on the current configuration and the interval refresh setting.\n   * If the widget's 'isRealtime' configuration differs from the current global interval refresh setting (application options setting),\n   * the widget's mode is updated to either 'realtime' or 'interval'. In 'realtime' mode, the refresh interval is null,\n   * and in 'interval' mode, it is set to the default interval value.\n   */\n  private updateWidgetRefreshMode(): void {\n    const isRefreshTypeSwitched = !!this.config.isRealtime !== !this.isIntervalRefresh;\n    if (!isRefreshTypeSwitched) {\n      return;\n    }\n\n    this.config.isRealtime = !this.isIntervalRefresh;\n\n    if (this.config.isRealtime) {\n      // Switching widget to realtime mode\n      this.config.refreshInterval = null;\n      this.config.refreshOption = null;\n      this.config.widgetInstanceGlobalAutoRefreshContext = false;\n      this.config.isAutoRefreshEnabled = true;\n    } else {\n      // Switching widget to interval mode\n      this.config.refreshInterval = this.alarmsViewService.DEFAULT_INTERVAL_VALUE;\n      this.config.refreshOption = this.alarmsViewService.DEFAULT_REFRESH_OPTION_VALUE;\n      this.config.widgetInstanceGlobalAutoRefreshContext = false;\n    }\n  }\n\n  private async getAlarms(): Promise<IResultList<IAlarm>> {\n    try {\n      this.isLoading$.next(true);\n      return await this.alarmService.list(\n        this.alarmWidgetService.mapConfigToQueryFilter(this.config)\n      );\n    } catch (error) {\n      this.alerts.addAlerts(\n        new DynamicComponentAlert({\n          type: 'warning',\n          text:\n            error?.name === 'TimeoutError'\n              ? this.TIMEOUT_ERROR_TEXT\n              : error?.message ?? this.SERVER_ERROR_TEXT\n        })\n      );\n      if (error?.res?.status === 403) {\n        this.isDisabled = true;\n        return;\n      }\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading$.next(false);\n    }\n  }\n\n  /**\n   * Handles the realtime updates of alarms based on the widget configuration.\n   * If a specific device is provided in the widget configuration, all alarms\n   * originating from that device and its children are filtered based on status, severity, and type.\n   * Otherwise, it processes all incoming alarms and filters them according to status, severity, and type,\n   * as specified in the widget configuration. If new alarms meet the specified criteria, it sets a flag\n   * to indicate the presence of new alarms.\n   *\n   * @param config - The configuration settings of the alarm list widget.\n   * @param isRealtimeToggleOn - A flag indicating whether the realtime toggle is on. If true, the alarm list will be refreshed.\n   * If false, the presence of new alarms will be displayed as \"New Alarms\" entry on widget refresh button, but the list won't be refreshed automatically.\n   */\n  private handleRealtimeAlarms(config: AlarmListWidgetConfig, isRealtimeToggleOn: boolean): void {\n    const callback = (data: number | IAlarm) => {\n      if (\n        this.alarmWidgetService.filterAlarmsByStatusSeverityAndType(\n          data,\n          this.alarms$.value.data,\n          config\n        )\n      ) {\n        if (isRealtimeToggleOn) {\n          this.fetchAlarms();\n          this.alarmWidgetAlarmsReloadComp.isNewAlarmMessageCleared = true;\n        } else {\n          this.alarmWidgetAlarmsReloadComp.isNewAlarmMessageCleared = false;\n        }\n      }\n    };\n\n    if (this.config.device) {\n      this.handleRealtime(\n        this.alarmWithChildrenRealtimeService.onAll$.bind(this.alarmWithChildrenRealtimeService),\n        callback\n      );\n    } else {\n      this.handleRealtime(\n        this.alarmRealtimeService.onAll$.bind(this.alarmRealtimeService),\n        callback\n      );\n    }\n  }\n\n  /**\n   * Sets up a subscription to a realtime data stream. This function takes a subscriber function,\n   * which is used to subscribe to the data stream, and a callback function, which is called with each\n   * data update received from the stream.\n   *\n   * @param subscriberFn - A function that returns an observable stream of alarm data.\n   * @param callback - A function to be executed with each alarm data update.\n   */\n  private handleRealtime(\n    subscriberFn: (id?: string) => Observable<IResult<IAlarm>>,\n    callback: (data: IAlarm) => void\n  ): void {\n    subscriberFn(this.config.device?.id)\n      .pipe(\n        tap(({ data }) => {\n          callback(data);\n        }),\n        takeUntil(this.unsubscribe$)\n      )\n      .subscribe();\n  }\n\n  private setLegacyRecentOrCriticalAlarmWidgetConfig(): void {\n    const widgetId = this.dashboardChild['data']?.componentId\n      ? this.dashboardChild['data']?.componentId //property is used in cockpit dashboards\n      : this.dashboardChild['data']?.name; //property is used in device management dashboards\n\n    if (widgetId === RECENT_ALARMS_WIDGET_ID) {\n      const predefinedConfig = this.alarmWidgetService.getPredefinedConfiguration(\n        this.isIntervalRefresh,\n        RECENT_ALARMS_WIDGET_ID\n      );\n      Object.assign(this.config, predefinedConfig);\n\n      return;\n    }\n\n    if (widgetId === ASSET_ALARMS_WIDGET_ID) {\n      const predefinedConfig = this.alarmWidgetService.getPredefinedConfiguration(\n        this.isIntervalRefresh\n      );\n      Object.assign(this.config, predefinedConfig);\n    }\n  }\n\n  private handleGlobalRefreshLoading(): void {\n    this.isLoading$\n      .pipe(\n        skip(1),\n        globalAutoRefreshLoading(this.widgetGlobalAutoRefresh),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n}\n","<c8y-alarms-list\n  #list\n  [alarms]=\"alarms$ | async\"\n  [navigationOptions]=\"{\n    alwaysNavigateToAllAlarms: !config.device,\n    allowNavigationToAlarmsView: true,\n    includeClearedQueryParams: true,\n    queryParamsHandling: ''\n  }\"\n  [isInitialLoading]=\"isLoading$ | async\"\n  [hasPermissions]=\"!isDisabled\"\n>\n  <c8y-alarms-date-filter\n    *ngIf=\"config.displayDateSelection\"\n    [updateQueryParams]=\"false\"\n    [date]=\"this.config.dateFilter\"\n    [DEFAULT_INTERVAL]=\"config.interval || 'none'\"\n    (dateFilterChange)=\"onDateFilterChange($event)\"\n  ></c8y-alarms-date-filter>\n  <c8y-alarm-widget-alarms-reload\n    class=\"d-contents\"\n    [isIntervalRefresh]=\"isIntervalRefresh\"\n    [refreshInterval]=\"refreshInterval\"\n    [config]=\"config\"\n    [isLoading]=\"isLoading$\"\n    [isScrolling]=\"list.isScrolling\"\n    [isRefreshDisabled]=\"isDisabled\"\n    (onCountdownEnded)=\"fetchAlarms()\"\n    (onRealTimeToggleChanged)=\"handleRealTimeToggleChange($event)\"\n  ></c8y-alarm-widget-alarms-reload>\n</c8y-alarms-list>\n","import { CommonModule as NgCommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule as NgFormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport {\n  CommonModule,\n  CountdownIntervalModule,\n  DocsModule,\n  FormsModule\n} from '@c8y/ngx-components';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AlarmListWidgetConfigComponent } from './alarm-list-widget-config/alarm-list-widget-config.component';\nimport { AlarmListWidgetComponent } from './alarm-list-widget-view/alarm-list-widget.component';\nimport { AlarmWidgetAlarmsReloadComponent } from './alarm-widget-alarms-reload.component';\nimport { SortingDescriptionPopoverMessagePipe } from './sorting-description-popover-message.pipe';\nimport { SeverityIconPipe } from './severity-icon.pipe';\n\n@NgModule({\n  imports: [\n    AlarmsModule,\n    CommonModule,\n    CountdownIntervalModule,\n    DocsModule,\n    FormsModule,\n    NgCommonModule,\n    NgFormsModule,\n    PopoverModule,\n    ReactiveFormsModule,\n    RouterModule,\n    TooltipModule.forRoot()\n  ],\n  declarations: [\n    AlarmListWidgetComponent,\n    AlarmListWidgetConfigComponent,\n    AlarmWidgetAlarmsReloadComponent,\n    SeverityIconPipe,\n    SortingDescriptionPopoverMessagePipe\n  ]\n})\nexport class AlarmsWidgetModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.AlarmWidgetService","i4","i9.SeverityIconPipe","i10.SortingDescriptionPopoverMessagePipe","i2","i3","i5","i6.AlarmWidgetAlarmsReloadComponent","NgCommonModule","NgFormsModule"],"mappings":"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"}