109
109
/>
110
110
</slot >
111
111
112
+ <TableActiveFilters
113
+ v-if =" queryBuilderProps.hasEnabledFilters"
114
+ :filters =" queryBuilderProps.filters"
115
+ :on-filter-change =" changeFilterValue"
116
+ />
117
+
112
118
<slot
113
119
name =" tableWrapper"
114
120
:meta =" resourceMeta"
@@ -195,11 +201,12 @@ import HeaderCell from "./HeaderCell.vue";
195
201
import TableAddSearchRow from " ./TableAddSearchRow.vue" ;
196
202
import TableColumns from " ./TableColumns.vue" ;
197
203
import TableFilter from " ./TableFilter.vue" ;
204
+ import TableActiveFilters from " ./TableActiveFilters.vue" ;
198
205
import TableGlobalSearch from " ./TableGlobalSearch.vue" ;
199
206
import TableSearchRows from " ./TableSearchRows.vue" ;
200
207
import TableReset from " ./TableReset.vue" ;
201
208
import TableWrapper from " ./TableWrapper.vue" ;
202
- import { computed , onMounted , ref , watch , onUnmounted , getCurrentInstance , Transition , provide } from " vue" ;
209
+ import { computed , getCurrentInstance , onMounted , onUnmounted , provide , ref , Transition , watch } from " vue" ;
203
210
import qs from " qs" ;
204
211
import clone from " lodash-es/clone" ;
205
212
import filter from " lodash-es/filter" ;
@@ -272,7 +279,7 @@ const props = defineProps({
272
279
required: false ,
273
280
},
274
281
275
- activeClasses: {
282
+ activeClasses: {
276
283
type: Object ,
277
284
required: false ,
278
285
default () {
@@ -303,7 +310,7 @@ const queryBuilderProps = computed(() => {
303
310
304
311
const queryBuilderData = ref (queryBuilderProps .value );
305
312
306
- const pageName = computed (() => {
313
+ const pageName = computed (() => {
307
314
return queryBuilderProps .value .pageName ;
308
315
});
309
316
@@ -312,19 +319,19 @@ const forcedVisibleSearchInputs = ref([]);
312
319
const tableFieldset = ref (null );
313
320
314
321
const hasOnlyData = computed (() => {
315
- if (queryBuilderProps .value .hasToggleableColumns ) {
322
+ if (queryBuilderProps .value .hasToggleableColumns ) {
316
323
return false ;
317
324
}
318
325
319
- if (queryBuilderProps .value .hasFilters ) {
326
+ if (queryBuilderProps .value .hasFilters ) {
320
327
return false ;
321
328
}
322
329
323
- if (queryBuilderProps .value .hasSearchInputs ) {
330
+ if (queryBuilderProps .value .hasSearchInputs ) {
324
331
return false ;
325
332
}
326
333
327
- if (queryBuilderProps .value .globalSearch ) {
334
+ if (queryBuilderProps .value .globalSearch ) {
328
335
return false ;
329
336
}
330
337
@@ -333,26 +340,26 @@ const hasOnlyData = computed(() => {
333
340
});
334
341
335
342
const resourceData = computed (() => {
336
- if (Object .keys (props .resource ).length === 0 ){
343
+ if (Object .keys (props .resource ).length === 0 ) {
337
344
return props .data ;
338
345
}
339
346
340
- if (" data" in props .resource ) {
347
+ if (" data" in props .resource ) {
341
348
return props .resource .data ;
342
349
}
343
350
344
351
return props .resource ;
345
352
});
346
353
347
354
const resourceMeta = computed (() => {
348
- if (Object .keys (props .resource ).length === 0 ){
355
+ if (Object .keys (props .resource ).length === 0 ) {
349
356
return props .meta ;
350
357
}
351
358
352
- if (" links" in props .resource && " meta" in props .resource ) {
353
- if (Object .keys (props .resource .links ).length === 4
354
- && " next" in props .resource .links
355
- && " prev" in props .resource .links ) {
359
+ if (" links" in props .resource && " meta" in props .resource ) {
360
+ if (Object .keys (props .resource .links ).length === 4
361
+ && " next" in props .resource .links
362
+ && " prev" in props .resource .links ) {
356
363
return {
357
364
... props .resource .meta ,
358
365
next_page_url: props .resource .links .next ,
@@ -361,19 +368,19 @@ const resourceMeta = computed(() => {
361
368
}
362
369
}
363
370
364
- if (" meta" in props .resource ) {
371
+ if (" meta" in props .resource ) {
365
372
return props .resource .meta ;
366
373
}
367
374
368
375
return props .resource ;
369
376
});
370
377
371
378
const hasData = computed (() => {
372
- if (resourceData .value .length > 0 ){
379
+ if (resourceData .value .length > 0 ) {
373
380
return true ;
374
381
}
375
382
376
- if (resourceMeta .value .total > 0 ) {
383
+ if (resourceMeta .value .total > 0 ) {
377
384
return true ;
378
385
}
379
386
@@ -393,15 +400,15 @@ function showSearchInput(key) {
393
400
}
394
401
395
402
const canBeReset = computed (() => {
396
- if (forcedVisibleSearchInputs .value .length > 0 ){
403
+ if (forcedVisibleSearchInputs .value .length > 0 ) {
397
404
return true ;
398
405
}
399
406
400
407
const queryStringData = qs .parse (location .search .substring (1 ));
401
408
402
409
const page = queryStringData[pageName .value ];
403
410
404
- if (page > 1 ) {
411
+ if (page > 1 ) {
405
412
return true ;
406
413
}
407
414
@@ -411,11 +418,11 @@ const canBeReset = computed(() => {
411
418
forEach ([" filter" , " columns" , " cursor" , " sort" ], (key ) => {
412
419
const value = queryStringData[prefix + key];
413
420
414
- if (key === " sort" && value === queryBuilderProps .value .defaultSort ) {
421
+ if (key === " sort" && value === queryBuilderProps .value .defaultSort ) {
415
422
return ;
416
423
}
417
424
418
- if (value !== undefined ) {
425
+ if (value !== undefined ) {
419
426
dirty = true ;
420
427
}
421
428
});
@@ -451,7 +458,7 @@ function changeSearchInputValue(key, value) {
451
458
clearTimeout (debounceTimeouts[key]);
452
459
453
460
debounceTimeouts[key] = setTimeout (() => {
454
- if (visitCancelToken .value && props .preventOverlappingRequests ){
461
+ if (visitCancelToken .value && props .preventOverlappingRequests ) {
455
462
visitCancelToken .value .cancel ();
456
463
}
457
464
@@ -522,7 +529,7 @@ function getColumnsForQuery() {
522
529
return column .key ;
523
530
}).sort ();
524
531
525
- if (isEqual (visibleColumnKeys, queryBuilderProps .value .defaultVisibleToggleableColumns )){
532
+ if (isEqual (visibleColumnKeys, queryBuilderProps .value .defaultVisibleToggleableColumns )) {
526
533
return {};
527
534
}
528
535
@@ -535,11 +542,11 @@ function dataForNewQueryString() {
535
542
536
543
const queryData = {};
537
544
538
- if (Object .keys (filterForQuery).length > 0 ) {
545
+ if (Object .keys (filterForQuery).length > 0 ) {
539
546
queryData .filter = filterForQuery;
540
547
}
541
548
542
- if (Object .keys (columnsForQuery).length > 0 ) {
549
+ if (Object .keys (columnsForQuery).length > 0 ) {
543
550
queryData .columns = columnsForQuery;
544
551
}
545
552
@@ -548,20 +555,20 @@ function dataForNewQueryString() {
548
555
const sort = queryBuilderData .value .sort ;
549
556
const perPage = queryBuilderData .value .perPage ;
550
557
551
- if (cursor) {
558
+ if (cursor) {
552
559
queryData .cursor = cursor;
553
560
}
554
561
555
- if (page > 1 ) {
562
+ if (page > 1 ) {
556
563
queryData .page = page;
557
564
}
558
565
559
- if (perPage > 1 ) {
566
+ if (perPage > 1 ) {
560
567
queryData .perPage = perPage;
561
568
}
562
569
563
570
564
- if (sort) {
571
+ if (sort) {
565
572
queryData .sort = sort;
566
573
}
567
574
@@ -579,10 +586,10 @@ function generateNewQueryString() {
579
586
580
587
delete queryStringData[pageName .value ];
581
588
582
- forEach (dataForNewQueryString (), (value , key ) => {
583
- if (key === " page" ) {
589
+ forEach (dataForNewQueryString (), (value , key ) => {
590
+ if (key === " page" ) {
584
591
queryStringData[pageName .value ] = value;
585
- } else if (key === " perPage" ) {
592
+ } else if (key === " perPage" ) {
586
593
queryStringData .perPage = value;
587
594
} else {
588
595
queryStringData[prefix + key] = value;
@@ -613,7 +620,7 @@ const isVisiting = ref(false);
613
620
const visitCancelToken = ref (null );
614
621
615
622
function visit (url ) {
616
- if (! url) {
623
+ if (! url) {
617
624
return ;
618
625
}
619
626
@@ -624,7 +631,7 @@ function visit(url) {
624
631
replace: true ,
625
632
preserveState: true ,
626
633
preserveScroll: props .preserveScroll !== false ,
627
- onBefore (){
634
+ onBefore () {
628
635
isVisiting .value = true ;
629
636
},
630
637
onCancelToken (cancelToken ) {
@@ -634,12 +641,12 @@ function visit(url) {
634
641
isVisiting .value = false ;
635
642
},
636
643
onSuccess () {
637
- if (" queryBuilderProps" in $inertia .page .props ){
644
+ if (" queryBuilderProps" in $inertia .page .props ) {
638
645
queryBuilderData .value .cursor = queryBuilderProps .value .cursor ;
639
646
queryBuilderData .value .page = queryBuilderProps .value .page ;
640
647
}
641
648
642
- if (props .preserveScroll === " table-top" ) {
649
+ if (props .preserveScroll === " table-top" ) {
643
650
const offset = - 8 ;
644
651
const top = tableFieldset .value .getBoundingClientRect ().top + window .pageYOffset + offset;
645
652
@@ -653,7 +660,7 @@ function visit(url) {
653
660
}
654
661
655
662
watch (queryBuilderData, () => {
656
- visit (location .pathname + " ?" + generateNewQueryString ());
663
+ visit (location .pathname + " ?" + generateNewQueryString ());
657
664
}, { deep: true });
658
665
659
666
const inertiaListener = () => {
@@ -671,7 +678,7 @@ onUnmounted(() => {
671
678
//
672
679
673
680
function sortBy (column ) {
674
- if (queryBuilderData .value .sort == column) {
681
+ if (queryBuilderData .value .sort == column) {
675
682
queryBuilderData .value .sort = ` -${ column} ` ;
676
683
} else {
677
684
queryBuilderData .value .sort = column;
0 commit comments