@@ -62,7 +62,7 @@ interface IListElement extends IListElementLazyParts {
62
62
separator ?: IQuickPickSeparator ;
63
63
}
64
64
65
- class ListElement implements IListElement , IDisposable {
65
+ class ListElement implements IListElement {
66
66
private readonly _init : Lazy < IListElementLazyParts > ;
67
67
68
68
readonly hasCheckbox : boolean ;
@@ -74,6 +74,7 @@ class ListElement implements IListElement, IDisposable {
74
74
readonly fireButtonTriggered : ( event : IQuickPickItemButtonEvent < IQuickPickItem > ) => void ;
75
75
readonly fireSeparatorButtonTriggered : ( event : IQuickPickSeparatorButtonEvent ) => void ;
76
76
77
+ // state will get updated later
77
78
private _checked : boolean = false ;
78
79
private _hidden : boolean = false ;
79
80
private _element ?: HTMLElement ;
@@ -82,21 +83,24 @@ class ListElement implements IListElement, IDisposable {
82
83
private _detailHighlights ?: IMatch [ ] ;
83
84
private _separator ?: IQuickPickSeparator ;
84
85
85
- private readonly _onChecked = new Emitter < boolean > ( ) ;
86
- onChecked = this . _onChecked . event ;
86
+ private readonly _onChecked : Emitter < { listElement : IListElement ; checked : boolean } > ;
87
+ onChecked : Event < boolean > ;
87
88
88
89
constructor (
89
90
mainItem : QuickPickItem ,
90
91
previous : QuickPickItem | undefined ,
91
92
index : number ,
92
93
hasCheckbox : boolean ,
93
94
fireButtonTriggered : ( event : IQuickPickItemButtonEvent < IQuickPickItem > ) => void ,
94
- fireSeparatorButtonTriggered : ( event : IQuickPickSeparatorButtonEvent ) => void
95
+ fireSeparatorButtonTriggered : ( event : IQuickPickSeparatorButtonEvent ) => void ,
96
+ onCheckedEmitter : Emitter < { listElement : IListElement ; checked : boolean } >
95
97
) {
96
98
this . hasCheckbox = hasCheckbox ;
97
99
this . index = index ;
98
100
this . fireButtonTriggered = fireButtonTriggered ;
99
101
this . fireSeparatorButtonTriggered = fireSeparatorButtonTriggered ;
102
+ this . _onChecked = onCheckedEmitter ;
103
+ this . onChecked = Event . map ( Event . filter < { listElement : IListElement ; checked : boolean } > ( this . _onChecked . event , e => e . listElement === this ) , e => e . checked ) ;
100
104
101
105
if ( mainItem . type === 'separator' ) {
102
106
this . _separator = mainItem ;
@@ -170,7 +174,7 @@ class ListElement implements IListElement, IDisposable {
170
174
set checked ( value : boolean ) {
171
175
if ( value !== this . _checked ) {
172
176
this . _checked = value ;
173
- this . _onChecked . fire ( value ) ;
177
+ this . _onChecked . fire ( { listElement : this , checked : value } ) ;
174
178
}
175
179
}
176
180
@@ -207,10 +211,6 @@ class ListElement implements IListElement, IDisposable {
207
211
}
208
212
209
213
// #endregion
210
-
211
- dispose ( ) {
212
- this . _onChecked . dispose ( ) ;
213
- }
214
214
}
215
215
216
216
interface IListElementTemplateData {
@@ -431,6 +431,7 @@ export class QuickInputList {
431
431
onKeyDown : Event < StandardKeyboardEvent > = this . _onKeyDown . event ;
432
432
private readonly _onLeave = new Emitter < void > ( ) ;
433
433
onLeave : Event < void > = this . _onLeave . event ;
434
+ private readonly _listElementChecked = new Emitter < { listElement : IListElement ; checked : boolean } > ( ) ;
434
435
private _fireCheckedEvents = true ;
435
436
private elementDisposables : IDisposable [ ] = [ ] ;
436
437
private disposables : IDisposable [ ] = [ ] ;
@@ -551,6 +552,7 @@ export class QuickInputList {
551
552
}
552
553
delayer . cancel ( ) ;
553
554
} ) ) ;
555
+ this . disposables . push ( this . _listElementChecked . event ( _ => this . fireCheckedEvents ( ) ) ) ;
554
556
this . disposables . push (
555
557
this . _onChangedAllVisibleChecked ,
556
558
this . _onChangedCheckedCount ,
@@ -666,12 +668,10 @@ export class QuickInputList {
666
668
index ,
667
669
hasCheckbox ,
668
670
fireButtonTriggered ,
669
- fireSeparatorButtonTriggered
671
+ fireSeparatorButtonTriggered ,
672
+ this . _listElementChecked
670
673
) ;
671
674
672
- this . elementDisposables . push ( element ) ;
673
- this . elementDisposables . push ( element . onChecked ( ( ) => this . fireCheckedEvents ( ) ) ) ;
674
-
675
675
result . push ( element ) ;
676
676
elementsToIndexes . set ( element . item ?? element . separator ! , index ) ;
677
677
return result ;
0 commit comments