@@ -2197,6 +2197,85 @@ describe('SlickDatView core file', () => {
21972197 ] ) ;
21982198 } ) ;
21992199
2200+ it ( 'should report all filtered selected IDs when selection changes through the grid' , ( ) => {
2201+ const columns = [
2202+ { id : 'name' , field : 'name' , name : 'Name' } ,
2203+ { id : 'age' , field : 'age' , name : 'Age' } ,
2204+ ] ;
2205+ const gridOptions = { enableCellNavigation : true , multiSelect : true , devMode : { ownerNodeIndex : 0 } } as GridOption ;
2206+ dv = new SlickDataView ( { } ) ;
2207+ const grid = new SlickGrid ( '#myGrid' , dv , columns , gridOptions ) ;
2208+ const onSelectedRowIdsSpy = vi . spyOn ( dv . onSelectedRowIdsChanged , 'notify' ) ;
2209+ grid . setSelectionModel ( new SlickHybridSelectionModel ( { selectActiveRow : false , selectionType : 'row' } ) ) ;
2210+ dv . setItems ( items ) ;
2211+ dv . setPagingOptions ( { dataView : dv , pageNum : 0 , pageSize : 4 } ) ;
2212+ dv . syncGridSelection ( grid , false , true ) ;
2213+ dv . setSelectedIds ( [ 3 , 4 , 8 ] , { isRowBeingAdded : true , applyRowSelectionToGrid : true } ) ;
2214+ onSelectedRowIdsSpy . mockClear ( ) ;
2215+
2216+ grid . setSelectedRows ( [ 0 , 1 , 2 ] ) ;
2217+
2218+ expect ( onSelectedRowIdsSpy ) . toHaveBeenLastCalledWith ( expect . objectContaining ( { filteredIds : [ 4 , 3 , 1 , 8 ] } ) , expect . anything ( ) , dv ) ;
2219+ } ) ;
2220+
2221+ it ( 'should normalize an existing unsorted selection when the same IDs are selected again' , ( ) => {
2222+ const columns = [
2223+ { id : 'name' , field : 'name' , name : 'Name' } ,
2224+ { id : 'age' , field : 'age' , name : 'Age' } ,
2225+ ] ;
2226+ const gridOptions = { enableCellNavigation : true , multiSelect : true , devMode : { ownerNodeIndex : 0 } } as GridOption ;
2227+ dv = new SlickDataView ( { } ) ;
2228+ const grid = new SlickGrid ( '#myGrid' , dv , columns , gridOptions ) ;
2229+ grid . setSelectionModel ( new SlickHybridSelectionModel ( { selectActiveRow : false , selectionType : 'row' } ) ) ;
2230+ dv . setItems ( items ) ;
2231+ grid . setSelectedRows ( [ 0 , 1 ] ) ;
2232+ dv . syncGridSelection ( grid , false , true ) ;
2233+
2234+ dv . setSelectedIds ( [ 3 , 4 ] , { isRowBeingAdded : true , applyRowSelectionToGrid : false } ) ;
2235+
2236+ expect ( dv . getAllSelectedIds ( ) ) . toEqual ( [ 3 , 4 ] ) ;
2237+ } ) ;
2238+
2239+ it ( 'should reuse pending filtered IDs for bulk grid selection' , ( ) => {
2240+ const columns = [
2241+ { id : 'name' , field : 'name' , name : 'Name' } ,
2242+ { id : 'age' , field : 'age' , name : 'Age' } ,
2243+ ] ;
2244+ const gridOptions = { enableCellNavigation : true , multiSelect : true , devMode : { ownerNodeIndex : 0 } } as GridOption ;
2245+ dv = new SlickDataView ( { } ) ;
2246+ const grid = new SlickGrid ( '#myGrid' , dv , columns , gridOptions ) ;
2247+ const onSelectedRowIdsSpy = vi . spyOn ( dv . onSelectedRowIdsChanged , 'notify' ) ;
2248+ grid . setSelectionModel ( new SlickHybridSelectionModel ( { selectActiveRow : false , selectionType : 'row' } ) ) ;
2249+ dv . setItems ( items ) ;
2250+ dv . setPagingOptions ( { dataView : dv , pageNum : 0 , pageSize : 4 } ) ;
2251+ dv . syncGridSelection ( grid , false , true ) ;
2252+ dv . setSelectedIds ( [ 3 , 4 , 8 ] , { isRowBeingAdded : true , shouldTriggerEvent : false , applyRowSelectionToGrid : false } ) ;
2253+
2254+ grid . setSelectedRows ( [ 0 , 1 ] , 'click.selectAll' ) ;
2255+
2256+ expect ( onSelectedRowIdsSpy ) . toHaveBeenLastCalledWith ( expect . objectContaining ( { filteredIds : [ 3 , 4 , 8 ] } ) , expect . anything ( ) , dv ) ;
2257+ } ) ;
2258+
2259+ it ( 'should ignore pending filtered IDs when bulk grid selection changes the selected IDs' , ( ) => {
2260+ const columns = [
2261+ { id : 'name' , field : 'name' , name : 'Name' } ,
2262+ { id : 'age' , field : 'age' , name : 'Age' } ,
2263+ ] ;
2264+ const gridOptions = { enableCellNavigation : true , multiSelect : true , devMode : { ownerNodeIndex : 0 } } as GridOption ;
2265+ dv = new SlickDataView ( { } ) ;
2266+ const grid = new SlickGrid ( '#myGrid' , dv , columns , gridOptions ) ;
2267+ const onSelectedRowIdsSpy = vi . spyOn ( dv . onSelectedRowIdsChanged , 'notify' ) ;
2268+ grid . setSelectionModel ( new SlickHybridSelectionModel ( { selectActiveRow : false , selectionType : 'row' } ) ) ;
2269+ dv . setItems ( items ) ;
2270+ dv . setPagingOptions ( { dataView : dv , pageNum : 0 , pageSize : 4 } ) ;
2271+ dv . syncGridSelection ( grid , false , true ) ;
2272+ dv . setSelectedIds ( [ 8 ] , { isRowBeingAdded : true , shouldTriggerEvent : false , applyRowSelectionToGrid : false } ) ;
2273+
2274+ grid . setSelectedRows ( [ 0 , 1 ] , 'click.selectAll' ) ;
2275+
2276+ expect ( onSelectedRowIdsSpy ) . toHaveBeenLastCalledWith ( expect . objectContaining ( { filteredIds : [ 4 , 3 , 8 ] } ) , expect . anything ( ) , dv ) ;
2277+ } ) ;
2278+
22002279 it ( 'should not expect row selections to be preserved when using "multiSelect:false" and setSelectedIds() even when either preseve is enabled ("preserveHidden" or "preserveHiddenOnSelectionChange")' , ( ) => {
22012280 const columns = [
22022281 { id : 'name' , field : 'name' , name : 'Name' } ,
0 commit comments