@@ -75,25 +75,45 @@ export const SelectableMixin = <T extends Constructor<LitElement>>(
75
75
76
76
constructor ( ...args : any [ ] ) {
77
77
super ( ...args ) ;
78
- this . addEventListener ( 'click' , this . _handleClick ) ;
79
- this . addEventListener ( 'keydown' , this . handleSelectKeydown ) ;
78
+ this . addEventListener ( 'click' , this . #onClick ) ;
79
+ this . addEventListener ( 'keydown' , this . #onKeydown ) ;
80
80
}
81
81
82
- private handleSelectKeydown = ( e : KeyboardEvent ) => {
82
+ readonly #onKeydown = ( e : KeyboardEvent ) => {
83
83
const composePath = e . composedPath ( ) ;
84
84
if (
85
85
( this . _selectable || ( this . deselectable && this . selected ) ) &&
86
86
composePath . indexOf ( this . selectableTarget ) === 0
87
87
) {
88
88
if ( this . selectableTarget === this ) {
89
89
if ( e . code !== 'Space' && e . code !== 'Enter' ) return ;
90
- this . _toggleSelect ( ) ;
90
+ this . #toggleSelect ( ) ;
91
91
e . preventDefault ( ) ;
92
92
}
93
93
}
94
94
} ;
95
95
96
- private _select ( ) {
96
+ readonly #onClick = ( e : Event ) => {
97
+ const composePath = e . composedPath ( ) ;
98
+ if (
99
+ ( this . _selectable || ( this . deselectable && this . selected ) ) &&
100
+ composePath . indexOf ( this . selectableTarget ) === 0
101
+ ) {
102
+ this . #toggleSelect( ) ;
103
+ }
104
+ } ;
105
+
106
+ #toggleSelect( ) {
107
+ // Only allow for select-interaction if selectable is true. Deselectable is ignored in this case, we do not want a DX where only deselection is a possibility..
108
+ if ( ! this . selectable ) return ;
109
+ if ( this . deselectable === false ) {
110
+ this . #select( ) ;
111
+ } else {
112
+ this . selected ? this . #deselect( ) : this . #select( ) ;
113
+ }
114
+ }
115
+
116
+ #select( ) {
97
117
if ( ! this . selectable ) return ;
98
118
const selectEvent = new UUISelectableEvent ( UUISelectableEvent . SELECTED ) ;
99
119
this . dispatchEvent ( selectEvent ) ;
@@ -102,30 +122,14 @@ export const SelectableMixin = <T extends Constructor<LitElement>>(
102
122
this . selected = true ;
103
123
}
104
124
105
- private _deselect ( ) {
125
+ #deselect ( ) {
106
126
if ( ! this . deselectable ) return ;
107
127
const selectEvent = new UUISelectableEvent ( UUISelectableEvent . DESELECTED ) ;
108
128
this . dispatchEvent ( selectEvent ) ;
109
129
if ( selectEvent . defaultPrevented ) return ;
110
130
111
131
this . selected = false ;
112
132
}
113
-
114
- private _handleClick ( e : Event ) {
115
- if ( e . composedPath ( ) . indexOf ( this . selectableTarget ) !== - 1 ) {
116
- this . _toggleSelect ( ) ;
117
- }
118
- }
119
-
120
- private _toggleSelect ( ) {
121
- // Only allow for select-interaction if selectable is true. Deselectable is ignored in this case, we do not want a DX where only deselection is a possibility..
122
- if ( ! this . selectable ) return ;
123
- if ( this . deselectable === false ) {
124
- this . _select ( ) ;
125
- } else {
126
- this . selected ? this . _deselect ( ) : this . _select ( ) ;
127
- }
128
- }
129
133
}
130
134
// prettier-ignore
131
135
return ( SelectableMixinClass as unknown ) as Constructor < SelectableMixinInterface > & T ;
0 commit comments