@hermes-ui/angular 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/button/_buttons.clarity.scss +80 -2
- package/button/_mixins.buttons.scss +44 -2
- package/button/_properties.buttons.scss +209 -247
- package/button/_variables.buttons.scss +22 -0
- package/fesm2022/hermes-ui-angular-accordion.mjs +2 -2
- package/fesm2022/hermes-ui-angular-accordion.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-card-container.mjs +3 -3
- package/fesm2022/hermes-ui-angular-addons-card-container.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-datagrid.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-datagrid.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-property-view.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-property-view.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs +66 -66
- package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-var.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-var.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-addons-wizard.mjs +2 -2
- package/fesm2022/hermes-ui-angular-addons-wizard.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-button.mjs +2 -2
- package/fesm2022/hermes-ui-angular-button.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data-datagrid.mjs +2 -2
- package/fesm2022/hermes-ui-angular-data-datagrid.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data-stack-view.mjs +2 -2
- package/fesm2022/hermes-ui-angular-data-stack-view.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-data-tree-view.mjs +2 -2
- package/fesm2022/hermes-ui-angular-data-tree-view.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-emphasis-alert.mjs +2 -2
- package/fesm2022/hermes-ui-angular-emphasis-alert.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-checkbox.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-combobox.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-combobox.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-common.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-common.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-datalist.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-datalist.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-datepicker.mjs +3 -3
- package/fesm2022/hermes-ui-angular-forms-datepicker.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-file-input.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-file-input.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-input.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-input.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-native-select.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-native-select.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-number-input.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-number-input.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-password.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-password.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-radio.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-range.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-range.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-select.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-select.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-forms-textarea.mjs +2 -2
- package/fesm2022/hermes-ui-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-icon.mjs +29 -29
- package/fesm2022/hermes-ui-angular-icon.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-nav.mjs +2 -2
- package/fesm2022/hermes-ui-angular-layout-nav.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-tabs.mjs +2 -2
- package/fesm2022/hermes-ui-angular-layout-tabs.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs +382 -28
- package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-modal.mjs +2 -2
- package/fesm2022/hermes-ui-angular-modal.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-popover-signpost.mjs +2 -2
- package/fesm2022/hermes-ui-angular-popover-signpost.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-stepper.mjs +2 -2
- package/fesm2022/hermes-ui-angular-stepper.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-timeline.mjs +2 -2
- package/fesm2022/hermes-ui-angular-timeline.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-toast.mjs +2 -2
- package/fesm2022/hermes-ui-angular-toast.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-utils.mjs +6 -0
- package/fesm2022/hermes-ui-angular-utils.mjs.map +1 -1
- package/fesm2022/hermes-ui-angular-wizard.mjs +2 -2
- package/fesm2022/hermes-ui-angular-wizard.mjs.map +1 -1
- package/forms/combobox/_combobox.clarity.scss +18 -4
- package/forms/combobox/_properties.combobox.scss +5 -5
- package/forms/styles/_input-group.clarity.scss +7 -0
- package/forms/styles/_mixins.forms.scss +12 -10
- package/forms/styles/_native-select.clarity.scss +17 -5
- package/forms/styles/_properties.forms.scss +29 -18
- package/forms/styles/_textarea.clarity.scss +4 -4
- package/forms/styles/_variables.forms.scss +6 -0
- package/layout/main-container/_properties.header.scss +44 -6
- package/layout/main-container/_variables.header.scss +11 -0
- package/layout/nav/_header.clarity.scss +14 -0
- package/layout/nav/_mixins.header.scss +55 -40
- package/layout/nav/_responsive-nav.clarity.scss +21 -10
- package/layout/vertical-nav/_properties.vertical-nav.scss +77 -27
- package/layout/vertical-nav/_variables.vertical-nav.scss +23 -0
- package/layout/vertical-nav/_vertical-nav.clarity.scss +418 -277
- package/package.json +1 -1
- package/types/hermes-ui-angular-addons-theme-builder.d.ts +2 -2
- package/types/hermes-ui-angular-addons-theme-builder.d.ts.map +1 -1
- package/types/hermes-ui-angular-icon.d.ts +3 -3
- package/types/hermes-ui-angular-icon.d.ts.map +1 -1
- package/types/hermes-ui-angular-layout-vertical-nav.d.ts +134 -10
- package/types/hermes-ui-angular-layout-vertical-nav.d.ts.map +1 -1
- package/types/hermes-ui-angular-utils.d.ts +12 -0
- package/types/hermes-ui-angular-utils.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes-ui-angular-addons-datagrid-filters.mjs","sources":["../../../addons/datagrid-filters/model/datagrid-filters.enums.ts","../../../addons/datagrid-filters/model/datagrid-filters.interfaces.ts","../../../addons/datagrid-filters/datagrid-filters-strings.service.ts","../../../addons/datagrid-filters/advanced-filters/filter-form.component.ts","../../../addons/datagrid-filters/advanced-filters/filter-form.component.html","../../../addons/datagrid-filters/advanced-filters/date-time-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/date-time-filter.component.html","../../../addons/datagrid-filters/advanced-filters/enum-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/enum-filter.component.html","../../../addons/datagrid-filters/filter-popover-reposition-directive.ts","../../../addons/datagrid-filters/advanced-filters/general-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/general-filter.component.html","../../../addons/datagrid-filters/manage-filters/dismissable.directive.ts","../../../addons/datagrid-filters/datagrid-filters-user-service.ts","../../../addons/datagrid-filters/advanced-filters/users-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/users-filter.component.html","../../../addons/datagrid-filters/manage-filters/manage-filter.component.ts","../../../addons/datagrid-filters/manage-filters/manage-filter.component.html","../../../addons/datagrid-filters/skip-filters.pipe.ts","../../../addons/datagrid-filters/composite-filters.component.ts","../../../addons/datagrid-filters/composite-filters.component.html","../../../addons/datagrid-filters/datagrid-filters.component.ts","../../../addons/datagrid-filters/datagrid-filters.component.html","../../../addons/datagrid-filters/datagrid-filters.module.ts","../../../addons/datagrid-filters/index.ts","../../../addons/datagrid-filters/hermes-ui-angular-addons-datagrid-filters.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport enum ComparisonOperator {\r\n Contains,\r\n DoesNotContain,\r\n Equals,\r\n DoesNotEqual,\r\n StartsWith,\r\n EndsWith,\r\n IsEmpty,\r\n LessThan,\r\n LessThanOrEqualTo,\r\n GreaterThan,\r\n GreaterThanOrEqualTo,\r\n Before,\r\n BeforeOrEqualTo,\r\n After,\r\n AfterOrEqualTo,\r\n CustomRange,\r\n LastDay,\r\n LastWeek,\r\n LastMonth,\r\n LastYear,\r\n TimeSpan,\r\n}\r\n\r\nexport enum LogicalOperator {\r\n And,\r\n Or,\r\n}\r\n\r\nexport enum FilterMode {\r\n Quick,\r\n Advanced,\r\n AdvancedOnly,\r\n}\r\n\r\nexport enum PropertyType {\r\n String,\r\n Enum,\r\n Numeric,\r\n DateTime,\r\n User,\r\n}\r\n\r\nexport enum Unit {\r\n Byte,\r\n KB,\r\n MB,\r\n GB,\r\n TB,\r\n HZ,\r\n KHZ,\r\n MHZ,\r\n GHZ,\r\n BytePS,\r\n KBytePS,\r\n MBytePS,\r\n GBytePS,\r\n BitPS,\r\n KBitPS,\r\n MBitPS,\r\n GBitPS,\r\n}\r\n\r\nexport enum TimeSpan {\r\n Minutes,\r\n Hours,\r\n Days,\r\n Weeks,\r\n Months,\r\n Years,\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/parameter-properties */\r\n\r\nimport { ComparisonOperator, LogicalOperator, Unit } from './datagrid-filters.enums';\r\n\r\n/**\r\n * Defines a property that can be used to filter data in a datagrid.\r\n * Filterable properties are usually a subset of the datagrid columns.\r\n */\r\nexport abstract class FilterablePropertyDefinition {\r\n /**\r\n * Used internally to store dynamically the selected numeric value, unit and/or other properties.\r\n */\r\n [key: string]: any;\r\n\r\n /**\r\n * Name as shown to users\r\n */\r\n displayName: string;\r\n\r\n /**\r\n * Actual name of the property that is used for filtering\r\n */\r\n property: string;\r\n\r\n /**\r\n * List of comparison operators. Optional.\r\n * Use it to override the default operators for the property.\r\n * Useful in case the data provider does not support all operators.\r\n */\r\n supportedOperators?: ComparisonOperator[];\r\n\r\n protected constructor(displayName: string, property: string, operators?: ComparisonOperator[]) {\r\n this.displayName = displayName;\r\n this.property = property;\r\n if (operators) {\r\n this.supportedOperators = operators;\r\n }\r\n }\r\n}\r\n\r\nexport class StringPropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Indicates that the property can be used with single condition only.\r\n */\r\n singleCondition = false;\r\n\r\n /**\r\n * Indicates that this property only supports a single logical operator (AND or OR).\r\n */\r\n logicalOperator: LogicalOperator | undefined;\r\n\r\n private readonly defaultOperators: ComparisonOperator[] = [\r\n ComparisonOperator.Equals,\r\n ComparisonOperator.DoesNotEqual,\r\n ComparisonOperator.Contains,\r\n ComparisonOperator.DoesNotContain,\r\n ComparisonOperator.StartsWith,\r\n ComparisonOperator.EndsWith,\r\n ComparisonOperator.IsEmpty,\r\n ];\r\n\r\n constructor(\r\n displayName: string,\r\n property: string,\r\n operators?: ComparisonOperator[],\r\n singleCondition?: boolean,\r\n logicalOperator?: LogicalOperator\r\n ) {\r\n super(displayName, property, operators);\r\n if (singleCondition) {\r\n this.singleCondition = singleCondition;\r\n }\r\n this.logicalOperator = logicalOperator;\r\n }\r\n\r\n getOperators(): ComparisonOperator[] {\r\n return this.supportedOperators || this.defaultOperators;\r\n }\r\n}\r\n\r\nexport class EnumPropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Enumeration key/value data to be used in the filter selection\r\n */\r\n values: Map<string, string>;\r\n\r\n /**\r\n * Indicates that the property should be used for single select filtering\r\n */\r\n singleSelect = false;\r\n\r\n /**\r\n * Indicates that the enumeration should be searchable in the filter UI.\r\n */\r\n searchable = false;\r\n\r\n /**\r\n * Flag indicating whether to show the select all checkbox.\r\n */\r\n enableSelectAll = true;\r\n\r\n /**\r\n * Creates an instance of EnumPropertyDefinition.\r\n * @param displayName - The human-readable name of the property shown in the UI.\r\n * @param property - The technical property name used for filtering logic.\r\n * @param values - A Map containing the enum keys and their corresponding display values.\r\n * @param singleSelect - Whether the filter restricts selection to a single item. Defaults to false.\r\n * @param searchable - Whether to enable a search input for the enum options. Defaults to false.\r\n * @param enableSelectAll - Whether to display the select all checkbox. Defaults to true.\r\n * @param allowNotInOperator - Flag indicating whether to allow the use of the \"NOT IN\" operator\r\n * for the selected values, enabling users to exclude specific enum items.\r\n */\r\n constructor(\r\n displayName: string,\r\n property: string,\r\n values: Map<string, string>,\r\n singleSelect = false,\r\n searchable = false,\r\n enableSelectAll = true,\r\n allowNotInOperator = false\r\n ) {\r\n super(\r\n displayName,\r\n property,\r\n allowNotInOperator ? [ComparisonOperator.DoesNotEqual, ComparisonOperator.Equals] : undefined\r\n );\r\n this.values = values;\r\n this.singleSelect = singleSelect;\r\n this.searchable = searchable;\r\n this.enableSelectAll = enableSelectAll;\r\n }\r\n}\r\n\r\nexport class NumericPropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Default unit of the metric\r\n */\r\n unit: Unit;\r\n /**\r\n * Indicates that the property can be used with single condition only.\r\n */\r\n singleCondition = false;\r\n\r\n /**\r\n * Indicates that this property only supports a single logical operator (AND or OR).\r\n */\r\n logicalOperator: LogicalOperator | undefined;\r\n\r\n private readonly defaultOperators: ComparisonOperator[] = [\r\n ComparisonOperator.Equals,\r\n ComparisonOperator.DoesNotEqual,\r\n ComparisonOperator.LessThan,\r\n ComparisonOperator.LessThanOrEqualTo,\r\n ComparisonOperator.GreaterThan,\r\n ComparisonOperator.GreaterThanOrEqualTo,\r\n ComparisonOperator.IsEmpty,\r\n ];\r\n\r\n constructor(\r\n displayName: string,\r\n property: string,\r\n operators?: ComparisonOperator[],\r\n unit?: Unit,\r\n singleCondition?: boolean,\r\n logicalOperator?: LogicalOperator\r\n ) {\r\n super(displayName, property, operators);\r\n // Check for null and undefined\r\n if (unit !== null && unit !== undefined) {\r\n this.unit = unit;\r\n }\r\n if (singleCondition) {\r\n this.singleCondition = singleCondition;\r\n }\r\n this.logicalOperator = logicalOperator;\r\n }\r\n\r\n getOperators(): ComparisonOperator[] {\r\n return this.supportedOperators || this.defaultOperators;\r\n }\r\n}\r\n\r\nexport class UserPropertyDefinition extends FilterablePropertyDefinition {\r\n constructor(displayName: string, property: string) {\r\n super(displayName, property, [ComparisonOperator.Equals, ComparisonOperator.DoesNotEqual]);\r\n }\r\n}\r\n\r\nexport class DateTimePropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Flag indicating whether to include seconds in the time selector for the DateTime filter.\r\n */\r\n includeSeconds: boolean;\r\n\r\n private readonly defaultOperators: ComparisonOperator[] = [\r\n ComparisonOperator.Equals,\r\n ComparisonOperator.Before,\r\n ComparisonOperator.BeforeOrEqualTo,\r\n ComparisonOperator.After,\r\n ComparisonOperator.AfterOrEqualTo,\r\n ComparisonOperator.CustomRange,\r\n ComparisonOperator.IsEmpty,\r\n ComparisonOperator.LastDay,\r\n ComparisonOperator.LastWeek,\r\n ComparisonOperator.LastMonth,\r\n ComparisonOperator.LastYear,\r\n ComparisonOperator.TimeSpan,\r\n ];\r\n\r\n constructor(displayName: string, property: string, operators?: ComparisonOperator[], includeSeconds?: boolean) {\r\n super(displayName, property, operators);\r\n this.includeSeconds = includeSeconds ? includeSeconds : false;\r\n }\r\n\r\n getOperators(): ComparisonOperator[] {\r\n return this.supportedOperators || this.defaultOperators;\r\n }\r\n}\r\n\r\nexport class PropertyFilter {\r\n /**\r\n * Filter criteria\r\n */\r\n criteria: PropertyPredicate[];\r\n /**\r\n * Logical operator. Supported values are AND/OR\r\n */\r\n operator: LogicalOperator;\r\n}\r\n\r\nexport class PropertyPredicate {\r\n /**\r\n * Property that is used for filtering\r\n */\r\n filterableProperty: FilterablePropertyDefinition;\r\n\r\n /**\r\n * Filtering operator\r\n */\r\n operator: ComparisonOperator;\r\n\r\n /**\r\n * Filter value\r\n */\r\n value: any;\r\n}\r\n\r\nexport interface EnumPropertyData {\r\n key: string;\r\n value: string;\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ComparisonOperator, LogicalOperator, TimeSpan, Unit } from './model/datagrid-filters.enums';\r\n\r\n/**\r\n * User-visible strings used in the 'appfx-datagrid-filters' library.\r\n * Fields are read-only to avoid accidentally modifying the values and affecting all\r\n * filters in the application.\r\n *\r\n * Strings are in English only. If you need to provide localized strings:\r\n * - extend this class\r\n * - override all fields with localized values\r\n * - provide instance in the module, where you use AppFx\r\n *\r\n * ```\r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DatagridFiltersStrings, useClass: LocalizedDatagridFiltersStrings },\r\n * ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DatagridFiltersStrings {\r\n /**\r\n * Filter type label.\r\n */\r\n readonly filterType: string = 'Filter Type';\r\n\r\n /**\r\n * Quick filter label.\r\n */\r\n readonly quickFilter: string = 'Quick Filter';\r\n\r\n /**\r\n * Advanced filter label.\r\n */\r\n readonly advancedFilter: string = 'Advanced Filter';\r\n\r\n /**\r\n * Input placeholder.\r\n */\r\n readonly enterValue: string = 'Enter value';\r\n\r\n /**\r\n * Required validator error message\r\n */\r\n readonly requiredValidatorMessage: string = 'This field is required';\r\n\r\n /**\r\n * Numeric input validator error message\r\n */\r\n readonly integerValidatorMessage: string = 'Integer value required';\r\n\r\n /**\r\n * Add new filter button label.\r\n */\r\n readonly addNew: string = 'Add new';\r\n\r\n /**\r\n * Add new filter button aria label.\r\n */\r\n readonly addNewAriaLabel: string = 'Add new filter';\r\n\r\n /**\r\n * Select filter label.\r\n */\r\n readonly filterLabel: string = 'Filter';\r\n\r\n /**\r\n * Select operator label.\r\n */\r\n readonly operatorLabel: string = 'Operator';\r\n\r\n /**\r\n * Comparison operator display names.\r\n */\r\n readonly operator: {\r\n after: string;\r\n afterOrEqualTo: string;\r\n before: string;\r\n beforeOrEqualTo: string;\r\n contains: string;\r\n customRange: string;\r\n doesNotContain: string;\r\n doesNotEqual: string;\r\n endsWith: string;\r\n equals: string;\r\n greaterThan: string;\r\n greaterThanOrEqualTo: string;\r\n isEmpty: string;\r\n lastDay: string;\r\n lastWeek: string;\r\n lastMonth: string;\r\n lastYear: string;\r\n lessThan: string;\r\n lessThanOrEqualTo: string;\r\n startsWith: string;\r\n timeSpan: string;\r\n } = {\r\n after: 'After',\r\n afterOrEqualTo: 'After or equal to',\r\n before: 'Before',\r\n beforeOrEqualTo: 'Before or equal to',\r\n contains: 'Contains',\r\n customRange: 'Custom range',\r\n doesNotContain: 'Does not contain',\r\n doesNotEqual: 'Does not equal',\r\n endsWith: 'Ends with',\r\n equals: 'Equals',\r\n greaterThan: 'Greater than',\r\n greaterThanOrEqualTo: 'Greater than or equal to',\r\n isEmpty: 'Is empty',\r\n lastDay: 'Last day',\r\n lastWeek: 'Last week',\r\n lastMonth: 'Last month',\r\n lastYear: 'Last year',\r\n lessThan: 'Less than',\r\n lessThanOrEqualTo: 'Less than or equal to',\r\n startsWith: 'Starts with',\r\n timeSpan: 'Time span',\r\n };\r\n\r\n /**\r\n * Select unit aria label.\r\n */\r\n readonly unitAriaLabel: string = 'Unit';\r\n\r\n /**\r\n * Add second condition button label.\r\n */\r\n readonly addCondition: string = 'Add condition';\r\n\r\n /**\r\n * Remove second condition button aria label.\r\n */\r\n readonly removeConditionAriaLabel: string = 'Remove second condition';\r\n\r\n /**\r\n * Conjoiners.\r\n */\r\n readonly logicalOperator: {\r\n and: string;\r\n or: string;\r\n } = {\r\n and: 'And',\r\n or: 'Or',\r\n };\r\n\r\n /**\r\n * Cancel button label.\r\n */\r\n readonly cancel: string = 'Cancel';\r\n\r\n /**\r\n * Apply button label.\r\n */\r\n readonly apply: string = 'Apply';\r\n\r\n /**\r\n * Select values label.\r\n */\r\n readonly valueLabel: string = 'Value';\r\n\r\n /**\r\n * Select all option label.\r\n */\r\n readonly selectAll: string = 'Select all';\r\n\r\n /**\r\n * Applied filters text.\r\n */\r\n readonly appliedText: string = 'applied';\r\n\r\n readonly editFilterText: string = 'Edit filter';\r\n\r\n readonly removeFilterText: string = 'Remove filter';\r\n\r\n readonly hideButtonLabel: string = 'Hide';\r\n\r\n readonly hideButtonAriaLabel: string = 'Hide filters';\r\n\r\n readonly showButtonLabel: string = 'Show';\r\n\r\n readonly filtersText: string = 'filters';\r\n\r\n readonly filterText: string = 'filter';\r\n\r\n readonly clearAllButtonLabel: string = 'Clear all';\r\n\r\n readonly clearAllButtonAriaLabel: string = 'Clear all filters';\r\n\r\n readonly searchOptions: string = 'Search options';\r\n\r\n readonly searchPlaceholder: string = 'Search...';\r\n\r\n readonly showingFormat: string = 'Showing {} of {} results';\r\n\r\n readonly noValuesFound: string = 'No matching values found.';\r\n\r\n readonly elementsSelectedFormat: string = '{} elements selected';\r\n\r\n readonly loading: string = 'Loading...';\r\n\r\n readonly allSearchResults: string = 'Select All Search Results';\r\n\r\n readonly loadMore: string = 'Load more ...';\r\n\r\n readonly domain: string = 'Domain';\r\n\r\n readonly user: string = 'User';\r\n\r\n readonly errorSearchingUsers: string = 'Error searching users.';\r\n\r\n readonly errorLoadingDomains: string = 'Error loading domains.';\r\n\r\n readonly emptyUsersError: string = 'Add at least one user.';\r\n\r\n /**\r\n * Add time condition button label.\r\n */\r\n readonly addTimeFilter: string = 'Filter by time';\r\n\r\n /**\r\n * Date input placeholder.\r\n */\r\n readonly dateFormat: string = 'YYYY-MM-DD';\r\n\r\n /**\r\n * Time input placeholder.\r\n */\r\n readonly timeFormat: string = 'HH:mm';\r\n\r\n /**\r\n * Date input validator error message\r\n */\r\n readonly dateValidatorMessage: string = 'Invalid date format';\r\n\r\n /**\r\n * Time input validator error message\r\n */\r\n readonly timeValidatorMessage: string = 'Invalid time format';\r\n\r\n readonly fromLabel: string = 'From';\r\n\r\n readonly toLabel: string = 'To';\r\n\r\n /**\r\n * Remove time filter button aria label.\r\n */\r\n readonly removeTimeFilterAriaLabel: string = 'Remove time filter';\r\n\r\n readonly timeSpan: {\r\n minutes: string;\r\n hours: string;\r\n days: string;\r\n weeks: string;\r\n months: string;\r\n years: string;\r\n } = {\r\n minutes: 'Minutes',\r\n hours: 'Hours',\r\n days: 'Days',\r\n weeks: 'Weeks',\r\n months: 'Months',\r\n years: 'Years',\r\n };\r\n\r\n /**\r\n * Time span aria label.\r\n */\r\n readonly timeSpanAriaLabel: string = 'Time span';\r\n\r\n readonly timeSpanInputLabel: string = 'In the last';\r\n\r\n readonly unit: {\r\n byte: string;\r\n kb: string;\r\n mb: string;\r\n gb: string;\r\n tb: string;\r\n hz: string;\r\n khz: string;\r\n mhz: string;\r\n ghz: string;\r\n byteps: string;\r\n kbyteps: string;\r\n mbyteps: string;\r\n gbyteps: string;\r\n bitps: string;\r\n kbitps: string;\r\n mbitps: string;\r\n gbitps: string;\r\n } = {\r\n byte: 'B',\r\n kb: 'KB',\r\n mb: 'MB',\r\n gb: 'GB',\r\n tb: 'TB',\r\n hz: 'Hz',\r\n khz: 'KHz',\r\n mhz: 'MHz',\r\n ghz: 'GHz',\r\n byteps: 'B/s',\r\n kbyteps: 'KB/s',\r\n mbyteps: 'MB/s',\r\n gbyteps: 'GB/s',\r\n bitps: 'Bit/s',\r\n kbitps: 'Kbit/s',\r\n mbitps: 'Mbit/s',\r\n gbitps: 'Gbit/s',\r\n };\r\n\r\n formatString(stringFormat: string, args: string[]): string {\r\n let result = stringFormat;\r\n for (const arg of args) {\r\n result = result.replace('{}', arg);\r\n }\r\n return result;\r\n }\r\n\r\n getOperatorDisplayName(operator: ComparisonOperator): string {\r\n switch (operator) {\r\n case ComparisonOperator.After:\r\n return this.operator.after;\r\n case ComparisonOperator.AfterOrEqualTo:\r\n return this.operator.afterOrEqualTo;\r\n case ComparisonOperator.Before:\r\n return this.operator.before;\r\n case ComparisonOperator.BeforeOrEqualTo:\r\n return this.operator.beforeOrEqualTo;\r\n case ComparisonOperator.Contains:\r\n return this.operator.contains;\r\n case ComparisonOperator.CustomRange:\r\n return this.operator.customRange;\r\n case ComparisonOperator.DoesNotContain:\r\n return this.operator.doesNotContain;\r\n case ComparisonOperator.DoesNotEqual:\r\n return this.operator.doesNotEqual;\r\n case ComparisonOperator.Equals:\r\n return this.operator.equals;\r\n case ComparisonOperator.EndsWith:\r\n return this.operator.endsWith;\r\n case ComparisonOperator.GreaterThan:\r\n return this.operator.greaterThan;\r\n case ComparisonOperator.GreaterThanOrEqualTo:\r\n return this.operator.greaterThanOrEqualTo;\r\n case ComparisonOperator.IsEmpty:\r\n return this.operator.isEmpty;\r\n case ComparisonOperator.LastDay:\r\n return this.operator.lastDay;\r\n case ComparisonOperator.LastWeek:\r\n return this.operator.lastWeek;\r\n case ComparisonOperator.LastMonth:\r\n return this.operator.lastMonth;\r\n case ComparisonOperator.LastYear:\r\n return this.operator.lastYear;\r\n case ComparisonOperator.LessThan:\r\n return this.operator.lessThan;\r\n case ComparisonOperator.LessThanOrEqualTo:\r\n return this.operator.lessThanOrEqualTo;\r\n case ComparisonOperator.StartsWith:\r\n return this.operator.startsWith;\r\n case ComparisonOperator.TimeSpan:\r\n return this.operator.timeSpan;\r\n default:\r\n return 'Unknown operator!';\r\n }\r\n }\r\n\r\n getConjoinerDisplayName(conjoiner: LogicalOperator): string {\r\n switch (conjoiner) {\r\n case LogicalOperator.And:\r\n return this.logicalOperator.and;\r\n case LogicalOperator.Or:\r\n return this.logicalOperator.or;\r\n default:\r\n return 'Unknown logical operator!';\r\n }\r\n }\r\n\r\n getTimeSpanDisplayName(timeSpan: TimeSpan): string {\r\n switch (timeSpan) {\r\n case TimeSpan.Minutes:\r\n return this.timeSpan.minutes;\r\n case TimeSpan.Hours:\r\n return this.timeSpan.hours;\r\n case TimeSpan.Days:\r\n return this.timeSpan.days;\r\n case TimeSpan.Weeks:\r\n return this.timeSpan.weeks;\r\n case TimeSpan.Months:\r\n return this.timeSpan.months;\r\n case TimeSpan.Years:\r\n return this.timeSpan.years;\r\n default:\r\n return 'Unknown time span!';\r\n }\r\n }\r\n\r\n getUnitDisplayName(unit: Unit): string {\r\n switch (unit) {\r\n case Unit.Byte:\r\n return this.unit.byte;\r\n case Unit.KB:\r\n return this.unit.kb;\r\n case Unit.MB:\r\n return this.unit.mb;\r\n case Unit.GB:\r\n return this.unit.gb;\r\n case Unit.TB:\r\n return this.unit.tb;\r\n case Unit.HZ:\r\n return this.unit.hz;\r\n case Unit.KHZ:\r\n return this.unit.khz;\r\n case Unit.MHZ:\r\n return this.unit.mhz;\r\n case Unit.GHZ:\r\n return this.unit.ghz;\r\n case Unit.BytePS:\r\n return this.unit.byteps;\r\n case Unit.KBytePS:\r\n return this.unit.kbyteps;\r\n case Unit.MBytePS:\r\n return this.unit.mbyteps;\r\n case Unit.GBytePS:\r\n return this.unit.gbyteps;\r\n case Unit.BitPS:\r\n return this.unit.bitps;\r\n case Unit.KBitPS:\r\n return this.unit.kbitps;\r\n case Unit.MBitPS:\r\n return this.unit.mbitps;\r\n case Unit.GBitPS:\r\n return this.unit.gbitps;\r\n default:\r\n return 'Unknown unit!';\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\n\r\n/**\r\n * Reusable form component.\r\n *\r\n */\r\n@Component({\r\n selector: 'appfx-filter-form',\r\n standalone: false,\r\n templateUrl: 'filter-form.component.html',\r\n styleUrls: ['../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FilterFormComponent {\r\n /**\r\n * Hosting view form status\r\n */\r\n @Input() valid: boolean;\r\n\r\n /**\r\n * Event emitter to tell hosting view that cancel button was clicked\r\n */\r\n @Output() cancel: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that apply button was clicked\r\n */\r\n @Output() apply: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n constructor(public filterStrings: DatagridFiltersStrings) {}\r\n\r\n onApplyButtonClick(): void {\r\n this.apply.emit();\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.cancel.emit();\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<form hermesForm class=\"form-compact\" hermesLayout=\"vertical\">\r\n <div class=\"form-max-height\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div>\r\n <button\r\n type=\"button\"\r\n data-test-id=\"submitBtn\"\r\n class=\"btn btn-sm btn-primary btn-right\"\r\n [disabled]=\"!valid\"\r\n (click)=\"onApplyButtonClick()\"\r\n >\r\n {{ filterStrings.apply }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n data-test-id=\"cancelBtn\"\r\n class=\"btn btn-sm btn-outline btn-right\"\r\n (click)=\"onCancelButtonClick()\"\r\n >\r\n {{ filterStrings.cancel }}\r\n </button>\r\n </div>\r\n</form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, LogicalOperator, TimeSpan } from '../model/datagrid-filters.enums';\r\nimport { DateTimePropertyDefinition, PropertyFilter, PropertyPredicate } from '../model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst dateTimeFormat = 'yyyy-MM-ddTHH:mm:ss';\r\nconst requiredValidators: ValidatorFn[] = [Validators.required];\r\n\r\n// TODO: zpopov: Existing time utils to convert to/from milliseconds may make the code even easier to read\r\nconst oneSecondMs: number = 1 * 1000;\r\nconst oneMinuteMs: number = 60 * oneSecondMs;\r\nconst oneHourMs: number = 60 * oneMinuteMs;\r\nconst oneDayMs: number = 24 * oneHourMs;\r\nconst oneWeekMs: number = 7 * oneDayMs;\r\nconst oneMonthMs: number = 30 * oneDayMs;\r\n// We ignore leap years when it comes to time-spans.\r\nconst oneYearMs: number = 365 * oneDayMs;\r\n\r\n/**\r\n * Datetime filter component collects filtering criteria for datetime based properties\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-datetime-filter',\r\n standalone: false,\r\n templateUrl: 'date-time-filter.component.html',\r\n styleUrls: ['date-time-filter.component.scss', '../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DateTimeFilterComponent implements OnInit, OnChanges {\r\n readonly timeSpans: TimeSpan[];\r\n dateTimeFilterForm: FormGroup;\r\n comparisonOperators: ComparisonOperator[];\r\n isEmptyPredicate = false;\r\n isCustomRangePredicate = false;\r\n isRelativePredicate = false;\r\n isTimeSpanPredicate = false;\r\n timePredicate = false;\r\n includeSeconds = false;\r\n /**\r\n * In case the component is used for filter editing\r\n */\r\n @Input() propertyFilter: PropertyFilter;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n private readonly relativeOperators: ComparisonOperator[] = [\r\n ComparisonOperator.LastDay,\r\n ComparisonOperator.LastWeek,\r\n ComparisonOperator.LastMonth,\r\n ComparisonOperator.LastYear,\r\n ];\r\n private readonly singlePredicateOperators: ComparisonOperator[] = [\r\n ComparisonOperator.After,\r\n ComparisonOperator.AfterOrEqualTo,\r\n ComparisonOperator.Before,\r\n ComparisonOperator.BeforeOrEqualTo,\r\n ];\r\n private selectedFilterCriteria: PropertyFilter = new PropertyFilter();\r\n private primaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n private secondaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n\r\n /**\r\n * Property used for filtering\r\n */\r\n #filterProperty: DateTimePropertyDefinition;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private datePipe: DatePipe,\r\n public filterStrings: DatagridFiltersStrings\r\n ) {\r\n this.timeSpans = [TimeSpan.Minutes, TimeSpan.Hours, TimeSpan.Days, TimeSpan.Weeks, TimeSpan.Months, TimeSpan.Years];\r\n }\r\n\r\n @Input()\r\n get filterProperty(): DateTimePropertyDefinition {\r\n return this.#filterProperty;\r\n }\r\n set filterProperty(filterProperty: DateTimePropertyDefinition) {\r\n this.#filterProperty = filterProperty;\r\n }\r\n\r\n ngOnInit() {\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n let dateValidators: ValidatorFn[] = requiredValidators;\r\n\r\n // To handle edit mode\r\n const storedOperator: ComparisonOperator = this.propertyFilter?.criteria[0]?.filterableProperty.selectedOperator;\r\n if (storedOperator) {\r\n this.processSelectedOperator(storedOperator);\r\n if (this.noDateTimeInputNeeded()) {\r\n dateValidators = [];\r\n }\r\n }\r\n\r\n this.dateTimeFilterForm = this.formBuilder.group({\r\n operator: [storedOperator || ComparisonOperator.AfterOrEqualTo],\r\n dateValue: [this.parseDateValue(this.getStoredDateTimeValue()), dateValidators],\r\n });\r\n\r\n if (this.parseTimeValue(this.getStoredDateTimeValue()).length > 0) {\r\n this.enableTimePredicate();\r\n }\r\n\r\n if (ComparisonOperator.CustomRange === storedOperator) {\r\n this.isCustomRangePredicate = true;\r\n this.enableCustomRangePredicate();\r\n }\r\n\r\n if (this.isTimeSpanPredicate) {\r\n this.enableTimeSpanPredicate();\r\n }\r\n\r\n this.onOperatorChange();\r\n }\r\n\r\n ngOnChanges() {\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n this.includeSeconds = this.filterProperty.includeSeconds;\r\n }\r\n\r\n onInputKeyPress(event: KeyboardEvent): void {\r\n if (event.key === enterKey) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n if (this.dateTimeFilterForm.valid) {\r\n this.onApplyButtonClick();\r\n }\r\n }\r\n }\r\n\r\n enableTimePredicate(): void {\r\n this.timePredicate = true;\r\n this.dateTimeFilterForm.addControl(\r\n 'timeValue',\r\n new FormControl(this.parseTimeValue(this.getStoredDateTimeValue()), requiredValidators)\r\n );\r\n if (this.isCustomRangePredicate) {\r\n this.dateTimeFilterForm.addControl(\r\n 'timeValueTo',\r\n new FormControl(this.parseTimeValue(this.getStoredDateTimeValueTo()), requiredValidators)\r\n );\r\n }\r\n }\r\n\r\n disableTimePredicate(): void {\r\n this.timePredicate = false;\r\n this.dateTimeFilterForm.removeControl('timeValue');\r\n if (this.isCustomRangePredicate) {\r\n this.dateTimeFilterForm.removeControl('timeValueTo');\r\n }\r\n }\r\n\r\n noDateTimeInputNeeded(): boolean {\r\n return this.isEmptyPredicate || this.isTimeSpanPredicate || this.isRelativePredicate;\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n const selectedOperator: ComparisonOperator = this.dateTimeFilterForm.value.operator;\r\n\r\n if (this.isRelativeDateTimeOperator(selectedOperator)) {\r\n this.primaryPredicate = this.getRelativeDateTimePredicate(selectedOperator);\r\n this.secondaryPredicate = this.getcurrentTimePredicate();\r\n } else if (this.isTimeSpanPredicate) {\r\n this.primaryPredicate = this.getTimeSpanPredicate(\r\n this.dateTimeFilterForm.value.timeSpanValue,\r\n this.dateTimeFilterForm.value.timeSpan\r\n );\r\n this.secondaryPredicate = this.getcurrentTimePredicate();\r\n } else if (this.isCustomRangePredicate) {\r\n this.primaryPredicate = this.getFromDateTimePredicate();\r\n this.secondaryPredicate = this.getToDateTimePredicate();\r\n } else if (ComparisonOperator.Equals === selectedOperator) {\r\n this.buildEqualsDateTimePredicates();\r\n } else if (this.isSinglePredicateOperator(selectedOperator)) {\r\n this.primaryPredicate = this.getSinglePredicate(selectedOperator);\r\n }\r\n\r\n this.primaryPredicate.filterableProperty = this.filterProperty;\r\n\r\n if (!this.isEmptyPredicate) {\r\n this.primaryPredicate.value = this.adjustTimeZone(this.primaryPredicate.value);\r\n if (!this.isSinglePredicateOperator(selectedOperator)) {\r\n this.secondaryPredicate.filterableProperty = this.filterProperty;\r\n this.secondaryPredicate.value = this.adjustTimeZone(this.secondaryPredicate.value);\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate, this.secondaryPredicate];\r\n this.selectedFilterCriteria.operator = LogicalOperator.And;\r\n } else {\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate];\r\n }\r\n } else {\r\n this.primaryPredicate.operator = ComparisonOperator.IsEmpty;\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate];\r\n }\r\n\r\n // Selected data is stored, in order to be able to be rendered in edit mode\r\n this.storeSelectedValues();\r\n\r\n this.filterCriteriaChange.emit(this.selectedFilterCriteria);\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n private onOperatorChange(): void {\r\n this.dateTimeFilterForm.get('operator')?.valueChanges.subscribe((operator: ComparisonOperator) => {\r\n this.processSelectedOperator(operator);\r\n if (this.noDateTimeInputNeeded()) {\r\n this.disableDateTimePredicates();\r\n } else {\r\n this.isCustomRangePredicate = ComparisonOperator.CustomRange === operator;\r\n this.enableDateTimePredicates();\r\n if (!this.isCustomRangePredicate) {\r\n this.disableCustomRangePredicate();\r\n }\r\n }\r\n if (this.isTimeSpanPredicate) {\r\n this.enableTimeSpanPredicate();\r\n } else {\r\n this.disableTimeSpanPredicate();\r\n }\r\n });\r\n }\r\n\r\n private addValidators(formControlName: string, validators: ValidatorFn[]): void {\r\n this.dateTimeFilterForm.get(formControlName)?.addValidators(validators);\r\n this.dateTimeFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private removeValidators(formControlName: string): void {\r\n this.dateTimeFilterForm.get(formControlName)?.clearValidators();\r\n this.dateTimeFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private isRelativeDateTimeOperator(operator: ComparisonOperator): boolean {\r\n return this.relativeOperators.includes(operator);\r\n }\r\n\r\n private isSinglePredicateOperator(operator: ComparisonOperator): boolean {\r\n return this.singlePredicateOperators.includes(operator);\r\n }\r\n\r\n private enableCustomRangePredicate(): void {\r\n this.dateTimeFilterForm.addControl(\r\n 'dateValueTo',\r\n new FormControl(this.parseDateValue(this.getStoredDateTimeValueTo()), requiredValidators)\r\n );\r\n if (this.timePredicate) {\r\n this.dateTimeFilterForm.addControl(\r\n 'timeValueTo',\r\n new FormControl(this.parseTimeValue(this.getStoredDateTimeValueTo()), requiredValidators)\r\n );\r\n }\r\n }\r\n\r\n private disableCustomRangePredicate(): void {\r\n this.isCustomRangePredicate = false;\r\n this.dateTimeFilterForm.removeControl('dateValueTo');\r\n if (this.timePredicate) {\r\n this.dateTimeFilterForm.removeControl('timeValueTo');\r\n }\r\n }\r\n\r\n private enableDateTimePredicates(): void {\r\n this.addValidators('dateValue', requiredValidators);\r\n if (this.timePredicate) {\r\n this.enableTimePredicate();\r\n }\r\n if (this.isCustomRangePredicate) {\r\n this.enableCustomRangePredicate();\r\n }\r\n }\r\n\r\n private disableDateTimePredicates(): void {\r\n this.removeValidators('dateValue');\r\n if (this.timePredicate) {\r\n this.disableTimePredicate();\r\n }\r\n if (this.isCustomRangePredicate) {\r\n this.disableCustomRangePredicate();\r\n }\r\n }\r\n\r\n private enableTimeSpanPredicate(): void {\r\n const timeSpanValue: number = this.propertyFilter?.criteria[0]?.filterableProperty?.selectedTimeSpanValue;\r\n this.dateTimeFilterForm.addControl('timeSpanValue', new FormControl(timeSpanValue || '', requiredValidators));\r\n const timeSpan: TimeSpan = this.propertyFilter?.criteria[0]?.filterableProperty?.selectedTimeSpan;\r\n this.dateTimeFilterForm.addControl('timeSpan', new FormControl(timeSpan || TimeSpan.Minutes));\r\n }\r\n\r\n private disableTimeSpanPredicate(): void {\r\n this.dateTimeFilterForm.removeControl('timeSpanValue');\r\n this.dateTimeFilterForm.removeControl('timeSpan');\r\n }\r\n\r\n private processSelectedOperator(operator: ComparisonOperator): void {\r\n this.isEmptyPredicate = ComparisonOperator.IsEmpty === operator;\r\n this.isTimeSpanPredicate = ComparisonOperator.TimeSpan === operator;\r\n this.isRelativePredicate = this.isRelativeDateTimeOperator(operator);\r\n }\r\n\r\n private getRelativeDateTimePredicate(operator: ComparisonOperator): PropertyPredicate {\r\n const predicate: PropertyPredicate = new PropertyPredicate();\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n switch (operator) {\r\n case ComparisonOperator.LastDay:\r\n predicate.value = this.getPastDate(oneDayMs);\r\n return predicate;\r\n case ComparisonOperator.LastWeek:\r\n predicate.value = this.getPastDate(oneWeekMs);\r\n return predicate;\r\n case ComparisonOperator.LastMonth:\r\n predicate.value = this.getPastDate(oneMonthMs);\r\n return predicate;\r\n case ComparisonOperator.LastYear:\r\n predicate.value = this.getPastDate(oneYearMs);\r\n return predicate;\r\n default:\r\n return predicate;\r\n }\r\n }\r\n\r\n private getTimeSpanPredicate(value: number, timeSpan: TimeSpan): PropertyPredicate {\r\n const predicate: PropertyPredicate = new PropertyPredicate();\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n if (value < 0) {\r\n return predicate;\r\n }\r\n switch (timeSpan) {\r\n case TimeSpan.Minutes:\r\n predicate.value = this.getPastDate(value * oneMinuteMs);\r\n return predicate;\r\n case TimeSpan.Hours:\r\n predicate.value = this.getPastDate(value * oneHourMs);\r\n return predicate;\r\n case TimeSpan.Days:\r\n predicate.value = this.getPastDate(value * oneDayMs);\r\n return predicate;\r\n case TimeSpan.Weeks:\r\n predicate.value = this.getPastDate(value * oneWeekMs);\r\n return predicate;\r\n case TimeSpan.Months:\r\n predicate.value = this.getPastDate(value * oneMonthMs);\r\n return predicate;\r\n case TimeSpan.Years:\r\n predicate.value = this.getPastDate(value * oneYearMs);\r\n return predicate;\r\n default:\r\n return predicate;\r\n }\r\n }\r\n\r\n private buildEqualsDateTimePredicates(): void {\r\n this.primaryPredicate = this.getFromDateTimePredicate();\r\n this.secondaryPredicate.operator = ComparisonOperator.LessThan;\r\n if (this.timePredicate) {\r\n this.secondaryPredicate.value = this.getCustomDate(this.primaryPredicate.value, oneMinuteMs);\r\n } else {\r\n this.secondaryPredicate.value = this.getCustomDate(this.primaryPredicate.value, oneDayMs);\r\n }\r\n }\r\n\r\n private getSinglePredicate(operator: ComparisonOperator): PropertyPredicate {\r\n let predicate: PropertyPredicate = new PropertyPredicate();\r\n switch (operator) {\r\n case ComparisonOperator.BeforeOrEqualTo:\r\n predicate = this.getFromDateTimePredicate(true);\r\n predicate.operator = ComparisonOperator.LessThan;\r\n return predicate;\r\n case ComparisonOperator.Before:\r\n predicate = this.getFromDateTimePredicate();\r\n predicate.operator = ComparisonOperator.LessThan;\r\n return predicate;\r\n case ComparisonOperator.After:\r\n predicate = this.getFromDateTimePredicate(true);\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n return predicate;\r\n case ComparisonOperator.AfterOrEqualTo:\r\n predicate = this.getFromDateTimePredicate();\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n return predicate;\r\n default:\r\n return predicate;\r\n }\r\n }\r\n\r\n private getFromDateTimePredicate(adjustTime = false): PropertyPredicate {\r\n const fromPredicate: PropertyPredicate = new PropertyPredicate();\r\n fromPredicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n let fromValue: string = this.dateTimeFilterForm.value.dateValue;\r\n if (this.timePredicate) {\r\n fromValue += 'T' + this.dateTimeFilterForm.value.timeValue + (this.includeSeconds ? '' : ':00');\r\n if (adjustTime) {\r\n fromValue = this.getCustomDate(fromValue, oneMinuteMs);\r\n }\r\n } else {\r\n fromValue += 'T00:00:00';\r\n if (adjustTime) {\r\n fromValue = this.getCustomDate(fromValue, oneDayMs);\r\n }\r\n }\r\n fromPredicate.value = fromValue;\r\n return fromPredicate;\r\n }\r\n\r\n private getToDateTimePredicate(): PropertyPredicate {\r\n const toPredicate: PropertyPredicate = new PropertyPredicate();\r\n toPredicate.operator = ComparisonOperator.LessThan;\r\n let toValue: string = this.dateTimeFilterForm.value.dateValueTo;\r\n if (this.timePredicate) {\r\n toValue += 'T' + this.dateTimeFilterForm.value.timeValueTo + (this.includeSeconds ? '' : ':00');\r\n toValue = this.getCustomDate(toValue, oneMinuteMs);\r\n } else {\r\n toValue += 'T00:00:00';\r\n toValue = this.getCustomDate(toValue, oneDayMs);\r\n }\r\n toPredicate.value = toValue;\r\n return toPredicate;\r\n }\r\n\r\n private getcurrentTimePredicate(): PropertyPredicate {\r\n const predicate: PropertyPredicate = new PropertyPredicate();\r\n predicate.value = this.datePipe.transform(new Date(), dateTimeFormat);\r\n predicate.operator = ComparisonOperator.LessThanOrEqualTo;\r\n return predicate;\r\n }\r\n\r\n private getPastDate(timePeriod: number): string | null {\r\n const now: Date = new Date();\r\n const prevDate: Date = new Date(new Date().setTime(now.getTime() - timePeriod));\r\n return this.datePipe.transform(prevDate, dateTimeFormat);\r\n }\r\n\r\n private getCustomDate(baseDate: string, timePeriod: number): string {\r\n const date: Date = new Date(baseDate);\r\n const newDate: Date = new Date(new Date().setTime(date.getTime() + timePeriod));\r\n return this.datePipe.transform(newDate, dateTimeFormat) || baseDate;\r\n }\r\n\r\n private adjustTimeZone(utcDate: string): string {\r\n if (!utcDate) {\r\n return utcDate;\r\n }\r\n return utcDate + this.getUtcTimeZoneOffset(utcDate);\r\n }\r\n\r\n private getUtcTimeZoneOffset(utcDate: string): string {\r\n // Difference in minutes between the time on the local computer and Universal Coordinated Time\r\n const timeZoneOffset: number = new Date(utcDate).getTimezoneOffset();\r\n const decimalOffset: number = Math.abs(timeZoneOffset / 60);\r\n const offsetHours: number = Math.trunc(decimalOffset);\r\n const offsetMinutes: number = Math.round((decimalOffset - offsetHours) * 60);\r\n // Adding a leading 0 if needed\r\n const offsetHoursString: string = offsetHours.toLocaleString(undefined, {\r\n minimumIntegerDigits: 2,\r\n });\r\n const offsetMinutesString: string = offsetMinutes.toLocaleString(undefined, {\r\n minimumIntegerDigits: 2,\r\n });\r\n let utcOffset = '';\r\n if (timeZoneOffset > 0) {\r\n utcOffset = '-' + offsetHoursString + ':' + offsetMinutesString;\r\n } else if (timeZoneOffset < 0) {\r\n utcOffset = '+' + offsetHoursString + ':' + offsetMinutesString;\r\n }\r\n return utcOffset;\r\n }\r\n\r\n private storeSelectedValues(): void {\r\n this.primaryPredicate.filterableProperty.selectedOperator = this.dateTimeFilterForm.value.operator;\r\n this.primaryPredicate.filterableProperty.selectedValue = this.dateTimeFilterForm.value.dateValue;\r\n if (this.timePredicate) {\r\n this.primaryPredicate.filterableProperty.selectedValue += 'T' + this.dateTimeFilterForm.value.timeValue;\r\n }\r\n if (this.isCustomRangePredicate) {\r\n this.primaryPredicate.filterableProperty.selectedValueTo = this.dateTimeFilterForm.value.dateValueTo;\r\n if (this.timePredicate) {\r\n this.primaryPredicate.filterableProperty.selectedValueTo += 'T' + this.dateTimeFilterForm.value.timeValueTo;\r\n }\r\n }\r\n if (this.isTimeSpanPredicate) {\r\n this.primaryPredicate.filterableProperty.selectedTimeSpanValue = this.dateTimeFilterForm.value.timeSpanValue;\r\n this.primaryPredicate.filterableProperty.selectedTimeSpan = this.dateTimeFilterForm.value.timeSpan;\r\n }\r\n }\r\n\r\n private getStoredDateTimeValue(): string {\r\n return this.propertyFilter?.criteria[0]?.filterableProperty?.selectedValue || '';\r\n }\r\n\r\n private getStoredDateTimeValueTo(): string {\r\n return this.propertyFilter?.criteria[0]?.filterableProperty?.selectedValueTo || '';\r\n }\r\n\r\n private parseDateValue(dateTime: string): string {\r\n if (dateTime) {\r\n return dateTime.substring(0, 10);\r\n }\r\n return '';\r\n }\r\n\r\n private parseTimeValue(dateTime: string): string {\r\n if (!!dateTime && dateTime.indexOf('T') > 0) {\r\n return dateTime.substring(dateTime.indexOf('T') + 1);\r\n }\r\n return '';\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"dateTimeFilterForm\"\r\n [valid]=\"dateTimeFilterForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <hermes-native-select-container class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"operator\">\r\n @for (operator of comparisonOperators; track operator) {\r\n <option [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n @if (!noDateTimeInputNeeded()) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n @if (isCustomRangePredicate) {\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.fromLabel }}\r\n </label>\r\n }\r\n <input\r\n type=\"date\"\r\n pattern=\"^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$\"\r\n formControlName=\"dateValue\"\r\n placeholder=\"{{ filterStrings.dateFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.dateValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n </div>\r\n }\r\n @if (timePredicate) {\r\n <div class=\"flex-end-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"time\"\r\n [step]=\"includeSeconds ? 1 : 60\"\r\n pattern=\"^(0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):?([0-5][0-9])?$\"\r\n formControlName=\"timeValue\"\r\n placeholder=\"{{ filterStrings.timeFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.timeValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n <button\r\n class=\"close ml-half\"\r\n data-test-id=\"close-button\"\r\n [attr.aria-label]=\"filterStrings.removeTimeFilterAriaLabel\"\r\n (click)=\"disableTimePredicate()\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n }\r\n @if (isCustomRangePredicate) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.toLabel }}\r\n </label>\r\n <input\r\n type=\"date\"\r\n pattern=\"^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$\"\r\n formControlName=\"dateValueTo\"\r\n placeholder=\"{{ filterStrings.dateFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.dateValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n </div>\r\n }\r\n @if (timePredicate && isCustomRangePredicate) {\r\n <div class=\"flex-end-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"time\"\r\n [step]=\"includeSeconds ? 1 : 60\"\r\n pattern=\"^(0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):?([0-5][0-9])?$\"\r\n formControlName=\"timeValueTo\"\r\n placeholder=\"{{ filterStrings.timeFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.timeValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n <button\r\n class=\"close ml-half\"\r\n data-test-id=\"close-button\"\r\n [attr.aria-label]=\"filterStrings.removeTimeFilterAriaLabel\"\r\n (click)=\"disableTimePredicate()\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n }\r\n @if (!timePredicate && !noDateTimeInputNeeded()) {\r\n <button\r\n class=\"btn btn-sm btn-link mt-half\"\r\n data-test-id=\"add-button\"\r\n [attr.aria-label]=\"filterStrings.addTimeFilter\"\r\n (click)=\"enableTimePredicate()\"\r\n >\r\n <hermes-icon shape=\"plus\" class=\"is-solid\"></hermes-icon>\r\n {{ filterStrings.addTimeFilter }}\r\n </button>\r\n }\r\n @if (isTimeSpanPredicate) {\r\n <div class=\"flex-end-container\">\r\n <hermes-input-container>\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.timeSpanInputLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n pattern=\"^[0-9]+$\"\r\n formControlName=\"timeSpanValue\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.integerValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n <hermes-native-select-container class=\"ml-half\">\r\n <select hermesNativeSelect formControlName=\"timeSpan\" [attr.aria-label]=\"filterStrings.timeSpanAriaLabel\">\r\n @for (timeSpan of timeSpans; track timeSpan) {\r\n <option [ngValue]=\"timeSpan\">\r\n {{ filterStrings.getTimeSpanDisplayName(timeSpan) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n </div>\r\n }\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, LogicalOperator } from '../model/datagrid-filters.enums';\r\nimport {\r\n EnumPropertyData,\r\n EnumPropertyDefinition,\r\n PropertyFilter,\r\n PropertyPredicate,\r\n} from '../model/datagrid-filters.interfaces';\r\n\r\n/**\r\n * Enum filter component collects filtering criteria for enum based properties\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-enum-filter',\r\n standalone: false,\r\n templateUrl: 'enum-filter.component.html',\r\n styleUrls: ['enum-filter.component.scss', '../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EnumFilterComponent implements OnInit, OnChanges {\r\n /**\r\n * Property used for filtering\r\n */\r\n @Input() filterProperty: EnumPropertyDefinition;\r\n\r\n /**\r\n * In case the component is used for filter editing\r\n */\r\n @Input() propertyFilter: PropertyFilter;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n enumFilterForm: FormGroup;\r\n optionsData: EnumPropertyData[] = [];\r\n filteredOptions: { data: EnumPropertyData; index: number }[] = [];\r\n enumOperators = [ComparisonOperator.DoesNotEqual, ComparisonOperator.Equals];\r\n isProcessing = false;\r\n searchResultsLen = 0;\r\n selectedCount = 0;\r\n\r\n readonly #maxInitiallyShownItems = 50;\r\n readonly #loadingTimeoutDelayMs = 50;\r\n #maxShownItems = this.#maxInitiallyShownItems;\r\n #selectedFilterCriteria = new PropertyFilter();\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n public filterStrings: DatagridFiltersStrings,\r\n private cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n get additionalOperators(): boolean {\r\n return this.filterProperty.supportedOperators?.length === 2;\r\n }\r\n\r\n get optionsFormArray(): FormArray {\r\n return this.enumFilterForm?.controls.options as FormArray;\r\n }\r\n\r\n trackByFilteredOption(_index: number, item: { data: EnumPropertyData; index: number }): number {\r\n return item.index;\r\n }\r\n\r\n trackByOperator(_index: number, operator: ComparisonOperator): ComparisonOperator {\r\n return operator;\r\n }\r\n\r\n ngOnInit() {\r\n this.enumFilterForm = this.formBuilder.group({\r\n enumOperator: [this.additionalOperators ? ComparisonOperator.DoesNotEqual : ComparisonOperator.Equals],\r\n searchTerm: [''],\r\n selectAll: false,\r\n options: new FormArray([], this.selectedOptionsValidator()),\r\n singleSelectOption: [],\r\n });\r\n\r\n this.enumFilterForm.get('enumOperator')?.valueChanges.subscribe((op: ComparisonOperator) => {\r\n this.#selectedFilterCriteria.operator =\r\n op === ComparisonOperator.Equals ? LogicalOperator.Or : LogicalOperator.And;\r\n });\r\n\r\n this.enumFilterForm\r\n .get('searchTerm')\r\n ?.valueChanges.pipe(debounceTime(200), distinctUntilChanged())\r\n .subscribe((term: string) => {\r\n this.runAsyncOperation(() => this.performSearch(term));\r\n });\r\n\r\n this.runAsyncOperation(() => this.initializeFilter());\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.enumFilterForm) {\r\n this.runAsyncOperation(() => {\r\n this.initializeFilter();\r\n this.enumFilterForm.get('searchTerm')?.setValue('', { emitEvent: false });\r\n this.performSearch('');\r\n });\r\n }\r\n }\r\n\r\n loadMore(): void {\r\n this.runAsyncOperation(() => {\r\n this.#maxShownItems += 100;\r\n this.performSearch(this.enumFilterForm.get('searchTerm')?.value);\r\n });\r\n }\r\n\r\n onSelectAllChange(): void {\r\n this.runAsyncOperation(() => {\r\n const selectAllValue = this.enumFilterForm.get('selectAll')?.value;\r\n const visibleIndices = new Set(this.filteredOptions.map(opt => opt.index));\r\n const searching = this.searchResultsLen === this.optionsData.length;\r\n\r\n this.optionsFormArray.controls.forEach((control: AbstractControl, index: number) => {\r\n if ((searching || visibleIndices.has(index)) && control.value !== selectAllValue) {\r\n control.setValue(selectAllValue, { emitEvent: false });\r\n }\r\n });\r\n\r\n this.updateSelectedCount();\r\n this.enumFilterForm.controls.options.updateValueAndValidity();\r\n });\r\n }\r\n\r\n onOptionChange(): void {\r\n this.updateSelectedCount();\r\n\r\n const allSelected = this.selectedCount === this.optionsFormArray.length;\r\n const selectAllControl = this.enumFilterForm.get('selectAll');\r\n\r\n if (selectAllControl?.value !== allSelected) {\r\n selectAllControl?.setValue(allSelected, { emitEvent: false });\r\n }\r\n\r\n this.enumFilterForm.controls.options.updateValueAndValidity();\r\n }\r\n\r\n clearSearch() {\r\n this.enumFilterForm.get('searchTerm')?.setValue('');\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n const propertyPredicates: PropertyPredicate[] = [];\r\n if (this.filterProperty.singleSelect) {\r\n propertyPredicates.push(this.createEnumPropertyPredicate(this.enumFilterForm.value.singleSelectOption));\r\n } else {\r\n const selectedOptionsKeys: string[] = this.enumFilterForm.value.options\r\n .map((checked: boolean, i: number) => (checked ? this.optionsData[i].key : null))\r\n .filter((v: string | null) => v !== null);\r\n selectedOptionsKeys.forEach(value => {\r\n propertyPredicates.push(this.createEnumPropertyPredicate(value));\r\n });\r\n }\r\n this.#selectedFilterCriteria.criteria = propertyPredicates;\r\n this.filterCriteriaChange.emit(this.#selectedFilterCriteria);\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n private runAsyncOperation(action: () => void): void {\r\n const isHeavyLoad = this.optionsData.length > this.#maxInitiallyShownItems;\r\n\r\n if (isHeavyLoad) {\r\n this.isProcessing = true;\r\n this.cdr.markForCheck();\r\n\r\n setTimeout(() => {\r\n action();\r\n this.isProcessing = false;\r\n this.cdr.markForCheck();\r\n }, this.#loadingTimeoutDelayMs);\r\n } else {\r\n action();\r\n }\r\n }\r\n\r\n private initializeFilter(): void {\r\n this.updateData();\r\n this.updateForm();\r\n this.performSearch('');\r\n\r\n let initialOp = ComparisonOperator.Equals;\r\n if (this.additionalOperators) {\r\n initialOp =\r\n this.propertyFilter?.operator === LogicalOperator.Or\r\n ? ComparisonOperator.Equals\r\n : ComparisonOperator.DoesNotEqual;\r\n }\r\n this.enumFilterForm.controls.enumOperator.setValue(initialOp, { emitEvent: false });\r\n\r\n this.updateSelectedCount();\r\n }\r\n\r\n private performSearch(term = ''): void {\r\n const normalizedTerm = term.toLowerCase();\r\n\r\n const allMatches = this.optionsData\r\n .map((data, index) => ({ data, index }))\r\n .filter(\r\n item =>\r\n !normalizedTerm ||\r\n item.data.value.toLowerCase().includes(normalizedTerm) ||\r\n item.data.key.toLowerCase().includes(normalizedTerm)\r\n );\r\n\r\n this.searchResultsLen = allMatches.length;\r\n this.filteredOptions = allMatches.slice(0, this.#maxShownItems);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n private updateSelectedCount(): void {\r\n this.selectedCount = this.optionsFormArray.controls.reduce(\r\n (acc: number, control: AbstractControl) => acc + (control.value ? 1 : 0),\r\n 0\r\n );\r\n }\r\n\r\n private selectedOptionsValidator(): ValidatorFn {\r\n const validator: ValidatorFn = () =>\r\n this.filterProperty.singleSelect || this.selectedCount > 0 ? null : { required: true };\r\n return validator;\r\n }\r\n\r\n private updateData(): void {\r\n this.optionsData = [];\r\n let enumValues: Map<string, string>;\r\n if (this.propertyFilter && this.propertyFilter.criteria.length) {\r\n enumValues = (this.propertyFilter.criteria[0].filterableProperty as EnumPropertyDefinition).values;\r\n } else {\r\n enumValues = this.filterProperty.values;\r\n }\r\n enumValues.forEach((v, k) => {\r\n this.optionsData.push({ key: k, value: v });\r\n });\r\n if (this.additionalOperators) {\r\n this.enumFilterForm?.controls.enumOperator.setValue(\r\n this.propertyFilter?.operator === LogicalOperator.Or\r\n ? ComparisonOperator.Equals\r\n : ComparisonOperator.DoesNotEqual\r\n );\r\n } else {\r\n this.enumFilterForm?.controls.enumOperator.setValue(ComparisonOperator.Equals);\r\n }\r\n }\r\n\r\n private updateForm(): void {\r\n if (this.enumFilterForm) {\r\n this.optionsFormArray.clear();\r\n this.selectAll(false);\r\n const selectedOptions: any[] = [];\r\n if (this.propertyFilter) {\r\n this.propertyFilter.criteria.forEach(predicate => {\r\n selectedOptions.push(predicate.value);\r\n });\r\n }\r\n this.optionsData.forEach(option =>\r\n this.optionsFormArray.push(new FormControl(selectedOptions.includes(option.key)))\r\n );\r\n if (selectedOptions.length === this.optionsData.length) {\r\n this.selectAll(true);\r\n }\r\n if (this.filterProperty.singleSelect) {\r\n const singleSelectForm = this.enumFilterForm.get('singleSelectOption');\r\n if (this.propertyFilter) {\r\n singleSelectForm?.setValue(this.propertyFilter.criteria[0].value);\r\n } else {\r\n singleSelectForm?.setValue(this.filterProperty.values.keys().next().value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private selectAll(value: boolean): void {\r\n this.enumFilterForm.patchValue({\r\n selectAll: value,\r\n });\r\n }\r\n\r\n private createEnumPropertyPredicate(value: string): PropertyPredicate {\r\n const predicate = new PropertyPredicate();\r\n predicate.filterableProperty = this.filterProperty;\r\n predicate.operator = this.enumFilterForm.controls.enumOperator.value;\r\n predicate.value = value;\r\n return predicate;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"enumFilterForm\"\r\n [valid]=\"enumFilterForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <div class=\"enum-filter-wrapper\">\r\n <hermes-native-select-container *ngIf=\"additionalOperators\" class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"enumOperator\">\r\n <option *ngFor=\"let operator of enumOperators; trackBy: trackByOperator\" [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n\r\n <label class=\"hermes-control-label text-left mt-compact\">\r\n {{ filterStrings.valueLabel }}\r\n </label>\r\n\r\n <hermes-input-container *ngIf=\"filterProperty.searchable\" hermes-layout=\"m-t:xs\">\r\n <label class=\"hermes-sr-only\">{{ filterStrings.searchOptions }}</label>\r\n <input hermesInput type=\"text\" [placeholder]=\"filterStrings.searchPlaceholder\" formControlName=\"searchTerm\" />\r\n <hermes-icon shape=\"search\" hermesInputPrefix></hermes-icon>\r\n <hermes-icon\r\n *ngIf=\"enumFilterForm.get('searchTerm')?.value\"\r\n shape=\"window-close\"\r\n hermesInputSuffix\r\n (click)=\"clearSearch()\"\r\n ></hermes-icon>\r\n <hermes-control-helper *ngIf=\"filteredOptions.length\">\r\n {{\r\n filterStrings.formatString(filterStrings.showingFormat, [\r\n filteredOptions.length.toString(),\r\n searchResultsLen.toString(),\r\n ])\r\n }}\r\n </hermes-control-helper>\r\n <hermes-control-helper *ngIf=\"filteredOptions.length === 0 && enumFilterForm.get('searchTerm')?.value\">\r\n {{ filterStrings.noValuesFound }}\r\n </hermes-control-helper>\r\n </hermes-input-container>\r\n\r\n <div *ngIf=\"filteredOptions.length\" hermes-layout=\"m-t:xs m-l:xxs\" class=\"selection-counter\">\r\n <span *ngIf=\"!filterProperty.singleSelect\" class=\"hermes-subtext\" hermes-text=\"body medium\">\r\n {{ filterStrings.formatString(filterStrings.elementsSelectedFormat, [selectedCount.toString()]) }}\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"isProcessing\" class=\"loading-overlay\">\r\n <div class=\"loading-content\">\r\n <hermes-spinner hermesMedium>{{ filterStrings.loading }}</hermes-spinner>\r\n </div>\r\n </div>\r\n\r\n <div hermes-layout=\"m-t:xs\">\r\n <hermes-checkbox-container *ngIf=\"!filterProperty.singleSelect\" class=\"enum-options\">\r\n <hermes-checkbox-wrapper *ngIf=\"filterProperty.enableSelectAll\" hermes-layout=\"m-b:xs\">\r\n <input type=\"checkbox\" hermesCheckbox formControlName=\"selectAll\" (change)=\"onSelectAllChange()\" />\r\n <label>\r\n {{ enumFilterForm.get('searchTerm')?.value ? filterStrings.allSearchResults : filterStrings.selectAll }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n\r\n <hermes-checkbox-wrapper *ngFor=\"let item of filteredOptions; trackBy: trackByFilteredOption\">\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n [formControl]=\"$any(optionsFormArray.at(item.index))\"\r\n (change)=\"onOptionChange()\"\r\n />\r\n <label>\r\n {{ item.data.value }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n\r\n <hermes-radio-container *ngIf=\"filterProperty.singleSelect\" class=\"enum-options\">\r\n <hermes-radio-wrapper *ngFor=\"let option of filteredOptions; trackBy: trackByFilteredOption\">\r\n <input type=\"radio\" hermesRadio formControlName=\"singleSelectOption\" [value]=\"option.data.key\" />\r\n <label>\r\n {{ option.data.value }}\r\n </label>\r\n </hermes-radio-wrapper>\r\n </hermes-radio-container>\r\n </div>\r\n\r\n <button *ngIf=\"filteredOptions.length < searchResultsLen\" class=\"btn btn-link\" (click)=\"loadMore()\">\r\n {{ filterStrings.loadMore }}\r\n </button>\r\n </div>\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { AfterViewInit, Directive, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[filterPopoverReposition]',\r\n standalone: false,\r\n})\r\n/**\r\n * A directive that fixes the position of the clarity popover/signpost, which is opened\r\n * when adding/editing filters. The popover is positioned bottom middle relative to\r\n * the corresponding trigger button. The width of the popover is based on the longest\r\n * property name. This means that some parts of the popover may not be visible, because\r\n * they will get out of the borders of the parent datagrid component.\r\n * To prevent this, the directive modifies the `translateX` property for the `transform` style,\r\n * in order to ensure that the popover is positioned within the boundaries of the datagrid.\r\n */\r\nexport class FilterPopoverRepositionDirective implements AfterViewInit {\r\n // Minimal `translateX` property of transform style of the popover that\r\n // ensures the popover is aligned on the left boundaries of the datagrid.\r\n private readonly menuMinTranslateX = 1;\r\n\r\n // Selector of the datagrid filter container. It has the same width as the datagrid.\r\n private readonly filterContainerSelector = '.filter-container';\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n const computedStyle = getComputedStyle(this.elementRef.nativeElement);\r\n const matrix = new DOMMatrix(computedStyle.transform);\r\n\r\n const originalTranslateX = matrix.m41;\r\n const translateY = matrix.m42;\r\n\r\n const parentElement = this.elementRef.nativeElement.closest(this.filterContainerSelector);\r\n if (!parentElement) {\r\n return;\r\n }\r\n\r\n const popoverOriginalEndX = originalTranslateX + this.elementRef.nativeElement.offsetWidth;\r\n\r\n // If the popover is within the datagrid boundaries, do nothing.\r\n if (originalTranslateX > this.menuMinTranslateX && popoverOriginalEndX < parentElement.offsetWidth) {\r\n return;\r\n }\r\n\r\n const newTranslateX = Math.max(\r\n this.menuMinTranslateX,\r\n Math.min(originalTranslateX, originalTranslateX - (popoverOriginalEndX - parentElement.offsetWidth))\r\n );\r\n\r\n // Override default `translateX` property\r\n this.elementRef.nativeElement.style.transform = `translateX(${newTranslateX}px) translateY(${translateY}px)`;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, LogicalOperator, Unit } from '../model/datagrid-filters.enums';\r\nimport {\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n PropertyPredicate,\r\n StringPropertyDefinition,\r\n} from '../model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst unmericPatternRegex = '^-?[0-9]+$';\r\n\r\n/**\r\n * General filter component collects filtering criteria for string and numeric based properties\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-general-filter',\r\n standalone: false,\r\n templateUrl: 'general-filter.component.html',\r\n styleUrls: ['../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GeneralFilterComponent implements OnInit, OnChanges {\r\n readonly logicalOperators: LogicalOperator[];\r\n readonly isEmptyOperator: ComparisonOperator = ComparisonOperator.IsEmpty;\r\n\r\n generalFilterForm: FormGroup;\r\n comparisonOperators: ComparisonOperator[];\r\n units: Unit[] = [];\r\n isNumericUnitProperty = false;\r\n additionalPredicate = false;\r\n isEmptyPrimaryPredicate = false;\r\n isEmptySecondaryPredicate = false;\r\n /**\r\n * In case the component is used for filter editing\r\n */\r\n @Input() propertyFilter: PropertyFilter;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n protected LogicalOperator = LogicalOperator;\r\n private selectedFilterCriteria: PropertyFilter = new PropertyFilter();\r\n private primaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n private secondaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n /**\r\n * Property used for filtering\r\n */\r\n #filterProperty: StringPropertyDefinition | NumericPropertyDefinition;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n public filterStrings: DatagridFiltersStrings\r\n ) {\r\n this.logicalOperators = [LogicalOperator.And, LogicalOperator.Or];\r\n }\r\n\r\n @Input()\r\n get filterProperty(): StringPropertyDefinition | NumericPropertyDefinition {\r\n return this.#filterProperty;\r\n }\r\n set filterProperty(filterProperty: StringPropertyDefinition | NumericPropertyDefinition) {\r\n this.#filterProperty = filterProperty;\r\n this.primaryPredicate.filterableProperty = filterProperty;\r\n this.secondaryPredicate.filterableProperty = filterProperty;\r\n }\r\n\r\n ngOnInit() {\r\n this.isNumericUnitProperty = this.isNumericUnitFilterProperty();\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n this.units = this.applicableUnits();\r\n\r\n // To handle edit mode with operator IsEmpty\r\n let validators: ValidatorFn[] = [];\r\n if (this.propertyFilter?.criteria[0]?.operator === this.isEmptyOperator) {\r\n this.isEmptyPrimaryPredicate = true;\r\n } else {\r\n validators = this.initValidators();\r\n }\r\n\r\n this.generalFilterForm = this.formBuilder.group({\r\n primaryOperator: [this.initOperator(0)],\r\n primaryValue: [this.initValue(0), validators],\r\n primaryUnit: [this.initUnit(0)],\r\n logicalOperator: [this.propertyFilter?.operator || LogicalOperator.And],\r\n });\r\n\r\n this.generalFilterForm.get('primaryOperator')?.valueChanges.subscribe((operator: ComparisonOperator) => {\r\n if (operator === this.isEmptyOperator) {\r\n this.removeValidators('primaryValue');\r\n this.isEmptyPrimaryPredicate = true;\r\n this.selectLogicalOperator(LogicalOperator.Or);\r\n } else {\r\n this.addValidators('primaryValue', validators);\r\n this.isEmptyPrimaryPredicate = false;\r\n }\r\n });\r\n\r\n if (this.propertyFilter?.criteria?.length === 2) {\r\n this.enableSecondaryPredicate();\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n this.isNumericUnitProperty = this.isNumericUnitFilterProperty();\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n // Update property units\r\n if (this.isNumericUnitProperty && this.generalFilterForm) {\r\n this.units = this.applicableUnits();\r\n this.generalFilterForm.patchValue({\r\n primaryUnit: this.initUnit(0),\r\n });\r\n if (this.additionalPredicate) {\r\n this.generalFilterForm.patchValue({\r\n secondaryUnit: this.initUnit(1),\r\n });\r\n }\r\n }\r\n }\r\n\r\n onInputKeyPress(event: KeyboardEvent): void {\r\n if (event.key === enterKey) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n if (this.generalFilterForm.valid) {\r\n this.onApplyButtonClick();\r\n }\r\n }\r\n }\r\n\r\n enableSecondaryPredicate(): void {\r\n this.additionalPredicate = true;\r\n // To handle edit mode with operator IsEmpty\r\n let validators: ValidatorFn[] = [];\r\n if (this.propertyFilter?.criteria[1]?.operator === this.isEmptyOperator) {\r\n this.isEmptySecondaryPredicate = true;\r\n } else {\r\n validators = this.initValidators();\r\n }\r\n this.generalFilterForm.addControl('secondaryOperator', new FormControl(this.initOperator(1)));\r\n this.generalFilterForm.addControl('secondaryValue', new FormControl(this.initValue(1), validators));\r\n this.generalFilterForm.addControl('secondaryUnit', new FormControl(this.initUnit(1)));\r\n this.generalFilterForm.get('secondaryOperator')?.valueChanges.subscribe((operator: ComparisonOperator) => {\r\n if (operator === this.isEmptyOperator) {\r\n this.removeValidators('secondaryValue');\r\n this.isEmptySecondaryPredicate = true;\r\n this.selectLogicalOperator(LogicalOperator.Or);\r\n } else {\r\n this.addValidators('secondaryValue', validators);\r\n this.isEmptySecondaryPredicate = false;\r\n }\r\n });\r\n }\r\n\r\n disableSecondaryPredicate(): void {\r\n this.additionalPredicate = false;\r\n this.generalFilterForm.removeControl('secondaryOperator');\r\n this.generalFilterForm.removeControl('secondaryValue');\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n this.primaryPredicate.operator = this.generalFilterForm.value.primaryOperator;\r\n this.primaryPredicate.value = this.generalFilterForm.value.primaryValue;\r\n if (this.isNumericUnitProperty) {\r\n // Selected value and unit are stored, in order to be able to be rendered in edit mode.\r\n // They are stored in an array, because there are up to two conditions for a single property.\r\n this.primaryPredicate.filterableProperty.selectedValue = [this.generalFilterForm.value.primaryValue];\r\n this.primaryPredicate.filterableProperty.selectedUnit = [this.generalFilterForm.value.primaryUnit];\r\n this.primaryPredicate.value = this.convertValue(\r\n this.generalFilterForm.value.primaryValue,\r\n this.generalFilterForm.value.primaryUnit\r\n );\r\n }\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate];\r\n this.selectedFilterCriteria.operator =\r\n this.filterProperty.logicalOperator ?? this.generalFilterForm.value.logicalOperator;\r\n if (this.additionalPredicate) {\r\n this.secondaryPredicate.operator = this.generalFilterForm.value.secondaryOperator;\r\n this.secondaryPredicate.value = this.generalFilterForm.value.secondaryValue;\r\n if (this.isNumericUnitProperty) {\r\n this.secondaryPredicate.filterableProperty.selectedValue.push(this.generalFilterForm.value.secondaryValue);\r\n this.secondaryPredicate.filterableProperty.selectedUnit.push(this.generalFilterForm.value.secondaryUnit);\r\n this.secondaryPredicate.value = this.convertValue(\r\n this.generalFilterForm.value.secondaryValue,\r\n this.generalFilterForm.value.secondaryUnit\r\n );\r\n }\r\n this.selectedFilterCriteria.criteria.push(this.secondaryPredicate);\r\n }\r\n this.filterCriteriaChange.emit(this.selectedFilterCriteria);\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n private addValidators(formControlName: string, validators: ValidatorFn[]): void {\r\n this.generalFilterForm.get(formControlName)?.addValidators(validators);\r\n this.generalFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private removeValidators(formControlName: string): void {\r\n this.generalFilterForm.get(formControlName)?.clearValidators();\r\n this.generalFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private selectLogicalOperator(operator: LogicalOperator): void {\r\n this.generalFilterForm.patchValue({\r\n logicalOperator: operator,\r\n });\r\n }\r\n\r\n private initOperator(index: number): ComparisonOperator {\r\n const selectedOperator: ComparisonOperator = this.propertyFilter?.criteria[index]?.operator;\r\n const defaultOperator: ComparisonOperator =\r\n this.filterProperty instanceof StringPropertyDefinition ? ComparisonOperator.Contains : ComparisonOperator.Equals;\r\n return selectedOperator || defaultOperator;\r\n }\r\n\r\n private initValidators(): ValidatorFn[] {\r\n const validators: ValidatorFn[] = [Validators.required];\r\n if (this.filterProperty instanceof NumericPropertyDefinition) {\r\n validators.push(Validators.pattern(unmericPatternRegex));\r\n }\r\n return validators;\r\n }\r\n\r\n private isNumericUnitFilterProperty(): boolean {\r\n return this.filterProperty instanceof NumericPropertyDefinition && this.filterProperty.unit !== undefined;\r\n }\r\n\r\n private applicableUnits(): Unit[] {\r\n if (this.isNumericUnitProperty) {\r\n const propertyUnit: Unit = (this.filterProperty as NumericPropertyDefinition).unit;\r\n switch (propertyUnit) {\r\n case Unit.Byte:\r\n return [Unit.Byte, Unit.KB, Unit.MB, Unit.GB, Unit.TB];\r\n case Unit.KB:\r\n return [Unit.KB, Unit.MB, Unit.GB, Unit.TB];\r\n case Unit.MB:\r\n return [Unit.MB, Unit.GB, Unit.TB];\r\n case Unit.GB:\r\n return [Unit.GB, Unit.TB];\r\n case Unit.TB:\r\n return [Unit.TB];\r\n case Unit.BytePS:\r\n return [Unit.BytePS, Unit.KBytePS, Unit.MBytePS, Unit.GBytePS];\r\n case Unit.KBytePS:\r\n return [Unit.KBytePS, Unit.MBytePS, Unit.GBytePS];\r\n case Unit.MBytePS:\r\n return [Unit.MBytePS, Unit.GBytePS];\r\n case Unit.GBytePS:\r\n return [Unit.GBytePS];\r\n case Unit.BitPS:\r\n return [Unit.BitPS, Unit.KBitPS, Unit.MBitPS, Unit.GBitPS];\r\n case Unit.KBitPS:\r\n return [Unit.KBitPS, Unit.MBitPS, Unit.GBitPS];\r\n case Unit.MBitPS:\r\n return [Unit.MBitPS, Unit.GBitPS];\r\n case Unit.GBitPS:\r\n return [Unit.GBitPS];\r\n case Unit.HZ:\r\n return [Unit.HZ, Unit.KHZ, Unit.MHZ, Unit.GHZ];\r\n case Unit.KHZ:\r\n return [Unit.KHZ, Unit.MHZ, Unit.GHZ];\r\n case Unit.MHZ:\r\n return [Unit.MHZ, Unit.GHZ];\r\n case Unit.GHZ:\r\n return [Unit.GHZ];\r\n default:\r\n return [];\r\n }\r\n }\r\n return [];\r\n }\r\n\r\n private initUnit(index: number): Unit {\r\n if (this.isNumericUnitProperty) {\r\n if (this.propertyFilter?.criteria[index]) {\r\n return this.getSelectedUnit(index);\r\n } else {\r\n return this.units.length > 0 ? this.units[0] : Unit.MB;\r\n }\r\n }\r\n return Unit.MB;\r\n }\r\n\r\n private getSelectedUnit(index: number): Unit {\r\n const selectedUnit: Unit = this.propertyFilter.criteria[index].filterableProperty.selectedUnit[index] as Unit;\r\n return selectedUnit;\r\n }\r\n\r\n private initValue(index: number): any {\r\n if (this.isNumericUnitProperty) {\r\n return this.propertyFilter?.criteria[index]?.filterableProperty.selectedValue[index] || '';\r\n } else {\r\n return this.propertyFilter?.criteria[index]?.value || '';\r\n }\r\n }\r\n\r\n private convertValue(value: number, sourceUnit: Unit): number {\r\n if (this.isNumericUnitProperty) {\r\n const targetUnit = (this.filterProperty as NumericPropertyDefinition).unit;\r\n if (targetUnit === sourceUnit) {\r\n return value;\r\n }\r\n switch (targetUnit) {\r\n case Unit.Byte:\r\n switch (sourceUnit) {\r\n case Unit.KB:\r\n return value * 1024;\r\n case Unit.MB:\r\n return value * 1024 * 1024;\r\n case Unit.GB:\r\n return value * 1024 * 1024 * 1024;\r\n case Unit.TB:\r\n return value * 1024 * 1024 * 1024 * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.KB:\r\n switch (sourceUnit) {\r\n case Unit.MB:\r\n return value * 1024;\r\n case Unit.GB:\r\n return value * 1024 * 1024;\r\n case Unit.TB:\r\n return value * 1024 * 1024 * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.MB:\r\n switch (sourceUnit) {\r\n case Unit.GB:\r\n return value * 1024;\r\n case Unit.TB:\r\n return value * 1024 * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.GB:\r\n switch (sourceUnit) {\r\n case Unit.TB:\r\n return value * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.HZ:\r\n switch (sourceUnit) {\r\n case Unit.KHZ:\r\n return value * 1000;\r\n case Unit.MHZ:\r\n return value * 1000 * 1000;\r\n case Unit.GHZ:\r\n return value * 1000 * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.KHZ:\r\n switch (sourceUnit) {\r\n case Unit.MHZ:\r\n return value * 1000;\r\n case Unit.GHZ:\r\n return value * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.MHZ:\r\n switch (sourceUnit) {\r\n case Unit.GHZ:\r\n return value * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.BytePS:\r\n switch (sourceUnit) {\r\n case Unit.KBytePS:\r\n return value * 1000;\r\n case Unit.MBytePS:\r\n return value * 1000 * 1000;\r\n case Unit.GBytePS:\r\n return value * 1000 * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.KBytePS:\r\n switch (sourceUnit) {\r\n case Unit.MBytePS:\r\n return value * 1000;\r\n case Unit.GBytePS:\r\n return value * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.MBytePS:\r\n switch (sourceUnit) {\r\n case Unit.GBytePS:\r\n return value * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.BitPS:\r\n switch (sourceUnit) {\r\n case Unit.KBitPS:\r\n return value * 1000;\r\n case Unit.MBitPS:\r\n return value * 1000 * 1000;\r\n case Unit.GBitPS:\r\n return value * 1000 * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.KBitPS:\r\n switch (sourceUnit) {\r\n case Unit.MBitPS:\r\n return value * 1000;\r\n case Unit.GBitPS:\r\n return value * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.MBitPS:\r\n switch (sourceUnit) {\r\n case Unit.GBitPS:\r\n return value * 1000;\r\n default:\r\n return value;\r\n }\r\n default:\r\n return value;\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"generalFilterForm\"\r\n [valid]=\"generalFilterForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <hermes-native-select-container class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"primaryOperator\">\r\n @for (operator of comparisonOperators; track operator) {\r\n <option [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n @if (!isEmptyPrimaryPredicate) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"text\"\r\n formControlName=\"primaryValue\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.integerValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n @if (isNumericUnitProperty) {\r\n <hermes-native-select-container class=\"ml-half\">\r\n <select hermesNativeSelect formControlName=\"primaryUnit\" [attr.aria-label]=\"filterStrings.unitAriaLabel\">\r\n @for (unit of units; track unit) {\r\n <option [ngValue]=\"unit\">\r\n {{ filterStrings.getUnitDisplayName(unit) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n }\r\n </div>\r\n }\r\n @if (!additionalPredicate && !filterProperty.singleCondition) {\r\n <button\r\n class=\"btn btn-sm btn-link mt-half\"\r\n data-test-id=\"add-button\"\r\n [attr.aria-label]=\"filterStrings.addCondition\"\r\n (click)=\"enableSecondaryPredicate()\"\r\n >\r\n <hermes-icon shape=\"plus\" class=\"is-solid\"></hermes-icon>\r\n {{ filterStrings.addCondition }}\r\n </button>\r\n }\r\n @if (additionalPredicate) {\r\n <div>\r\n @if (filterProperty.logicalOperator == undefined) {\r\n <hermes-radio-container hermesInline class=\"mt-compact\">\r\n <hermes-radio-wrapper>\r\n <input\r\n type=\"radio\"\r\n hermesRadio\r\n formControlName=\"logicalOperator\"\r\n [value]=\"logicalOperators[0]\"\r\n [attr.disabled]=\"isEmptyPrimaryPredicate || isEmptySecondaryPredicate ? 'disabled' : null\"\r\n />\r\n <label> {{ filterStrings.getConjoinerDisplayName(logicalOperators[0]) }} </label>\r\n </hermes-radio-wrapper>\r\n <hermes-radio-wrapper>\r\n <input type=\"radio\" hermesRadio formControlName=\"logicalOperator\" [value]=\"logicalOperators[1]\" />\r\n <label> {{ filterStrings.getConjoinerDisplayName(logicalOperators[1]) }} </label>\r\n </hermes-radio-wrapper>\r\n </hermes-radio-container>\r\n }\r\n @if (filterProperty.logicalOperator != undefined) {\r\n <div class=\"hermes-control-container\" hermes-layout=\"m-t:sm\">\r\n <span data-test-id=\"logical-operator\" hermes-text=\"body medium\">{{\r\n filterStrings.getConjoinerDisplayName(filterProperty.logicalOperator)\r\n }}</span>\r\n </div>\r\n }\r\n <div class=\"flex-end-container\">\r\n <hermes-native-select-container class=\"form-control-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"secondaryOperator\">\r\n @for (operator of comparisonOperators; track operator) {\r\n <option [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n <button\r\n class=\"close ml-half\"\r\n data-test-id=\"close-button\"\r\n [attr.aria-label]=\"filterStrings.removeConditionAriaLabel\"\r\n (click)=\"disableSecondaryPredicate()\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n @if (!isEmptySecondaryPredicate) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"text\"\r\n formControlName=\"secondaryValue\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.integerValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n @if (isNumericUnitProperty) {\r\n <hermes-native-select-container class=\"ml-half\">\r\n <select hermesNativeSelect formControlName=\"secondaryUnit\">\r\n @for (unit of units; track unit) {\r\n <option [ngValue]=\"unit\">\r\n {{ filterStrings.getUnitDisplayName(unit) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, Input, Output, Renderer2 } from '@angular/core';\r\n\r\nconst enterKey = 'Enter';\r\nconst spaceKey = 'Space';\r\n\r\n/**\r\n * Directive which renders a clickable \"X\" on the right side of a Clarity label badge.\r\n * A \"close\" event is emitted when the \"X\" is clicked.\r\n * The directive is needed in order to be able to remove filtering criteria,\r\n * which are displayed in Clarity label badges.\r\n */\r\n@Directive({\r\n selector: '[dismissable]',\r\n standalone: false,\r\n})\r\nexport class DismissableDirective implements AfterViewInit {\r\n @Input() dismissAriaLabel: string;\r\n @Output() dismiss = new EventEmitter();\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private elRef: ElementRef\r\n ) {}\r\n\r\n ngAfterViewInit() {\r\n const icon = this.renderer.createElement('hermes-icon');\r\n icon.setAttribute('shape', 'window-close');\r\n icon.setAttribute('class', 'remove-filter');\r\n icon.setAttribute('role', 'button');\r\n icon.setAttribute('tabindex', '0');\r\n icon.setAttribute('aria-label', this.dismissAriaLabel);\r\n icon.style.margin = '1rem';\r\n this.renderer.setStyle(icon, 'margin-left', '0.5rem');\r\n this.renderer.setStyle(icon, 'margin-right', '0rem');\r\n this.renderer.setStyle(icon, 'cursor', 'pointer');\r\n this.renderer.appendChild(this.elRef.nativeElement, icon);\r\n this.renderer.listen(icon, 'click', () => {\r\n this.dismiss.emit();\r\n return true;\r\n });\r\n this.renderer.listen(icon, 'keydown', (event: KeyboardEvent) => {\r\n if (event.key === enterKey || event.key === spaceKey) {\r\n this.dismiss.emit();\r\n }\r\n return true;\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n/**\r\n * User service that provides users for the datagrid users filter.\r\n *\r\n * ```\r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DatagridFiltersUserService, useClass: CustomUserService },\r\n * ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DatagridFiltersUserService {\r\n getDomains(): Observable<string[]> {\r\n return of([]);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n searchUsers(searchTerm: string, domain: string): Observable<string[]> {\r\n return of([]);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport { catchError, debounceTime, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { DatagridFiltersUserService } from '../datagrid-filters-user-service';\r\nimport { ComparisonOperator, LogicalOperator } from '../model/datagrid-filters.enums';\r\nimport { PropertyFilter, PropertyPredicate, UserPropertyDefinition } from '../model/datagrid-filters.interfaces';\r\n\r\nexport enum ErrorType {\r\n DOMAIN,\r\n USER_SEARCH,\r\n}\r\n\r\n@Component({\r\n selector: 'appfx-users-filter',\r\n standalone: false,\r\n templateUrl: 'users-filter.component.html',\r\n styleUrls: ['users-filter.component.scss', '../common-styles.scss', 'enum-filter.component.scss'],\r\n})\r\nexport class UsersFilterComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() filterProperty: UserPropertyDefinition;\r\n @Input() propertyFilter: PropertyFilter;\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n usersSelectionForm: FormGroup;\r\n isLoading = false;\r\n domains: string[] = [''];\r\n errorRetrievingDomains?: string;\r\n errorSearchingUsers?: string;\r\n allFetchedUsers: string[] = [];\r\n visibleUsers: string[] = [];\r\n selectedValues: Set<string> = new Set<string>();\r\n\r\n readonly #pageSize = 50;\r\n #currentMaxShown = this.#pageSize;\r\n #selectedFilterCriteria = new PropertyFilter();\r\n readonly #searchTermDebounceTime = 200;\r\n #destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private cdr: ChangeDetectorRef,\r\n public filterStrings: DatagridFiltersStrings,\r\n private userService: DatagridFiltersUserService\r\n ) {}\r\n\r\n get optionsFormArray(): FormArray {\r\n return this.usersSelectionForm?.get('options') as FormArray;\r\n }\r\n\r\n get hasMoreItems(): boolean {\r\n return this.visibleUsers.length < this.allFetchedUsers.length;\r\n }\r\n\r\n trackByOperator(_index: number, operator: ComparisonOperator): ComparisonOperator {\r\n return operator;\r\n }\r\n\r\n trackByDomain(_index: number, domain: string): string {\r\n return domain;\r\n }\r\n\r\n ngOnInit() {\r\n this.createUsersSelectionForm();\r\n this.setupListeners();\r\n this.initializeSelectionInEditMode();\r\n this.loadDomains();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['propertyFilter'] && !changes['propertyFilter'].firstChange) {\r\n this.initializeSelectionInEditMode();\r\n this.rebuildCheckboxList();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#destroy$.next();\r\n this.#destroy$.complete();\r\n }\r\n\r\n onDomainChange(): void {\r\n const term = this.usersSelectionForm.get('searchTerm')?.value || '';\r\n this.usersSelectionForm.get('searchTerm')?.setValue(term);\r\n }\r\n\r\n fetchUsers(searchTerm: string): Observable<string[]> {\r\n return this.userService.searchUsers(searchTerm, this.usersSelectionForm.get('domain')?.value);\r\n }\r\n\r\n loadMore(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.#currentMaxShown += this.#pageSize;\r\n this.rebuildCheckboxList();\r\n }\r\n\r\n onOptionChange(index: number): void {\r\n const user = this.visibleUsers[index];\r\n const isChecked = this.optionsFormArray.at(index).value;\r\n\r\n if (isChecked) {\r\n this.selectedValues.add(user);\r\n } else {\r\n this.selectedValues.delete(user);\r\n }\r\n\r\n this.updateSelectAllState();\r\n this.usersSelectionForm.updateValueAndValidity();\r\n }\r\n\r\n onSelectAllChange(): void {\r\n const selectAllValue = this.usersSelectionForm.get('selectAll')?.value;\r\n\r\n this.optionsFormArray.controls.forEach((ctrl: AbstractControl) => {\r\n (ctrl as FormControl).setValue(selectAllValue, { emitEvent: false });\r\n });\r\n\r\n this.visibleUsers.forEach(user => {\r\n if (selectAllValue) {\r\n this.selectedValues.add(user);\r\n } else {\r\n this.selectedValues.delete(user);\r\n }\r\n });\r\n\r\n this.usersSelectionForm.updateValueAndValidity();\r\n }\r\n\r\n clearSearch(): void {\r\n this.usersSelectionForm.get('searchTerm')?.setValue('');\r\n }\r\n\r\n handleError(error: any, errorType: ErrorType): Observable<string[]> {\r\n if (errorType === ErrorType.USER_SEARCH) {\r\n console.error('Error searching users: ', error);\r\n this.errorSearchingUsers = this.filterStrings.errorSearchingUsers;\r\n } else if (errorType === ErrorType.DOMAIN) {\r\n console.error('Error loading domains: ', error);\r\n this.errorRetrievingDomains = this.filterStrings.errorLoadingDomains;\r\n }\r\n this.isLoading = false;\r\n this.cdr.markForCheck();\r\n if (errorType === ErrorType.DOMAIN) {\r\n return of([]);\r\n } else {\r\n const searchValue = this.usersSelectionForm.get('searchTerm')?.value as string;\r\n return searchValue ? of([searchValue]) : of([]);\r\n }\r\n }\r\n\r\n showLoading(): void {\r\n this.isLoading = true;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n hideLoading(): void {\r\n this.isLoading = false;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n onCancelButtonClick() {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n const comparisonOperator = this.usersSelectionForm.get('userOperator')?.value || ComparisonOperator.Equals;\r\n this.#selectedFilterCriteria.criteria = Array.from(this.selectedValues).map((userValue: string) =>\r\n this.createUserPropertyPredicate(userValue, comparisonOperator)\r\n );\r\n this.#selectedFilterCriteria.operator =\r\n comparisonOperator === ComparisonOperator.Equals ? LogicalOperator.Or : LogicalOperator.And;\r\n this.filterCriteriaChange.emit(this.#selectedFilterCriteria);\r\n }\r\n\r\n private setupListeners(): void {\r\n this.usersSelectionForm\r\n .get('searchTerm')\r\n ?.valueChanges.pipe(\r\n takeUntil(this.#destroy$),\r\n tap(() => {\r\n this.showLoading();\r\n this.errorSearchingUsers = undefined;\r\n }),\r\n debounceTime(this.#searchTermDebounceTime),\r\n switchMap((term: string) =>\r\n this.fetchUsers(term).pipe(catchError((error: any) => this.handleError(error, ErrorType.USER_SEARCH)))\r\n ),\r\n tap((results: string[]) => {\r\n this.allFetchedUsers = results;\r\n this.resetPagination();\r\n this.rebuildCheckboxList();\r\n this.hideLoading();\r\n })\r\n )\r\n .subscribe();\r\n\r\n this.usersSelectionForm\r\n .get('userOperator')\r\n ?.valueChanges.pipe(takeUntil(this.#destroy$))\r\n .subscribe((op: ComparisonOperator) => {\r\n this.#selectedFilterCriteria.operator =\r\n op === ComparisonOperator.Equals ? LogicalOperator.Or : LogicalOperator.And;\r\n });\r\n\r\n this.usersSelectionForm.get('userOperator')?.setValue(ComparisonOperator.Equals);\r\n\r\n this.usersSelectionForm\r\n .get('domain')\r\n ?.valueChanges.pipe(takeUntil(this.#destroy$))\r\n .subscribe(() => {\r\n this.usersSelectionForm.get('searchTerm')?.setValue('');\r\n });\r\n }\r\n\r\n private loadDomains(): void {\r\n this.showLoading();\r\n this.userService\r\n .getDomains()\r\n .pipe(\r\n takeUntil(this.#destroy$),\r\n catchError((error: any) => this.handleError(error, ErrorType.DOMAIN))\r\n )\r\n .subscribe((domains: string[]) => {\r\n this.domains = domains;\r\n const currentDomain = this.usersSelectionForm.get('domain')?.value;\r\n if (domains.length > 0 && !currentDomain) {\r\n this.usersSelectionForm.get('domain')?.setValue(domains[0]);\r\n }\r\n });\r\n }\r\n\r\n private resetPagination(): void {\r\n this.#currentMaxShown = this.#pageSize;\r\n }\r\n\r\n private createUsersSelectionForm(): void {\r\n this.usersSelectionForm = this.fb.group(\r\n {\r\n userOperator: [ComparisonOperator.Equals],\r\n domain: [null],\r\n searchTerm: [''],\r\n selectAll: [false],\r\n options: this.fb.array([]),\r\n },\r\n { validators: this.selectionValidator }\r\n );\r\n }\r\n\r\n private initializeSelectionInEditMode(): void {\r\n if (!this.propertyFilter) {\r\n return;\r\n }\r\n\r\n const initialOp =\r\n this.propertyFilter.operator === LogicalOperator.And\r\n ? ComparisonOperator.DoesNotEqual\r\n : ComparisonOperator.Equals;\r\n this.usersSelectionForm.get('userOperator')?.setValue(initialOp, { emitEvent: false });\r\n\r\n const users: string[] = this.propertyFilter.criteria?.map(c => c.value) || [];\r\n this.selectedValues = new Set(users);\r\n this.usersSelectionForm.updateValueAndValidity();\r\n }\r\n\r\n private rebuildCheckboxList(): void {\r\n const slicedUsers = this.allFetchedUsers.slice(0, this.#currentMaxShown);\r\n this.visibleUsers = [];\r\n const visibleUsersSet = new Set<string>();\r\n const searchTerm = this.usersSelectionForm.get('searchTerm')?.value;\r\n let searchTermMatchCustomUser = false;\r\n\r\n if (searchTerm) {\r\n this.selectedValues.forEach((user: string) => {\r\n if (user.toLocaleLowerCase().includes(searchTerm.toLocaleLowerCase())) {\r\n this.visibleUsers.push(user);\r\n visibleUsersSet.add(user);\r\n }\r\n if (user === searchTerm) {\r\n searchTermMatchCustomUser = true;\r\n }\r\n });\r\n if (!searchTermMatchCustomUser) {\r\n this.visibleUsers.push(searchTerm);\r\n visibleUsersSet.add(searchTerm);\r\n }\r\n } else {\r\n this.selectedValues.forEach(user => {\r\n if (!visibleUsersSet.has(user)) {\r\n this.visibleUsers.push(user);\r\n visibleUsersSet.add(user);\r\n }\r\n });\r\n }\r\n\r\n slicedUsers\r\n .filter(user => !visibleUsersSet.has(user))\r\n .forEach(filteredUser => this.visibleUsers.push(filteredUser));\r\n\r\n const optionsArr = this.optionsFormArray;\r\n optionsArr.clear();\r\n\r\n this.visibleUsers.forEach(user => {\r\n const isSelected = this.selectedValues.has(user);\r\n optionsArr.push(new FormControl(isSelected));\r\n });\r\n\r\n this.updateSelectAllState();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n private updateSelectAllState(): void {\r\n if (this.visibleUsers.length === 0) {\r\n this.usersSelectionForm.get('selectAll')?.setValue(false, { emitEvent: false });\r\n return;\r\n }\r\n\r\n const allVisibleSelected = this.visibleUsers.every(u => this.selectedValues.has(u));\r\n this.usersSelectionForm.get('selectAll')?.setValue(allVisibleSelected, { emitEvent: false });\r\n }\r\n\r\n private selectionValidator: ValidatorFn = (): ValidationErrors | null => {\r\n return this.selectedValues.size > 0 ? null : { required: true };\r\n };\r\n\r\n private createUserPropertyPredicate(value: string, comparisonOperator: ComparisonOperator): PropertyPredicate {\r\n const res = new PropertyPredicate();\r\n res.filterableProperty = this.filterProperty;\r\n res.operator = comparisonOperator;\r\n res.value = value;\r\n return res;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"usersSelectionForm\"\r\n [valid]=\"usersSelectionForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <div class=\"user-filter-wrapper\" hermes-layout=\"p-b:xxxs\">\r\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\r\n <div class=\"loading-content\">\r\n <hermes-spinner hermesMedium>{{ filterStrings.loading }}</hermes-spinner>\r\n </div>\r\n </div>\r\n <!-- Operator -->\r\n <hermes-native-select-container class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"userOperator\">\r\n <option\r\n *ngFor=\"let operator of filterProperty.supportedOperators; trackBy: trackByOperator\"\r\n [ngValue]=\"operator\"\r\n >\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n\r\n <!-- Domain -->\r\n <hermes-native-select-container *ngIf=\"domains && domains.length > 0\">\r\n <label>{{ filterStrings.domain }}</label>\r\n <select hermesNativeSelect name=\"domain\" formControlName=\"domain\">\r\n <option *ngFor=\"let domain of domains; trackBy: trackByDomain\" [value]=\"domain\">\r\n {{ domain }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n\r\n <!-- User -->\r\n <label class=\"hermes-control-label text-left mt-compact\">\r\n {{ filterStrings.user }}\r\n </label>\r\n\r\n <hermes-input-container hermes-layout=\"m-t:xs\">\r\n <label class=\"hermes-sr-only\">{{ filterStrings.searchPlaceholder }}</label>\r\n <input hermesInput type=\"text\" [placeholder]=\"filterStrings.searchPlaceholder\" formControlName=\"searchTerm\" />\r\n <hermes-icon shape=\"search\" hermesInputPrefix></hermes-icon>\r\n <hermes-icon\r\n *ngIf=\"usersSelectionForm.get('searchTerm')?.value\"\r\n shape=\"window-close\"\r\n hermesInputSuffix\r\n (click)=\"clearSearch()\"\r\n ></hermes-icon>\r\n </hermes-input-container>\r\n\r\n <div hermes-layout=\"m-t:xs m-l:xxs\" class=\"selection-counter\">\r\n <span *ngIf=\"selectedValues.size > 0\" class=\"hermes-subtext\" hermes-text=\"body medium\">\r\n {{ filterStrings.formatString(filterStrings.elementsSelectedFormat, [selectedValues.size.toString()]) }}\r\n </span>\r\n </div>\r\n\r\n <div hermes-layout=\"m-t:xs\">\r\n <hermes-checkbox-container class=\"enum-options\">\r\n <hermes-checkbox-wrapper *ngIf=\"visibleUsers.length > 0\" hermes-layout=\"m-b:xs\">\r\n <input type=\"checkbox\" hermesCheckbox formControlName=\"selectAll\" (change)=\"onSelectAllChange()\" />\r\n <label>\r\n {{ usersSelectionForm.get('searchTerm')?.value ? filterStrings.allSearchResults : filterStrings.selectAll }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n\r\n <hermes-checkbox-wrapper *ngFor=\"let user of visibleUsers; let i = index\">\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n [formControl]=\"$any(optionsFormArray.at(i))\"\r\n (change)=\"onOptionChange(i)\"\r\n />\r\n <label>\r\n {{ user }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n\r\n <div *ngIf=\"errorSearchingUsers\" class=\"hermes-subtext hermes-error error\">\r\n {{ errorSearchingUsers }}\r\n </div>\r\n\r\n <div *ngIf=\"errorRetrievingDomains\" class=\"hermes-subtext hermes-error error\">\r\n {{ errorRetrievingDomains }}\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"hasMoreItems\" class=\"btn btn-link\" (click)=\"loadMore($event)\">\r\n {{ filterStrings.loadMore }}\r\n </button>\r\n </div>\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, PropertyType, TimeSpan } from '../model/datagrid-filters.enums';\r\nimport {\r\n DateTimePropertyDefinition,\r\n EnumPropertyDefinition,\r\n FilterablePropertyDefinition,\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n StringPropertyDefinition,\r\n UserPropertyDefinition,\r\n} from '../model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst spaceKey = 'Space';\r\n\r\n@Component({\r\n selector: 'appfx-manage-filter',\r\n standalone: false,\r\n templateUrl: 'manage-filter.component.html',\r\n styleUrls: ['manage-filter.component.scss', '../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ManageFilterComponent implements OnInit {\r\n // The filter to be managed\r\n @Input() propertyFilter: PropertyFilter;\r\n managedProperty: FilterablePropertyDefinition;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n readonly stringPropertyType: PropertyType = PropertyType.String;\r\n readonly enumPropertyType: PropertyType = PropertyType.Enum;\r\n readonly numericPropertyType: PropertyType = PropertyType.Numeric;\r\n readonly dateTimePropertyType: PropertyType = PropertyType.DateTime;\r\n readonly userPropertyType: PropertyType = PropertyType.User;\r\n\r\n managedPropertyType: PropertyType;\r\n stringProperty: StringPropertyDefinition;\r\n numericProperty: NumericPropertyDefinition;\r\n enumProperty: EnumPropertyDefinition;\r\n dateTimeProperty: DateTimePropertyDefinition;\r\n userProperty: UserPropertyDefinition;\r\n openPrimaryConditionSignPost = false;\r\n openSecondaryConditionSignPost = false;\r\n primaryConditionDisplayText = '';\r\n secondaryConditionDisplayText = '';\r\n editFilterAriaLabel = '';\r\n\r\n private readonly noDisplayValueOperators: ComparisonOperator[] = [\r\n ComparisonOperator.IsEmpty,\r\n ComparisonOperator.LastDay,\r\n ComparisonOperator.LastWeek,\r\n ComparisonOperator.LastMonth,\r\n ComparisonOperator.LastYear,\r\n ];\r\n\r\n constructor(public filterStrings: DatagridFiltersStrings) {}\r\n\r\n ngOnInit() {\r\n this.managedProperty = this.propertyFilter.criteria[0].filterableProperty;\r\n if (this.isStringProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.String;\r\n this.stringProperty = this.castStringProperty();\r\n } else if (this.isEnumProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.Enum;\r\n this.enumProperty = this.castEnumProperty();\r\n } else if (this.isNumericProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.Numeric;\r\n this.numericProperty = this.castNumericProperty();\r\n } else if (this.isDateTimeProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.DateTime;\r\n this.dateTimeProperty = this.castDateTimeProperty();\r\n } else if (this.isUserProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.User;\r\n this.userProperty = this.castUserProperty();\r\n }\r\n this.updateDisplayValues();\r\n }\r\n\r\n onEditFilterKeyPress(event: KeyboardEvent, index: number) {\r\n if (event.target instanceof Element) {\r\n const targetElement: Element = event.target as Element;\r\n if (targetElement.classList.contains('edit-filter') && (event.key === enterKey || event.key === spaceKey)) {\r\n if (index === 0) {\r\n this.openPrimaryConditionSignPost = !this.openPrimaryConditionSignPost;\r\n } else if (index === 1) {\r\n this.openSecondaryConditionSignPost = !this.openSecondaryConditionSignPost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeFilter(index: number): void {\r\n // 3 or more criteria are displayed as one group\r\n // For this reason, they are removed together\r\n if (this.propertyFilter.criteria.length > 2 || this.managedPropertyType === PropertyType.DateTime) {\r\n this.propertyFilter.criteria = [];\r\n } else {\r\n this.propertyFilter.criteria.splice(index, 1);\r\n if (this.propertyFilter.criteria.length > 0) {\r\n const property = this.propertyFilter.criteria[0].filterableProperty;\r\n if (this.isNumericUnitFilterProperty(property)) {\r\n property.selectedValue.splice(index, 1);\r\n property.selectedUnit.splice(index, 1);\r\n }\r\n this.updateDisplayValues();\r\n }\r\n }\r\n this.filterCriteriaChange.emit(this.propertyFilter);\r\n }\r\n\r\n onFilterCriteriaChange(propertyFilter: PropertyFilter) {\r\n if (propertyFilter) {\r\n this.filterCriteriaChange.emit(propertyFilter);\r\n }\r\n this.openPrimaryConditionSignPost = false;\r\n this.openSecondaryConditionSignPost = false;\r\n }\r\n\r\n private updateDisplayValues(): void {\r\n this.primaryConditionDisplayText = this.displayFilterValue(0);\r\n this.editFilterAriaLabel =\r\n this.filterStrings.editFilterText +\r\n ' ' +\r\n this.managedProperty.displayName +\r\n ' ' +\r\n this.primaryConditionDisplayText;\r\n if (this.propertyFilter.criteria.length === 2) {\r\n this.secondaryConditionDisplayText = this.displayFilterValue(1);\r\n this.editFilterAriaLabel +=\r\n ' ' +\r\n this.filterStrings.getConjoinerDisplayName(this.propertyFilter.operator) +\r\n ' ' +\r\n this.secondaryConditionDisplayText;\r\n }\r\n }\r\n\r\n private displayFilterValue(index: number): string {\r\n if (this.isDateTimeProperty(this.managedProperty)) {\r\n return this.displayDateTimeFilter();\r\n }\r\n const appliedConditions: number = this.propertyFilter.criteria.length;\r\n if (appliedConditions > 2) {\r\n return appliedConditions + ' ' + this.filterStrings.appliedText;\r\n }\r\n if (this.propertyFilter.criteria[index].operator === ComparisonOperator.IsEmpty) {\r\n return this.operatorDisplayName(this.propertyFilter.criteria[index].operator);\r\n }\r\n const property = this.propertyFilter.criteria[index].filterableProperty;\r\n let value = this.propertyFilter.criteria[index].value;\r\n if (this.isEnumProperty(property)) {\r\n const enumProperty: EnumPropertyDefinition = property as EnumPropertyDefinition;\r\n value = enumProperty.values.get(this.propertyFilter.criteria[index].value);\r\n } else if (this.isNumericUnitFilterProperty(property)) {\r\n value = property.selectedValue[index] + ' ' + this.filterStrings.getUnitDisplayName(property.selectedUnit[index]);\r\n }\r\n return this.operatorDisplayName(this.propertyFilter.criteria[index].operator) + ': ' + value;\r\n }\r\n\r\n private displayDateTimeFilter(): string {\r\n const operator: ComparisonOperator = this.propertyFilter.criteria[0].filterableProperty.selectedOperator;\r\n if (operator === ComparisonOperator.CustomRange) {\r\n const displayValue: string =\r\n this.filterStrings.fromLabel +\r\n ': ' +\r\n this.formatDateTimeValue(this.propertyFilter.criteria[0].filterableProperty.selectedValue) +\r\n ' ' +\r\n this.filterStrings.toLabel +\r\n ': ' +\r\n this.formatDateTimeValue(this.propertyFilter.criteria[0].filterableProperty.selectedValueTo);\r\n return displayValue;\r\n } else if (this.isNoDisplayValueOperator(operator)) {\r\n return this.operatorDisplayName(operator);\r\n } else if (operator === ComparisonOperator.TimeSpan) {\r\n const timeSpanValue: number = this.propertyFilter.criteria[0].filterableProperty.selectedTimeSpanValue;\r\n const timeSpan: TimeSpan = this.propertyFilter.criteria[0].filterableProperty.selectedTimeSpan;\r\n return (\r\n this.operatorDisplayName(operator) +\r\n ': ' +\r\n timeSpanValue +\r\n ' ' +\r\n this.filterStrings.getTimeSpanDisplayName(timeSpan)\r\n );\r\n } else {\r\n const filterValue: string = this.formatDateTimeValue(\r\n this.propertyFilter.criteria[0].filterableProperty.selectedValue\r\n );\r\n return this.operatorDisplayName(operator) + ': ' + filterValue;\r\n }\r\n }\r\n\r\n private isNoDisplayValueOperator(operator: ComparisonOperator): boolean {\r\n return this.noDisplayValueOperators.includes(operator);\r\n }\r\n\r\n private formatDateTimeValue(dateTime: string): string {\r\n if (!dateTime) {\r\n return dateTime;\r\n }\r\n return dateTime.replace('T', ' ');\r\n }\r\n\r\n private isStringProperty(property: FilterablePropertyDefinition): property is StringPropertyDefinition {\r\n return property instanceof StringPropertyDefinition;\r\n }\r\n\r\n private isEnumProperty(property: FilterablePropertyDefinition): property is EnumPropertyDefinition {\r\n return property instanceof EnumPropertyDefinition;\r\n }\r\n\r\n private isNumericProperty(property: FilterablePropertyDefinition): property is NumericPropertyDefinition {\r\n return property instanceof NumericPropertyDefinition;\r\n }\r\n\r\n private isDateTimeProperty(property: FilterablePropertyDefinition): property is DateTimePropertyDefinition {\r\n return property instanceof DateTimePropertyDefinition;\r\n }\r\n\r\n private isUserProperty(property: FilterablePropertyDefinition): property is UserPropertyDefinition {\r\n return property instanceof UserPropertyDefinition;\r\n }\r\n\r\n private isNumericUnitFilterProperty(property: FilterablePropertyDefinition): boolean {\r\n return this.isNumericProperty(property) && property.unit !== undefined;\r\n }\r\n\r\n private castStringProperty(): StringPropertyDefinition {\r\n return this.managedProperty as StringPropertyDefinition;\r\n }\r\n\r\n private castEnumProperty(): EnumPropertyDefinition {\r\n return this.managedProperty as EnumPropertyDefinition;\r\n }\r\n\r\n private castNumericProperty(): NumericPropertyDefinition {\r\n return this.managedProperty as NumericPropertyDefinition;\r\n }\r\n\r\n private castDateTimeProperty(): DateTimePropertyDefinition {\r\n return this.managedProperty as DateTimePropertyDefinition;\r\n }\r\n\r\n private castUserProperty(): UserPropertyDefinition {\r\n return this.managedProperty as UserPropertyDefinition;\r\n }\r\n\r\n private operatorDisplayName(operator: ComparisonOperator): string {\r\n return this.filterStrings.getOperatorDisplayName(operator);\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<span class=\"label label-blue\">\r\n {{ managedProperty.displayName }}\r\n <span\r\n class=\"badge\"\r\n dismissable\r\n [dismissAriaLabel]=\"\r\n filterStrings.removeFilterText + ' ' + managedProperty.displayName + ' ' + primaryConditionDisplayText\r\n \"\r\n (dismiss)=\"removeFilter(0)\"\r\n >\r\n <hermes-signpost>\r\n <span\r\n hermesSignpostTrigger\r\n class=\"edit-filter\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [attr.aria-label]=\"editFilterAriaLabel\"\r\n (keydown)=\"onEditFilterKeyPress($event, 0)\"\r\n >\r\n {{ primaryConditionDisplayText }}\r\n </span>\r\n <ng-template [(hermesIfOpen)]=\"openPrimaryConditionSignPost\">\r\n <hermes-signpost-content [hermesPosition]=\"'bottom-middle'\" filterPopoverReposition>\r\n <hermes-native-select-container class=\"mt-0\">\r\n <label class=\"hermes-control-label\">\r\n {{ this.filterStrings.filterLabel }}\r\n </label>\r\n <select hermesNativeSelect [(ngModel)]=\"managedProperty\" disabled>\r\n <option [ngValue]=\"managedProperty\">\r\n {{ managedProperty.displayName }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n @switch (managedPropertyType) {\r\n @case (stringPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"stringProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (numericPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"numericProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (enumPropertyType) {\r\n <appfx-enum-filter\r\n [filterProperty]=\"enumProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-enum-filter>\r\n }\r\n @case (dateTimePropertyType) {\r\n <appfx-datetime-filter\r\n [filterProperty]=\"dateTimeProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-datetime-filter>\r\n }\r\n @case (userPropertyType) {\r\n <appfx-users-filter\r\n [filterProperty]=\"userProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-users-filter>\r\n }\r\n }\r\n </hermes-signpost-content>\r\n </ng-template>\r\n </hermes-signpost>\r\n </span>\r\n @if (propertyFilter.criteria.length === 2 && managedPropertyType !== dateTimePropertyType) {\r\n <span class=\"text-lower\">\r\n {{ this.filterStrings.getConjoinerDisplayName(propertyFilter.operator) }}\r\n </span>\r\n }\r\n @if (propertyFilter.criteria.length === 2 && managedPropertyType !== dateTimePropertyType) {\r\n <span\r\n class=\"badge\"\r\n dismissable\r\n [dismissAriaLabel]=\"\r\n this.filterStrings.removeFilterText + managedProperty.displayName + ' ' + secondaryConditionDisplayText\r\n \"\r\n (dismiss)=\"removeFilter(1)\"\r\n >\r\n <hermes-signpost>\r\n <span\r\n hermesSignpostTrigger\r\n class=\"edit-filter\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [attr.aria-label]=\"editFilterAriaLabel\"\r\n (keydown)=\"onEditFilterKeyPress($event, 1)\"\r\n >\r\n {{ secondaryConditionDisplayText }}\r\n </span>\r\n <ng-template [(hermesIfOpen)]=\"openSecondaryConditionSignPost\">\r\n <hermes-signpost-content [hermesPosition]=\"'bottom-middle'\" filterPopoverReposition>\r\n <hermes-native-select-container class=\"mt-0\">\r\n <label class=\"hermes-control-label\">\r\n {{ this.filterStrings.filterLabel }}\r\n </label>\r\n <select hermesNativeSelect [(ngModel)]=\"managedProperty\" disabled>\r\n <option [ngValue]=\"managedProperty\">\r\n {{ managedProperty.displayName }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n @switch (managedPropertyType) {\r\n @case (stringPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"stringProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (numericPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"numericProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (enumPropertyType) {\r\n <appfx-enum-filter\r\n [filterProperty]=\"enumProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-enum-filter>\r\n }\r\n @case (userPropertyType) {\r\n <appfx-users-filter\r\n [filterProperty]=\"userProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-users-filter>\r\n }\r\n }\r\n </hermes-signpost-content>\r\n </ng-template>\r\n </hermes-signpost>\r\n </span>\r\n }\r\n</span>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\nimport { FilterablePropertyDefinition } from './model/datagrid-filters.interfaces';\r\n\r\n/**\r\n * Pipe used to limit available filter options in a select container.\r\n * This is needed in order to prevent applying the same filter more than once\r\n */\r\n@Pipe({\r\n name: 'skipFilter',\r\n standalone: false,\r\n})\r\nexport class SkipFiltersPipe implements PipeTransform {\r\n transform(items: FilterablePropertyDefinition[], propertyDefinitions?: FilterablePropertyDefinition[]): any {\r\n return propertyDefinitions\r\n ? items.filter((item: FilterablePropertyDefinition) => !propertyDefinitions.includes(item))\r\n : items;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\n\r\nimport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nimport { PropertyType } from './model/datagrid-filters.enums';\r\nimport {\r\n DateTimePropertyDefinition,\r\n EnumPropertyDefinition,\r\n FilterablePropertyDefinition,\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n StringPropertyDefinition,\r\n UserPropertyDefinition,\r\n} from './model/datagrid-filters.interfaces';\r\n\r\n/**\r\n * Composite filters component renders different filters based on the type of\r\n * the corresponding filterable property, e.g., string, enum, number, etc.\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-composite-filter',\r\n standalone: false,\r\n templateUrl: 'composite-filters.component.html',\r\n styleUrls: ['composite-filters.component.scss', 'common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CompositeFiltersComponent implements OnInit {\r\n // Array of filterable properties\r\n @Input() filterableProperties: FilterablePropertyDefinition[];\r\n\r\n @Input() presetFilters: PropertyFilter[];\r\n\r\n /**\r\n * Event emitter to tell hosting view that the filtering conditions have changed\r\n */\r\n @Output() propertyFiltersChange: EventEmitter<PropertyFilter[]> = new EventEmitter<PropertyFilter[]>();\r\n\r\n readonly stringPropertyType: PropertyType = PropertyType.String;\r\n readonly enumPropertyType: PropertyType = PropertyType.Enum;\r\n readonly numericPropertyType: PropertyType = PropertyType.Numeric;\r\n readonly dateTimePropertyType: PropertyType = PropertyType.DateTime;\r\n readonly userPropertyType: PropertyType = PropertyType.User;\r\n\r\n signPostOpened = false;\r\n selectedFilterableProperty: FilterablePropertyDefinition;\r\n propertyType: PropertyType;\r\n stringProperty: StringPropertyDefinition;\r\n enumProperty: EnumPropertyDefinition;\r\n numericProperty: NumericPropertyDefinition;\r\n dateTimeProperty: DateTimePropertyDefinition;\r\n userProperty: UserPropertyDefinition;\r\n // List of active filters to be sent to the hosting view\r\n propertyFilters: PropertyFilter[] = [];\r\n collapsedFilters = false;\r\n showHideFiltersArrowDir = 'left';\r\n showHideFiltersLabel: string;\r\n showHideFiltersAriaLabel: string;\r\n\r\n constructor(\r\n public filterStrings: DatagridFiltersStrings,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n this.showHideFiltersLabel = filterStrings.hideButtonLabel;\r\n this.showHideFiltersAriaLabel = filterStrings.hideButtonAriaLabel;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.filterableProperties && this.filterableProperties.length > 0) {\r\n this.selectedFilterableProperty = this.filterableProperties[0];\r\n this.onPropertyChange();\r\n }\r\n if (this.presetFilters) {\r\n this.propertyFilters.push(...this.presetFilters);\r\n this.preselectFirstProperty();\r\n }\r\n }\r\n\r\n onPropertyChange() {\r\n if (this.isStringProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.String;\r\n this.stringProperty = this.castStringProperty();\r\n } else if (this.isEnumProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.Enum;\r\n this.enumProperty = this.castEnumProperty();\r\n } else if (this.isNumericProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.Numeric;\r\n this.numericProperty = this.castNumericProperty();\r\n } else if (this.isDateTimeProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.DateTime;\r\n this.dateTimeProperty = this.castDateTimeProperty();\r\n } else if (this.isUserProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.User;\r\n this.userProperty = this.castUserProperty();\r\n }\r\n }\r\n\r\n onFilterCriteriaChange(propertyFilter: PropertyFilter) {\r\n if (propertyFilter) {\r\n if (propertyFilter.criteria.length > 0) {\r\n // The property filter contains several filtering criteria.\r\n // This is either a new filter, or some of the criteria are modified\r\n let i = this.propertyFilters.length;\r\n let modified = false;\r\n while (i--) {\r\n // Check whether there is an existing filter for the same property.\r\n // If found, replace it with the new filter\r\n if (\r\n this.propertyFilters[i].criteria[0].filterableProperty.property ===\r\n propertyFilter.criteria[0].filterableProperty.property\r\n ) {\r\n this.propertyFilters[i] = propertyFilter;\r\n modified = true;\r\n }\r\n }\r\n // If no existing filter was found, add the new one to the active filters list\r\n if (!modified) {\r\n this.propertyFilters.push(propertyFilter);\r\n }\r\n } else {\r\n // The property filter does not contain any criteria.\r\n // It should be removed from the active filters list\r\n let j = this.propertyFilters.length;\r\n while (j--) {\r\n if (this.propertyFilters[j].criteria.length === 0) {\r\n this.propertyFilters.splice(j, 1);\r\n }\r\n }\r\n }\r\n this.propertyFiltersChange.emit(this.propertyFilters);\r\n }\r\n this.signPostOpened = false;\r\n this.preselectFirstProperty();\r\n this.updateShowHideLabel();\r\n // The filter sometimes fails to close, necessitating\r\n // a check to detect this state change.\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Returns a list properties for which there is an active filter\r\n */\r\n activeFilters(): FilterablePropertyDefinition[] {\r\n const activeProperties: FilterablePropertyDefinition[] = [];\r\n this.propertyFilters.forEach(value => {\r\n if (value.criteria.length > 0) {\r\n activeProperties.push(value.criteria[0].filterableProperty);\r\n }\r\n });\r\n return activeProperties;\r\n }\r\n\r\n clearAllFilters(): void {\r\n this.propertyFilters = [];\r\n this.propertyFiltersChange.emit(this.propertyFilters);\r\n this.preselectFirstProperty();\r\n this.collapsedFilters = false;\r\n }\r\n\r\n showHideAllFilters(): void {\r\n this.collapsedFilters = !this.collapsedFilters;\r\n this.updateShowHideLabel();\r\n this.showHideFiltersArrowDir = this.collapsedFilters ? 'right' : 'left';\r\n }\r\n\r\n /**\r\n * Active filters are not displayed in the new filters list.\r\n * We want to preselect the first displayed property\r\n */\r\n private preselectFirstProperty() {\r\n const activeProperties: FilterablePropertyDefinition[] = this.activeFilters();\r\n const remainingProperties: FilterablePropertyDefinition[] = this.filterableProperties.filter(\r\n property => !activeProperties.includes(property)\r\n );\r\n if (remainingProperties.length > 0) {\r\n this.selectedFilterableProperty = remainingProperties[0];\r\n this.onPropertyChange();\r\n }\r\n }\r\n\r\n private updateShowHideLabel(): void {\r\n this.showHideFiltersLabel = this.collapsedFilters\r\n ? this.filterStrings.showButtonLabel + '(' + this.propertyFilters.length + ')'\r\n : this.filterStrings.hideButtonLabel;\r\n this.showHideFiltersAriaLabel = this.collapsedFilters\r\n ? this.filterStrings.showButtonLabel +\r\n ' ' +\r\n this.propertyFilters.length +\r\n ' ' +\r\n (this.propertyFilters.length > 1 ? this.filterStrings.filtersText : this.filterStrings.filterText)\r\n : this.filterStrings.hideButtonAriaLabel;\r\n }\r\n\r\n private isStringProperty(property: FilterablePropertyDefinition): property is StringPropertyDefinition {\r\n return property instanceof StringPropertyDefinition;\r\n }\r\n\r\n private isEnumProperty(property: FilterablePropertyDefinition): property is EnumPropertyDefinition {\r\n return property instanceof EnumPropertyDefinition;\r\n }\r\n\r\n private isNumericProperty(property: FilterablePropertyDefinition): property is NumericPropertyDefinition {\r\n return property instanceof NumericPropertyDefinition;\r\n }\r\n\r\n private isDateTimeProperty(property: FilterablePropertyDefinition): property is DateTimePropertyDefinition {\r\n return property instanceof DateTimePropertyDefinition;\r\n }\r\n\r\n private isUserProperty(property: FilterablePropertyDefinition): property is UserPropertyDefinition {\r\n return property instanceof UserPropertyDefinition;\r\n }\r\n\r\n private castStringProperty(): StringPropertyDefinition {\r\n return this.selectedFilterableProperty as StringPropertyDefinition;\r\n }\r\n\r\n private castEnumProperty(): EnumPropertyDefinition {\r\n return this.selectedFilterableProperty as EnumPropertyDefinition;\r\n }\r\n\r\n private castNumericProperty(): NumericPropertyDefinition {\r\n return this.selectedFilterableProperty as NumericPropertyDefinition;\r\n }\r\n\r\n private castDateTimeProperty(): DateTimePropertyDefinition {\r\n return this.selectedFilterableProperty as DateTimePropertyDefinition;\r\n }\r\n\r\n private castUserProperty(): UserPropertyDefinition {\r\n return this.selectedFilterableProperty as UserPropertyDefinition;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div class=\"composite-filter-container\">\r\n <hermes-signpost class=\"height-standard\">\r\n <button\r\n hermesSignpostTrigger\r\n class=\"btn btn-sm btn-link btn-compact\"\r\n data-test-id=\"add-button\"\r\n [attr.aria-label]=\"filterStrings.addNewAriaLabel\"\r\n [disabled]=\"filterableProperties.length === propertyFilters.length\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"filter-grid\" class=\"is-solid\"></hermes-icon>\r\n {{ filterStrings.addNew }}\r\n </button>\r\n <ng-template [(hermesIfOpen)]=\"signPostOpened\">\r\n <hermes-signpost-content\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n [hermesPosition]=\"'bottom-middle'\"\r\n filterPopoverReposition\r\n >\r\n <hermes-native-select-container class=\"mt-0\">\r\n <label class=\"hermes-control-label\"> {{ filterStrings.filterLabel }} </label>\r\n <select hermesNativeSelect [(ngModel)]=\"selectedFilterableProperty\" (ngModelChange)=\"onPropertyChange()\">\r\n @for (property of filterableProperties | skipFilter: activeFilters(); track property) {\r\n <option [ngValue]=\"property\">\r\n {{ property.displayName }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n @switch (propertyType) {\r\n @case (stringPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"stringProperty\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (numericPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"numericProperty\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (enumPropertyType) {\r\n <appfx-enum-filter [filterProperty]=\"enumProperty\" (filterCriteriaChange)=\"onFilterCriteriaChange($event)\">\r\n </appfx-enum-filter>\r\n }\r\n @case (dateTimePropertyType) {\r\n <appfx-datetime-filter\r\n [filterProperty]=\"dateTimeProperty\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-datetime-filter>\r\n }\r\n @case (userPropertyType) {\r\n <appfx-users-filter [filterProperty]=\"userProperty\" (filterCriteriaChange)=\"onFilterCriteriaChange($event)\">\r\n </appfx-users-filter>\r\n }\r\n }\r\n </hermes-signpost-content>\r\n </ng-template>\r\n </hermes-signpost>\r\n @if (propertyFilters.length > 0) {\r\n <div class=\"manage-filter-container\">\r\n @for (propertyFilter of propertyFilters; track propertyFilter) {\r\n <appfx-manage-filter\r\n [hidden]=\"collapsedFilters\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-manage-filter>\r\n }\r\n <button\r\n class=\"btn btn-sm btn-link btn-compact\"\r\n data-test-id=\"hide-filters\"\r\n [attr.aria-label]=\"showHideFiltersAriaLabel\"\r\n (click)=\"showHideAllFilters()\"\r\n >\r\n <hermes-icon shape=\"angle\" class=\"is-solid\" [direction]=\"showHideFiltersArrowDir\"></hermes-icon>\r\n {{ showHideFiltersLabel }}\r\n </button>\r\n <button\r\n class=\"btn btn-sm btn-link btn-compact\"\r\n data-test-id=\"clear-all-button\"\r\n [attr.aria-label]=\"filterStrings.clearAllButtonAriaLabel\"\r\n (click)=\"clearAllFilters()\"\r\n >\r\n {{ filterStrings.clearAllButtonLabel }}\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\n\r\nimport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nimport { FilterMode } from './model/datagrid-filters.enums';\r\nimport { FilterablePropertyDefinition, PropertyFilter } from './model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst searchTermDebounceTimeMs = 2000;\r\n\r\n/**\r\n * Component provides the ability to choose from quick filter (search)\r\n * and advanced filter (composite filters).\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-datagrid-filters',\r\n standalone: false,\r\n templateUrl: 'datagrid-filters.component.html',\r\n styleUrls: ['datagrid-filters.component.scss', 'common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DataGridFiltersComponent implements OnDestroy, AfterViewInit {\r\n readonly quickMode: FilterMode = FilterMode.Quick;\r\n readonly advancedMode: FilterMode = FilterMode.Advanced;\r\n readonly advancedOnlyMode: FilterMode = FilterMode.AdvancedOnly;\r\n\r\n mode: FilterMode = FilterMode.Quick;\r\n selectedFilterMode: FilterMode = FilterMode.Quick;\r\n searchTerm: string = '';\r\n\r\n /**\r\n * Array of filterable properties\r\n */\r\n @Input() filterableProperties: FilterablePropertyDefinition[];\r\n\r\n /**\r\n * Array of pre-selected filters\r\n */\r\n @Input() presetFilters: PropertyFilter[];\r\n\r\n /**\r\n * Event emitter to tell hosting view that search term, used for filtering\r\n * has changed.\r\n */\r\n @Output() searchTermChange: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() propertyFiltersChange: EventEmitter<PropertyFilter[]> = new EventEmitter<PropertyFilter[]>();\r\n\r\n private lastSearchTerm = '';\r\n // When the user is typing in the search input (filter)\r\n // the search term change event will be fired\r\n // on every 2 sec.\r\n private searchTermDebouncer: Subject<string> = new Subject<string>();\r\n private unsubscribeSubject: Subject<void> = new Subject<void>();\r\n private appliedFiltersCount = 0;\r\n\r\n constructor(public filterStrings: DatagridFiltersStrings) {}\r\n\r\n /**\r\n * Quick, Advanced or AdvancedOnly. Default Quick.\r\n */\r\n @Input()\r\n set filterMode(filterMode: FilterMode) {\r\n if (filterMode !== null && filterMode !== undefined) {\r\n this.mode = filterMode;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.searchTermDebouncer\r\n .pipe(debounceTime(searchTermDebounceTimeMs), distinctUntilChanged(), takeUntil(this.unsubscribeSubject))\r\n .subscribe((search: string) => {\r\n this.doSearch(search);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribeSubject.next();\r\n this.unsubscribeSubject.complete();\r\n }\r\n\r\n onFilterModeChange() {\r\n // Reset quick search data when switching to advanced mode\r\n if (this.selectedFilterMode === FilterMode.Advanced && !!this.searchTerm) {\r\n this.searchTerm = '';\r\n this.doSearch(this.searchTerm);\r\n // Clear debouncer last value\r\n this.searchTermDebouncer.next(this.searchTerm);\r\n }\r\n // Clear applied filters when switching to quick mode\r\n if (this.selectedFilterMode === FilterMode.Quick && this.appliedFiltersCount > 0) {\r\n this.appliedFiltersCount = 0;\r\n this.propertyFiltersChange.emit([]);\r\n }\r\n }\r\n\r\n onFilterCriteriaChange(propertyFilters: PropertyFilter[]) {\r\n this.appliedFiltersCount = propertyFilters.length;\r\n this.propertyFiltersChange.emit(propertyFilters);\r\n }\r\n\r\n onSearchInputKeyPress(event: KeyboardEvent): void {\r\n if (event.key === enterKey) {\r\n this.doSearch(this.searchTerm);\r\n }\r\n }\r\n\r\n onSearchTermChanged(searchTerm: string): void {\r\n this.searchTerm = searchTerm;\r\n this.searchTermDebouncer.next(this.searchTerm);\r\n }\r\n\r\n private doSearch(search: string) {\r\n search = search.trim();\r\n if (this.lastSearchTerm !== search) {\r\n this.lastSearchTerm = search;\r\n this.searchTermChange.emit(search);\r\n }\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div data-test-id=\"appfx-advanced-datagrid-filter\" class=\"filter-container\">\r\n @switch (mode) {\r\n @case (quickMode) {\r\n <label class=\"hermes-control-label form-control-compact\">\r\n {{ filterStrings.quickFilter }}\r\n </label>\r\n }\r\n @case (advancedOnlyMode) {\r\n <label class=\"hermes-control-label form-control-compact\">\r\n {{ filterStrings.advancedFilter }}\r\n </label>\r\n }\r\n @case (advancedMode) {\r\n <hermes-native-select-container class=\"form-control-compact\">\r\n <select\r\n [attr.aria-label]=\"filterStrings.filterType\"\r\n hermesNativeSelect\r\n [(ngModel)]=\"selectedFilterMode\"\r\n (ngModelChange)=\"onFilterModeChange()\"\r\n >\r\n <option [ngValue]=\"quickMode\">{{ filterStrings.quickFilter }}</option>\r\n <option [ngValue]=\"advancedMode\">{{ filterStrings.advancedFilter }}</option>\r\n </select>\r\n </hermes-native-select-container>\r\n }\r\n }\r\n @if (selectedFilterMode === quickMode && mode !== advancedOnlyMode) {\r\n <hermes-input-container class=\"ml-half form-control-compact\">\r\n <label class=\"hermes-sr-only\"> {{ filterStrings.quickFilter }} </label>\r\n <input\r\n type=\"text\"\r\n (keydown)=\"onSearchInputKeyPress($event)\"\r\n [ngModel]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchTermChanged($event)\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n />\r\n </hermes-input-container>\r\n }\r\n @if (selectedFilterMode === advancedMode || mode === advancedOnlyMode) {\r\n <appfx-composite-filter\r\n class=\"filter-contents\"\r\n [filterableProperties]=\"filterableProperties\"\r\n [presetFilters]=\"presetFilters\"\r\n (propertyFiltersChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-composite-filter>\r\n }\r\n</div>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { A11yModule as CdkA11yModule } from '@angular/cdk/a11y';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HermesCheckboxModule, HermesInputModule, HermesRadioModule, HermesNativeSelectModule } from '@hermes-ui/angular/forms';\r\nimport {\r\n angleIcon,\r\n ClarityIcons,\r\n HermesIcon,\r\n filterGridIcon,\r\n plusIcon,\r\n searchIcon,\r\n windowCloseIcon,\r\n} from '@hermes-ui/angular/icon';\r\nimport { HermesSignpostModule } from '@hermes-ui/angular/popover/signpost';\r\nimport { HermesSpinnerModule } from '@hermes-ui/angular/progress/spinner';\r\n\r\nimport { DateTimeFilterComponent } from './advanced-filters/date-time-filter.component';\r\nimport { EnumFilterComponent } from './advanced-filters/enum-filter.component';\r\nimport { FilterFormComponent } from './advanced-filters/filter-form.component';\r\nimport { GeneralFilterComponent } from './advanced-filters/general-filter.component';\r\nimport { UsersFilterComponent } from './advanced-filters/users-filter.component';\r\nimport { CompositeFiltersComponent } from './composite-filters.component';\r\nimport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nimport { DatagridFiltersUserService } from './datagrid-filters-user-service';\r\nimport { DataGridFiltersComponent } from './datagrid-filters.component';\r\nimport { FilterPopoverRepositionDirective } from './filter-popover-reposition-directive';\r\nimport { DismissableDirective } from './manage-filters/dismissable.directive';\r\nimport { ManageFilterComponent } from './manage-filters/manage-filter.component';\r\nimport { SkipFiltersPipe } from './skip-filters.pipe';\r\n\r\nexport function datagridFiltersStringsServiceFactory(existing: DatagridFiltersStrings) {\r\n return existing || new DatagridFiltersStrings();\r\n}\r\n\r\nexport function datagridFiltersUserServiceFactory(existing: DatagridFiltersUserService) {\r\n return existing || new DatagridFiltersUserService();\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n CompositeFiltersComponent,\r\n DataGridFiltersComponent,\r\n DateTimeFilterComponent,\r\n DismissableDirective,\r\n EnumFilterComponent,\r\n FilterFormComponent,\r\n FilterPopoverRepositionDirective,\r\n GeneralFilterComponent,\r\n ManageFilterComponent,\r\n SkipFiltersPipe,\r\n UsersFilterComponent,\r\n ],\r\n imports: [\r\n CdkA11yModule,\r\n HermesCheckboxModule,\r\n HermesIcon,\r\n HermesInputModule,\r\n HermesRadioModule,\r\n HermesNativeSelectModule,\r\n HermesSignpostModule,\r\n HermesSpinnerModule,\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ],\r\n exports: [CompositeFiltersComponent, DataGridFiltersComponent, FilterFormComponent],\r\n providers: [\r\n DatePipe,\r\n {\r\n // This pattern allows the importer of this module to specify its own DatagridFiltersStrings.\r\n provide: DatagridFiltersStrings,\r\n useFactory: datagridFiltersStringsServiceFactory,\r\n deps: [[new Optional(), new SkipSelf(), DatagridFiltersStrings]],\r\n },\r\n {\r\n provide: DatagridFiltersUserService,\r\n useFactory: datagridFiltersUserServiceFactory,\r\n deps: [[new Optional(), new SkipSelf(), DatagridFiltersUserService]],\r\n },\r\n ],\r\n})\r\nexport class AppfxDatagridFiltersModule {\r\n constructor() {\r\n ClarityIcons.addIcons(angleIcon, filterGridIcon, plusIcon, searchIcon, windowCloseIcon);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport { CompositeFiltersComponent } from './composite-filters.component';\r\nexport { DataGridFiltersComponent } from './datagrid-filters.component';\r\nexport {\r\n /**\r\n * @deprecated Use AppfxDatagridFiltersModule import instead.\r\n */\r\n AppfxDatagridFiltersModule as DatagridFiltersModule,\r\n} from './datagrid-filters.module';\r\nexport { AppfxDatagridFiltersModule } from './datagrid-filters.module';\r\nexport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nexport { DatagridFiltersUserService } from './datagrid-filters-user-service';\r\nexport { ComparisonOperator, FilterMode, LogicalOperator, PropertyType, Unit } from './model/datagrid-filters.enums';\r\nexport {\r\n DateTimePropertyDefinition,\r\n EnumPropertyDefinition,\r\n FilterablePropertyDefinition,\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n PropertyPredicate,\r\n StringPropertyDefinition,\r\n UserPropertyDefinition,\r\n} from './model/datagrid-filters.interfaces';\r\n\r\n// FIXME\r\n// Unsupported private class FilterFormComponent.\r\n// This class is visible to consumers via AppfxDatagridFiltersModule -> FilterFormComponent,\r\n// but is not exported from the top-level library entrypoint.\r\nexport { FilterFormComponent } from './advanced-filters/filter-form.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DatagridFiltersStrings","i2","i3","enterKey","i3.DatagridFiltersStrings","i4","i5","i6","i7.FilterFormComponent","i2.DatagridFiltersStrings","i7","i8.FilterFormComponent","i6.FilterFormComponent","spaceKey","i3.DatagridFiltersUserService","i8","i9.FilterFormComponent","i7.DateTimeFilterComponent","i8.DismissableDirective","i9.EnumFilterComponent","i10.FilterPopoverRepositionDirective","i11.GeneralFilterComponent","i12.UsersFilterComponent","i9.DateTimeFilterComponent","i10.EnumFilterComponent","i11.FilterPopoverRepositionDirective","i12.GeneralFilterComponent","i13.ManageFilterComponent","i14.UsersFilterComponent","i15.SkipFiltersPipe","i5.CompositeFiltersComponent","CdkA11yModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hermes-ui-angular-addons-datagrid-filters.mjs","sources":["../../../addons/datagrid-filters/model/datagrid-filters.enums.ts","../../../addons/datagrid-filters/model/datagrid-filters.interfaces.ts","../../../addons/datagrid-filters/datagrid-filters-strings.service.ts","../../../addons/datagrid-filters/advanced-filters/filter-form.component.ts","../../../addons/datagrid-filters/advanced-filters/filter-form.component.html","../../../addons/datagrid-filters/advanced-filters/date-time-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/date-time-filter.component.html","../../../addons/datagrid-filters/advanced-filters/enum-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/enum-filter.component.html","../../../addons/datagrid-filters/filter-popover-reposition-directive.ts","../../../addons/datagrid-filters/advanced-filters/general-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/general-filter.component.html","../../../addons/datagrid-filters/manage-filters/dismissable.directive.ts","../../../addons/datagrid-filters/datagrid-filters-user-service.ts","../../../addons/datagrid-filters/advanced-filters/users-filter.component.ts","../../../addons/datagrid-filters/advanced-filters/users-filter.component.html","../../../addons/datagrid-filters/manage-filters/manage-filter.component.ts","../../../addons/datagrid-filters/manage-filters/manage-filter.component.html","../../../addons/datagrid-filters/skip-filters.pipe.ts","../../../addons/datagrid-filters/composite-filters.component.ts","../../../addons/datagrid-filters/composite-filters.component.html","../../../addons/datagrid-filters/datagrid-filters.component.ts","../../../addons/datagrid-filters/datagrid-filters.component.html","../../../addons/datagrid-filters/datagrid-filters.module.ts","../../../addons/datagrid-filters/index.ts","../../../addons/datagrid-filters/hermes-ui-angular-addons-datagrid-filters.ts"],"sourcesContent":["/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport enum ComparisonOperator {\r\n Contains,\r\n DoesNotContain,\r\n Equals,\r\n DoesNotEqual,\r\n StartsWith,\r\n EndsWith,\r\n IsEmpty,\r\n LessThan,\r\n LessThanOrEqualTo,\r\n GreaterThan,\r\n GreaterThanOrEqualTo,\r\n Before,\r\n BeforeOrEqualTo,\r\n After,\r\n AfterOrEqualTo,\r\n CustomRange,\r\n LastDay,\r\n LastWeek,\r\n LastMonth,\r\n LastYear,\r\n TimeSpan,\r\n}\r\n\r\nexport enum LogicalOperator {\r\n And,\r\n Or,\r\n}\r\n\r\nexport enum FilterMode {\r\n Quick,\r\n Advanced,\r\n AdvancedOnly,\r\n}\r\n\r\nexport enum PropertyType {\r\n String,\r\n Enum,\r\n Numeric,\r\n DateTime,\r\n User,\r\n}\r\n\r\nexport enum Unit {\r\n Byte,\r\n KB,\r\n MB,\r\n GB,\r\n TB,\r\n HZ,\r\n KHZ,\r\n MHZ,\r\n GHZ,\r\n BytePS,\r\n KBytePS,\r\n MBytePS,\r\n GBytePS,\r\n BitPS,\r\n KBitPS,\r\n MBitPS,\r\n GBitPS,\r\n}\r\n\r\nexport enum TimeSpan {\r\n Minutes,\r\n Hours,\r\n Days,\r\n Weeks,\r\n Months,\r\n Years,\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/parameter-properties */\r\n\r\nimport { ComparisonOperator, LogicalOperator, Unit } from './datagrid-filters.enums';\r\n\r\n/**\r\n * Defines a property that can be used to filter data in a datagrid.\r\n * Filterable properties are usually a subset of the datagrid columns.\r\n */\r\nexport abstract class FilterablePropertyDefinition {\r\n /**\r\n * Used internally to store dynamically the selected numeric value, unit and/or other properties.\r\n */\r\n [key: string]: any;\r\n\r\n /**\r\n * Name as shown to users\r\n */\r\n displayName: string;\r\n\r\n /**\r\n * Actual name of the property that is used for filtering\r\n */\r\n property: string;\r\n\r\n /**\r\n * List of comparison operators. Optional.\r\n * Use it to override the default operators for the property.\r\n * Useful in case the data provider does not support all operators.\r\n */\r\n supportedOperators?: ComparisonOperator[];\r\n\r\n protected constructor(displayName: string, property: string, operators?: ComparisonOperator[]) {\r\n this.displayName = displayName;\r\n this.property = property;\r\n if (operators) {\r\n this.supportedOperators = operators;\r\n }\r\n }\r\n}\r\n\r\nexport class StringPropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Indicates that the property can be used with single condition only.\r\n */\r\n singleCondition = false;\r\n\r\n /**\r\n * Indicates that this property only supports a single logical operator (AND or OR).\r\n */\r\n logicalOperator: LogicalOperator | undefined;\r\n\r\n private readonly defaultOperators: ComparisonOperator[] = [\r\n ComparisonOperator.Equals,\r\n ComparisonOperator.DoesNotEqual,\r\n ComparisonOperator.Contains,\r\n ComparisonOperator.DoesNotContain,\r\n ComparisonOperator.StartsWith,\r\n ComparisonOperator.EndsWith,\r\n ComparisonOperator.IsEmpty,\r\n ];\r\n\r\n constructor(\r\n displayName: string,\r\n property: string,\r\n operators?: ComparisonOperator[],\r\n singleCondition?: boolean,\r\n logicalOperator?: LogicalOperator\r\n ) {\r\n super(displayName, property, operators);\r\n if (singleCondition) {\r\n this.singleCondition = singleCondition;\r\n }\r\n this.logicalOperator = logicalOperator;\r\n }\r\n\r\n getOperators(): ComparisonOperator[] {\r\n return this.supportedOperators || this.defaultOperators;\r\n }\r\n}\r\n\r\nexport class EnumPropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Enumeration key/value data to be used in the filter selection\r\n */\r\n values: Map<string, string>;\r\n\r\n /**\r\n * Indicates that the property should be used for single select filtering\r\n */\r\n singleSelect = false;\r\n\r\n /**\r\n * Indicates that the enumeration should be searchable in the filter UI.\r\n */\r\n searchable = false;\r\n\r\n /**\r\n * Flag indicating whether to show the select all checkbox.\r\n */\r\n enableSelectAll = true;\r\n\r\n /**\r\n * Creates an instance of EnumPropertyDefinition.\r\n * @param displayName - The human-readable name of the property shown in the UI.\r\n * @param property - The technical property name used for filtering logic.\r\n * @param values - A Map containing the enum keys and their corresponding display values.\r\n * @param singleSelect - Whether the filter restricts selection to a single item. Defaults to false.\r\n * @param searchable - Whether to enable a search input for the enum options. Defaults to false.\r\n * @param enableSelectAll - Whether to display the select all checkbox. Defaults to true.\r\n * @param allowNotInOperator - Flag indicating whether to allow the use of the \"NOT IN\" operator\r\n * for the selected values, enabling users to exclude specific enum items.\r\n */\r\n constructor(\r\n displayName: string,\r\n property: string,\r\n values: Map<string, string>,\r\n singleSelect = false,\r\n searchable = false,\r\n enableSelectAll = true,\r\n allowNotInOperator = false\r\n ) {\r\n super(\r\n displayName,\r\n property,\r\n allowNotInOperator ? [ComparisonOperator.DoesNotEqual, ComparisonOperator.Equals] : undefined\r\n );\r\n this.values = values;\r\n this.singleSelect = singleSelect;\r\n this.searchable = searchable;\r\n this.enableSelectAll = enableSelectAll;\r\n }\r\n}\r\n\r\nexport class NumericPropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Default unit of the metric\r\n */\r\n unit: Unit;\r\n /**\r\n * Indicates that the property can be used with single condition only.\r\n */\r\n singleCondition = false;\r\n\r\n /**\r\n * Indicates that this property only supports a single logical operator (AND or OR).\r\n */\r\n logicalOperator: LogicalOperator | undefined;\r\n\r\n private readonly defaultOperators: ComparisonOperator[] = [\r\n ComparisonOperator.Equals,\r\n ComparisonOperator.DoesNotEqual,\r\n ComparisonOperator.LessThan,\r\n ComparisonOperator.LessThanOrEqualTo,\r\n ComparisonOperator.GreaterThan,\r\n ComparisonOperator.GreaterThanOrEqualTo,\r\n ComparisonOperator.IsEmpty,\r\n ];\r\n\r\n constructor(\r\n displayName: string,\r\n property: string,\r\n operators?: ComparisonOperator[],\r\n unit?: Unit,\r\n singleCondition?: boolean,\r\n logicalOperator?: LogicalOperator\r\n ) {\r\n super(displayName, property, operators);\r\n // Check for null and undefined\r\n if (unit !== null && unit !== undefined) {\r\n this.unit = unit;\r\n }\r\n if (singleCondition) {\r\n this.singleCondition = singleCondition;\r\n }\r\n this.logicalOperator = logicalOperator;\r\n }\r\n\r\n getOperators(): ComparisonOperator[] {\r\n return this.supportedOperators || this.defaultOperators;\r\n }\r\n}\r\n\r\nexport class UserPropertyDefinition extends FilterablePropertyDefinition {\r\n constructor(displayName: string, property: string) {\r\n super(displayName, property, [ComparisonOperator.Equals, ComparisonOperator.DoesNotEqual]);\r\n }\r\n}\r\n\r\nexport class DateTimePropertyDefinition extends FilterablePropertyDefinition {\r\n /**\r\n * Flag indicating whether to include seconds in the time selector for the DateTime filter.\r\n */\r\n includeSeconds: boolean;\r\n\r\n private readonly defaultOperators: ComparisonOperator[] = [\r\n ComparisonOperator.Equals,\r\n ComparisonOperator.Before,\r\n ComparisonOperator.BeforeOrEqualTo,\r\n ComparisonOperator.After,\r\n ComparisonOperator.AfterOrEqualTo,\r\n ComparisonOperator.CustomRange,\r\n ComparisonOperator.IsEmpty,\r\n ComparisonOperator.LastDay,\r\n ComparisonOperator.LastWeek,\r\n ComparisonOperator.LastMonth,\r\n ComparisonOperator.LastYear,\r\n ComparisonOperator.TimeSpan,\r\n ];\r\n\r\n constructor(displayName: string, property: string, operators?: ComparisonOperator[], includeSeconds?: boolean) {\r\n super(displayName, property, operators);\r\n this.includeSeconds = includeSeconds ? includeSeconds : false;\r\n }\r\n\r\n getOperators(): ComparisonOperator[] {\r\n return this.supportedOperators || this.defaultOperators;\r\n }\r\n}\r\n\r\nexport class PropertyFilter {\r\n /**\r\n * Filter criteria\r\n */\r\n criteria: PropertyPredicate[];\r\n /**\r\n * Logical operator. Supported values are AND/OR\r\n */\r\n operator: LogicalOperator;\r\n}\r\n\r\nexport class PropertyPredicate {\r\n /**\r\n * Property that is used for filtering\r\n */\r\n filterableProperty: FilterablePropertyDefinition;\r\n\r\n /**\r\n * Filtering operator\r\n */\r\n operator: ComparisonOperator;\r\n\r\n /**\r\n * Filter value\r\n */\r\n value: any;\r\n}\r\n\r\nexport interface EnumPropertyData {\r\n key: string;\r\n value: string;\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ComparisonOperator, LogicalOperator, TimeSpan, Unit } from './model/datagrid-filters.enums';\r\n\r\n/**\r\n * User-visible strings used in the 'appfx-datagrid-filters' library.\r\n * Fields are read-only to avoid accidentally modifying the values and affecting all\r\n * filters in the application.\r\n *\r\n * Strings are in English only. If you need to provide localized strings:\r\n * - extend this class\r\n * - override all fields with localized values\r\n * - provide instance in the module, where you use AppFx\r\n *\r\n * ```\r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DatagridFiltersStrings, useClass: LocalizedDatagridFiltersStrings },\r\n * ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DatagridFiltersStrings {\r\n /**\r\n * Filter type label.\r\n */\r\n readonly filterType: string = 'Filter Type';\r\n\r\n /**\r\n * Quick filter label.\r\n */\r\n readonly quickFilter: string = 'Quick Filter';\r\n\r\n /**\r\n * Advanced filter label.\r\n */\r\n readonly advancedFilter: string = 'Advanced Filter';\r\n\r\n /**\r\n * Input placeholder.\r\n */\r\n readonly enterValue: string = 'Enter value';\r\n\r\n /**\r\n * Required validator error message\r\n */\r\n readonly requiredValidatorMessage: string = 'This field is required';\r\n\r\n /**\r\n * Numeric input validator error message\r\n */\r\n readonly integerValidatorMessage: string = 'Integer value required';\r\n\r\n /**\r\n * Add new filter button label.\r\n */\r\n readonly addNew: string = 'Add new';\r\n\r\n /**\r\n * Add new filter button aria label.\r\n */\r\n readonly addNewAriaLabel: string = 'Add new filter';\r\n\r\n /**\r\n * Select filter label.\r\n */\r\n readonly filterLabel: string = 'Filter';\r\n\r\n /**\r\n * Select operator label.\r\n */\r\n readonly operatorLabel: string = 'Operator';\r\n\r\n /**\r\n * Comparison operator display names.\r\n */\r\n readonly operator: {\r\n after: string;\r\n afterOrEqualTo: string;\r\n before: string;\r\n beforeOrEqualTo: string;\r\n contains: string;\r\n customRange: string;\r\n doesNotContain: string;\r\n doesNotEqual: string;\r\n endsWith: string;\r\n equals: string;\r\n greaterThan: string;\r\n greaterThanOrEqualTo: string;\r\n isEmpty: string;\r\n lastDay: string;\r\n lastWeek: string;\r\n lastMonth: string;\r\n lastYear: string;\r\n lessThan: string;\r\n lessThanOrEqualTo: string;\r\n startsWith: string;\r\n timeSpan: string;\r\n } = {\r\n after: 'After',\r\n afterOrEqualTo: 'After or equal to',\r\n before: 'Before',\r\n beforeOrEqualTo: 'Before or equal to',\r\n contains: 'Contains',\r\n customRange: 'Custom range',\r\n doesNotContain: 'Does not contain',\r\n doesNotEqual: 'Does not equal',\r\n endsWith: 'Ends with',\r\n equals: 'Equals',\r\n greaterThan: 'Greater than',\r\n greaterThanOrEqualTo: 'Greater than or equal to',\r\n isEmpty: 'Is empty',\r\n lastDay: 'Last day',\r\n lastWeek: 'Last week',\r\n lastMonth: 'Last month',\r\n lastYear: 'Last year',\r\n lessThan: 'Less than',\r\n lessThanOrEqualTo: 'Less than or equal to',\r\n startsWith: 'Starts with',\r\n timeSpan: 'Time span',\r\n };\r\n\r\n /**\r\n * Select unit aria label.\r\n */\r\n readonly unitAriaLabel: string = 'Unit';\r\n\r\n /**\r\n * Add second condition button label.\r\n */\r\n readonly addCondition: string = 'Add condition';\r\n\r\n /**\r\n * Remove second condition button aria label.\r\n */\r\n readonly removeConditionAriaLabel: string = 'Remove second condition';\r\n\r\n /**\r\n * Conjoiners.\r\n */\r\n readonly logicalOperator: {\r\n and: string;\r\n or: string;\r\n } = {\r\n and: 'And',\r\n or: 'Or',\r\n };\r\n\r\n /**\r\n * Cancel button label.\r\n */\r\n readonly cancel: string = 'Cancel';\r\n\r\n /**\r\n * Apply button label.\r\n */\r\n readonly apply: string = 'Apply';\r\n\r\n /**\r\n * Select values label.\r\n */\r\n readonly valueLabel: string = 'Value';\r\n\r\n /**\r\n * Select all option label.\r\n */\r\n readonly selectAll: string = 'Select all';\r\n\r\n /**\r\n * Applied filters text.\r\n */\r\n readonly appliedText: string = 'applied';\r\n\r\n readonly editFilterText: string = 'Edit filter';\r\n\r\n readonly removeFilterText: string = 'Remove filter';\r\n\r\n readonly hideButtonLabel: string = 'Hide';\r\n\r\n readonly hideButtonAriaLabel: string = 'Hide filters';\r\n\r\n readonly showButtonLabel: string = 'Show';\r\n\r\n readonly filtersText: string = 'filters';\r\n\r\n readonly filterText: string = 'filter';\r\n\r\n readonly clearAllButtonLabel: string = 'Clear all';\r\n\r\n readonly clearAllButtonAriaLabel: string = 'Clear all filters';\r\n\r\n readonly searchOptions: string = 'Search options';\r\n\r\n readonly searchPlaceholder: string = 'Search...';\r\n\r\n readonly showingFormat: string = 'Showing {} of {} results';\r\n\r\n readonly noValuesFound: string = 'No matching values found.';\r\n\r\n readonly elementsSelectedFormat: string = '{} elements selected';\r\n\r\n readonly loading: string = 'Loading...';\r\n\r\n readonly allSearchResults: string = 'Select All Search Results';\r\n\r\n readonly loadMore: string = 'Load more ...';\r\n\r\n readonly domain: string = 'Domain';\r\n\r\n readonly user: string = 'User';\r\n\r\n readonly errorSearchingUsers: string = 'Error searching users.';\r\n\r\n readonly errorLoadingDomains: string = 'Error loading domains.';\r\n\r\n readonly emptyUsersError: string = 'Add at least one user.';\r\n\r\n /**\r\n * Add time condition button label.\r\n */\r\n readonly addTimeFilter: string = 'Filter by time';\r\n\r\n /**\r\n * Date input placeholder.\r\n */\r\n readonly dateFormat: string = 'YYYY-MM-DD';\r\n\r\n /**\r\n * Time input placeholder.\r\n */\r\n readonly timeFormat: string = 'HH:mm';\r\n\r\n /**\r\n * Date input validator error message\r\n */\r\n readonly dateValidatorMessage: string = 'Invalid date format';\r\n\r\n /**\r\n * Time input validator error message\r\n */\r\n readonly timeValidatorMessage: string = 'Invalid time format';\r\n\r\n readonly fromLabel: string = 'From';\r\n\r\n readonly toLabel: string = 'To';\r\n\r\n /**\r\n * Remove time filter button aria label.\r\n */\r\n readonly removeTimeFilterAriaLabel: string = 'Remove time filter';\r\n\r\n readonly timeSpan: {\r\n minutes: string;\r\n hours: string;\r\n days: string;\r\n weeks: string;\r\n months: string;\r\n years: string;\r\n } = {\r\n minutes: 'Minutes',\r\n hours: 'Hours',\r\n days: 'Days',\r\n weeks: 'Weeks',\r\n months: 'Months',\r\n years: 'Years',\r\n };\r\n\r\n /**\r\n * Time span aria label.\r\n */\r\n readonly timeSpanAriaLabel: string = 'Time span';\r\n\r\n readonly timeSpanInputLabel: string = 'In the last';\r\n\r\n readonly unit: {\r\n byte: string;\r\n kb: string;\r\n mb: string;\r\n gb: string;\r\n tb: string;\r\n hz: string;\r\n khz: string;\r\n mhz: string;\r\n ghz: string;\r\n byteps: string;\r\n kbyteps: string;\r\n mbyteps: string;\r\n gbyteps: string;\r\n bitps: string;\r\n kbitps: string;\r\n mbitps: string;\r\n gbitps: string;\r\n } = {\r\n byte: 'B',\r\n kb: 'KB',\r\n mb: 'MB',\r\n gb: 'GB',\r\n tb: 'TB',\r\n hz: 'Hz',\r\n khz: 'KHz',\r\n mhz: 'MHz',\r\n ghz: 'GHz',\r\n byteps: 'B/s',\r\n kbyteps: 'KB/s',\r\n mbyteps: 'MB/s',\r\n gbyteps: 'GB/s',\r\n bitps: 'Bit/s',\r\n kbitps: 'Kbit/s',\r\n mbitps: 'Mbit/s',\r\n gbitps: 'Gbit/s',\r\n };\r\n\r\n formatString(stringFormat: string, args: string[]): string {\r\n let result = stringFormat;\r\n for (const arg of args) {\r\n result = result.replace('{}', arg);\r\n }\r\n return result;\r\n }\r\n\r\n getOperatorDisplayName(operator: ComparisonOperator): string {\r\n switch (operator) {\r\n case ComparisonOperator.After:\r\n return this.operator.after;\r\n case ComparisonOperator.AfterOrEqualTo:\r\n return this.operator.afterOrEqualTo;\r\n case ComparisonOperator.Before:\r\n return this.operator.before;\r\n case ComparisonOperator.BeforeOrEqualTo:\r\n return this.operator.beforeOrEqualTo;\r\n case ComparisonOperator.Contains:\r\n return this.operator.contains;\r\n case ComparisonOperator.CustomRange:\r\n return this.operator.customRange;\r\n case ComparisonOperator.DoesNotContain:\r\n return this.operator.doesNotContain;\r\n case ComparisonOperator.DoesNotEqual:\r\n return this.operator.doesNotEqual;\r\n case ComparisonOperator.Equals:\r\n return this.operator.equals;\r\n case ComparisonOperator.EndsWith:\r\n return this.operator.endsWith;\r\n case ComparisonOperator.GreaterThan:\r\n return this.operator.greaterThan;\r\n case ComparisonOperator.GreaterThanOrEqualTo:\r\n return this.operator.greaterThanOrEqualTo;\r\n case ComparisonOperator.IsEmpty:\r\n return this.operator.isEmpty;\r\n case ComparisonOperator.LastDay:\r\n return this.operator.lastDay;\r\n case ComparisonOperator.LastWeek:\r\n return this.operator.lastWeek;\r\n case ComparisonOperator.LastMonth:\r\n return this.operator.lastMonth;\r\n case ComparisonOperator.LastYear:\r\n return this.operator.lastYear;\r\n case ComparisonOperator.LessThan:\r\n return this.operator.lessThan;\r\n case ComparisonOperator.LessThanOrEqualTo:\r\n return this.operator.lessThanOrEqualTo;\r\n case ComparisonOperator.StartsWith:\r\n return this.operator.startsWith;\r\n case ComparisonOperator.TimeSpan:\r\n return this.operator.timeSpan;\r\n default:\r\n return 'Unknown operator!';\r\n }\r\n }\r\n\r\n getConjoinerDisplayName(conjoiner: LogicalOperator): string {\r\n switch (conjoiner) {\r\n case LogicalOperator.And:\r\n return this.logicalOperator.and;\r\n case LogicalOperator.Or:\r\n return this.logicalOperator.or;\r\n default:\r\n return 'Unknown logical operator!';\r\n }\r\n }\r\n\r\n getTimeSpanDisplayName(timeSpan: TimeSpan): string {\r\n switch (timeSpan) {\r\n case TimeSpan.Minutes:\r\n return this.timeSpan.minutes;\r\n case TimeSpan.Hours:\r\n return this.timeSpan.hours;\r\n case TimeSpan.Days:\r\n return this.timeSpan.days;\r\n case TimeSpan.Weeks:\r\n return this.timeSpan.weeks;\r\n case TimeSpan.Months:\r\n return this.timeSpan.months;\r\n case TimeSpan.Years:\r\n return this.timeSpan.years;\r\n default:\r\n return 'Unknown time span!';\r\n }\r\n }\r\n\r\n getUnitDisplayName(unit: Unit): string {\r\n switch (unit) {\r\n case Unit.Byte:\r\n return this.unit.byte;\r\n case Unit.KB:\r\n return this.unit.kb;\r\n case Unit.MB:\r\n return this.unit.mb;\r\n case Unit.GB:\r\n return this.unit.gb;\r\n case Unit.TB:\r\n return this.unit.tb;\r\n case Unit.HZ:\r\n return this.unit.hz;\r\n case Unit.KHZ:\r\n return this.unit.khz;\r\n case Unit.MHZ:\r\n return this.unit.mhz;\r\n case Unit.GHZ:\r\n return this.unit.ghz;\r\n case Unit.BytePS:\r\n return this.unit.byteps;\r\n case Unit.KBytePS:\r\n return this.unit.kbyteps;\r\n case Unit.MBytePS:\r\n return this.unit.mbyteps;\r\n case Unit.GBytePS:\r\n return this.unit.gbyteps;\r\n case Unit.BitPS:\r\n return this.unit.bitps;\r\n case Unit.KBitPS:\r\n return this.unit.kbitps;\r\n case Unit.MBitPS:\r\n return this.unit.mbitps;\r\n case Unit.GBitPS:\r\n return this.unit.gbitps;\r\n default:\r\n return 'Unknown unit!';\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\n\r\n/**\r\n * Reusable form component.\r\n *\r\n */\r\n@Component({\r\n selector: 'appfx-filter-form',\r\n standalone: false,\r\n templateUrl: 'filter-form.component.html',\r\n styleUrls: ['../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FilterFormComponent {\r\n /**\r\n * Hosting view form status\r\n */\r\n @Input() valid: boolean;\r\n\r\n /**\r\n * Event emitter to tell hosting view that cancel button was clicked\r\n */\r\n @Output() cancel: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that apply button was clicked\r\n */\r\n @Output() apply: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n constructor(public filterStrings: DatagridFiltersStrings) {}\r\n\r\n onApplyButtonClick(): void {\r\n this.apply.emit();\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.cancel.emit();\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<form hermesForm class=\"form-compact\" hermesLayout=\"vertical\">\r\n <div class=\"form-max-height\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div>\r\n <button\r\n type=\"button\"\r\n data-test-id=\"submitBtn\"\r\n class=\"btn btn-sm btn-primary btn-right\"\r\n [disabled]=\"!valid\"\r\n (click)=\"onApplyButtonClick()\"\r\n >\r\n {{ filterStrings.apply }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n data-test-id=\"cancelBtn\"\r\n class=\"btn btn-sm btn-outline btn-right\"\r\n (click)=\"onCancelButtonClick()\"\r\n >\r\n {{ filterStrings.cancel }}\r\n </button>\r\n </div>\r\n</form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, LogicalOperator, TimeSpan } from '../model/datagrid-filters.enums';\r\nimport { DateTimePropertyDefinition, PropertyFilter, PropertyPredicate } from '../model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst dateTimeFormat = 'yyyy-MM-ddTHH:mm:ss';\r\nconst requiredValidators: ValidatorFn[] = [Validators.required];\r\n\r\n// TODO: zpopov: Existing time utils to convert to/from milliseconds may make the code even easier to read\r\nconst oneSecondMs: number = 1 * 1000;\r\nconst oneMinuteMs: number = 60 * oneSecondMs;\r\nconst oneHourMs: number = 60 * oneMinuteMs;\r\nconst oneDayMs: number = 24 * oneHourMs;\r\nconst oneWeekMs: number = 7 * oneDayMs;\r\nconst oneMonthMs: number = 30 * oneDayMs;\r\n// We ignore leap years when it comes to time-spans.\r\nconst oneYearMs: number = 365 * oneDayMs;\r\n\r\n/**\r\n * Datetime filter component collects filtering criteria for datetime based properties\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-datetime-filter',\r\n standalone: false,\r\n templateUrl: 'date-time-filter.component.html',\r\n styleUrls: ['date-time-filter.component.scss', '../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DateTimeFilterComponent implements OnInit, OnChanges {\r\n readonly timeSpans: TimeSpan[];\r\n dateTimeFilterForm: FormGroup;\r\n comparisonOperators: ComparisonOperator[];\r\n isEmptyPredicate = false;\r\n isCustomRangePredicate = false;\r\n isRelativePredicate = false;\r\n isTimeSpanPredicate = false;\r\n timePredicate = false;\r\n includeSeconds = false;\r\n /**\r\n * In case the component is used for filter editing\r\n */\r\n @Input() propertyFilter: PropertyFilter;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n private readonly relativeOperators: ComparisonOperator[] = [\r\n ComparisonOperator.LastDay,\r\n ComparisonOperator.LastWeek,\r\n ComparisonOperator.LastMonth,\r\n ComparisonOperator.LastYear,\r\n ];\r\n private readonly singlePredicateOperators: ComparisonOperator[] = [\r\n ComparisonOperator.After,\r\n ComparisonOperator.AfterOrEqualTo,\r\n ComparisonOperator.Before,\r\n ComparisonOperator.BeforeOrEqualTo,\r\n ];\r\n private selectedFilterCriteria: PropertyFilter = new PropertyFilter();\r\n private primaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n private secondaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n\r\n /**\r\n * Property used for filtering\r\n */\r\n #filterProperty: DateTimePropertyDefinition;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private datePipe: DatePipe,\r\n public filterStrings: DatagridFiltersStrings\r\n ) {\r\n this.timeSpans = [TimeSpan.Minutes, TimeSpan.Hours, TimeSpan.Days, TimeSpan.Weeks, TimeSpan.Months, TimeSpan.Years];\r\n }\r\n\r\n @Input()\r\n get filterProperty(): DateTimePropertyDefinition {\r\n return this.#filterProperty;\r\n }\r\n set filterProperty(filterProperty: DateTimePropertyDefinition) {\r\n this.#filterProperty = filterProperty;\r\n }\r\n\r\n ngOnInit() {\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n let dateValidators: ValidatorFn[] = requiredValidators;\r\n\r\n // To handle edit mode\r\n const storedOperator: ComparisonOperator = this.propertyFilter?.criteria[0]?.filterableProperty.selectedOperator;\r\n if (storedOperator) {\r\n this.processSelectedOperator(storedOperator);\r\n if (this.noDateTimeInputNeeded()) {\r\n dateValidators = [];\r\n }\r\n }\r\n\r\n this.dateTimeFilterForm = this.formBuilder.group({\r\n operator: [storedOperator || ComparisonOperator.AfterOrEqualTo],\r\n dateValue: [this.parseDateValue(this.getStoredDateTimeValue()), dateValidators],\r\n });\r\n\r\n if (this.parseTimeValue(this.getStoredDateTimeValue()).length > 0) {\r\n this.enableTimePredicate();\r\n }\r\n\r\n if (ComparisonOperator.CustomRange === storedOperator) {\r\n this.isCustomRangePredicate = true;\r\n this.enableCustomRangePredicate();\r\n }\r\n\r\n if (this.isTimeSpanPredicate) {\r\n this.enableTimeSpanPredicate();\r\n }\r\n\r\n this.onOperatorChange();\r\n }\r\n\r\n ngOnChanges() {\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n this.includeSeconds = this.filterProperty.includeSeconds;\r\n }\r\n\r\n onInputKeyPress(event: KeyboardEvent): void {\r\n if (event.key === enterKey) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n if (this.dateTimeFilterForm.valid) {\r\n this.onApplyButtonClick();\r\n }\r\n }\r\n }\r\n\r\n enableTimePredicate(): void {\r\n this.timePredicate = true;\r\n this.dateTimeFilterForm.addControl(\r\n 'timeValue',\r\n new FormControl(this.parseTimeValue(this.getStoredDateTimeValue()), requiredValidators)\r\n );\r\n if (this.isCustomRangePredicate) {\r\n this.dateTimeFilterForm.addControl(\r\n 'timeValueTo',\r\n new FormControl(this.parseTimeValue(this.getStoredDateTimeValueTo()), requiredValidators)\r\n );\r\n }\r\n }\r\n\r\n disableTimePredicate(): void {\r\n this.timePredicate = false;\r\n this.dateTimeFilterForm.removeControl('timeValue');\r\n if (this.isCustomRangePredicate) {\r\n this.dateTimeFilterForm.removeControl('timeValueTo');\r\n }\r\n }\r\n\r\n noDateTimeInputNeeded(): boolean {\r\n return this.isEmptyPredicate || this.isTimeSpanPredicate || this.isRelativePredicate;\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n const selectedOperator: ComparisonOperator = this.dateTimeFilterForm.value.operator;\r\n\r\n if (this.isRelativeDateTimeOperator(selectedOperator)) {\r\n this.primaryPredicate = this.getRelativeDateTimePredicate(selectedOperator);\r\n this.secondaryPredicate = this.getcurrentTimePredicate();\r\n } else if (this.isTimeSpanPredicate) {\r\n this.primaryPredicate = this.getTimeSpanPredicate(\r\n this.dateTimeFilterForm.value.timeSpanValue,\r\n this.dateTimeFilterForm.value.timeSpan\r\n );\r\n this.secondaryPredicate = this.getcurrentTimePredicate();\r\n } else if (this.isCustomRangePredicate) {\r\n this.primaryPredicate = this.getFromDateTimePredicate();\r\n this.secondaryPredicate = this.getToDateTimePredicate();\r\n } else if (ComparisonOperator.Equals === selectedOperator) {\r\n this.buildEqualsDateTimePredicates();\r\n } else if (this.isSinglePredicateOperator(selectedOperator)) {\r\n this.primaryPredicate = this.getSinglePredicate(selectedOperator);\r\n }\r\n\r\n this.primaryPredicate.filterableProperty = this.filterProperty;\r\n\r\n if (!this.isEmptyPredicate) {\r\n this.primaryPredicate.value = this.adjustTimeZone(this.primaryPredicate.value);\r\n if (!this.isSinglePredicateOperator(selectedOperator)) {\r\n this.secondaryPredicate.filterableProperty = this.filterProperty;\r\n this.secondaryPredicate.value = this.adjustTimeZone(this.secondaryPredicate.value);\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate, this.secondaryPredicate];\r\n this.selectedFilterCriteria.operator = LogicalOperator.And;\r\n } else {\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate];\r\n }\r\n } else {\r\n this.primaryPredicate.operator = ComparisonOperator.IsEmpty;\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate];\r\n }\r\n\r\n // Selected data is stored, in order to be able to be rendered in edit mode\r\n this.storeSelectedValues();\r\n\r\n this.filterCriteriaChange.emit(this.selectedFilterCriteria);\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n private onOperatorChange(): void {\r\n this.dateTimeFilterForm.get('operator')?.valueChanges.subscribe((operator: ComparisonOperator) => {\r\n this.processSelectedOperator(operator);\r\n if (this.noDateTimeInputNeeded()) {\r\n this.disableDateTimePredicates();\r\n } else {\r\n this.isCustomRangePredicate = ComparisonOperator.CustomRange === operator;\r\n this.enableDateTimePredicates();\r\n if (!this.isCustomRangePredicate) {\r\n this.disableCustomRangePredicate();\r\n }\r\n }\r\n if (this.isTimeSpanPredicate) {\r\n this.enableTimeSpanPredicate();\r\n } else {\r\n this.disableTimeSpanPredicate();\r\n }\r\n });\r\n }\r\n\r\n private addValidators(formControlName: string, validators: ValidatorFn[]): void {\r\n this.dateTimeFilterForm.get(formControlName)?.addValidators(validators);\r\n this.dateTimeFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private removeValidators(formControlName: string): void {\r\n this.dateTimeFilterForm.get(formControlName)?.clearValidators();\r\n this.dateTimeFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private isRelativeDateTimeOperator(operator: ComparisonOperator): boolean {\r\n return this.relativeOperators.includes(operator);\r\n }\r\n\r\n private isSinglePredicateOperator(operator: ComparisonOperator): boolean {\r\n return this.singlePredicateOperators.includes(operator);\r\n }\r\n\r\n private enableCustomRangePredicate(): void {\r\n this.dateTimeFilterForm.addControl(\r\n 'dateValueTo',\r\n new FormControl(this.parseDateValue(this.getStoredDateTimeValueTo()), requiredValidators)\r\n );\r\n if (this.timePredicate) {\r\n this.dateTimeFilterForm.addControl(\r\n 'timeValueTo',\r\n new FormControl(this.parseTimeValue(this.getStoredDateTimeValueTo()), requiredValidators)\r\n );\r\n }\r\n }\r\n\r\n private disableCustomRangePredicate(): void {\r\n this.isCustomRangePredicate = false;\r\n this.dateTimeFilterForm.removeControl('dateValueTo');\r\n if (this.timePredicate) {\r\n this.dateTimeFilterForm.removeControl('timeValueTo');\r\n }\r\n }\r\n\r\n private enableDateTimePredicates(): void {\r\n this.addValidators('dateValue', requiredValidators);\r\n if (this.timePredicate) {\r\n this.enableTimePredicate();\r\n }\r\n if (this.isCustomRangePredicate) {\r\n this.enableCustomRangePredicate();\r\n }\r\n }\r\n\r\n private disableDateTimePredicates(): void {\r\n this.removeValidators('dateValue');\r\n if (this.timePredicate) {\r\n this.disableTimePredicate();\r\n }\r\n if (this.isCustomRangePredicate) {\r\n this.disableCustomRangePredicate();\r\n }\r\n }\r\n\r\n private enableTimeSpanPredicate(): void {\r\n const timeSpanValue: number = this.propertyFilter?.criteria[0]?.filterableProperty?.selectedTimeSpanValue;\r\n this.dateTimeFilterForm.addControl('timeSpanValue', new FormControl(timeSpanValue || '', requiredValidators));\r\n const timeSpan: TimeSpan = this.propertyFilter?.criteria[0]?.filterableProperty?.selectedTimeSpan;\r\n this.dateTimeFilterForm.addControl('timeSpan', new FormControl(timeSpan || TimeSpan.Minutes));\r\n }\r\n\r\n private disableTimeSpanPredicate(): void {\r\n this.dateTimeFilterForm.removeControl('timeSpanValue');\r\n this.dateTimeFilterForm.removeControl('timeSpan');\r\n }\r\n\r\n private processSelectedOperator(operator: ComparisonOperator): void {\r\n this.isEmptyPredicate = ComparisonOperator.IsEmpty === operator;\r\n this.isTimeSpanPredicate = ComparisonOperator.TimeSpan === operator;\r\n this.isRelativePredicate = this.isRelativeDateTimeOperator(operator);\r\n }\r\n\r\n private getRelativeDateTimePredicate(operator: ComparisonOperator): PropertyPredicate {\r\n const predicate: PropertyPredicate = new PropertyPredicate();\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n switch (operator) {\r\n case ComparisonOperator.LastDay:\r\n predicate.value = this.getPastDate(oneDayMs);\r\n return predicate;\r\n case ComparisonOperator.LastWeek:\r\n predicate.value = this.getPastDate(oneWeekMs);\r\n return predicate;\r\n case ComparisonOperator.LastMonth:\r\n predicate.value = this.getPastDate(oneMonthMs);\r\n return predicate;\r\n case ComparisonOperator.LastYear:\r\n predicate.value = this.getPastDate(oneYearMs);\r\n return predicate;\r\n default:\r\n return predicate;\r\n }\r\n }\r\n\r\n private getTimeSpanPredicate(value: number, timeSpan: TimeSpan): PropertyPredicate {\r\n const predicate: PropertyPredicate = new PropertyPredicate();\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n if (value < 0) {\r\n return predicate;\r\n }\r\n switch (timeSpan) {\r\n case TimeSpan.Minutes:\r\n predicate.value = this.getPastDate(value * oneMinuteMs);\r\n return predicate;\r\n case TimeSpan.Hours:\r\n predicate.value = this.getPastDate(value * oneHourMs);\r\n return predicate;\r\n case TimeSpan.Days:\r\n predicate.value = this.getPastDate(value * oneDayMs);\r\n return predicate;\r\n case TimeSpan.Weeks:\r\n predicate.value = this.getPastDate(value * oneWeekMs);\r\n return predicate;\r\n case TimeSpan.Months:\r\n predicate.value = this.getPastDate(value * oneMonthMs);\r\n return predicate;\r\n case TimeSpan.Years:\r\n predicate.value = this.getPastDate(value * oneYearMs);\r\n return predicate;\r\n default:\r\n return predicate;\r\n }\r\n }\r\n\r\n private buildEqualsDateTimePredicates(): void {\r\n this.primaryPredicate = this.getFromDateTimePredicate();\r\n this.secondaryPredicate.operator = ComparisonOperator.LessThan;\r\n if (this.timePredicate) {\r\n this.secondaryPredicate.value = this.getCustomDate(this.primaryPredicate.value, oneMinuteMs);\r\n } else {\r\n this.secondaryPredicate.value = this.getCustomDate(this.primaryPredicate.value, oneDayMs);\r\n }\r\n }\r\n\r\n private getSinglePredicate(operator: ComparisonOperator): PropertyPredicate {\r\n let predicate: PropertyPredicate = new PropertyPredicate();\r\n switch (operator) {\r\n case ComparisonOperator.BeforeOrEqualTo:\r\n predicate = this.getFromDateTimePredicate(true);\r\n predicate.operator = ComparisonOperator.LessThan;\r\n return predicate;\r\n case ComparisonOperator.Before:\r\n predicate = this.getFromDateTimePredicate();\r\n predicate.operator = ComparisonOperator.LessThan;\r\n return predicate;\r\n case ComparisonOperator.After:\r\n predicate = this.getFromDateTimePredicate(true);\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n return predicate;\r\n case ComparisonOperator.AfterOrEqualTo:\r\n predicate = this.getFromDateTimePredicate();\r\n predicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n return predicate;\r\n default:\r\n return predicate;\r\n }\r\n }\r\n\r\n private getFromDateTimePredicate(adjustTime = false): PropertyPredicate {\r\n const fromPredicate: PropertyPredicate = new PropertyPredicate();\r\n fromPredicate.operator = ComparisonOperator.GreaterThanOrEqualTo;\r\n let fromValue: string = this.dateTimeFilterForm.value.dateValue;\r\n if (this.timePredicate) {\r\n fromValue += 'T' + this.dateTimeFilterForm.value.timeValue + (this.includeSeconds ? '' : ':00');\r\n if (adjustTime) {\r\n fromValue = this.getCustomDate(fromValue, oneMinuteMs);\r\n }\r\n } else {\r\n fromValue += 'T00:00:00';\r\n if (adjustTime) {\r\n fromValue = this.getCustomDate(fromValue, oneDayMs);\r\n }\r\n }\r\n fromPredicate.value = fromValue;\r\n return fromPredicate;\r\n }\r\n\r\n private getToDateTimePredicate(): PropertyPredicate {\r\n const toPredicate: PropertyPredicate = new PropertyPredicate();\r\n toPredicate.operator = ComparisonOperator.LessThan;\r\n let toValue: string = this.dateTimeFilterForm.value.dateValueTo;\r\n if (this.timePredicate) {\r\n toValue += 'T' + this.dateTimeFilterForm.value.timeValueTo + (this.includeSeconds ? '' : ':00');\r\n toValue = this.getCustomDate(toValue, oneMinuteMs);\r\n } else {\r\n toValue += 'T00:00:00';\r\n toValue = this.getCustomDate(toValue, oneDayMs);\r\n }\r\n toPredicate.value = toValue;\r\n return toPredicate;\r\n }\r\n\r\n private getcurrentTimePredicate(): PropertyPredicate {\r\n const predicate: PropertyPredicate = new PropertyPredicate();\r\n predicate.value = this.datePipe.transform(new Date(), dateTimeFormat);\r\n predicate.operator = ComparisonOperator.LessThanOrEqualTo;\r\n return predicate;\r\n }\r\n\r\n private getPastDate(timePeriod: number): string | null {\r\n const now: Date = new Date();\r\n const prevDate: Date = new Date(new Date().setTime(now.getTime() - timePeriod));\r\n return this.datePipe.transform(prevDate, dateTimeFormat);\r\n }\r\n\r\n private getCustomDate(baseDate: string, timePeriod: number): string {\r\n const date: Date = new Date(baseDate);\r\n const newDate: Date = new Date(new Date().setTime(date.getTime() + timePeriod));\r\n return this.datePipe.transform(newDate, dateTimeFormat) || baseDate;\r\n }\r\n\r\n private adjustTimeZone(utcDate: string): string {\r\n if (!utcDate) {\r\n return utcDate;\r\n }\r\n return utcDate + this.getUtcTimeZoneOffset(utcDate);\r\n }\r\n\r\n private getUtcTimeZoneOffset(utcDate: string): string {\r\n // Difference in minutes between the time on the local computer and Universal Coordinated Time\r\n const timeZoneOffset: number = new Date(utcDate).getTimezoneOffset();\r\n const decimalOffset: number = Math.abs(timeZoneOffset / 60);\r\n const offsetHours: number = Math.trunc(decimalOffset);\r\n const offsetMinutes: number = Math.round((decimalOffset - offsetHours) * 60);\r\n // Adding a leading 0 if needed\r\n const offsetHoursString: string = offsetHours.toLocaleString(undefined, {\r\n minimumIntegerDigits: 2,\r\n });\r\n const offsetMinutesString: string = offsetMinutes.toLocaleString(undefined, {\r\n minimumIntegerDigits: 2,\r\n });\r\n let utcOffset = '';\r\n if (timeZoneOffset > 0) {\r\n utcOffset = '-' + offsetHoursString + ':' + offsetMinutesString;\r\n } else if (timeZoneOffset < 0) {\r\n utcOffset = '+' + offsetHoursString + ':' + offsetMinutesString;\r\n }\r\n return utcOffset;\r\n }\r\n\r\n private storeSelectedValues(): void {\r\n this.primaryPredicate.filterableProperty.selectedOperator = this.dateTimeFilterForm.value.operator;\r\n this.primaryPredicate.filterableProperty.selectedValue = this.dateTimeFilterForm.value.dateValue;\r\n if (this.timePredicate) {\r\n this.primaryPredicate.filterableProperty.selectedValue += 'T' + this.dateTimeFilterForm.value.timeValue;\r\n }\r\n if (this.isCustomRangePredicate) {\r\n this.primaryPredicate.filterableProperty.selectedValueTo = this.dateTimeFilterForm.value.dateValueTo;\r\n if (this.timePredicate) {\r\n this.primaryPredicate.filterableProperty.selectedValueTo += 'T' + this.dateTimeFilterForm.value.timeValueTo;\r\n }\r\n }\r\n if (this.isTimeSpanPredicate) {\r\n this.primaryPredicate.filterableProperty.selectedTimeSpanValue = this.dateTimeFilterForm.value.timeSpanValue;\r\n this.primaryPredicate.filterableProperty.selectedTimeSpan = this.dateTimeFilterForm.value.timeSpan;\r\n }\r\n }\r\n\r\n private getStoredDateTimeValue(): string {\r\n return this.propertyFilter?.criteria[0]?.filterableProperty?.selectedValue || '';\r\n }\r\n\r\n private getStoredDateTimeValueTo(): string {\r\n return this.propertyFilter?.criteria[0]?.filterableProperty?.selectedValueTo || '';\r\n }\r\n\r\n private parseDateValue(dateTime: string): string {\r\n if (dateTime) {\r\n return dateTime.substring(0, 10);\r\n }\r\n return '';\r\n }\r\n\r\n private parseTimeValue(dateTime: string): string {\r\n if (!!dateTime && dateTime.indexOf('T') > 0) {\r\n return dateTime.substring(dateTime.indexOf('T') + 1);\r\n }\r\n return '';\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"dateTimeFilterForm\"\r\n [valid]=\"dateTimeFilterForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <hermes-native-select-container class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"operator\">\r\n @for (operator of comparisonOperators; track operator) {\r\n <option [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n @if (!noDateTimeInputNeeded()) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n @if (isCustomRangePredicate) {\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.fromLabel }}\r\n </label>\r\n }\r\n <input\r\n type=\"date\"\r\n pattern=\"^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$\"\r\n formControlName=\"dateValue\"\r\n placeholder=\"{{ filterStrings.dateFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.dateValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n </div>\r\n }\r\n @if (timePredicate) {\r\n <div class=\"flex-end-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"time\"\r\n [step]=\"includeSeconds ? 1 : 60\"\r\n pattern=\"^(0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):?([0-5][0-9])?$\"\r\n formControlName=\"timeValue\"\r\n placeholder=\"{{ filterStrings.timeFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.timeValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n <button\r\n class=\"close ml-half\"\r\n data-test-id=\"close-button\"\r\n [attr.aria-label]=\"filterStrings.removeTimeFilterAriaLabel\"\r\n (click)=\"disableTimePredicate()\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n }\r\n @if (isCustomRangePredicate) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.toLabel }}\r\n </label>\r\n <input\r\n type=\"date\"\r\n pattern=\"^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$\"\r\n formControlName=\"dateValueTo\"\r\n placeholder=\"{{ filterStrings.dateFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.dateValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n </div>\r\n }\r\n @if (timePredicate && isCustomRangePredicate) {\r\n <div class=\"flex-end-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"time\"\r\n [step]=\"includeSeconds ? 1 : 60\"\r\n pattern=\"^(0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):?([0-5][0-9])?$\"\r\n formControlName=\"timeValueTo\"\r\n placeholder=\"{{ filterStrings.timeFormat }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.timeValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n <button\r\n class=\"close ml-half\"\r\n data-test-id=\"close-button\"\r\n [attr.aria-label]=\"filterStrings.removeTimeFilterAriaLabel\"\r\n (click)=\"disableTimePredicate()\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n }\r\n @if (!timePredicate && !noDateTimeInputNeeded()) {\r\n <button\r\n class=\"btn btn-sm btn-link mt-half\"\r\n data-test-id=\"add-button\"\r\n [attr.aria-label]=\"filterStrings.addTimeFilter\"\r\n (click)=\"enableTimePredicate()\"\r\n >\r\n <hermes-icon shape=\"plus\" class=\"is-solid\"></hermes-icon>\r\n {{ filterStrings.addTimeFilter }}\r\n </button>\r\n }\r\n @if (isTimeSpanPredicate) {\r\n <div class=\"flex-end-container\">\r\n <hermes-input-container>\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.timeSpanInputLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n pattern=\"^[0-9]+$\"\r\n formControlName=\"timeSpanValue\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.integerValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n <hermes-native-select-container class=\"ml-half\">\r\n <select hermesNativeSelect formControlName=\"timeSpan\" [attr.aria-label]=\"filterStrings.timeSpanAriaLabel\">\r\n @for (timeSpan of timeSpans; track timeSpan) {\r\n <option [ngValue]=\"timeSpan\">\r\n {{ filterStrings.getTimeSpanDisplayName(timeSpan) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n </div>\r\n }\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, LogicalOperator } from '../model/datagrid-filters.enums';\r\nimport {\r\n EnumPropertyData,\r\n EnumPropertyDefinition,\r\n PropertyFilter,\r\n PropertyPredicate,\r\n} from '../model/datagrid-filters.interfaces';\r\n\r\n/**\r\n * Enum filter component collects filtering criteria for enum based properties\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-enum-filter',\r\n standalone: false,\r\n templateUrl: 'enum-filter.component.html',\r\n styleUrls: ['enum-filter.component.scss', '../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EnumFilterComponent implements OnInit, OnChanges {\r\n /**\r\n * Property used for filtering\r\n */\r\n @Input() filterProperty: EnumPropertyDefinition;\r\n\r\n /**\r\n * In case the component is used for filter editing\r\n */\r\n @Input() propertyFilter: PropertyFilter;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n enumFilterForm: FormGroup;\r\n optionsData: EnumPropertyData[] = [];\r\n filteredOptions: { data: EnumPropertyData; index: number }[] = [];\r\n enumOperators = [ComparisonOperator.DoesNotEqual, ComparisonOperator.Equals];\r\n isProcessing = false;\r\n searchResultsLen = 0;\r\n selectedCount = 0;\r\n\r\n readonly #maxInitiallyShownItems = 50;\r\n readonly #loadingTimeoutDelayMs = 50;\r\n #maxShownItems = this.#maxInitiallyShownItems;\r\n #selectedFilterCriteria = new PropertyFilter();\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n public filterStrings: DatagridFiltersStrings,\r\n private cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n get additionalOperators(): boolean {\r\n return this.filterProperty.supportedOperators?.length === 2;\r\n }\r\n\r\n get optionsFormArray(): FormArray {\r\n return this.enumFilterForm?.controls.options as FormArray;\r\n }\r\n\r\n trackByFilteredOption(_index: number, item: { data: EnumPropertyData; index: number }): number {\r\n return item.index;\r\n }\r\n\r\n trackByOperator(_index: number, operator: ComparisonOperator): ComparisonOperator {\r\n return operator;\r\n }\r\n\r\n ngOnInit() {\r\n this.enumFilterForm = this.formBuilder.group({\r\n enumOperator: [this.additionalOperators ? ComparisonOperator.DoesNotEqual : ComparisonOperator.Equals],\r\n searchTerm: [''],\r\n selectAll: false,\r\n options: new FormArray([], this.selectedOptionsValidator()),\r\n singleSelectOption: [],\r\n });\r\n\r\n this.enumFilterForm.get('enumOperator')?.valueChanges.subscribe((op: ComparisonOperator) => {\r\n this.#selectedFilterCriteria.operator =\r\n op === ComparisonOperator.Equals ? LogicalOperator.Or : LogicalOperator.And;\r\n });\r\n\r\n this.enumFilterForm\r\n .get('searchTerm')\r\n ?.valueChanges.pipe(debounceTime(200), distinctUntilChanged())\r\n .subscribe((term: string) => {\r\n this.runAsyncOperation(() => this.performSearch(term));\r\n });\r\n\r\n this.runAsyncOperation(() => this.initializeFilter());\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.enumFilterForm) {\r\n this.runAsyncOperation(() => {\r\n this.initializeFilter();\r\n this.enumFilterForm.get('searchTerm')?.setValue('', { emitEvent: false });\r\n this.performSearch('');\r\n });\r\n }\r\n }\r\n\r\n loadMore(): void {\r\n this.runAsyncOperation(() => {\r\n this.#maxShownItems += 100;\r\n this.performSearch(this.enumFilterForm.get('searchTerm')?.value);\r\n });\r\n }\r\n\r\n onSelectAllChange(): void {\r\n this.runAsyncOperation(() => {\r\n const selectAllValue = this.enumFilterForm.get('selectAll')?.value;\r\n const visibleIndices = new Set(this.filteredOptions.map(opt => opt.index));\r\n const searching = this.searchResultsLen === this.optionsData.length;\r\n\r\n this.optionsFormArray.controls.forEach((control: AbstractControl, index: number) => {\r\n if ((searching || visibleIndices.has(index)) && control.value !== selectAllValue) {\r\n control.setValue(selectAllValue, { emitEvent: false });\r\n }\r\n });\r\n\r\n this.updateSelectedCount();\r\n this.enumFilterForm.controls.options.updateValueAndValidity();\r\n });\r\n }\r\n\r\n onOptionChange(): void {\r\n this.updateSelectedCount();\r\n\r\n const allSelected = this.selectedCount === this.optionsFormArray.length;\r\n const selectAllControl = this.enumFilterForm.get('selectAll');\r\n\r\n if (selectAllControl?.value !== allSelected) {\r\n selectAllControl?.setValue(allSelected, { emitEvent: false });\r\n }\r\n\r\n this.enumFilterForm.controls.options.updateValueAndValidity();\r\n }\r\n\r\n clearSearch() {\r\n this.enumFilterForm.get('searchTerm')?.setValue('');\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n const propertyPredicates: PropertyPredicate[] = [];\r\n if (this.filterProperty.singleSelect) {\r\n propertyPredicates.push(this.createEnumPropertyPredicate(this.enumFilterForm.value.singleSelectOption));\r\n } else {\r\n const selectedOptionsKeys: string[] = this.enumFilterForm.value.options\r\n .map((checked: boolean, i: number) => (checked ? this.optionsData[i].key : null))\r\n .filter((v: string | null) => v !== null);\r\n selectedOptionsKeys.forEach(value => {\r\n propertyPredicates.push(this.createEnumPropertyPredicate(value));\r\n });\r\n }\r\n this.#selectedFilterCriteria.criteria = propertyPredicates;\r\n this.filterCriteriaChange.emit(this.#selectedFilterCriteria);\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n private runAsyncOperation(action: () => void): void {\r\n const isHeavyLoad = this.optionsData.length > this.#maxInitiallyShownItems;\r\n\r\n if (isHeavyLoad) {\r\n this.isProcessing = true;\r\n this.cdr.markForCheck();\r\n\r\n setTimeout(() => {\r\n action();\r\n this.isProcessing = false;\r\n this.cdr.markForCheck();\r\n }, this.#loadingTimeoutDelayMs);\r\n } else {\r\n action();\r\n }\r\n }\r\n\r\n private initializeFilter(): void {\r\n this.updateData();\r\n this.updateForm();\r\n this.performSearch('');\r\n\r\n let initialOp = ComparisonOperator.Equals;\r\n if (this.additionalOperators) {\r\n initialOp =\r\n this.propertyFilter?.operator === LogicalOperator.Or\r\n ? ComparisonOperator.Equals\r\n : ComparisonOperator.DoesNotEqual;\r\n }\r\n this.enumFilterForm.controls.enumOperator.setValue(initialOp, { emitEvent: false });\r\n\r\n this.updateSelectedCount();\r\n }\r\n\r\n private performSearch(term = ''): void {\r\n const normalizedTerm = term.toLowerCase();\r\n\r\n const allMatches = this.optionsData\r\n .map((data, index) => ({ data, index }))\r\n .filter(\r\n item =>\r\n !normalizedTerm ||\r\n item.data.value.toLowerCase().includes(normalizedTerm) ||\r\n item.data.key.toLowerCase().includes(normalizedTerm)\r\n );\r\n\r\n this.searchResultsLen = allMatches.length;\r\n this.filteredOptions = allMatches.slice(0, this.#maxShownItems);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n private updateSelectedCount(): void {\r\n this.selectedCount = this.optionsFormArray.controls.reduce(\r\n (acc: number, control: AbstractControl) => acc + (control.value ? 1 : 0),\r\n 0\r\n );\r\n }\r\n\r\n private selectedOptionsValidator(): ValidatorFn {\r\n const validator: ValidatorFn = () =>\r\n this.filterProperty.singleSelect || this.selectedCount > 0 ? null : { required: true };\r\n return validator;\r\n }\r\n\r\n private updateData(): void {\r\n this.optionsData = [];\r\n let enumValues: Map<string, string>;\r\n if (this.propertyFilter && this.propertyFilter.criteria.length) {\r\n enumValues = (this.propertyFilter.criteria[0].filterableProperty as EnumPropertyDefinition).values;\r\n } else {\r\n enumValues = this.filterProperty.values;\r\n }\r\n enumValues.forEach((v, k) => {\r\n this.optionsData.push({ key: k, value: v });\r\n });\r\n if (this.additionalOperators) {\r\n this.enumFilterForm?.controls.enumOperator.setValue(\r\n this.propertyFilter?.operator === LogicalOperator.Or\r\n ? ComparisonOperator.Equals\r\n : ComparisonOperator.DoesNotEqual\r\n );\r\n } else {\r\n this.enumFilterForm?.controls.enumOperator.setValue(ComparisonOperator.Equals);\r\n }\r\n }\r\n\r\n private updateForm(): void {\r\n if (this.enumFilterForm) {\r\n this.optionsFormArray.clear();\r\n this.selectAll(false);\r\n const selectedOptions: any[] = [];\r\n if (this.propertyFilter) {\r\n this.propertyFilter.criteria.forEach(predicate => {\r\n selectedOptions.push(predicate.value);\r\n });\r\n }\r\n this.optionsData.forEach(option =>\r\n this.optionsFormArray.push(new FormControl(selectedOptions.includes(option.key)))\r\n );\r\n if (selectedOptions.length === this.optionsData.length) {\r\n this.selectAll(true);\r\n }\r\n if (this.filterProperty.singleSelect) {\r\n const singleSelectForm = this.enumFilterForm.get('singleSelectOption');\r\n if (this.propertyFilter) {\r\n singleSelectForm?.setValue(this.propertyFilter.criteria[0].value);\r\n } else {\r\n singleSelectForm?.setValue(this.filterProperty.values.keys().next().value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private selectAll(value: boolean): void {\r\n this.enumFilterForm.patchValue({\r\n selectAll: value,\r\n });\r\n }\r\n\r\n private createEnumPropertyPredicate(value: string): PropertyPredicate {\r\n const predicate = new PropertyPredicate();\r\n predicate.filterableProperty = this.filterProperty;\r\n predicate.operator = this.enumFilterForm.controls.enumOperator.value;\r\n predicate.value = value;\r\n return predicate;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"enumFilterForm\"\r\n [valid]=\"enumFilterForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <div class=\"enum-filter-wrapper\">\r\n <hermes-native-select-container *ngIf=\"additionalOperators\" class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"enumOperator\">\r\n <option *ngFor=\"let operator of enumOperators; trackBy: trackByOperator\" [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n\r\n <label class=\"hermes-control-label text-left mt-compact\">\r\n {{ filterStrings.valueLabel }}\r\n </label>\r\n\r\n <hermes-input-container *ngIf=\"filterProperty.searchable\" hermes-layout=\"m-t:xs\">\r\n <label class=\"hermes-sr-only\">{{ filterStrings.searchOptions }}</label>\r\n <input hermesInput type=\"text\" [placeholder]=\"filterStrings.searchPlaceholder\" formControlName=\"searchTerm\" />\r\n <hermes-icon shape=\"search\" hermesInputPrefix></hermes-icon>\r\n <hermes-icon\r\n *ngIf=\"enumFilterForm.get('searchTerm')?.value\"\r\n shape=\"window-close\"\r\n hermesInputSuffix\r\n (click)=\"clearSearch()\"\r\n ></hermes-icon>\r\n <hermes-control-helper *ngIf=\"filteredOptions.length\">\r\n {{\r\n filterStrings.formatString(filterStrings.showingFormat, [\r\n filteredOptions.length.toString(),\r\n searchResultsLen.toString(),\r\n ])\r\n }}\r\n </hermes-control-helper>\r\n <hermes-control-helper *ngIf=\"filteredOptions.length === 0 && enumFilterForm.get('searchTerm')?.value\">\r\n {{ filterStrings.noValuesFound }}\r\n </hermes-control-helper>\r\n </hermes-input-container>\r\n\r\n <div *ngIf=\"filteredOptions.length\" hermes-layout=\"m-t:xs m-l:xxs\" class=\"selection-counter\">\r\n <span *ngIf=\"!filterProperty.singleSelect\" class=\"hermes-subtext\" hermes-text=\"body medium\">\r\n {{ filterStrings.formatString(filterStrings.elementsSelectedFormat, [selectedCount.toString()]) }}\r\n </span>\r\n </div>\r\n\r\n <div *ngIf=\"isProcessing\" class=\"loading-overlay\">\r\n <div class=\"loading-content\">\r\n <hermes-spinner hermesMedium>{{ filterStrings.loading }}</hermes-spinner>\r\n </div>\r\n </div>\r\n\r\n <div hermes-layout=\"m-t:xs\">\r\n <hermes-checkbox-container *ngIf=\"!filterProperty.singleSelect\" class=\"enum-options\">\r\n <hermes-checkbox-wrapper *ngIf=\"filterProperty.enableSelectAll\" hermes-layout=\"m-b:xs\">\r\n <input type=\"checkbox\" hermesCheckbox formControlName=\"selectAll\" (change)=\"onSelectAllChange()\" />\r\n <label>\r\n {{ enumFilterForm.get('searchTerm')?.value ? filterStrings.allSearchResults : filterStrings.selectAll }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n\r\n <hermes-checkbox-wrapper *ngFor=\"let item of filteredOptions; trackBy: trackByFilteredOption\">\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n [formControl]=\"$any(optionsFormArray.at(item.index))\"\r\n (change)=\"onOptionChange()\"\r\n />\r\n <label>\r\n {{ item.data.value }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n\r\n <hermes-radio-container *ngIf=\"filterProperty.singleSelect\" class=\"enum-options\">\r\n <hermes-radio-wrapper *ngFor=\"let option of filteredOptions; trackBy: trackByFilteredOption\">\r\n <input type=\"radio\" hermesRadio formControlName=\"singleSelectOption\" [value]=\"option.data.key\" />\r\n <label>\r\n {{ option.data.value }}\r\n </label>\r\n </hermes-radio-wrapper>\r\n </hermes-radio-container>\r\n </div>\r\n\r\n <button *ngIf=\"filteredOptions.length < searchResultsLen\" class=\"btn btn-link\" (click)=\"loadMore()\">\r\n {{ filterStrings.loadMore }}\r\n </button>\r\n </div>\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { AfterViewInit, Directive, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[filterPopoverReposition]',\r\n standalone: false,\r\n})\r\n/**\r\n * A directive that fixes the position of the clarity popover/signpost, which is opened\r\n * when adding/editing filters. The popover is positioned bottom middle relative to\r\n * the corresponding trigger button. The width of the popover is based on the longest\r\n * property name. This means that some parts of the popover may not be visible, because\r\n * they will get out of the borders of the parent datagrid component.\r\n * To prevent this, the directive modifies the `translateX` property for the `transform` style,\r\n * in order to ensure that the popover is positioned within the boundaries of the datagrid.\r\n */\r\nexport class FilterPopoverRepositionDirective implements AfterViewInit {\r\n // Minimal `translateX` property of transform style of the popover that\r\n // ensures the popover is aligned on the left boundaries of the datagrid.\r\n private readonly menuMinTranslateX = 1;\r\n\r\n // Selector of the datagrid filter container. It has the same width as the datagrid.\r\n private readonly filterContainerSelector = '.filter-container';\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n ngAfterViewInit() {\r\n const computedStyle = getComputedStyle(this.elementRef.nativeElement);\r\n const matrix = new DOMMatrix(computedStyle.transform);\r\n\r\n const originalTranslateX = matrix.m41;\r\n const translateY = matrix.m42;\r\n\r\n const parentElement = this.elementRef.nativeElement.closest(this.filterContainerSelector);\r\n if (!parentElement) {\r\n return;\r\n }\r\n\r\n const popoverOriginalEndX = originalTranslateX + this.elementRef.nativeElement.offsetWidth;\r\n\r\n // If the popover is within the datagrid boundaries, do nothing.\r\n if (originalTranslateX > this.menuMinTranslateX && popoverOriginalEndX < parentElement.offsetWidth) {\r\n return;\r\n }\r\n\r\n const newTranslateX = Math.max(\r\n this.menuMinTranslateX,\r\n Math.min(originalTranslateX, originalTranslateX - (popoverOriginalEndX - parentElement.offsetWidth))\r\n );\r\n\r\n // Override default `translateX` property\r\n this.elementRef.nativeElement.style.transform = `translateX(${newTranslateX}px) translateY(${translateY}px)`;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, LogicalOperator, Unit } from '../model/datagrid-filters.enums';\r\nimport {\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n PropertyPredicate,\r\n StringPropertyDefinition,\r\n} from '../model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst unmericPatternRegex = '^-?[0-9]+$';\r\n\r\n/**\r\n * General filter component collects filtering criteria for string and numeric based properties\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-general-filter',\r\n standalone: false,\r\n templateUrl: 'general-filter.component.html',\r\n styleUrls: ['../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GeneralFilterComponent implements OnInit, OnChanges {\r\n readonly logicalOperators: LogicalOperator[];\r\n readonly isEmptyOperator: ComparisonOperator = ComparisonOperator.IsEmpty;\r\n\r\n generalFilterForm: FormGroup;\r\n comparisonOperators: ComparisonOperator[];\r\n units: Unit[] = [];\r\n isNumericUnitProperty = false;\r\n additionalPredicate = false;\r\n isEmptyPrimaryPredicate = false;\r\n isEmptySecondaryPredicate = false;\r\n /**\r\n * In case the component is used for filter editing\r\n */\r\n @Input() propertyFilter: PropertyFilter;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n protected LogicalOperator = LogicalOperator;\r\n private selectedFilterCriteria: PropertyFilter = new PropertyFilter();\r\n private primaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n private secondaryPredicate: PropertyPredicate = new PropertyPredicate();\r\n /**\r\n * Property used for filtering\r\n */\r\n #filterProperty: StringPropertyDefinition | NumericPropertyDefinition;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n public filterStrings: DatagridFiltersStrings\r\n ) {\r\n this.logicalOperators = [LogicalOperator.And, LogicalOperator.Or];\r\n }\r\n\r\n @Input()\r\n get filterProperty(): StringPropertyDefinition | NumericPropertyDefinition {\r\n return this.#filterProperty;\r\n }\r\n set filterProperty(filterProperty: StringPropertyDefinition | NumericPropertyDefinition) {\r\n this.#filterProperty = filterProperty;\r\n this.primaryPredicate.filterableProperty = filterProperty;\r\n this.secondaryPredicate.filterableProperty = filterProperty;\r\n }\r\n\r\n ngOnInit() {\r\n this.isNumericUnitProperty = this.isNumericUnitFilterProperty();\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n this.units = this.applicableUnits();\r\n\r\n // To handle edit mode with operator IsEmpty\r\n let validators: ValidatorFn[] = [];\r\n if (this.propertyFilter?.criteria[0]?.operator === this.isEmptyOperator) {\r\n this.isEmptyPrimaryPredicate = true;\r\n } else {\r\n validators = this.initValidators();\r\n }\r\n\r\n this.generalFilterForm = this.formBuilder.group({\r\n primaryOperator: [this.initOperator(0)],\r\n primaryValue: [this.initValue(0), validators],\r\n primaryUnit: [this.initUnit(0)],\r\n logicalOperator: [this.propertyFilter?.operator || LogicalOperator.And],\r\n });\r\n\r\n this.generalFilterForm.get('primaryOperator')?.valueChanges.subscribe((operator: ComparisonOperator) => {\r\n if (operator === this.isEmptyOperator) {\r\n this.removeValidators('primaryValue');\r\n this.isEmptyPrimaryPredicate = true;\r\n this.selectLogicalOperator(LogicalOperator.Or);\r\n } else {\r\n this.addValidators('primaryValue', validators);\r\n this.isEmptyPrimaryPredicate = false;\r\n }\r\n });\r\n\r\n if (this.propertyFilter?.criteria?.length === 2) {\r\n this.enableSecondaryPredicate();\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n this.isNumericUnitProperty = this.isNumericUnitFilterProperty();\r\n this.comparisonOperators = this.filterProperty.getOperators();\r\n // Update property units\r\n if (this.isNumericUnitProperty && this.generalFilterForm) {\r\n this.units = this.applicableUnits();\r\n this.generalFilterForm.patchValue({\r\n primaryUnit: this.initUnit(0),\r\n });\r\n if (this.additionalPredicate) {\r\n this.generalFilterForm.patchValue({\r\n secondaryUnit: this.initUnit(1),\r\n });\r\n }\r\n }\r\n }\r\n\r\n onInputKeyPress(event: KeyboardEvent): void {\r\n if (event.key === enterKey) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n if (this.generalFilterForm.valid) {\r\n this.onApplyButtonClick();\r\n }\r\n }\r\n }\r\n\r\n enableSecondaryPredicate(): void {\r\n this.additionalPredicate = true;\r\n // To handle edit mode with operator IsEmpty\r\n let validators: ValidatorFn[] = [];\r\n if (this.propertyFilter?.criteria[1]?.operator === this.isEmptyOperator) {\r\n this.isEmptySecondaryPredicate = true;\r\n } else {\r\n validators = this.initValidators();\r\n }\r\n this.generalFilterForm.addControl('secondaryOperator', new FormControl(this.initOperator(1)));\r\n this.generalFilterForm.addControl('secondaryValue', new FormControl(this.initValue(1), validators));\r\n this.generalFilterForm.addControl('secondaryUnit', new FormControl(this.initUnit(1)));\r\n this.generalFilterForm.get('secondaryOperator')?.valueChanges.subscribe((operator: ComparisonOperator) => {\r\n if (operator === this.isEmptyOperator) {\r\n this.removeValidators('secondaryValue');\r\n this.isEmptySecondaryPredicate = true;\r\n this.selectLogicalOperator(LogicalOperator.Or);\r\n } else {\r\n this.addValidators('secondaryValue', validators);\r\n this.isEmptySecondaryPredicate = false;\r\n }\r\n });\r\n }\r\n\r\n disableSecondaryPredicate(): void {\r\n this.additionalPredicate = false;\r\n this.generalFilterForm.removeControl('secondaryOperator');\r\n this.generalFilterForm.removeControl('secondaryValue');\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n this.primaryPredicate.operator = this.generalFilterForm.value.primaryOperator;\r\n this.primaryPredicate.value = this.generalFilterForm.value.primaryValue;\r\n if (this.isNumericUnitProperty) {\r\n // Selected value and unit are stored, in order to be able to be rendered in edit mode.\r\n // They are stored in an array, because there are up to two conditions for a single property.\r\n this.primaryPredicate.filterableProperty.selectedValue = [this.generalFilterForm.value.primaryValue];\r\n this.primaryPredicate.filterableProperty.selectedUnit = [this.generalFilterForm.value.primaryUnit];\r\n this.primaryPredicate.value = this.convertValue(\r\n this.generalFilterForm.value.primaryValue,\r\n this.generalFilterForm.value.primaryUnit\r\n );\r\n }\r\n this.selectedFilterCriteria.criteria = [this.primaryPredicate];\r\n this.selectedFilterCriteria.operator =\r\n this.filterProperty.logicalOperator ?? this.generalFilterForm.value.logicalOperator;\r\n if (this.additionalPredicate) {\r\n this.secondaryPredicate.operator = this.generalFilterForm.value.secondaryOperator;\r\n this.secondaryPredicate.value = this.generalFilterForm.value.secondaryValue;\r\n if (this.isNumericUnitProperty) {\r\n this.secondaryPredicate.filterableProperty.selectedValue.push(this.generalFilterForm.value.secondaryValue);\r\n this.secondaryPredicate.filterableProperty.selectedUnit.push(this.generalFilterForm.value.secondaryUnit);\r\n this.secondaryPredicate.value = this.convertValue(\r\n this.generalFilterForm.value.secondaryValue,\r\n this.generalFilterForm.value.secondaryUnit\r\n );\r\n }\r\n this.selectedFilterCriteria.criteria.push(this.secondaryPredicate);\r\n }\r\n this.filterCriteriaChange.emit(this.selectedFilterCriteria);\r\n }\r\n\r\n onCancelButtonClick(): void {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n private addValidators(formControlName: string, validators: ValidatorFn[]): void {\r\n this.generalFilterForm.get(formControlName)?.addValidators(validators);\r\n this.generalFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private removeValidators(formControlName: string): void {\r\n this.generalFilterForm.get(formControlName)?.clearValidators();\r\n this.generalFilterForm.get(formControlName)?.updateValueAndValidity();\r\n }\r\n\r\n private selectLogicalOperator(operator: LogicalOperator): void {\r\n this.generalFilterForm.patchValue({\r\n logicalOperator: operator,\r\n });\r\n }\r\n\r\n private initOperator(index: number): ComparisonOperator {\r\n const selectedOperator: ComparisonOperator = this.propertyFilter?.criteria[index]?.operator;\r\n const defaultOperator: ComparisonOperator =\r\n this.filterProperty instanceof StringPropertyDefinition ? ComparisonOperator.Contains : ComparisonOperator.Equals;\r\n return selectedOperator || defaultOperator;\r\n }\r\n\r\n private initValidators(): ValidatorFn[] {\r\n const validators: ValidatorFn[] = [Validators.required];\r\n if (this.filterProperty instanceof NumericPropertyDefinition) {\r\n validators.push(Validators.pattern(unmericPatternRegex));\r\n }\r\n return validators;\r\n }\r\n\r\n private isNumericUnitFilterProperty(): boolean {\r\n return this.filterProperty instanceof NumericPropertyDefinition && this.filterProperty.unit !== undefined;\r\n }\r\n\r\n private applicableUnits(): Unit[] {\r\n if (this.isNumericUnitProperty) {\r\n const propertyUnit: Unit = (this.filterProperty as NumericPropertyDefinition).unit;\r\n switch (propertyUnit) {\r\n case Unit.Byte:\r\n return [Unit.Byte, Unit.KB, Unit.MB, Unit.GB, Unit.TB];\r\n case Unit.KB:\r\n return [Unit.KB, Unit.MB, Unit.GB, Unit.TB];\r\n case Unit.MB:\r\n return [Unit.MB, Unit.GB, Unit.TB];\r\n case Unit.GB:\r\n return [Unit.GB, Unit.TB];\r\n case Unit.TB:\r\n return [Unit.TB];\r\n case Unit.BytePS:\r\n return [Unit.BytePS, Unit.KBytePS, Unit.MBytePS, Unit.GBytePS];\r\n case Unit.KBytePS:\r\n return [Unit.KBytePS, Unit.MBytePS, Unit.GBytePS];\r\n case Unit.MBytePS:\r\n return [Unit.MBytePS, Unit.GBytePS];\r\n case Unit.GBytePS:\r\n return [Unit.GBytePS];\r\n case Unit.BitPS:\r\n return [Unit.BitPS, Unit.KBitPS, Unit.MBitPS, Unit.GBitPS];\r\n case Unit.KBitPS:\r\n return [Unit.KBitPS, Unit.MBitPS, Unit.GBitPS];\r\n case Unit.MBitPS:\r\n return [Unit.MBitPS, Unit.GBitPS];\r\n case Unit.GBitPS:\r\n return [Unit.GBitPS];\r\n case Unit.HZ:\r\n return [Unit.HZ, Unit.KHZ, Unit.MHZ, Unit.GHZ];\r\n case Unit.KHZ:\r\n return [Unit.KHZ, Unit.MHZ, Unit.GHZ];\r\n case Unit.MHZ:\r\n return [Unit.MHZ, Unit.GHZ];\r\n case Unit.GHZ:\r\n return [Unit.GHZ];\r\n default:\r\n return [];\r\n }\r\n }\r\n return [];\r\n }\r\n\r\n private initUnit(index: number): Unit {\r\n if (this.isNumericUnitProperty) {\r\n if (this.propertyFilter?.criteria[index]) {\r\n return this.getSelectedUnit(index);\r\n } else {\r\n return this.units.length > 0 ? this.units[0] : Unit.MB;\r\n }\r\n }\r\n return Unit.MB;\r\n }\r\n\r\n private getSelectedUnit(index: number): Unit {\r\n const selectedUnit: Unit = this.propertyFilter.criteria[index].filterableProperty.selectedUnit[index] as Unit;\r\n return selectedUnit;\r\n }\r\n\r\n private initValue(index: number): any {\r\n if (this.isNumericUnitProperty) {\r\n return this.propertyFilter?.criteria[index]?.filterableProperty.selectedValue[index] || '';\r\n } else {\r\n return this.propertyFilter?.criteria[index]?.value || '';\r\n }\r\n }\r\n\r\n private convertValue(value: number, sourceUnit: Unit): number {\r\n if (this.isNumericUnitProperty) {\r\n const targetUnit = (this.filterProperty as NumericPropertyDefinition).unit;\r\n if (targetUnit === sourceUnit) {\r\n return value;\r\n }\r\n switch (targetUnit) {\r\n case Unit.Byte:\r\n switch (sourceUnit) {\r\n case Unit.KB:\r\n return value * 1024;\r\n case Unit.MB:\r\n return value * 1024 * 1024;\r\n case Unit.GB:\r\n return value * 1024 * 1024 * 1024;\r\n case Unit.TB:\r\n return value * 1024 * 1024 * 1024 * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.KB:\r\n switch (sourceUnit) {\r\n case Unit.MB:\r\n return value * 1024;\r\n case Unit.GB:\r\n return value * 1024 * 1024;\r\n case Unit.TB:\r\n return value * 1024 * 1024 * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.MB:\r\n switch (sourceUnit) {\r\n case Unit.GB:\r\n return value * 1024;\r\n case Unit.TB:\r\n return value * 1024 * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.GB:\r\n switch (sourceUnit) {\r\n case Unit.TB:\r\n return value * 1024;\r\n default:\r\n return value;\r\n }\r\n case Unit.HZ:\r\n switch (sourceUnit) {\r\n case Unit.KHZ:\r\n return value * 1000;\r\n case Unit.MHZ:\r\n return value * 1000 * 1000;\r\n case Unit.GHZ:\r\n return value * 1000 * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.KHZ:\r\n switch (sourceUnit) {\r\n case Unit.MHZ:\r\n return value * 1000;\r\n case Unit.GHZ:\r\n return value * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.MHZ:\r\n switch (sourceUnit) {\r\n case Unit.GHZ:\r\n return value * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.BytePS:\r\n switch (sourceUnit) {\r\n case Unit.KBytePS:\r\n return value * 1000;\r\n case Unit.MBytePS:\r\n return value * 1000 * 1000;\r\n case Unit.GBytePS:\r\n return value * 1000 * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.KBytePS:\r\n switch (sourceUnit) {\r\n case Unit.MBytePS:\r\n return value * 1000;\r\n case Unit.GBytePS:\r\n return value * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.MBytePS:\r\n switch (sourceUnit) {\r\n case Unit.GBytePS:\r\n return value * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.BitPS:\r\n switch (sourceUnit) {\r\n case Unit.KBitPS:\r\n return value * 1000;\r\n case Unit.MBitPS:\r\n return value * 1000 * 1000;\r\n case Unit.GBitPS:\r\n return value * 1000 * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.KBitPS:\r\n switch (sourceUnit) {\r\n case Unit.MBitPS:\r\n return value * 1000;\r\n case Unit.GBitPS:\r\n return value * 1000 * 1000;\r\n default:\r\n return value;\r\n }\r\n case Unit.MBitPS:\r\n switch (sourceUnit) {\r\n case Unit.GBitPS:\r\n return value * 1000;\r\n default:\r\n return value;\r\n }\r\n default:\r\n return value;\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"generalFilterForm\"\r\n [valid]=\"generalFilterForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <hermes-native-select-container class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"primaryOperator\">\r\n @for (operator of comparisonOperators; track operator) {\r\n <option [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n @if (!isEmptyPrimaryPredicate) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"text\"\r\n formControlName=\"primaryValue\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.integerValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n @if (isNumericUnitProperty) {\r\n <hermes-native-select-container class=\"ml-half\">\r\n <select hermesNativeSelect formControlName=\"primaryUnit\" [attr.aria-label]=\"filterStrings.unitAriaLabel\">\r\n @for (unit of units; track unit) {\r\n <option [ngValue]=\"unit\">\r\n {{ filterStrings.getUnitDisplayName(unit) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n }\r\n </div>\r\n }\r\n @if (!additionalPredicate && !filterProperty.singleCondition) {\r\n <button\r\n class=\"btn btn-sm btn-link mt-half\"\r\n data-test-id=\"add-button\"\r\n [attr.aria-label]=\"filterStrings.addCondition\"\r\n (click)=\"enableSecondaryPredicate()\"\r\n >\r\n <hermes-icon shape=\"plus\" class=\"is-solid\"></hermes-icon>\r\n {{ filterStrings.addCondition }}\r\n </button>\r\n }\r\n @if (additionalPredicate) {\r\n <div>\r\n @if (filterProperty.logicalOperator == undefined) {\r\n <hermes-radio-container hermesInline class=\"mt-compact\">\r\n <hermes-radio-wrapper>\r\n <input\r\n type=\"radio\"\r\n hermesRadio\r\n formControlName=\"logicalOperator\"\r\n [value]=\"logicalOperators[0]\"\r\n [attr.disabled]=\"isEmptyPrimaryPredicate || isEmptySecondaryPredicate ? 'disabled' : null\"\r\n />\r\n <label> {{ filterStrings.getConjoinerDisplayName(logicalOperators[0]) }} </label>\r\n </hermes-radio-wrapper>\r\n <hermes-radio-wrapper>\r\n <input type=\"radio\" hermesRadio formControlName=\"logicalOperator\" [value]=\"logicalOperators[1]\" />\r\n <label> {{ filterStrings.getConjoinerDisplayName(logicalOperators[1]) }} </label>\r\n </hermes-radio-wrapper>\r\n </hermes-radio-container>\r\n }\r\n @if (filterProperty.logicalOperator != undefined) {\r\n <div class=\"hermes-control-container\" hermes-layout=\"m-t:sm\">\r\n <span data-test-id=\"logical-operator\" hermes-text=\"body medium\">{{\r\n filterStrings.getConjoinerDisplayName(filterProperty.logicalOperator)\r\n }}</span>\r\n </div>\r\n }\r\n <div class=\"flex-end-container\">\r\n <hermes-native-select-container class=\"form-control-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"secondaryOperator\">\r\n @for (operator of comparisonOperators; track operator) {\r\n <option [ngValue]=\"operator\">\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n <button\r\n class=\"close ml-half\"\r\n data-test-id=\"close-button\"\r\n [attr.aria-label]=\"filterStrings.removeConditionAriaLabel\"\r\n (click)=\"disableSecondaryPredicate()\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n @if (!isEmptySecondaryPredicate) {\r\n <div class=\"flex-container\">\r\n <hermes-input-container>\r\n <input\r\n type=\"text\"\r\n formControlName=\"secondaryValue\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n (keydown)=\"onInputKeyPress($event)\"\r\n />\r\n <hermes-control-error *hermesIfError=\"'required'\" role=\"alert\">{{\r\n filterStrings.requiredValidatorMessage\r\n }}</hermes-control-error>\r\n <hermes-control-error *hermesIfError=\"'pattern'\" role=\"alert\">{{\r\n filterStrings.integerValidatorMessage\r\n }}</hermes-control-error>\r\n </hermes-input-container>\r\n @if (isNumericUnitProperty) {\r\n <hermes-native-select-container class=\"ml-half\">\r\n <select hermesNativeSelect formControlName=\"secondaryUnit\">\r\n @for (unit of units; track unit) {\r\n <option [ngValue]=\"unit\">\r\n {{ filterStrings.getUnitDisplayName(unit) }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, Input, Output, Renderer2 } from '@angular/core';\r\n\r\nconst enterKey = 'Enter';\r\nconst spaceKey = 'Space';\r\n\r\n/**\r\n * Directive which renders a clickable \"X\" on the right side of a Clarity label badge.\r\n * A \"close\" event is emitted when the \"X\" is clicked.\r\n * The directive is needed in order to be able to remove filtering criteria,\r\n * which are displayed in Clarity label badges.\r\n */\r\n@Directive({\r\n selector: '[dismissable]',\r\n standalone: false,\r\n})\r\nexport class DismissableDirective implements AfterViewInit {\r\n @Input() dismissAriaLabel: string;\r\n @Output() dismiss = new EventEmitter();\r\n\r\n constructor(\r\n private renderer: Renderer2,\r\n private elRef: ElementRef\r\n ) {}\r\n\r\n ngAfterViewInit() {\r\n const icon = this.renderer.createElement('hermes-icon');\r\n icon.setAttribute('shape', 'window-close');\r\n icon.setAttribute('class', 'remove-filter');\r\n icon.setAttribute('role', 'button');\r\n icon.setAttribute('tabindex', '0');\r\n icon.setAttribute('aria-label', this.dismissAriaLabel);\r\n icon.style.margin = '1rem';\r\n this.renderer.setStyle(icon, 'margin-left', '0.5rem');\r\n this.renderer.setStyle(icon, 'margin-right', '0rem');\r\n this.renderer.setStyle(icon, 'cursor', 'pointer');\r\n this.renderer.appendChild(this.elRef.nativeElement, icon);\r\n this.renderer.listen(icon, 'click', () => {\r\n this.dismiss.emit();\r\n return true;\r\n });\r\n this.renderer.listen(icon, 'keydown', (event: KeyboardEvent) => {\r\n if (event.key === enterKey || event.key === spaceKey) {\r\n this.dismiss.emit();\r\n }\r\n return true;\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n/**\r\n * User service that provides users for the datagrid users filter.\r\n *\r\n * ```\r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DatagridFiltersUserService, useClass: CustomUserService },\r\n * ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DatagridFiltersUserService {\r\n getDomains(): Observable<string[]> {\r\n return of([]);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n searchUsers(searchTerm: string, domain: string): Observable<string[]> {\r\n return of([]);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n} from '@angular/forms';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport { catchError, debounceTime, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { DatagridFiltersUserService } from '../datagrid-filters-user-service';\r\nimport { ComparisonOperator, LogicalOperator } from '../model/datagrid-filters.enums';\r\nimport { PropertyFilter, PropertyPredicate, UserPropertyDefinition } from '../model/datagrid-filters.interfaces';\r\n\r\nexport enum ErrorType {\r\n DOMAIN,\r\n USER_SEARCH,\r\n}\r\n\r\n@Component({\r\n selector: 'appfx-users-filter',\r\n standalone: false,\r\n templateUrl: 'users-filter.component.html',\r\n styleUrls: ['users-filter.component.scss', '../common-styles.scss', 'enum-filter.component.scss'],\r\n})\r\nexport class UsersFilterComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() filterProperty: UserPropertyDefinition;\r\n @Input() propertyFilter: PropertyFilter;\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n usersSelectionForm: FormGroup;\r\n isLoading = false;\r\n domains: string[] = [''];\r\n errorRetrievingDomains?: string;\r\n errorSearchingUsers?: string;\r\n allFetchedUsers: string[] = [];\r\n visibleUsers: string[] = [];\r\n selectedValues: Set<string> = new Set<string>();\r\n\r\n readonly #pageSize = 50;\r\n #currentMaxShown = this.#pageSize;\r\n #selectedFilterCriteria = new PropertyFilter();\r\n readonly #searchTermDebounceTime = 200;\r\n #destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private cdr: ChangeDetectorRef,\r\n public filterStrings: DatagridFiltersStrings,\r\n private userService: DatagridFiltersUserService\r\n ) {}\r\n\r\n get optionsFormArray(): FormArray {\r\n return this.usersSelectionForm?.get('options') as FormArray;\r\n }\r\n\r\n get hasMoreItems(): boolean {\r\n return this.visibleUsers.length < this.allFetchedUsers.length;\r\n }\r\n\r\n trackByOperator(_index: number, operator: ComparisonOperator): ComparisonOperator {\r\n return operator;\r\n }\r\n\r\n trackByDomain(_index: number, domain: string): string {\r\n return domain;\r\n }\r\n\r\n ngOnInit() {\r\n this.createUsersSelectionForm();\r\n this.setupListeners();\r\n this.initializeSelectionInEditMode();\r\n this.loadDomains();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['propertyFilter'] && !changes['propertyFilter'].firstChange) {\r\n this.initializeSelectionInEditMode();\r\n this.rebuildCheckboxList();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#destroy$.next();\r\n this.#destroy$.complete();\r\n }\r\n\r\n onDomainChange(): void {\r\n const term = this.usersSelectionForm.get('searchTerm')?.value || '';\r\n this.usersSelectionForm.get('searchTerm')?.setValue(term);\r\n }\r\n\r\n fetchUsers(searchTerm: string): Observable<string[]> {\r\n return this.userService.searchUsers(searchTerm, this.usersSelectionForm.get('domain')?.value);\r\n }\r\n\r\n loadMore(event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.#currentMaxShown += this.#pageSize;\r\n this.rebuildCheckboxList();\r\n }\r\n\r\n onOptionChange(index: number): void {\r\n const user = this.visibleUsers[index];\r\n const isChecked = this.optionsFormArray.at(index).value;\r\n\r\n if (isChecked) {\r\n this.selectedValues.add(user);\r\n } else {\r\n this.selectedValues.delete(user);\r\n }\r\n\r\n this.updateSelectAllState();\r\n this.usersSelectionForm.updateValueAndValidity();\r\n }\r\n\r\n onSelectAllChange(): void {\r\n const selectAllValue = this.usersSelectionForm.get('selectAll')?.value;\r\n\r\n this.optionsFormArray.controls.forEach((ctrl: AbstractControl) => {\r\n (ctrl as FormControl).setValue(selectAllValue, { emitEvent: false });\r\n });\r\n\r\n this.visibleUsers.forEach(user => {\r\n if (selectAllValue) {\r\n this.selectedValues.add(user);\r\n } else {\r\n this.selectedValues.delete(user);\r\n }\r\n });\r\n\r\n this.usersSelectionForm.updateValueAndValidity();\r\n }\r\n\r\n clearSearch(): void {\r\n this.usersSelectionForm.get('searchTerm')?.setValue('');\r\n }\r\n\r\n handleError(error: any, errorType: ErrorType): Observable<string[]> {\r\n if (errorType === ErrorType.USER_SEARCH) {\r\n console.error('Error searching users: ', error);\r\n this.errorSearchingUsers = this.filterStrings.errorSearchingUsers;\r\n } else if (errorType === ErrorType.DOMAIN) {\r\n console.error('Error loading domains: ', error);\r\n this.errorRetrievingDomains = this.filterStrings.errorLoadingDomains;\r\n }\r\n this.isLoading = false;\r\n this.cdr.markForCheck();\r\n if (errorType === ErrorType.DOMAIN) {\r\n return of([]);\r\n } else {\r\n const searchValue = this.usersSelectionForm.get('searchTerm')?.value as string;\r\n return searchValue ? of([searchValue]) : of([]);\r\n }\r\n }\r\n\r\n showLoading(): void {\r\n this.isLoading = true;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n hideLoading(): void {\r\n this.isLoading = false;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n onCancelButtonClick() {\r\n this.filterCriteriaChange.emit();\r\n }\r\n\r\n onApplyButtonClick(): void {\r\n const comparisonOperator = this.usersSelectionForm.get('userOperator')?.value || ComparisonOperator.Equals;\r\n this.#selectedFilterCriteria.criteria = Array.from(this.selectedValues).map((userValue: string) =>\r\n this.createUserPropertyPredicate(userValue, comparisonOperator)\r\n );\r\n this.#selectedFilterCriteria.operator =\r\n comparisonOperator === ComparisonOperator.Equals ? LogicalOperator.Or : LogicalOperator.And;\r\n this.filterCriteriaChange.emit(this.#selectedFilterCriteria);\r\n }\r\n\r\n private setupListeners(): void {\r\n this.usersSelectionForm\r\n .get('searchTerm')\r\n ?.valueChanges.pipe(\r\n takeUntil(this.#destroy$),\r\n tap(() => {\r\n this.showLoading();\r\n this.errorSearchingUsers = undefined;\r\n }),\r\n debounceTime(this.#searchTermDebounceTime),\r\n switchMap((term: string) =>\r\n this.fetchUsers(term).pipe(catchError((error: any) => this.handleError(error, ErrorType.USER_SEARCH)))\r\n ),\r\n tap((results: string[]) => {\r\n this.allFetchedUsers = results;\r\n this.resetPagination();\r\n this.rebuildCheckboxList();\r\n this.hideLoading();\r\n })\r\n )\r\n .subscribe();\r\n\r\n this.usersSelectionForm\r\n .get('userOperator')\r\n ?.valueChanges.pipe(takeUntil(this.#destroy$))\r\n .subscribe((op: ComparisonOperator) => {\r\n this.#selectedFilterCriteria.operator =\r\n op === ComparisonOperator.Equals ? LogicalOperator.Or : LogicalOperator.And;\r\n });\r\n\r\n this.usersSelectionForm.get('userOperator')?.setValue(ComparisonOperator.Equals);\r\n\r\n this.usersSelectionForm\r\n .get('domain')\r\n ?.valueChanges.pipe(takeUntil(this.#destroy$))\r\n .subscribe(() => {\r\n this.usersSelectionForm.get('searchTerm')?.setValue('');\r\n });\r\n }\r\n\r\n private loadDomains(): void {\r\n this.showLoading();\r\n this.userService\r\n .getDomains()\r\n .pipe(\r\n takeUntil(this.#destroy$),\r\n catchError((error: any) => this.handleError(error, ErrorType.DOMAIN))\r\n )\r\n .subscribe((domains: string[]) => {\r\n this.domains = domains;\r\n const currentDomain = this.usersSelectionForm.get('domain')?.value;\r\n if (domains.length > 0 && !currentDomain) {\r\n this.usersSelectionForm.get('domain')?.setValue(domains[0]);\r\n }\r\n });\r\n }\r\n\r\n private resetPagination(): void {\r\n this.#currentMaxShown = this.#pageSize;\r\n }\r\n\r\n private createUsersSelectionForm(): void {\r\n this.usersSelectionForm = this.fb.group(\r\n {\r\n userOperator: [ComparisonOperator.Equals],\r\n domain: [null],\r\n searchTerm: [''],\r\n selectAll: [false],\r\n options: this.fb.array([]),\r\n },\r\n { validators: this.selectionValidator }\r\n );\r\n }\r\n\r\n private initializeSelectionInEditMode(): void {\r\n if (!this.propertyFilter) {\r\n return;\r\n }\r\n\r\n const initialOp =\r\n this.propertyFilter.operator === LogicalOperator.And\r\n ? ComparisonOperator.DoesNotEqual\r\n : ComparisonOperator.Equals;\r\n this.usersSelectionForm.get('userOperator')?.setValue(initialOp, { emitEvent: false });\r\n\r\n const users: string[] = this.propertyFilter.criteria?.map(c => c.value) || [];\r\n this.selectedValues = new Set(users);\r\n this.usersSelectionForm.updateValueAndValidity();\r\n }\r\n\r\n private rebuildCheckboxList(): void {\r\n const slicedUsers = this.allFetchedUsers.slice(0, this.#currentMaxShown);\r\n this.visibleUsers = [];\r\n const visibleUsersSet = new Set<string>();\r\n const searchTerm = this.usersSelectionForm.get('searchTerm')?.value;\r\n let searchTermMatchCustomUser = false;\r\n\r\n if (searchTerm) {\r\n this.selectedValues.forEach((user: string) => {\r\n if (user.toLocaleLowerCase().includes(searchTerm.toLocaleLowerCase())) {\r\n this.visibleUsers.push(user);\r\n visibleUsersSet.add(user);\r\n }\r\n if (user === searchTerm) {\r\n searchTermMatchCustomUser = true;\r\n }\r\n });\r\n if (!searchTermMatchCustomUser) {\r\n this.visibleUsers.push(searchTerm);\r\n visibleUsersSet.add(searchTerm);\r\n }\r\n } else {\r\n this.selectedValues.forEach(user => {\r\n if (!visibleUsersSet.has(user)) {\r\n this.visibleUsers.push(user);\r\n visibleUsersSet.add(user);\r\n }\r\n });\r\n }\r\n\r\n slicedUsers\r\n .filter(user => !visibleUsersSet.has(user))\r\n .forEach(filteredUser => this.visibleUsers.push(filteredUser));\r\n\r\n const optionsArr = this.optionsFormArray;\r\n optionsArr.clear();\r\n\r\n this.visibleUsers.forEach(user => {\r\n const isSelected = this.selectedValues.has(user);\r\n optionsArr.push(new FormControl(isSelected));\r\n });\r\n\r\n this.updateSelectAllState();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n private updateSelectAllState(): void {\r\n if (this.visibleUsers.length === 0) {\r\n this.usersSelectionForm.get('selectAll')?.setValue(false, { emitEvent: false });\r\n return;\r\n }\r\n\r\n const allVisibleSelected = this.visibleUsers.every(u => this.selectedValues.has(u));\r\n this.usersSelectionForm.get('selectAll')?.setValue(allVisibleSelected, { emitEvent: false });\r\n }\r\n\r\n private selectionValidator: ValidatorFn = (): ValidationErrors | null => {\r\n return this.selectedValues.size > 0 ? null : { required: true };\r\n };\r\n\r\n private createUserPropertyPredicate(value: string, comparisonOperator: ComparisonOperator): PropertyPredicate {\r\n const res = new PropertyPredicate();\r\n res.filterableProperty = this.filterProperty;\r\n res.operator = comparisonOperator;\r\n res.value = value;\r\n return res;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<appfx-filter-form\r\n [formGroup]=\"usersSelectionForm\"\r\n [valid]=\"usersSelectionForm.valid\"\r\n (cancel)=\"onCancelButtonClick()\"\r\n (apply)=\"onApplyButtonClick()\"\r\n>\r\n <div class=\"user-filter-wrapper\" hermes-layout=\"p-b:xxxs\">\r\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\r\n <div class=\"loading-content\">\r\n <hermes-spinner hermesMedium>{{ filterStrings.loading }}</hermes-spinner>\r\n </div>\r\n </div>\r\n <!-- Operator -->\r\n <hermes-native-select-container class=\"mt-compact\">\r\n <label class=\"hermes-control-label\">\r\n {{ filterStrings.operatorLabel }}\r\n </label>\r\n <select hermesNativeSelect formControlName=\"userOperator\">\r\n <option\r\n *ngFor=\"let operator of filterProperty.supportedOperators; trackBy: trackByOperator\"\r\n [ngValue]=\"operator\"\r\n >\r\n {{ filterStrings.getOperatorDisplayName(operator) }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n\r\n <!-- Domain -->\r\n <hermes-native-select-container *ngIf=\"domains && domains.length > 0\">\r\n <label>{{ filterStrings.domain }}</label>\r\n <select hermesNativeSelect name=\"domain\" formControlName=\"domain\">\r\n <option *ngFor=\"let domain of domains; trackBy: trackByDomain\" [value]=\"domain\">\r\n {{ domain }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n\r\n <!-- User -->\r\n <label class=\"hermes-control-label text-left mt-compact\">\r\n {{ filterStrings.user }}\r\n </label>\r\n\r\n <hermes-input-container hermes-layout=\"m-t:xs\">\r\n <label class=\"hermes-sr-only\">{{ filterStrings.searchPlaceholder }}</label>\r\n <input hermesInput type=\"text\" [placeholder]=\"filterStrings.searchPlaceholder\" formControlName=\"searchTerm\" />\r\n <hermes-icon shape=\"search\" hermesInputPrefix></hermes-icon>\r\n <hermes-icon\r\n *ngIf=\"usersSelectionForm.get('searchTerm')?.value\"\r\n shape=\"window-close\"\r\n hermesInputSuffix\r\n (click)=\"clearSearch()\"\r\n ></hermes-icon>\r\n </hermes-input-container>\r\n\r\n <div hermes-layout=\"m-t:xs m-l:xxs\" class=\"selection-counter\">\r\n <span *ngIf=\"selectedValues.size > 0\" class=\"hermes-subtext\" hermes-text=\"body medium\">\r\n {{ filterStrings.formatString(filterStrings.elementsSelectedFormat, [selectedValues.size.toString()]) }}\r\n </span>\r\n </div>\r\n\r\n <div hermes-layout=\"m-t:xs\">\r\n <hermes-checkbox-container class=\"enum-options\">\r\n <hermes-checkbox-wrapper *ngIf=\"visibleUsers.length > 0\" hermes-layout=\"m-b:xs\">\r\n <input type=\"checkbox\" hermesCheckbox formControlName=\"selectAll\" (change)=\"onSelectAllChange()\" />\r\n <label>\r\n {{ usersSelectionForm.get('searchTerm')?.value ? filterStrings.allSearchResults : filterStrings.selectAll }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n\r\n <hermes-checkbox-wrapper *ngFor=\"let user of visibleUsers; let i = index\">\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n [formControl]=\"$any(optionsFormArray.at(i))\"\r\n (change)=\"onOptionChange(i)\"\r\n />\r\n <label>\r\n {{ user }}\r\n </label>\r\n </hermes-checkbox-wrapper>\r\n </hermes-checkbox-container>\r\n\r\n <div *ngIf=\"errorSearchingUsers\" class=\"hermes-subtext hermes-error error\">\r\n {{ errorSearchingUsers }}\r\n </div>\r\n\r\n <div *ngIf=\"errorRetrievingDomains\" class=\"hermes-subtext hermes-error error\">\r\n {{ errorRetrievingDomains }}\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"hasMoreItems\" class=\"btn btn-link\" (click)=\"loadMore($event)\">\r\n {{ filterStrings.loadMore }}\r\n </button>\r\n </div>\r\n</appfx-filter-form>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\nimport { DatagridFiltersStrings } from '../datagrid-filters-strings.service';\r\nimport { ComparisonOperator, PropertyType, TimeSpan } from '../model/datagrid-filters.enums';\r\nimport {\r\n DateTimePropertyDefinition,\r\n EnumPropertyDefinition,\r\n FilterablePropertyDefinition,\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n StringPropertyDefinition,\r\n UserPropertyDefinition,\r\n} from '../model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst spaceKey = 'Space';\r\n\r\n@Component({\r\n selector: 'appfx-manage-filter',\r\n standalone: false,\r\n templateUrl: 'manage-filter.component.html',\r\n styleUrls: ['manage-filter.component.scss', '../common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ManageFilterComponent implements OnInit {\r\n // The filter to be managed\r\n @Input() propertyFilter: PropertyFilter;\r\n managedProperty: FilterablePropertyDefinition;\r\n\r\n /**\r\n * Event emitter to tell hosting view that filtering criteria have changed\r\n */\r\n @Output() filterCriteriaChange: EventEmitter<PropertyFilter> = new EventEmitter<PropertyFilter>();\r\n\r\n readonly stringPropertyType: PropertyType = PropertyType.String;\r\n readonly enumPropertyType: PropertyType = PropertyType.Enum;\r\n readonly numericPropertyType: PropertyType = PropertyType.Numeric;\r\n readonly dateTimePropertyType: PropertyType = PropertyType.DateTime;\r\n readonly userPropertyType: PropertyType = PropertyType.User;\r\n\r\n managedPropertyType: PropertyType;\r\n stringProperty: StringPropertyDefinition;\r\n numericProperty: NumericPropertyDefinition;\r\n enumProperty: EnumPropertyDefinition;\r\n dateTimeProperty: DateTimePropertyDefinition;\r\n userProperty: UserPropertyDefinition;\r\n openPrimaryConditionSignPost = false;\r\n openSecondaryConditionSignPost = false;\r\n primaryConditionDisplayText = '';\r\n secondaryConditionDisplayText = '';\r\n editFilterAriaLabel = '';\r\n\r\n private readonly noDisplayValueOperators: ComparisonOperator[] = [\r\n ComparisonOperator.IsEmpty,\r\n ComparisonOperator.LastDay,\r\n ComparisonOperator.LastWeek,\r\n ComparisonOperator.LastMonth,\r\n ComparisonOperator.LastYear,\r\n ];\r\n\r\n constructor(public filterStrings: DatagridFiltersStrings) {}\r\n\r\n ngOnInit() {\r\n this.managedProperty = this.propertyFilter.criteria[0].filterableProperty;\r\n if (this.isStringProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.String;\r\n this.stringProperty = this.castStringProperty();\r\n } else if (this.isEnumProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.Enum;\r\n this.enumProperty = this.castEnumProperty();\r\n } else if (this.isNumericProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.Numeric;\r\n this.numericProperty = this.castNumericProperty();\r\n } else if (this.isDateTimeProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.DateTime;\r\n this.dateTimeProperty = this.castDateTimeProperty();\r\n } else if (this.isUserProperty(this.managedProperty)) {\r\n this.managedPropertyType = PropertyType.User;\r\n this.userProperty = this.castUserProperty();\r\n }\r\n this.updateDisplayValues();\r\n }\r\n\r\n onEditFilterKeyPress(event: KeyboardEvent, index: number) {\r\n if (event.target instanceof Element) {\r\n const targetElement: Element = event.target as Element;\r\n if (targetElement.classList.contains('edit-filter') && (event.key === enterKey || event.key === spaceKey)) {\r\n if (index === 0) {\r\n this.openPrimaryConditionSignPost = !this.openPrimaryConditionSignPost;\r\n } else if (index === 1) {\r\n this.openSecondaryConditionSignPost = !this.openSecondaryConditionSignPost;\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeFilter(index: number): void {\r\n // 3 or more criteria are displayed as one group\r\n // For this reason, they are removed together\r\n if (this.propertyFilter.criteria.length > 2 || this.managedPropertyType === PropertyType.DateTime) {\r\n this.propertyFilter.criteria = [];\r\n } else {\r\n this.propertyFilter.criteria.splice(index, 1);\r\n if (this.propertyFilter.criteria.length > 0) {\r\n const property = this.propertyFilter.criteria[0].filterableProperty;\r\n if (this.isNumericUnitFilterProperty(property)) {\r\n property.selectedValue.splice(index, 1);\r\n property.selectedUnit.splice(index, 1);\r\n }\r\n this.updateDisplayValues();\r\n }\r\n }\r\n this.filterCriteriaChange.emit(this.propertyFilter);\r\n }\r\n\r\n onFilterCriteriaChange(propertyFilter: PropertyFilter) {\r\n if (propertyFilter) {\r\n this.filterCriteriaChange.emit(propertyFilter);\r\n }\r\n this.openPrimaryConditionSignPost = false;\r\n this.openSecondaryConditionSignPost = false;\r\n }\r\n\r\n private updateDisplayValues(): void {\r\n this.primaryConditionDisplayText = this.displayFilterValue(0);\r\n this.editFilterAriaLabel =\r\n this.filterStrings.editFilterText +\r\n ' ' +\r\n this.managedProperty.displayName +\r\n ' ' +\r\n this.primaryConditionDisplayText;\r\n if (this.propertyFilter.criteria.length === 2) {\r\n this.secondaryConditionDisplayText = this.displayFilterValue(1);\r\n this.editFilterAriaLabel +=\r\n ' ' +\r\n this.filterStrings.getConjoinerDisplayName(this.propertyFilter.operator) +\r\n ' ' +\r\n this.secondaryConditionDisplayText;\r\n }\r\n }\r\n\r\n private displayFilterValue(index: number): string {\r\n if (this.isDateTimeProperty(this.managedProperty)) {\r\n return this.displayDateTimeFilter();\r\n }\r\n const appliedConditions: number = this.propertyFilter.criteria.length;\r\n if (appliedConditions > 2) {\r\n return appliedConditions + ' ' + this.filterStrings.appliedText;\r\n }\r\n if (this.propertyFilter.criteria[index].operator === ComparisonOperator.IsEmpty) {\r\n return this.operatorDisplayName(this.propertyFilter.criteria[index].operator);\r\n }\r\n const property = this.propertyFilter.criteria[index].filterableProperty;\r\n let value = this.propertyFilter.criteria[index].value;\r\n if (this.isEnumProperty(property)) {\r\n const enumProperty: EnumPropertyDefinition = property as EnumPropertyDefinition;\r\n value = enumProperty.values.get(this.propertyFilter.criteria[index].value);\r\n } else if (this.isNumericUnitFilterProperty(property)) {\r\n value = property.selectedValue[index] + ' ' + this.filterStrings.getUnitDisplayName(property.selectedUnit[index]);\r\n }\r\n return this.operatorDisplayName(this.propertyFilter.criteria[index].operator) + ': ' + value;\r\n }\r\n\r\n private displayDateTimeFilter(): string {\r\n const operator: ComparisonOperator = this.propertyFilter.criteria[0].filterableProperty.selectedOperator;\r\n if (operator === ComparisonOperator.CustomRange) {\r\n const displayValue: string =\r\n this.filterStrings.fromLabel +\r\n ': ' +\r\n this.formatDateTimeValue(this.propertyFilter.criteria[0].filterableProperty.selectedValue) +\r\n ' ' +\r\n this.filterStrings.toLabel +\r\n ': ' +\r\n this.formatDateTimeValue(this.propertyFilter.criteria[0].filterableProperty.selectedValueTo);\r\n return displayValue;\r\n } else if (this.isNoDisplayValueOperator(operator)) {\r\n return this.operatorDisplayName(operator);\r\n } else if (operator === ComparisonOperator.TimeSpan) {\r\n const timeSpanValue: number = this.propertyFilter.criteria[0].filterableProperty.selectedTimeSpanValue;\r\n const timeSpan: TimeSpan = this.propertyFilter.criteria[0].filterableProperty.selectedTimeSpan;\r\n return (\r\n this.operatorDisplayName(operator) +\r\n ': ' +\r\n timeSpanValue +\r\n ' ' +\r\n this.filterStrings.getTimeSpanDisplayName(timeSpan)\r\n );\r\n } else {\r\n const filterValue: string = this.formatDateTimeValue(\r\n this.propertyFilter.criteria[0].filterableProperty.selectedValue\r\n );\r\n return this.operatorDisplayName(operator) + ': ' + filterValue;\r\n }\r\n }\r\n\r\n private isNoDisplayValueOperator(operator: ComparisonOperator): boolean {\r\n return this.noDisplayValueOperators.includes(operator);\r\n }\r\n\r\n private formatDateTimeValue(dateTime: string): string {\r\n if (!dateTime) {\r\n return dateTime;\r\n }\r\n return dateTime.replace('T', ' ');\r\n }\r\n\r\n private isStringProperty(property: FilterablePropertyDefinition): property is StringPropertyDefinition {\r\n return property instanceof StringPropertyDefinition;\r\n }\r\n\r\n private isEnumProperty(property: FilterablePropertyDefinition): property is EnumPropertyDefinition {\r\n return property instanceof EnumPropertyDefinition;\r\n }\r\n\r\n private isNumericProperty(property: FilterablePropertyDefinition): property is NumericPropertyDefinition {\r\n return property instanceof NumericPropertyDefinition;\r\n }\r\n\r\n private isDateTimeProperty(property: FilterablePropertyDefinition): property is DateTimePropertyDefinition {\r\n return property instanceof DateTimePropertyDefinition;\r\n }\r\n\r\n private isUserProperty(property: FilterablePropertyDefinition): property is UserPropertyDefinition {\r\n return property instanceof UserPropertyDefinition;\r\n }\r\n\r\n private isNumericUnitFilterProperty(property: FilterablePropertyDefinition): boolean {\r\n return this.isNumericProperty(property) && property.unit !== undefined;\r\n }\r\n\r\n private castStringProperty(): StringPropertyDefinition {\r\n return this.managedProperty as StringPropertyDefinition;\r\n }\r\n\r\n private castEnumProperty(): EnumPropertyDefinition {\r\n return this.managedProperty as EnumPropertyDefinition;\r\n }\r\n\r\n private castNumericProperty(): NumericPropertyDefinition {\r\n return this.managedProperty as NumericPropertyDefinition;\r\n }\r\n\r\n private castDateTimeProperty(): DateTimePropertyDefinition {\r\n return this.managedProperty as DateTimePropertyDefinition;\r\n }\r\n\r\n private castUserProperty(): UserPropertyDefinition {\r\n return this.managedProperty as UserPropertyDefinition;\r\n }\r\n\r\n private operatorDisplayName(operator: ComparisonOperator): string {\r\n return this.filterStrings.getOperatorDisplayName(operator);\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<span class=\"label label-blue\">\r\n {{ managedProperty.displayName }}\r\n <span\r\n class=\"badge\"\r\n dismissable\r\n [dismissAriaLabel]=\"\r\n filterStrings.removeFilterText + ' ' + managedProperty.displayName + ' ' + primaryConditionDisplayText\r\n \"\r\n (dismiss)=\"removeFilter(0)\"\r\n >\r\n <hermes-signpost>\r\n <span\r\n hermesSignpostTrigger\r\n class=\"edit-filter\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [attr.aria-label]=\"editFilterAriaLabel\"\r\n (keydown)=\"onEditFilterKeyPress($event, 0)\"\r\n >\r\n {{ primaryConditionDisplayText }}\r\n </span>\r\n <ng-template [(hermesIfOpen)]=\"openPrimaryConditionSignPost\">\r\n <hermes-signpost-content [hermesPosition]=\"'bottom-middle'\" filterPopoverReposition>\r\n <hermes-native-select-container class=\"mt-0\">\r\n <label class=\"hermes-control-label\">\r\n {{ this.filterStrings.filterLabel }}\r\n </label>\r\n <select hermesNativeSelect [(ngModel)]=\"managedProperty\" disabled>\r\n <option [ngValue]=\"managedProperty\">\r\n {{ managedProperty.displayName }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n @switch (managedPropertyType) {\r\n @case (stringPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"stringProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (numericPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"numericProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (enumPropertyType) {\r\n <appfx-enum-filter\r\n [filterProperty]=\"enumProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-enum-filter>\r\n }\r\n @case (dateTimePropertyType) {\r\n <appfx-datetime-filter\r\n [filterProperty]=\"dateTimeProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-datetime-filter>\r\n }\r\n @case (userPropertyType) {\r\n <appfx-users-filter\r\n [filterProperty]=\"userProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-users-filter>\r\n }\r\n }\r\n </hermes-signpost-content>\r\n </ng-template>\r\n </hermes-signpost>\r\n </span>\r\n @if (propertyFilter.criteria.length === 2 && managedPropertyType !== dateTimePropertyType) {\r\n <span class=\"text-lower\">\r\n {{ this.filterStrings.getConjoinerDisplayName(propertyFilter.operator) }}\r\n </span>\r\n }\r\n @if (propertyFilter.criteria.length === 2 && managedPropertyType !== dateTimePropertyType) {\r\n <span\r\n class=\"badge\"\r\n dismissable\r\n [dismissAriaLabel]=\"\r\n this.filterStrings.removeFilterText + managedProperty.displayName + ' ' + secondaryConditionDisplayText\r\n \"\r\n (dismiss)=\"removeFilter(1)\"\r\n >\r\n <hermes-signpost>\r\n <span\r\n hermesSignpostTrigger\r\n class=\"edit-filter\"\r\n tabindex=\"0\"\r\n role=\"button\"\r\n [attr.aria-label]=\"editFilterAriaLabel\"\r\n (keydown)=\"onEditFilterKeyPress($event, 1)\"\r\n >\r\n {{ secondaryConditionDisplayText }}\r\n </span>\r\n <ng-template [(hermesIfOpen)]=\"openSecondaryConditionSignPost\">\r\n <hermes-signpost-content [hermesPosition]=\"'bottom-middle'\" filterPopoverReposition>\r\n <hermes-native-select-container class=\"mt-0\">\r\n <label class=\"hermes-control-label\">\r\n {{ this.filterStrings.filterLabel }}\r\n </label>\r\n <select hermesNativeSelect [(ngModel)]=\"managedProperty\" disabled>\r\n <option [ngValue]=\"managedProperty\">\r\n {{ managedProperty.displayName }}\r\n </option>\r\n </select>\r\n </hermes-native-select-container>\r\n @switch (managedPropertyType) {\r\n @case (stringPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"stringProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (numericPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"numericProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (enumPropertyType) {\r\n <appfx-enum-filter\r\n [filterProperty]=\"enumProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-enum-filter>\r\n }\r\n @case (userPropertyType) {\r\n <appfx-users-filter\r\n [filterProperty]=\"userProperty\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-users-filter>\r\n }\r\n }\r\n </hermes-signpost-content>\r\n </ng-template>\r\n </hermes-signpost>\r\n </span>\r\n }\r\n</span>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\n\r\nimport { FilterablePropertyDefinition } from './model/datagrid-filters.interfaces';\r\n\r\n/**\r\n * Pipe used to limit available filter options in a select container.\r\n * This is needed in order to prevent applying the same filter more than once\r\n */\r\n@Pipe({\r\n name: 'skipFilter',\r\n standalone: false,\r\n})\r\nexport class SkipFiltersPipe implements PipeTransform {\r\n transform(items: FilterablePropertyDefinition[], propertyDefinitions?: FilterablePropertyDefinition[]): any {\r\n return propertyDefinitions\r\n ? items.filter((item: FilterablePropertyDefinition) => !propertyDefinitions.includes(item))\r\n : items;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\n\r\nimport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nimport { PropertyType } from './model/datagrid-filters.enums';\r\nimport {\r\n DateTimePropertyDefinition,\r\n EnumPropertyDefinition,\r\n FilterablePropertyDefinition,\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n StringPropertyDefinition,\r\n UserPropertyDefinition,\r\n} from './model/datagrid-filters.interfaces';\r\n\r\n/**\r\n * Composite filters component renders different filters based on the type of\r\n * the corresponding filterable property, e.g., string, enum, number, etc.\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-composite-filter',\r\n standalone: false,\r\n templateUrl: 'composite-filters.component.html',\r\n styleUrls: ['composite-filters.component.scss', 'common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CompositeFiltersComponent implements OnInit {\r\n // Array of filterable properties\r\n @Input() filterableProperties: FilterablePropertyDefinition[];\r\n\r\n @Input() presetFilters: PropertyFilter[];\r\n\r\n /**\r\n * Event emitter to tell hosting view that the filtering conditions have changed\r\n */\r\n @Output() propertyFiltersChange: EventEmitter<PropertyFilter[]> = new EventEmitter<PropertyFilter[]>();\r\n\r\n readonly stringPropertyType: PropertyType = PropertyType.String;\r\n readonly enumPropertyType: PropertyType = PropertyType.Enum;\r\n readonly numericPropertyType: PropertyType = PropertyType.Numeric;\r\n readonly dateTimePropertyType: PropertyType = PropertyType.DateTime;\r\n readonly userPropertyType: PropertyType = PropertyType.User;\r\n\r\n signPostOpened = false;\r\n selectedFilterableProperty: FilterablePropertyDefinition;\r\n propertyType: PropertyType;\r\n stringProperty: StringPropertyDefinition;\r\n enumProperty: EnumPropertyDefinition;\r\n numericProperty: NumericPropertyDefinition;\r\n dateTimeProperty: DateTimePropertyDefinition;\r\n userProperty: UserPropertyDefinition;\r\n // List of active filters to be sent to the hosting view\r\n propertyFilters: PropertyFilter[] = [];\r\n collapsedFilters = false;\r\n showHideFiltersArrowDir = 'left';\r\n showHideFiltersLabel: string;\r\n showHideFiltersAriaLabel: string;\r\n\r\n constructor(\r\n public filterStrings: DatagridFiltersStrings,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n this.showHideFiltersLabel = filterStrings.hideButtonLabel;\r\n this.showHideFiltersAriaLabel = filterStrings.hideButtonAriaLabel;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.filterableProperties && this.filterableProperties.length > 0) {\r\n this.selectedFilterableProperty = this.filterableProperties[0];\r\n this.onPropertyChange();\r\n }\r\n if (this.presetFilters) {\r\n this.propertyFilters.push(...this.presetFilters);\r\n this.preselectFirstProperty();\r\n }\r\n }\r\n\r\n onPropertyChange() {\r\n if (this.isStringProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.String;\r\n this.stringProperty = this.castStringProperty();\r\n } else if (this.isEnumProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.Enum;\r\n this.enumProperty = this.castEnumProperty();\r\n } else if (this.isNumericProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.Numeric;\r\n this.numericProperty = this.castNumericProperty();\r\n } else if (this.isDateTimeProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.DateTime;\r\n this.dateTimeProperty = this.castDateTimeProperty();\r\n } else if (this.isUserProperty(this.selectedFilterableProperty)) {\r\n this.propertyType = PropertyType.User;\r\n this.userProperty = this.castUserProperty();\r\n }\r\n }\r\n\r\n onFilterCriteriaChange(propertyFilter: PropertyFilter) {\r\n if (propertyFilter) {\r\n if (propertyFilter.criteria.length > 0) {\r\n // The property filter contains several filtering criteria.\r\n // This is either a new filter, or some of the criteria are modified\r\n let i = this.propertyFilters.length;\r\n let modified = false;\r\n while (i--) {\r\n // Check whether there is an existing filter for the same property.\r\n // If found, replace it with the new filter\r\n if (\r\n this.propertyFilters[i].criteria[0].filterableProperty.property ===\r\n propertyFilter.criteria[0].filterableProperty.property\r\n ) {\r\n this.propertyFilters[i] = propertyFilter;\r\n modified = true;\r\n }\r\n }\r\n // If no existing filter was found, add the new one to the active filters list\r\n if (!modified) {\r\n this.propertyFilters.push(propertyFilter);\r\n }\r\n } else {\r\n // The property filter does not contain any criteria.\r\n // It should be removed from the active filters list\r\n let j = this.propertyFilters.length;\r\n while (j--) {\r\n if (this.propertyFilters[j].criteria.length === 0) {\r\n this.propertyFilters.splice(j, 1);\r\n }\r\n }\r\n }\r\n this.propertyFiltersChange.emit(this.propertyFilters);\r\n }\r\n this.signPostOpened = false;\r\n this.preselectFirstProperty();\r\n this.updateShowHideLabel();\r\n // The filter sometimes fails to close, necessitating\r\n // a check to detect this state change.\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Returns a list properties for which there is an active filter\r\n */\r\n activeFilters(): FilterablePropertyDefinition[] {\r\n const activeProperties: FilterablePropertyDefinition[] = [];\r\n this.propertyFilters.forEach(value => {\r\n if (value.criteria.length > 0) {\r\n activeProperties.push(value.criteria[0].filterableProperty);\r\n }\r\n });\r\n return activeProperties;\r\n }\r\n\r\n clearAllFilters(): void {\r\n this.propertyFilters = [];\r\n this.propertyFiltersChange.emit(this.propertyFilters);\r\n this.preselectFirstProperty();\r\n this.collapsedFilters = false;\r\n }\r\n\r\n showHideAllFilters(): void {\r\n this.collapsedFilters = !this.collapsedFilters;\r\n this.updateShowHideLabel();\r\n this.showHideFiltersArrowDir = this.collapsedFilters ? 'right' : 'left';\r\n }\r\n\r\n /**\r\n * Active filters are not displayed in the new filters list.\r\n * We want to preselect the first displayed property\r\n */\r\n private preselectFirstProperty() {\r\n const activeProperties: FilterablePropertyDefinition[] = this.activeFilters();\r\n const remainingProperties: FilterablePropertyDefinition[] = this.filterableProperties.filter(\r\n property => !activeProperties.includes(property)\r\n );\r\n if (remainingProperties.length > 0) {\r\n this.selectedFilterableProperty = remainingProperties[0];\r\n this.onPropertyChange();\r\n }\r\n }\r\n\r\n private updateShowHideLabel(): void {\r\n this.showHideFiltersLabel = this.collapsedFilters\r\n ? this.filterStrings.showButtonLabel + '(' + this.propertyFilters.length + ')'\r\n : this.filterStrings.hideButtonLabel;\r\n this.showHideFiltersAriaLabel = this.collapsedFilters\r\n ? this.filterStrings.showButtonLabel +\r\n ' ' +\r\n this.propertyFilters.length +\r\n ' ' +\r\n (this.propertyFilters.length > 1 ? this.filterStrings.filtersText : this.filterStrings.filterText)\r\n : this.filterStrings.hideButtonAriaLabel;\r\n }\r\n\r\n private isStringProperty(property: FilterablePropertyDefinition): property is StringPropertyDefinition {\r\n return property instanceof StringPropertyDefinition;\r\n }\r\n\r\n private isEnumProperty(property: FilterablePropertyDefinition): property is EnumPropertyDefinition {\r\n return property instanceof EnumPropertyDefinition;\r\n }\r\n\r\n private isNumericProperty(property: FilterablePropertyDefinition): property is NumericPropertyDefinition {\r\n return property instanceof NumericPropertyDefinition;\r\n }\r\n\r\n private isDateTimeProperty(property: FilterablePropertyDefinition): property is DateTimePropertyDefinition {\r\n return property instanceof DateTimePropertyDefinition;\r\n }\r\n\r\n private isUserProperty(property: FilterablePropertyDefinition): property is UserPropertyDefinition {\r\n return property instanceof UserPropertyDefinition;\r\n }\r\n\r\n private castStringProperty(): StringPropertyDefinition {\r\n return this.selectedFilterableProperty as StringPropertyDefinition;\r\n }\r\n\r\n private castEnumProperty(): EnumPropertyDefinition {\r\n return this.selectedFilterableProperty as EnumPropertyDefinition;\r\n }\r\n\r\n private castNumericProperty(): NumericPropertyDefinition {\r\n return this.selectedFilterableProperty as NumericPropertyDefinition;\r\n }\r\n\r\n private castDateTimeProperty(): DateTimePropertyDefinition {\r\n return this.selectedFilterableProperty as DateTimePropertyDefinition;\r\n }\r\n\r\n private castUserProperty(): UserPropertyDefinition {\r\n return this.selectedFilterableProperty as UserPropertyDefinition;\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div class=\"composite-filter-container\">\r\n <hermes-signpost class=\"height-standard\">\r\n <button\r\n hermesSignpostTrigger\r\n class=\"btn btn-sm btn-link btn-compact\"\r\n data-test-id=\"add-button\"\r\n [attr.aria-label]=\"filterStrings.addNewAriaLabel\"\r\n [disabled]=\"filterableProperties.length === propertyFilters.length\"\r\n >\r\n <hermes-icon size=\"20\" shape=\"filter-grid\" class=\"is-solid\"></hermes-icon>\r\n {{ filterStrings.addNew }}\r\n </button>\r\n <ng-template [(hermesIfOpen)]=\"signPostOpened\">\r\n <hermes-signpost-content\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n [hermesPosition]=\"'bottom-middle'\"\r\n filterPopoverReposition\r\n >\r\n <hermes-native-select-container class=\"mt-0\">\r\n <label class=\"hermes-control-label\"> {{ filterStrings.filterLabel }} </label>\r\n <select hermesNativeSelect [(ngModel)]=\"selectedFilterableProperty\" (ngModelChange)=\"onPropertyChange()\">\r\n @for (property of filterableProperties | skipFilter: activeFilters(); track property) {\r\n <option [ngValue]=\"property\">\r\n {{ property.displayName }}\r\n </option>\r\n }\r\n </select>\r\n </hermes-native-select-container>\r\n @switch (propertyType) {\r\n @case (stringPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"stringProperty\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (numericPropertyType) {\r\n <appfx-general-filter\r\n [filterProperty]=\"numericProperty\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-general-filter>\r\n }\r\n @case (enumPropertyType) {\r\n <appfx-enum-filter [filterProperty]=\"enumProperty\" (filterCriteriaChange)=\"onFilterCriteriaChange($event)\">\r\n </appfx-enum-filter>\r\n }\r\n @case (dateTimePropertyType) {\r\n <appfx-datetime-filter\r\n [filterProperty]=\"dateTimeProperty\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-datetime-filter>\r\n }\r\n @case (userPropertyType) {\r\n <appfx-users-filter [filterProperty]=\"userProperty\" (filterCriteriaChange)=\"onFilterCriteriaChange($event)\">\r\n </appfx-users-filter>\r\n }\r\n }\r\n </hermes-signpost-content>\r\n </ng-template>\r\n </hermes-signpost>\r\n @if (propertyFilters.length > 0) {\r\n <div class=\"manage-filter-container\">\r\n @for (propertyFilter of propertyFilters; track propertyFilter) {\r\n <appfx-manage-filter\r\n [hidden]=\"collapsedFilters\"\r\n [propertyFilter]=\"propertyFilter\"\r\n (filterCriteriaChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-manage-filter>\r\n }\r\n <button\r\n class=\"btn btn-sm btn-link btn-compact\"\r\n data-test-id=\"hide-filters\"\r\n [attr.aria-label]=\"showHideFiltersAriaLabel\"\r\n (click)=\"showHideAllFilters()\"\r\n >\r\n <hermes-icon shape=\"angle\" class=\"is-solid\" [direction]=\"showHideFiltersArrowDir\"></hermes-icon>\r\n {{ showHideFiltersLabel }}\r\n </button>\r\n <button\r\n class=\"btn btn-sm btn-link btn-compact\"\r\n data-test-id=\"clear-all-button\"\r\n [attr.aria-label]=\"filterStrings.clearAllButtonAriaLabel\"\r\n (click)=\"clearAllFilters()\"\r\n >\r\n {{ filterStrings.clearAllButtonLabel }}\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\n\r\nimport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nimport { FilterMode } from './model/datagrid-filters.enums';\r\nimport { FilterablePropertyDefinition, PropertyFilter } from './model/datagrid-filters.interfaces';\r\n\r\nconst enterKey = 'Enter';\r\nconst searchTermDebounceTimeMs = 2000;\r\n\r\n/**\r\n * Component provides the ability to choose from quick filter (search)\r\n * and advanced filter (composite filters).\r\n */\r\n\r\n@Component({\r\n selector: 'appfx-datagrid-filters',\r\n standalone: false,\r\n templateUrl: 'datagrid-filters.component.html',\r\n styleUrls: ['datagrid-filters.component.scss', 'common-styles.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DataGridFiltersComponent implements OnDestroy, AfterViewInit {\r\n readonly quickMode: FilterMode = FilterMode.Quick;\r\n readonly advancedMode: FilterMode = FilterMode.Advanced;\r\n readonly advancedOnlyMode: FilterMode = FilterMode.AdvancedOnly;\r\n\r\n mode: FilterMode = FilterMode.Quick;\r\n selectedFilterMode: FilterMode = FilterMode.Quick;\r\n searchTerm: string = '';\r\n\r\n /**\r\n * Array of filterable properties\r\n */\r\n @Input() filterableProperties: FilterablePropertyDefinition[];\r\n\r\n /**\r\n * Array of pre-selected filters\r\n */\r\n @Input() presetFilters: PropertyFilter[];\r\n\r\n /**\r\n * Event emitter to tell hosting view that search term, used for filtering\r\n * has changed.\r\n */\r\n @Output() searchTermChange: EventEmitter<string> = new EventEmitter<string>();\r\n @Output() propertyFiltersChange: EventEmitter<PropertyFilter[]> = new EventEmitter<PropertyFilter[]>();\r\n\r\n private lastSearchTerm = '';\r\n // When the user is typing in the search input (filter)\r\n // the search term change event will be fired\r\n // on every 2 sec.\r\n private searchTermDebouncer: Subject<string> = new Subject<string>();\r\n private unsubscribeSubject: Subject<void> = new Subject<void>();\r\n private appliedFiltersCount = 0;\r\n\r\n constructor(public filterStrings: DatagridFiltersStrings) {}\r\n\r\n /**\r\n * Quick, Advanced or AdvancedOnly. Default Quick.\r\n */\r\n @Input()\r\n set filterMode(filterMode: FilterMode) {\r\n if (filterMode !== null && filterMode !== undefined) {\r\n this.mode = filterMode;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.searchTermDebouncer\r\n .pipe(debounceTime(searchTermDebounceTimeMs), distinctUntilChanged(), takeUntil(this.unsubscribeSubject))\r\n .subscribe((search: string) => {\r\n this.doSearch(search);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribeSubject.next();\r\n this.unsubscribeSubject.complete();\r\n }\r\n\r\n onFilterModeChange() {\r\n // Reset quick search data when switching to advanced mode\r\n if (this.selectedFilterMode === FilterMode.Advanced && !!this.searchTerm) {\r\n this.searchTerm = '';\r\n this.doSearch(this.searchTerm);\r\n // Clear debouncer last value\r\n this.searchTermDebouncer.next(this.searchTerm);\r\n }\r\n // Clear applied filters when switching to quick mode\r\n if (this.selectedFilterMode === FilterMode.Quick && this.appliedFiltersCount > 0) {\r\n this.appliedFiltersCount = 0;\r\n this.propertyFiltersChange.emit([]);\r\n }\r\n }\r\n\r\n onFilterCriteriaChange(propertyFilters: PropertyFilter[]) {\r\n this.appliedFiltersCount = propertyFilters.length;\r\n this.propertyFiltersChange.emit(propertyFilters);\r\n }\r\n\r\n onSearchInputKeyPress(event: KeyboardEvent): void {\r\n if (event.key === enterKey) {\r\n this.doSearch(this.searchTerm);\r\n }\r\n }\r\n\r\n onSearchTermChanged(searchTerm: string): void {\r\n this.searchTerm = searchTerm;\r\n this.searchTermDebouncer.next(this.searchTerm);\r\n }\r\n\r\n private doSearch(search: string) {\r\n search = search.trim();\r\n if (this.lastSearchTerm !== search) {\r\n this.lastSearchTerm = search;\r\n this.searchTermChange.emit(search);\r\n }\r\n }\r\n}\r\n","<!--\r\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n ~ This software is released under MIT license.\r\n ~ The full license information can be found in LICENSE in the root directory of this project.\r\n -->\r\n<div data-test-id=\"appfx-advanced-datagrid-filter\" class=\"filter-container\">\r\n @switch (mode) {\r\n @case (quickMode) {\r\n <label class=\"hermes-control-label form-control-compact\">\r\n {{ filterStrings.quickFilter }}\r\n </label>\r\n }\r\n @case (advancedOnlyMode) {\r\n <label class=\"hermes-control-label form-control-compact\">\r\n {{ filterStrings.advancedFilter }}\r\n </label>\r\n }\r\n @case (advancedMode) {\r\n <hermes-native-select-container class=\"form-control-compact\">\r\n <select\r\n [attr.aria-label]=\"filterStrings.filterType\"\r\n hermesNativeSelect\r\n [(ngModel)]=\"selectedFilterMode\"\r\n (ngModelChange)=\"onFilterModeChange()\"\r\n >\r\n <option [ngValue]=\"quickMode\">{{ filterStrings.quickFilter }}</option>\r\n <option [ngValue]=\"advancedMode\">{{ filterStrings.advancedFilter }}</option>\r\n </select>\r\n </hermes-native-select-container>\r\n }\r\n }\r\n @if (selectedFilterMode === quickMode && mode !== advancedOnlyMode) {\r\n <hermes-input-container class=\"ml-half form-control-compact\">\r\n <label class=\"hermes-sr-only\"> {{ filterStrings.quickFilter }} </label>\r\n <input\r\n type=\"text\"\r\n (keydown)=\"onSearchInputKeyPress($event)\"\r\n [ngModel]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchTermChanged($event)\"\r\n placeholder=\"{{ filterStrings.enterValue }}\"\r\n hermesInput\r\n />\r\n </hermes-input-container>\r\n }\r\n @if (selectedFilterMode === advancedMode || mode === advancedOnlyMode) {\r\n <appfx-composite-filter\r\n class=\"filter-contents\"\r\n [filterableProperties]=\"filterableProperties\"\r\n [presetFilters]=\"presetFilters\"\r\n (propertyFiltersChange)=\"onFilterCriteriaChange($event)\"\r\n >\r\n </appfx-composite-filter>\r\n }\r\n</div>\r\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { A11yModule as CdkA11yModule } from '@angular/cdk/a11y';\nimport { CommonModule, DatePipe } from '@angular/common';\nimport { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HermesCheckboxModule, HermesInputModule, HermesRadioModule, HermesNativeSelectModule } from '@hermes-ui/angular/forms';\nimport {\n angleIcon,\n HermesIcons,\n HermesIcon,\n filterGridIcon,\n plusIcon,\n searchIcon,\n windowCloseIcon,\n} from '@hermes-ui/angular/icon';\nimport { HermesSignpostModule } from '@hermes-ui/angular/popover/signpost';\nimport { HermesSpinnerModule } from '@hermes-ui/angular/progress/spinner';\n\nimport { DateTimeFilterComponent } from './advanced-filters/date-time-filter.component';\nimport { EnumFilterComponent } from './advanced-filters/enum-filter.component';\nimport { FilterFormComponent } from './advanced-filters/filter-form.component';\nimport { GeneralFilterComponent } from './advanced-filters/general-filter.component';\nimport { UsersFilterComponent } from './advanced-filters/users-filter.component';\nimport { CompositeFiltersComponent } from './composite-filters.component';\nimport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\nimport { DatagridFiltersUserService } from './datagrid-filters-user-service';\nimport { DataGridFiltersComponent } from './datagrid-filters.component';\nimport { FilterPopoverRepositionDirective } from './filter-popover-reposition-directive';\nimport { DismissableDirective } from './manage-filters/dismissable.directive';\nimport { ManageFilterComponent } from './manage-filters/manage-filter.component';\nimport { SkipFiltersPipe } from './skip-filters.pipe';\n\nexport function datagridFiltersStringsServiceFactory(existing: DatagridFiltersStrings) {\n return existing || new DatagridFiltersStrings();\n}\n\nexport function datagridFiltersUserServiceFactory(existing: DatagridFiltersUserService) {\n return existing || new DatagridFiltersUserService();\n}\n\n@NgModule({\n declarations: [\n CompositeFiltersComponent,\n DataGridFiltersComponent,\n DateTimeFilterComponent,\n DismissableDirective,\n EnumFilterComponent,\n FilterFormComponent,\n FilterPopoverRepositionDirective,\n GeneralFilterComponent,\n ManageFilterComponent,\n SkipFiltersPipe,\n UsersFilterComponent,\n ],\n imports: [\n CdkA11yModule,\n HermesCheckboxModule,\n HermesIcon,\n HermesInputModule,\n HermesRadioModule,\n HermesNativeSelectModule,\n HermesSignpostModule,\n HermesSpinnerModule,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n ],\n exports: [CompositeFiltersComponent, DataGridFiltersComponent, FilterFormComponent],\n providers: [\n DatePipe,\n {\n // This pattern allows the importer of this module to specify its own DatagridFiltersStrings.\n provide: DatagridFiltersStrings,\n useFactory: datagridFiltersStringsServiceFactory,\n deps: [[new Optional(), new SkipSelf(), DatagridFiltersStrings]],\n },\n {\n provide: DatagridFiltersUserService,\n useFactory: datagridFiltersUserServiceFactory,\n deps: [[new Optional(), new SkipSelf(), DatagridFiltersUserService]],\n },\n ],\n})\nexport class AppfxDatagridFiltersModule {\n constructor() {\n HermesIcons.addIcons(angleIcon, filterGridIcon, plusIcon, searchIcon, windowCloseIcon);\n }\n}\n","/*\r\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\r\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\r\n * This software is released under MIT license.\r\n * The full license information can be found in LICENSE in the root directory of this project.\r\n */\r\n\r\nexport { CompositeFiltersComponent } from './composite-filters.component';\r\nexport { DataGridFiltersComponent } from './datagrid-filters.component';\r\nexport {\r\n /**\r\n * @deprecated Use AppfxDatagridFiltersModule import instead.\r\n */\r\n AppfxDatagridFiltersModule as DatagridFiltersModule,\r\n} from './datagrid-filters.module';\r\nexport { AppfxDatagridFiltersModule } from './datagrid-filters.module';\r\nexport { DatagridFiltersStrings } from './datagrid-filters-strings.service';\r\nexport { DatagridFiltersUserService } from './datagrid-filters-user-service';\r\nexport { ComparisonOperator, FilterMode, LogicalOperator, PropertyType, Unit } from './model/datagrid-filters.enums';\r\nexport {\r\n DateTimePropertyDefinition,\r\n EnumPropertyDefinition,\r\n FilterablePropertyDefinition,\r\n NumericPropertyDefinition,\r\n PropertyFilter,\r\n PropertyPredicate,\r\n StringPropertyDefinition,\r\n UserPropertyDefinition,\r\n} from './model/datagrid-filters.interfaces';\r\n\r\n// FIXME\r\n// Unsupported private class FilterFormComponent.\r\n// This class is visible to consumers via AppfxDatagridFiltersModule -> FilterFormComponent,\r\n// but is not exported from the top-level library entrypoint.\r\nexport { FilterFormComponent } from './advanced-filters/filter-form.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DatagridFiltersStrings","i2","i3","enterKey","i3.DatagridFiltersStrings","i4","i5","i6","i7.FilterFormComponent","i2.DatagridFiltersStrings","i7","i8.FilterFormComponent","i6.FilterFormComponent","spaceKey","i3.DatagridFiltersUserService","i8","i9.FilterFormComponent","i7.DateTimeFilterComponent","i8.DismissableDirective","i9.EnumFilterComponent","i10.FilterPopoverRepositionDirective","i11.GeneralFilterComponent","i12.UsersFilterComponent","i9.DateTimeFilterComponent","i10.EnumFilterComponent","i11.FilterPopoverRepositionDirective","i12.GeneralFilterComponent","i13.ManageFilterComponent","i14.UsersFilterComponent","i15.SkipFiltersPipe","i5.CompositeFiltersComponent","CdkA11yModule"],"mappings":"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"}
|