Skip to content

Commit 21772b2

Browse files
committed
fix(grid): display title & description tooltip on focus
1 parent 72cce82 commit 21772b2

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

projects/angular/components/ui-grid/src/ui-grid.component.html

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@
139139

140140
<ng-container *ngIf="multiPageSelect then multiPageSelectionProjectedHeaderCell">
141141
</ng-container>
142-
143142
<div *ngFor="let column of visible$ | async; let last = last; let columnIndex = index"
144143
[class.ui-grid-header-cell-sortable]="column.sortable"
145144
[class.ui-grid-resizeable]="column.resizeable"
@@ -148,19 +147,24 @@
148147
[attr.data-property]="column.property"
149148
[attr.data-identifier]="column.identifier"
150149
[style.width.%]="column.width"
150+
(cdkFocusChange)="triggerColumnHeaderTooltip($event, columnTooltip)"
151+
(focusout)="hideColumnHeaderTooltip(columnTooltip)"
151152
(keyup.enter)="sortManager.changeSort(column)"
152153
(keyup.space)="sortManager.changeSort(column)"
153154
(keydown.ArrowLeft)="!last && resizeManager.startKeyboardResize('left', column, columnIndex)"
154155
(keydown.ArrowRight)="!last && resizeManager.startKeyboardResize('right', column, columnIndex)"
156+
cdkMonitorElementFocus
155157
class="ui-grid-header-cell"
156158
role="columnheader"
157159
tabindex="0">
158160
<div (click)="sortManager.changeSort(column)"
159161
class="ui-grid-header-title">
160-
<p [class.ui-grid-header-title-filtered]="isFilterApplied(column)"
161-
[matTooltip]="column.title ?? ''"
162+
<p #columnTooltip="matTooltip"
163+
[class.ui-grid-header-title-filtered]="isFilterApplied(column)"
164+
[matTooltip]="column.title + (focusedColumnHeader ? ('\n' + column.description) : '')"
162165
[matTooltipDisabled]="resizeManager.isResizing"
163-
[attr.aria-label]="column.title + (column.description ? ('. ' + column.description) : '') + (column.sortable && intl.sortableMessage ? '. ' + intl.sortableMessage : '')">
166+
[attr.aria-label]="column.title + (column.description ? ('. ' + column.description) : '') + (column.sortable && intl.sortableMessage ? '. ' + intl.sortableMessage : '')"
167+
matTooltipClass="preserve-whitespace">
164168
{{ column.title }}</p>
165169

166170
<mat-icon *ngIf="column.description"

projects/angular/components/ui-grid/src/ui-grid.component.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
@import "../../styles/ellipse";
22

3+
.preserve-whitespace {
4+
word-wrap: break-word;
5+
white-space: pre-line;
6+
text-align: left;
7+
}
8+
39
ui-grid {
410
$ui-grid-header-row-height: 56px;
511
$ui-grid-header-alternate-row-height: 52px;

projects/angular/components/ui-grid/src/ui-grid.component.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
transition,
3131
trigger,
3232
} from '@angular/animations';
33+
import { FocusOrigin } from '@angular/cdk/a11y';
3334
import {
3435
AfterContentInit,
3536
ChangeDetectionStrategy,
@@ -57,6 +58,7 @@ import {
5758
MatCheckbox,
5859
MatCheckboxChange,
5960
} from '@angular/material/checkbox';
61+
import { MatTooltip } from '@angular/material/tooltip';
6062
import { QueuedAnnouncer } from '@uipath/angular/a11y';
6163
import { ISuggestValue } from '@uipath/angular/components/ui-suggest';
6264

@@ -65,8 +67,8 @@ import { UiGridExpandedRowDirective } from './body/ui-grid-expanded-row.directiv
6567
import { UiGridLoadingDirective } from './body/ui-grid-loading.directive';
6668
import { UiGridNoContentDirective } from './body/ui-grid-no-content.directive';
6769
import { UiGridRowActionDirective } from './body/ui-grid-row-action.directive';
68-
import { UiGridRowConfigDirective } from './body/ui-grid-row-config.directive';
6970
import { UiGridRowCardViewDirective } from './body/ui-grid-row-card-view.directive';
71+
import { UiGridRowConfigDirective } from './body/ui-grid-row-config.directive';
7072
import { UiGridSearchFilterDirective } from './filters/ui-grid-search-filter.directive';
7173
import { UiGridFooterDirective } from './footer/ui-grid-footer.directive';
7274
import { UiGridHeaderDirective } from './header/ui-grid-header.directive';
@@ -620,6 +622,12 @@ export class UiGridComponent<T extends IGridDataEntry> extends ResizableGrid<T>
620622
*/
621623
scrollCompensationWidth = 0;
622624

625+
/**
626+
* Whether column header is focused.
627+
*
628+
*/
629+
focusedColumnHeader = false;
630+
623631
/**
624632
* @internal
625633
* @ignore
@@ -1043,6 +1051,18 @@ export class UiGridComponent<T extends IGridDataEntry> extends ResizableGrid<T>
10431051
|| (column.searchableDropdown?.value != null && (column.searchableDropdown?.value as ISuggestValue[])?.length !== 0);
10441052
}
10451053

1054+
triggerColumnHeaderTooltip(event: FocusOrigin, tooltip: MatTooltip) {
1055+
if (event === 'keyboard') {
1056+
this.focusedColumnHeader = true;
1057+
tooltip.show();
1058+
}
1059+
}
1060+
1061+
hideColumnHeaderTooltip(tooltip: MatTooltip) {
1062+
tooltip.hide();
1063+
this.focusedColumnHeader = false;
1064+
}
1065+
10461066
private _announceGridHeaderActions() {
10471067
this._queuedAnnouncer.enqueue(this.intl.gridHeaderActionsNotice);
10481068
}

0 commit comments

Comments
 (0)