Skip to content

Commit 34d87cb

Browse files
committed
refactor(aria/grid): migrate Grid to use ClickEventManager
1 parent 3ed8f89 commit 34d87cb

5 files changed

Lines changed: 28 additions & 28 deletions

File tree

goldens/aria/private/index.api.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ export class GridPattern {
378378
readonly activeDescendant: SignalLike<string | undefined>;
379379
readonly anchorCell: SignalLike<GridCellPattern | undefined>;
380380
readonly cells: SignalLike<GridCellPattern[][]>;
381+
readonly clickManager: SignalLike<ClickEventManager<PointerEvent>>;
381382
readonly disabled: SignalLike<boolean>;
382383
readonly dragging: WritableSignalLike<boolean>;
383384
focusEffect(): void;
@@ -389,12 +390,11 @@ export class GridPattern {
389390
readonly keydown: SignalLike<KeyboardEventManager<KeyboardEvent>>;
390391
readonly multiSelectable: SignalLike<boolean | undefined>;
391392
readonly nextColKey: SignalLike<"ArrowRight" | "ArrowLeft">;
393+
onClick(event: PointerEvent): void;
392394
onFocusIn(event: FocusEvent): void;
393395
onFocusOut(event: FocusEvent): void;
394396
onKeydown(event: KeyboardEvent): void;
395-
onPointerdown(event: PointerEvent): void;
396397
readonly pauseNavigation: SignalLike<boolean>;
397-
readonly pointerdown: SignalLike<PointerEventManager<PointerEvent>>;
398398
readonly prevColKey: SignalLike<"ArrowRight" | "ArrowLeft">;
399399
resetFocusEffect(): void;
400400
resetStateEffect(): void;

src/aria/grid/grid.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ describe('Grid directives', () => {
5959
};
6060

6161
const pointerDown = (target: HTMLElement, eventInit: PointerEventInit = {}) => {
62-
target.dispatchEvent(new PointerEvent('pointerdown', {bubbles: true, ...eventInit}));
62+
target.dispatchEvent(new PointerEvent('click', {bubbles: true, ...eventInit}));
6363
fixture.detectChanges();
6464
};
6565

@@ -468,7 +468,7 @@ describe('Grid directives', () => {
468468
});
469469
});
470470

471-
describe('pointer interactions', () => {
471+
describe('click interactions', () => {
472472
beforeEach(() => {
473473
setupGrid({
474474
enableSelection: true,
@@ -479,7 +479,7 @@ describe('Grid directives', () => {
479479
fixture.detectChanges();
480480
});
481481

482-
it('should focus and select the clicked cell on pointerdown', () => {
482+
it('should focus and select the clicked cell on click', () => {
483483
const cell = gridElement.querySelector('#c1-1') as HTMLElement;
484484
expect(cell.getAttribute('aria-selected')).toBe('false');
485485

src/aria/grid/grid.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import {GRID_ROW} from './grid-tokens';
5454
'[attr.aria-multiselectable]': '_pattern.multiSelectable()',
5555
'[attr.aria-activedescendant]': '_pattern.activeDescendant()',
5656
'(keydown)': '_pattern.onKeydown($event)',
57-
'(pointerdown)': '_pattern.onPointerdown($event)',
57+
'(click)': '_pattern.onClick($event)',
5858
'(focusin)': '_pattern.onFocusIn($event)',
5959
'(focusout)': '_pattern.onFocusOut($event)',
6060
},

src/aria/private/grid/grid.spec.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ describe('Grid', () => {
515515
});
516516
});
517517

518-
describe('Pointer Events', () => {
518+
describe('Click Events', () => {
519519
let grid: GridPattern;
520520

521521
beforeEach(() => {
@@ -526,37 +526,37 @@ describe('Grid', () => {
526526
grid.setDefaultStateEffect();
527527
});
528528

529-
describe('Basic Pointer Actions', () => {
530-
it('should move focus to the clicked cell on pointerdown', () => {
529+
describe('Basic Click Actions', () => {
530+
it('should move focus to the clicked cell on click', () => {
531531
const cells = grid.cells();
532-
grid.onPointerdown(createClickEvent(cells[0][1].element()));
532+
grid.onClick(createClickEvent(cells[0][1].element()));
533533
expect(grid.gridBehavior.focusBehavior.activeCell()).toBe(cells[0][1]);
534534
});
535535
});
536536

537-
describe('Pointer Selection', () => {
538-
it('should follow focus in follow mode on pointerdown', () => {
537+
describe('Click Selection', () => {
538+
it('should follow focus in follow mode on click', () => {
539539
(gridInputs.selectionMode as WritableSignalLike<'follow' | 'explicit'>).set('follow');
540540
const cell = grid.cells()[0][1];
541-
grid.onPointerdown(createClickEvent(cell.element()));
541+
grid.onClick(createClickEvent(cell.element()));
542542
expect(cell.selected()).toBe(true);
543543
});
544544

545-
it('should toggle selection in explicit mode on pointerdown', () => {
545+
it('should toggle selection in explicit mode on click', () => {
546546
(gridInputs.selectionMode as WritableSignalLike<'follow' | 'explicit'>).set('explicit');
547547
const cell = grid.cells()[0][1];
548-
grid.onPointerdown(createClickEvent(cell.element()));
548+
grid.onClick(createClickEvent(cell.element()));
549549
expect(cell.selected()).toBe(true);
550550

551-
grid.onPointerdown(createClickEvent(cell.element()));
551+
grid.onClick(createClickEvent(cell.element()));
552552
expect(cell.selected()).toBe(false);
553553
});
554554

555-
it('should support multi-selection with Ctrl+pointerdown', () => {
555+
it('should support multi-selection with Ctrl+click', () => {
556556
(gridInputs.multi as WritableSignalLike<boolean>).set(true);
557557
const cells = grid.cells();
558-
grid.onPointerdown(createClickEvent(cells[0][0].element()));
559-
grid.onPointerdown(createClickEvent(cells[0][1].element(), {control: true}));
558+
grid.onClick(createClickEvent(cells[0][0].element()));
559+
grid.onClick(createClickEvent(cells[0][1].element(), {control: true}));
560560
expect(cells[0][0].selected()).toBe(true);
561561
expect(cells[0][1].selected()).toBe(true);
562562
});
@@ -664,12 +664,12 @@ describe('Grid', () => {
664664
expect(grid.gridBehavior.focusBehavior.activeCell()).toBeUndefined(); // Should stay undefined, meaning default state was skipped
665665
});
666666

667-
it('should NOT set default state if pointer interacted', () => {
667+
it('should NOT set default state if click interacted', () => {
668668
const gridInputs = getDefaultGridInputs();
669669
const data = [{cells: [{}, {}]}, {cells: [{}, {}]}];
670670
const {grid} = createGrid(data, gridInputs);
671671
const cells = grid.cells();
672-
grid.onPointerdown({target: cells[0][0].element()} as unknown as PointerEvent); // Interaction
672+
grid.onClick({target: cells[0][0].element()} as unknown as PointerEvent); // Interaction
673673

674674
cells[0][1].inputs.selected.set(true);
675675
grid.setDefaultStateEffect();

src/aria/private/grid/grid.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*/
88

99
import {SignalLike, computed, signal, untracked} from '../behaviors/signal-like/signal-like';
10-
import {KeyboardEventManager, PointerEventManager, Modifier} from '../behaviors/event-manager';
10+
import {KeyboardEventManager, ClickEventManager, Modifier} from '../behaviors/event-manager';
1111
import {NavOptions, Grid, GridInputs as GridBehaviorInputs} from '../behaviors/grid';
1212
import type {GridRowPattern} from './row';
1313
import type {GridCellPattern} from './cell';
@@ -139,9 +139,9 @@ export class GridPattern {
139139
return manager;
140140
});
141141

142-
/** The pointerdown event manager for the grid. */
143-
readonly pointerdown = computed(() => {
144-
const manager = new PointerEventManager();
142+
/** The click event manager for the grid. */
143+
readonly clickManager = computed(() => {
144+
const manager = new ClickEventManager<PointerEvent>();
145145

146146
// Navigation without selection.
147147
if (!this.inputs.enableSelection()) {
@@ -205,12 +205,12 @@ export class GridPattern {
205205
this.keydown().handle(event);
206206
}
207207

208-
/** Handles pointerdown events on the grid. */
209-
onPointerdown(event: PointerEvent) {
208+
/** Handles click events on the grid. */
209+
onClick(event: PointerEvent) {
210210
if (this.disabled()) return;
211211

212212
this.hasBeenInteracted.set(true);
213-
this.pointerdown().handle(event);
213+
this.clickManager().handle(event);
214214
}
215215

216216
/** Handles focusin events on the grid. */

0 commit comments

Comments
 (0)