1- import { Trigger } from '../types' ;
1+
2+ // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button#value
3+ export type MouseButton = 0 // Main
4+ | 1 // Auxiliary
5+ | 2 // Secondary
6+ | 3 // Fourth
7+ | 4 ; // Fifth
8+
9+ export type Modifier = 'ctrl'
10+ | 'alt'
11+ | 'shift' ;
12+
13+ export type Trigger = MouseButton | MouseButtonWithModifiers ;
14+
15+ export type MouseButtonWithModifiers = {
16+ button : MouseButton ,
17+ modifiers : Modifier [ ]
18+ } ;
219
320/**
421 * Determines whether a MouseEvent should execute until completion depending on
@@ -8,18 +25,21 @@ import {Trigger} from '../types';
825 * @param triggers A list of Triggers that signify that the event should execute until completion
926 * @returns Whether the MouseEvent should execute until completion
1027 */
11- export const shouldTrigger = ( event : MouseEvent , triggers : Trigger [ ] ) : boolean => {
12- for ( const trigger of triggers ) {
28+ export const matchesTrigger = ( event : MouseEvent , triggers : Trigger [ ] ) : boolean =>
29+ triggers . some ( ( trigger ) => {
30+
1331 // The trigger requires only a specific button to be pressed
1432 if ( typeof trigger === 'number' ) {
1533 return event . button === trigger ;
1634 }
1735
1836 // The trigger requires a specific button to be pressed AND some modifiers
1937 if ( typeof trigger === 'object' ) {
20- const reqButtonIsPressed = trigger . button === event . button ;
38+ if ( trigger . button !== event . button ) {
39+ return false ;
40+ }
2141
22- const allReqModifiersArePressed = trigger . modifiers . every ( ( modifier ) => {
42+ return trigger . modifiers . every ( ( modifier ) => {
2343 switch ( modifier ) {
2444 case 'alt' :
2545 return event . altKey ;
@@ -29,11 +49,7 @@ export const shouldTrigger = (event: MouseEvent, triggers: Trigger[]): boolean =
2949 return event . shiftKey ;
3050 }
3151 } ) ;
32-
33- return reqButtonIsPressed && allReqModifiersArePressed ;
3452 }
35- }
3653
37- // By default, we do not process the event
38- return false ;
39- } ;
54+ return false ;
55+ } ) ;
0 commit comments