@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.
Files changed (108) hide show
  1. package/README.md +6 -6
  2. package/button/_buttons.clarity.scss +80 -2
  3. package/button/_mixins.buttons.scss +44 -2
  4. package/button/_properties.buttons.scss +209 -247
  5. package/button/_variables.buttons.scss +22 -0
  6. package/fesm2022/hermes-ui-angular-accordion.mjs +2 -2
  7. package/fesm2022/hermes-ui-angular-accordion.mjs.map +1 -1
  8. package/fesm2022/hermes-ui-angular-addons-card-container.mjs +3 -3
  9. package/fesm2022/hermes-ui-angular-addons-card-container.mjs.map +1 -1
  10. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs +2 -2
  11. package/fesm2022/hermes-ui-angular-addons-certificate-viewer.mjs.map +1 -1
  12. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs +2 -2
  13. package/fesm2022/hermes-ui-angular-addons-datagrid-filters.mjs.map +1 -1
  14. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs +2 -2
  15. package/fesm2022/hermes-ui-angular-addons-datagrid.mjs.map +1 -1
  16. package/fesm2022/hermes-ui-angular-addons-property-view.mjs +2 -2
  17. package/fesm2022/hermes-ui-angular-addons-property-view.mjs.map +1 -1
  18. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs +66 -66
  19. package/fesm2022/hermes-ui-angular-addons-theme-builder.mjs.map +1 -1
  20. package/fesm2022/hermes-ui-angular-addons-var.mjs +2 -2
  21. package/fesm2022/hermes-ui-angular-addons-var.mjs.map +1 -1
  22. package/fesm2022/hermes-ui-angular-addons-wizard.mjs +2 -2
  23. package/fesm2022/hermes-ui-angular-addons-wizard.mjs.map +1 -1
  24. package/fesm2022/hermes-ui-angular-button.mjs +2 -2
  25. package/fesm2022/hermes-ui-angular-button.mjs.map +1 -1
  26. package/fesm2022/hermes-ui-angular-data-datagrid.mjs +2 -2
  27. package/fesm2022/hermes-ui-angular-data-datagrid.mjs.map +1 -1
  28. package/fesm2022/hermes-ui-angular-data-stack-view.mjs +2 -2
  29. package/fesm2022/hermes-ui-angular-data-stack-view.mjs.map +1 -1
  30. package/fesm2022/hermes-ui-angular-data-tree-view.mjs +2 -2
  31. package/fesm2022/hermes-ui-angular-data-tree-view.mjs.map +1 -1
  32. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs +2 -2
  33. package/fesm2022/hermes-ui-angular-emphasis-alert.mjs.map +1 -1
  34. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs +2 -2
  35. package/fesm2022/hermes-ui-angular-forms-checkbox.mjs.map +1 -1
  36. package/fesm2022/hermes-ui-angular-forms-combobox.mjs +2 -2
  37. package/fesm2022/hermes-ui-angular-forms-combobox.mjs.map +1 -1
  38. package/fesm2022/hermes-ui-angular-forms-common.mjs +2 -2
  39. package/fesm2022/hermes-ui-angular-forms-common.mjs.map +1 -1
  40. package/fesm2022/hermes-ui-angular-forms-datalist.mjs +2 -2
  41. package/fesm2022/hermes-ui-angular-forms-datalist.mjs.map +1 -1
  42. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs +3 -3
  43. package/fesm2022/hermes-ui-angular-forms-datepicker.mjs.map +1 -1
  44. package/fesm2022/hermes-ui-angular-forms-file-input.mjs +2 -2
  45. package/fesm2022/hermes-ui-angular-forms-file-input.mjs.map +1 -1
  46. package/fesm2022/hermes-ui-angular-forms-input.mjs +2 -2
  47. package/fesm2022/hermes-ui-angular-forms-input.mjs.map +1 -1
  48. package/fesm2022/hermes-ui-angular-forms-native-select.mjs +2 -2
  49. package/fesm2022/hermes-ui-angular-forms-native-select.mjs.map +1 -1
  50. package/fesm2022/hermes-ui-angular-forms-number-input.mjs +2 -2
  51. package/fesm2022/hermes-ui-angular-forms-number-input.mjs.map +1 -1
  52. package/fesm2022/hermes-ui-angular-forms-password.mjs +2 -2
  53. package/fesm2022/hermes-ui-angular-forms-password.mjs.map +1 -1
  54. package/fesm2022/hermes-ui-angular-forms-radio.mjs +2 -2
  55. package/fesm2022/hermes-ui-angular-forms-radio.mjs.map +1 -1
  56. package/fesm2022/hermes-ui-angular-forms-range.mjs +2 -2
  57. package/fesm2022/hermes-ui-angular-forms-range.mjs.map +1 -1
  58. package/fesm2022/hermes-ui-angular-forms-select.mjs +2 -2
  59. package/fesm2022/hermes-ui-angular-forms-select.mjs.map +1 -1
  60. package/fesm2022/hermes-ui-angular-forms-textarea.mjs +2 -2
  61. package/fesm2022/hermes-ui-angular-forms-textarea.mjs.map +1 -1
  62. package/fesm2022/hermes-ui-angular-icon.mjs +29 -29
  63. package/fesm2022/hermes-ui-angular-icon.mjs.map +1 -1
  64. package/fesm2022/hermes-ui-angular-layout-nav.mjs +2 -2
  65. package/fesm2022/hermes-ui-angular-layout-nav.mjs.map +1 -1
  66. package/fesm2022/hermes-ui-angular-layout-tabs.mjs +2 -2
  67. package/fesm2022/hermes-ui-angular-layout-tabs.mjs.map +1 -1
  68. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs +382 -28
  69. package/fesm2022/hermes-ui-angular-layout-vertical-nav.mjs.map +1 -1
  70. package/fesm2022/hermes-ui-angular-modal.mjs +2 -2
  71. package/fesm2022/hermes-ui-angular-modal.mjs.map +1 -1
  72. package/fesm2022/hermes-ui-angular-popover-signpost.mjs +2 -2
  73. package/fesm2022/hermes-ui-angular-popover-signpost.mjs.map +1 -1
  74. package/fesm2022/hermes-ui-angular-stepper.mjs +2 -2
  75. package/fesm2022/hermes-ui-angular-stepper.mjs.map +1 -1
  76. package/fesm2022/hermes-ui-angular-timeline.mjs +2 -2
  77. package/fesm2022/hermes-ui-angular-timeline.mjs.map +1 -1
  78. package/fesm2022/hermes-ui-angular-toast.mjs +2 -2
  79. package/fesm2022/hermes-ui-angular-toast.mjs.map +1 -1
  80. package/fesm2022/hermes-ui-angular-utils.mjs +6 -0
  81. package/fesm2022/hermes-ui-angular-utils.mjs.map +1 -1
  82. package/fesm2022/hermes-ui-angular-wizard.mjs +2 -2
  83. package/fesm2022/hermes-ui-angular-wizard.mjs.map +1 -1
  84. package/forms/combobox/_combobox.clarity.scss +18 -4
  85. package/forms/combobox/_properties.combobox.scss +5 -5
  86. package/forms/styles/_input-group.clarity.scss +7 -0
  87. package/forms/styles/_mixins.forms.scss +12 -10
  88. package/forms/styles/_native-select.clarity.scss +17 -5
  89. package/forms/styles/_properties.forms.scss +29 -18
  90. package/forms/styles/_textarea.clarity.scss +4 -4
  91. package/forms/styles/_variables.forms.scss +6 -0
  92. package/layout/main-container/_properties.header.scss +44 -6
  93. package/layout/main-container/_variables.header.scss +11 -0
  94. package/layout/nav/_header.clarity.scss +14 -0
  95. package/layout/nav/_mixins.header.scss +55 -40
  96. package/layout/nav/_responsive-nav.clarity.scss +21 -10
  97. package/layout/vertical-nav/_properties.vertical-nav.scss +77 -27
  98. package/layout/vertical-nav/_variables.vertical-nav.scss +23 -0
  99. package/layout/vertical-nav/_vertical-nav.clarity.scss +418 -277
  100. package/package.json +1 -1
  101. package/types/hermes-ui-angular-addons-theme-builder.d.ts +2 -2
  102. package/types/hermes-ui-angular-addons-theme-builder.d.ts.map +1 -1
  103. package/types/hermes-ui-angular-icon.d.ts +3 -3
  104. package/types/hermes-ui-angular-icon.d.ts.map +1 -1
  105. package/types/hermes-ui-angular-layout-vertical-nav.d.ts +134 -10
  106. package/types/hermes-ui-angular-layout-vertical-nav.d.ts.map +1 -1
  107. package/types/hermes-ui-angular-utils.d.ts +12 -0
  108. package/types/hermes-ui-angular-utils.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hermes-ui-angular-addons-datagrid.mjs","sources":["../../../addons/datagrid/addons/action-bar/datagrid-action-bar.component.ts","../../../addons/datagrid/addons/action-bar/datagrid-action-bar.component.html","../../../addons/datagrid/addons/export/export-type.ts","../../../addons/datagrid/addons/export/export.interface.ts","../../../addons/datagrid/interfaces/tokens.ts","../../../addons/datagrid/addons/export/csv-helper.service.ts","../../../addons/datagrid/i18n/datagrid-strings.service.ts","../../../addons/datagrid/addons/export/export-provider.service.ts","../../../addons/datagrid/id-generator/id-generator.ts","../../../addons/datagrid/utils/property-resolver.util.ts","../../../addons/datagrid/preserve-selection/datagrid-preserve-selection.directive.ts","../../../addons/datagrid/shared/action/action-definition.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.helpers.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.service.ts","../../../addons/datagrid/addons/column-ordering/column-order.directive.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.directive.ts","../../../addons/datagrid/filters/datagrid-filter.component.ts","../../../addons/datagrid/datagrid-cell-container.component.ts","../../../addons/datagrid/addons/column-toggle/datagrid-column-toggle.component.ts","../../../addons/datagrid/addons/column-toggle/datagrid-column-toggle.component.html","../../../addons/datagrid/filters/datagrid-filter-container.component.ts","../../../addons/datagrid/addons/export/export-datagrid.component.ts","../../../addons/datagrid/addons/export/export-datagrid.component.html","../../../addons/datagrid/pipes/is-row-selectable.pipe.ts","../../../addons/datagrid/datagrid.component.ts","../../../addons/datagrid/datagrid.component.html","../../../addons/datagrid/addons/datagrid-page/datagrid-page.directive.ts","../../../addons/datagrid/addons/persist-settings/appfx-datagrid-persist-settings.token.ts","../../../addons/datagrid/addons/persist-settings/datagrid-persist-settings.directive.ts","../../../addons/datagrid/addons/user-preferences/appfx-datagrid-user-preferences.token.ts","../../../addons/datagrid/addons/user-preferences/datagrid-content-no-wrap.directive.ts","../../../addons/datagrid/comparators/field-list.comparator.ts","../../../addons/datagrid/comparators/simple-numeric-comparator.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.module.ts","../../../addons/datagrid/datagrid.module.ts","../../../addons/datagrid/datagrid-feature-states.service.ts","../../../addons/datagrid/filters/string-filters.ts","../../../addons/datagrid/index.ts","../../../addons/datagrid/hermes-ui-angular-addons-datagrid.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\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n SimpleChange,\r\n SimpleChanges,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { ElementResizeService } from '@hermes-ui/angular/addons/a11y';\r\nimport { BehaviorSubject, interval, Subscription } from 'rxjs';\r\nimport { debounce } from 'rxjs/operators';\r\n\r\nimport { ActionDefinition } from '../../shared/action/action-definition';\r\n\r\nconst resources = {\r\n dropdownToggleWidthInRem: 3, // '...' button occupies max dropdownToggleWidthInRem rems in width\r\n layoutChangesDebounceDuration: 10,\r\n};\r\n\r\n@Component({\r\n selector: 'appfx-datagrid-action-bar',\r\n standalone: false,\r\n templateUrl: 'datagrid-action-bar.component.html',\r\n styleUrls: ['datagrid-action-bar.component.scss'],\r\n})\r\nexport class DatagridActionBarComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n @ViewChildren('actionBtn', { read: ElementRef }) queryActionBtnElementList: QueryList<ElementRef<HTMLButtonElement>>;\r\n @Input() actions: ActionDefinition[];\r\n\r\n @Input() btnLayout = 'flex';\r\n\r\n @Input() dropdownOrientation = 'bottom-left';\r\n\r\n @Output() invokeAction: EventEmitter<ActionDefinition> = new EventEmitter();\r\n\r\n readonly actionsSubject = new BehaviorSubject<ActionDefinition[]>([]);\r\n readonly actions$ = this.actionsSubject.asObservable();\r\n\r\n isDropdownOpened = false;\r\n\r\n private listOfWidths: number[] = [];\r\n\r\n #subscription: Subscription;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private el: ElementRef<HTMLElement>,\r\n private elementResizeService: ElementResizeService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.updateLayout();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const resize$ = this.elementResizeService.getResizeObservable(this.el.nativeElement as HTMLElement);\r\n\r\n this.#subscription = resize$\r\n .pipe(debounce(() => interval(resources.layoutChangesDebounceDuration)))\r\n .subscribe(() => this.updateLayout());\r\n\r\n this.updateLayout();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.#subscription && !this.#subscription.closed) {\r\n this.#subscription.unsubscribe();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['actions'] && changes['actions'].currentValue) {\r\n if (this.isActionsIdsEqual(changes['actions'])) {\r\n this.restoreVisible(changes['actions'].previousValue as ActionDefinition[]);\r\n } else {\r\n // actions with different ids are treated as a new list of actions\r\n this.initActionsVisibility();\r\n // update the width of each action btn with the new one\r\n this.cdr.detectChanges();\r\n this.updateListOfWidths();\r\n this.updateLayout();\r\n }\r\n }\r\n }\r\n\r\n getDropdownActions(): ActionDefinition[] {\r\n return this.actions.filter((action: ActionDefinition) => !action.isVisible);\r\n }\r\n\r\n hasDropdownActions(): boolean {\r\n return this.getDropdownActions().length > 0;\r\n }\r\n\r\n onActionClick(action: ActionDefinition): void {\r\n if (action.enabled) {\r\n this.invokeAction.emit(action);\r\n }\r\n }\r\n\r\n /**\r\n * Derives the base root element size (REM) in pixels.\r\n */\r\n deriveBaseRootElementSize(): number {\r\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue('font-size'), 10);\r\n }\r\n\r\n private isActionsIdsEqual(change: SimpleChange): boolean {\r\n if (!change.previousValue) {\r\n return false;\r\n }\r\n\r\n const a: ActionDefinition[] = change.currentValue;\r\n const b: ActionDefinition[] = change.previousValue;\r\n\r\n const aLength: number = a.length;\r\n const bLength: number = b.length;\r\n\r\n if (aLength !== bLength) {\r\n return false;\r\n }\r\n\r\n return (\r\n a.reduce(\r\n (length: number, aValue: ActionDefinition, i: number): number => (aValue.id === b[i].id ? length - 1 : length),\r\n aLength\r\n ) === 0\r\n );\r\n }\r\n\r\n private initActionsVisibility(): void {\r\n this.actions.forEach((action: ActionDefinition) => {\r\n if (action.isVisible !== false) {\r\n action.isVisible = true;\r\n }\r\n });\r\n this.actionsSubject.next(this.actions);\r\n }\r\n\r\n private restoreVisible(fromPrevious: ActionDefinition[]): void {\r\n if (fromPrevious.length !== this.actions.length) {\r\n return;\r\n }\r\n fromPrevious.forEach((action: ActionDefinition, i: number) => (this.actions[i].isVisible = action.isVisible));\r\n this.actionsSubject.next(this.actions);\r\n }\r\n\r\n private updateListOfWidths(): void {\r\n this.listOfWidths.length = 0;\r\n this.queryActionBtnElementList.forEach(btnElementRef =>\r\n this.listOfWidths.push(btnElementRef.nativeElement.offsetWidth)\r\n );\r\n }\r\n\r\n private updateLayout(): void {\r\n // If offset is 0, the element is not yet fully loaded, so no need to update the layout\r\n if (this.el.nativeElement.offsetWidth) {\r\n const dropdownToggleWidthInPx = this.deriveBaseRootElementSize() * resources.dropdownToggleWidthInRem;\r\n const maxWidth: number = this.el.nativeElement.offsetWidth - dropdownToggleWidthInPx;\r\n // choose which action button is within the dropdown or not\r\n let totalWidth = 0;\r\n this.listOfWidths.forEach((actionBtnWidth: number, i: number) => {\r\n totalWidth += actionBtnWidth;\r\n this.actions[i].isVisible = totalWidth < maxWidth;\r\n });\r\n // if the dropdown is opened while the browser window is resized then collapse the dropdown\r\n if (this.isDropdownOpened) {\r\n this.isDropdownOpened = false;\r\n }\r\n this.actionsSubject.next(this.actions);\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 class=\"btn-group\" [ngClass]=\"{ 'btn-flex': btnLayout === 'flex', 'btn-inline': btnLayout === 'inline' }\">\r\n @for (action of actions$ | async; track action; let i = $index) {\r\n @if (action.children && action.isVisible) {\r\n <hermes-dropdown [hermesCloseMenuOnItemClick]=\"true\" #actionBtn [class]=\"i === 0 ? 'has-border-left' : ''\">\r\n <button\r\n type=\"button\"\r\n hermesDropdownTrigger\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [disabled]=\"!action.enabled\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n <hermes-icon shape=\"angle\" direction=\"down\"></hermes-icon>\r\n </button>\r\n <hermes-dropdown-menu *hermesIfOpen [hermesPosition]=\"dropdownOrientation\">\r\n @for (childAction of action.children; track childAction) {\r\n <button\r\n hermesDropdownItem\r\n type=\"button\"\r\n (click)=\"onActionClick(childAction)\"\r\n [title]=\"childAction.tooltip\"\r\n [attr.data-test-id]=\"childAction.id\"\r\n [hermesDisabled]=\"!childAction.enabled\"\r\n [ngClass]=\"childAction.class\"\r\n >\r\n {{ childAction.label }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n }\r\n @if (!action.children && action.isVisible) {\r\n <button\r\n type=\"button\"\r\n #actionBtn\r\n (click)=\"onActionClick(action)\"\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [disabled]=\"!action.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n }\r\n\r\n <!-- Process the hidden actions due to not enough space on the screen -->\r\n @if (hasDropdownActions()) {\r\n <hermes-dropdown class=\"dropdown-container\" [hermesCloseMenuOnItemClick]=\"true\">\r\n <button type=\"button\" hermesDropdownTrigger [ngClass]=\"actions[0].class\">\r\n <hermes-icon shape=\"ellipsis-horizontal\"></hermes-icon>\r\n </button>\r\n <ng-template [(hermesIfOpen)]=\"isDropdownOpened\">\r\n <hermes-dropdown-menu hermesPosition=\"bottom-right\">\r\n @for (action of getDropdownActions(); track action) {\r\n <!-- Action has children - show a nested dropdown -->\r\n @if (action.children) {\r\n <hermes-dropdown [hermesCloseMenuOnItemClick]=\"true\" #actionBtn>\r\n <button\r\n type=\"button\"\r\n hermesDropdownTrigger\r\n class=\"\"\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [disabled]=\"!action.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n <hermes-icon shape=\"caret\" direction=\"down\"></hermes-icon>\r\n </button>\r\n <hermes-dropdown-menu *hermesIfOpen hermesPosition=\"bottom-right\">\r\n @for (childAction of action.children; track childAction) {\r\n <button\r\n hermesDropdownItem\r\n type=\"button\"\r\n (click)=\"onActionClick(childAction)\"\r\n [title]=\"childAction.tooltip\"\r\n [attr.data-test-id]=\"childAction.id\"\r\n [hermesDisabled]=\"!childAction.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [ngClass]=\"childAction.class\"\r\n >\r\n {{ childAction.label }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n }\r\n <!-- Action has no children -->\r\n @if (!action.children) {\r\n <button\r\n hermesDropdownItem\r\n type=\"button\"\r\n (click)=\"onActionClick(action)\"\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [disabled]=\"!action.enabled\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n }\r\n </hermes-dropdown-menu>\r\n </ng-template>\r\n </hermes-dropdown>\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\n/**\r\n * Defining the three export types, selected export option is passed to Datagrid Export Component\r\n * @type {{ALL: string; SELECTED_ONLY: string; MATCHING_FILTERS: string}}\r\n */\r\nexport enum ExportType {\r\n ALL = 'ALL',\r\n SELECTED_ONLY = 'SELECTED_ONLY',\r\n MATCHING_FILTERS = 'MATCHING_FILTERS',\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 { ExportType } from './export-type';\r\nimport { ColumnSortOrder } from '../../interfaces/column-state';\r\n\r\nexport interface DatagridItemSet {\r\n totalDatagridItems: any[];\r\n selectedItems: any[];\r\n filteredDatagridItems: any[];\r\n}\r\n\r\nexport interface ExportValueCallbackParams {\r\n item: any;\r\n field: string;\r\n itemValue: any;\r\n}\r\n\r\nexport type SortFunction = (items: any[], sortOrder?: ColumnSortOrder) => any[];\r\n\r\n/**\r\n * Configuration for client-side data export.\r\n * Defines export settings such as file name and columns to be exported,\r\n * whether the export is custom (will be made by host component), count of all items (valuable for client-side grids in which data are filtered)\r\n * and how to sort the exported items.\r\n */\r\nexport interface ClientSideExportConfig {\r\n exportedFileName: string;\r\n columnDefinitions: ExportColumnDefinition[];\r\n customExport?: boolean;\r\n allItemsCount?: number;\r\n /**\r\n * If true, the export service will sort the items before exporting them\r\n * using the sortOrder field and the provided sortFunction. If the sort function\r\n * is not provided, we will use the internal sortExportedItems function.\r\n */\r\n sort?: boolean;\r\n /**\r\n * Column sort order is set by the grid when the user clicks on a column or when\r\n * ClientSideExportConfig is created. It is provided to SortFunction.\r\n *\r\n */\r\n sortOrder?: ColumnSortOrder;\r\n /**\r\n * Custom sort function, which can be used for sorting the items before exporting them.\r\n */\r\n sortFunction?: SortFunction;\r\n}\r\n\r\n/**\r\n * Represents the status of an export operation.\r\n */\r\nexport interface ExportStatus {\r\n /**\r\n * Specifies the type of export operation being performed.\r\n * @See ExportType {{ALL: string; SELECTED_ONLY: string; MATCHING_FILTERS: string}}\r\n */\r\n exportType: ExportType;\r\n\r\n /**\r\n * Indicates whether the export operation is currently in progress.\r\n */\r\n inProgress?: boolean;\r\n}\r\n\r\n/**\r\n * Defines a column structure for Export\r\n */\r\nexport interface ExportColumnDefinition {\r\n /**\r\n * The text for the column header\r\n */\r\n displayName: string;\r\n /**\r\n * field: The name of the property that this column represents.\r\n * Note: Make sure that the field property in Column Definitions are the same as used in rows for grid values.\r\n *\r\n * See Example:->\r\n * Columns: [ { 'field': 'name', 'displayName': 'Name', 'exportProperty': true },\r\n * { 'field': 'id', 'displayName': 'id', 'exportProperty': false },\r\n * { 'field': 'version', 'displayName': 'Version No.', 'exportProperty': true } ]\r\n * Rows: [ { 'name': 'Item A', 'id': 'item1', 'version': '1.0.1' },\r\n * { 'name': 'Item B', 'id': 'item2', 'version': '1.0.2' } ]\r\n */\r\n field: string;\r\n /**\r\n * Whether to export this property or not\r\n */\r\n getExportValue?: any;\r\n}\r\n\r\nexport const defaultFileExtension = '.csv';\r\nexport const defaultFileName = 'exportedData';\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 { InjectionToken } from '@angular/core';\r\n\r\n// Injectable service contract for app-specific code that can log and present error notifications\r\nexport const appfxDatagridErrorNotifiableToken = new InjectionToken<ErrorNotifiable>(\r\n 'notifier service that presents errors whenever an unrecoverable event occurs within grid'\r\n);\r\n\r\n// Interface defining the contract for services that can dispatch error notifications.\r\nexport interface ErrorNotifiable {\r\n notifyError(title: string, message: string): void;\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 { ExportColumnDefinition } from './export.interface';\r\n\r\n/**\r\n * Helper functions to convert data into CSV format\r\n */\r\n@Injectable()\r\nexport class CsvHelperService {\r\n getData(rows: any[], columns: ExportColumnDefinition[]): string {\r\n let columnCsvData = '',\r\n rowsCsvData = '';\r\n if (columns) {\r\n columnCsvData = this.getColumnDataFromColumnDef(columns);\r\n rowsCsvData = this.getRowDataFromColumnDef(rows, columns);\r\n }\r\n\r\n const csvData: string = columnCsvData + rowsCsvData;\r\n return csvData;\r\n }\r\n\r\n getColumnDataFromColumnDef(columnDefinitions: ExportColumnDefinition[]): string {\r\n const columnNames: string[] = [];\r\n for (const columnDef of columnDefinitions) {\r\n const columnName = this.toCsvFormat(columnDef.displayName.toString());\r\n columnNames.push(columnName);\r\n }\r\n const columnCsvData: string = columnNames.join(',') + '\\n';\r\n return columnCsvData;\r\n }\r\n\r\n getRowDataFromColumnDef(exportItems: any[], columnDefinitions: ExportColumnDefinition[]): string {\r\n let rowsCsvData = '';\r\n for (const item of exportItems) {\r\n const rowValues: string[] = [];\r\n for (const columnDef of columnDefinitions) {\r\n let exportValue = '';\r\n const itemValue = this.getItemValueFromColumnField(item, columnDef.field);\r\n\r\n if (!itemValue) {\r\n exportValue = '';\r\n } else {\r\n exportValue = itemValue.toString();\r\n }\r\n exportValue = this.toCsvFormat(exportValue);\r\n rowValues.push(exportValue);\r\n }\r\n rowsCsvData += rowValues.join(',') + '\\n';\r\n }\r\n return rowsCsvData;\r\n }\r\n\r\n toCsvFormat(itemValue: string): string {\r\n if (itemValue.indexOf('\"') > -1) {\r\n itemValue = itemValue.replace(/\"/g, '\"\"');\r\n }\r\n itemValue = '\"' + itemValue.toString() + '\"';\r\n return itemValue;\r\n }\r\n\r\n /** To extract value from nested JSON objects.\"\r\n * Example =>\r\n * JSON object to extract value from => { product: {cost: {limit: 100, lowestValue: 0 }}}\r\n * Field format => \"product.cost.limit'\r\n * Value returned => 100\r\n */\r\n private getItemValueFromColumnField(item: any, field: string): any {\r\n if (field.indexOf('.') > 0) {\r\n const fieldNames = field.split('.');\r\n let itemValue = item;\r\n for (const str of fieldNames) {\r\n itemValue = itemValue[str];\r\n if (!itemValue) {\r\n itemValue = item[field];\r\n break;\r\n }\r\n }\r\n return itemValue;\r\n }\r\n return item[field];\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\n\r\n/**\r\n * User-visible strings used in the 'datagrid' library.\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 the library\r\n *\r\n * ```\r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DatagridStrings, useClass: LocalizedDatagridStrings },\r\n * ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DatagridStrings {\r\n /**\r\n * Text displayed inside the grid when the grid is empty.\r\n */\r\n noItemsFound = 'No items found';\r\n\r\n /**\r\n * Label of the column toggle buttons.\r\n */\r\n showColumns = 'Show Columns';\r\n\r\n /**\r\n * Label of the button (inside column toggle) that selects all columns.\r\n */\r\n selectAll = 'Select All';\r\n\r\n /**\r\n * Tooltip for Show Columns toggle button\r\n */\r\n pickColumns = 'Manage Columns';\r\n\r\n /**\r\n * Datagrid Show columns menu description\r\n */\r\n showColumnsMenuDescription = 'Show columns menu description';\r\n\r\n /**\r\n * Datagrid Show columns / All columns selected confirmation\r\n */\r\n allColumnsSelected = 'Select all columns';\r\n\r\n /**\r\n * Footer label to display.\r\n * Can contain up to 3 placeholders:\r\n * {0} - total items count\r\n * {1} - index of first item of the current page (if paging is used)\r\n * {2} - index of last item of the current page (if paging is used)\r\n *\r\n * @example\r\n * footer = \"Apples and bananas\";\r\n * footer = \"{0} apples\";\r\n * footer = \"{1} - {2} of {0} apples\"\r\n *\r\n * If not set, the grid will automatically show one of the following strings:\r\n * @see singleItem: if there is only 1 item in the grid<br/>\r\n * @see multipleItems: if there are many items and data is not paged<br/>\r\n * @see pagedItems: if there is paging enabled\r\n */\r\n footer?: string;\r\n\r\n /**\r\n * Footer label displayed when there is a single item.\r\n * @example \"1 item\"\r\n */\r\n singleItem = '1 item';\r\n\r\n /**\r\n * Footer label to display total items count.\r\n * @example \"{0} items\"\r\n */\r\n multipleItems = '{0} items';\r\n\r\n /**\r\n * Footer label when using pagination.\r\n * @example \"{1} - {2} of {0} items\"\r\n */\r\n pagedItems = '{1} - {2} of {0} items';\r\n\r\n /**\r\n * Label for page size selector.\r\n */\r\n itemsPerPage = 'Items per page';\r\n\r\n /**\r\n * Title of the export button.\r\n */\r\n exportLink = 'Export';\r\n\r\n /**\r\n * Title of 'Export > Export All' option.\r\n */\r\n exportAll = 'All Rows';\r\n\r\n /**\r\n * Title of 'Export > Matching Filters' option.\r\n */\r\n exportMatchingFilters = 'Matching Filters';\r\n\r\n /**\r\n * Title of 'Export > Selected Rows' option.\r\n */\r\n exportSelectedRows = 'Selected Rows';\r\n\r\n /**\r\n * Error message displayed in case of error during data export.\r\n */\r\n exportErrorMessage = 'Sorry, the data could not be exported at the moment due to some internal error.';\r\n\r\n /**\r\n * Title of the error dialog displayed in case of error during data export.\r\n */\r\n exportErrorTitle = 'Export Data Failure';\r\n\r\n /**\r\n * Text for close button of column toggler on 4x zoom\r\n */\r\n closeColumnTogglerText = 'Close';\r\n\r\n /**\r\n * Label of the button for deselecting all rows.\r\n */\r\n deselectAll = 'Deselect All';\r\n\r\n /**\r\n * Details pane label for the collapsed button.\r\n * @example \"Expand the details pane for the {0} item\"\r\n */\r\n expandDetailsPaneLabel = 'Expand the details pane for the {0} item';\r\n\r\n /**\r\n * Details pane label for the expanded button.\r\n * @example \"Collapse the details pane for the {0} item\"\r\n */\r\n collapseDetailsPaneLabel = 'Collapse the details pane for the {0} item';\r\n\r\n /**\r\n * Placeholder text for the filter input in each filterable column.\r\n * @example \"Filter items\"\r\n */\r\n filterPlaceholder = 'Filter Items';\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 { ElementRef, Inject, Injectable, Optional, Renderer2 } from '@angular/core';\r\nimport { HermesDatagridSortOrder } from '@hermes-ui/angular/data/datagrid';\r\n\r\nimport { CsvHelperService } from './csv-helper.service';\r\nimport { ExportType } from './export-type';\r\nimport {\r\n ClientSideExportConfig,\r\n DatagridItemSet,\r\n defaultFileExtension,\r\n defaultFileName,\r\n ExportStatus,\r\n} from './export.interface';\r\nimport { DatagridStrings } from '../../i18n/datagrid-strings.service';\r\nimport { ColumnSortOrder } from '../../interfaces/column-state';\r\nimport { appfxDatagridErrorNotifiableToken, ErrorNotifiable } from '../../interfaces/tokens';\r\n\r\n@Injectable()\r\nexport class ExportProviderService {\r\n constructor(\r\n private csvHelperService: CsvHelperService,\r\n private renderer: Renderer2,\r\n private elementRef: ElementRef,\r\n private dgStrings: DatagridStrings,\r\n @Optional()\r\n @Inject(appfxDatagridErrorNotifiableToken)\r\n private errorNotifiableService: ErrorNotifiable\r\n ) {}\r\n\r\n exportUIOnlyData(\r\n datagridProperties: ClientSideExportConfig,\r\n exportStatus: ExportStatus,\r\n datagridItemSet: DatagridItemSet\r\n ): void {\r\n try {\r\n exportStatus.inProgress = true;\r\n\r\n let exportItems = datagridItemSet.totalDatagridItems;\r\n if (exportStatus.exportType === ExportType.SELECTED_ONLY) {\r\n exportItems = datagridItemSet.selectedItems;\r\n } else if (exportStatus.exportType === ExportType.MATCHING_FILTERS) {\r\n exportItems = datagridItemSet.filteredDatagridItems;\r\n }\r\n\r\n if (exportItems.length > 1 && datagridProperties.sort) {\r\n const sortFunction = datagridProperties.sortFunction || this.sortExportedItems;\r\n exportItems = sortFunction(exportItems, datagridProperties.sortOrder as ColumnSortOrder);\r\n }\r\n\r\n const csvData = this.csvHelperService.getData(exportItems, datagridProperties?.columnDefinitions || []);\r\n\r\n exportStatus.inProgress = false;\r\n this.downloadFile(csvData, datagridProperties.exportedFileName);\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n } catch (exception) {\r\n exportStatus.inProgress = false;\r\n this.showExportError();\r\n }\r\n }\r\n\r\n /**\r\n * Function to create a CSV file from CsvData and download it\r\n */\r\n downloadFile(csvData: string, exportedFileName?: string) {\r\n try {\r\n const blob = new Blob([csvData], { type: 'text/plain' });\r\n let fileName = defaultFileName + defaultFileExtension;\r\n if (exportedFileName) {\r\n fileName = exportedFileName + defaultFileExtension;\r\n }\r\n\r\n const csvDataUrl = URL.createObjectURL(blob);\r\n const downloadLink = this.renderer.createElement('a');\r\n downloadLink.setAttribute('href', csvDataUrl);\r\n downloadLink.setAttribute('download', fileName);\r\n this.renderer.appendChild(this.elementRef.nativeElement, downloadLink);\r\n downloadLink.click();\r\n\r\n setTimeout(() => {\r\n this.renderer.removeChild(this.elementRef.nativeElement, downloadLink);\r\n URL.revokeObjectURL(csvDataUrl);\r\n downloadLink.remove();\r\n }, 100);\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n } catch (exception) {\r\n this.showExportError();\r\n }\r\n }\r\n\r\n private showExportError(): void {\r\n if (this.errorNotifiableService) {\r\n this.errorNotifiableService.notifyError(this.dgStrings.exportErrorTitle, this.dgStrings.exportErrorMessage);\r\n } else {\r\n console.error(this.dgStrings.exportErrorTitle, this.dgStrings.exportErrorMessage);\r\n }\r\n }\r\n\r\n /**\r\n * Sort function used internally from ExportProviderService to sort exported items.\r\n */\r\n private sortExportedItems(gridItems: any[], sortOrder: ColumnSortOrder) {\r\n if (!sortOrder) {\r\n return gridItems;\r\n }\r\n const forField = sortOrder.column.field;\r\n const sortedItems = gridItems.sort((a: any, b: any): number => {\r\n if (!Object.prototype.hasOwnProperty.call(a, forField) || !Object.prototype.hasOwnProperty.call(b, forField)) {\r\n return 0;\r\n }\r\n const valA = (a as any)[forField];\r\n const valB = (b as any)[forField];\r\n if (valA === null || valA === undefined) {\r\n if (valB === null || valB === undefined) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n if (valB === null || valB === undefined) {\r\n return -1;\r\n }\r\n\r\n return valA.localeCompare(valB);\r\n });\r\n\r\n return sortOrder.sortOrder === HermesDatagridSortOrder.DESC ? sortedItems.reverse() : sortedItems;\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 { FactoryProvider, InjectionToken } from '@angular/core';\r\n\r\n// Variable to keep track of unique ID instances\r\n// Using BigInt to avoid overflow.\r\nlet instancesCount = BigInt(0);\r\n\r\nexport const uniqueIdToken: InjectionToken<string> = new InjectionToken('UID generator');\r\nexport const uniqueIdProvider: FactoryProvider = {\r\n provide: uniqueIdToken,\r\n useFactory: uniqueIdFactory,\r\n};\r\n\r\nfunction uniqueIdFactory(): string {\r\n return `${instancesCount++}`;\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/**\r\n * Result of a nested property resolution.\r\n */\r\nexport type PropertyResolutionResult<T = unknown> = { isValid: true; value: T } | { isValid: false };\r\n\r\n/**\r\n * Safely resolves a nested property path (e.g., \"a.b.c\") on an object.\r\n *\r\n * @param item The object to resolve the property on.\r\n * @param propertyPath The dot-separated property path.\r\n * @returns An object containing the resolved value and a boolean indicating if the path was valid.\r\n */\r\nexport function getNestedProperty<T = unknown>(item: any, propertyPath: string): PropertyResolutionResult<T> {\r\n if (!item || !propertyPath) {\r\n return { isValid: false };\r\n }\r\n\r\n let isValid = true;\r\n const value = propertyPath.split('.').reduce((o: any, i: string) => {\r\n if (o !== null && o !== undefined && typeof o === 'object' && i in o) {\r\n return o[i];\r\n }\r\n isValid = false;\r\n return undefined;\r\n }, item);\r\n\r\n return isValid ? { isValid: true, value: value as T } : { isValid: false };\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 AfterViewInit,\r\n Directive,\r\n EventEmitter,\r\n Host,\r\n Inject,\r\n InjectionToken,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TrackByFunction,\r\n} from '@angular/core';\r\nimport { SelectionType } from '@hermes-ui/angular/data/datagrid';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { getNestedProperty } from '../utils/property-resolver.util';\r\n\r\nexport interface PreselectableComponent {\r\n trackByGridItemProperty: string;\r\n trackByFunction: TrackByFunction<any>;\r\n selectionType: SelectionType;\r\n selectedItems: any[];\r\n serverDrivenDatagrid: boolean;\r\n gridItemsChange: EventEmitter<any[]>;\r\n /**\r\n * Handles datagrid selected items changes.\r\n */\r\n onSelectedItemsChange: (selectedItems: any[]) => void;\r\n}\r\n\r\n/**\r\n * The problem we want to solve with the common interface and the token below:\r\n * We don't want this directive to enumerate all its host components by type\r\n * because we don't want to import and thus depend on components which might\r\n * use the directive. To reverse the dependency, we use the token. Each\r\n * component which might host this directive should provide itself as the token.\r\n */\r\nexport const appfxPreselectableComponentToken = new InjectionToken<PreselectableComponent>(\r\n 'PRESELECTABLE_COMPONENT_TOKEN'\r\n);\r\n\r\n/**\r\n * Preserves selection of datagrid and datagrid-detail by tracking whether some\r\n * grid item should be selected on the base of the a set \"trackByGridItemProperty\"\r\n * input of the datagrid or with the help of the \"trackByFunction\" function\r\n * input of the datagrid.\r\n *\r\n * After global refresh the data grid receives new items and the selection is lost\r\n * because the grid doesn't know how to recognize which of the new items are the old one\r\n * selected before global refresh. This directive tracks the selected items by property and\r\n * when the grid receives new data update the selected items array with the items from the\r\n * the new grid data.\r\n *\r\n * The server-side driven data grid doesn't receive all data. The directive in this case will\r\n * update only the items which can be found among the new grid items and leave\r\n * the old ones which it can't find in the selected grid items array. In this case, the component\r\n * which host the appfx datagrid has responsibility to remove the old selected items which are\r\n * not applicable for selection after grid data has been updated.\r\n *\r\n * How to use it\r\n *\r\n * <appfx-datagrid [appfxPreserveSelection] =\"'hostObjectId'\" [gridItems]=\"gridItems\" ....>\r\n *\r\n * <appfx-datagrid appfxPreserveSelection [trackByGridItemProperty]=\"'hostObjectId'\" [gridItems]=\"gridItems\" ....>\r\n *\r\n * <appfx-datagrid appfxPreserveSelection [trackByFunction]=\"<function>\" [gridItems]=\"gridItems\" ....>\r\n *\r\n * Where function receives as an argument datagrid item and returns unique identifier for it.\r\n */\r\n@Directive({\r\n selector: '[appfxPreserveSelection]',\r\n standalone: false,\r\n})\r\nexport class DatagridPreserveSelectionDirective implements AfterViewInit, OnDestroy {\r\n /**\r\n * preserveSelection - needed mainly because of list-view component and\r\n * indicates whether grid should preserve the selection based on 'trackByFunction' or\r\n * 'trackByGridItemProperty'.\r\n */\r\n @Input() preserveExistingSelection = true;\r\n\r\n @Output() selectedItemsUpdated = new EventEmitter<any[]>();\r\n\r\n private component: PreselectableComponent;\r\n\r\n private selectBy: string | TrackByFunction<any>;\r\n\r\n private gridItemChangeSub: Subscription;\r\n\r\n constructor(\r\n @Inject(appfxPreselectableComponentToken)\r\n @Host()\r\n public preselectableComponent: PreselectableComponent\r\n ) {\r\n this.component = preselectableComponent;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.preserveExistingSelection) {\r\n this.selectBy = this.component.trackByGridItemProperty || this.component.trackByFunction;\r\n if (!this.selectBy) {\r\n throw Error(\r\n 'The \"preserveSelection\" directive is not initialized correctly. Provide \"trackByFunction\" or ' +\r\n ' \"trackByGridItemProperty\" of the appfx datagrid.'\r\n );\r\n }\r\n this.gridItemChangeSub = this.component.gridItemsChange.subscribe((items: any[]) => {\r\n if (this.component.selectionType !== SelectionType.None && this.component.selectedItems?.length > 0) {\r\n this.updateSelectedItems(items);\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.gridItemChangeSub) {\r\n this.gridItemChangeSub.unsubscribe();\r\n }\r\n }\r\n\r\n updateSelectedItems(items: any[]): void {\r\n let selectedItems;\r\n if (this.component.serverDrivenDatagrid) {\r\n // TODO: Delete this when https://github.com/vmware/clarity/issues/4903 is resolved.\r\n selectedItems = this.findAndUpdateSelectedItems(items);\r\n } else {\r\n // TODO: When https://github.com/vmware/clarity/issues/4786 is resolved\r\n // check if selection works without this directive for client side\r\n // datagrid and delete this.\r\n selectedItems = this.findSelectedItems(items);\r\n }\r\n\r\n if (this.selectedItemsUpdated.observers.length > 0) {\r\n this.selectedItemsUpdated.emit(selectedItems);\r\n } else {\r\n this.component.selectedItems = selectedItems;\r\n }\r\n }\r\n\r\n private findSelectedItems(items: any[]): any[] {\r\n const selectedItemsDic = this.createSelectedItemsDictionary();\r\n return items.filter((item: any) => {\r\n const itemPropertyValue = this.getItemUniquePropertyValue(item);\r\n return selectedItemsDic.has(itemPropertyValue);\r\n });\r\n }\r\n\r\n private findAndUpdateSelectedItems(items: any[]): any[] {\r\n // We need to preserve the order of selected items due to strange implementation\r\n // of selection in the clarity datagrid\r\n const selectedItems: any[] = [];\r\n const selectedItemIndexByRef = new Map<string, any>();\r\n const selectedItemsDic = this.createSelectedItemsDictionary(selectedItems, selectedItemIndexByRef);\r\n\r\n items.forEach((item: any) => {\r\n const itemPropertyValue = this.getItemUniquePropertyValue(item);\r\n if (selectedItemsDic.has(itemPropertyValue)) {\r\n const index = selectedItemIndexByRef.get(itemPropertyValue);\r\n selectedItems[index] = item;\r\n }\r\n });\r\n return selectedItems;\r\n }\r\n\r\n private createSelectedItemsDictionary(\r\n selectedItems?: any[],\r\n selectedItemIndexByRef?: Map<string, any>\r\n ): Map<string, any> {\r\n const selectedItemsDic = new Map<string, any>();\r\n const storeItemsAndIndexes = selectedItems && selectedItemIndexByRef;\r\n this.component.selectedItems.forEach((item: any, index: number) => {\r\n const itemPropertyValue = this.getItemUniquePropertyValue(item);\r\n selectedItemsDic.set(itemPropertyValue, item);\r\n if (storeItemsAndIndexes) {\r\n selectedItems?.push(item);\r\n selectedItemIndexByRef?.set(itemPropertyValue, index);\r\n }\r\n });\r\n return selectedItemsDic;\r\n }\r\n\r\n private getItemUniquePropertyValue(item: any): string {\r\n if (typeof this.selectBy === 'function') {\r\n return (<any>this.selectBy)(0, item || {});\r\n }\r\n\r\n const result = getNestedProperty(item, this.selectBy as string);\r\n return result.isValid ? String(result.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\r\n/**\r\n * Expose most common datagrid actionbar layout styles.\r\n */\r\nexport enum ActionBarLayout {\r\n flatCompact = 'btn btn-sm btn-link',\r\n flat = 'btn btn-link',\r\n outlined = 'btn btn-sm btn-secondary',\r\n}\r\n\r\n/**\r\n * Configuration for actions.\r\n */\r\nexport interface ActionDefinition<T = string> {\r\n id: string;\r\n label: T;\r\n ariaLabel?: string;\r\n enabled: boolean;\r\n tooltip?: T;\r\n /**\r\n * Specify style class to be applied.\r\n * @note Applicable only for ActionBar actions.\r\n * Footer actions are with default style for footer actions - ('btn btn-sm column-toggle-action').\r\n * Default style for ActionBar actions is flatCompact - ('btn btn-sm btn-link').\r\n * {@see ActionBarLayout}\r\n */\r\n class?: string;\r\n\r\n /**\r\n * True if the action button is visible above the grid, otherwise the button\r\n * is placed within a dropdown.\r\n * @note Applicable only for ActionBar actions.\r\n */\r\n isVisible?: boolean;\r\n\r\n /**\r\n * When an action has children, it is displayed like a dropdown and\r\n * the children are the dropdown items.\r\n */\r\n children?: ActionDefinition[];\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 { HermesDatagrid } from '@hermes-ui/angular/data/datagrid';\r\n\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\ninterface HermesDatagridPrivateMembers {\r\n keyNavigation: KeyNavigationController;\r\n}\r\n\r\nexport interface KeyNavigationController {\r\n setActiveCell(activeCellElement: HTMLElement): void;\r\n focusElement(activeCellElement: HTMLElement): void;\r\n}\r\n\r\nexport function getDatagridKeyNavigationController(datagrid: HermesDatagrid) {\r\n const datagridPrivateMembers = datagrid as unknown as HermesDatagridPrivateMembers;\r\n\r\n return datagridPrivateMembers.keyNavigation;\r\n}\r\n\r\nexport function isEqualColumns(column: ColumnDefinition<any> | null, other: ColumnDefinition<any> | null): boolean {\r\n return (\r\n !!column &&\r\n !!other &&\r\n ((!!column.uid && column.uid === other.uid) || (!!column.displayName && column.displayName === other.displayName))\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 { BehaviorSubject, Subject } from 'rxjs';\r\n\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n/**\r\n * Provides subjects for communication between appfxDgColumnsOrder and appfxColumnOrder\r\n * directives.\r\n */\r\n@Injectable()\r\nexport class DatagridColumnsOrderService {\r\n /**\r\n * Emits the column which should be marked as grabbed. If the column is null all columns are\r\n * marked as not grabbed\r\n */\r\n readonly grabbedColumn = new BehaviorSubject<ColumnDefinition<any> | null>(null);\r\n\r\n /**\r\n * Emits when the column should be moved as result of left or right arrow key press.\r\n */\r\n readonly moveVisibleColumn = new Subject<{\r\n visibleColumnIndex: number;\r\n moveLeft: boolean;\r\n }>();\r\n\r\n /**\r\n * Event emitter to tell the dragged column to set focus\r\n */\r\n readonly focusGrabbedColumn = new Subject<void>();\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 { CdkDrag } from '@angular/cdk/drag-drop';\r\nimport {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { HermesDatagrid } from '@hermes-ui/angular/data/datagrid';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nimport { getDatagridKeyNavigationController, isEqualColumns } from './datagrid-columns-order.helpers';\r\nimport { DatagridColumnsOrderService } from './datagrid-columns-order.service';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n@Directive({\r\n selector: 'hermes-dg-column[appfxColumnOrder]',\r\n standalone: false,\r\n})\r\nexport class ColumnOrderDirective implements OnDestroy, OnInit {\r\n @HostBinding('class.grabbed') isGrabbed = false;\r\n\r\n @Input() columnData: ColumnDefinition<any>;\r\n\r\n @Input() columnIndex: number;\r\n\r\n private subs = new Subscription();\r\n\r\n constructor(\r\n private readonly datagrid: HermesDatagrid,\r\n readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly columnOrderingService: DatagridColumnsOrderService,\r\n private readonly changeDetectorRef: ChangeDetectorRef,\r\n private readonly cdkDrag: CdkDrag\r\n ) {\r\n cdkDrag.previewContainer = 'parent';\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n keydown(event: KeyboardEvent) {\r\n const isColumnTarget = (event.target as HTMLElement)?.tagName === 'HERMES-DG-COLUMN';\r\n if (!isColumnTarget) {\r\n return;\r\n }\r\n\r\n const isSpace = event.code === 'Space';\r\n const isLeft = event.code === 'ArrowLeft';\r\n const isRight = event.code === 'ArrowRight';\r\n const isUp = event.code === 'ArrowUp';\r\n const isDown = event.code === 'ArrowDown';\r\n const isEsc = event.code === 'Escape';\r\n const isCurrentColumnGrabbed = isEqualColumns(this.columnData, this.columnOrderingService.grabbedColumn.value);\r\n // A pinned column is rendered in the sticky container instead of the scrollable one, so it is\r\n // not part of the reorderable group. Mouse dragging is refused through cdkDragDisabled, and\r\n // keyboard reordering has to be refused here for the same reason. Releasing stays allowed, so a\r\n // column that gets pinned while it is grabbed can still be let go of.\r\n const isReorderable = !this.columnData?.pinned;\r\n\r\n if (isCurrentColumnGrabbed && (isLeft || isRight) && isReorderable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n this.moveColumn(isLeft);\r\n }\r\n\r\n if (isSpace) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n\r\n if (isCurrentColumnGrabbed && (isEsc || isDown || isUp || isSpace)) {\r\n // Remove grabbed css of the columns\r\n this.columnOrderingService.grabbedColumn.next(null);\r\n }\r\n\r\n if (!isCurrentColumnGrabbed && isSpace && isReorderable) {\r\n // Set grabbed css of the column provided as parameter\r\n this.columnOrderingService.grabbedColumn.next(this.columnData);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.subs.add(\r\n this.columnOrderingService.grabbedColumn\r\n .pipe(\r\n filter(other => {\r\n return isEqualColumns(this.columnData, other) !== this.isGrabbed;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.updateGrabbedState();\r\n })\r\n );\r\n\r\n this.subs.add(\r\n this.columnOrderingService.focusGrabbedColumn.pipe(filter(() => this.isGrabbed)).subscribe(() => {\r\n this.setActiveCell();\r\n })\r\n );\r\n\r\n this.subs.add(\r\n this.cdkDrag.started.subscribe(() => {\r\n //Remove grabbed css of the columns, when user start dragging with the mouse\r\n this.columnOrderingService.grabbedColumn.next(null);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.unsubscribe();\r\n }\r\n\r\n private moveColumn(isLeft: boolean) {\r\n this.columnOrderingService.moveVisibleColumn.next({\r\n moveLeft: isLeft,\r\n visibleColumnIndex: this.columnIndex,\r\n });\r\n }\r\n\r\n private updateGrabbedState() {\r\n this.isGrabbed = !this.isGrabbed;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setActiveCell() {\r\n getDatagridKeyNavigationController(this.datagrid).setActiveCell(this.elementRef.nativeElement);\r\n\r\n getDatagridKeyNavigationController(this.datagrid).focusElement(this.elementRef.nativeElement);\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 { CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport {\r\n Directive,\r\n ElementRef,\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 { map, Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nimport { isEqualColumns } from './datagrid-columns-order.helpers';\r\nimport { DatagridColumnsOrderService } from './datagrid-columns-order.service';\r\nimport { ColumnOrderChanged } from '../../interfaces/column-state';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n@Directive({\r\n selector: 'hermes-datagrid[appfxDgColumnsOrder]',\r\n providers: [DatagridColumnsOrderService],\r\n standalone: false,\r\n})\r\nexport class DatagridColumnsOrderDirective implements OnInit, OnDestroy, OnChanges {\r\n @Input() dgColumnsOrderColumns: ColumnDefinition<any>[];\r\n\r\n @Input() dgColumnsVirtualScrolling = false;\r\n\r\n @Output() dgColumnsOrderChange = new EventEmitter<ColumnOrderChanged>();\r\n private subs = new Subscription();\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly cdkDropList: CdkDropList,\r\n private readonly columnOrderingService: DatagridColumnsOrderService\r\n ) {\r\n cdkDropList.orientation = 'horizontal';\r\n }\r\n\r\n ngOnInit() {\r\n this.subs.add(\r\n this.cdkDropList.dropped\r\n .pipe(\r\n filter(droppedData => !!droppedData?.item?.data?.displayName),\r\n map(droppedData => {\r\n return this.findColumnIndices(droppedData.item.data, droppedData.currentIndex);\r\n }),\r\n filter(columnIndices => columnIndices.currentIndex !== columnIndices.previousIndex),\r\n filter(columnIndices => this.isReorderAllowed(columnIndices))\r\n )\r\n .subscribe(columnIndices => {\r\n this.reorderColumn(columnIndices);\r\n })\r\n );\r\n\r\n this.subs.add(\r\n this.columnOrderingService.moveVisibleColumn\r\n .pipe(\r\n map(visibleColumnIndices => {\r\n return this.getColumnIndices(visibleColumnIndices.moveLeft, visibleColumnIndices.visibleColumnIndex);\r\n }),\r\n filter(columnIndices => {\r\n return columnIndices.previousIndex !== columnIndices.currentIndex;\r\n }),\r\n filter(columnIndices => this.isReorderAllowed(columnIndices))\r\n )\r\n .subscribe(columnIndices => {\r\n this.reorderColumn(columnIndices);\r\n this.columnOrderingService.focusGrabbedColumn.next();\r\n })\r\n );\r\n }\r\n\r\n setDgColumnsContainer(): void {\r\n // Clarity doesn't expose the scrollable datagrid container, and I didn't find a way to\r\n // get it from the parent component or directive, so we need to use querySelector\r\n // When virtualScrolling is enabled grid data and grid header are split into two different\r\n // scrollable containers. In this case we aim for the grid header.\r\n let selector = 'div.datagrid';\r\n if (this.dgColumnsVirtualScrolling) {\r\n selector += ' div.datagrid-header';\r\n }\r\n const scrollableContainer = this.elementRef.nativeElement.querySelector(selector) as HTMLElement;\r\n if (scrollableContainer) {\r\n // A workaround for the cdkDropList directive. The issue is that draggable columns are not direct\r\n // children of the drop list container on which the cdkDropList directive is applied. The selector\r\n // that can be provided to the cdkDropList directive and that directive can use to find an alternate\r\n // element container for the drop list container doesn't work. The clarity column separators are\r\n // draggable and inside column elements, and the drop list container is not their parent.\r\n // The correct fix is the clarity to support column reordering as they have better access to the\r\n // datagrid dom structure.\r\n (this.cdkDropList._dropListRef as any)._container = scrollableContainer;\r\n this.cdkDropList._dropListRef.element = scrollableContainer;\r\n this.cdkDropList.element = new ElementRef<HTMLElement>(scrollableContainer);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['dgColumnsVirtualScrolling']) {\r\n this.setDgColumnsContainer();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.unsubscribe();\r\n }\r\n\r\n /**\r\n * A pinned column is rendered in the datagrid's sticky container while the others are rendered in\r\n * the scrollable one. Changing the relative order of the two groups cannot be re-rendered: the\r\n * column elements are moved against a sibling that now lives in the other container, and the DOM\r\n * insert throws. Until the datagrid can render that, a reorder that would cross a pinned column is\r\n * refused rather than applied.\r\n */\r\n private isReorderAllowed(indices: { previousIndex: number; currentIndex: number }): boolean {\r\n if (indices.previousIndex < 0 || indices.currentIndex < 0) {\r\n return false;\r\n }\r\n\r\n const from = Math.min(indices.previousIndex, indices.currentIndex);\r\n const to = Math.max(indices.previousIndex, indices.currentIndex);\r\n\r\n // Only rendered columns matter, a hidden pinned column is not in either container.\r\n return !this.dgColumnsOrderColumns.slice(from, to + 1).some(column => column.pinned && !column.hidden);\r\n }\r\n\r\n private reorderColumn(indices: { previousIndex: number; currentIndex: number }) {\r\n const value = [...this.dgColumnsOrderColumns];\r\n moveItemInArray(value, indices.previousIndex, indices.currentIndex);\r\n this.dgColumnsOrderColumns = value;\r\n this.dgColumnsOrderChange.emit({ ...indices, columns: this.dgColumnsOrderColumns });\r\n }\r\n\r\n private getColumnIndices(moveLeft: boolean, previousColumnIndex: number) {\r\n const visibleColumns = this.dgColumnsOrderColumns.filter(column => !column.hidden);\r\n const newVisibleColumnIndex = moveLeft ? previousColumnIndex - 1 : previousColumnIndex + 1;\r\n let currenColumnIndex = newVisibleColumnIndex >= 0 ? newVisibleColumnIndex : 0;\r\n currenColumnIndex = currenColumnIndex < visibleColumns.length - 1 ? currenColumnIndex : visibleColumns.length - 1;\r\n const previousColumn = visibleColumns[previousColumnIndex];\r\n const currentColumn = visibleColumns[currenColumnIndex];\r\n return this.createColumnIndices(previousColumn, currentColumn);\r\n }\r\n\r\n private findColumnIndices(previousColumn: ColumnDefinition<any>, currentDroppedItemIndex: number) {\r\n const mappedColumnDragItems = this.cdkDropList.getSortedItems().map(item => item.data);\r\n\r\n const currentColumn = mappedColumnDragItems.find((column, index) => {\r\n //For some reason the index of the dropped item in the dropped event start from 1 not from 0\r\n return index >= currentDroppedItemIndex - 1 && !!column;\r\n });\r\n\r\n return this.createColumnIndices(previousColumn, currentColumn);\r\n }\r\n\r\n private createColumnIndices(previousColumn: ColumnDefinition<any>, currentColumn: ColumnDefinition<any>) {\r\n const previousIndex = this.findColumnIndex(previousColumn);\r\n const currentIndex = this.findColumnIndex(currentColumn);\r\n return {\r\n previousIndex: previousIndex,\r\n currentIndex: currentIndex,\r\n };\r\n }\r\n\r\n private findColumnIndex(column: ColumnDefinition<any>) {\r\n return this.dgColumnsOrderColumns.findIndex(other => {\r\n return isEqualColumns(column, other);\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 { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { HermesDatagridFilterInterface, HermesDatagridStringFilterInterface } from '@hermes-ui/angular/data/datagrid';\r\nimport { HermesPopoverService } from '@hermes-ui/angular/popover/common';\r\nimport { asyncScheduler, Subject } from 'rxjs';\r\nimport { observeOn } from 'rxjs/operators';\r\n\r\nimport { DatagridStrings } from '../i18n/datagrid-strings.service';\r\n\r\n@Component({\r\n selector: 'appfx-datagrid-filter',\r\n standalone: false,\r\n template: `\r\n <hermes-input-container class=\"mt-0\">\r\n <input\r\n #input\r\n hermesInput\r\n type=\"text\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n [value]=\"value\"\r\n (keyup)=\"onKey($event)\"\r\n [placeholder]=\"dgStrings.filterPlaceholder\"\r\n [attr.aria-label]=\"dgStrings.filterPlaceholder\"\r\n />\r\n </hermes-input-container>\r\n `,\r\n})\r\nexport class DatagridFilterComponent implements HermesDatagridFilterInterface<any>, OnInit, AfterViewInit {\r\n @Input() filterValue: any;\r\n @Input() stringFilterType?: HermesDatagridStringFilterInterface<any>;\r\n @Input() fieldName?: string;\r\n @Output() filterValueChange: EventEmitter<any> = new EventEmitter<any>();\r\n @ViewChild('input') input: ElementRef;\r\n\r\n value: string;\r\n changes = new Subject<any>();\r\n\r\n constructor(\r\n public dgStrings: DatagridStrings,\r\n private popoverService: HermesPopoverService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.value = this.filterValue || '';\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.popoverService.openChange.pipe(observeOn(asyncScheduler)).subscribe(openChange => {\r\n if (openChange) {\r\n this.input.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n onKey(event: any) {\r\n this.value = event.target.value;\r\n\r\n this.changes.next(true);\r\n\r\n if (this.filterValue !== this.value) {\r\n this.filterValueChange.emit(this.value);\r\n }\r\n }\r\n\r\n isActive(): boolean {\r\n return !!this.value;\r\n }\r\n\r\n accepts(item: any): boolean {\r\n const lowerCaseTrimmedValue = this.value.toLowerCase().trim();\r\n let currentItemFieldValue: string;\r\n\r\n if (this.stringFilterType) {\r\n return this.stringFilterType.accepts(item, lowerCaseTrimmedValue);\r\n } else if (this.fieldName) {\r\n currentItemFieldValue = '' + item[this.fieldName];\r\n return currentItemFieldValue.toLowerCase().indexOf(lowerCaseTrimmedValue) >= 0;\r\n }\r\n\r\n return false;\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 Component,\r\n ComponentRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\n\r\nimport { ColumnDefinition, ColumnRenderer } from './shared/column/column-definitions';\r\n\r\n@Component({\r\n selector: 'appfx-dg-cell-container',\r\n standalone: false,\r\n template: `\r\n @if (!column.columnRenderer) {\r\n <span [title]=\"item?.[column.field]\">{{ item?.[column.field] }}</span>\r\n }\r\n <ng-template #cellContainer></ng-template>\r\n `,\r\n styles: [':host { width: 100%; }'],\r\n})\r\nexport class DatagridCellContainerComponent implements OnInit, OnDestroy, OnChanges {\r\n @ViewChild('cellContainer', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\r\n\r\n @Input() column: ColumnDefinition<any>;\r\n\r\n @Input() item: any;\r\n\r\n private componentRef: ComponentRef<any> | null;\r\n private instance: ColumnRenderer<any> | null;\r\n\r\n ngOnChanges(): void {\r\n if (this.instance && typeof this.instance.onChange === 'function') {\r\n this.instance.onChange(this.item || {}, this.column);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.column.columnRenderer) {\r\n this.componentRef = this.container.createComponent(this.column.columnRenderer);\r\n this.instance = <ColumnRenderer<any>>this.componentRef?.instance;\r\n this.instance.item = this.item || {};\r\n this.instance.column = this.column;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.instance = null;\r\n this.componentRef = null;\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 { CdkConnectedOverlay, ConnectionPositionPair } from '@angular/cdk/overlay';\r\nimport { Component, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Output, ViewChild } from '@angular/core';\r\n\r\nimport { DatagridStrings } from '../../i18n/datagrid-strings.service';\r\nimport { ColumnHiddenState } from '../../interfaces/column-state';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n@Component({\r\n selector: 'appfx-dg-column-toggle',\r\n standalone: false,\r\n templateUrl: 'datagrid-column-toggle.component.html',\r\n styleUrls: ['datagrid-column-toggle.component.scss'],\r\n})\r\nexport class DatagridColumnToggleComponent implements OnDestroy {\r\n @HostBinding('class') layoutClass = 'column-switch-wrapper';\r\n\r\n @ViewChild('closeColumnButton', { read: ElementRef }) closeColumnButtonElement: ElementRef;\r\n\r\n @Input() columns: ColumnDefinition<any>[];\r\n @Output() columnsChange = new EventEmitter<ColumnDefinition<any>[]>();\r\n\r\n @Output() columnHiddenStateChange = new EventEmitter<ColumnHiddenState>();\r\n\r\n positions = [\r\n new ConnectionPositionPair(\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n },\r\n {\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n }\r\n ),\r\n ];\r\n\r\n openState = false;\r\n viewId: string | undefined;\r\n overlay: CdkConnectedOverlay;\r\n\r\n constructor(public dgStrings: DatagridStrings) {}\r\n\r\n get hasOnlyOneVisibleColumn(): boolean {\r\n const hideableColumns = this.hideableColumns();\r\n const nonHideableColumns = this.columns.length - hideableColumns.length;\r\n return nonHideableColumns === 0 && hideableColumns.filter(column => !column.hidden).length === 1;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.openState = false;\r\n }\r\n\r\n onAttach(overlay: CdkConnectedOverlay) {\r\n this.overlay = overlay;\r\n this.viewId = overlay?.overlayRef?.overlayElement.id;\r\n }\r\n\r\n onDetach(): void {\r\n this.openState = false;\r\n this.viewId = undefined;\r\n }\r\n\r\n showColumn(colUid: string) {\r\n this.showHideColumn(colUid, false);\r\n }\r\n\r\n hideColumn(colUid: string) {\r\n this.showHideColumn(colUid, true);\r\n }\r\n\r\n toggleColumnState(columnToToggle: ColumnDefinition<any>, event?: Event) {\r\n const shouldHide = !!event?.target && !(event.target as HTMLInputElement).checked;\r\n columnToToggle.hidden = shouldHide;\r\n this.columnsChange.emit([...this.columns]);\r\n this.columnHiddenStateChange.emit({\r\n hidden: shouldHide,\r\n column: columnToToggle,\r\n });\r\n }\r\n\r\n onSelectAll() {\r\n this.hideableColumns()\r\n .filter(column => column.hidden)\r\n .forEach(column => this.toggleColumnState(column));\r\n }\r\n\r\n allColumnsSelected(): boolean {\r\n return this.hideableColumns().filter(column => column.hidden).length === 0;\r\n }\r\n\r\n hideableColumns(): ColumnDefinition<any>[] {\r\n // If column.hideable is not set to false explicitly then column is considered visible\r\n return this.columns.filter(column => column.hideable !== false);\r\n }\r\n\r\n private showHideColumn(colUid: string, hide: boolean) {\r\n const columnToToggle: ColumnDefinition<any> | undefined = this.columns.find(col => col.uid === colUid);\r\n if (!columnToToggle) {\r\n return;\r\n }\r\n\r\n columnToToggle.hidden = hide;\r\n this.columnsChange.emit([...this.columns]);\r\n this.columnHiddenStateChange.emit({\r\n hidden: hide,\r\n column: columnToToggle,\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<button\r\n cdkOverlayOrigin\r\n #trigger=\"cdkOverlayOrigin\"\r\n role=\"button\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link column-toggle-action\"\r\n (click)=\"openState = !openState\"\r\n [attr.aria-owns]=\"viewId\"\r\n [attr.aria-controls]=\"viewId\"\r\n [attr.aria-expanded]=\"openState\"\r\n>\r\n {{ dgStrings.pickColumns }}\r\n</button>\r\n<ng-template\r\n cdkConnectedOverlay\r\n #overlay=\"cdkConnectedOverlay\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"openState\"\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n [cdkConnectedOverlayPositions]=\"positions\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n (detach)=\"onDetach()\"\r\n (attach)=\"onAttach(overlay)\"\r\n (backdropClick)=\"openState = false\"\r\n>\r\n <div\r\n class=\"column-switch\"\r\n role=\"dialog\"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n [attr.aria-label]=\"dgStrings.showColumnsMenuDescription\"\r\n tabindex=\"-1\"\r\n >\r\n <div class=\"switch-header\">\r\n <div class=\"hermes-sr-only\">\r\n {{ dgStrings.allColumnsSelected }}\r\n </div>\r\n <span role=\"heading\" aria-level=\"3\">{{ dgStrings.showColumns }}</span>\r\n <button\r\n class=\"btn btn-sm btn-link\"\r\n cdkFocusInitial\r\n cdkFocusRegionStart\r\n (click)=\"openState = false\"\r\n #closeColumnButton\r\n >\r\n <span class=\"hermes-sr-only\">{{ dgStrings.closeColumnTogglerText }}</span>\r\n <hermes-icon shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n <ul class=\"switch-content list-unstyled\" tabindex=\"-1\">\r\n @for (column of hideableColumns(); track column) {\r\n <li>\r\n <hermes-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n [disabled]=\"hasOnlyOneVisibleColumn && !column.hidden\"\r\n [checked]=\"!column.hidden\"\r\n (change)=\"toggleColumnState(column, $event)\"\r\n />\r\n <label>{{ column.displayName }}</label>\r\n </hermes-checkbox-wrapper>\r\n </li>\r\n }\r\n </ul>\r\n <div class=\"switch-footer\">\r\n <button\r\n class=\"btn btn-sm btn-link switch-button export-link\"\r\n type=\"button\"\r\n cdkFocusRegionEnd\r\n [disabled]=\"allColumnsSelected()\"\r\n (click)=\"onSelectAll()\"\r\n >\r\n {{ dgStrings.selectAll }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\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 Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { HermesDatagridFilter } from '@hermes-ui/angular/data/datagrid';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { ColumnFilter } from '../interfaces/column-filter';\r\n\r\n/**\r\n * A component that acts as a container for custom column filters.\r\n * It creates an instance of the specified filter component and manages its lifecycle.\r\n */\r\n@Component({\r\n selector: 'appfx-dg-filter-container',\r\n standalone: false,\r\n template: ` <ng-template #filterContainer></ng-template>`,\r\n})\r\nexport class DatagridFilterContainerComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('filterContainer', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\r\n\r\n /**\r\n * The filter component to be created.\r\n */\r\n @Input() filterType: Type<any>;\r\n\r\n /**\r\n * The initial value for the filter.\r\n */\r\n @Input() filterValue: any;\r\n\r\n /**\r\n * Event emitter to notify the hosting view about changes in the filter value.\r\n */\r\n @Output() filterValueChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n private componentRef: ComponentRef<any> | null;\r\n private filter: ColumnFilter<any>;\r\n private filterChangeSub: Subscription | null;\r\n\r\n constructor(private filterContainer: HermesDatagridFilter) {}\r\n\r\n ngAfterViewInit() {\r\n if (this.filterType) {\r\n this.componentRef = this.container.createComponent(this.filterType);\r\n this.filter = <ColumnFilter<any>>this.componentRef.instance;\r\n this.filter.filterValue = this.filterValue;\r\n this.filterChangeSub = this.filter.changes.subscribe((value: any) => {\r\n this.filterValueChange.emit(value);\r\n });\r\n this.filterContainer.setFilter(this.filter);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.filterChangeSub) {\r\n this.filterChangeSub.unsubscribe();\r\n this.filterChangeSub = null;\r\n }\r\n\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.componentRef = null;\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 { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { ExportType } from './export-type';\r\nimport { ExportStatus } from './export.interface';\r\nimport { DatagridStrings } from '../../i18n/datagrid-strings.service';\r\n\r\n@Component({\r\n selector: 'appfx-dg-export',\r\n standalone: false,\r\n templateUrl: 'export-datagrid.component.html',\r\n styleUrls: ['export-datagrid.component.scss'],\r\n})\r\nexport class ExportDatagridComponent {\r\n /**\r\n * All grid items count\r\n */\r\n @Input() allItemsCount: any = 0;\r\n\r\n /**\r\n * All filtered items count\r\n */\r\n @Input() filteredItemsCount: any = 0;\r\n\r\n /**\r\n * Selected items in the datagrid\r\n */\r\n @Input() selectedItemsCount: any = 0;\r\n\r\n /**\r\n * Event emitter to tell the hosting view that user has requested to export list data\r\n */\r\n @Output() exportEventEmitter: EventEmitter<ExportStatus> = new EventEmitter<ExportStatus>();\r\n\r\n allRowsCount: string;\r\n selectedRowsCount: string;\r\n matchedFilterRowsCount: string;\r\n exportType: any;\r\n exportStatus: ExportStatus = { inProgress: false, exportType: ExportType.ALL };\r\n\r\n constructor(public dgStrings: DatagridStrings) {\r\n this.exportType = ExportType;\r\n }\r\n\r\n /**\r\n * Export event is emitted on Export button click and no dropdown options are available\r\n * All Items are Exported.\r\n */\r\n exportAllIfOnlyOption(): void {\r\n if (this.selectedItemsCount === 0 && this.filteredItemsCount === 0) {\r\n this.exportStatus.exportType = this.exportType.ALL;\r\n this.exportEventEmitter.emit(this.exportStatus);\r\n } else {\r\n this.allRowsCount = '';\r\n this.selectedRowsCount = '';\r\n this.matchedFilterRowsCount = '';\r\n\r\n if (this.allItemsCount) {\r\n this.allRowsCount = `(${this.allItemsCount})`;\r\n } else {\r\n this.allRowsCount = `(0)`;\r\n }\r\n if (this.filteredItemsCount) {\r\n this.matchedFilterRowsCount = `(${this.filteredItemsCount})`;\r\n } else {\r\n this.matchedFilterRowsCount = `(0)`;\r\n }\r\n if (this.selectedItemsCount) {\r\n this.selectedRowsCount = `(${this.selectedItemsCount})`;\r\n } else {\r\n this.selectedRowsCount = `(0)`;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handler function called when one of the export options is clicked\r\n */\r\n onExportClick(exportType: ExportType) {\r\n this.exportStatus.exportType = exportType;\r\n this.exportEventEmitter.emit(this.exportStatus);\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@if (selectedItemsCount > 0 || filteredItemsCount > 0) {\r\n <hermes-dropdown class=\"column-switch-wrapper\">\r\n <button\r\n data-test-id=\"export-link\"\r\n type=\"button\"\r\n class=\"column-toggle-action btn btn-sm btn-link\"\r\n [hermesLoading]=\"exportStatus.inProgress || false\"\r\n [disabled]=\"!(allItemsCount > 0)\"\r\n (click)=\"exportAllIfOnlyOption()\"\r\n hermesDropdownTrigger\r\n >\r\n {{ dgStrings.exportLink }}\r\n @if (selectedItemsCount > 0 || filteredItemsCount > 0) {\r\n <hermes-icon shape=\"angle\" direction=\"down\"></hermes-icon>\r\n }\r\n </button>\r\n <hermes-dropdown-menu class=\"export-dropdown\" hermesPosition=\"top-left\" *hermesIfOpen>\r\n @if (selectedItemsCount > 0 || filteredItemsCount > 0) {\r\n <button type=\"button\" hermesDropdownItem (click)=\"onExportClick(exportType.ALL)\">\r\n {{ dgStrings.exportAll }} {{ allRowsCount }}\r\n </button>\r\n }\r\n @if (filteredItemsCount > 0) {\r\n <button type=\"button\" hermesDropdownItem (click)=\"onExportClick(exportType.MATCHING_FILTERS)\">\r\n {{ dgStrings.exportMatchingFilters }}\r\n {{ matchedFilterRowsCount }}\r\n </button>\r\n }\r\n @if (selectedItemsCount > 0) {\r\n <button type=\"button\" hermesDropdownItem (click)=\"onExportClick(exportType.SELECTED_ONLY)\">\r\n {{ dgStrings.exportSelectedRows }} {{ selectedRowsCount }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n} @else {\r\n <div class=\"column-switch-wrapper\">\r\n <button\r\n data-test-id=\"export-link\"\r\n type=\"button\"\r\n class=\"column-toggle-action btn btn-sm btn-link\"\r\n [hermesLoading]=\"exportStatus.inProgress || false\"\r\n [disabled]=\"!(allItemsCount > 0)\"\r\n (click)=\"exportAllIfOnlyOption()\"\r\n >\r\n {{ dgStrings.exportLink }}\r\n </button>\r\n </div>\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 { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Used to determine whether the datagrid row is locked (disabled) or not, by\r\n * returning boolean result. If the disabled state is provided and is true the row\r\n * is consider as not selectable. If isLocked function is provided the return\r\n * boolean result from it is used to be determine whether the row is selectable.\r\n * If isLocked function is not provided the pipe returns null, row is consider\r\n * selectable.\r\n *\r\n * Usage:\r\n * rowItem | isRowSelectable: isLockedFunction : disabled\r\n */\r\n@Pipe({ name: 'isRowSelectable', standalone: false })\r\nexport class IsRowSelectablePipe implements PipeTransform {\r\n transform(rowItem: any, isLocked?: (rowItem: any) => boolean, disabled?: boolean): boolean {\r\n if (disabled) {\r\n return false;\r\n }\r\n if (isLocked) {\r\n return !isLocked(rowItem);\r\n }\r\n\r\n return true;\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 { ListRange } from '@angular/cdk/collections';\r\nimport { CdkDropList } from '@angular/cdk/drag-drop';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n TrackByFunction,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ZoomLevel, ZoomLevelService } from '@hermes-ui/angular/addons/a11y';\r\nimport { FilterablePropertyDefinition, FilterMode, PropertyFilter } from '@hermes-ui/angular/addons/datagrid-filters';\r\nimport { DragAndDropGroupService } from '@hermes-ui/angular/addons/drag-and-drop';\r\nimport {\r\n HermesDatagrid,\r\n HermesDatagridPagination,\r\n HermesDatagridSortOrder,\r\n HermesDatagridStateInterface,\r\n HermesDatagridVirtualScrollRangeInterface,\r\n SelectionType,\r\n selectionTypeAttribute,\r\n} from '@hermes-ui/angular/data/datagrid';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { ExportProviderService } from './addons/export/export-provider.service';\r\nimport { ClientSideExportConfig, DatagridItemSet, ExportStatus } from './addons/export/export.interface';\r\nimport { DatagridStrings } from './i18n/datagrid-strings.service';\r\nimport { uniqueIdProvider, uniqueIdToken } from './id-generator/id-generator';\r\nimport {\r\n ColumnFilterChange,\r\n ColumnHiddenState,\r\n ColumnOrderChanged,\r\n // ColumnPinnedState, // disabled with hermesDgPinnable\r\n ColumnResize,\r\n ColumnSortOrder,\r\n} from './interfaces/column-state';\r\nimport { ContextMenuEvent } from './interfaces/context-menu-event';\r\nimport { DatagridDragConfig } from './interfaces/datagrid-drag-config';\r\nimport {\r\n appfxPreselectableComponentToken,\r\n PreselectableComponent,\r\n} from './preserve-selection/datagrid-preserve-selection.directive';\r\nimport { ActionBarLayout, ActionDefinition } from './shared/action/action-definition';\r\nimport { ActionClickEvent, SingleRowActionOpen } from './shared/action/actions-event-types';\r\nimport { ColumnDefinition } from './shared/column/column-definitions';\r\nimport { getNestedProperty } from './utils/property-resolver.util';\r\n\r\n/**\r\n * The GridLayoutModel interface defines configurable options for customizing\r\n * the visual appearance and behavior of the datagrid layout.\r\n */\r\nexport interface GridLayoutModel {\r\n /**\r\n * Enables compact mode for the datagrid, reducing row height to create a denser layout.\r\n * This mode is particularly useful when you need to display more rows within the same viewport.\r\n * - `true`: Enables compact mode.\r\n * - `false`: Uses the default Clarity layout with standard row and column height.\r\n *\r\n * Defaults to `true` if not specified.\r\n */\r\n compact?: boolean;\r\n\r\n /**\r\n * Disables the datagrid, preventing all user interactions.\r\n * - `true`: Disables the grid and makes it non-interactive.\r\n * - `false`: Allows full user interactions.\r\n *\r\n * Defaults to `false` if not specified.\r\n */\r\n disabled?: boolean;\r\n\r\n /**\r\n * Adjusts the datagrid layout to stretch and fill 100% of the height of the parent container.\r\n * - `true`: The datagrid stretches to fill the parent container's height.\r\n * - `false`: The datagrid height adjusts based on its content.\r\n *\r\n * Defaults to `true` if not specified.\r\n */\r\n stretchToParentHeight?: boolean;\r\n}\r\n\r\n/**\r\n * The GridFooterModel interface configures the behavior and appearance of the datagrid footer.\r\n */\r\nexport interface GridFooterModel {\r\n /**\r\n * Controls the visibility of the datagrid footer.\r\n * - `true`: The footer is displayed.\r\n * - `false`: The footer is hidden.\r\n *\r\n * Defaults to `true` if not specified.\r\n */\r\n showFooter?: boolean;\r\n\r\n /**\r\n * Controls the visibility of the column toggle in the datagrid footer.\r\n * - `true`: The column toggle is hidden.\r\n * - `false`: The column toggle is visible, allowing users to show or hide columns.\r\n *\r\n * Defaults to `false` if not specified.\r\n */\r\n hideColumnToggle?: boolean;\r\n\r\n /**\r\n * Configuration for client-side data export behavior.\r\n * This option allows to define settings such as the file name, export columns.\r\n *\r\n * Note: To implement custom export logic, use the `enableCustomExport` property.\r\n * The `onExportData` event can be handled manually for custom export behavior.\r\n *\r\n * @see ClientSideExportConfig\r\n */\r\n clientSideExportConfig?: ClientSideExportConfig;\r\n /**\r\n * Specifies whether the export button should be displayed in the datagrid.\r\n * Enabling this option causes the component to emit the `onExportData` event, which can be used for implementing custom export logic.\r\n *\r\n * If `clientSideExportConfig` is provided, the export button will automatically be shown.\r\n *\r\n * Values:\r\n * - `true`: Displays the export button and triggers the `onExportData` event when clicked.\r\n * - `false`: Hides the export button.\r\n *\r\n * Defaults to `false` if not specified.\r\n */\r\n enableCustomExport?: boolean;\r\n\r\n /**\r\n * An array of action definitions to be rendered in the Datagrid footer.\r\n * These actions are displayed as small buttons on the left side of the footer.\r\n *\r\n * Interaction:\r\n * When a footer action is clicked, the {@link #onActionClick} callback is invoked,\r\n * passing the specific {@link ActionDefinition} and the current datagrid\r\n * selection (single or multiple items) as context.\r\n *\r\n * Note on Styling:\r\n * Unlike ActionBar actions, footer actions ignore the 'class' property and\r\n * apply a consistent style to maintain visual harmony with\r\n * pagination and other footer elements.\r\n */\r\n footerActions?: ActionDefinition[];\r\n}\r\n\r\n/**\r\n * DatagridComponent represents a data-bound list control that displays items from an array-based source in the form of columns and rows.\r\n * The component is built on top of the HermesDatagrid component from Clarity\r\n * and provides additional functionality and customization options on top of the base HermesDatagrid.\r\n *\r\n * @template T - The type of the data being displayed in the datagrid.\r\n * This allows the datagrid to enforce type safety for the items passed to it, ensuring\r\n * that the `gridItems` and other related inputs conform to a specific structure.\r\n *\r\n * @example\r\n * <appfx-datagrid [gridItems]=\"data\" [columns]=\"columns\"></appfx-datagrid>\r\n */\r\n@Component({\r\n selector: 'appfx-datagrid',\r\n standalone: false,\r\n templateUrl: 'datagrid.component.html',\r\n styleUrls: ['datagrid.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n ExportProviderService,\r\n uniqueIdProvider,\r\n {\r\n provide: appfxPreselectableComponentToken,\r\n useExisting: forwardRef(() => DatagridComponent),\r\n },\r\n ],\r\n})\r\nexport class DatagridComponent<T> implements OnInit, OnDestroy, AfterViewInit, OnChanges, PreselectableComponent {\r\n searchTerm = '';\r\n visibleColumns: ColumnDefinition<T>[];\r\n draggedItems: T[] = [];\r\n\r\n @ViewChild(HermesDatagridPagination) hermesDatagridPagination: HermesDatagridPagination;\r\n\r\n /**\r\n * Shows loading indicator inside the datagrid to prevent user interactions while data is loading.\r\n * Set to `true` to display loading; set to `false` to hide the loading indicator.\r\n * Defaults to `false`.\r\n */\r\n @Input() loading = false;\r\n\r\n /**\r\n * Indicates if additional records are currently being fetched during infinite scrolling.\r\n * When `true`, a loading indicator is appended to the end of the datagrid rows.\r\n * @default false\r\n */\r\n @Input() loadingMoreItems: boolean = false;\r\n\r\n /**\r\n * When set to `true`, automatically selects the first item in the datagrid upon initialization.\r\n * Defaults to `false`.\r\n */\r\n @Input() preSelectFirstItem = false;\r\n\r\n /**\r\n * Defines the selectable page size options displayed in the grid footer.\r\n * Users can choose from these options to control the number of items shown per page.\r\n */\r\n @Input() pageSizeOptions: number[];\r\n\r\n /**\r\n * The totalItems should be provided when the grid is server driven datagrid\r\n * (serverDrivenDatagrid = true), otherwise the totalItems is calculated\r\n * internally and shouldn't be set.\r\n */\r\n @Input() totalItems = 0;\r\n\r\n /**\r\n * Shows the projected custom pagination component from the host component.\r\n * Used for infinite pagination scenarios.\r\n * Default: false\r\n */\r\n @Input() showCustomPagination = false;\r\n\r\n /**\r\n * Enables or disables server-driven mode for the datagrid.\r\n * When set to `true`, pagination and filtering should be managed externally.\r\n * Defaults to `false`.\r\n */\r\n @Input() serverDrivenDatagrid = false;\r\n\r\n /**\r\n * All grid items count when no filter is added.\r\n * Used for Export functionality when showExport is true.\r\n * Should be provided only when the grid is server driven datagrid\r\n * (serverDrivenDatagrid = true), otherwise the listItemsCount is calculated\r\n * internally and shouldn't be set.\r\n *\r\n * @deprecated To be removed with VSUIP-4776\r\n */\r\n @Input() listItemsCount = 0;\r\n\r\n /**\r\n * Template for the content displayed when a row expands. Enables expandable row functionality.\r\n */\r\n @Input() rowDetailContent: TemplateRef<unknown>;\r\n\r\n @Input() rowsExpandedByDefault = false;\r\n\r\n /**\r\n * A function that defines how to be tracked the changes for items in the grid.\r\n */\r\n @Input() trackByFunction: TrackByFunction<T>;\r\n\r\n /**\r\n * property expression which defines the item property which to be\r\n * used for tracking changes of items in in the grid. May be deep with \"a.b.c\" notation.\r\n */\r\n @Input() trackByGridItemProperty: string;\r\n\r\n /**\r\n * Reference to the template containing the content for the header\r\n * displayed on top of the detail content.\r\n */\r\n @Input() detailHeader?: TemplateRef<unknown>;\r\n\r\n /**\r\n * Reference to the template containing the detail content.\r\n */\r\n @Input() detailBody?: TemplateRef<unknown>;\r\n\r\n /**\r\n * The state passed to the detail pane. Contains the gridItem for which\r\n * detail is shown or null in case detail pane is hidden.\r\n */\r\n @Input() detailState: T | null = null;\r\n\r\n /**\r\n * Used to notify the hosting view that the detailState value has changed\r\n * ( to enable two way data binding )\r\n */\r\n @Output() detailStateChange: EventEmitter<T> = new EventEmitter<T>(true);\r\n\r\n /**\r\n * A function that determines if a specific row is locked (disabled).\r\n *\r\n * This function receives a row item as an argument and returns a boolean indicating\r\n * whether the row should be locked (`true`) or enabled (`false`).\r\n */\r\n @Input() isRowLocked: (rowItem: T) => boolean;\r\n\r\n /**\r\n * Configuration for enabling drag-and-drop functionality within the datagrid.\r\n * By default, drag and drop is disabled. To enable it, provide a valid configuration object\r\n * implementing the @see DatagridDragConfig interface.\r\n */\r\n @Input() dragConfig: DatagridDragConfig;\r\n\r\n /**\r\n * An array of properties used for advanced filtering in FilterMode.Advanced\r\n */\r\n @Input() filterableProperties: FilterablePropertyDefinition[] = [];\r\n\r\n /**\r\n * Specifies the type of global filter to enable.\r\n * - `FilterMode.Quick`: Enables the quick filter.\r\n * - `FilterMode.Advanced`: Enables the advanced filter.\r\n * - `FilterMode.AdvancedOnly`: Enables only the advanced filter.\r\n *\r\n * When the filter is enabled, the component will emit the `searchTermChange`/`advancedFilterChange` event whenever the filter changes.\r\n * If not set, no filter will be displayed.\r\n */\r\n @Input() filterMode?: FilterMode;\r\n\r\n /**\r\n * Action definitions for the single row actions.\r\n */\r\n @Input() singleRowActions: ActionDefinition[] | null;\r\n\r\n /**\r\n * Controls whether the datagrid selection should be preserved on filtering.\r\n */\r\n @Input() preserveExistingSelectionOnFilter: boolean;\r\n\r\n /**\r\n * Controls whether the datagrid uses virtual scrolling to render data.\r\n * Virtual scrolling improves performance with large datasets by only rendering\r\n * rows that are currently visible in the viewport.\r\n *\r\n * @remarks\r\n * Virtual scrolling has the following limitations:\r\n * - Requires fixed row height for accurate scroll position calculations\r\n * - Cell text is always truncated to maintain consistent row heights\r\n * - Expandable rows are not supported due to height constraints\r\n * - Only works with server-driven data mode\r\n *\r\n * @default false\r\n */\r\n @Input() virtualScrolling = false;\r\n\r\n /**\r\n * Controls whether the \"unsort\" step is removed from the column sort cycle for\r\n * every column in the grid.\r\n * - `true` (default): sorting toggles ASC ↔ DESC only; a sorted column cannot\r\n * be returned to the unsorted state by clicking its header.\r\n * - `false`: sorting cycles ASC → DESC → unsorted (Clarity's default behavior).\r\n *\r\n * A column may override this grid-level default via\r\n * {@link ColumnDefinition.disableUnsort}.\r\n *\r\n * @default true\r\n */\r\n @Input() disableUnsort = true;\r\n\r\n /**\r\n * Input for providing data when virtual scrolling is enabled.\r\n * <code>gridItems</code> should not be used in this case.\r\n */\r\n @Input() dataRange: HermesDatagridVirtualScrollRangeInterface<T> = {\r\n total: 100,\r\n skip: 0,\r\n data: [],\r\n };\r\n\r\n /**\r\n * Data source for the Datagrid, represented as an array of row objects.\r\n *\r\n * Each object in this array corresponds to a row in the Datagrid, where\r\n * individual fields map to columns based on each column's `field` property\r\n * as defined in {@link ColumnDefinition}.\r\n */\r\n @Input() gridItems: T[];\r\n\r\n /**\r\n * Emits the updated page size {@link pageSize} to the parent component when changed.\r\n */\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Emits the updated gridItems to the parent component when changed.\r\n */\r\n @Output() gridItemsChange: EventEmitter<T[]> = new EventEmitter<T[]>();\r\n\r\n /**\r\n * Emits when advanced filter criteria changes.\r\n */\r\n @Output() advancedFilterChange: EventEmitter<PropertyFilter[]> = new EventEmitter<PropertyFilter[]>();\r\n\r\n /**\r\n * Emits the updated column definitions {@link columns} to the parent component when changed.\r\n */\r\n @Output() columnDefsChange: EventEmitter<ColumnDefinition<T>[]> = new EventEmitter<ColumnDefinition<T>[]>();\r\n\r\n /**\r\n * Emits the updated selected items {@link selectedItems} when changed.\r\n */\r\n @Output() selectedItemsChange: EventEmitter<T[]> = new EventEmitter<T[]>();\r\n\r\n /**\r\n * Event emitter to tell the hosting view that user has requested to export list data\r\n */\r\n @Output() exportDataEvent: EventEmitter<ExportStatus> = new EventEmitter<ExportStatus>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that search term, used for filtering has changed.\r\n */\r\n @Output() searchTermChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that size of column has changed.\r\n */\r\n @Output() columnResize: EventEmitter<ColumnResize> = new EventEmitter<ColumnResize>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that sort order of column has changed.\r\n */\r\n @Output() columnSortOrderChange: EventEmitter<ColumnSortOrder> = new EventEmitter<ColumnSortOrder>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that hidden state of column has changed.\r\n */\r\n @Output() columnHiddenStateChange: EventEmitter<ColumnHiddenState> = new EventEmitter<ColumnHiddenState>();\r\n\r\n // Disabled for now: only the hermesDgPinnable header toggle could ever raise this, so it is\r\n // commented out along with the toggle, onPinnedChange() below and the ColumnPinnedState\r\n // interface. Kept as a line comment rather than a doc comment, so api-extractor does not attach\r\n // it to the next output.\r\n //\r\n // /**\r\n // * Event emitter to tell hosting view that the user pinned or unpinned a column.\r\n // */\r\n // @Output() columnPinnedChange: EventEmitter<ColumnPinnedState> = new EventEmitter<ColumnPinnedState>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that column filtering has changed.\r\n */\r\n @Output() columnFilterChange: EventEmitter<ColumnFilterChange> = new EventEmitter<ColumnFilterChange>();\r\n\r\n /**\r\n * Event emitter emitted when the data needs to be refreshed,\r\n * based on user action or external ones.\r\n */\r\n @Output() refreshGridData: EventEmitter<HermesDatagridStateInterface> = new EventEmitter<HermesDatagridStateInterface>();\r\n\r\n /**\r\n * Event emitter emits when data in the grid with virtual scrolling needs to be refreshed.\r\n */\r\n @Output() refreshVirtualGridData: EventEmitter<HermesDatagridStateInterface> =\r\n new EventEmitter<HermesDatagridStateInterface>();\r\n\r\n /**\r\n * Event emitter triggered when a single-row action or actionbar action is clicked.\r\n * The emitted event contains information about the action that was clicked. {@link ActionClickEvent}\r\n */\r\n @Output() actionClick = new EventEmitter<ActionClickEvent>();\r\n\r\n /**\r\n * Event emitter triggered when the single-row action menu is opened.\r\n * The emitted event contains information about the open state and the actions associated with the menu. {@link SingleRowActionOpen}\r\n */\r\n @Output() rowActionMenuOpenChange = new EventEmitter<SingleRowActionOpen>();\r\n\r\n /**\r\n * Event emitter triggered when a right-click event is performed on a grid row.\r\n */\r\n @Output() openContextMenu: EventEmitter<ContextMenuEvent> = new EventEmitter<ContextMenuEvent>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that column order has changed.\r\n */\r\n @Output() columnOrderChange: EventEmitter<ColumnOrderChanged> = new EventEmitter<ColumnOrderChanged>();\r\n\r\n @HostBinding('class.embedded-flex-component') protected applyFlexLayout = true;\r\n @HostBinding('class') protected zoomLevel: ZoomLevel = ZoomLevel.none;\r\n\r\n protected gridLayoutModel: GridLayoutModel = {\r\n compact: true,\r\n disabled: false,\r\n stretchToParentHeight: true,\r\n };\r\n protected gridFooterModel: GridFooterModel = {\r\n showFooter: true,\r\n hideColumnToggle: false,\r\n enableCustomExport: false,\r\n };\r\n protected readonly defaultUnsetValue: string = undefined as unknown as string;\r\n protected readonly defaultUnsortedOrder: HermesDatagridSortOrder = HermesDatagridSortOrder.UNSORTED;\r\n protected readonly dgStrings: DatagridStrings;\r\n protected enableSingleRowActions = false;\r\n\r\n @ViewChild(HermesDatagrid, { static: true }) private hermesDatagrid: HermesDatagrid;\r\n\r\n readonly #defaultActionButtonClass: string = ActionBarLayout.flatCompact;\r\n readonly #interpolationExpression: RegExp = /\\{(\\d+)\\}/g;\r\n readonly #unsubscribeSubject: Subject<void> = new Subject<void>();\r\n readonly #zoomLevelSubscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Array of objects defining the properties of each column in the Datagrid.\r\n *\r\n * @type ColumnDefinition\r\n */\r\n #dgColumns: ColumnDefinition<T>[];\r\n #selectionType: SelectionType = SelectionType.Single;\r\n #selectedItems: T[] = [];\r\n #rowSelectionMode = true;\r\n #actionBarActions: ActionDefinition[] = [];\r\n /**\r\n * Disable datagrid rows, has the same value as\r\n * 'disabled' input and is changed when this input is changed.\r\n * It is needed only because in some modals when the grid is init with\r\n * disabled state equal to true this state is not apply on row select column\r\n * and row's checkbox/radiobuttons for selection are enabled for disabled grid.\r\n * The resolution of this problem is the row disabled state to be init in ngAfterViewInit\r\n * method on a base of 'disabled' input.\r\n * Default: false\r\n */\r\n #areRowsDisabled = false;\r\n #pageSize = 0;\r\n /**\r\n * Whether there are applied advanced filters\r\n */\r\n #hasAdvancedFilters = false;\r\n #wrapCellText = true;\r\n\r\n constructor(\r\n datagridStrings: DatagridStrings,\r\n @Inject(uniqueIdToken) private readonly uid: string,\r\n private cdr: ChangeDetectorRef,\r\n private readonly exportProviderService: ExportProviderService,\r\n @Optional() private readonly groupService: DragAndDropGroupService,\r\n @Optional() private readonly zoomLevelService: ZoomLevelService\r\n ) {\r\n this.dgStrings = {\r\n ...datagridStrings,\r\n };\r\n }\r\n\r\n /**\r\n * Input property for the grid layout configuration.\r\n * Allows the consumer of the component to provide configuration values.\r\n *\r\n * @See GridLayoutModel\r\n */\r\n @Input()\r\n get layoutModel(): GridLayoutModel {\r\n return { ...this.gridLayoutModel };\r\n }\r\n\r\n set layoutModel(config: GridLayoutModel) {\r\n this.gridLayoutModel = {\r\n ...config,\r\n compact: config?.compact ?? true,\r\n stretchToParentHeight: config?.stretchToParentHeight ?? true,\r\n };\r\n this.applyFlexLayout = !!this.gridLayoutModel.stretchToParentHeight;\r\n }\r\n\r\n /**\r\n * Input property for the footer configuration.\r\n * Allows the consumer of the component to provide configuration values.\r\n *\r\n * @See GridFooterModel\r\n */\r\n @Input()\r\n get footerModel(): GridFooterModel {\r\n return { ...this.gridFooterModel };\r\n }\r\n\r\n set footerModel(config: GridFooterModel) {\r\n this.gridFooterModel = {\r\n ...config,\r\n showFooter: config?.showFooter ?? true,\r\n };\r\n }\r\n\r\n /**\r\n * Array of column definitions that configure the appearance and behavior of each column in the Datagrid.\r\n *\r\n * Each object in this array represents a column {@link ColumnDefinition}.\r\n * The required ColumnDefinition properties are:\r\n * - `displayName`: The text for the column header.\r\n * - `field`: The name of the property in the data source to be shown in the column.\r\n */\r\n @Input()\r\n get columns(): ColumnDefinition<T>[] {\r\n return this.#dgColumns;\r\n }\r\n\r\n set columns(columns: ColumnDefinition<T>[]) {\r\n this.#dgColumns = columns;\r\n if (columns) {\r\n this.visibleColumns = columns.filter((column: ColumnDefinition<T>) => !column.hidden);\r\n this.columnDefsChange.emit(this.#dgColumns);\r\n }\r\n\r\n if (this.hermesDatagrid.columns) {\r\n this.hermesDatagrid.dataChanged();\r\n }\r\n }\r\n\r\n /**\r\n * Defines the grid selection type.\r\n * Accepts a value from `SelectionType` enum {@link SelectionType}, which specifies the row selection behavior:\r\n * - `SelectionType.NONE`: No rows are selectable.\r\n * - `SelectionType.SINGLE_SELECT` (default): Only one row can be selected at a time.\r\n * - `SelectionType.MULTI_SELECT`: Multiple rows can be selected.\r\n *\r\n * Defaults to `SelectionType.SINGLE_SELECT`.\r\n */\r\n @Input()\r\n get selectionType(): SelectionType {\r\n return this.#selectionType;\r\n }\r\n\r\n set selectionType(type: SelectionType | string) {\r\n // guard against malformed component bindings to unset variables\r\n if (type !== undefined) {\r\n this.#selectionType = selectionTypeAttribute(type);\r\n\r\n if (this.hermesDatagrid) {\r\n this.initGridSelection();\r\n }\r\n }\r\n }\r\n /**\r\n * Array of grid items {@link gridItems} which to be selected.\r\n */\r\n @Input()\r\n get selectedItems(): T[] {\r\n return this.#selectedItems;\r\n }\r\n set selectedItems(items: T[]) {\r\n this.#selectedItems = Array.isArray(items) ? items.filter((item: T) => item !== undefined) : [];\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Enables or disables selection/deselection of rows when a row is clicked.\r\n * If `SelectionType` is set to `NONE`, row selection is automatically disabled, regardless of this setting.\r\n * Defaults to `true`.\r\n */\r\n @Input()\r\n get rowSelectionMode(): boolean {\r\n // Clarity 15 allows row selection even though the selection mode is none.\r\n // Ensure that row selection mode is false when selection mode is none.\r\n return this.#selectionType === SelectionType.None ? false : this.#rowSelectionMode;\r\n }\r\n\r\n set rowSelectionMode(value: boolean) {\r\n this.#rowSelectionMode = value;\r\n }\r\n\r\n /**\r\n * Action definitions for the action bar.\r\n */\r\n @Input()\r\n get actionBarActions(): ActionDefinition[] {\r\n return this.#actionBarActions;\r\n }\r\n\r\n set actionBarActions(actions: ActionDefinition[] | null) {\r\n if (actions) {\r\n actions.forEach((action: ActionDefinition) => {\r\n action.class = action.class || this.#defaultActionButtonClass;\r\n });\r\n this.#actionBarActions = actions;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the number of items displayed per page in the datagrid.\r\n * By default, no page size is set.\r\n */\r\n @Input()\r\n get pageSize(): number {\r\n return this.#pageSize;\r\n }\r\n\r\n set pageSize(value: number) {\r\n this.#pageSize = value;\r\n if (value > 0) {\r\n this.pageSizeChange.emit(this.#pageSize);\r\n }\r\n }\r\n\r\n @Input()\r\n set datagridLabels(overriddenStrings: Partial<DatagridStrings>) {\r\n if (overriddenStrings) {\r\n for (const key of Object.keys(overriddenStrings) as Array<keyof DatagridStrings>) {\r\n this.dgStrings[key] = overriddenStrings[key] || '';\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Defines whether the content in the cells of the datagrid should be wrapped\r\n * {@see DatagridContentNoWrapDirective}.\r\n */\r\n get wrapText(): boolean {\r\n return this.#wrapCellText;\r\n }\r\n\r\n set wrapText(value: boolean) {\r\n if (value !== this.#wrapCellText) {\r\n this.#wrapCellText = value;\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n protected get rowsDisabled(): boolean {\r\n return this.#areRowsDisabled;\r\n }\r\n\r\n protected get enableToolBar(): boolean {\r\n return !!this.actionBarActions?.length || (this.filterMode !== null && this.filterMode !== undefined);\r\n }\r\n\r\n protected get enableExportButton(): boolean {\r\n return !!this.gridFooterModel.enableCustomExport || !!this.gridFooterModel.clientSideExportConfig;\r\n }\r\n\r\n protected get selectedItemsCount() {\r\n return this.#selectedItems ? this.#selectedItems.length : 0;\r\n }\r\n\r\n protected get showDeselectAll(): boolean {\r\n return this.#selectionType === SelectionType.Multi;\r\n }\r\n\r\n protected get deselectAllDisabled(): boolean {\r\n return this.selectedItemsCount === 0;\r\n }\r\n\r\n protected get filteredItemsCount(): number {\r\n let filteredItemsCount = 0;\r\n if (this.searchTerm?.length > 0 || this.#hasAdvancedFilters) {\r\n filteredItemsCount = this.totalItems;\r\n }\r\n return filteredItemsCount;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initGridSelection();\r\n this.initTotalItemsCount();\r\n if (this.zoomLevelService) {\r\n this.zoomLevelService.onChange.subscribe((v: ZoomLevel) => (this.zoomLevel = v));\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#areRowsDisabled = !!this.gridLayoutModel.disabled;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#unsubscribeSubject.next();\r\n this.#unsubscribeSubject.complete();\r\n this.#zoomLevelSubscription.unsubscribe();\r\n }\r\n\r\n resize(): void {\r\n this.hermesDatagrid.resize();\r\n }\r\n\r\n onModelChange(): void {\r\n this.cdr.markForCheck();\r\n }\r\n\r\n onContextMenu($event: MouseEvent, item: T): void {\r\n if (\r\n this.#selectionType !== SelectionType.None &&\r\n !this.isItemSelected(item) &&\r\n (!this.isRowLocked || !this.isRowLocked(item))\r\n ) {\r\n this.#selectedItems = [];\r\n this.updateSelectedItems(item);\r\n }\r\n const targets: T[] = this.#selectionType === SelectionType.Multi ? this.#selectedItems : [item];\r\n $event.preventDefault();\r\n this.openContextMenu.emit({ event: $event, context: targets });\r\n }\r\n\r\n onColumnOrderChange(data: ColumnOrderChanged) {\r\n this.columns = data.columns;\r\n this.visibleColumns = this.columns.filter((column: ColumnDefinition<T>) => !column.hidden);\r\n this.cdr.detectChanges();\r\n //Without resize when the grid is empty and column is moved\r\n //the columns are not displayed correctly\r\n this.resize();\r\n this.columnOrderChange.emit(data);\r\n }\r\n\r\n /**\r\n * Virtual scroll event handler. Called when visible data range has changed\r\n */\r\n renderedRangeChange($event: ListRange) {\r\n const currentPageState: HermesDatagridStateInterface = {\r\n page: { size: $event.end - $event.start, from: $event.start },\r\n };\r\n\r\n if ($event.start === 0 && $event.end === 0) {\r\n return;\r\n }\r\n\r\n this.refreshVirtualGridData.emit(currentPageState);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Scrolls to a specified index when virtual scrolling is enabled.\r\n */\r\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\r\n if (this.virtualScrolling) {\r\n this.hermesDatagrid.virtualScroll.scrollToIndex(index, behavior);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['gridItems'] && changes['gridItems'].currentValue) {\r\n this.gridItemsChange.emit(this.gridItems);\r\n this.preselectDetail();\r\n\r\n if (!this.serverDrivenDatagrid) {\r\n this.totalItems = this.gridItems.length;\r\n this.listItemsCount = this.gridItems.length;\r\n } else if (!changes['gridItems'].isFirstChange() && this.selectionType === SelectionType.Multi) {\r\n this.notifyOnChanges();\r\n }\r\n }\r\n // inform Clarity datagrid component for building headers\r\n if (\r\n changes['columns'] &&\r\n Array.isArray(changes['columns'].currentValue) &&\r\n changes['columns'].currentValue.length\r\n ) {\r\n this.cdr.detectChanges();\r\n }\r\n //Skip first initial change of disabled field, initially the\r\n //areRowsDisabled field is updated in ngAfterViewInit method\r\n if (changes.layoutModel?.currentValue && !changes.layoutModel.isFirstChange()) {\r\n this.#areRowsDisabled = !!this.gridLayoutModel?.disabled;\r\n }\r\n\r\n if (changes['singleRowActions']) {\r\n this.initActionTypes();\r\n }\r\n }\r\n\r\n /**\r\n * Wrapper around trackByFn intended for identity comparison only.\r\n * The index passed (0) is a dummy value and should not be relied upon.\r\n */\r\n trackByGridItemFn = (item: T) => this.trackByFn(0, <T>(item || {}));\r\n\r\n trackByColumnId(index: number, column: ColumnDefinition<T>): string {\r\n return column.uid || column.displayName;\r\n }\r\n\r\n buildRowDetailContentId(index: number): string {\r\n return `datagrid-${this.uid}-row-detail-${index}`;\r\n }\r\n\r\n onAdvancedFilterCriteriaChange(filterCriteria: PropertyFilter[]): void {\r\n // We need to know if there are filters, because of filteredItemsCount\r\n this.#hasAdvancedFilters = filterCriteria ? filterCriteria.length > 0 : false;\r\n this.advancedFilterChange.emit(filterCriteria);\r\n }\r\n\r\n /**\r\n * Handles datagrid selected items changes.\r\n * It is public because is use from directives to emit selection\r\n * change events (see DatagridPreserveSelection directive).\r\n */\r\n onSelectedItemsChange(selected: T[]): void {\r\n this.#selectedItems = selected;\r\n this.selectedItemsChange.emit(selected);\r\n }\r\n\r\n /**\r\n * Return DataGrid footer label.\r\n * - Return \"datagridLabels.footer\" property, if defined.\r\n * - If there is one item -> 1 item\r\n * - If there is no paging -> {0} items\r\n * - Else -> {1} - {2} of {0} items\r\n */\r\n getFooterMessage(totalItems: number, pageSize?: number, firstItem?: number, lastItem?: number): string {\r\n let footer: string | undefined = this.dgStrings.footer;\r\n if (footer) {\r\n // Footer is overridden.\r\n return this.interpolateMessage(footer, [totalItems, firstItem, lastItem]);\r\n }\r\n\r\n // Flag indicating when to show current range of loaded items (e.g. {1} - {2} of {0} items)\r\n const showRange =\r\n (pageSize !== undefined && pageSize > 0 && totalItems > pageSize) ||\r\n (lastItem !== undefined &&\r\n firstItem !== undefined &&\r\n this.virtualScrolling &&\r\n totalItems > 0 &&\r\n totalItems > lastItem - firstItem + 1);\r\n\r\n if (totalItems === 1) {\r\n footer = this.dgStrings.singleItem;\r\n } else if (showRange) {\r\n footer = this.interpolateMessage(this.dgStrings.pagedItems, [totalItems, firstItem, lastItem]);\r\n } else {\r\n footer = this.interpolateMessage(this.dgStrings.multipleItems, [totalItems]);\r\n }\r\n return footer;\r\n }\r\n\r\n toggleAll(): void {\r\n if (this.hermesDatagrid) {\r\n this.hermesDatagrid.allSelected = !this.hermesDatagrid.allSelected;\r\n }\r\n }\r\n\r\n protected getExpandDetailsLabel(item: T): string {\r\n if (!this.hasExpandableRows(item)) {\r\n return '';\r\n }\r\n const itemName: string = (item as any)[this.visibleColumns?.[0]?.field || ''] || '';\r\n return this.interpolateMessage(this.dgStrings.expandDetailsPaneLabel, [itemName]);\r\n }\r\n\r\n protected getCollapseDetailsLabel(item: T): string {\r\n if (!this.hasExpandableRows(item)) {\r\n return '';\r\n }\r\n const itemName: string = (item as any)[this.visibleColumns?.[0]?.field || ''] || '';\r\n return this.interpolateMessage(this.dgStrings.collapseDetailsPaneLabel, [itemName]);\r\n }\r\n\r\n protected onColumnResize(columnSize: number, column: ColumnDefinition<T>): void {\r\n this.columnResize.emit({ columnSize: columnSize, column: column });\r\n }\r\n\r\n // Disabled along with hermesDgPinnable, which was the only thing that called this.\r\n // protected onPinnedChange(pinned: boolean, column: ColumnDefinition<T>): void {\r\n // // The column definition is the source of truth for the binding, so it has to be updated or the\r\n // // next change detection would push the previous value back onto the column.\r\n // column.pinned = pinned;\r\n // this.columnPinnedChange.emit({ pinned: pinned, column: column });\r\n // }\r\n\r\n protected onSortOrderChange(sortOrder: HermesDatagridSortOrder, column: ColumnDefinition<T>): void {\r\n const columnSortOrder = {\r\n sortOrder: sortOrder,\r\n column: column,\r\n };\r\n if (this.gridFooterModel?.clientSideExportConfig?.sort) {\r\n this.gridFooterModel.clientSideExportConfig.sortOrder = columnSortOrder;\r\n }\r\n this.columnSortOrderChange.emit(columnSortOrder);\r\n this.columns.forEach(col => (col.defaultSortOrder = this.defaultUnsortedOrder));\r\n column.defaultSortOrder = sortOrder;\r\n }\r\n\r\n protected onDeselectAllClick(): void {\r\n this.#selectedItems = [];\r\n this.selectedItemsChange.emit(this.#selectedItems);\r\n }\r\n\r\n protected onSelectAllInVirtualGrid(isSelect: boolean) {\r\n if (isSelect) {\r\n // Select all\r\n // Append all currently loaded records to the existing selection\r\n const newSelection = [...this.#selectedItems];\r\n this.dataRange.data.forEach(item => {\r\n if (!this.#selectedItems.some(selected => this.trackByGridItemFn(selected) === this.trackByGridItemFn(item))) {\r\n newSelection.push(item);\r\n }\r\n });\r\n this.#selectedItems = newSelection;\r\n\r\n this.selectedItemsChange.emit(newSelection);\r\n } else {\r\n // Deselect all\r\n this.onDeselectAllClick();\r\n }\r\n }\r\n\r\n protected onDragStart(row: T): void {\r\n this.setDraggedItems(row);\r\n }\r\n\r\n protected onDragMove(): void {\r\n // note mibryamov: since the default strategy for change detection is\r\n // OnPush, if we don't mark the view changed on every drag move, when\r\n // you stop the dragging without triggering OnDrop on the target area,\r\n // the dragging ghost element is not positioned as expected when\r\n // disappearing, it goes to the top-left corner of the page instead of\r\n // going to the drop handle icon from where the drag is triggered. To\r\n // prevent this we should mark the view changed on every move.\r\n this.cdr.markForCheck();\r\n }\r\n\r\n protected onFilterChange(filterValue: unknown, column: ColumnDefinition<T>): void {\r\n this.columnFilterChange.emit({\r\n filterValue: filterValue,\r\n column: column,\r\n });\r\n }\r\n\r\n protected onColumnHiddenStateChange(value: ColumnHiddenState): void {\r\n this.columnHiddenStateChange.emit(value);\r\n if (this.gridItems && this.gridItems.length === 0 && value.hidden === false) {\r\n // Force change detection otherwise column is not shown when grid is empty\r\n this.cdr.detectChanges();\r\n this.resize();\r\n }\r\n }\r\n\r\n protected refreshGrid(state: HermesDatagridStateInterface): void {\r\n if (this.virtualScrolling) {\r\n return;\r\n }\r\n\r\n // There is a 'cosmetic' change in Clarity 2 in the page provider.\r\n // The change is related to using firstItem & lastItem in generating page info, when there are no items.\r\n // However, this breaks our data retrieval. For this reason, we are keeping the page state as it was before.\r\n if (state.page && state.page.from === -1) {\r\n state.page.from = 0;\r\n }\r\n if (state.page && state.page.to === -1) {\r\n state.page.to = 0;\r\n }\r\n this.refreshGridData.emit(state);\r\n if (this.detailState) {\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n protected onExportEvent(exportStatus: ExportStatus): void {\r\n if (this.footerModel.enableCustomExport || this.footerModel.clientSideExportConfig?.customExport) {\r\n // If custom export is enabled, emit the export event and return.\r\n this.exportDataEvent.emit(exportStatus);\r\n return;\r\n }\r\n if (this.footerModel.clientSideExportConfig) {\r\n // If client-side export configuration is available, process with the export.\r\n const datagridItemSet: DatagridItemSet = {\r\n totalDatagridItems: this.gridItems,\r\n selectedItems: this.selectedItems,\r\n filteredDatagridItems: [],\r\n };\r\n this.exportProviderService.exportUIOnlyData(\r\n this.footerModel.clientSideExportConfig,\r\n exportStatus,\r\n datagridItemSet\r\n );\r\n }\r\n }\r\n\r\n protected onActionClick(action: ActionDefinition, context?: T | T[]): void {\r\n // We have context when is clicked row action\r\n // when the action bar action is clicked the context is the selected items\r\n if (!context) {\r\n context = this.#selectedItems;\r\n }\r\n this.actionClick.emit({ action: action, context: context });\r\n }\r\n\r\n protected onRowActionOverflowOpen(open: boolean, actions: ActionDefinition[] | null, item: T): void {\r\n this.rowActionMenuOpenChange.emit({\r\n open: open,\r\n actions: actions,\r\n context: item,\r\n });\r\n }\r\n\r\n protected onAdvancedSearchTermChange(searchTerm: string): void {\r\n // We need the search term, because of filteredItemsCount\r\n this.searchTerm = searchTerm;\r\n this.searchTermChange.emit(searchTerm);\r\n }\r\n\r\n /**\r\n * Update \"detailState\" with the latest value\r\n * @param state\r\n */\r\n protected onDetailStateChange(state: T): void {\r\n if (state !== this.detailState) {\r\n this.detailState = state;\r\n this.detailStateChange.emit(state);\r\n }\r\n }\r\n\r\n /**\r\n * Angular ngFor optimization:\r\n * By allowing client to specify a given function or property key lookup expression\r\n * the looping and binding over large datasets can now offer performance.\r\n * The default Angular differ offered is slower since it does a complete object comparison.\r\n */\r\n protected trackByFn(index: number, gridItem: T): T {\r\n if (this.trackByGridItemProperty) {\r\n const result = getNestedProperty<T>(gridItem, this.trackByGridItemProperty);\r\n if (result.isValid) {\r\n return result.value as T;\r\n }\r\n }\r\n\r\n if (this.trackByFunction) {\r\n return this.trackByFunction(index, gridItem);\r\n }\r\n\r\n return gridItem;\r\n }\r\n\r\n protected isItemSelected(item: T): boolean {\r\n for (const selectedItem of this.#selectedItems) {\r\n if (selectedItem === item) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n protected dropGroup(group: string): CdkDropList[] {\r\n return (this.groupService?.getGroupItems(group) || []) as CdkDropList[];\r\n }\r\n\r\n private hasExpandableRows(item: T): boolean {\r\n return !!this.detailHeader || !!this.detailBody || !!(item as any)?.rowDetailRenderer || !!this.rowDetailContent;\r\n }\r\n\r\n private preselectDetail(): void {\r\n const isDetailEnabled: boolean = !!this.detailHeader || !!this.detailBody;\r\n if (isDetailEnabled && this.detailState && (this.trackByGridItemProperty || this.trackByFunction)) {\r\n const gridItems: T[] = this.gridItems || [];\r\n\r\n const matchingItems: T[] = gridItems.filter((item: T): boolean => {\r\n return this.trackByGridItemFn(item) === this.trackByGridItemFn(this.detailState as T);\r\n });\r\n if (matchingItems.length === 0) {\r\n // Hide detail pane when item is no longer present in the dataset\r\n this.detailState = null;\r\n } else {\r\n this.detailState = matchingItems[0];\r\n // In order for the datagrid detail caret button to be activated and\r\n // detail pane anchor to point to the grid item two change\r\n // detection cycles are required. Otherwise the detail pane is shown\r\n // but anchor and activated datagrid detail caret button are not.\r\n this.cdr.detectChanges();\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n private setDraggedItems(row: T): void {\r\n this.draggedItems = [];\r\n if (this.isItemSelected(row)) {\r\n this.draggedItems.push(...this.#selectedItems);\r\n } else {\r\n this.draggedItems.push(row);\r\n }\r\n }\r\n\r\n /**\r\n * Notifies clarity datagrid about data changes.\r\n * When <code>trackByFunction</code> or <code>trackByGridItemProperty</code>\r\n * is provided clarity datagrid is not able to pick up data changes in the\r\n * <code>rows</<code> collection and selection is messed up. Angular just\r\n * does not emit <code>QueryList<T>.changes</code> in this case.\r\n */\r\n private notifyOnChanges() {\r\n // Disable check for this.trackByFunction since the compiler thinks it's always assigned but that's not the case.\r\n // In the PreselectComponent interface, trackByFunction is required but in the datagrid it's optional.\r\n\r\n // @ts-ignore\r\n if (this.trackByGridItemProperty || this.trackByFunction) {\r\n setTimeout(() => {\r\n this.hermesDatagrid?.rows?.notifyOnChanges();\r\n }, 0);\r\n }\r\n }\r\n\r\n private initActionTypes(): void {\r\n if (this.singleRowActions) {\r\n this.enableSingleRowActions = true;\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n private initGridSelection(): void {\r\n if (this.hermesDatagrid) {\r\n this.hermesDatagrid.identityFn = this.trackByGridItemFn;\r\n }\r\n\r\n if (this.preSelectFirstItem && this.gridItems && this.gridItems.length > 0) {\r\n // TODO: Find better solution, This will not work if we\r\n // have some default sorting\r\n this.#selectedItems = [this.gridItems[0]];\r\n }\r\n }\r\n\r\n private updateSelectedItems(item: T) {\r\n if (this.#selectionType === SelectionType.Single) {\r\n this.#selectedItems = [item];\r\n } else {\r\n this.#selectedItems.push(item);\r\n }\r\n\r\n this.selectedItemsChange.emit(this.#selectedItems);\r\n }\r\n\r\n private initTotalItemsCount() {\r\n if (!this.footerModel.showFooter || this.serverDrivenDatagrid) {\r\n return;\r\n }\r\n\r\n if (this.gridItems && this.gridItems.length > 0) {\r\n this.totalItems = this.gridItems.length;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n // This clarity items (hermesDatagrid.items) are all items if there are no pages\r\n // and only the items in the page if there are pages in the grid.\r\n // We can listen for changes and update the totalItems only if the grid doesn't use\r\n // pages. This is usable for example when the user filer data in the grid which doesn't\r\n // have pages, in this case we can show correctly the number of items displayed after filtering\r\n this.hermesDatagrid.items.change\r\n .pipe(\r\n filter(() => this.pageSize <= 0),\r\n takeUntil(this.#unsubscribeSubject)\r\n )\r\n .subscribe((value: T[]) => {\r\n this.totalItems = value.length;\r\n });\r\n }\r\n\r\n private interpolateMessage(message: string, parameters: unknown[]): string {\r\n return message.replace(this.#interpolationExpression, (match: string, index: number) => {\r\n if (index >= parameters.length) {\r\n // There are fewer parameters than there are placeholders,\r\n // return the placeholder value.\r\n return match;\r\n }\r\n return String(parameters[index]);\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<hermes-datagrid\r\n zoomLevelIndicator\r\n [hermesDgDisablePageFocus]=\"true\"\r\n [hermesDgPreserveSelection]=\"preserveExistingSelectionOnFilter\"\r\n [hermesDgSelectionType]=\"selectionType\"\r\n [hermesDgSelected]=\"selectedItems\"\r\n [hermesDgItemsIdentityFn]=\"trackByGridItemFn\"\r\n (hermesDgRefresh)=\"refreshGrid($event)\"\r\n [hermesDgLoading]=\"loading\"\r\n [hermesLoadingMoreItems]=\"loadingMoreItems\"\r\n [hermesDgRowSelection]=\"rowSelectionMode\"\r\n [ngClass]=\"{\r\n 'disabled-grid': gridLayoutModel.disabled,\r\n 'datagrid-compact': gridLayoutModel.compact,\r\n 'flex-hermes-datagrid': gridLayoutModel.stretchToParentHeight,\r\n 'datagrid-overflow-ellipsis': virtualScrolling || !wrapText,\r\n }\"\r\n cdkDropList\r\n [cdkDropListAutoScrollStep]=\"5\"\r\n appfxDgColumnsOrder\r\n [hermesDgCustomSelectAllEnabled]=\"virtualScrolling\"\r\n (hermesDgCustomSelectAll)=\"onSelectAllInVirtualGrid($event)\"\r\n [dgColumnsOrderColumns]=\"columns\"\r\n [dgColumnsVirtualScrolling]=\"virtualScrolling\"\r\n (dgColumnsOrderChange)=\"onColumnOrderChange($event)\"\r\n (hermesDgSelectedChange)=\"onSelectedItemsChange($event)\"\r\n>\r\n <hermes-dg-action-bar *ngIf=\"enableToolBar\">\r\n @if (!!actionBarActions.length) {\r\n <div class=\"appfx-datagrid-actions-container\">\r\n <appfx-datagrid-action-bar\r\n class=\"action-bar\"\r\n (invokeAction)=\"onActionClick($event)\"\r\n [actions]=\"actionBarActions\"\r\n >\r\n </appfx-datagrid-action-bar>\r\n </div>\r\n }\r\n @if (filterMode !== undefined && filterMode !== null) {\r\n <appfx-datagrid-filters\r\n [filterMode]=\"filterMode\"\r\n [filterableProperties]=\"filterableProperties\"\r\n (searchTermChange)=\"onAdvancedSearchTermChange($event)\"\r\n (propertyFiltersChange)=\"onAdvancedFilterCriteriaChange($event)\"\r\n >\r\n </appfx-datagrid-filters>\r\n }\r\n </hermes-dg-action-bar>\r\n @if (dragConfig) {\r\n <hermes-dg-column class=\"draggableCell\" style=\"width: 20px\"></hermes-dg-column>\r\n }\r\n @for (column of visibleColumns; track trackByColumnId(index, column); let index = $index) {\r\n <!--\r\n hermesDgPinnable is disabled for now, so these two bindings are commented out. Restoring them\r\n means putting them back on the hermes-dg-column below, next to [hermesDgPinned]:\r\n [hermesDgPinnable]=\"!!column.pinnable\"\r\n (hermesDgPinnedChange)=\"onPinnedChange($event, column)\"\r\n -->\r\n <hermes-dg-column\r\n cdkDrag\r\n [cdkDragLockAxis]=\"'x'\"\r\n [cdkDragData]=\"column\"\r\n [cdkDragDisabled]=\"!!column.pinned\"\r\n appfxColumnOrder\r\n [columnData]=\"column\"\r\n [columnIndex]=\"index\"\r\n [style]=\"column.width ? { width: column.width } : null\"\r\n (hermesDgColumnResize)=\"onColumnResize($event, column)\"\r\n [hermesDgField]=\"column.sortAndFilterByField || defaultUnsetValue\"\r\n [hermesDgSortBy]=\"column.sortComparator || defaultUnsetValue\"\r\n [hermesDgSortOrder]=\"column.defaultSortOrder || defaultUnsortedOrder\"\r\n (hermesDgSortOrderChange)=\"onSortOrderChange($event, column)\"\r\n [hermesDgDisableUnsort]=\"column.disableUnsort ?? disableUnsort\"\r\n [hermesDgPinned]=\"!!column.pinned\"\r\n >\r\n <hermes-dg-filter\r\n *ngIf=\"column.stringFilter || column.sortAndFilterByField\"\r\n [hermesDgFilter]=\"appfxDatagridStringFilter\"\r\n >\r\n <appfx-datagrid-filter\r\n #appfxDatagridStringFilter\r\n [stringFilterType]=\"column.stringFilter\"\r\n [filterValue]=\"column.defaultFilterValue\"\r\n [fieldName]=\"column.sortAndFilterByField\"\r\n (filterValueChange)=\"onFilterChange($event, column)\"\r\n ></appfx-datagrid-filter>\r\n </hermes-dg-filter>\r\n <hermes-dg-filter *ngIf=\"column.filter\">\r\n <appfx-dg-filter-container\r\n [filterType]=\"column.filter\"\r\n [filterValue]=\"column.defaultFilterValue\"\r\n (filterValueChange)=\"onFilterChange($event, column)\"\r\n ></appfx-dg-filter-container>\r\n </hermes-dg-filter>\r\n {{ column.displayName }}\r\n </hermes-dg-column>\r\n }\r\n <hermes-dg-placeholder>\r\n {{ dgStrings.noItemsFound }}\r\n <ng-content select=\".custom-placeholder-content\"></ng-content>\r\n </hermes-dg-placeholder>\r\n\r\n <!-- Server driven datagrid with virtual scrolling -->\r\n @if (serverDrivenDatagrid && virtualScrolling) {\r\n <ng-template\r\n HermesVirtualScroll\r\n let-item\r\n let-i=\"index\"\r\n [hermesVirtualDataRange]=\"dataRange\"\r\n [hermesVirtualRowsItemSize]=\"25\"\r\n [hermesVirtualRowsMinBufferPx]=\"400\"\r\n [hermesVirtualRowsMaxBufferPx]=\"800\"\r\n [hermesVirtualRowsTemplateCacheSize]=\"400\"\r\n [hermesVirtualPersistItems]=\"false\"\r\n [hermesVirtualRowsTrackBy]=\"trackByFunction\"\r\n (renderedRangeChange)=\"renderedRangeChange($event)\"\r\n >\r\n <hermes-dg-row\r\n [hermesDgItem]=\"item\"\r\n [hermesDgSelectable]=\"item | isRowSelectable: isRowLocked : rowsDisabled\"\r\n [hermesDgRowSelectionLabel]=\"$any(item)?.[visibleColumns && visibleColumns.length ? visibleColumns[0].field : -1]\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n [hermesDgSkeletonLoading]=\"!item\"\r\n >\r\n @if (dragConfig) {\r\n <hermes-dg-cell class=\"draggableCell\" style=\"width: 20px\">\r\n <ng-container *ngTemplateOutlet=\"draggableCell; context: { $implicit: item }\"> </ng-container>\r\n </hermes-dg-cell>\r\n }\r\n @for (column of visibleColumns; track column) {\r\n <hermes-dg-cell class=\"fixed-cell-height\">\r\n <appfx-dg-cell-container [column]=\"column\" [item]=\"item\"></appfx-dg-cell-container>\r\n </hermes-dg-cell>\r\n }\r\n </hermes-dg-row>\r\n </ng-template>\r\n }\r\n\r\n <!-- Server driven datagrid with paging -->\r\n @if (serverDrivenDatagrid && !virtualScrolling) {\r\n @for (item of gridItems; track trackByFn.bind(this)(i, item); let i = $index) {\r\n <hermes-dg-row\r\n [hermesDgItem]=\"item\"\r\n [hermesDgDetailOpenLabel]=\"getExpandDetailsLabel(item)\"\r\n [hermesDgDetailCloseLabel]=\"getCollapseDetailsLabel(item)\"\r\n [hermesDgSelectable]=\"item | isRowSelectable: isRowLocked : rowsDisabled\"\r\n [hermesDgRowSelectionLabel]=\"$any(item)?.[visibleColumns && visibleColumns.length ? visibleColumns[0].field : -1]\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n <hermes-dg-action-overflow\r\n *ngIf=\"enableSingleRowActions\"\r\n (hermesDgActionOverflowOpenChange)=\"onRowActionOverflowOpen($event, singleRowActions, item)\"\r\n >\r\n @for (action of singleRowActions; track action) {\r\n <button\r\n class=\"action-item\"\r\n (click)=\"onActionClick(action, item)\"\r\n [title]=\"action.tooltip\"\r\n [disabled]=\"!action.enabled\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </hermes-dg-action-overflow>\r\n\r\n @if (dragConfig) {\r\n <hermes-dg-cell class=\"draggableCell\" style=\"width: 20px\">\r\n <ng-container *ngTemplateOutlet=\"draggableCell; context: { $implicit: item }\"> </ng-container>\r\n </hermes-dg-cell>\r\n }\r\n @for (column of visibleColumns; track column) {\r\n <hermes-dg-cell>\r\n <appfx-dg-cell-container [column]=\"column\" [item]=\"item\"></appfx-dg-cell-container>\r\n </hermes-dg-cell>\r\n }\r\n\r\n <ng-container *ngIf=\"rowDetailContent\" ngProjectAs=\"hermes-dg-row-detail\">\r\n @if ({ id: buildRowDetailContentId(i) }; as detailData) {\r\n <hermes-dg-row-detail\r\n *hermesIfExpanded=\"rowsExpandedByDefault\"\r\n tabindex=\"0\"\r\n [attr.aria-describedby]=\"detailData.id\"\r\n >\r\n <div [id]=\"detailData.id\" class=\"datagrid-row-flex\">\r\n <ng-container *ngTemplateOutlet=\"rowDetailContent; context: { item: item }\"> </ng-container>\r\n </div>\r\n </hermes-dg-row-detail>\r\n }\r\n </ng-container>\r\n </hermes-dg-row>\r\n }\r\n }\r\n\r\n <!-- Client side datagrid with paging -->\r\n @if (!serverDrivenDatagrid) {\r\n <hermes-dg-row\r\n *hermesDgItems=\"let item of gridItems; trackBy: trackByFn.bind(this); index as i\"\r\n [hermesDgItem]=\"item\"\r\n [hermesDgDetailOpenLabel]=\"getExpandDetailsLabel(item)\"\r\n [hermesDgDetailCloseLabel]=\"getCollapseDetailsLabel(item)\"\r\n [hermesDgSelectable]=\"item | isRowSelectable: isRowLocked : rowsDisabled\"\r\n [hermesDgRowSelectionLabel]=\"$any(item)?.[visibleColumns && visibleColumns.length ? visibleColumns[0].field : -1]\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n <hermes-dg-action-overflow\r\n *ngIf=\"enableSingleRowActions\"\r\n (hermesDgActionOverflowOpenChange)=\"onRowActionOverflowOpen($event, singleRowActions, item)\"\r\n >\r\n @for (action of singleRowActions; track action) {\r\n <button\r\n class=\"action-item\"\r\n (click)=\"onActionClick(action, item)\"\r\n [title]=\"action.tooltip\"\r\n [disabled]=\"!action.enabled\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </hermes-dg-action-overflow>\r\n\r\n @if (dragConfig) {\r\n <hermes-dg-cell class=\"draggableCell\">\r\n <ng-container *ngTemplateOutlet=\"draggableCell; context: { $implicit: item }\"> </ng-container>\r\n </hermes-dg-cell>\r\n }\r\n @for (column of visibleColumns; track column) {\r\n <hermes-dg-cell>\r\n <appfx-dg-cell-container [column]=\"column\" [item]=\"item\"></appfx-dg-cell-container>\r\n </hermes-dg-cell>\r\n }\r\n\r\n <ng-container *ngIf=\"$any(item).rowDetailRenderer\" ngProjectAs=\"hermes-dg-row-detail\">\r\n @if ({ id: buildRowDetailContentId(i) }; as detailData) {\r\n <hermes-dg-row-detail *hermesIfExpanded tabindex=\"0\" [attr.aria-describedby]=\"detailData.id\">\r\n <appfx-dg-cell-container\r\n [id]=\"detailData.id\"\r\n [column]=\"{\r\n displayName: '',\r\n field: '',\r\n columnRenderer: $any(item).rowDetailRenderer,\r\n }\"\r\n [item]=\"item\"\r\n ></appfx-dg-cell-container>\r\n </hermes-dg-row-detail>\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"rowDetailContent\" ngProjectAs=\"hermes-dg-row-detail\">\r\n @if ({ id: buildRowDetailContentId(i) }; as detailData) {\r\n <hermes-dg-row-detail\r\n *hermesIfExpanded=\"rowsExpandedByDefault\"\r\n tabindex=\"0\"\r\n [attr.aria-describedby]=\"detailData.id\"\r\n >\r\n <div [id]=\"detailData.id\" class=\"datagrid-row-flex\">\r\n <ng-container *ngTemplateOutlet=\"rowDetailContent; context: { item: item }\"> </ng-container>\r\n </div>\r\n </hermes-dg-row-detail>\r\n }\r\n </ng-container>\r\n </hermes-dg-row>\r\n }\r\n\r\n <ng-container *ngIf=\"detailHeader || detailBody\" ngProjectAs=\"hermes-dg-detail\">\r\n <ng-template [hermesIfDetail]=\"detailState\" (hermesIfDetailChange)=\"onDetailStateChange($event)\" let-detail>\r\n <hermes-dg-detail>\r\n @if (detailHeader) {\r\n <hermes-dg-detail-header>\r\n <ng-container *ngTemplateOutlet=\"detailHeader; context: { $implicit: detail }\"></ng-container>\r\n </hermes-dg-detail-header>\r\n }\r\n @if (detailBody) {\r\n <hermes-dg-detail-body>\r\n <ng-container *ngTemplateOutlet=\"detailBody; context: { $implicit: detail }\"></ng-container>\r\n </hermes-dg-detail-body>\r\n }\r\n </hermes-dg-detail>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <hermes-dg-footer *ngIf=\"gridFooterModel.showFooter\">\r\n @if (!gridFooterModel.hideColumnToggle) {\r\n <appfx-dg-column-toggle [(columns)]=\"columns\" (columnHiddenStateChange)=\"onColumnHiddenStateChange($event)\">\r\n </appfx-dg-column-toggle>\r\n }\r\n\r\n @if (enableExportButton) {\r\n <appfx-dg-export\r\n [allItemsCount]=\"gridFooterModel.clientSideExportConfig?.allItemsCount || listItemsCount\"\r\n [selectedItemsCount]=\"selectedItemsCount\"\r\n [filteredItemsCount]=\"filteredItemsCount\"\r\n (exportEventEmitter)=\"onExportEvent($event)\"\r\n class=\"footer-actions\"\r\n >\r\n </appfx-dg-export>\r\n }\r\n\r\n @if (showDeselectAll) {\r\n <div class=\"column-switch-wrapper footer-actions\">\r\n <button class=\"btn btn-sm column-toggle-action\" [disabled]=\"deselectAllDisabled\" (click)=\"onDeselectAllClick()\">\r\n {{ dgStrings.deselectAll }}\r\n </button>\r\n </div>\r\n }\r\n <!-- Custom footer actions -->\r\n @if (gridFooterModel?.footerActions) {\r\n @for (action of gridFooterModel.footerActions; track action) {\r\n <div class=\"footer-actions column-switch-wrapper\">\r\n @if (action.children) {\r\n <hermes-dropdown>\r\n <button\r\n class=\"btn btn-sm column-toggle-action\"\r\n hermesDropdownTrigger\r\n [disabled]=\"!action.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n >\r\n {{ action.label }}\r\n <hermes-icon shape=\"angle\" direction=\"up\"></hermes-icon>\r\n </button>\r\n <hermes-dropdown-menu hermesPosition=\"top-left\" *hermesIfOpen>\r\n @for (childAction of action.children; track childAction) {\r\n <button\r\n type=\"button\"\r\n [disabled]=\"!childAction.enabled\"\r\n [attr.aria-label]=\"childAction.ariaLabel\"\r\n hermesDropdownItem\r\n (click)=\"onActionClick(childAction)\"\r\n >\r\n {{ childAction.label }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"column-toggle-action btn btn-sm\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [disabled]=\"!action.enabled\"\r\n (click)=\"onActionClick(action)\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n }\r\n <ng-content select=\".custom-footer-content\"></ng-content>\r\n\r\n <ng-container *ngIf=\"pageSize > 0; else missingPageConfig\" ngProjectAs=\"hermes-dg-pagination\">\r\n <hermes-dg-pagination #pagination [hermesDgPageSize]=\"pageSize\" [hermesDgTotalItems]=\"totalItems\">\r\n @if (pageSizeOptions?.length) {\r\n <hermes-dg-page-size #hermesDgPageSize [hermesPageSizeOptions]=\"pageSizeOptions\">\r\n <label [for]=\"hermesDgPageSize.pageSizeOptionsId\"> {{ dgStrings.itemsPerPage }} </label>\r\n </hermes-dg-page-size>\r\n }\r\n {{\r\n getFooterMessage(\r\n pagination.totalItems,\r\n pagination.pageSize,\r\n pagination.firstItem + 1,\r\n pagination.lastItem + 1\r\n )\r\n }}\r\n </hermes-dg-pagination>\r\n </ng-container>\r\n\r\n <ng-template #missingPageConfig>\r\n @if (!showCustomPagination) {\r\n <span class=\"pagination\">\r\n {{ getFooterMessage(totalItems, undefined, dataRange.skip + 1, dataRange.skip + dataRange.data.length) }}\r\n </span>\r\n }\r\n @if (showCustomPagination) {\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"customPagination\"></ng-container>\r\n </div>\r\n }\r\n <ng-template #customPagination>\r\n <ng-content></ng-content>\r\n </ng-template>\r\n </ng-template>\r\n </hermes-dg-footer>\r\n</hermes-datagrid>\r\n\r\n<ng-template #draggableCell let-item>\r\n <div cdkDropList [cdkDropListAutoScrollStep]=\"0\" [cdkDropListConnectedTo]=\"dropGroup(dragConfig.dragGroup || '')\">\r\n <div\r\n cdkDrag\r\n cdkDragPreviewContainer=\"parent\"\r\n [cdkDragData]=\"draggedItems\"\r\n (cdkDragStarted)=\"onDragStart(item)\"\r\n (cdkDragMoved)=\"onDragMove()\"\r\n >\r\n <hermes-icon shape=\"drag-handle\" size=\"22\" cdkDragHandle> </hermes-icon>\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <div class=\"custom-preview\" *cdkDragPreview>\r\n @if (draggedItems.length === 1) {\r\n <div class=\"grid-ghost single-ghost\" [ngClass]=\"{ 'selection-ghost': isItemSelected(item) }\">\r\n <ng-container *ngTemplateOutlet=\"draggableGhostContent; context: { $implicit: item }\"> </ng-container>\r\n </div>\r\n } @else {\r\n <div class=\"grid-ghost multiple-ghost selection-ghost\">\r\n <ng-container *ngTemplateOutlet=\"draggableGhostContent; context: { $implicit: item }\"> </ng-container>\r\n </div>\r\n <span class=\"badge badge-purple ghost-badge\">\r\n {{ draggedItems.length }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #draggableGhostContent let-item>\r\n <hermes-icon class=\"drop-status drop-status-valid\" shape=\"plus\" size=\"18\"></hermes-icon>\r\n <hermes-icon class=\"drop-status drop-status-invalid\" shape=\"ban\" size=\"18\"></hermes-icon>\r\n <i class=\"{{ item.primaryIconId }}\"></i>\r\n <span>{{ item[dragConfig.fieldName] }}</span>\r\n</ng-template>\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, EventEmitter, Host, Input, OnDestroy, Output } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatagridComponent } from '../../datagrid.component';\r\n\r\n/**\r\n * Datagrid page directive which set the page which to be shown when the appfx datagrid is display.\r\n * Supports setting of arbitrary grid page as current page and emits the new page\r\n * number when the page is change.\r\n * Supports this functionality for server side and client side grids.\r\n */\r\n@Directive({\r\n selector: '[datagridPage]',\r\n standalone: false,\r\n})\r\nexport class DatagridPageDirective implements AfterViewInit, OnDestroy {\r\n @Output() datagridPageChange = new EventEmitter<number>(false);\r\n\r\n private component: DatagridComponent<unknown>;\r\n\r\n private initCompleted = false;\r\n private initialPage: number;\r\n private subscription: Subscription;\r\n\r\n constructor(@Host() datagrid: DatagridComponent<unknown>) {\r\n this.component = datagrid;\r\n }\r\n\r\n @Input()\r\n set datagridPage(value: number) {\r\n if (this.initCompleted) {\r\n this.component.hermesDatagridPagination.currentPage = value;\r\n } else {\r\n this.initialPage = value;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscription = this.component.hermesDatagridPagination.currentChanged.subscribe((page: number) =>\r\n this.datagridPageChange.emit(page)\r\n );\r\n if (this.initialPage > 1) {\r\n if (this.component.serverDrivenDatagrid) {\r\n this.component.hermesDatagridPagination.currentPage = this.initialPage;\r\n } else {\r\n // Client side grids work with clarity smart iterators, which initially create all rows, then\r\n // destroy them and again create them.\r\n // This I think make the clarity grid to throw ExpressionChangedAfterItHasBeenCheckedError\r\n // error when this small timout is not set.\r\n setTimeout(() => {\r\n this.component.hermesDatagridPagination.currentPage = this.initialPage;\r\n }, 0);\r\n }\r\n }\r\n this.initCompleted = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\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 { InjectionToken } from '@angular/core';\r\n\r\nimport { PersistDatagridSettingsService } from './datagrid-persist-settings.interfaces';\r\n\r\n// injectable service contract for app-specific code that can store and read data from local browser storage\r\nexport const appfxDatagridPersistSettingsToken = new InjectionToken<PersistDatagridSettingsService>(\r\n 'service that store and read data from local browser storage'\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 { AfterViewInit, Directive, Host, Inject, Input, OnDestroy, Optional } from '@angular/core';\r\nimport { HermesDatagridStateInterface } from '@hermes-ui/angular/data/datagrid';\r\nimport { combineLatest, Subject, Subscription } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\n\r\nimport { appfxDatagridPersistSettingsToken } from './appfx-datagrid-persist-settings.token';\r\nimport {\r\n PersistDatagridSettingsService,\r\n PersistedDatagridColumnState,\r\n PersistedDatagridSortOrder,\r\n PersistedDatagridState,\r\n} from './datagrid-persist-settings.interfaces';\r\nimport { DatagridComponent } from '../../datagrid.component';\r\nimport { ColumnHiddenState, ColumnResize, ColumnSortOrder } from '../../interfaces/column-state';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\ndeclare function setTimeout(handler: (...args: any[]) => void, timeout: number): number;\r\n\r\n/**\r\n * Sets the grid up with page size, column visibility and width from user-defined storage that is provided\r\n * Reacts to user changes in the Clarity datagrid to notify the injected storage to persist the grid properties\r\n * So reloading the application in automatically restore these preferences as a convenience\r\n */\r\n@Directive({\r\n selector: 'appfx-datagrid[appfxPersistDatagridSettings]',\r\n standalone: false,\r\n})\r\nexport class DatagridPersistSettingsDirective implements OnDestroy, AfterViewInit {\r\n private subs = new Subscription();\r\n private datagridKeyChange$ = new Subject<string>();\r\n private saveColumnsStateTimerId: number;\r\n\r\n private datagridKey: string;\r\n\r\n private storePageSize = true;\r\n\r\n private storeSortOrder = true;\r\n\r\n constructor(\r\n @Host() private grid: DatagridComponent<unknown>,\r\n @Optional()\r\n @Inject(appfxDatagridPersistSettingsToken)\r\n private persistDatagridSettingsService: PersistDatagridSettingsService\r\n ) {\r\n this.initialiseDatagridWithPersistedSettings();\r\n }\r\n\r\n /**\r\n * Directive takes unique identifier input to describe the grid\r\n */\r\n @Input()\r\n set appfxPersistDatagridSettings(key: string) {\r\n this.datagridKey = key;\r\n this.datagridKeyChange$.next(key);\r\n }\r\n\r\n /**\r\n * Flag indicates whether to be persisted the grid page size.\r\n */\r\n @Input()\r\n set persistPageSize(value: boolean) {\r\n this.storePageSize = value;\r\n }\r\n\r\n /**\r\n * Flag indicates whether to be persisted the grid page size.\r\n */\r\n @Input()\r\n set persistSortOrder(value: boolean) {\r\n this.storeSortOrder = value;\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (!this.datagridKey) {\r\n return;\r\n }\r\n\r\n // Listen for column resize\r\n this.subs.add(\r\n this.grid.columnResize.subscribe((data: ColumnResize) => {\r\n data.column.width = data.columnSize + 'px';\r\n this.saveColumnStates();\r\n })\r\n );\r\n\r\n // Listen for column order changes\r\n this.subs.add(\r\n this.grid.columnOrderChange.subscribe(() => {\r\n this.saveColumnStates();\r\n })\r\n );\r\n\r\n // Listen for column hidden state changes\r\n this.subs.add(\r\n this.grid.columnHiddenStateChange.subscribe((data: ColumnHiddenState) => {\r\n data.column.hidden = data.hidden;\r\n this.saveColumnStates();\r\n })\r\n );\r\n\r\n if (this.storeSortOrder) {\r\n // Listen for column sort order changes\r\n this.subs.add(\r\n this.grid.columnSortOrderChange.subscribe((data: ColumnSortOrder) => {\r\n this.saveColumnSortOrder(data);\r\n })\r\n );\r\n }\r\n\r\n if (this.storePageSize) {\r\n // Listen for datagrid refresh event which contains page size info\r\n this.subs.add(\r\n this.grid.refreshGridData.subscribe((hermesDatagridState: HermesDatagridStateInterface) => {\r\n const hermesPageSize = hermesDatagridState?.page?.size || 0;\r\n if (hermesPageSize > 0 && hermesPageSize !== this.grid.pageSize) {\r\n this.grid.pageSize = hermesPageSize;\r\n this.savePageSize(hermesPageSize);\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.unsubscribe();\r\n }\r\n\r\n private saveColumnStates() {\r\n if (this.saveColumnsStateTimerId) {\r\n clearTimeout(this.saveColumnsStateTimerId);\r\n }\r\n\r\n this.saveColumnsStateTimerId = setTimeout(() => {\r\n this.saveColumnsData();\r\n }, 100);\r\n }\r\n\r\n private saveColumnsData(): void {\r\n const persistedData = this.getPersistedData();\r\n\r\n persistedData.columns = this.grid.columns.map((column: ColumnDefinition<any>) =>\r\n this.createPersistedColumnState(column)\r\n );\r\n\r\n //Update sort column if it is persisted as it may become hidden\r\n if (persistedData.sorting) {\r\n const columnDef = persistedData.columns.find(column => {\r\n return column.uid === persistedData.sorting?.column.uid;\r\n });\r\n if (columnDef) {\r\n persistedData.sorting.column = columnDef;\r\n }\r\n }\r\n\r\n this.setPersistedData(persistedData);\r\n }\r\n\r\n private saveColumnSortOrder(columnSortOrder: ColumnSortOrder): void {\r\n const persistedData = this.getPersistedData();\r\n const column = this.createPersistedColumnState(columnSortOrder.column);\r\n persistedData.sorting = {\r\n sortOrder: columnSortOrder?.sortOrder,\r\n column: column,\r\n };\r\n this.setPersistedData(persistedData);\r\n }\r\n\r\n private savePageSize(pageSize: number) {\r\n const data = this.getPersistedData();\r\n data.pageSize = pageSize;\r\n this.setPersistedData(data);\r\n }\r\n\r\n private createPersistedColumnState(column: ColumnDefinition<any>): PersistedDatagridColumnState {\r\n const width = column.width ? parseInt(column.width, 10) : undefined;\r\n return {\r\n headerText: column.displayName,\r\n visible: column.hidden !== true,\r\n width: width,\r\n uid: this.getColumnUid(column),\r\n };\r\n }\r\n\r\n /**\r\n * Preserve data in the persistence storage.\r\n * @param data the data that is going to be persisted.\r\n */\r\n private setPersistedData(data: PersistedDatagridState): void {\r\n if (!this.datagridKey) {\r\n return;\r\n }\r\n if (!this.persistDatagridSettingsService) {\r\n console.error('Persist datagrid service is not provided.');\r\n return;\r\n }\r\n //save into the userdata, using a key based on the listViewId\r\n this.persistDatagridSettingsService.setUserData(this.getListViewColumnDefKey(this.datagridKey), data);\r\n }\r\n\r\n /**\r\n * Retrieves the data from the persistence storage.\r\n * @returns a promise which when resolved will contain the ListView columns data.\r\n */\r\n private getPersistedData(): PersistedDatagridState {\r\n if (!this.datagridKey || !this.persistDatagridSettingsService) {\r\n return {};\r\n }\r\n return this.persistDatagridSettingsService.getUserDataSync(this.getListViewColumnDefKey(this.datagridKey)) || {};\r\n }\r\n\r\n private getListViewColumnDefKey(datagridId: string): string {\r\n return datagridId + '_AppfxDatagridSettingsDef';\r\n }\r\n\r\n private initialiseDatagridWithPersistedSettings() {\r\n //Update datagrid column definitions with the persisted data immediately after\r\n //the datagrid key is set and the column definitions of the datagrid are set\r\n this.subs.add(\r\n combineLatest([this.datagridKeyChange$.asObservable(), this.grid.columnDefsChange.pipe(first())]).subscribe(\r\n () => {\r\n this.updateDatagridColumnDefinitions();\r\n }\r\n )\r\n );\r\n\r\n //Update datagrid page size with the persisted page size immediately after\r\n //the datagrid key is set and the page size of the datagrid is set\r\n this.subs.add(\r\n combineLatest([this.datagridKeyChange$.asObservable(), this.grid.pageSizeChange.pipe(first())]).subscribe(() => {\r\n this.updateDatagridPageSize();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Set initial page size read from the local storage on the datagrid.\r\n */\r\n private updateDatagridPageSize() {\r\n const data = this.getPersistedData();\r\n const persistedPageSize = data?.pageSize || 0;\r\n if (persistedPageSize > 0 && this.grid.pageSize !== persistedPageSize) {\r\n this.grid.pageSize = persistedPageSize;\r\n }\r\n }\r\n\r\n /**\r\n * Set width of datagrid columns, its visible and sort states.\r\n */\r\n private updateDatagridColumnDefinitions() {\r\n const data = this.getPersistedData();\r\n if (!data.columns && !data.sorting) {\r\n return;\r\n }\r\n\r\n const columnsMap = new Map<string, ColumnDefinition<any>>();\r\n this.grid.columns.forEach((column: ColumnDefinition<any>) => {\r\n const uid = this.getColumnUid(column);\r\n this.applySorting(uid, column, data.sorting);\r\n // Store a copy of the column definitions, as this will allow all the\r\n // changes to be discarded at once if this is needed.\r\n columnsMap.set(uid, { ...column });\r\n });\r\n\r\n //Apply persisted data only if the column size of persisted data is equal\r\n // to datagrid column size\r\n if (data.columns && columnsMap.size === data.columns.length) {\r\n this.applyPersistedColumnSettings(data.columns, columnsMap);\r\n }\r\n }\r\n\r\n private applyPersistedColumnSettings(\r\n columns: PersistedDatagridColumnState[],\r\n columnsDefinitionsMap: Map<string, ColumnDefinition<any>>\r\n ) {\r\n const columnsOrder = <ColumnDefinition<any>[]>[];\r\n columns.forEach((columnPersistedState: PersistedDatagridColumnState) => {\r\n const column = columnsDefinitionsMap.get(columnPersistedState.uid);\r\n if (column) {\r\n column.width = columnPersistedState.width ? columnPersistedState.width + 'px' : undefined;\r\n column.hidden = !columnPersistedState.visible;\r\n columnsOrder.push(column);\r\n columnsDefinitionsMap.delete(columnPersistedState.uid);\r\n }\r\n });\r\n //Update columns only if persisted columns are the same as\r\n //the set columns of the datagrid\r\n if (columnsOrder && columnsOrder.length === this.grid.columns.length && columnsDefinitionsMap.size === 0) {\r\n this.grid.columns = columnsOrder;\r\n // Update datagrid visible columns after applying persisted columns settings\r\n this.grid.visibleColumns = this.grid.columns.filter((column: ColumnDefinition<any>) => !column.hidden);\r\n }\r\n }\r\n\r\n /**\r\n * Set column default sort order read from the local storage on the datagrid\r\n */\r\n private applySorting(\r\n columnUid: string,\r\n column: ColumnDefinition<any>,\r\n sorting: PersistedDatagridSortOrder | undefined\r\n ) {\r\n if (!sorting?.column.visible) {\r\n return;\r\n }\r\n if (columnUid === sorting?.column?.uid) {\r\n column.defaultSortOrder = sorting.sortOrder;\r\n }\r\n\r\n // Clear default column by which the grid is sorted if there is\r\n // other visible column by which should be sorted the grid\r\n if (column.defaultSortOrder && columnUid !== sorting?.column?.uid) {\r\n column.defaultSortOrder = undefined;\r\n }\r\n }\r\n\r\n private getColumnUid(column: ColumnDefinition<any>) {\r\n return column.uid || column.field || column.displayName;\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 { InjectionToken } from '@angular/core';\r\n\r\nimport { DatagridUserPreferencesService } from './datagrid-user-preferences.interfaces';\r\n\r\n// Injectable service contract for app-specific code that can get user preferences\r\nexport const appfxDatagridUserPreferencesToken = new InjectionToken<DatagridUserPreferencesService>(\r\n 'Service that stores and reads user preferences related to the datagrid.'\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 { Directive, Host, Inject, OnDestroy, Optional } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { appfxDatagridUserPreferencesToken } from './appfx-datagrid-user-preferences.token';\r\nimport { DatagridUserPreferencesService } from './datagrid-user-preferences.interfaces';\r\nimport { DatagridComponent } from '../../datagrid.component';\r\n\r\n@Directive({\r\n selector: 'appfx-datagrid',\r\n standalone: false,\r\n})\r\nexport class DatagridContentNoWrapDirective implements OnDestroy {\r\n private subs = new Subscription();\r\n\r\n /**\r\n * Constructor, if DatagridUserPreferencesService is provided get wrap grid cell\r\n * user preference.\r\n *\r\n * @param grid\r\n * @param userPreferencesService - optional, because external projects which use appfx-datagrid may decide not\r\n * to use this directive and allow their customers to select whether to wrap\r\n * or not text in columns, in this case, they don't need to provide this service\r\n * and the grid will have default behavior that will not wrap the text in list columns.\r\n */\r\n constructor(\r\n @Host() private grid: DatagridComponent<unknown>,\r\n @Optional()\r\n @Inject(appfxDatagridUserPreferencesToken)\r\n private userPreferencesService: DatagridUserPreferencesService\r\n ) {\r\n if (userPreferencesService) {\r\n this.subs.add(\r\n userPreferencesService.getWrapGridCellTextPreference$().subscribe((data: boolean) => {\r\n grid.wrapText = data;\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subs.unsubscribe();\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 { HermesDatagridComparatorInterface } from '@hermes-ui/angular/data/datagrid';\r\n\r\n// Handle sorting on 'null | undefined | \"\"' value on the property\r\nexport class FieldComparator<T> implements HermesDatagridComparatorInterface<T> {\r\n field: string;\r\n\r\n constructor(compareField: string) {\r\n this.field = compareField;\r\n }\r\n\r\n compare(a: any, b: any): number {\r\n if (!a[this.field] && !b[this.field]) {\r\n return 0;\r\n } else if (!a[this.field] && b[this.field]) {\r\n return 1;\r\n } else if (a[this.field] && !b[this.field]) {\r\n return -1;\r\n } else {\r\n if (a[this.field] > b[this.field]) {\r\n return 1;\r\n } else if (a[this.field] < b[this.field]) {\r\n return -1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Handle sorting on field that is a list\r\nexport class ListComparator<T> implements HermesDatagridComparatorInterface<T> {\r\n field: string;\r\n\r\n constructor(compareField: string) {\r\n this.field = compareField;\r\n }\r\n\r\n compare(a: any, b: any): number {\r\n if (!a[this.field] && !b[this.field]) {\r\n return 0;\r\n } else if (!a[this.field] && b[this.field]) {\r\n return 1;\r\n } else if (a[this.field] && !b[this.field]) {\r\n return -1;\r\n } else {\r\n return a[this.field].length > b[this.field].length ? -1 : 1;\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 { HermesDatagridComparatorInterface } from '@hermes-ui/angular/data/datagrid';\r\n\r\nfunction compareNumericValues(itemA: any, itemB: any, fieldName: string): number {\r\n const firstValue = Number(itemA[fieldName]);\r\n const secondValue = Number(itemB[fieldName]);\r\n\r\n if (isNaN(firstValue) && isNaN(secondValue)) {\r\n return 0;\r\n }\r\n if (isNaN(firstValue)) {\r\n return -1;\r\n }\r\n if (isNaN(secondValue)) {\r\n return 1;\r\n }\r\n\r\n return firstValue - secondValue;\r\n}\r\n\r\nexport class SimpleNumericComparator<T> implements HermesDatagridComparatorInterface<T> {\r\n constructor(private readonly fieldName: string) {}\r\n\r\n compare(first: T, second: T): number {\r\n return compareNumericValues(first, second, this.fieldName);\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 { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HermesDatagridModule } from '@hermes-ui/angular/data/datagrid';\r\n\r\nimport { ColumnOrderDirective } from './column-order.directive';\r\nimport { DatagridColumnsOrderDirective } from './datagrid-columns-order.directive';\r\n\r\n@NgModule({\r\n declarations: [ColumnOrderDirective, DatagridColumnsOrderDirective],\r\n imports: [HermesDatagridModule, CommonModule, DragDropModule],\r\n exports: [ColumnOrderDirective, DatagridColumnsOrderDirective],\r\n})\r\nexport class DatagridColumnsOrderModule {}\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 { DragDropModule as CdkDragDropModule } from '@angular/cdk/drag-drop';\r\nimport { OverlayModule as CdkOverlayModule } from '@angular/cdk/overlay';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf, Type } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AppfxA11yModule } from '@hermes-ui/angular/addons/a11y';\r\nimport { AppfxDatagridFiltersModule } from '@hermes-ui/angular/addons/datagrid-filters';\r\nimport { HermesDatagridModule } from '@hermes-ui/angular/data/datagrid';\r\nimport { HermesCheckboxModule, HermesInputModule } from '@hermes-ui/angular/forms';\r\nimport { angleIcon, banIcon, ClarityIcons, HermesIcon, dragHandleIcon, plusIcon } from '@hermes-ui/angular/icon';\r\nimport { HermesDropdownModule } from '@hermes-ui/angular/popover/dropdown';\r\nimport { HermesLoadingModule } from '@hermes-ui/angular/utils/loading';\r\n\r\nimport { DatagridActionBarComponent } from './addons/action-bar/datagrid-action-bar.component';\r\nimport { DatagridColumnsOrderModule } from './addons/column-ordering/datagrid-columns-order.module';\r\nimport { DatagridColumnToggleComponent } from './addons/column-toggle/datagrid-column-toggle.component';\r\nimport { DatagridPageDirective } from './addons/datagrid-page/datagrid-page.directive';\r\nimport { CsvHelperService } from './addons/export/csv-helper.service';\r\nimport { ExportDatagridComponent } from './addons/export/export-datagrid.component';\r\nimport { ExportProviderService } from './addons/export/export-provider.service';\r\nimport { DatagridPersistSettingsDirective } from './addons/persist-settings/datagrid-persist-settings.directive';\r\nimport { DatagridContentNoWrapDirective } from './addons/user-preferences/datagrid-content-no-wrap.directive';\r\nimport { DatagridCellContainerComponent } from './datagrid-cell-container.component';\r\nimport { DatagridComponent } from './datagrid.component';\r\nimport { DatagridFilterContainerComponent } from './filters/datagrid-filter-container.component';\r\nimport { DatagridFilterComponent } from './filters/datagrid-filter.component';\r\nimport { DatagridStrings } from './i18n/datagrid-strings.service';\r\nimport { appfxDatagridErrorNotifiableToken, ErrorNotifiable } from './interfaces/tokens';\r\nimport { IsRowSelectablePipe } from './pipes/is-row-selectable.pipe';\r\nimport { DatagridPreserveSelectionDirective } from './preserve-selection/datagrid-preserve-selection.directive';\r\n\r\nexport function datagridStringsServiceFactory(existing: DatagridStrings): DatagridStrings {\r\n return existing || new DatagridStrings();\r\n}\r\n\r\nconst exportedComponents: Array<Type<any>> = [DatagridComponent, DatagridActionBarComponent, DatagridFilterComponent];\r\n\r\nconst exportedDirectives: Array<Type<any>> = [\r\n DatagridPageDirective,\r\n DatagridPersistSettingsDirective,\r\n DatagridPreserveSelectionDirective,\r\n DatagridContentNoWrapDirective,\r\n];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...exportedComponents,\r\n ...exportedDirectives,\r\n DatagridCellContainerComponent,\r\n DatagridColumnToggleComponent,\r\n DatagridFilterContainerComponent,\r\n ExportDatagridComponent,\r\n IsRowSelectablePipe,\r\n ],\r\n imports: [\r\n AppfxA11yModule,\r\n AppfxDatagridFiltersModule,\r\n CdkA11yModule,\r\n CdkDragDropModule,\r\n CdkOverlayModule,\r\n HermesCheckboxModule,\r\n HermesDatagridModule,\r\n HermesDropdownModule,\r\n HermesIcon,\r\n HermesInputModule,\r\n HermesLoadingModule,\r\n CommonModule,\r\n DatagridColumnsOrderModule,\r\n FormsModule,\r\n ],\r\n exports: [...exportedComponents, ...exportedDirectives],\r\n providers: [\r\n CsvHelperService,\r\n ExportProviderService,\r\n {\r\n // This pattern allows the importer of this module to specify its own DatagridStrings.\r\n provide: DatagridStrings,\r\n useFactory: datagridStringsServiceFactory,\r\n deps: [[new Optional(), new SkipSelf(), DatagridStrings]],\r\n },\r\n ],\r\n})\r\nexport class AppfxDatagridModule {\r\n constructor() {\r\n ClarityIcons.addIcons(angleIcon, banIcon, dragHandleIcon, plusIcon);\r\n }\r\n\r\n static forRoot(errorNotifiableService: Type<ErrorNotifiable>): ModuleWithProviders<AppfxDatagridModule> {\r\n return {\r\n ngModule: AppfxDatagridModule,\r\n providers: [{ provide: appfxDatagridErrorNotifiableToken, useClass: errorNotifiableService }],\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\n\r\n/**\r\n * Feature states populated on application level during app initialization.\r\n * This is needed, because datagrid module does not have direct access to feature-state-service.\r\n */\r\n@Injectable()\r\nexport class DatagridFeatureStates {}\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 { HermesDatagridStringFilterInterface } from '@hermes-ui/angular/data/datagrid';\r\n\r\nexport class CaseInsensitiveContainsStringFilter implements HermesDatagridStringFilterInterface<any> {\r\n constructor(private fieldName: string) {}\r\n\r\n accepts(item: any, search: string): boolean {\r\n const currentItem: string = '' + item[this.fieldName];\r\n return currentItem === search || currentItem.toLowerCase().indexOf(search) >= 0;\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 { DatagridActionBarComponent } from './addons/action-bar/datagrid-action-bar.component';\r\nexport { DatagridPageDirective } from './addons/datagrid-page/datagrid-page.directive';\r\nexport { CsvHelperService } from './addons/export/csv-helper.service';\r\nexport {\r\n ClientSideExportConfig,\r\n DatagridItemSet,\r\n ExportColumnDefinition,\r\n ExportStatus,\r\n ExportValueCallbackParams,\r\n} from './addons/export/export.interface';\r\nexport { ExportProviderService } from './addons/export/export-provider.service';\r\nexport { ExportType } from './addons/export/export-type';\r\nexport { appfxDatagridPersistSettingsToken } from './addons/persist-settings/appfx-datagrid-persist-settings.token';\r\nexport { DatagridPersistSettingsDirective } from './addons/persist-settings/datagrid-persist-settings.directive';\r\nexport { appfxDatagridUserPreferencesToken } from './addons/user-preferences/appfx-datagrid-user-preferences.token';\r\nexport { DatagridContentNoWrapDirective } from './addons/user-preferences/datagrid-content-no-wrap.directive';\r\nexport { DatagridUserPreferencesService } from './addons/user-preferences/datagrid-user-preferences.interfaces';\r\nexport { FieldComparator, ListComparator } from './comparators/field-list.comparator';\r\nexport { SimpleNumericComparator } from './comparators/simple-numeric-comparator';\r\nexport { DatagridComponent, GridFooterModel, GridLayoutModel } from './datagrid.component';\r\nexport { AppfxDatagridModule } from './datagrid.module';\r\nexport { DatagridFeatureStates } from './datagrid-feature-states.service';\r\nexport { DatagridFilterComponent } from './filters/datagrid-filter.component';\r\nexport { CaseInsensitiveContainsStringFilter } from './filters/string-filters';\r\nexport { DatagridStrings } from './i18n/datagrid-strings.service';\r\nexport { ColumnFilter } from './interfaces/column-filter';\r\nexport {\r\n ColumnFilterChange,\r\n ColumnHiddenState,\r\n ColumnOrderChanged,\r\n // ColumnPinnedState, // disabled with hermesDgPinnable\r\n ColumnResize,\r\n ColumnSortOrder,\r\n} from './interfaces/column-state';\r\nexport { ContextMenuEvent } from './interfaces/context-menu-event';\r\nexport { DatagridDragConfig } from './interfaces/datagrid-drag-config';\r\nexport { appfxDatagridErrorNotifiableToken, ErrorNotifiable } from './interfaces/tokens';\r\nexport {\r\n appfxPreselectableComponentToken,\r\n DatagridPreserveSelectionDirective,\r\n PreselectableComponent,\r\n} from './preserve-selection/datagrid-preserve-selection.directive';\r\nexport { ActionBarLayout, ActionDefinition } from './shared/action/action-definition';\r\nexport { ActionClickEvent, SingleRowActionOpen } from './shared/action/actions-event-types';\r\nexport { ColumnDefinition, ColumnRenderer } from './shared/column/column-definitions';\r\nexport { PersistDatagridSettingsService } from './addons/persist-settings/datagrid-persist-settings.interfaces';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i4","i5","i2.DatagridColumnsOrderService","i3","i1.DatagridStrings","i2","i6","i2.ExportProviderService","i7","i8","i11","i12","i14.ColumnOrderDirective","i15.DatagridColumnsOrderDirective","i16.DatagridActionBarComponent","i17.DatagridFilterComponent","i18.DatagridCellContainerComponent","i19.DatagridColumnToggleComponent","i20.DatagridFilterContainerComponent","i21.ExportDatagridComponent","i22.IsRowSelectablePipe","i1.DatagridComponent","CdkA11yModule","CdkDragDropModule","CdkOverlayModule"],"mappings":"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"}
1
+ {"version":3,"file":"hermes-ui-angular-addons-datagrid.mjs","sources":["../../../addons/datagrid/addons/action-bar/datagrid-action-bar.component.ts","../../../addons/datagrid/addons/action-bar/datagrid-action-bar.component.html","../../../addons/datagrid/addons/export/export-type.ts","../../../addons/datagrid/addons/export/export.interface.ts","../../../addons/datagrid/interfaces/tokens.ts","../../../addons/datagrid/addons/export/csv-helper.service.ts","../../../addons/datagrid/i18n/datagrid-strings.service.ts","../../../addons/datagrid/addons/export/export-provider.service.ts","../../../addons/datagrid/id-generator/id-generator.ts","../../../addons/datagrid/utils/property-resolver.util.ts","../../../addons/datagrid/preserve-selection/datagrid-preserve-selection.directive.ts","../../../addons/datagrid/shared/action/action-definition.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.helpers.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.service.ts","../../../addons/datagrid/addons/column-ordering/column-order.directive.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.directive.ts","../../../addons/datagrid/filters/datagrid-filter.component.ts","../../../addons/datagrid/datagrid-cell-container.component.ts","../../../addons/datagrid/addons/column-toggle/datagrid-column-toggle.component.ts","../../../addons/datagrid/addons/column-toggle/datagrid-column-toggle.component.html","../../../addons/datagrid/filters/datagrid-filter-container.component.ts","../../../addons/datagrid/addons/export/export-datagrid.component.ts","../../../addons/datagrid/addons/export/export-datagrid.component.html","../../../addons/datagrid/pipes/is-row-selectable.pipe.ts","../../../addons/datagrid/datagrid.component.ts","../../../addons/datagrid/datagrid.component.html","../../../addons/datagrid/addons/datagrid-page/datagrid-page.directive.ts","../../../addons/datagrid/addons/persist-settings/appfx-datagrid-persist-settings.token.ts","../../../addons/datagrid/addons/persist-settings/datagrid-persist-settings.directive.ts","../../../addons/datagrid/addons/user-preferences/appfx-datagrid-user-preferences.token.ts","../../../addons/datagrid/addons/user-preferences/datagrid-content-no-wrap.directive.ts","../../../addons/datagrid/comparators/field-list.comparator.ts","../../../addons/datagrid/comparators/simple-numeric-comparator.ts","../../../addons/datagrid/addons/column-ordering/datagrid-columns-order.module.ts","../../../addons/datagrid/datagrid.module.ts","../../../addons/datagrid/datagrid-feature-states.service.ts","../../../addons/datagrid/filters/string-filters.ts","../../../addons/datagrid/index.ts","../../../addons/datagrid/hermes-ui-angular-addons-datagrid.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\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n SimpleChange,\r\n SimpleChanges,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { ElementResizeService } from '@hermes-ui/angular/addons/a11y';\r\nimport { BehaviorSubject, interval, Subscription } from 'rxjs';\r\nimport { debounce } from 'rxjs/operators';\r\n\r\nimport { ActionDefinition } from '../../shared/action/action-definition';\r\n\r\nconst resources = {\r\n dropdownToggleWidthInRem: 3, // '...' button occupies max dropdownToggleWidthInRem rems in width\r\n layoutChangesDebounceDuration: 10,\r\n};\r\n\r\n@Component({\r\n selector: 'appfx-datagrid-action-bar',\r\n standalone: false,\r\n templateUrl: 'datagrid-action-bar.component.html',\r\n styleUrls: ['datagrid-action-bar.component.scss'],\r\n})\r\nexport class DatagridActionBarComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n @ViewChildren('actionBtn', { read: ElementRef }) queryActionBtnElementList: QueryList<ElementRef<HTMLButtonElement>>;\r\n @Input() actions: ActionDefinition[];\r\n\r\n @Input() btnLayout = 'flex';\r\n\r\n @Input() dropdownOrientation = 'bottom-left';\r\n\r\n @Output() invokeAction: EventEmitter<ActionDefinition> = new EventEmitter();\r\n\r\n readonly actionsSubject = new BehaviorSubject<ActionDefinition[]>([]);\r\n readonly actions$ = this.actionsSubject.asObservable();\r\n\r\n isDropdownOpened = false;\r\n\r\n private listOfWidths: number[] = [];\r\n\r\n #subscription: Subscription;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private el: ElementRef<HTMLElement>,\r\n private elementResizeService: ElementResizeService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.updateLayout();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const resize$ = this.elementResizeService.getResizeObservable(this.el.nativeElement as HTMLElement);\r\n\r\n this.#subscription = resize$\r\n .pipe(debounce(() => interval(resources.layoutChangesDebounceDuration)))\r\n .subscribe(() => this.updateLayout());\r\n\r\n this.updateLayout();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.#subscription && !this.#subscription.closed) {\r\n this.#subscription.unsubscribe();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['actions'] && changes['actions'].currentValue) {\r\n if (this.isActionsIdsEqual(changes['actions'])) {\r\n this.restoreVisible(changes['actions'].previousValue as ActionDefinition[]);\r\n } else {\r\n // actions with different ids are treated as a new list of actions\r\n this.initActionsVisibility();\r\n // update the width of each action btn with the new one\r\n this.cdr.detectChanges();\r\n this.updateListOfWidths();\r\n this.updateLayout();\r\n }\r\n }\r\n }\r\n\r\n getDropdownActions(): ActionDefinition[] {\r\n return this.actions.filter((action: ActionDefinition) => !action.isVisible);\r\n }\r\n\r\n hasDropdownActions(): boolean {\r\n return this.getDropdownActions().length > 0;\r\n }\r\n\r\n onActionClick(action: ActionDefinition): void {\r\n if (action.enabled) {\r\n this.invokeAction.emit(action);\r\n }\r\n }\r\n\r\n /**\r\n * Derives the base root element size (REM) in pixels.\r\n */\r\n deriveBaseRootElementSize(): number {\r\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue('font-size'), 10);\r\n }\r\n\r\n private isActionsIdsEqual(change: SimpleChange): boolean {\r\n if (!change.previousValue) {\r\n return false;\r\n }\r\n\r\n const a: ActionDefinition[] = change.currentValue;\r\n const b: ActionDefinition[] = change.previousValue;\r\n\r\n const aLength: number = a.length;\r\n const bLength: number = b.length;\r\n\r\n if (aLength !== bLength) {\r\n return false;\r\n }\r\n\r\n return (\r\n a.reduce(\r\n (length: number, aValue: ActionDefinition, i: number): number => (aValue.id === b[i].id ? length - 1 : length),\r\n aLength\r\n ) === 0\r\n );\r\n }\r\n\r\n private initActionsVisibility(): void {\r\n this.actions.forEach((action: ActionDefinition) => {\r\n if (action.isVisible !== false) {\r\n action.isVisible = true;\r\n }\r\n });\r\n this.actionsSubject.next(this.actions);\r\n }\r\n\r\n private restoreVisible(fromPrevious: ActionDefinition[]): void {\r\n if (fromPrevious.length !== this.actions.length) {\r\n return;\r\n }\r\n fromPrevious.forEach((action: ActionDefinition, i: number) => (this.actions[i].isVisible = action.isVisible));\r\n this.actionsSubject.next(this.actions);\r\n }\r\n\r\n private updateListOfWidths(): void {\r\n this.listOfWidths.length = 0;\r\n this.queryActionBtnElementList.forEach(btnElementRef =>\r\n this.listOfWidths.push(btnElementRef.nativeElement.offsetWidth)\r\n );\r\n }\r\n\r\n private updateLayout(): void {\r\n // If offset is 0, the element is not yet fully loaded, so no need to update the layout\r\n if (this.el.nativeElement.offsetWidth) {\r\n const dropdownToggleWidthInPx = this.deriveBaseRootElementSize() * resources.dropdownToggleWidthInRem;\r\n const maxWidth: number = this.el.nativeElement.offsetWidth - dropdownToggleWidthInPx;\r\n // choose which action button is within the dropdown or not\r\n let totalWidth = 0;\r\n this.listOfWidths.forEach((actionBtnWidth: number, i: number) => {\r\n totalWidth += actionBtnWidth;\r\n this.actions[i].isVisible = totalWidth < maxWidth;\r\n });\r\n // if the dropdown is opened while the browser window is resized then collapse the dropdown\r\n if (this.isDropdownOpened) {\r\n this.isDropdownOpened = false;\r\n }\r\n this.actionsSubject.next(this.actions);\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 class=\"btn-group\" [ngClass]=\"{ 'btn-flex': btnLayout === 'flex', 'btn-inline': btnLayout === 'inline' }\">\r\n @for (action of actions$ | async; track action; let i = $index) {\r\n @if (action.children && action.isVisible) {\r\n <hermes-dropdown [hermesCloseMenuOnItemClick]=\"true\" #actionBtn [class]=\"i === 0 ? 'has-border-left' : ''\">\r\n <button\r\n type=\"button\"\r\n hermesDropdownTrigger\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [disabled]=\"!action.enabled\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n <hermes-icon shape=\"angle\" direction=\"down\"></hermes-icon>\r\n </button>\r\n <hermes-dropdown-menu *hermesIfOpen [hermesPosition]=\"dropdownOrientation\">\r\n @for (childAction of action.children; track childAction) {\r\n <button\r\n hermesDropdownItem\r\n type=\"button\"\r\n (click)=\"onActionClick(childAction)\"\r\n [title]=\"childAction.tooltip\"\r\n [attr.data-test-id]=\"childAction.id\"\r\n [hermesDisabled]=\"!childAction.enabled\"\r\n [ngClass]=\"childAction.class\"\r\n >\r\n {{ childAction.label }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n }\r\n @if (!action.children && action.isVisible) {\r\n <button\r\n type=\"button\"\r\n #actionBtn\r\n (click)=\"onActionClick(action)\"\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [disabled]=\"!action.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n }\r\n\r\n <!-- Process the hidden actions due to not enough space on the screen -->\r\n @if (hasDropdownActions()) {\r\n <hermes-dropdown class=\"dropdown-container\" [hermesCloseMenuOnItemClick]=\"true\">\r\n <button type=\"button\" hermesDropdownTrigger [ngClass]=\"actions[0].class\">\r\n <hermes-icon shape=\"ellipsis-horizontal\"></hermes-icon>\r\n </button>\r\n <ng-template [(hermesIfOpen)]=\"isDropdownOpened\">\r\n <hermes-dropdown-menu hermesPosition=\"bottom-right\">\r\n @for (action of getDropdownActions(); track action) {\r\n <!-- Action has children - show a nested dropdown -->\r\n @if (action.children) {\r\n <hermes-dropdown [hermesCloseMenuOnItemClick]=\"true\" #actionBtn>\r\n <button\r\n type=\"button\"\r\n hermesDropdownTrigger\r\n class=\"\"\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [disabled]=\"!action.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n <hermes-icon shape=\"caret\" direction=\"down\"></hermes-icon>\r\n </button>\r\n <hermes-dropdown-menu *hermesIfOpen hermesPosition=\"bottom-right\">\r\n @for (childAction of action.children; track childAction) {\r\n <button\r\n hermesDropdownItem\r\n type=\"button\"\r\n (click)=\"onActionClick(childAction)\"\r\n [title]=\"childAction.tooltip\"\r\n [attr.data-test-id]=\"childAction.id\"\r\n [hermesDisabled]=\"!childAction.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [ngClass]=\"childAction.class\"\r\n >\r\n {{ childAction.label }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n }\r\n <!-- Action has no children -->\r\n @if (!action.children) {\r\n <button\r\n hermesDropdownItem\r\n type=\"button\"\r\n (click)=\"onActionClick(action)\"\r\n [title]=\"action.tooltip\"\r\n [attr.data-test-id]=\"action.id\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [disabled]=\"!action.enabled\"\r\n [ngClass]=\"action.class\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n }\r\n </hermes-dropdown-menu>\r\n </ng-template>\r\n </hermes-dropdown>\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\n/**\r\n * Defining the three export types, selected export option is passed to Datagrid Export Component\r\n * @type {{ALL: string; SELECTED_ONLY: string; MATCHING_FILTERS: string}}\r\n */\r\nexport enum ExportType {\r\n ALL = 'ALL',\r\n SELECTED_ONLY = 'SELECTED_ONLY',\r\n MATCHING_FILTERS = 'MATCHING_FILTERS',\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 { ExportType } from './export-type';\r\nimport { ColumnSortOrder } from '../../interfaces/column-state';\r\n\r\nexport interface DatagridItemSet {\r\n totalDatagridItems: any[];\r\n selectedItems: any[];\r\n filteredDatagridItems: any[];\r\n}\r\n\r\nexport interface ExportValueCallbackParams {\r\n item: any;\r\n field: string;\r\n itemValue: any;\r\n}\r\n\r\nexport type SortFunction = (items: any[], sortOrder?: ColumnSortOrder) => any[];\r\n\r\n/**\r\n * Configuration for client-side data export.\r\n * Defines export settings such as file name and columns to be exported,\r\n * whether the export is custom (will be made by host component), count of all items (valuable for client-side grids in which data are filtered)\r\n * and how to sort the exported items.\r\n */\r\nexport interface ClientSideExportConfig {\r\n exportedFileName: string;\r\n columnDefinitions: ExportColumnDefinition[];\r\n customExport?: boolean;\r\n allItemsCount?: number;\r\n /**\r\n * If true, the export service will sort the items before exporting them\r\n * using the sortOrder field and the provided sortFunction. If the sort function\r\n * is not provided, we will use the internal sortExportedItems function.\r\n */\r\n sort?: boolean;\r\n /**\r\n * Column sort order is set by the grid when the user clicks on a column or when\r\n * ClientSideExportConfig is created. It is provided to SortFunction.\r\n *\r\n */\r\n sortOrder?: ColumnSortOrder;\r\n /**\r\n * Custom sort function, which can be used for sorting the items before exporting them.\r\n */\r\n sortFunction?: SortFunction;\r\n}\r\n\r\n/**\r\n * Represents the status of an export operation.\r\n */\r\nexport interface ExportStatus {\r\n /**\r\n * Specifies the type of export operation being performed.\r\n * @See ExportType {{ALL: string; SELECTED_ONLY: string; MATCHING_FILTERS: string}}\r\n */\r\n exportType: ExportType;\r\n\r\n /**\r\n * Indicates whether the export operation is currently in progress.\r\n */\r\n inProgress?: boolean;\r\n}\r\n\r\n/**\r\n * Defines a column structure for Export\r\n */\r\nexport interface ExportColumnDefinition {\r\n /**\r\n * The text for the column header\r\n */\r\n displayName: string;\r\n /**\r\n * field: The name of the property that this column represents.\r\n * Note: Make sure that the field property in Column Definitions are the same as used in rows for grid values.\r\n *\r\n * See Example:->\r\n * Columns: [ { 'field': 'name', 'displayName': 'Name', 'exportProperty': true },\r\n * { 'field': 'id', 'displayName': 'id', 'exportProperty': false },\r\n * { 'field': 'version', 'displayName': 'Version No.', 'exportProperty': true } ]\r\n * Rows: [ { 'name': 'Item A', 'id': 'item1', 'version': '1.0.1' },\r\n * { 'name': 'Item B', 'id': 'item2', 'version': '1.0.2' } ]\r\n */\r\n field: string;\r\n /**\r\n * Whether to export this property or not\r\n */\r\n getExportValue?: any;\r\n}\r\n\r\nexport const defaultFileExtension = '.csv';\r\nexport const defaultFileName = 'exportedData';\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 { InjectionToken } from '@angular/core';\r\n\r\n// Injectable service contract for app-specific code that can log and present error notifications\r\nexport const appfxDatagridErrorNotifiableToken = new InjectionToken<ErrorNotifiable>(\r\n 'notifier service that presents errors whenever an unrecoverable event occurs within grid'\r\n);\r\n\r\n// Interface defining the contract for services that can dispatch error notifications.\r\nexport interface ErrorNotifiable {\r\n notifyError(title: string, message: string): void;\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 { ExportColumnDefinition } from './export.interface';\r\n\r\n/**\r\n * Helper functions to convert data into CSV format\r\n */\r\n@Injectable()\r\nexport class CsvHelperService {\r\n getData(rows: any[], columns: ExportColumnDefinition[]): string {\r\n let columnCsvData = '',\r\n rowsCsvData = '';\r\n if (columns) {\r\n columnCsvData = this.getColumnDataFromColumnDef(columns);\r\n rowsCsvData = this.getRowDataFromColumnDef(rows, columns);\r\n }\r\n\r\n const csvData: string = columnCsvData + rowsCsvData;\r\n return csvData;\r\n }\r\n\r\n getColumnDataFromColumnDef(columnDefinitions: ExportColumnDefinition[]): string {\r\n const columnNames: string[] = [];\r\n for (const columnDef of columnDefinitions) {\r\n const columnName = this.toCsvFormat(columnDef.displayName.toString());\r\n columnNames.push(columnName);\r\n }\r\n const columnCsvData: string = columnNames.join(',') + '\\n';\r\n return columnCsvData;\r\n }\r\n\r\n getRowDataFromColumnDef(exportItems: any[], columnDefinitions: ExportColumnDefinition[]): string {\r\n let rowsCsvData = '';\r\n for (const item of exportItems) {\r\n const rowValues: string[] = [];\r\n for (const columnDef of columnDefinitions) {\r\n let exportValue = '';\r\n const itemValue = this.getItemValueFromColumnField(item, columnDef.field);\r\n\r\n if (!itemValue) {\r\n exportValue = '';\r\n } else {\r\n exportValue = itemValue.toString();\r\n }\r\n exportValue = this.toCsvFormat(exportValue);\r\n rowValues.push(exportValue);\r\n }\r\n rowsCsvData += rowValues.join(',') + '\\n';\r\n }\r\n return rowsCsvData;\r\n }\r\n\r\n toCsvFormat(itemValue: string): string {\r\n if (itemValue.indexOf('\"') > -1) {\r\n itemValue = itemValue.replace(/\"/g, '\"\"');\r\n }\r\n itemValue = '\"' + itemValue.toString() + '\"';\r\n return itemValue;\r\n }\r\n\r\n /** To extract value from nested JSON objects.\"\r\n * Example =>\r\n * JSON object to extract value from => { product: {cost: {limit: 100, lowestValue: 0 }}}\r\n * Field format => \"product.cost.limit'\r\n * Value returned => 100\r\n */\r\n private getItemValueFromColumnField(item: any, field: string): any {\r\n if (field.indexOf('.') > 0) {\r\n const fieldNames = field.split('.');\r\n let itemValue = item;\r\n for (const str of fieldNames) {\r\n itemValue = itemValue[str];\r\n if (!itemValue) {\r\n itemValue = item[field];\r\n break;\r\n }\r\n }\r\n return itemValue;\r\n }\r\n return item[field];\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\n\r\n/**\r\n * User-visible strings used in the 'datagrid' library.\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 the library\r\n *\r\n * ```\r\n * @NgModule({\r\n * ...\r\n * providers: [\r\n * { provide: DatagridStrings, useClass: LocalizedDatagridStrings },\r\n * ]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@Injectable()\r\nexport class DatagridStrings {\r\n /**\r\n * Text displayed inside the grid when the grid is empty.\r\n */\r\n noItemsFound = 'No items found';\r\n\r\n /**\r\n * Label of the column toggle buttons.\r\n */\r\n showColumns = 'Show Columns';\r\n\r\n /**\r\n * Label of the button (inside column toggle) that selects all columns.\r\n */\r\n selectAll = 'Select All';\r\n\r\n /**\r\n * Tooltip for Show Columns toggle button\r\n */\r\n pickColumns = 'Manage Columns';\r\n\r\n /**\r\n * Datagrid Show columns menu description\r\n */\r\n showColumnsMenuDescription = 'Show columns menu description';\r\n\r\n /**\r\n * Datagrid Show columns / All columns selected confirmation\r\n */\r\n allColumnsSelected = 'Select all columns';\r\n\r\n /**\r\n * Footer label to display.\r\n * Can contain up to 3 placeholders:\r\n * {0} - total items count\r\n * {1} - index of first item of the current page (if paging is used)\r\n * {2} - index of last item of the current page (if paging is used)\r\n *\r\n * @example\r\n * footer = \"Apples and bananas\";\r\n * footer = \"{0} apples\";\r\n * footer = \"{1} - {2} of {0} apples\"\r\n *\r\n * If not set, the grid will automatically show one of the following strings:\r\n * @see singleItem: if there is only 1 item in the grid<br/>\r\n * @see multipleItems: if there are many items and data is not paged<br/>\r\n * @see pagedItems: if there is paging enabled\r\n */\r\n footer?: string;\r\n\r\n /**\r\n * Footer label displayed when there is a single item.\r\n * @example \"1 item\"\r\n */\r\n singleItem = '1 item';\r\n\r\n /**\r\n * Footer label to display total items count.\r\n * @example \"{0} items\"\r\n */\r\n multipleItems = '{0} items';\r\n\r\n /**\r\n * Footer label when using pagination.\r\n * @example \"{1} - {2} of {0} items\"\r\n */\r\n pagedItems = '{1} - {2} of {0} items';\r\n\r\n /**\r\n * Label for page size selector.\r\n */\r\n itemsPerPage = 'Items per page';\r\n\r\n /**\r\n * Title of the export button.\r\n */\r\n exportLink = 'Export';\r\n\r\n /**\r\n * Title of 'Export > Export All' option.\r\n */\r\n exportAll = 'All Rows';\r\n\r\n /**\r\n * Title of 'Export > Matching Filters' option.\r\n */\r\n exportMatchingFilters = 'Matching Filters';\r\n\r\n /**\r\n * Title of 'Export > Selected Rows' option.\r\n */\r\n exportSelectedRows = 'Selected Rows';\r\n\r\n /**\r\n * Error message displayed in case of error during data export.\r\n */\r\n exportErrorMessage = 'Sorry, the data could not be exported at the moment due to some internal error.';\r\n\r\n /**\r\n * Title of the error dialog displayed in case of error during data export.\r\n */\r\n exportErrorTitle = 'Export Data Failure';\r\n\r\n /**\r\n * Text for close button of column toggler on 4x zoom\r\n */\r\n closeColumnTogglerText = 'Close';\r\n\r\n /**\r\n * Label of the button for deselecting all rows.\r\n */\r\n deselectAll = 'Deselect All';\r\n\r\n /**\r\n * Details pane label for the collapsed button.\r\n * @example \"Expand the details pane for the {0} item\"\r\n */\r\n expandDetailsPaneLabel = 'Expand the details pane for the {0} item';\r\n\r\n /**\r\n * Details pane label for the expanded button.\r\n * @example \"Collapse the details pane for the {0} item\"\r\n */\r\n collapseDetailsPaneLabel = 'Collapse the details pane for the {0} item';\r\n\r\n /**\r\n * Placeholder text for the filter input in each filterable column.\r\n * @example \"Filter items\"\r\n */\r\n filterPlaceholder = 'Filter Items';\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 { ElementRef, Inject, Injectable, Optional, Renderer2 } from '@angular/core';\r\nimport { HermesDatagridSortOrder } from '@hermes-ui/angular/data/datagrid';\r\n\r\nimport { CsvHelperService } from './csv-helper.service';\r\nimport { ExportType } from './export-type';\r\nimport {\r\n ClientSideExportConfig,\r\n DatagridItemSet,\r\n defaultFileExtension,\r\n defaultFileName,\r\n ExportStatus,\r\n} from './export.interface';\r\nimport { DatagridStrings } from '../../i18n/datagrid-strings.service';\r\nimport { ColumnSortOrder } from '../../interfaces/column-state';\r\nimport { appfxDatagridErrorNotifiableToken, ErrorNotifiable } from '../../interfaces/tokens';\r\n\r\n@Injectable()\r\nexport class ExportProviderService {\r\n constructor(\r\n private csvHelperService: CsvHelperService,\r\n private renderer: Renderer2,\r\n private elementRef: ElementRef,\r\n private dgStrings: DatagridStrings,\r\n @Optional()\r\n @Inject(appfxDatagridErrorNotifiableToken)\r\n private errorNotifiableService: ErrorNotifiable\r\n ) {}\r\n\r\n exportUIOnlyData(\r\n datagridProperties: ClientSideExportConfig,\r\n exportStatus: ExportStatus,\r\n datagridItemSet: DatagridItemSet\r\n ): void {\r\n try {\r\n exportStatus.inProgress = true;\r\n\r\n let exportItems = datagridItemSet.totalDatagridItems;\r\n if (exportStatus.exportType === ExportType.SELECTED_ONLY) {\r\n exportItems = datagridItemSet.selectedItems;\r\n } else if (exportStatus.exportType === ExportType.MATCHING_FILTERS) {\r\n exportItems = datagridItemSet.filteredDatagridItems;\r\n }\r\n\r\n if (exportItems.length > 1 && datagridProperties.sort) {\r\n const sortFunction = datagridProperties.sortFunction || this.sortExportedItems;\r\n exportItems = sortFunction(exportItems, datagridProperties.sortOrder as ColumnSortOrder);\r\n }\r\n\r\n const csvData = this.csvHelperService.getData(exportItems, datagridProperties?.columnDefinitions || []);\r\n\r\n exportStatus.inProgress = false;\r\n this.downloadFile(csvData, datagridProperties.exportedFileName);\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n } catch (exception) {\r\n exportStatus.inProgress = false;\r\n this.showExportError();\r\n }\r\n }\r\n\r\n /**\r\n * Function to create a CSV file from CsvData and download it\r\n */\r\n downloadFile(csvData: string, exportedFileName?: string) {\r\n try {\r\n const blob = new Blob([csvData], { type: 'text/plain' });\r\n let fileName = defaultFileName + defaultFileExtension;\r\n if (exportedFileName) {\r\n fileName = exportedFileName + defaultFileExtension;\r\n }\r\n\r\n const csvDataUrl = URL.createObjectURL(blob);\r\n const downloadLink = this.renderer.createElement('a');\r\n downloadLink.setAttribute('href', csvDataUrl);\r\n downloadLink.setAttribute('download', fileName);\r\n this.renderer.appendChild(this.elementRef.nativeElement, downloadLink);\r\n downloadLink.click();\r\n\r\n setTimeout(() => {\r\n this.renderer.removeChild(this.elementRef.nativeElement, downloadLink);\r\n URL.revokeObjectURL(csvDataUrl);\r\n downloadLink.remove();\r\n }, 100);\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n } catch (exception) {\r\n this.showExportError();\r\n }\r\n }\r\n\r\n private showExportError(): void {\r\n if (this.errorNotifiableService) {\r\n this.errorNotifiableService.notifyError(this.dgStrings.exportErrorTitle, this.dgStrings.exportErrorMessage);\r\n } else {\r\n console.error(this.dgStrings.exportErrorTitle, this.dgStrings.exportErrorMessage);\r\n }\r\n }\r\n\r\n /**\r\n * Sort function used internally from ExportProviderService to sort exported items.\r\n */\r\n private sortExportedItems(gridItems: any[], sortOrder: ColumnSortOrder) {\r\n if (!sortOrder) {\r\n return gridItems;\r\n }\r\n const forField = sortOrder.column.field;\r\n const sortedItems = gridItems.sort((a: any, b: any): number => {\r\n if (!Object.prototype.hasOwnProperty.call(a, forField) || !Object.prototype.hasOwnProperty.call(b, forField)) {\r\n return 0;\r\n }\r\n const valA = (a as any)[forField];\r\n const valB = (b as any)[forField];\r\n if (valA === null || valA === undefined) {\r\n if (valB === null || valB === undefined) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n }\r\n\r\n if (valB === null || valB === undefined) {\r\n return -1;\r\n }\r\n\r\n return valA.localeCompare(valB);\r\n });\r\n\r\n return sortOrder.sortOrder === HermesDatagridSortOrder.DESC ? sortedItems.reverse() : sortedItems;\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 { FactoryProvider, InjectionToken } from '@angular/core';\r\n\r\n// Variable to keep track of unique ID instances\r\n// Using BigInt to avoid overflow.\r\nlet instancesCount = BigInt(0);\r\n\r\nexport const uniqueIdToken: InjectionToken<string> = new InjectionToken('UID generator');\r\nexport const uniqueIdProvider: FactoryProvider = {\r\n provide: uniqueIdToken,\r\n useFactory: uniqueIdFactory,\r\n};\r\n\r\nfunction uniqueIdFactory(): string {\r\n return `${instancesCount++}`;\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/**\r\n * Result of a nested property resolution.\r\n */\r\nexport type PropertyResolutionResult<T = unknown> = { isValid: true; value: T } | { isValid: false };\r\n\r\n/**\r\n * Safely resolves a nested property path (e.g., \"a.b.c\") on an object.\r\n *\r\n * @param item The object to resolve the property on.\r\n * @param propertyPath The dot-separated property path.\r\n * @returns An object containing the resolved value and a boolean indicating if the path was valid.\r\n */\r\nexport function getNestedProperty<T = unknown>(item: any, propertyPath: string): PropertyResolutionResult<T> {\r\n if (!item || !propertyPath) {\r\n return { isValid: false };\r\n }\r\n\r\n let isValid = true;\r\n const value = propertyPath.split('.').reduce((o: any, i: string) => {\r\n if (o !== null && o !== undefined && typeof o === 'object' && i in o) {\r\n return o[i];\r\n }\r\n isValid = false;\r\n return undefined;\r\n }, item);\r\n\r\n return isValid ? { isValid: true, value: value as T } : { isValid: false };\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 AfterViewInit,\r\n Directive,\r\n EventEmitter,\r\n Host,\r\n Inject,\r\n InjectionToken,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TrackByFunction,\r\n} from '@angular/core';\r\nimport { SelectionType } from '@hermes-ui/angular/data/datagrid';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { getNestedProperty } from '../utils/property-resolver.util';\r\n\r\nexport interface PreselectableComponent {\r\n trackByGridItemProperty: string;\r\n trackByFunction: TrackByFunction<any>;\r\n selectionType: SelectionType;\r\n selectedItems: any[];\r\n serverDrivenDatagrid: boolean;\r\n gridItemsChange: EventEmitter<any[]>;\r\n /**\r\n * Handles datagrid selected items changes.\r\n */\r\n onSelectedItemsChange: (selectedItems: any[]) => void;\r\n}\r\n\r\n/**\r\n * The problem we want to solve with the common interface and the token below:\r\n * We don't want this directive to enumerate all its host components by type\r\n * because we don't want to import and thus depend on components which might\r\n * use the directive. To reverse the dependency, we use the token. Each\r\n * component which might host this directive should provide itself as the token.\r\n */\r\nexport const appfxPreselectableComponentToken = new InjectionToken<PreselectableComponent>(\r\n 'PRESELECTABLE_COMPONENT_TOKEN'\r\n);\r\n\r\n/**\r\n * Preserves selection of datagrid and datagrid-detail by tracking whether some\r\n * grid item should be selected on the base of the a set \"trackByGridItemProperty\"\r\n * input of the datagrid or with the help of the \"trackByFunction\" function\r\n * input of the datagrid.\r\n *\r\n * After global refresh the data grid receives new items and the selection is lost\r\n * because the grid doesn't know how to recognize which of the new items are the old one\r\n * selected before global refresh. This directive tracks the selected items by property and\r\n * when the grid receives new data update the selected items array with the items from the\r\n * the new grid data.\r\n *\r\n * The server-side driven data grid doesn't receive all data. The directive in this case will\r\n * update only the items which can be found among the new grid items and leave\r\n * the old ones which it can't find in the selected grid items array. In this case, the component\r\n * which host the appfx datagrid has responsibility to remove the old selected items which are\r\n * not applicable for selection after grid data has been updated.\r\n *\r\n * How to use it\r\n *\r\n * <appfx-datagrid [appfxPreserveSelection] =\"'hostObjectId'\" [gridItems]=\"gridItems\" ....>\r\n *\r\n * <appfx-datagrid appfxPreserveSelection [trackByGridItemProperty]=\"'hostObjectId'\" [gridItems]=\"gridItems\" ....>\r\n *\r\n * <appfx-datagrid appfxPreserveSelection [trackByFunction]=\"<function>\" [gridItems]=\"gridItems\" ....>\r\n *\r\n * Where function receives as an argument datagrid item and returns unique identifier for it.\r\n */\r\n@Directive({\r\n selector: '[appfxPreserveSelection]',\r\n standalone: false,\r\n})\r\nexport class DatagridPreserveSelectionDirective implements AfterViewInit, OnDestroy {\r\n /**\r\n * preserveSelection - needed mainly because of list-view component and\r\n * indicates whether grid should preserve the selection based on 'trackByFunction' or\r\n * 'trackByGridItemProperty'.\r\n */\r\n @Input() preserveExistingSelection = true;\r\n\r\n @Output() selectedItemsUpdated = new EventEmitter<any[]>();\r\n\r\n private component: PreselectableComponent;\r\n\r\n private selectBy: string | TrackByFunction<any>;\r\n\r\n private gridItemChangeSub: Subscription;\r\n\r\n constructor(\r\n @Inject(appfxPreselectableComponentToken)\r\n @Host()\r\n public preselectableComponent: PreselectableComponent\r\n ) {\r\n this.component = preselectableComponent;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.preserveExistingSelection) {\r\n this.selectBy = this.component.trackByGridItemProperty || this.component.trackByFunction;\r\n if (!this.selectBy) {\r\n throw Error(\r\n 'The \"preserveSelection\" directive is not initialized correctly. Provide \"trackByFunction\" or ' +\r\n ' \"trackByGridItemProperty\" of the appfx datagrid.'\r\n );\r\n }\r\n this.gridItemChangeSub = this.component.gridItemsChange.subscribe((items: any[]) => {\r\n if (this.component.selectionType !== SelectionType.None && this.component.selectedItems?.length > 0) {\r\n this.updateSelectedItems(items);\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.gridItemChangeSub) {\r\n this.gridItemChangeSub.unsubscribe();\r\n }\r\n }\r\n\r\n updateSelectedItems(items: any[]): void {\r\n let selectedItems;\r\n if (this.component.serverDrivenDatagrid) {\r\n // TODO: Delete this when https://github.com/vmware/clarity/issues/4903 is resolved.\r\n selectedItems = this.findAndUpdateSelectedItems(items);\r\n } else {\r\n // TODO: When https://github.com/vmware/clarity/issues/4786 is resolved\r\n // check if selection works without this directive for client side\r\n // datagrid and delete this.\r\n selectedItems = this.findSelectedItems(items);\r\n }\r\n\r\n if (this.selectedItemsUpdated.observers.length > 0) {\r\n this.selectedItemsUpdated.emit(selectedItems);\r\n } else {\r\n this.component.selectedItems = selectedItems;\r\n }\r\n }\r\n\r\n private findSelectedItems(items: any[]): any[] {\r\n const selectedItemsDic = this.createSelectedItemsDictionary();\r\n return items.filter((item: any) => {\r\n const itemPropertyValue = this.getItemUniquePropertyValue(item);\r\n return selectedItemsDic.has(itemPropertyValue);\r\n });\r\n }\r\n\r\n private findAndUpdateSelectedItems(items: any[]): any[] {\r\n // We need to preserve the order of selected items due to strange implementation\r\n // of selection in the clarity datagrid\r\n const selectedItems: any[] = [];\r\n const selectedItemIndexByRef = new Map<string, any>();\r\n const selectedItemsDic = this.createSelectedItemsDictionary(selectedItems, selectedItemIndexByRef);\r\n\r\n items.forEach((item: any) => {\r\n const itemPropertyValue = this.getItemUniquePropertyValue(item);\r\n if (selectedItemsDic.has(itemPropertyValue)) {\r\n const index = selectedItemIndexByRef.get(itemPropertyValue);\r\n selectedItems[index] = item;\r\n }\r\n });\r\n return selectedItems;\r\n }\r\n\r\n private createSelectedItemsDictionary(\r\n selectedItems?: any[],\r\n selectedItemIndexByRef?: Map<string, any>\r\n ): Map<string, any> {\r\n const selectedItemsDic = new Map<string, any>();\r\n const storeItemsAndIndexes = selectedItems && selectedItemIndexByRef;\r\n this.component.selectedItems.forEach((item: any, index: number) => {\r\n const itemPropertyValue = this.getItemUniquePropertyValue(item);\r\n selectedItemsDic.set(itemPropertyValue, item);\r\n if (storeItemsAndIndexes) {\r\n selectedItems?.push(item);\r\n selectedItemIndexByRef?.set(itemPropertyValue, index);\r\n }\r\n });\r\n return selectedItemsDic;\r\n }\r\n\r\n private getItemUniquePropertyValue(item: any): string {\r\n if (typeof this.selectBy === 'function') {\r\n return (<any>this.selectBy)(0, item || {});\r\n }\r\n\r\n const result = getNestedProperty(item, this.selectBy as string);\r\n return result.isValid ? String(result.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\r\n/**\r\n * Expose most common datagrid actionbar layout styles.\r\n */\r\nexport enum ActionBarLayout {\r\n flatCompact = 'btn btn-sm btn-link',\r\n flat = 'btn btn-link',\r\n outlined = 'btn btn-sm btn-secondary',\r\n}\r\n\r\n/**\r\n * Configuration for actions.\r\n */\r\nexport interface ActionDefinition<T = string> {\r\n id: string;\r\n label: T;\r\n ariaLabel?: string;\r\n enabled: boolean;\r\n tooltip?: T;\r\n /**\r\n * Specify style class to be applied.\r\n * @note Applicable only for ActionBar actions.\r\n * Footer actions are with default style for footer actions - ('btn btn-sm column-toggle-action').\r\n * Default style for ActionBar actions is flatCompact - ('btn btn-sm btn-link').\r\n * {@see ActionBarLayout}\r\n */\r\n class?: string;\r\n\r\n /**\r\n * True if the action button is visible above the grid, otherwise the button\r\n * is placed within a dropdown.\r\n * @note Applicable only for ActionBar actions.\r\n */\r\n isVisible?: boolean;\r\n\r\n /**\r\n * When an action has children, it is displayed like a dropdown and\r\n * the children are the dropdown items.\r\n */\r\n children?: ActionDefinition[];\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 { HermesDatagrid } from '@hermes-ui/angular/data/datagrid';\r\n\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\ninterface HermesDatagridPrivateMembers {\r\n keyNavigation: KeyNavigationController;\r\n}\r\n\r\nexport interface KeyNavigationController {\r\n setActiveCell(activeCellElement: HTMLElement): void;\r\n focusElement(activeCellElement: HTMLElement): void;\r\n}\r\n\r\nexport function getDatagridKeyNavigationController(datagrid: HermesDatagrid) {\r\n const datagridPrivateMembers = datagrid as unknown as HermesDatagridPrivateMembers;\r\n\r\n return datagridPrivateMembers.keyNavigation;\r\n}\r\n\r\nexport function isEqualColumns(column: ColumnDefinition<any> | null, other: ColumnDefinition<any> | null): boolean {\r\n return (\r\n !!column &&\r\n !!other &&\r\n ((!!column.uid && column.uid === other.uid) || (!!column.displayName && column.displayName === other.displayName))\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 { BehaviorSubject, Subject } from 'rxjs';\r\n\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n/**\r\n * Provides subjects for communication between appfxDgColumnsOrder and appfxColumnOrder\r\n * directives.\r\n */\r\n@Injectable()\r\nexport class DatagridColumnsOrderService {\r\n /**\r\n * Emits the column which should be marked as grabbed. If the column is null all columns are\r\n * marked as not grabbed\r\n */\r\n readonly grabbedColumn = new BehaviorSubject<ColumnDefinition<any> | null>(null);\r\n\r\n /**\r\n * Emits when the column should be moved as result of left or right arrow key press.\r\n */\r\n readonly moveVisibleColumn = new Subject<{\r\n visibleColumnIndex: number;\r\n moveLeft: boolean;\r\n }>();\r\n\r\n /**\r\n * Event emitter to tell the dragged column to set focus\r\n */\r\n readonly focusGrabbedColumn = new Subject<void>();\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 { CdkDrag } from '@angular/cdk/drag-drop';\r\nimport {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { HermesDatagrid } from '@hermes-ui/angular/data/datagrid';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nimport { getDatagridKeyNavigationController, isEqualColumns } from './datagrid-columns-order.helpers';\r\nimport { DatagridColumnsOrderService } from './datagrid-columns-order.service';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n@Directive({\r\n selector: 'hermes-dg-column[appfxColumnOrder]',\r\n standalone: false,\r\n})\r\nexport class ColumnOrderDirective implements OnDestroy, OnInit {\r\n @HostBinding('class.grabbed') isGrabbed = false;\r\n\r\n @Input() columnData: ColumnDefinition<any>;\r\n\r\n @Input() columnIndex: number;\r\n\r\n private subs = new Subscription();\r\n\r\n constructor(\r\n private readonly datagrid: HermesDatagrid,\r\n readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly columnOrderingService: DatagridColumnsOrderService,\r\n private readonly changeDetectorRef: ChangeDetectorRef,\r\n private readonly cdkDrag: CdkDrag\r\n ) {\r\n cdkDrag.previewContainer = 'parent';\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n keydown(event: KeyboardEvent) {\r\n const isColumnTarget = (event.target as HTMLElement)?.tagName === 'HERMES-DG-COLUMN';\r\n if (!isColumnTarget) {\r\n return;\r\n }\r\n\r\n const isSpace = event.code === 'Space';\r\n const isLeft = event.code === 'ArrowLeft';\r\n const isRight = event.code === 'ArrowRight';\r\n const isUp = event.code === 'ArrowUp';\r\n const isDown = event.code === 'ArrowDown';\r\n const isEsc = event.code === 'Escape';\r\n const isCurrentColumnGrabbed = isEqualColumns(this.columnData, this.columnOrderingService.grabbedColumn.value);\r\n // A pinned column is rendered in the sticky container instead of the scrollable one, so it is\r\n // not part of the reorderable group. Mouse dragging is refused through cdkDragDisabled, and\r\n // keyboard reordering has to be refused here for the same reason. Releasing stays allowed, so a\r\n // column that gets pinned while it is grabbed can still be let go of.\r\n const isReorderable = !this.columnData?.pinned;\r\n\r\n if (isCurrentColumnGrabbed && (isLeft || isRight) && isReorderable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n this.moveColumn(isLeft);\r\n }\r\n\r\n if (isSpace) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n\r\n if (isCurrentColumnGrabbed && (isEsc || isDown || isUp || isSpace)) {\r\n // Remove grabbed css of the columns\r\n this.columnOrderingService.grabbedColumn.next(null);\r\n }\r\n\r\n if (!isCurrentColumnGrabbed && isSpace && isReorderable) {\r\n // Set grabbed css of the column provided as parameter\r\n this.columnOrderingService.grabbedColumn.next(this.columnData);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.subs.add(\r\n this.columnOrderingService.grabbedColumn\r\n .pipe(\r\n filter(other => {\r\n return isEqualColumns(this.columnData, other) !== this.isGrabbed;\r\n })\r\n )\r\n .subscribe(() => {\r\n this.updateGrabbedState();\r\n })\r\n );\r\n\r\n this.subs.add(\r\n this.columnOrderingService.focusGrabbedColumn.pipe(filter(() => this.isGrabbed)).subscribe(() => {\r\n this.setActiveCell();\r\n })\r\n );\r\n\r\n this.subs.add(\r\n this.cdkDrag.started.subscribe(() => {\r\n //Remove grabbed css of the columns, when user start dragging with the mouse\r\n this.columnOrderingService.grabbedColumn.next(null);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.unsubscribe();\r\n }\r\n\r\n private moveColumn(isLeft: boolean) {\r\n this.columnOrderingService.moveVisibleColumn.next({\r\n moveLeft: isLeft,\r\n visibleColumnIndex: this.columnIndex,\r\n });\r\n }\r\n\r\n private updateGrabbedState() {\r\n this.isGrabbed = !this.isGrabbed;\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setActiveCell() {\r\n getDatagridKeyNavigationController(this.datagrid).setActiveCell(this.elementRef.nativeElement);\r\n\r\n getDatagridKeyNavigationController(this.datagrid).focusElement(this.elementRef.nativeElement);\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 { CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport {\r\n Directive,\r\n ElementRef,\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 { map, Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\n\r\nimport { isEqualColumns } from './datagrid-columns-order.helpers';\r\nimport { DatagridColumnsOrderService } from './datagrid-columns-order.service';\r\nimport { ColumnOrderChanged } from '../../interfaces/column-state';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n@Directive({\r\n selector: 'hermes-datagrid[appfxDgColumnsOrder]',\r\n providers: [DatagridColumnsOrderService],\r\n standalone: false,\r\n})\r\nexport class DatagridColumnsOrderDirective implements OnInit, OnDestroy, OnChanges {\r\n @Input() dgColumnsOrderColumns: ColumnDefinition<any>[];\r\n\r\n @Input() dgColumnsVirtualScrolling = false;\r\n\r\n @Output() dgColumnsOrderChange = new EventEmitter<ColumnOrderChanged>();\r\n private subs = new Subscription();\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly cdkDropList: CdkDropList,\r\n private readonly columnOrderingService: DatagridColumnsOrderService\r\n ) {\r\n cdkDropList.orientation = 'horizontal';\r\n }\r\n\r\n ngOnInit() {\r\n this.subs.add(\r\n this.cdkDropList.dropped\r\n .pipe(\r\n filter(droppedData => !!droppedData?.item?.data?.displayName),\r\n map(droppedData => {\r\n return this.findColumnIndices(droppedData.item.data, droppedData.currentIndex);\r\n }),\r\n filter(columnIndices => columnIndices.currentIndex !== columnIndices.previousIndex),\r\n filter(columnIndices => this.isReorderAllowed(columnIndices))\r\n )\r\n .subscribe(columnIndices => {\r\n this.reorderColumn(columnIndices);\r\n })\r\n );\r\n\r\n this.subs.add(\r\n this.columnOrderingService.moveVisibleColumn\r\n .pipe(\r\n map(visibleColumnIndices => {\r\n return this.getColumnIndices(visibleColumnIndices.moveLeft, visibleColumnIndices.visibleColumnIndex);\r\n }),\r\n filter(columnIndices => {\r\n return columnIndices.previousIndex !== columnIndices.currentIndex;\r\n }),\r\n filter(columnIndices => this.isReorderAllowed(columnIndices))\r\n )\r\n .subscribe(columnIndices => {\r\n this.reorderColumn(columnIndices);\r\n this.columnOrderingService.focusGrabbedColumn.next();\r\n })\r\n );\r\n }\r\n\r\n setDgColumnsContainer(): void {\r\n // Clarity doesn't expose the scrollable datagrid container, and I didn't find a way to\r\n // get it from the parent component or directive, so we need to use querySelector\r\n // When virtualScrolling is enabled grid data and grid header are split into two different\r\n // scrollable containers. In this case we aim for the grid header.\r\n let selector = 'div.datagrid';\r\n if (this.dgColumnsVirtualScrolling) {\r\n selector += ' div.datagrid-header';\r\n }\r\n const scrollableContainer = this.elementRef.nativeElement.querySelector(selector) as HTMLElement;\r\n if (scrollableContainer) {\r\n // A workaround for the cdkDropList directive. The issue is that draggable columns are not direct\r\n // children of the drop list container on which the cdkDropList directive is applied. The selector\r\n // that can be provided to the cdkDropList directive and that directive can use to find an alternate\r\n // element container for the drop list container doesn't work. The clarity column separators are\r\n // draggable and inside column elements, and the drop list container is not their parent.\r\n // The correct fix is the clarity to support column reordering as they have better access to the\r\n // datagrid dom structure.\r\n (this.cdkDropList._dropListRef as any)._container = scrollableContainer;\r\n this.cdkDropList._dropListRef.element = scrollableContainer;\r\n this.cdkDropList.element = new ElementRef<HTMLElement>(scrollableContainer);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['dgColumnsVirtualScrolling']) {\r\n this.setDgColumnsContainer();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.unsubscribe();\r\n }\r\n\r\n /**\r\n * A pinned column is rendered in the datagrid's sticky container while the others are rendered in\r\n * the scrollable one. Changing the relative order of the two groups cannot be re-rendered: the\r\n * column elements are moved against a sibling that now lives in the other container, and the DOM\r\n * insert throws. Until the datagrid can render that, a reorder that would cross a pinned column is\r\n * refused rather than applied.\r\n */\r\n private isReorderAllowed(indices: { previousIndex: number; currentIndex: number }): boolean {\r\n if (indices.previousIndex < 0 || indices.currentIndex < 0) {\r\n return false;\r\n }\r\n\r\n const from = Math.min(indices.previousIndex, indices.currentIndex);\r\n const to = Math.max(indices.previousIndex, indices.currentIndex);\r\n\r\n // Only rendered columns matter, a hidden pinned column is not in either container.\r\n return !this.dgColumnsOrderColumns.slice(from, to + 1).some(column => column.pinned && !column.hidden);\r\n }\r\n\r\n private reorderColumn(indices: { previousIndex: number; currentIndex: number }) {\r\n const value = [...this.dgColumnsOrderColumns];\r\n moveItemInArray(value, indices.previousIndex, indices.currentIndex);\r\n this.dgColumnsOrderColumns = value;\r\n this.dgColumnsOrderChange.emit({ ...indices, columns: this.dgColumnsOrderColumns });\r\n }\r\n\r\n private getColumnIndices(moveLeft: boolean, previousColumnIndex: number) {\r\n const visibleColumns = this.dgColumnsOrderColumns.filter(column => !column.hidden);\r\n const newVisibleColumnIndex = moveLeft ? previousColumnIndex - 1 : previousColumnIndex + 1;\r\n let currenColumnIndex = newVisibleColumnIndex >= 0 ? newVisibleColumnIndex : 0;\r\n currenColumnIndex = currenColumnIndex < visibleColumns.length - 1 ? currenColumnIndex : visibleColumns.length - 1;\r\n const previousColumn = visibleColumns[previousColumnIndex];\r\n const currentColumn = visibleColumns[currenColumnIndex];\r\n return this.createColumnIndices(previousColumn, currentColumn);\r\n }\r\n\r\n private findColumnIndices(previousColumn: ColumnDefinition<any>, currentDroppedItemIndex: number) {\r\n const mappedColumnDragItems = this.cdkDropList.getSortedItems().map(item => item.data);\r\n\r\n const currentColumn = mappedColumnDragItems.find((column, index) => {\r\n //For some reason the index of the dropped item in the dropped event start from 1 not from 0\r\n return index >= currentDroppedItemIndex - 1 && !!column;\r\n });\r\n\r\n return this.createColumnIndices(previousColumn, currentColumn);\r\n }\r\n\r\n private createColumnIndices(previousColumn: ColumnDefinition<any>, currentColumn: ColumnDefinition<any>) {\r\n const previousIndex = this.findColumnIndex(previousColumn);\r\n const currentIndex = this.findColumnIndex(currentColumn);\r\n return {\r\n previousIndex: previousIndex,\r\n currentIndex: currentIndex,\r\n };\r\n }\r\n\r\n private findColumnIndex(column: ColumnDefinition<any>) {\r\n return this.dgColumnsOrderColumns.findIndex(other => {\r\n return isEqualColumns(column, other);\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 { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { HermesDatagridFilterInterface, HermesDatagridStringFilterInterface } from '@hermes-ui/angular/data/datagrid';\r\nimport { HermesPopoverService } from '@hermes-ui/angular/popover/common';\r\nimport { asyncScheduler, Subject } from 'rxjs';\r\nimport { observeOn } from 'rxjs/operators';\r\n\r\nimport { DatagridStrings } from '../i18n/datagrid-strings.service';\r\n\r\n@Component({\r\n selector: 'appfx-datagrid-filter',\r\n standalone: false,\r\n template: `\r\n <hermes-input-container class=\"mt-0\">\r\n <input\r\n #input\r\n hermesInput\r\n type=\"text\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n [value]=\"value\"\r\n (keyup)=\"onKey($event)\"\r\n [placeholder]=\"dgStrings.filterPlaceholder\"\r\n [attr.aria-label]=\"dgStrings.filterPlaceholder\"\r\n />\r\n </hermes-input-container>\r\n `,\r\n})\r\nexport class DatagridFilterComponent implements HermesDatagridFilterInterface<any>, OnInit, AfterViewInit {\r\n @Input() filterValue: any;\r\n @Input() stringFilterType?: HermesDatagridStringFilterInterface<any>;\r\n @Input() fieldName?: string;\r\n @Output() filterValueChange: EventEmitter<any> = new EventEmitter<any>();\r\n @ViewChild('input') input: ElementRef;\r\n\r\n value: string;\r\n changes = new Subject<any>();\r\n\r\n constructor(\r\n public dgStrings: DatagridStrings,\r\n private popoverService: HermesPopoverService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.value = this.filterValue || '';\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.popoverService.openChange.pipe(observeOn(asyncScheduler)).subscribe(openChange => {\r\n if (openChange) {\r\n this.input.nativeElement.focus();\r\n }\r\n });\r\n }\r\n\r\n onKey(event: any) {\r\n this.value = event.target.value;\r\n\r\n this.changes.next(true);\r\n\r\n if (this.filterValue !== this.value) {\r\n this.filterValueChange.emit(this.value);\r\n }\r\n }\r\n\r\n isActive(): boolean {\r\n return !!this.value;\r\n }\r\n\r\n accepts(item: any): boolean {\r\n const lowerCaseTrimmedValue = this.value.toLowerCase().trim();\r\n let currentItemFieldValue: string;\r\n\r\n if (this.stringFilterType) {\r\n return this.stringFilterType.accepts(item, lowerCaseTrimmedValue);\r\n } else if (this.fieldName) {\r\n currentItemFieldValue = '' + item[this.fieldName];\r\n return currentItemFieldValue.toLowerCase().indexOf(lowerCaseTrimmedValue) >= 0;\r\n }\r\n\r\n return false;\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 Component,\r\n ComponentRef,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\n\r\nimport { ColumnDefinition, ColumnRenderer } from './shared/column/column-definitions';\r\n\r\n@Component({\r\n selector: 'appfx-dg-cell-container',\r\n standalone: false,\r\n template: `\r\n @if (!column.columnRenderer) {\r\n <span [title]=\"item?.[column.field]\">{{ item?.[column.field] }}</span>\r\n }\r\n <ng-template #cellContainer></ng-template>\r\n `,\r\n styles: [':host { width: 100%; }'],\r\n})\r\nexport class DatagridCellContainerComponent implements OnInit, OnDestroy, OnChanges {\r\n @ViewChild('cellContainer', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\r\n\r\n @Input() column: ColumnDefinition<any>;\r\n\r\n @Input() item: any;\r\n\r\n private componentRef: ComponentRef<any> | null;\r\n private instance: ColumnRenderer<any> | null;\r\n\r\n ngOnChanges(): void {\r\n if (this.instance && typeof this.instance.onChange === 'function') {\r\n this.instance.onChange(this.item || {}, this.column);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.column.columnRenderer) {\r\n this.componentRef = this.container.createComponent(this.column.columnRenderer);\r\n this.instance = <ColumnRenderer<any>>this.componentRef?.instance;\r\n this.instance.item = this.item || {};\r\n this.instance.column = this.column;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.instance = null;\r\n this.componentRef = null;\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 { CdkConnectedOverlay, ConnectionPositionPair } from '@angular/cdk/overlay';\r\nimport { Component, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Output, ViewChild } from '@angular/core';\r\n\r\nimport { DatagridStrings } from '../../i18n/datagrid-strings.service';\r\nimport { ColumnHiddenState } from '../../interfaces/column-state';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\n@Component({\r\n selector: 'appfx-dg-column-toggle',\r\n standalone: false,\r\n templateUrl: 'datagrid-column-toggle.component.html',\r\n styleUrls: ['datagrid-column-toggle.component.scss'],\r\n})\r\nexport class DatagridColumnToggleComponent implements OnDestroy {\r\n @HostBinding('class') layoutClass = 'column-switch-wrapper';\r\n\r\n @ViewChild('closeColumnButton', { read: ElementRef }) closeColumnButtonElement: ElementRef;\r\n\r\n @Input() columns: ColumnDefinition<any>[];\r\n @Output() columnsChange = new EventEmitter<ColumnDefinition<any>[]>();\r\n\r\n @Output() columnHiddenStateChange = new EventEmitter<ColumnHiddenState>();\r\n\r\n positions = [\r\n new ConnectionPositionPair(\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n },\r\n {\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n }\r\n ),\r\n ];\r\n\r\n openState = false;\r\n viewId: string | undefined;\r\n overlay: CdkConnectedOverlay;\r\n\r\n constructor(public dgStrings: DatagridStrings) {}\r\n\r\n get hasOnlyOneVisibleColumn(): boolean {\r\n const hideableColumns = this.hideableColumns();\r\n const nonHideableColumns = this.columns.length - hideableColumns.length;\r\n return nonHideableColumns === 0 && hideableColumns.filter(column => !column.hidden).length === 1;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.openState = false;\r\n }\r\n\r\n onAttach(overlay: CdkConnectedOverlay) {\r\n this.overlay = overlay;\r\n this.viewId = overlay?.overlayRef?.overlayElement.id;\r\n }\r\n\r\n onDetach(): void {\r\n this.openState = false;\r\n this.viewId = undefined;\r\n }\r\n\r\n showColumn(colUid: string) {\r\n this.showHideColumn(colUid, false);\r\n }\r\n\r\n hideColumn(colUid: string) {\r\n this.showHideColumn(colUid, true);\r\n }\r\n\r\n toggleColumnState(columnToToggle: ColumnDefinition<any>, event?: Event) {\r\n const shouldHide = !!event?.target && !(event.target as HTMLInputElement).checked;\r\n columnToToggle.hidden = shouldHide;\r\n this.columnsChange.emit([...this.columns]);\r\n this.columnHiddenStateChange.emit({\r\n hidden: shouldHide,\r\n column: columnToToggle,\r\n });\r\n }\r\n\r\n onSelectAll() {\r\n this.hideableColumns()\r\n .filter(column => column.hidden)\r\n .forEach(column => this.toggleColumnState(column));\r\n }\r\n\r\n allColumnsSelected(): boolean {\r\n return this.hideableColumns().filter(column => column.hidden).length === 0;\r\n }\r\n\r\n hideableColumns(): ColumnDefinition<any>[] {\r\n // If column.hideable is not set to false explicitly then column is considered visible\r\n return this.columns.filter(column => column.hideable !== false);\r\n }\r\n\r\n private showHideColumn(colUid: string, hide: boolean) {\r\n const columnToToggle: ColumnDefinition<any> | undefined = this.columns.find(col => col.uid === colUid);\r\n if (!columnToToggle) {\r\n return;\r\n }\r\n\r\n columnToToggle.hidden = hide;\r\n this.columnsChange.emit([...this.columns]);\r\n this.columnHiddenStateChange.emit({\r\n hidden: hide,\r\n column: columnToToggle,\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<button\r\n cdkOverlayOrigin\r\n #trigger=\"cdkOverlayOrigin\"\r\n role=\"button\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link column-toggle-action\"\r\n (click)=\"openState = !openState\"\r\n [attr.aria-owns]=\"viewId\"\r\n [attr.aria-controls]=\"viewId\"\r\n [attr.aria-expanded]=\"openState\"\r\n>\r\n {{ dgStrings.pickColumns }}\r\n</button>\r\n<ng-template\r\n cdkConnectedOverlay\r\n #overlay=\"cdkConnectedOverlay\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"openState\"\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n [cdkConnectedOverlayPositions]=\"positions\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n (detach)=\"onDetach()\"\r\n (attach)=\"onAttach(overlay)\"\r\n (backdropClick)=\"openState = false\"\r\n>\r\n <div\r\n class=\"column-switch\"\r\n role=\"dialog\"\r\n cdkTrapFocus\r\n [cdkTrapFocusAutoCapture]=\"true\"\r\n [attr.aria-label]=\"dgStrings.showColumnsMenuDescription\"\r\n tabindex=\"-1\"\r\n >\r\n <div class=\"switch-header\">\r\n <div class=\"hermes-sr-only\">\r\n {{ dgStrings.allColumnsSelected }}\r\n </div>\r\n <span role=\"heading\" aria-level=\"3\">{{ dgStrings.showColumns }}</span>\r\n <button\r\n class=\"btn btn-sm btn-link\"\r\n cdkFocusInitial\r\n cdkFocusRegionStart\r\n (click)=\"openState = false\"\r\n #closeColumnButton\r\n >\r\n <span class=\"hermes-sr-only\">{{ dgStrings.closeColumnTogglerText }}</span>\r\n <hermes-icon shape=\"window-close\"></hermes-icon>\r\n </button>\r\n </div>\r\n <ul class=\"switch-content list-unstyled\" tabindex=\"-1\">\r\n @for (column of hideableColumns(); track column) {\r\n <li>\r\n <hermes-checkbox-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n hermesCheckbox\r\n [disabled]=\"hasOnlyOneVisibleColumn && !column.hidden\"\r\n [checked]=\"!column.hidden\"\r\n (change)=\"toggleColumnState(column, $event)\"\r\n />\r\n <label>{{ column.displayName }}</label>\r\n </hermes-checkbox-wrapper>\r\n </li>\r\n }\r\n </ul>\r\n <div class=\"switch-footer\">\r\n <button\r\n class=\"btn btn-sm btn-link switch-button export-link\"\r\n type=\"button\"\r\n cdkFocusRegionEnd\r\n [disabled]=\"allColumnsSelected()\"\r\n (click)=\"onSelectAll()\"\r\n >\r\n {{ dgStrings.selectAll }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\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 Component,\r\n ComponentRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { HermesDatagridFilter } from '@hermes-ui/angular/data/datagrid';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { ColumnFilter } from '../interfaces/column-filter';\r\n\r\n/**\r\n * A component that acts as a container for custom column filters.\r\n * It creates an instance of the specified filter component and manages its lifecycle.\r\n */\r\n@Component({\r\n selector: 'appfx-dg-filter-container',\r\n standalone: false,\r\n template: ` <ng-template #filterContainer></ng-template>`,\r\n})\r\nexport class DatagridFilterContainerComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('filterContainer', { read: ViewContainerRef, static: true }) container: ViewContainerRef;\r\n\r\n /**\r\n * The filter component to be created.\r\n */\r\n @Input() filterType: Type<any>;\r\n\r\n /**\r\n * The initial value for the filter.\r\n */\r\n @Input() filterValue: any;\r\n\r\n /**\r\n * Event emitter to notify the hosting view about changes in the filter value.\r\n */\r\n @Output() filterValueChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n private componentRef: ComponentRef<any> | null;\r\n private filter: ColumnFilter<any>;\r\n private filterChangeSub: Subscription | null;\r\n\r\n constructor(private filterContainer: HermesDatagridFilter) {}\r\n\r\n ngAfterViewInit() {\r\n if (this.filterType) {\r\n this.componentRef = this.container.createComponent(this.filterType);\r\n this.filter = <ColumnFilter<any>>this.componentRef.instance;\r\n this.filter.filterValue = this.filterValue;\r\n this.filterChangeSub = this.filter.changes.subscribe((value: any) => {\r\n this.filterValueChange.emit(value);\r\n });\r\n this.filterContainer.setFilter(this.filter);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.filterChangeSub) {\r\n this.filterChangeSub.unsubscribe();\r\n this.filterChangeSub = null;\r\n }\r\n\r\n if (this.componentRef) {\r\n this.componentRef.destroy();\r\n this.componentRef = null;\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 { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { ExportType } from './export-type';\r\nimport { ExportStatus } from './export.interface';\r\nimport { DatagridStrings } from '../../i18n/datagrid-strings.service';\r\n\r\n@Component({\r\n selector: 'appfx-dg-export',\r\n standalone: false,\r\n templateUrl: 'export-datagrid.component.html',\r\n styleUrls: ['export-datagrid.component.scss'],\r\n})\r\nexport class ExportDatagridComponent {\r\n /**\r\n * All grid items count\r\n */\r\n @Input() allItemsCount: any = 0;\r\n\r\n /**\r\n * All filtered items count\r\n */\r\n @Input() filteredItemsCount: any = 0;\r\n\r\n /**\r\n * Selected items in the datagrid\r\n */\r\n @Input() selectedItemsCount: any = 0;\r\n\r\n /**\r\n * Event emitter to tell the hosting view that user has requested to export list data\r\n */\r\n @Output() exportEventEmitter: EventEmitter<ExportStatus> = new EventEmitter<ExportStatus>();\r\n\r\n allRowsCount: string;\r\n selectedRowsCount: string;\r\n matchedFilterRowsCount: string;\r\n exportType: any;\r\n exportStatus: ExportStatus = { inProgress: false, exportType: ExportType.ALL };\r\n\r\n constructor(public dgStrings: DatagridStrings) {\r\n this.exportType = ExportType;\r\n }\r\n\r\n /**\r\n * Export event is emitted on Export button click and no dropdown options are available\r\n * All Items are Exported.\r\n */\r\n exportAllIfOnlyOption(): void {\r\n if (this.selectedItemsCount === 0 && this.filteredItemsCount === 0) {\r\n this.exportStatus.exportType = this.exportType.ALL;\r\n this.exportEventEmitter.emit(this.exportStatus);\r\n } else {\r\n this.allRowsCount = '';\r\n this.selectedRowsCount = '';\r\n this.matchedFilterRowsCount = '';\r\n\r\n if (this.allItemsCount) {\r\n this.allRowsCount = `(${this.allItemsCount})`;\r\n } else {\r\n this.allRowsCount = `(0)`;\r\n }\r\n if (this.filteredItemsCount) {\r\n this.matchedFilterRowsCount = `(${this.filteredItemsCount})`;\r\n } else {\r\n this.matchedFilterRowsCount = `(0)`;\r\n }\r\n if (this.selectedItemsCount) {\r\n this.selectedRowsCount = `(${this.selectedItemsCount})`;\r\n } else {\r\n this.selectedRowsCount = `(0)`;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handler function called when one of the export options is clicked\r\n */\r\n onExportClick(exportType: ExportType) {\r\n this.exportStatus.exportType = exportType;\r\n this.exportEventEmitter.emit(this.exportStatus);\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@if (selectedItemsCount > 0 || filteredItemsCount > 0) {\r\n <hermes-dropdown class=\"column-switch-wrapper\">\r\n <button\r\n data-test-id=\"export-link\"\r\n type=\"button\"\r\n class=\"column-toggle-action btn btn-sm btn-link\"\r\n [hermesLoading]=\"exportStatus.inProgress || false\"\r\n [disabled]=\"!(allItemsCount > 0)\"\r\n (click)=\"exportAllIfOnlyOption()\"\r\n hermesDropdownTrigger\r\n >\r\n {{ dgStrings.exportLink }}\r\n @if (selectedItemsCount > 0 || filteredItemsCount > 0) {\r\n <hermes-icon shape=\"angle\" direction=\"down\"></hermes-icon>\r\n }\r\n </button>\r\n <hermes-dropdown-menu class=\"export-dropdown\" hermesPosition=\"top-left\" *hermesIfOpen>\r\n @if (selectedItemsCount > 0 || filteredItemsCount > 0) {\r\n <button type=\"button\" hermesDropdownItem (click)=\"onExportClick(exportType.ALL)\">\r\n {{ dgStrings.exportAll }} {{ allRowsCount }}\r\n </button>\r\n }\r\n @if (filteredItemsCount > 0) {\r\n <button type=\"button\" hermesDropdownItem (click)=\"onExportClick(exportType.MATCHING_FILTERS)\">\r\n {{ dgStrings.exportMatchingFilters }}\r\n {{ matchedFilterRowsCount }}\r\n </button>\r\n }\r\n @if (selectedItemsCount > 0) {\r\n <button type=\"button\" hermesDropdownItem (click)=\"onExportClick(exportType.SELECTED_ONLY)\">\r\n {{ dgStrings.exportSelectedRows }} {{ selectedRowsCount }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n} @else {\r\n <div class=\"column-switch-wrapper\">\r\n <button\r\n data-test-id=\"export-link\"\r\n type=\"button\"\r\n class=\"column-toggle-action btn btn-sm btn-link\"\r\n [hermesLoading]=\"exportStatus.inProgress || false\"\r\n [disabled]=\"!(allItemsCount > 0)\"\r\n (click)=\"exportAllIfOnlyOption()\"\r\n >\r\n {{ dgStrings.exportLink }}\r\n </button>\r\n </div>\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 { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Used to determine whether the datagrid row is locked (disabled) or not, by\r\n * returning boolean result. If the disabled state is provided and is true the row\r\n * is consider as not selectable. If isLocked function is provided the return\r\n * boolean result from it is used to be determine whether the row is selectable.\r\n * If isLocked function is not provided the pipe returns null, row is consider\r\n * selectable.\r\n *\r\n * Usage:\r\n * rowItem | isRowSelectable: isLockedFunction : disabled\r\n */\r\n@Pipe({ name: 'isRowSelectable', standalone: false })\r\nexport class IsRowSelectablePipe implements PipeTransform {\r\n transform(rowItem: any, isLocked?: (rowItem: any) => boolean, disabled?: boolean): boolean {\r\n if (disabled) {\r\n return false;\r\n }\r\n if (isLocked) {\r\n return !isLocked(rowItem);\r\n }\r\n\r\n return true;\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 { ListRange } from '@angular/cdk/collections';\r\nimport { CdkDropList } from '@angular/cdk/drag-drop';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n TrackByFunction,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { ZoomLevel, ZoomLevelService } from '@hermes-ui/angular/addons/a11y';\r\nimport { FilterablePropertyDefinition, FilterMode, PropertyFilter } from '@hermes-ui/angular/addons/datagrid-filters';\r\nimport { DragAndDropGroupService } from '@hermes-ui/angular/addons/drag-and-drop';\r\nimport {\r\n HermesDatagrid,\r\n HermesDatagridPagination,\r\n HermesDatagridSortOrder,\r\n HermesDatagridStateInterface,\r\n HermesDatagridVirtualScrollRangeInterface,\r\n SelectionType,\r\n selectionTypeAttribute,\r\n} from '@hermes-ui/angular/data/datagrid';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { ExportProviderService } from './addons/export/export-provider.service';\r\nimport { ClientSideExportConfig, DatagridItemSet, ExportStatus } from './addons/export/export.interface';\r\nimport { DatagridStrings } from './i18n/datagrid-strings.service';\r\nimport { uniqueIdProvider, uniqueIdToken } from './id-generator/id-generator';\r\nimport {\r\n ColumnFilterChange,\r\n ColumnHiddenState,\r\n ColumnOrderChanged,\r\n // ColumnPinnedState, // disabled with hermesDgPinnable\r\n ColumnResize,\r\n ColumnSortOrder,\r\n} from './interfaces/column-state';\r\nimport { ContextMenuEvent } from './interfaces/context-menu-event';\r\nimport { DatagridDragConfig } from './interfaces/datagrid-drag-config';\r\nimport {\r\n appfxPreselectableComponentToken,\r\n PreselectableComponent,\r\n} from './preserve-selection/datagrid-preserve-selection.directive';\r\nimport { ActionBarLayout, ActionDefinition } from './shared/action/action-definition';\r\nimport { ActionClickEvent, SingleRowActionOpen } from './shared/action/actions-event-types';\r\nimport { ColumnDefinition } from './shared/column/column-definitions';\r\nimport { getNestedProperty } from './utils/property-resolver.util';\r\n\r\n/**\r\n * The GridLayoutModel interface defines configurable options for customizing\r\n * the visual appearance and behavior of the datagrid layout.\r\n */\r\nexport interface GridLayoutModel {\r\n /**\r\n * Enables compact mode for the datagrid, reducing row height to create a denser layout.\r\n * This mode is particularly useful when you need to display more rows within the same viewport.\r\n * - `true`: Enables compact mode.\r\n * - `false`: Uses the default Clarity layout with standard row and column height.\r\n *\r\n * Defaults to `true` if not specified.\r\n */\r\n compact?: boolean;\r\n\r\n /**\r\n * Disables the datagrid, preventing all user interactions.\r\n * - `true`: Disables the grid and makes it non-interactive.\r\n * - `false`: Allows full user interactions.\r\n *\r\n * Defaults to `false` if not specified.\r\n */\r\n disabled?: boolean;\r\n\r\n /**\r\n * Adjusts the datagrid layout to stretch and fill 100% of the height of the parent container.\r\n * - `true`: The datagrid stretches to fill the parent container's height.\r\n * - `false`: The datagrid height adjusts based on its content.\r\n *\r\n * Defaults to `true` if not specified.\r\n */\r\n stretchToParentHeight?: boolean;\r\n}\r\n\r\n/**\r\n * The GridFooterModel interface configures the behavior and appearance of the datagrid footer.\r\n */\r\nexport interface GridFooterModel {\r\n /**\r\n * Controls the visibility of the datagrid footer.\r\n * - `true`: The footer is displayed.\r\n * - `false`: The footer is hidden.\r\n *\r\n * Defaults to `true` if not specified.\r\n */\r\n showFooter?: boolean;\r\n\r\n /**\r\n * Controls the visibility of the column toggle in the datagrid footer.\r\n * - `true`: The column toggle is hidden.\r\n * - `false`: The column toggle is visible, allowing users to show or hide columns.\r\n *\r\n * Defaults to `false` if not specified.\r\n */\r\n hideColumnToggle?: boolean;\r\n\r\n /**\r\n * Configuration for client-side data export behavior.\r\n * This option allows to define settings such as the file name, export columns.\r\n *\r\n * Note: To implement custom export logic, use the `enableCustomExport` property.\r\n * The `onExportData` event can be handled manually for custom export behavior.\r\n *\r\n * @see ClientSideExportConfig\r\n */\r\n clientSideExportConfig?: ClientSideExportConfig;\r\n /**\r\n * Specifies whether the export button should be displayed in the datagrid.\r\n * Enabling this option causes the component to emit the `onExportData` event, which can be used for implementing custom export logic.\r\n *\r\n * If `clientSideExportConfig` is provided, the export button will automatically be shown.\r\n *\r\n * Values:\r\n * - `true`: Displays the export button and triggers the `onExportData` event when clicked.\r\n * - `false`: Hides the export button.\r\n *\r\n * Defaults to `false` if not specified.\r\n */\r\n enableCustomExport?: boolean;\r\n\r\n /**\r\n * An array of action definitions to be rendered in the Datagrid footer.\r\n * These actions are displayed as small buttons on the left side of the footer.\r\n *\r\n * Interaction:\r\n * When a footer action is clicked, the {@link #onActionClick} callback is invoked,\r\n * passing the specific {@link ActionDefinition} and the current datagrid\r\n * selection (single or multiple items) as context.\r\n *\r\n * Note on Styling:\r\n * Unlike ActionBar actions, footer actions ignore the 'class' property and\r\n * apply a consistent style to maintain visual harmony with\r\n * pagination and other footer elements.\r\n */\r\n footerActions?: ActionDefinition[];\r\n}\r\n\r\n/**\r\n * DatagridComponent represents a data-bound list control that displays items from an array-based source in the form of columns and rows.\r\n * The component is built on top of the HermesDatagrid component from Clarity\r\n * and provides additional functionality and customization options on top of the base HermesDatagrid.\r\n *\r\n * @template T - The type of the data being displayed in the datagrid.\r\n * This allows the datagrid to enforce type safety for the items passed to it, ensuring\r\n * that the `gridItems` and other related inputs conform to a specific structure.\r\n *\r\n * @example\r\n * <appfx-datagrid [gridItems]=\"data\" [columns]=\"columns\"></appfx-datagrid>\r\n */\r\n@Component({\r\n selector: 'appfx-datagrid',\r\n standalone: false,\r\n templateUrl: 'datagrid.component.html',\r\n styleUrls: ['datagrid.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n ExportProviderService,\r\n uniqueIdProvider,\r\n {\r\n provide: appfxPreselectableComponentToken,\r\n useExisting: forwardRef(() => DatagridComponent),\r\n },\r\n ],\r\n})\r\nexport class DatagridComponent<T> implements OnInit, OnDestroy, AfterViewInit, OnChanges, PreselectableComponent {\r\n searchTerm = '';\r\n visibleColumns: ColumnDefinition<T>[];\r\n draggedItems: T[] = [];\r\n\r\n @ViewChild(HermesDatagridPagination) hermesDatagridPagination: HermesDatagridPagination;\r\n\r\n /**\r\n * Shows loading indicator inside the datagrid to prevent user interactions while data is loading.\r\n * Set to `true` to display loading; set to `false` to hide the loading indicator.\r\n * Defaults to `false`.\r\n */\r\n @Input() loading = false;\r\n\r\n /**\r\n * Indicates if additional records are currently being fetched during infinite scrolling.\r\n * When `true`, a loading indicator is appended to the end of the datagrid rows.\r\n * @default false\r\n */\r\n @Input() loadingMoreItems: boolean = false;\r\n\r\n /**\r\n * When set to `true`, automatically selects the first item in the datagrid upon initialization.\r\n * Defaults to `false`.\r\n */\r\n @Input() preSelectFirstItem = false;\r\n\r\n /**\r\n * Defines the selectable page size options displayed in the grid footer.\r\n * Users can choose from these options to control the number of items shown per page.\r\n */\r\n @Input() pageSizeOptions: number[];\r\n\r\n /**\r\n * The totalItems should be provided when the grid is server driven datagrid\r\n * (serverDrivenDatagrid = true), otherwise the totalItems is calculated\r\n * internally and shouldn't be set.\r\n */\r\n @Input() totalItems = 0;\r\n\r\n /**\r\n * Shows the projected custom pagination component from the host component.\r\n * Used for infinite pagination scenarios.\r\n * Default: false\r\n */\r\n @Input() showCustomPagination = false;\r\n\r\n /**\r\n * Enables or disables server-driven mode for the datagrid.\r\n * When set to `true`, pagination and filtering should be managed externally.\r\n * Defaults to `false`.\r\n */\r\n @Input() serverDrivenDatagrid = false;\r\n\r\n /**\r\n * All grid items count when no filter is added.\r\n * Used for Export functionality when showExport is true.\r\n * Should be provided only when the grid is server driven datagrid\r\n * (serverDrivenDatagrid = true), otherwise the listItemsCount is calculated\r\n * internally and shouldn't be set.\r\n *\r\n * @deprecated To be removed with VSUIP-4776\r\n */\r\n @Input() listItemsCount = 0;\r\n\r\n /**\r\n * Template for the content displayed when a row expands. Enables expandable row functionality.\r\n */\r\n @Input() rowDetailContent: TemplateRef<unknown>;\r\n\r\n @Input() rowsExpandedByDefault = false;\r\n\r\n /**\r\n * A function that defines how to be tracked the changes for items in the grid.\r\n */\r\n @Input() trackByFunction: TrackByFunction<T>;\r\n\r\n /**\r\n * property expression which defines the item property which to be\r\n * used for tracking changes of items in in the grid. May be deep with \"a.b.c\" notation.\r\n */\r\n @Input() trackByGridItemProperty: string;\r\n\r\n /**\r\n * Reference to the template containing the content for the header\r\n * displayed on top of the detail content.\r\n */\r\n @Input() detailHeader?: TemplateRef<unknown>;\r\n\r\n /**\r\n * Reference to the template containing the detail content.\r\n */\r\n @Input() detailBody?: TemplateRef<unknown>;\r\n\r\n /**\r\n * The state passed to the detail pane. Contains the gridItem for which\r\n * detail is shown or null in case detail pane is hidden.\r\n */\r\n @Input() detailState: T | null = null;\r\n\r\n /**\r\n * Used to notify the hosting view that the detailState value has changed\r\n * ( to enable two way data binding )\r\n */\r\n @Output() detailStateChange: EventEmitter<T> = new EventEmitter<T>(true);\r\n\r\n /**\r\n * A function that determines if a specific row is locked (disabled).\r\n *\r\n * This function receives a row item as an argument and returns a boolean indicating\r\n * whether the row should be locked (`true`) or enabled (`false`).\r\n */\r\n @Input() isRowLocked: (rowItem: T) => boolean;\r\n\r\n /**\r\n * Configuration for enabling drag-and-drop functionality within the datagrid.\r\n * By default, drag and drop is disabled. To enable it, provide a valid configuration object\r\n * implementing the @see DatagridDragConfig interface.\r\n */\r\n @Input() dragConfig: DatagridDragConfig;\r\n\r\n /**\r\n * An array of properties used for advanced filtering in FilterMode.Advanced\r\n */\r\n @Input() filterableProperties: FilterablePropertyDefinition[] = [];\r\n\r\n /**\r\n * Specifies the type of global filter to enable.\r\n * - `FilterMode.Quick`: Enables the quick filter.\r\n * - `FilterMode.Advanced`: Enables the advanced filter.\r\n * - `FilterMode.AdvancedOnly`: Enables only the advanced filter.\r\n *\r\n * When the filter is enabled, the component will emit the `searchTermChange`/`advancedFilterChange` event whenever the filter changes.\r\n * If not set, no filter will be displayed.\r\n */\r\n @Input() filterMode?: FilterMode;\r\n\r\n /**\r\n * Action definitions for the single row actions.\r\n */\r\n @Input() singleRowActions: ActionDefinition[] | null;\r\n\r\n /**\r\n * Controls whether the datagrid selection should be preserved on filtering.\r\n */\r\n @Input() preserveExistingSelectionOnFilter: boolean;\r\n\r\n /**\r\n * Controls whether the datagrid uses virtual scrolling to render data.\r\n * Virtual scrolling improves performance with large datasets by only rendering\r\n * rows that are currently visible in the viewport.\r\n *\r\n * @remarks\r\n * Virtual scrolling has the following limitations:\r\n * - Requires fixed row height for accurate scroll position calculations\r\n * - Cell text is always truncated to maintain consistent row heights\r\n * - Expandable rows are not supported due to height constraints\r\n * - Only works with server-driven data mode\r\n *\r\n * @default false\r\n */\r\n @Input() virtualScrolling = false;\r\n\r\n /**\r\n * Controls whether the \"unsort\" step is removed from the column sort cycle for\r\n * every column in the grid.\r\n * - `true` (default): sorting toggles ASC ↔ DESC only; a sorted column cannot\r\n * be returned to the unsorted state by clicking its header.\r\n * - `false`: sorting cycles ASC → DESC → unsorted (Clarity's default behavior).\r\n *\r\n * A column may override this grid-level default via\r\n * {@link ColumnDefinition.disableUnsort}.\r\n *\r\n * @default true\r\n */\r\n @Input() disableUnsort = true;\r\n\r\n /**\r\n * Input for providing data when virtual scrolling is enabled.\r\n * <code>gridItems</code> should not be used in this case.\r\n */\r\n @Input() dataRange: HermesDatagridVirtualScrollRangeInterface<T> = {\r\n total: 100,\r\n skip: 0,\r\n data: [],\r\n };\r\n\r\n /**\r\n * Data source for the Datagrid, represented as an array of row objects.\r\n *\r\n * Each object in this array corresponds to a row in the Datagrid, where\r\n * individual fields map to columns based on each column's `field` property\r\n * as defined in {@link ColumnDefinition}.\r\n */\r\n @Input() gridItems: T[];\r\n\r\n /**\r\n * Emits the updated page size {@link pageSize} to the parent component when changed.\r\n */\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Emits the updated gridItems to the parent component when changed.\r\n */\r\n @Output() gridItemsChange: EventEmitter<T[]> = new EventEmitter<T[]>();\r\n\r\n /**\r\n * Emits when advanced filter criteria changes.\r\n */\r\n @Output() advancedFilterChange: EventEmitter<PropertyFilter[]> = new EventEmitter<PropertyFilter[]>();\r\n\r\n /**\r\n * Emits the updated column definitions {@link columns} to the parent component when changed.\r\n */\r\n @Output() columnDefsChange: EventEmitter<ColumnDefinition<T>[]> = new EventEmitter<ColumnDefinition<T>[]>();\r\n\r\n /**\r\n * Emits the updated selected items {@link selectedItems} when changed.\r\n */\r\n @Output() selectedItemsChange: EventEmitter<T[]> = new EventEmitter<T[]>();\r\n\r\n /**\r\n * Event emitter to tell the hosting view that user has requested to export list data\r\n */\r\n @Output() exportDataEvent: EventEmitter<ExportStatus> = new EventEmitter<ExportStatus>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that search term, used for filtering has changed.\r\n */\r\n @Output() searchTermChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that size of column has changed.\r\n */\r\n @Output() columnResize: EventEmitter<ColumnResize> = new EventEmitter<ColumnResize>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that sort order of column has changed.\r\n */\r\n @Output() columnSortOrderChange: EventEmitter<ColumnSortOrder> = new EventEmitter<ColumnSortOrder>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that hidden state of column has changed.\r\n */\r\n @Output() columnHiddenStateChange: EventEmitter<ColumnHiddenState> = new EventEmitter<ColumnHiddenState>();\r\n\r\n // Disabled for now: only the hermesDgPinnable header toggle could ever raise this, so it is\r\n // commented out along with the toggle, onPinnedChange() below and the ColumnPinnedState\r\n // interface. Kept as a line comment rather than a doc comment, so api-extractor does not attach\r\n // it to the next output.\r\n //\r\n // /**\r\n // * Event emitter to tell hosting view that the user pinned or unpinned a column.\r\n // */\r\n // @Output() columnPinnedChange: EventEmitter<ColumnPinnedState> = new EventEmitter<ColumnPinnedState>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that column filtering has changed.\r\n */\r\n @Output() columnFilterChange: EventEmitter<ColumnFilterChange> = new EventEmitter<ColumnFilterChange>();\r\n\r\n /**\r\n * Event emitter emitted when the data needs to be refreshed,\r\n * based on user action or external ones.\r\n */\r\n @Output() refreshGridData: EventEmitter<HermesDatagridStateInterface> = new EventEmitter<HermesDatagridStateInterface>();\r\n\r\n /**\r\n * Event emitter emits when data in the grid with virtual scrolling needs to be refreshed.\r\n */\r\n @Output() refreshVirtualGridData: EventEmitter<HermesDatagridStateInterface> =\r\n new EventEmitter<HermesDatagridStateInterface>();\r\n\r\n /**\r\n * Event emitter triggered when a single-row action or actionbar action is clicked.\r\n * The emitted event contains information about the action that was clicked. {@link ActionClickEvent}\r\n */\r\n @Output() actionClick = new EventEmitter<ActionClickEvent>();\r\n\r\n /**\r\n * Event emitter triggered when the single-row action menu is opened.\r\n * The emitted event contains information about the open state and the actions associated with the menu. {@link SingleRowActionOpen}\r\n */\r\n @Output() rowActionMenuOpenChange = new EventEmitter<SingleRowActionOpen>();\r\n\r\n /**\r\n * Event emitter triggered when a right-click event is performed on a grid row.\r\n */\r\n @Output() openContextMenu: EventEmitter<ContextMenuEvent> = new EventEmitter<ContextMenuEvent>();\r\n\r\n /**\r\n * Event emitter to tell hosting view that column order has changed.\r\n */\r\n @Output() columnOrderChange: EventEmitter<ColumnOrderChanged> = new EventEmitter<ColumnOrderChanged>();\r\n\r\n @HostBinding('class.embedded-flex-component') protected applyFlexLayout = true;\r\n @HostBinding('class') protected zoomLevel: ZoomLevel = ZoomLevel.none;\r\n\r\n protected gridLayoutModel: GridLayoutModel = {\r\n compact: true,\r\n disabled: false,\r\n stretchToParentHeight: true,\r\n };\r\n protected gridFooterModel: GridFooterModel = {\r\n showFooter: true,\r\n hideColumnToggle: false,\r\n enableCustomExport: false,\r\n };\r\n protected readonly defaultUnsetValue: string = undefined as unknown as string;\r\n protected readonly defaultUnsortedOrder: HermesDatagridSortOrder = HermesDatagridSortOrder.UNSORTED;\r\n protected readonly dgStrings: DatagridStrings;\r\n protected enableSingleRowActions = false;\r\n\r\n @ViewChild(HermesDatagrid, { static: true }) private hermesDatagrid: HermesDatagrid;\r\n\r\n readonly #defaultActionButtonClass: string = ActionBarLayout.flatCompact;\r\n readonly #interpolationExpression: RegExp = /\\{(\\d+)\\}/g;\r\n readonly #unsubscribeSubject: Subject<void> = new Subject<void>();\r\n readonly #zoomLevelSubscription: Subscription = new Subscription();\r\n\r\n /**\r\n * Array of objects defining the properties of each column in the Datagrid.\r\n *\r\n * @type ColumnDefinition\r\n */\r\n #dgColumns: ColumnDefinition<T>[];\r\n #selectionType: SelectionType = SelectionType.Single;\r\n #selectedItems: T[] = [];\r\n #rowSelectionMode = true;\r\n #actionBarActions: ActionDefinition[] = [];\r\n /**\r\n * Disable datagrid rows, has the same value as\r\n * 'disabled' input and is changed when this input is changed.\r\n * It is needed only because in some modals when the grid is init with\r\n * disabled state equal to true this state is not apply on row select column\r\n * and row's checkbox/radiobuttons for selection are enabled for disabled grid.\r\n * The resolution of this problem is the row disabled state to be init in ngAfterViewInit\r\n * method on a base of 'disabled' input.\r\n * Default: false\r\n */\r\n #areRowsDisabled = false;\r\n #pageSize = 0;\r\n /**\r\n * Whether there are applied advanced filters\r\n */\r\n #hasAdvancedFilters = false;\r\n #wrapCellText = true;\r\n\r\n constructor(\r\n datagridStrings: DatagridStrings,\r\n @Inject(uniqueIdToken) private readonly uid: string,\r\n private cdr: ChangeDetectorRef,\r\n private readonly exportProviderService: ExportProviderService,\r\n @Optional() private readonly groupService: DragAndDropGroupService,\r\n @Optional() private readonly zoomLevelService: ZoomLevelService\r\n ) {\r\n this.dgStrings = {\r\n ...datagridStrings,\r\n };\r\n }\r\n\r\n /**\r\n * Input property for the grid layout configuration.\r\n * Allows the consumer of the component to provide configuration values.\r\n *\r\n * @See GridLayoutModel\r\n */\r\n @Input()\r\n get layoutModel(): GridLayoutModel {\r\n return { ...this.gridLayoutModel };\r\n }\r\n\r\n set layoutModel(config: GridLayoutModel) {\r\n this.gridLayoutModel = {\r\n ...config,\r\n compact: config?.compact ?? true,\r\n stretchToParentHeight: config?.stretchToParentHeight ?? true,\r\n };\r\n this.applyFlexLayout = !!this.gridLayoutModel.stretchToParentHeight;\r\n }\r\n\r\n /**\r\n * Input property for the footer configuration.\r\n * Allows the consumer of the component to provide configuration values.\r\n *\r\n * @See GridFooterModel\r\n */\r\n @Input()\r\n get footerModel(): GridFooterModel {\r\n return { ...this.gridFooterModel };\r\n }\r\n\r\n set footerModel(config: GridFooterModel) {\r\n this.gridFooterModel = {\r\n ...config,\r\n showFooter: config?.showFooter ?? true,\r\n };\r\n }\r\n\r\n /**\r\n * Array of column definitions that configure the appearance and behavior of each column in the Datagrid.\r\n *\r\n * Each object in this array represents a column {@link ColumnDefinition}.\r\n * The required ColumnDefinition properties are:\r\n * - `displayName`: The text for the column header.\r\n * - `field`: The name of the property in the data source to be shown in the column.\r\n */\r\n @Input()\r\n get columns(): ColumnDefinition<T>[] {\r\n return this.#dgColumns;\r\n }\r\n\r\n set columns(columns: ColumnDefinition<T>[]) {\r\n this.#dgColumns = columns;\r\n if (columns) {\r\n this.visibleColumns = columns.filter((column: ColumnDefinition<T>) => !column.hidden);\r\n this.columnDefsChange.emit(this.#dgColumns);\r\n }\r\n\r\n if (this.hermesDatagrid.columns) {\r\n this.hermesDatagrid.dataChanged();\r\n }\r\n }\r\n\r\n /**\r\n * Defines the grid selection type.\r\n * Accepts a value from `SelectionType` enum {@link SelectionType}, which specifies the row selection behavior:\r\n * - `SelectionType.NONE`: No rows are selectable.\r\n * - `SelectionType.SINGLE_SELECT` (default): Only one row can be selected at a time.\r\n * - `SelectionType.MULTI_SELECT`: Multiple rows can be selected.\r\n *\r\n * Defaults to `SelectionType.SINGLE_SELECT`.\r\n */\r\n @Input()\r\n get selectionType(): SelectionType {\r\n return this.#selectionType;\r\n }\r\n\r\n set selectionType(type: SelectionType | string) {\r\n // guard against malformed component bindings to unset variables\r\n if (type !== undefined) {\r\n this.#selectionType = selectionTypeAttribute(type);\r\n\r\n if (this.hermesDatagrid) {\r\n this.initGridSelection();\r\n }\r\n }\r\n }\r\n /**\r\n * Array of grid items {@link gridItems} which to be selected.\r\n */\r\n @Input()\r\n get selectedItems(): T[] {\r\n return this.#selectedItems;\r\n }\r\n set selectedItems(items: T[]) {\r\n this.#selectedItems = Array.isArray(items) ? items.filter((item: T) => item !== undefined) : [];\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Enables or disables selection/deselection of rows when a row is clicked.\r\n * If `SelectionType` is set to `NONE`, row selection is automatically disabled, regardless of this setting.\r\n * Defaults to `true`.\r\n */\r\n @Input()\r\n get rowSelectionMode(): boolean {\r\n // Clarity 15 allows row selection even though the selection mode is none.\r\n // Ensure that row selection mode is false when selection mode is none.\r\n return this.#selectionType === SelectionType.None ? false : this.#rowSelectionMode;\r\n }\r\n\r\n set rowSelectionMode(value: boolean) {\r\n this.#rowSelectionMode = value;\r\n }\r\n\r\n /**\r\n * Action definitions for the action bar.\r\n */\r\n @Input()\r\n get actionBarActions(): ActionDefinition[] {\r\n return this.#actionBarActions;\r\n }\r\n\r\n set actionBarActions(actions: ActionDefinition[] | null) {\r\n if (actions) {\r\n actions.forEach((action: ActionDefinition) => {\r\n action.class = action.class || this.#defaultActionButtonClass;\r\n });\r\n this.#actionBarActions = actions;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the number of items displayed per page in the datagrid.\r\n * By default, no page size is set.\r\n */\r\n @Input()\r\n get pageSize(): number {\r\n return this.#pageSize;\r\n }\r\n\r\n set pageSize(value: number) {\r\n this.#pageSize = value;\r\n if (value > 0) {\r\n this.pageSizeChange.emit(this.#pageSize);\r\n }\r\n }\r\n\r\n @Input()\r\n set datagridLabels(overriddenStrings: Partial<DatagridStrings>) {\r\n if (overriddenStrings) {\r\n for (const key of Object.keys(overriddenStrings) as Array<keyof DatagridStrings>) {\r\n this.dgStrings[key] = overriddenStrings[key] || '';\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Defines whether the content in the cells of the datagrid should be wrapped\r\n * {@see DatagridContentNoWrapDirective}.\r\n */\r\n get wrapText(): boolean {\r\n return this.#wrapCellText;\r\n }\r\n\r\n set wrapText(value: boolean) {\r\n if (value !== this.#wrapCellText) {\r\n this.#wrapCellText = value;\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n protected get rowsDisabled(): boolean {\r\n return this.#areRowsDisabled;\r\n }\r\n\r\n protected get enableToolBar(): boolean {\r\n return !!this.actionBarActions?.length || (this.filterMode !== null && this.filterMode !== undefined);\r\n }\r\n\r\n protected get enableExportButton(): boolean {\r\n return !!this.gridFooterModel.enableCustomExport || !!this.gridFooterModel.clientSideExportConfig;\r\n }\r\n\r\n protected get selectedItemsCount() {\r\n return this.#selectedItems ? this.#selectedItems.length : 0;\r\n }\r\n\r\n protected get showDeselectAll(): boolean {\r\n return this.#selectionType === SelectionType.Multi;\r\n }\r\n\r\n protected get deselectAllDisabled(): boolean {\r\n return this.selectedItemsCount === 0;\r\n }\r\n\r\n protected get filteredItemsCount(): number {\r\n let filteredItemsCount = 0;\r\n if (this.searchTerm?.length > 0 || this.#hasAdvancedFilters) {\r\n filteredItemsCount = this.totalItems;\r\n }\r\n return filteredItemsCount;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initGridSelection();\r\n this.initTotalItemsCount();\r\n if (this.zoomLevelService) {\r\n this.zoomLevelService.onChange.subscribe((v: ZoomLevel) => (this.zoomLevel = v));\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#areRowsDisabled = !!this.gridLayoutModel.disabled;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#unsubscribeSubject.next();\r\n this.#unsubscribeSubject.complete();\r\n this.#zoomLevelSubscription.unsubscribe();\r\n }\r\n\r\n resize(): void {\r\n this.hermesDatagrid.resize();\r\n }\r\n\r\n onModelChange(): void {\r\n this.cdr.markForCheck();\r\n }\r\n\r\n onContextMenu($event: MouseEvent, item: T): void {\r\n if (\r\n this.#selectionType !== SelectionType.None &&\r\n !this.isItemSelected(item) &&\r\n (!this.isRowLocked || !this.isRowLocked(item))\r\n ) {\r\n this.#selectedItems = [];\r\n this.updateSelectedItems(item);\r\n }\r\n const targets: T[] = this.#selectionType === SelectionType.Multi ? this.#selectedItems : [item];\r\n $event.preventDefault();\r\n this.openContextMenu.emit({ event: $event, context: targets });\r\n }\r\n\r\n onColumnOrderChange(data: ColumnOrderChanged) {\r\n this.columns = data.columns;\r\n this.visibleColumns = this.columns.filter((column: ColumnDefinition<T>) => !column.hidden);\r\n this.cdr.detectChanges();\r\n //Without resize when the grid is empty and column is moved\r\n //the columns are not displayed correctly\r\n this.resize();\r\n this.columnOrderChange.emit(data);\r\n }\r\n\r\n /**\r\n * Virtual scroll event handler. Called when visible data range has changed\r\n */\r\n renderedRangeChange($event: ListRange) {\r\n const currentPageState: HermesDatagridStateInterface = {\r\n page: { size: $event.end - $event.start, from: $event.start },\r\n };\r\n\r\n if ($event.start === 0 && $event.end === 0) {\r\n return;\r\n }\r\n\r\n this.refreshVirtualGridData.emit(currentPageState);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Scrolls to a specified index when virtual scrolling is enabled.\r\n */\r\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\r\n if (this.virtualScrolling) {\r\n this.hermesDatagrid.virtualScroll.scrollToIndex(index, behavior);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['gridItems'] && changes['gridItems'].currentValue) {\r\n this.gridItemsChange.emit(this.gridItems);\r\n this.preselectDetail();\r\n\r\n if (!this.serverDrivenDatagrid) {\r\n this.totalItems = this.gridItems.length;\r\n this.listItemsCount = this.gridItems.length;\r\n } else if (!changes['gridItems'].isFirstChange() && this.selectionType === SelectionType.Multi) {\r\n this.notifyOnChanges();\r\n }\r\n }\r\n // inform Clarity datagrid component for building headers\r\n if (\r\n changes['columns'] &&\r\n Array.isArray(changes['columns'].currentValue) &&\r\n changes['columns'].currentValue.length\r\n ) {\r\n this.cdr.detectChanges();\r\n }\r\n //Skip first initial change of disabled field, initially the\r\n //areRowsDisabled field is updated in ngAfterViewInit method\r\n if (changes.layoutModel?.currentValue && !changes.layoutModel.isFirstChange()) {\r\n this.#areRowsDisabled = !!this.gridLayoutModel?.disabled;\r\n }\r\n\r\n if (changes['singleRowActions']) {\r\n this.initActionTypes();\r\n }\r\n }\r\n\r\n /**\r\n * Wrapper around trackByFn intended for identity comparison only.\r\n * The index passed (0) is a dummy value and should not be relied upon.\r\n */\r\n trackByGridItemFn = (item: T) => this.trackByFn(0, <T>(item || {}));\r\n\r\n trackByColumnId(index: number, column: ColumnDefinition<T>): string {\r\n return column.uid || column.displayName;\r\n }\r\n\r\n buildRowDetailContentId(index: number): string {\r\n return `datagrid-${this.uid}-row-detail-${index}`;\r\n }\r\n\r\n onAdvancedFilterCriteriaChange(filterCriteria: PropertyFilter[]): void {\r\n // We need to know if there are filters, because of filteredItemsCount\r\n this.#hasAdvancedFilters = filterCriteria ? filterCriteria.length > 0 : false;\r\n this.advancedFilterChange.emit(filterCriteria);\r\n }\r\n\r\n /**\r\n * Handles datagrid selected items changes.\r\n * It is public because is use from directives to emit selection\r\n * change events (see DatagridPreserveSelection directive).\r\n */\r\n onSelectedItemsChange(selected: T[]): void {\r\n this.#selectedItems = selected;\r\n this.selectedItemsChange.emit(selected);\r\n }\r\n\r\n /**\r\n * Return DataGrid footer label.\r\n * - Return \"datagridLabels.footer\" property, if defined.\r\n * - If there is one item -> 1 item\r\n * - If there is no paging -> {0} items\r\n * - Else -> {1} - {2} of {0} items\r\n */\r\n getFooterMessage(totalItems: number, pageSize?: number, firstItem?: number, lastItem?: number): string {\r\n let footer: string | undefined = this.dgStrings.footer;\r\n if (footer) {\r\n // Footer is overridden.\r\n return this.interpolateMessage(footer, [totalItems, firstItem, lastItem]);\r\n }\r\n\r\n // Flag indicating when to show current range of loaded items (e.g. {1} - {2} of {0} items)\r\n const showRange =\r\n (pageSize !== undefined && pageSize > 0 && totalItems > pageSize) ||\r\n (lastItem !== undefined &&\r\n firstItem !== undefined &&\r\n this.virtualScrolling &&\r\n totalItems > 0 &&\r\n totalItems > lastItem - firstItem + 1);\r\n\r\n if (totalItems === 1) {\r\n footer = this.dgStrings.singleItem;\r\n } else if (showRange) {\r\n footer = this.interpolateMessage(this.dgStrings.pagedItems, [totalItems, firstItem, lastItem]);\r\n } else {\r\n footer = this.interpolateMessage(this.dgStrings.multipleItems, [totalItems]);\r\n }\r\n return footer;\r\n }\r\n\r\n toggleAll(): void {\r\n if (this.hermesDatagrid) {\r\n this.hermesDatagrid.allSelected = !this.hermesDatagrid.allSelected;\r\n }\r\n }\r\n\r\n protected getExpandDetailsLabel(item: T): string {\r\n if (!this.hasExpandableRows(item)) {\r\n return '';\r\n }\r\n const itemName: string = (item as any)[this.visibleColumns?.[0]?.field || ''] || '';\r\n return this.interpolateMessage(this.dgStrings.expandDetailsPaneLabel, [itemName]);\r\n }\r\n\r\n protected getCollapseDetailsLabel(item: T): string {\r\n if (!this.hasExpandableRows(item)) {\r\n return '';\r\n }\r\n const itemName: string = (item as any)[this.visibleColumns?.[0]?.field || ''] || '';\r\n return this.interpolateMessage(this.dgStrings.collapseDetailsPaneLabel, [itemName]);\r\n }\r\n\r\n protected onColumnResize(columnSize: number, column: ColumnDefinition<T>): void {\r\n this.columnResize.emit({ columnSize: columnSize, column: column });\r\n }\r\n\r\n // Disabled along with hermesDgPinnable, which was the only thing that called this.\r\n // protected onPinnedChange(pinned: boolean, column: ColumnDefinition<T>): void {\r\n // // The column definition is the source of truth for the binding, so it has to be updated or the\r\n // // next change detection would push the previous value back onto the column.\r\n // column.pinned = pinned;\r\n // this.columnPinnedChange.emit({ pinned: pinned, column: column });\r\n // }\r\n\r\n protected onSortOrderChange(sortOrder: HermesDatagridSortOrder, column: ColumnDefinition<T>): void {\r\n const columnSortOrder = {\r\n sortOrder: sortOrder,\r\n column: column,\r\n };\r\n if (this.gridFooterModel?.clientSideExportConfig?.sort) {\r\n this.gridFooterModel.clientSideExportConfig.sortOrder = columnSortOrder;\r\n }\r\n this.columnSortOrderChange.emit(columnSortOrder);\r\n this.columns.forEach(col => (col.defaultSortOrder = this.defaultUnsortedOrder));\r\n column.defaultSortOrder = sortOrder;\r\n }\r\n\r\n protected onDeselectAllClick(): void {\r\n this.#selectedItems = [];\r\n this.selectedItemsChange.emit(this.#selectedItems);\r\n }\r\n\r\n protected onSelectAllInVirtualGrid(isSelect: boolean) {\r\n if (isSelect) {\r\n // Select all\r\n // Append all currently loaded records to the existing selection\r\n const newSelection = [...this.#selectedItems];\r\n this.dataRange.data.forEach(item => {\r\n if (!this.#selectedItems.some(selected => this.trackByGridItemFn(selected) === this.trackByGridItemFn(item))) {\r\n newSelection.push(item);\r\n }\r\n });\r\n this.#selectedItems = newSelection;\r\n\r\n this.selectedItemsChange.emit(newSelection);\r\n } else {\r\n // Deselect all\r\n this.onDeselectAllClick();\r\n }\r\n }\r\n\r\n protected onDragStart(row: T): void {\r\n this.setDraggedItems(row);\r\n }\r\n\r\n protected onDragMove(): void {\r\n // note mibryamov: since the default strategy for change detection is\r\n // OnPush, if we don't mark the view changed on every drag move, when\r\n // you stop the dragging without triggering OnDrop on the target area,\r\n // the dragging ghost element is not positioned as expected when\r\n // disappearing, it goes to the top-left corner of the page instead of\r\n // going to the drop handle icon from where the drag is triggered. To\r\n // prevent this we should mark the view changed on every move.\r\n this.cdr.markForCheck();\r\n }\r\n\r\n protected onFilterChange(filterValue: unknown, column: ColumnDefinition<T>): void {\r\n this.columnFilterChange.emit({\r\n filterValue: filterValue,\r\n column: column,\r\n });\r\n }\r\n\r\n protected onColumnHiddenStateChange(value: ColumnHiddenState): void {\r\n this.columnHiddenStateChange.emit(value);\r\n if (this.gridItems && this.gridItems.length === 0 && value.hidden === false) {\r\n // Force change detection otherwise column is not shown when grid is empty\r\n this.cdr.detectChanges();\r\n this.resize();\r\n }\r\n }\r\n\r\n protected refreshGrid(state: HermesDatagridStateInterface): void {\r\n if (this.virtualScrolling) {\r\n return;\r\n }\r\n\r\n // There is a 'cosmetic' change in Clarity 2 in the page provider.\r\n // The change is related to using firstItem & lastItem in generating page info, when there are no items.\r\n // However, this breaks our data retrieval. For this reason, we are keeping the page state as it was before.\r\n if (state.page && state.page.from === -1) {\r\n state.page.from = 0;\r\n }\r\n if (state.page && state.page.to === -1) {\r\n state.page.to = 0;\r\n }\r\n this.refreshGridData.emit(state);\r\n if (this.detailState) {\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n protected onExportEvent(exportStatus: ExportStatus): void {\r\n if (this.footerModel.enableCustomExport || this.footerModel.clientSideExportConfig?.customExport) {\r\n // If custom export is enabled, emit the export event and return.\r\n this.exportDataEvent.emit(exportStatus);\r\n return;\r\n }\r\n if (this.footerModel.clientSideExportConfig) {\r\n // If client-side export configuration is available, process with the export.\r\n const datagridItemSet: DatagridItemSet = {\r\n totalDatagridItems: this.gridItems,\r\n selectedItems: this.selectedItems,\r\n filteredDatagridItems: [],\r\n };\r\n this.exportProviderService.exportUIOnlyData(\r\n this.footerModel.clientSideExportConfig,\r\n exportStatus,\r\n datagridItemSet\r\n );\r\n }\r\n }\r\n\r\n protected onActionClick(action: ActionDefinition, context?: T | T[]): void {\r\n // We have context when is clicked row action\r\n // when the action bar action is clicked the context is the selected items\r\n if (!context) {\r\n context = this.#selectedItems;\r\n }\r\n this.actionClick.emit({ action: action, context: context });\r\n }\r\n\r\n protected onRowActionOverflowOpen(open: boolean, actions: ActionDefinition[] | null, item: T): void {\r\n this.rowActionMenuOpenChange.emit({\r\n open: open,\r\n actions: actions,\r\n context: item,\r\n });\r\n }\r\n\r\n protected onAdvancedSearchTermChange(searchTerm: string): void {\r\n // We need the search term, because of filteredItemsCount\r\n this.searchTerm = searchTerm;\r\n this.searchTermChange.emit(searchTerm);\r\n }\r\n\r\n /**\r\n * Update \"detailState\" with the latest value\r\n * @param state\r\n */\r\n protected onDetailStateChange(state: T): void {\r\n if (state !== this.detailState) {\r\n this.detailState = state;\r\n this.detailStateChange.emit(state);\r\n }\r\n }\r\n\r\n /**\r\n * Angular ngFor optimization:\r\n * By allowing client to specify a given function or property key lookup expression\r\n * the looping and binding over large datasets can now offer performance.\r\n * The default Angular differ offered is slower since it does a complete object comparison.\r\n */\r\n protected trackByFn(index: number, gridItem: T): T {\r\n if (this.trackByGridItemProperty) {\r\n const result = getNestedProperty<T>(gridItem, this.trackByGridItemProperty);\r\n if (result.isValid) {\r\n return result.value as T;\r\n }\r\n }\r\n\r\n if (this.trackByFunction) {\r\n return this.trackByFunction(index, gridItem);\r\n }\r\n\r\n return gridItem;\r\n }\r\n\r\n protected isItemSelected(item: T): boolean {\r\n for (const selectedItem of this.#selectedItems) {\r\n if (selectedItem === item) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n protected dropGroup(group: string): CdkDropList[] {\r\n return (this.groupService?.getGroupItems(group) || []) as CdkDropList[];\r\n }\r\n\r\n private hasExpandableRows(item: T): boolean {\r\n return !!this.detailHeader || !!this.detailBody || !!(item as any)?.rowDetailRenderer || !!this.rowDetailContent;\r\n }\r\n\r\n private preselectDetail(): void {\r\n const isDetailEnabled: boolean = !!this.detailHeader || !!this.detailBody;\r\n if (isDetailEnabled && this.detailState && (this.trackByGridItemProperty || this.trackByFunction)) {\r\n const gridItems: T[] = this.gridItems || [];\r\n\r\n const matchingItems: T[] = gridItems.filter((item: T): boolean => {\r\n return this.trackByGridItemFn(item) === this.trackByGridItemFn(this.detailState as T);\r\n });\r\n if (matchingItems.length === 0) {\r\n // Hide detail pane when item is no longer present in the dataset\r\n this.detailState = null;\r\n } else {\r\n this.detailState = matchingItems[0];\r\n // In order for the datagrid detail caret button to be activated and\r\n // detail pane anchor to point to the grid item two change\r\n // detection cycles are required. Otherwise the detail pane is shown\r\n // but anchor and activated datagrid detail caret button are not.\r\n this.cdr.detectChanges();\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n private setDraggedItems(row: T): void {\r\n this.draggedItems = [];\r\n if (this.isItemSelected(row)) {\r\n this.draggedItems.push(...this.#selectedItems);\r\n } else {\r\n this.draggedItems.push(row);\r\n }\r\n }\r\n\r\n /**\r\n * Notifies clarity datagrid about data changes.\r\n * When <code>trackByFunction</code> or <code>trackByGridItemProperty</code>\r\n * is provided clarity datagrid is not able to pick up data changes in the\r\n * <code>rows</<code> collection and selection is messed up. Angular just\r\n * does not emit <code>QueryList<T>.changes</code> in this case.\r\n */\r\n private notifyOnChanges() {\r\n // Disable check for this.trackByFunction since the compiler thinks it's always assigned but that's not the case.\r\n // In the PreselectComponent interface, trackByFunction is required but in the datagrid it's optional.\r\n\r\n // @ts-ignore\r\n if (this.trackByGridItemProperty || this.trackByFunction) {\r\n setTimeout(() => {\r\n this.hermesDatagrid?.rows?.notifyOnChanges();\r\n }, 0);\r\n }\r\n }\r\n\r\n private initActionTypes(): void {\r\n if (this.singleRowActions) {\r\n this.enableSingleRowActions = true;\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n private initGridSelection(): void {\r\n if (this.hermesDatagrid) {\r\n this.hermesDatagrid.identityFn = this.trackByGridItemFn;\r\n }\r\n\r\n if (this.preSelectFirstItem && this.gridItems && this.gridItems.length > 0) {\r\n // TODO: Find better solution, This will not work if we\r\n // have some default sorting\r\n this.#selectedItems = [this.gridItems[0]];\r\n }\r\n }\r\n\r\n private updateSelectedItems(item: T) {\r\n if (this.#selectionType === SelectionType.Single) {\r\n this.#selectedItems = [item];\r\n } else {\r\n this.#selectedItems.push(item);\r\n }\r\n\r\n this.selectedItemsChange.emit(this.#selectedItems);\r\n }\r\n\r\n private initTotalItemsCount() {\r\n if (!this.footerModel.showFooter || this.serverDrivenDatagrid) {\r\n return;\r\n }\r\n\r\n if (this.gridItems && this.gridItems.length > 0) {\r\n this.totalItems = this.gridItems.length;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n // This clarity items (hermesDatagrid.items) are all items if there are no pages\r\n // and only the items in the page if there are pages in the grid.\r\n // We can listen for changes and update the totalItems only if the grid doesn't use\r\n // pages. This is usable for example when the user filer data in the grid which doesn't\r\n // have pages, in this case we can show correctly the number of items displayed after filtering\r\n this.hermesDatagrid.items.change\r\n .pipe(\r\n filter(() => this.pageSize <= 0),\r\n takeUntil(this.#unsubscribeSubject)\r\n )\r\n .subscribe((value: T[]) => {\r\n this.totalItems = value.length;\r\n });\r\n }\r\n\r\n private interpolateMessage(message: string, parameters: unknown[]): string {\r\n return message.replace(this.#interpolationExpression, (match: string, index: number) => {\r\n if (index >= parameters.length) {\r\n // There are fewer parameters than there are placeholders,\r\n // return the placeholder value.\r\n return match;\r\n }\r\n return String(parameters[index]);\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<hermes-datagrid\r\n zoomLevelIndicator\r\n [hermesDgDisablePageFocus]=\"true\"\r\n [hermesDgPreserveSelection]=\"preserveExistingSelectionOnFilter\"\r\n [hermesDgSelectionType]=\"selectionType\"\r\n [hermesDgSelected]=\"selectedItems\"\r\n [hermesDgItemsIdentityFn]=\"trackByGridItemFn\"\r\n (hermesDgRefresh)=\"refreshGrid($event)\"\r\n [hermesDgLoading]=\"loading\"\r\n [hermesLoadingMoreItems]=\"loadingMoreItems\"\r\n [hermesDgRowSelection]=\"rowSelectionMode\"\r\n [ngClass]=\"{\r\n 'disabled-grid': gridLayoutModel.disabled,\r\n 'datagrid-compact': gridLayoutModel.compact,\r\n 'flex-hermes-datagrid': gridLayoutModel.stretchToParentHeight,\r\n 'datagrid-overflow-ellipsis': virtualScrolling || !wrapText,\r\n }\"\r\n cdkDropList\r\n [cdkDropListAutoScrollStep]=\"5\"\r\n appfxDgColumnsOrder\r\n [hermesDgCustomSelectAllEnabled]=\"virtualScrolling\"\r\n (hermesDgCustomSelectAll)=\"onSelectAllInVirtualGrid($event)\"\r\n [dgColumnsOrderColumns]=\"columns\"\r\n [dgColumnsVirtualScrolling]=\"virtualScrolling\"\r\n (dgColumnsOrderChange)=\"onColumnOrderChange($event)\"\r\n (hermesDgSelectedChange)=\"onSelectedItemsChange($event)\"\r\n>\r\n <hermes-dg-action-bar *ngIf=\"enableToolBar\">\r\n @if (!!actionBarActions.length) {\r\n <div class=\"appfx-datagrid-actions-container\">\r\n <appfx-datagrid-action-bar\r\n class=\"action-bar\"\r\n (invokeAction)=\"onActionClick($event)\"\r\n [actions]=\"actionBarActions\"\r\n >\r\n </appfx-datagrid-action-bar>\r\n </div>\r\n }\r\n @if (filterMode !== undefined && filterMode !== null) {\r\n <appfx-datagrid-filters\r\n [filterMode]=\"filterMode\"\r\n [filterableProperties]=\"filterableProperties\"\r\n (searchTermChange)=\"onAdvancedSearchTermChange($event)\"\r\n (propertyFiltersChange)=\"onAdvancedFilterCriteriaChange($event)\"\r\n >\r\n </appfx-datagrid-filters>\r\n }\r\n </hermes-dg-action-bar>\r\n @if (dragConfig) {\r\n <hermes-dg-column class=\"draggableCell\" style=\"width: 20px\"></hermes-dg-column>\r\n }\r\n @for (column of visibleColumns; track trackByColumnId(index, column); let index = $index) {\r\n <!--\r\n hermesDgPinnable is disabled for now, so these two bindings are commented out. Restoring them\r\n means putting them back on the hermes-dg-column below, next to [hermesDgPinned]:\r\n [hermesDgPinnable]=\"!!column.pinnable\"\r\n (hermesDgPinnedChange)=\"onPinnedChange($event, column)\"\r\n -->\r\n <hermes-dg-column\r\n cdkDrag\r\n [cdkDragLockAxis]=\"'x'\"\r\n [cdkDragData]=\"column\"\r\n [cdkDragDisabled]=\"!!column.pinned\"\r\n appfxColumnOrder\r\n [columnData]=\"column\"\r\n [columnIndex]=\"index\"\r\n [style]=\"column.width ? { width: column.width } : null\"\r\n (hermesDgColumnResize)=\"onColumnResize($event, column)\"\r\n [hermesDgField]=\"column.sortAndFilterByField || defaultUnsetValue\"\r\n [hermesDgSortBy]=\"column.sortComparator || defaultUnsetValue\"\r\n [hermesDgSortOrder]=\"column.defaultSortOrder || defaultUnsortedOrder\"\r\n (hermesDgSortOrderChange)=\"onSortOrderChange($event, column)\"\r\n [hermesDgDisableUnsort]=\"column.disableUnsort ?? disableUnsort\"\r\n [hermesDgPinned]=\"!!column.pinned\"\r\n >\r\n <hermes-dg-filter\r\n *ngIf=\"column.stringFilter || column.sortAndFilterByField\"\r\n [hermesDgFilter]=\"appfxDatagridStringFilter\"\r\n >\r\n <appfx-datagrid-filter\r\n #appfxDatagridStringFilter\r\n [stringFilterType]=\"column.stringFilter\"\r\n [filterValue]=\"column.defaultFilterValue\"\r\n [fieldName]=\"column.sortAndFilterByField\"\r\n (filterValueChange)=\"onFilterChange($event, column)\"\r\n ></appfx-datagrid-filter>\r\n </hermes-dg-filter>\r\n <hermes-dg-filter *ngIf=\"column.filter\">\r\n <appfx-dg-filter-container\r\n [filterType]=\"column.filter\"\r\n [filterValue]=\"column.defaultFilterValue\"\r\n (filterValueChange)=\"onFilterChange($event, column)\"\r\n ></appfx-dg-filter-container>\r\n </hermes-dg-filter>\r\n {{ column.displayName }}\r\n </hermes-dg-column>\r\n }\r\n <hermes-dg-placeholder>\r\n {{ dgStrings.noItemsFound }}\r\n <ng-content select=\".custom-placeholder-content\"></ng-content>\r\n </hermes-dg-placeholder>\r\n\r\n <!-- Server driven datagrid with virtual scrolling -->\r\n @if (serverDrivenDatagrid && virtualScrolling) {\r\n <ng-template\r\n HermesVirtualScroll\r\n let-item\r\n let-i=\"index\"\r\n [hermesVirtualDataRange]=\"dataRange\"\r\n [hermesVirtualRowsItemSize]=\"25\"\r\n [hermesVirtualRowsMinBufferPx]=\"400\"\r\n [hermesVirtualRowsMaxBufferPx]=\"800\"\r\n [hermesVirtualRowsTemplateCacheSize]=\"400\"\r\n [hermesVirtualPersistItems]=\"false\"\r\n [hermesVirtualRowsTrackBy]=\"trackByFunction\"\r\n (renderedRangeChange)=\"renderedRangeChange($event)\"\r\n >\r\n <hermes-dg-row\r\n [hermesDgItem]=\"item\"\r\n [hermesDgSelectable]=\"item | isRowSelectable: isRowLocked : rowsDisabled\"\r\n [hermesDgRowSelectionLabel]=\"$any(item)?.[visibleColumns && visibleColumns.length ? visibleColumns[0].field : -1]\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n [hermesDgSkeletonLoading]=\"!item\"\r\n >\r\n @if (dragConfig) {\r\n <hermes-dg-cell class=\"draggableCell\" style=\"width: 20px\">\r\n <ng-container *ngTemplateOutlet=\"draggableCell; context: { $implicit: item }\"> </ng-container>\r\n </hermes-dg-cell>\r\n }\r\n @for (column of visibleColumns; track column) {\r\n <hermes-dg-cell class=\"fixed-cell-height\">\r\n <appfx-dg-cell-container [column]=\"column\" [item]=\"item\"></appfx-dg-cell-container>\r\n </hermes-dg-cell>\r\n }\r\n </hermes-dg-row>\r\n </ng-template>\r\n }\r\n\r\n <!-- Server driven datagrid with paging -->\r\n @if (serverDrivenDatagrid && !virtualScrolling) {\r\n @for (item of gridItems; track trackByFn.bind(this)(i, item); let i = $index) {\r\n <hermes-dg-row\r\n [hermesDgItem]=\"item\"\r\n [hermesDgDetailOpenLabel]=\"getExpandDetailsLabel(item)\"\r\n [hermesDgDetailCloseLabel]=\"getCollapseDetailsLabel(item)\"\r\n [hermesDgSelectable]=\"item | isRowSelectable: isRowLocked : rowsDisabled\"\r\n [hermesDgRowSelectionLabel]=\"$any(item)?.[visibleColumns && visibleColumns.length ? visibleColumns[0].field : -1]\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n <hermes-dg-action-overflow\r\n *ngIf=\"enableSingleRowActions\"\r\n (hermesDgActionOverflowOpenChange)=\"onRowActionOverflowOpen($event, singleRowActions, item)\"\r\n >\r\n @for (action of singleRowActions; track action) {\r\n <button\r\n class=\"action-item\"\r\n (click)=\"onActionClick(action, item)\"\r\n [title]=\"action.tooltip\"\r\n [disabled]=\"!action.enabled\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </hermes-dg-action-overflow>\r\n\r\n @if (dragConfig) {\r\n <hermes-dg-cell class=\"draggableCell\" style=\"width: 20px\">\r\n <ng-container *ngTemplateOutlet=\"draggableCell; context: { $implicit: item }\"> </ng-container>\r\n </hermes-dg-cell>\r\n }\r\n @for (column of visibleColumns; track column) {\r\n <hermes-dg-cell>\r\n <appfx-dg-cell-container [column]=\"column\" [item]=\"item\"></appfx-dg-cell-container>\r\n </hermes-dg-cell>\r\n }\r\n\r\n <ng-container *ngIf=\"rowDetailContent\" ngProjectAs=\"hermes-dg-row-detail\">\r\n @if ({ id: buildRowDetailContentId(i) }; as detailData) {\r\n <hermes-dg-row-detail\r\n *hermesIfExpanded=\"rowsExpandedByDefault\"\r\n tabindex=\"0\"\r\n [attr.aria-describedby]=\"detailData.id\"\r\n >\r\n <div [id]=\"detailData.id\" class=\"datagrid-row-flex\">\r\n <ng-container *ngTemplateOutlet=\"rowDetailContent; context: { item: item }\"> </ng-container>\r\n </div>\r\n </hermes-dg-row-detail>\r\n }\r\n </ng-container>\r\n </hermes-dg-row>\r\n }\r\n }\r\n\r\n <!-- Client side datagrid with paging -->\r\n @if (!serverDrivenDatagrid) {\r\n <hermes-dg-row\r\n *hermesDgItems=\"let item of gridItems; trackBy: trackByFn.bind(this); index as i\"\r\n [hermesDgItem]=\"item\"\r\n [hermesDgDetailOpenLabel]=\"getExpandDetailsLabel(item)\"\r\n [hermesDgDetailCloseLabel]=\"getCollapseDetailsLabel(item)\"\r\n [hermesDgSelectable]=\"item | isRowSelectable: isRowLocked : rowsDisabled\"\r\n [hermesDgRowSelectionLabel]=\"$any(item)?.[visibleColumns && visibleColumns.length ? visibleColumns[0].field : -1]\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n <hermes-dg-action-overflow\r\n *ngIf=\"enableSingleRowActions\"\r\n (hermesDgActionOverflowOpenChange)=\"onRowActionOverflowOpen($event, singleRowActions, item)\"\r\n >\r\n @for (action of singleRowActions; track action) {\r\n <button\r\n class=\"action-item\"\r\n (click)=\"onActionClick(action, item)\"\r\n [title]=\"action.tooltip\"\r\n [disabled]=\"!action.enabled\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </hermes-dg-action-overflow>\r\n\r\n @if (dragConfig) {\r\n <hermes-dg-cell class=\"draggableCell\">\r\n <ng-container *ngTemplateOutlet=\"draggableCell; context: { $implicit: item }\"> </ng-container>\r\n </hermes-dg-cell>\r\n }\r\n @for (column of visibleColumns; track column) {\r\n <hermes-dg-cell>\r\n <appfx-dg-cell-container [column]=\"column\" [item]=\"item\"></appfx-dg-cell-container>\r\n </hermes-dg-cell>\r\n }\r\n\r\n <ng-container *ngIf=\"$any(item).rowDetailRenderer\" ngProjectAs=\"hermes-dg-row-detail\">\r\n @if ({ id: buildRowDetailContentId(i) }; as detailData) {\r\n <hermes-dg-row-detail *hermesIfExpanded tabindex=\"0\" [attr.aria-describedby]=\"detailData.id\">\r\n <appfx-dg-cell-container\r\n [id]=\"detailData.id\"\r\n [column]=\"{\r\n displayName: '',\r\n field: '',\r\n columnRenderer: $any(item).rowDetailRenderer,\r\n }\"\r\n [item]=\"item\"\r\n ></appfx-dg-cell-container>\r\n </hermes-dg-row-detail>\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"rowDetailContent\" ngProjectAs=\"hermes-dg-row-detail\">\r\n @if ({ id: buildRowDetailContentId(i) }; as detailData) {\r\n <hermes-dg-row-detail\r\n *hermesIfExpanded=\"rowsExpandedByDefault\"\r\n tabindex=\"0\"\r\n [attr.aria-describedby]=\"detailData.id\"\r\n >\r\n <div [id]=\"detailData.id\" class=\"datagrid-row-flex\">\r\n <ng-container *ngTemplateOutlet=\"rowDetailContent; context: { item: item }\"> </ng-container>\r\n </div>\r\n </hermes-dg-row-detail>\r\n }\r\n </ng-container>\r\n </hermes-dg-row>\r\n }\r\n\r\n <ng-container *ngIf=\"detailHeader || detailBody\" ngProjectAs=\"hermes-dg-detail\">\r\n <ng-template [hermesIfDetail]=\"detailState\" (hermesIfDetailChange)=\"onDetailStateChange($event)\" let-detail>\r\n <hermes-dg-detail>\r\n @if (detailHeader) {\r\n <hermes-dg-detail-header>\r\n <ng-container *ngTemplateOutlet=\"detailHeader; context: { $implicit: detail }\"></ng-container>\r\n </hermes-dg-detail-header>\r\n }\r\n @if (detailBody) {\r\n <hermes-dg-detail-body>\r\n <ng-container *ngTemplateOutlet=\"detailBody; context: { $implicit: detail }\"></ng-container>\r\n </hermes-dg-detail-body>\r\n }\r\n </hermes-dg-detail>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <hermes-dg-footer *ngIf=\"gridFooterModel.showFooter\">\r\n @if (!gridFooterModel.hideColumnToggle) {\r\n <appfx-dg-column-toggle [(columns)]=\"columns\" (columnHiddenStateChange)=\"onColumnHiddenStateChange($event)\">\r\n </appfx-dg-column-toggle>\r\n }\r\n\r\n @if (enableExportButton) {\r\n <appfx-dg-export\r\n [allItemsCount]=\"gridFooterModel.clientSideExportConfig?.allItemsCount || listItemsCount\"\r\n [selectedItemsCount]=\"selectedItemsCount\"\r\n [filteredItemsCount]=\"filteredItemsCount\"\r\n (exportEventEmitter)=\"onExportEvent($event)\"\r\n class=\"footer-actions\"\r\n >\r\n </appfx-dg-export>\r\n }\r\n\r\n @if (showDeselectAll) {\r\n <div class=\"column-switch-wrapper footer-actions\">\r\n <button class=\"btn btn-sm column-toggle-action\" [disabled]=\"deselectAllDisabled\" (click)=\"onDeselectAllClick()\">\r\n {{ dgStrings.deselectAll }}\r\n </button>\r\n </div>\r\n }\r\n <!-- Custom footer actions -->\r\n @if (gridFooterModel?.footerActions) {\r\n @for (action of gridFooterModel.footerActions; track action) {\r\n <div class=\"footer-actions column-switch-wrapper\">\r\n @if (action.children) {\r\n <hermes-dropdown>\r\n <button\r\n class=\"btn btn-sm column-toggle-action\"\r\n hermesDropdownTrigger\r\n [disabled]=\"!action.enabled\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n >\r\n {{ action.label }}\r\n <hermes-icon shape=\"angle\" direction=\"up\"></hermes-icon>\r\n </button>\r\n <hermes-dropdown-menu hermesPosition=\"top-left\" *hermesIfOpen>\r\n @for (childAction of action.children; track childAction) {\r\n <button\r\n type=\"button\"\r\n [disabled]=\"!childAction.enabled\"\r\n [attr.aria-label]=\"childAction.ariaLabel\"\r\n hermesDropdownItem\r\n (click)=\"onActionClick(childAction)\"\r\n >\r\n {{ childAction.label }}\r\n </button>\r\n }\r\n </hermes-dropdown-menu>\r\n </hermes-dropdown>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"column-toggle-action btn btn-sm\"\r\n [attr.aria-label]=\"action.ariaLabel\"\r\n [disabled]=\"!action.enabled\"\r\n (click)=\"onActionClick(action)\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n }\r\n <ng-content select=\".custom-footer-content\"></ng-content>\r\n\r\n <ng-container *ngIf=\"pageSize > 0; else missingPageConfig\" ngProjectAs=\"hermes-dg-pagination\">\r\n <hermes-dg-pagination #pagination [hermesDgPageSize]=\"pageSize\" [hermesDgTotalItems]=\"totalItems\">\r\n @if (pageSizeOptions?.length) {\r\n <hermes-dg-page-size #hermesDgPageSize [hermesPageSizeOptions]=\"pageSizeOptions\">\r\n <label [for]=\"hermesDgPageSize.pageSizeOptionsId\"> {{ dgStrings.itemsPerPage }} </label>\r\n </hermes-dg-page-size>\r\n }\r\n {{\r\n getFooterMessage(\r\n pagination.totalItems,\r\n pagination.pageSize,\r\n pagination.firstItem + 1,\r\n pagination.lastItem + 1\r\n )\r\n }}\r\n </hermes-dg-pagination>\r\n </ng-container>\r\n\r\n <ng-template #missingPageConfig>\r\n @if (!showCustomPagination) {\r\n <span class=\"pagination\">\r\n {{ getFooterMessage(totalItems, undefined, dataRange.skip + 1, dataRange.skip + dataRange.data.length) }}\r\n </span>\r\n }\r\n @if (showCustomPagination) {\r\n <div>\r\n <ng-container *ngTemplateOutlet=\"customPagination\"></ng-container>\r\n </div>\r\n }\r\n <ng-template #customPagination>\r\n <ng-content></ng-content>\r\n </ng-template>\r\n </ng-template>\r\n </hermes-dg-footer>\r\n</hermes-datagrid>\r\n\r\n<ng-template #draggableCell let-item>\r\n <div cdkDropList [cdkDropListAutoScrollStep]=\"0\" [cdkDropListConnectedTo]=\"dropGroup(dragConfig.dragGroup || '')\">\r\n <div\r\n cdkDrag\r\n cdkDragPreviewContainer=\"parent\"\r\n [cdkDragData]=\"draggedItems\"\r\n (cdkDragStarted)=\"onDragStart(item)\"\r\n (cdkDragMoved)=\"onDragMove()\"\r\n >\r\n <hermes-icon shape=\"drag-handle\" size=\"22\" cdkDragHandle> </hermes-icon>\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <div class=\"custom-preview\" *cdkDragPreview>\r\n @if (draggedItems.length === 1) {\r\n <div class=\"grid-ghost single-ghost\" [ngClass]=\"{ 'selection-ghost': isItemSelected(item) }\">\r\n <ng-container *ngTemplateOutlet=\"draggableGhostContent; context: { $implicit: item }\"> </ng-container>\r\n </div>\r\n } @else {\r\n <div class=\"grid-ghost multiple-ghost selection-ghost\">\r\n <ng-container *ngTemplateOutlet=\"draggableGhostContent; context: { $implicit: item }\"> </ng-container>\r\n </div>\r\n <span class=\"badge badge-purple ghost-badge\">\r\n {{ draggedItems.length }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #draggableGhostContent let-item>\r\n <hermes-icon class=\"drop-status drop-status-valid\" shape=\"plus\" size=\"18\"></hermes-icon>\r\n <hermes-icon class=\"drop-status drop-status-invalid\" shape=\"ban\" size=\"18\"></hermes-icon>\r\n <i class=\"{{ item.primaryIconId }}\"></i>\r\n <span>{{ item[dragConfig.fieldName] }}</span>\r\n</ng-template>\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, EventEmitter, Host, Input, OnDestroy, Output } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { DatagridComponent } from '../../datagrid.component';\r\n\r\n/**\r\n * Datagrid page directive which set the page which to be shown when the appfx datagrid is display.\r\n * Supports setting of arbitrary grid page as current page and emits the new page\r\n * number when the page is change.\r\n * Supports this functionality for server side and client side grids.\r\n */\r\n@Directive({\r\n selector: '[datagridPage]',\r\n standalone: false,\r\n})\r\nexport class DatagridPageDirective implements AfterViewInit, OnDestroy {\r\n @Output() datagridPageChange = new EventEmitter<number>(false);\r\n\r\n private component: DatagridComponent<unknown>;\r\n\r\n private initCompleted = false;\r\n private initialPage: number;\r\n private subscription: Subscription;\r\n\r\n constructor(@Host() datagrid: DatagridComponent<unknown>) {\r\n this.component = datagrid;\r\n }\r\n\r\n @Input()\r\n set datagridPage(value: number) {\r\n if (this.initCompleted) {\r\n this.component.hermesDatagridPagination.currentPage = value;\r\n } else {\r\n this.initialPage = value;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscription = this.component.hermesDatagridPagination.currentChanged.subscribe((page: number) =>\r\n this.datagridPageChange.emit(page)\r\n );\r\n if (this.initialPage > 1) {\r\n if (this.component.serverDrivenDatagrid) {\r\n this.component.hermesDatagridPagination.currentPage = this.initialPage;\r\n } else {\r\n // Client side grids work with clarity smart iterators, which initially create all rows, then\r\n // destroy them and again create them.\r\n // This I think make the clarity grid to throw ExpressionChangedAfterItHasBeenCheckedError\r\n // error when this small timout is not set.\r\n setTimeout(() => {\r\n this.component.hermesDatagridPagination.currentPage = this.initialPage;\r\n }, 0);\r\n }\r\n }\r\n this.initCompleted = true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\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 { InjectionToken } from '@angular/core';\r\n\r\nimport { PersistDatagridSettingsService } from './datagrid-persist-settings.interfaces';\r\n\r\n// injectable service contract for app-specific code that can store and read data from local browser storage\r\nexport const appfxDatagridPersistSettingsToken = new InjectionToken<PersistDatagridSettingsService>(\r\n 'service that store and read data from local browser storage'\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 { AfterViewInit, Directive, Host, Inject, Input, OnDestroy, Optional } from '@angular/core';\r\nimport { HermesDatagridStateInterface } from '@hermes-ui/angular/data/datagrid';\r\nimport { combineLatest, Subject, Subscription } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\n\r\nimport { appfxDatagridPersistSettingsToken } from './appfx-datagrid-persist-settings.token';\r\nimport {\r\n PersistDatagridSettingsService,\r\n PersistedDatagridColumnState,\r\n PersistedDatagridSortOrder,\r\n PersistedDatagridState,\r\n} from './datagrid-persist-settings.interfaces';\r\nimport { DatagridComponent } from '../../datagrid.component';\r\nimport { ColumnHiddenState, ColumnResize, ColumnSortOrder } from '../../interfaces/column-state';\r\nimport { ColumnDefinition } from '../../shared/column/column-definitions';\r\n\r\ndeclare function setTimeout(handler: (...args: any[]) => void, timeout: number): number;\r\n\r\n/**\r\n * Sets the grid up with page size, column visibility and width from user-defined storage that is provided\r\n * Reacts to user changes in the Clarity datagrid to notify the injected storage to persist the grid properties\r\n * So reloading the application in automatically restore these preferences as a convenience\r\n */\r\n@Directive({\r\n selector: 'appfx-datagrid[appfxPersistDatagridSettings]',\r\n standalone: false,\r\n})\r\nexport class DatagridPersistSettingsDirective implements OnDestroy, AfterViewInit {\r\n private subs = new Subscription();\r\n private datagridKeyChange$ = new Subject<string>();\r\n private saveColumnsStateTimerId: number;\r\n\r\n private datagridKey: string;\r\n\r\n private storePageSize = true;\r\n\r\n private storeSortOrder = true;\r\n\r\n constructor(\r\n @Host() private grid: DatagridComponent<unknown>,\r\n @Optional()\r\n @Inject(appfxDatagridPersistSettingsToken)\r\n private persistDatagridSettingsService: PersistDatagridSettingsService\r\n ) {\r\n this.initialiseDatagridWithPersistedSettings();\r\n }\r\n\r\n /**\r\n * Directive takes unique identifier input to describe the grid\r\n */\r\n @Input()\r\n set appfxPersistDatagridSettings(key: string) {\r\n this.datagridKey = key;\r\n this.datagridKeyChange$.next(key);\r\n }\r\n\r\n /**\r\n * Flag indicates whether to be persisted the grid page size.\r\n */\r\n @Input()\r\n set persistPageSize(value: boolean) {\r\n this.storePageSize = value;\r\n }\r\n\r\n /**\r\n * Flag indicates whether to be persisted the grid page size.\r\n */\r\n @Input()\r\n set persistSortOrder(value: boolean) {\r\n this.storeSortOrder = value;\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (!this.datagridKey) {\r\n return;\r\n }\r\n\r\n // Listen for column resize\r\n this.subs.add(\r\n this.grid.columnResize.subscribe((data: ColumnResize) => {\r\n data.column.width = data.columnSize + 'px';\r\n this.saveColumnStates();\r\n })\r\n );\r\n\r\n // Listen for column order changes\r\n this.subs.add(\r\n this.grid.columnOrderChange.subscribe(() => {\r\n this.saveColumnStates();\r\n })\r\n );\r\n\r\n // Listen for column hidden state changes\r\n this.subs.add(\r\n this.grid.columnHiddenStateChange.subscribe((data: ColumnHiddenState) => {\r\n data.column.hidden = data.hidden;\r\n this.saveColumnStates();\r\n })\r\n );\r\n\r\n if (this.storeSortOrder) {\r\n // Listen for column sort order changes\r\n this.subs.add(\r\n this.grid.columnSortOrderChange.subscribe((data: ColumnSortOrder) => {\r\n this.saveColumnSortOrder(data);\r\n })\r\n );\r\n }\r\n\r\n if (this.storePageSize) {\r\n // Listen for datagrid refresh event which contains page size info\r\n this.subs.add(\r\n this.grid.refreshGridData.subscribe((hermesDatagridState: HermesDatagridStateInterface) => {\r\n const hermesPageSize = hermesDatagridState?.page?.size || 0;\r\n if (hermesPageSize > 0 && hermesPageSize !== this.grid.pageSize) {\r\n this.grid.pageSize = hermesPageSize;\r\n this.savePageSize(hermesPageSize);\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subs.unsubscribe();\r\n }\r\n\r\n private saveColumnStates() {\r\n if (this.saveColumnsStateTimerId) {\r\n clearTimeout(this.saveColumnsStateTimerId);\r\n }\r\n\r\n this.saveColumnsStateTimerId = setTimeout(() => {\r\n this.saveColumnsData();\r\n }, 100);\r\n }\r\n\r\n private saveColumnsData(): void {\r\n const persistedData = this.getPersistedData();\r\n\r\n persistedData.columns = this.grid.columns.map((column: ColumnDefinition<any>) =>\r\n this.createPersistedColumnState(column)\r\n );\r\n\r\n //Update sort column if it is persisted as it may become hidden\r\n if (persistedData.sorting) {\r\n const columnDef = persistedData.columns.find(column => {\r\n return column.uid === persistedData.sorting?.column.uid;\r\n });\r\n if (columnDef) {\r\n persistedData.sorting.column = columnDef;\r\n }\r\n }\r\n\r\n this.setPersistedData(persistedData);\r\n }\r\n\r\n private saveColumnSortOrder(columnSortOrder: ColumnSortOrder): void {\r\n const persistedData = this.getPersistedData();\r\n const column = this.createPersistedColumnState(columnSortOrder.column);\r\n persistedData.sorting = {\r\n sortOrder: columnSortOrder?.sortOrder,\r\n column: column,\r\n };\r\n this.setPersistedData(persistedData);\r\n }\r\n\r\n private savePageSize(pageSize: number) {\r\n const data = this.getPersistedData();\r\n data.pageSize = pageSize;\r\n this.setPersistedData(data);\r\n }\r\n\r\n private createPersistedColumnState(column: ColumnDefinition<any>): PersistedDatagridColumnState {\r\n const width = column.width ? parseInt(column.width, 10) : undefined;\r\n return {\r\n headerText: column.displayName,\r\n visible: column.hidden !== true,\r\n width: width,\r\n uid: this.getColumnUid(column),\r\n };\r\n }\r\n\r\n /**\r\n * Preserve data in the persistence storage.\r\n * @param data the data that is going to be persisted.\r\n */\r\n private setPersistedData(data: PersistedDatagridState): void {\r\n if (!this.datagridKey) {\r\n return;\r\n }\r\n if (!this.persistDatagridSettingsService) {\r\n console.error('Persist datagrid service is not provided.');\r\n return;\r\n }\r\n //save into the userdata, using a key based on the listViewId\r\n this.persistDatagridSettingsService.setUserData(this.getListViewColumnDefKey(this.datagridKey), data);\r\n }\r\n\r\n /**\r\n * Retrieves the data from the persistence storage.\r\n * @returns a promise which when resolved will contain the ListView columns data.\r\n */\r\n private getPersistedData(): PersistedDatagridState {\r\n if (!this.datagridKey || !this.persistDatagridSettingsService) {\r\n return {};\r\n }\r\n return this.persistDatagridSettingsService.getUserDataSync(this.getListViewColumnDefKey(this.datagridKey)) || {};\r\n }\r\n\r\n private getListViewColumnDefKey(datagridId: string): string {\r\n return datagridId + '_AppfxDatagridSettingsDef';\r\n }\r\n\r\n private initialiseDatagridWithPersistedSettings() {\r\n //Update datagrid column definitions with the persisted data immediately after\r\n //the datagrid key is set and the column definitions of the datagrid are set\r\n this.subs.add(\r\n combineLatest([this.datagridKeyChange$.asObservable(), this.grid.columnDefsChange.pipe(first())]).subscribe(\r\n () => {\r\n this.updateDatagridColumnDefinitions();\r\n }\r\n )\r\n );\r\n\r\n //Update datagrid page size with the persisted page size immediately after\r\n //the datagrid key is set and the page size of the datagrid is set\r\n this.subs.add(\r\n combineLatest([this.datagridKeyChange$.asObservable(), this.grid.pageSizeChange.pipe(first())]).subscribe(() => {\r\n this.updateDatagridPageSize();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Set initial page size read from the local storage on the datagrid.\r\n */\r\n private updateDatagridPageSize() {\r\n const data = this.getPersistedData();\r\n const persistedPageSize = data?.pageSize || 0;\r\n if (persistedPageSize > 0 && this.grid.pageSize !== persistedPageSize) {\r\n this.grid.pageSize = persistedPageSize;\r\n }\r\n }\r\n\r\n /**\r\n * Set width of datagrid columns, its visible and sort states.\r\n */\r\n private updateDatagridColumnDefinitions() {\r\n const data = this.getPersistedData();\r\n if (!data.columns && !data.sorting) {\r\n return;\r\n }\r\n\r\n const columnsMap = new Map<string, ColumnDefinition<any>>();\r\n this.grid.columns.forEach((column: ColumnDefinition<any>) => {\r\n const uid = this.getColumnUid(column);\r\n this.applySorting(uid, column, data.sorting);\r\n // Store a copy of the column definitions, as this will allow all the\r\n // changes to be discarded at once if this is needed.\r\n columnsMap.set(uid, { ...column });\r\n });\r\n\r\n //Apply persisted data only if the column size of persisted data is equal\r\n // to datagrid column size\r\n if (data.columns && columnsMap.size === data.columns.length) {\r\n this.applyPersistedColumnSettings(data.columns, columnsMap);\r\n }\r\n }\r\n\r\n private applyPersistedColumnSettings(\r\n columns: PersistedDatagridColumnState[],\r\n columnsDefinitionsMap: Map<string, ColumnDefinition<any>>\r\n ) {\r\n const columnsOrder = <ColumnDefinition<any>[]>[];\r\n columns.forEach((columnPersistedState: PersistedDatagridColumnState) => {\r\n const column = columnsDefinitionsMap.get(columnPersistedState.uid);\r\n if (column) {\r\n column.width = columnPersistedState.width ? columnPersistedState.width + 'px' : undefined;\r\n column.hidden = !columnPersistedState.visible;\r\n columnsOrder.push(column);\r\n columnsDefinitionsMap.delete(columnPersistedState.uid);\r\n }\r\n });\r\n //Update columns only if persisted columns are the same as\r\n //the set columns of the datagrid\r\n if (columnsOrder && columnsOrder.length === this.grid.columns.length && columnsDefinitionsMap.size === 0) {\r\n this.grid.columns = columnsOrder;\r\n // Update datagrid visible columns after applying persisted columns settings\r\n this.grid.visibleColumns = this.grid.columns.filter((column: ColumnDefinition<any>) => !column.hidden);\r\n }\r\n }\r\n\r\n /**\r\n * Set column default sort order read from the local storage on the datagrid\r\n */\r\n private applySorting(\r\n columnUid: string,\r\n column: ColumnDefinition<any>,\r\n sorting: PersistedDatagridSortOrder | undefined\r\n ) {\r\n if (!sorting?.column.visible) {\r\n return;\r\n }\r\n if (columnUid === sorting?.column?.uid) {\r\n column.defaultSortOrder = sorting.sortOrder;\r\n }\r\n\r\n // Clear default column by which the grid is sorted if there is\r\n // other visible column by which should be sorted the grid\r\n if (column.defaultSortOrder && columnUid !== sorting?.column?.uid) {\r\n column.defaultSortOrder = undefined;\r\n }\r\n }\r\n\r\n private getColumnUid(column: ColumnDefinition<any>) {\r\n return column.uid || column.field || column.displayName;\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 { InjectionToken } from '@angular/core';\r\n\r\nimport { DatagridUserPreferencesService } from './datagrid-user-preferences.interfaces';\r\n\r\n// Injectable service contract for app-specific code that can get user preferences\r\nexport const appfxDatagridUserPreferencesToken = new InjectionToken<DatagridUserPreferencesService>(\r\n 'Service that stores and reads user preferences related to the datagrid.'\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 { Directive, Host, Inject, OnDestroy, Optional } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { appfxDatagridUserPreferencesToken } from './appfx-datagrid-user-preferences.token';\r\nimport { DatagridUserPreferencesService } from './datagrid-user-preferences.interfaces';\r\nimport { DatagridComponent } from '../../datagrid.component';\r\n\r\n@Directive({\r\n selector: 'appfx-datagrid',\r\n standalone: false,\r\n})\r\nexport class DatagridContentNoWrapDirective implements OnDestroy {\r\n private subs = new Subscription();\r\n\r\n /**\r\n * Constructor, if DatagridUserPreferencesService is provided get wrap grid cell\r\n * user preference.\r\n *\r\n * @param grid\r\n * @param userPreferencesService - optional, because external projects which use appfx-datagrid may decide not\r\n * to use this directive and allow their customers to select whether to wrap\r\n * or not text in columns, in this case, they don't need to provide this service\r\n * and the grid will have default behavior that will not wrap the text in list columns.\r\n */\r\n constructor(\r\n @Host() private grid: DatagridComponent<unknown>,\r\n @Optional()\r\n @Inject(appfxDatagridUserPreferencesToken)\r\n private userPreferencesService: DatagridUserPreferencesService\r\n ) {\r\n if (userPreferencesService) {\r\n this.subs.add(\r\n userPreferencesService.getWrapGridCellTextPreference$().subscribe((data: boolean) => {\r\n grid.wrapText = data;\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subs.unsubscribe();\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 { HermesDatagridComparatorInterface } from '@hermes-ui/angular/data/datagrid';\r\n\r\n// Handle sorting on 'null | undefined | \"\"' value on the property\r\nexport class FieldComparator<T> implements HermesDatagridComparatorInterface<T> {\r\n field: string;\r\n\r\n constructor(compareField: string) {\r\n this.field = compareField;\r\n }\r\n\r\n compare(a: any, b: any): number {\r\n if (!a[this.field] && !b[this.field]) {\r\n return 0;\r\n } else if (!a[this.field] && b[this.field]) {\r\n return 1;\r\n } else if (a[this.field] && !b[this.field]) {\r\n return -1;\r\n } else {\r\n if (a[this.field] > b[this.field]) {\r\n return 1;\r\n } else if (a[this.field] < b[this.field]) {\r\n return -1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Handle sorting on field that is a list\r\nexport class ListComparator<T> implements HermesDatagridComparatorInterface<T> {\r\n field: string;\r\n\r\n constructor(compareField: string) {\r\n this.field = compareField;\r\n }\r\n\r\n compare(a: any, b: any): number {\r\n if (!a[this.field] && !b[this.field]) {\r\n return 0;\r\n } else if (!a[this.field] && b[this.field]) {\r\n return 1;\r\n } else if (a[this.field] && !b[this.field]) {\r\n return -1;\r\n } else {\r\n return a[this.field].length > b[this.field].length ? -1 : 1;\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 { HermesDatagridComparatorInterface } from '@hermes-ui/angular/data/datagrid';\r\n\r\nfunction compareNumericValues(itemA: any, itemB: any, fieldName: string): number {\r\n const firstValue = Number(itemA[fieldName]);\r\n const secondValue = Number(itemB[fieldName]);\r\n\r\n if (isNaN(firstValue) && isNaN(secondValue)) {\r\n return 0;\r\n }\r\n if (isNaN(firstValue)) {\r\n return -1;\r\n }\r\n if (isNaN(secondValue)) {\r\n return 1;\r\n }\r\n\r\n return firstValue - secondValue;\r\n}\r\n\r\nexport class SimpleNumericComparator<T> implements HermesDatagridComparatorInterface<T> {\r\n constructor(private readonly fieldName: string) {}\r\n\r\n compare(first: T, second: T): number {\r\n return compareNumericValues(first, second, this.fieldName);\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 { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HermesDatagridModule } from '@hermes-ui/angular/data/datagrid';\r\n\r\nimport { ColumnOrderDirective } from './column-order.directive';\r\nimport { DatagridColumnsOrderDirective } from './datagrid-columns-order.directive';\r\n\r\n@NgModule({\r\n declarations: [ColumnOrderDirective, DatagridColumnsOrderDirective],\r\n imports: [HermesDatagridModule, CommonModule, DragDropModule],\r\n exports: [ColumnOrderDirective, DatagridColumnsOrderDirective],\r\n})\r\nexport class DatagridColumnsOrderModule {}\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 { DragDropModule as CdkDragDropModule } from '@angular/cdk/drag-drop';\nimport { OverlayModule as CdkOverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AppfxA11yModule } from '@hermes-ui/angular/addons/a11y';\nimport { AppfxDatagridFiltersModule } from '@hermes-ui/angular/addons/datagrid-filters';\nimport { HermesDatagridModule } from '@hermes-ui/angular/data/datagrid';\nimport { HermesCheckboxModule, HermesInputModule } from '@hermes-ui/angular/forms';\nimport { angleIcon, banIcon, HermesIcons, HermesIcon, dragHandleIcon, plusIcon } from '@hermes-ui/angular/icon';\nimport { HermesDropdownModule } from '@hermes-ui/angular/popover/dropdown';\nimport { HermesLoadingModule } from '@hermes-ui/angular/utils/loading';\n\nimport { DatagridActionBarComponent } from './addons/action-bar/datagrid-action-bar.component';\nimport { DatagridColumnsOrderModule } from './addons/column-ordering/datagrid-columns-order.module';\nimport { DatagridColumnToggleComponent } from './addons/column-toggle/datagrid-column-toggle.component';\nimport { DatagridPageDirective } from './addons/datagrid-page/datagrid-page.directive';\nimport { CsvHelperService } from './addons/export/csv-helper.service';\nimport { ExportDatagridComponent } from './addons/export/export-datagrid.component';\nimport { ExportProviderService } from './addons/export/export-provider.service';\nimport { DatagridPersistSettingsDirective } from './addons/persist-settings/datagrid-persist-settings.directive';\nimport { DatagridContentNoWrapDirective } from './addons/user-preferences/datagrid-content-no-wrap.directive';\nimport { DatagridCellContainerComponent } from './datagrid-cell-container.component';\nimport { DatagridComponent } from './datagrid.component';\nimport { DatagridFilterContainerComponent } from './filters/datagrid-filter-container.component';\nimport { DatagridFilterComponent } from './filters/datagrid-filter.component';\nimport { DatagridStrings } from './i18n/datagrid-strings.service';\nimport { appfxDatagridErrorNotifiableToken, ErrorNotifiable } from './interfaces/tokens';\nimport { IsRowSelectablePipe } from './pipes/is-row-selectable.pipe';\nimport { DatagridPreserveSelectionDirective } from './preserve-selection/datagrid-preserve-selection.directive';\n\nexport function datagridStringsServiceFactory(existing: DatagridStrings): DatagridStrings {\n return existing || new DatagridStrings();\n}\n\nconst exportedComponents: Array<Type<any>> = [DatagridComponent, DatagridActionBarComponent, DatagridFilterComponent];\n\nconst exportedDirectives: Array<Type<any>> = [\n DatagridPageDirective,\n DatagridPersistSettingsDirective,\n DatagridPreserveSelectionDirective,\n DatagridContentNoWrapDirective,\n];\n\n@NgModule({\n declarations: [\n ...exportedComponents,\n ...exportedDirectives,\n DatagridCellContainerComponent,\n DatagridColumnToggleComponent,\n DatagridFilterContainerComponent,\n ExportDatagridComponent,\n IsRowSelectablePipe,\n ],\n imports: [\n AppfxA11yModule,\n AppfxDatagridFiltersModule,\n CdkA11yModule,\n CdkDragDropModule,\n CdkOverlayModule,\n HermesCheckboxModule,\n HermesDatagridModule,\n HermesDropdownModule,\n HermesIcon,\n HermesInputModule,\n HermesLoadingModule,\n CommonModule,\n DatagridColumnsOrderModule,\n FormsModule,\n ],\n exports: [...exportedComponents, ...exportedDirectives],\n providers: [\n CsvHelperService,\n ExportProviderService,\n {\n // This pattern allows the importer of this module to specify its own DatagridStrings.\n provide: DatagridStrings,\n useFactory: datagridStringsServiceFactory,\n deps: [[new Optional(), new SkipSelf(), DatagridStrings]],\n },\n ],\n})\nexport class AppfxDatagridModule {\n constructor() {\n HermesIcons.addIcons(angleIcon, banIcon, dragHandleIcon, plusIcon);\n }\n\n static forRoot(errorNotifiableService: Type<ErrorNotifiable>): ModuleWithProviders<AppfxDatagridModule> {\n return {\n ngModule: AppfxDatagridModule,\n providers: [{ provide: appfxDatagridErrorNotifiableToken, useClass: errorNotifiableService }],\n };\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\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Feature states populated on application level during app initialization.\r\n * This is needed, because datagrid module does not have direct access to feature-state-service.\r\n */\r\n@Injectable()\r\nexport class DatagridFeatureStates {}\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 { HermesDatagridStringFilterInterface } from '@hermes-ui/angular/data/datagrid';\r\n\r\nexport class CaseInsensitiveContainsStringFilter implements HermesDatagridStringFilterInterface<any> {\r\n constructor(private fieldName: string) {}\r\n\r\n accepts(item: any, search: string): boolean {\r\n const currentItem: string = '' + item[this.fieldName];\r\n return currentItem === search || currentItem.toLowerCase().indexOf(search) >= 0;\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 { DatagridActionBarComponent } from './addons/action-bar/datagrid-action-bar.component';\r\nexport { DatagridPageDirective } from './addons/datagrid-page/datagrid-page.directive';\r\nexport { CsvHelperService } from './addons/export/csv-helper.service';\r\nexport {\r\n ClientSideExportConfig,\r\n DatagridItemSet,\r\n ExportColumnDefinition,\r\n ExportStatus,\r\n ExportValueCallbackParams,\r\n} from './addons/export/export.interface';\r\nexport { ExportProviderService } from './addons/export/export-provider.service';\r\nexport { ExportType } from './addons/export/export-type';\r\nexport { appfxDatagridPersistSettingsToken } from './addons/persist-settings/appfx-datagrid-persist-settings.token';\r\nexport { DatagridPersistSettingsDirective } from './addons/persist-settings/datagrid-persist-settings.directive';\r\nexport { appfxDatagridUserPreferencesToken } from './addons/user-preferences/appfx-datagrid-user-preferences.token';\r\nexport { DatagridContentNoWrapDirective } from './addons/user-preferences/datagrid-content-no-wrap.directive';\r\nexport { DatagridUserPreferencesService } from './addons/user-preferences/datagrid-user-preferences.interfaces';\r\nexport { FieldComparator, ListComparator } from './comparators/field-list.comparator';\r\nexport { SimpleNumericComparator } from './comparators/simple-numeric-comparator';\r\nexport { DatagridComponent, GridFooterModel, GridLayoutModel } from './datagrid.component';\r\nexport { AppfxDatagridModule } from './datagrid.module';\r\nexport { DatagridFeatureStates } from './datagrid-feature-states.service';\r\nexport { DatagridFilterComponent } from './filters/datagrid-filter.component';\r\nexport { CaseInsensitiveContainsStringFilter } from './filters/string-filters';\r\nexport { DatagridStrings } from './i18n/datagrid-strings.service';\r\nexport { ColumnFilter } from './interfaces/column-filter';\r\nexport {\r\n ColumnFilterChange,\r\n ColumnHiddenState,\r\n ColumnOrderChanged,\r\n // ColumnPinnedState, // disabled with hermesDgPinnable\r\n ColumnResize,\r\n ColumnSortOrder,\r\n} from './interfaces/column-state';\r\nexport { ContextMenuEvent } from './interfaces/context-menu-event';\r\nexport { DatagridDragConfig } from './interfaces/datagrid-drag-config';\r\nexport { appfxDatagridErrorNotifiableToken, ErrorNotifiable } from './interfaces/tokens';\r\nexport {\r\n appfxPreselectableComponentToken,\r\n DatagridPreserveSelectionDirective,\r\n PreselectableComponent,\r\n} from './preserve-selection/datagrid-preserve-selection.directive';\r\nexport { ActionBarLayout, ActionDefinition } from './shared/action/action-definition';\r\nexport { ActionClickEvent, SingleRowActionOpen } from './shared/action/actions-event-types';\r\nexport { ColumnDefinition, ColumnRenderer } from './shared/column/column-definitions';\r\nexport { PersistDatagridSettingsService } from './addons/persist-settings/datagrid-persist-settings.interfaces';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i4","i5","i2.DatagridColumnsOrderService","i3","i1.DatagridStrings","i2","i6","i2.ExportProviderService","i7","i8","i11","i12","i14.ColumnOrderDirective","i15.DatagridColumnsOrderDirective","i16.DatagridActionBarComponent","i17.DatagridFilterComponent","i18.DatagridCellContainerComponent","i19.DatagridColumnToggleComponent","i20.DatagridFilterContainerComponent","i21.ExportDatagridComponent","i22.IsRowSelectablePipe","i1.DatagridComponent","CdkA11yModule","CdkDragDropModule","CdkOverlayModule"],"mappings":"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"}