@@ -4,6 +4,7 @@ import type { Sample } from 'src/routes/_createSamples';
4
4
import { derived , get , readable } from 'svelte/store' ;
5
5
import { addSelectedRows } from './addSelectedRows' ;
6
6
import { addSubRows } from './addSubRows' ;
7
+ import { addPagination } from './addPagination' ;
7
8
8
9
const data = readable < Sample [ ] > ( [
9
10
{
@@ -117,7 +118,7 @@ test('basic row selection', () => {
117
118
expect ( row0Props . select . selected ) . toBe ( true ) ;
118
119
} ) ;
119
120
120
- test ( 'linked parent and child selection' , ( ) => {
121
+ test ( 'linked data sub rows selection' , ( ) => {
121
122
const table = createTable ( data , {
122
123
sub : addSubRows ( {
123
124
children : 'children' ,
@@ -186,3 +187,249 @@ test('linked parent and child selection', () => {
186
187
expect ( row0Props . select . allSubRowsSelected ) . toBe ( true ) ;
187
188
expect ( row0Props . select . someSubRowsSelected ) . toBe ( true ) ;
188
189
} ) ;
190
+
191
+ test ( 'reading rows selected store' , ( ) => {
192
+ const table = createTable ( data , {
193
+ sub : addSubRows ( {
194
+ children : 'children' ,
195
+ } ) ,
196
+ select : addSelectedRows ( ) ,
197
+ } ) ;
198
+ const columns = table . createColumns ( [
199
+ table . display ( {
200
+ id : 'selected' ,
201
+ header : ( _ , { pluginStates } ) => {
202
+ const { allRowsSelected, someRowsSelected } = pluginStates . select ;
203
+ return derived ( [ allRowsSelected , someRowsSelected ] , ( [ $all , $some ] ) => {
204
+ return `all: ${ $all } , some: ${ $some } ` ;
205
+ } ) ;
206
+ } ,
207
+ cell : ( { row } , { pluginStates } ) => {
208
+ const { isSelected, isSomeSubRowsSelected, isAllSubRowsSelected } =
209
+ pluginStates . select . getRowState ( row ) ;
210
+ return derived (
211
+ [ isSelected , isSomeSubRowsSelected , isAllSubRowsSelected ] ,
212
+ ( [ $selected , $someSubRowsSelected , $allSubRowsSelected ] ) => {
213
+ return `selected: ${ $selected } , some subrows: ${ $someSubRowsSelected } , all subrows: ${ $allSubRowsSelected } ` ;
214
+ }
215
+ ) ;
216
+ } ,
217
+ } ) ,
218
+ table . column ( {
219
+ header : 'First Name' ,
220
+ accessor : 'firstName' ,
221
+ } ) ,
222
+ ] ) ;
223
+ const vm = table . createViewModel ( columns ) ;
224
+ const { selectedDataIds, allRowsSelected, someRowsSelected } = vm . pluginStates . select ;
225
+
226
+ // Populate `tableState.rows` by subscribing to `vm.rows` and running all row
227
+ // derivation functions.
228
+ get ( vm . rows ) ;
229
+ selectedDataIds . add ( '0' ) ;
230
+
231
+ expect ( get ( someRowsSelected ) ) . toBe ( true ) ;
232
+ expect ( get ( allRowsSelected ) ) . toBe ( false ) ;
233
+
234
+ get ( vm . rows ) ;
235
+ selectedDataIds . addAll ( [ '0>0' , '0>0>0' , '0>1' , '1' , '1>0' , '1>1' , '2' , '2>0' , '2>1' , '3' , '4' ] ) ;
236
+
237
+ expect ( get ( someRowsSelected ) ) . toBe ( true ) ;
238
+ expect ( get ( allRowsSelected ) ) . toBe ( true ) ;
239
+
240
+ get ( vm . rows ) ;
241
+ selectedDataIds . remove ( '0' ) ;
242
+
243
+ expect ( get ( someRowsSelected ) ) . toBe ( true ) ;
244
+ expect ( get ( allRowsSelected ) ) . toBe ( false ) ;
245
+
246
+ get ( vm . rows ) ;
247
+ selectedDataIds . clear ( ) ;
248
+
249
+ expect ( get ( someRowsSelected ) ) . toBe ( false ) ;
250
+ expect ( get ( allRowsSelected ) ) . toBe ( false ) ;
251
+ } ) ;
252
+
253
+ test ( 'updating all rows selected store' , ( ) => {
254
+ const table = createTable ( data , {
255
+ sub : addSubRows ( {
256
+ children : 'children' ,
257
+ } ) ,
258
+ select : addSelectedRows ( ) ,
259
+ } ) ;
260
+ const columns = table . createColumns ( [
261
+ table . display ( {
262
+ id : 'selected' ,
263
+ header : ( _ , { pluginStates } ) => {
264
+ const { allRowsSelected, someRowsSelected } = pluginStates . select ;
265
+ return derived ( [ allRowsSelected , someRowsSelected ] , ( [ $all , $some ] ) => {
266
+ return `all: ${ $all } , some: ${ $some } ` ;
267
+ } ) ;
268
+ } ,
269
+ cell : ( { row } , { pluginStates } ) => {
270
+ const { isSelected, isSomeSubRowsSelected, isAllSubRowsSelected } =
271
+ pluginStates . select . getRowState ( row ) ;
272
+ return derived (
273
+ [ isSelected , isSomeSubRowsSelected , isAllSubRowsSelected ] ,
274
+ ( [ $selected , $someSubRowsSelected , $allSubRowsSelected ] ) => {
275
+ return `selected: ${ $selected } , some subrows: ${ $someSubRowsSelected } , all subrows: ${ $allSubRowsSelected } ` ;
276
+ }
277
+ ) ;
278
+ } ,
279
+ } ) ,
280
+ table . column ( {
281
+ header : 'First Name' ,
282
+ accessor : 'firstName' ,
283
+ } ) ,
284
+ ] ) ;
285
+ const vm = table . createViewModel ( columns ) ;
286
+ const { selectedDataIds, allRowsSelected } = vm . pluginStates . select ;
287
+
288
+ get ( vm . rows ) ;
289
+ allRowsSelected . set ( true ) ;
290
+
291
+ expect ( get ( selectedDataIds ) ) . toEqual ( {
292
+ '0' : true ,
293
+ '1' : true ,
294
+ '2' : true ,
295
+ '3' : true ,
296
+ '4' : true ,
297
+ } ) ;
298
+
299
+ get ( vm . rows ) ;
300
+ allRowsSelected . set ( false ) ;
301
+
302
+ expect ( get ( selectedDataIds ) ) . toEqual ( { } ) ;
303
+ } ) ;
304
+
305
+ test ( 'reading page rows selected store' , ( ) => {
306
+ const table = createTable ( data , {
307
+ page : addPagination ( {
308
+ initialPageSize : 2 ,
309
+ } ) ,
310
+ sub : addSubRows ( {
311
+ children : 'children' ,
312
+ } ) ,
313
+ select : addSelectedRows ( ) ,
314
+ } ) ;
315
+ const columns = table . createColumns ( [
316
+ table . display ( {
317
+ id : 'selected' ,
318
+ header : ( _ , { pluginStates } ) => {
319
+ const { allRowsSelected, someRowsSelected } = pluginStates . select ;
320
+ return derived ( [ allRowsSelected , someRowsSelected ] , ( [ $all , $some ] ) => {
321
+ return `all: ${ $all } , some: ${ $some } ` ;
322
+ } ) ;
323
+ } ,
324
+ cell : ( { row } , { pluginStates } ) => {
325
+ const { isSelected, isSomeSubRowsSelected, isAllSubRowsSelected } =
326
+ pluginStates . select . getRowState ( row ) ;
327
+ return derived (
328
+ [ isSelected , isSomeSubRowsSelected , isAllSubRowsSelected ] ,
329
+ ( [ $selected , $someSubRowsSelected , $allSubRowsSelected ] ) => {
330
+ return `selected: ${ $selected } , some subrows: ${ $someSubRowsSelected } , all subrows: ${ $allSubRowsSelected } ` ;
331
+ }
332
+ ) ;
333
+ } ,
334
+ } ) ,
335
+ table . column ( {
336
+ header : 'First Name' ,
337
+ accessor : 'firstName' ,
338
+ } ) ,
339
+ ] ) ;
340
+ const vm = table . createViewModel ( columns ) ;
341
+ const { selectedDataIds, allPageRowsSelected, somePageRowsSelected } = vm . pluginStates . select ;
342
+
343
+ // Populate `tableState.pageRows` by subscribing to `vm.pageRows` and running
344
+ // all row derivation functions.
345
+ get ( vm . pageRows ) ;
346
+ selectedDataIds . add ( '4' ) ;
347
+
348
+ console . log ( get ( vm . pageRows ) ) ;
349
+
350
+ expect ( get ( somePageRowsSelected ) ) . toBe ( false ) ;
351
+ expect ( get ( allPageRowsSelected ) ) . toBe ( false ) ;
352
+
353
+ get ( vm . pageRows ) ;
354
+ selectedDataIds . add ( '0' ) ;
355
+
356
+ expect ( get ( somePageRowsSelected ) ) . toBe ( true ) ;
357
+ expect ( get ( allPageRowsSelected ) ) . toBe ( false ) ;
358
+
359
+ get ( vm . pageRows ) ;
360
+ selectedDataIds . addAll ( [ '1' ] ) ;
361
+
362
+ expect ( get ( somePageRowsSelected ) ) . toBe ( true ) ;
363
+ expect ( get ( allPageRowsSelected ) ) . toBe ( true ) ;
364
+
365
+ get ( vm . pageRows ) ;
366
+ selectedDataIds . remove ( '0' ) ;
367
+
368
+ expect ( get ( somePageRowsSelected ) ) . toBe ( true ) ;
369
+ expect ( get ( allPageRowsSelected ) ) . toBe ( false ) ;
370
+
371
+ get ( vm . pageRows ) ;
372
+ selectedDataIds . clear ( ) ;
373
+
374
+ expect ( get ( somePageRowsSelected ) ) . toBe ( false ) ;
375
+ expect ( get ( allPageRowsSelected ) ) . toBe ( false ) ;
376
+ } ) ;
377
+
378
+ test ( 'updating all page rows selected store' , ( ) => {
379
+ const table = createTable ( data , {
380
+ page : addPagination ( {
381
+ initialPageSize : 2 ,
382
+ } ) ,
383
+ sub : addSubRows ( {
384
+ children : 'children' ,
385
+ } ) ,
386
+ select : addSelectedRows ( ) ,
387
+ } ) ;
388
+ const columns = table . createColumns ( [
389
+ table . display ( {
390
+ id : 'selected' ,
391
+ header : ( _ , { pluginStates } ) => {
392
+ const { allRowsSelected, someRowsSelected } = pluginStates . select ;
393
+ return derived ( [ allRowsSelected , someRowsSelected ] , ( [ $all , $some ] ) => {
394
+ return `all: ${ $all } , some: ${ $some } ` ;
395
+ } ) ;
396
+ } ,
397
+ cell : ( { row } , { pluginStates } ) => {
398
+ const { isSelected, isSomeSubRowsSelected, isAllSubRowsSelected } =
399
+ pluginStates . select . getRowState ( row ) ;
400
+ return derived (
401
+ [ isSelected , isSomeSubRowsSelected , isAllSubRowsSelected ] ,
402
+ ( [ $selected , $someSubRowsSelected , $allSubRowsSelected ] ) => {
403
+ return `selected: ${ $selected } , some subrows: ${ $someSubRowsSelected } , all subrows: ${ $allSubRowsSelected } ` ;
404
+ }
405
+ ) ;
406
+ } ,
407
+ } ) ,
408
+ table . column ( {
409
+ header : 'First Name' ,
410
+ accessor : 'firstName' ,
411
+ } ) ,
412
+ ] ) ;
413
+ const vm = table . createViewModel ( columns ) ;
414
+ const { selectedDataIds, allPageRowsSelected } = vm . pluginStates . select ;
415
+
416
+ get ( vm . pageRows ) ;
417
+ allPageRowsSelected . set ( true ) ;
418
+
419
+ expect ( get ( selectedDataIds ) ) . toEqual ( {
420
+ '0' : true ,
421
+ '1' : true ,
422
+ } ) ;
423
+
424
+ get ( vm . pageRows ) ;
425
+ allPageRowsSelected . set ( false ) ;
426
+
427
+ expect ( get ( selectedDataIds ) ) . toEqual ( { } ) ;
428
+
429
+ selectedDataIds . add ( '4' ) ;
430
+
431
+ get ( vm . pageRows ) ;
432
+ allPageRowsSelected . set ( false ) ;
433
+
434
+ expect ( get ( selectedDataIds ) ) . toEqual ( { 4 : true } ) ;
435
+ } ) ;
0 commit comments