@@ -265,19 +265,6 @@ const props = withDefaults(defineProps<BTableProps>(), {
265
265
emptyFilteredText: ' There are no records matching your request' ,
266
266
})
267
267
268
- const footCloneBoolean = useBooleanish (toRef (props , ' footClone' ))
269
- const sortDescBoolean = useBooleanish (toRef (props , ' sortDesc' ))
270
- const sortInternalBoolean = useBooleanish (toRef (props , ' sortInternal' ))
271
- const selectableBoolean = useBooleanish (toRef (props , ' selectable' ))
272
- const stickySelectBoolean = useBooleanish (toRef (props , ' stickySelect' ))
273
- const busyBoolean = useBooleanish (toRef (props , ' busy' ))
274
- const showEmptyBoolean = useBooleanish (toRef (props , ' showEmpty' ))
275
- const noProviderPagingBoolean = useBooleanish (toRef (props , ' showEmpty' ))
276
- const noProviderSortingBoolean = useBooleanish (toRef (props , ' showEmpty' ))
277
- const noProviderFilteringBoolean = useBooleanish (toRef (props , ' showEmpty' ))
278
-
279
- const internalBusyFlag = ref (busyBoolean .value )
280
-
281
268
interface BTableEmits {
282
269
(
283
270
e : ' headClicked' ,
@@ -314,6 +301,32 @@ interface BTableEmits {
314
301
const emit = defineEmits <BTableEmits >()
315
302
const slots = useSlots ()
316
303
304
+ const itemHelper = useItemHelper ()
305
+
306
+ const footCloneBoolean = useBooleanish (toRef (props , ' footClone' ))
307
+ const sortDescBoolean = useBooleanish (toRef (props , ' sortDesc' ))
308
+ const sortInternalBoolean = useBooleanish (toRef (props , ' sortInternal' ))
309
+ const selectableBoolean = useBooleanish (toRef (props , ' selectable' ))
310
+ const stickySelectBoolean = useBooleanish (toRef (props , ' stickySelect' ))
311
+ const busyBoolean = useBooleanish (toRef (props , ' busy' ))
312
+ const showEmptyBoolean = useBooleanish (toRef (props , ' showEmpty' ))
313
+ const noProviderPagingBoolean = useBooleanish (toRef (props , ' showEmpty' ))
314
+ const noProviderSortingBoolean = useBooleanish (toRef (props , ' showEmpty' ))
315
+ const noProviderFilteringBoolean = useBooleanish (toRef (props , ' showEmpty' ))
316
+
317
+ const internalBusyFlag = ref (busyBoolean .value )
318
+ itemHelper .filterEvent .value = async (items ) => {
319
+ if (usesProvider .value ) {
320
+ await callItemsProvider ()
321
+ return
322
+ }
323
+ const clone = await cloneDeepAsync (items )
324
+ emit (' filtered' , clone )
325
+ }
326
+
327
+ const selectedItems = ref <Set <TableItem >>(new Set ([]))
328
+ const isSelecting = computed (() => selectedItems .value .size > 0 )
329
+
317
330
const tableClasses = computed (() => ({
318
331
[` align-${props .align } ` ]: props .align !== undefined ,
319
332
' b-table-selectable' : selectableBoolean .value ,
@@ -340,17 +353,6 @@ const containerAttrs = computed(() => ({
340
353
stickyHeader: props .stickyHeader ,
341
354
}))
342
355
343
- const itemHelper = useItemHelper ()
344
-
345
- itemHelper .filterEvent .value = async (items ) => {
346
- if (usesProvider .value ) {
347
- await callItemsProvider ()
348
- return
349
- }
350
- const clone = await cloneDeepAsync (items )
351
- emit (' filtered' , clone )
352
- }
353
-
354
356
const computedFields = computed (() => itemHelper .normaliseFields (props .fields , props .items ))
355
357
const computedFieldsTotal = computed (
356
358
() => computedFields .value .length + (selectableBoolean .value ? 1 : 0 )
@@ -359,6 +361,15 @@ const computedFieldsTotal = computed(
359
361
const isFilterableTable = computed (() => props .filter !== undefined && props .filter !== ' ' )
360
362
const usesProvider = computed (() => props .provider !== undefined )
361
363
364
+ const addSelectableCell = computed (
365
+ () => selectableBoolean .value && (!! props .selectHead || slots .selectHead !== undefined )
366
+ )
367
+
368
+ const isSortable = computed (
369
+ () =>
370
+ props .fields .filter ((field ) => (typeof field === ' string' ? false : field .sortable )).length > 0
371
+ )
372
+
362
373
const requireItemsMapping = computed (() => isSortable .value && sortInternalBoolean .value === true )
363
374
const computedItems = computed (() => {
364
375
if (usesProvider .value ) return itemHelper .internalItems .value
@@ -384,26 +395,21 @@ const headerClicked = (field: TableField, event: MouseEvent, isFooter = false) =
384
395
385
396
handleFieldSorting (field )
386
397
}
398
+
387
399
const onRowClick = (row : TableItem , index : number , e : MouseEvent ) => {
388
400
emit (' rowClicked' , row , index , e )
389
401
390
402
handleRowSelection (row , index , e .shiftKey )
391
403
}
392
404
const onRowDblClick = (row : TableItem , index : number , e : MouseEvent ) =>
393
405
emit (' rowDblClicked' , row , index , e )
406
+
394
407
const onRowMouseEnter = (row : TableItem , index : number , e : MouseEvent ) =>
395
408
emit (' rowHovered' , row , index , e )
409
+
396
410
const onRowMouseLeave = (row : TableItem , index : number , e : MouseEvent ) =>
397
411
emit (' rowUnhovered' , row , index , e )
398
412
399
- const addSelectableCell = computed (
400
- () => selectableBoolean .value && (!! props .selectHead || slots .selectHead !== undefined )
401
- )
402
-
403
- const isSortable = computed (
404
- () =>
405
- props .fields .filter ((field ) => (typeof field === ' string' ? false : field .sortable )).length > 0
406
- )
407
413
const handleFieldSorting = (field : TableField ) => {
408
414
if (! isSortable .value ) return
409
415
@@ -419,13 +425,11 @@ const handleFieldSorting = (field: TableField) => {
419
425
}
420
426
}
421
427
422
- const selectedItems = ref <Set <TableItem >>(new Set ([]))
423
- const isSelecting = computed (() => selectedItems .value .size > 0 )
424
-
425
428
const notifySelectionEvent = () => {
426
429
if (! selectableBoolean .value ) return
427
430
emit (' selection' , Array .from (selectedItems .value ))
428
431
}
432
+
429
433
const handleRowSelection = (row : TableItem , index : number , shiftClicked = false ) => {
430
434
if (! selectableBoolean .value ) return
431
435
@@ -517,6 +521,7 @@ const getFieldColumnClasses = (field: TableFieldObject) => [
517
521
' b-table-sticky-column' : field .stickyColumn ,
518
522
},
519
523
]
524
+
520
525
const getFieldRowClasses = (field : TableFieldObject , tr : TableItem ) => [
521
526
field .class ,
522
527
field .tdClass ,
@@ -575,22 +580,6 @@ const unselectRow = (index: number) => {
575
580
notifySelectionEvent ()
576
581
}
577
582
578
- onMounted (() => {
579
- if (usesProvider .value ) {
580
- callItemsProvider ()
581
- }
582
- })
583
-
584
- watch (
585
- () => props .filter ,
586
- (filter , oldFilter ) => {
587
- if (filter === oldFilter || usesProvider .value ) return
588
- if (! filter ) {
589
- cloneDeepAsync (props .items ).then ((item ) => emit (' filtered' , item ))
590
- }
591
- }
592
- )
593
-
594
583
const providerPropsWatch = async (prop : string , val : any , oldVal : any ) => {
595
584
if (val === oldVal ) return
596
585
@@ -613,6 +602,16 @@ const providerPropsWatch = async (prop: string, val: any, oldVal: any) => {
613
602
await callItemsProvider ()
614
603
}
615
604
605
+ watch (
606
+ () => props .filter ,
607
+ (filter , oldFilter ) => {
608
+ if (filter === oldFilter || usesProvider .value ) return
609
+ if (! filter ) {
610
+ cloneDeepAsync (props .items ).then ((item ) => emit (' filtered' , item ))
611
+ }
612
+ }
613
+ )
614
+
616
615
watch (
617
616
() => internalBusyFlag .value ,
618
617
() => internalBusyFlag .value !== busyBoolean .value && emit (' update:busy' , internalBusyFlag .value )
@@ -642,6 +641,12 @@ watch(
642
641
(val , oldVal ) => providerPropsWatch (' sortDesc' , val , oldVal )
643
642
)
644
643
644
+ onMounted (() => {
645
+ if (usesProvider .value ) {
646
+ callItemsProvider ()
647
+ }
648
+ })
649
+
645
650
defineExpose ({
646
651
selectAllRows ,
647
652
clearSelected ,
0 commit comments