@@ -49,11 +49,11 @@ class BaseModel extends Model {
4949 { view} = me ,
5050 { store} = view ,
5151 isCell = me . ntype . includes ( 'cell' ) ,
52- keyProp = store . getKeyProperty ( ) ,
5352 processed = new Set ( ) ;
5453
5554 items . forEach ( item => {
56- let recordId , row ;
55+ let hasChanged = false ,
56+ recordId , row ;
5757
5858 if ( isCell ) {
5959 // item is a logical ID: recordId__dataField
@@ -66,16 +66,19 @@ class BaseModel extends Model {
6666 processed . add ( item ) ; // Process each logical cell only once per batch
6767
6868 // Find the cell node in the row's VDOM
69- let dataField = view . getDataField ( item ) ,
70- cellNode = row . vdom . cn . find ( n => n . data ?. field === dataField ) ;
69+ let dataField = view . getDataField ( item ) ,
70+ cellNode = row . vdom . cn . find ( n => n . data ?. field === dataField ) ,
71+ shouldSelect = me . isSelected ( item ) ,
72+ alreadySelect = cellNode . cls ?. includes ( me . selectedCls ) ;
7173
72- if ( cellNode ) {
74+ if ( cellNode && shouldSelect !== alreadySelect ) {
7375 // Mutate VDOM directly: Toggle selection class
74- NeoArray . toggle ( cellNode . cls , me . selectedCls , me . isSelected ( item ) )
76+ NeoArray [ shouldSelect ? 'add' : 'remove' ] ( cellNode . cls , me . selectedCls ) ;
77+ hasChanged = true
7578 }
7679
7780 // We must trigger the update on the row to flush the VDOM change
78- if ( ! silent ) {
81+ if ( hasChanged && ! silent ) {
7982 row . update ( )
8083 }
8184 }
@@ -91,18 +94,23 @@ class BaseModel extends Model {
9194 if ( record ) {
9295 row = view . getRow ( record ) ;
9396 if ( row ) {
94- let isSelected = me . isSelectedRow ( recordId ) ;
97+ let isSelected = me . isSelectedRow ( recordId ) ,
98+ alreadySelect = row . vdom . cls ?. includes ( me . selectedCls ) ;
9599
96- // Mutate VDOM directly: Toggle selection class on the row
97- NeoArray . toggle ( row . vdom . cls , me . selectedCls , isSelected ) ;
100+ if ( isSelected !== alreadySelect ) {
101+ // Mutate VDOM directly: Toggle selection class on the row
102+ NeoArray [ isSelected ? 'add' : 'remove' ] ( row . vdom . cls , me . selectedCls ) ;
98103
99- if ( isSelected ) {
100- row . vdom [ 'aria-selected' ] = true
101- } else {
102- delete row . vdom [ 'aria-selected' ]
104+ if ( isSelected ) {
105+ row . vdom [ 'aria-selected' ] = true
106+ } else {
107+ delete row . vdom [ 'aria-selected' ]
108+ }
109+
110+ hasChanged = true
103111 }
104112
105- if ( ! silent ) {
113+ if ( hasChanged && ! silent ) {
106114 row . update ( )
107115 }
108116 }
@@ -194,12 +202,7 @@ class BaseModel extends Model {
194202
195203 NeoArray . remove ( me . selectedRows , recordId ) ;
196204
197- me . updateRows ( recordId , true ) ;
198-
199- if ( ! silent ) {
200- me . view . updateDepth = 2 ;
201- me . view . update ( )
202- }
205+ me . updateRows ( recordId , silent )
203206 }
204207
205208 /**
@@ -284,12 +287,7 @@ class BaseModel extends Model {
284287
285288 NeoArray . add ( me . selectedRows , recordId ) ;
286289
287- me . updateRows ( recordId , true ) ;
288-
289- if ( ! silent ) {
290- me . view . updateDepth = 2 ;
291- me . view . update ( )
292- }
290+ me . updateRows ( recordId , silent )
293291 }
294292
295293 /**
0 commit comments