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 } 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" ;
@@ -271,8 +278,21 @@ const props = defineProps({
271
278
},
272
279
required: false ,
273
280
},
281
+
282
+ activeClasses: {
283
+ type: Object ,
284
+ required: false ,
285
+ default () {
286
+ return {
287
+ text: " text-green-400" ,
288
+ border: " border-green-300"
289
+ };
290
+ }
291
+ }
274
292
});
275
293
294
+ provide (" activeClasses" , props .activeClasses );
295
+
276
296
const app = getCurrentInstance ();
277
297
const $inertia = app ? app .appContext .config .globalProperties .$inertia : props .inertia ;
278
298
@@ -290,7 +310,7 @@ const queryBuilderProps = computed(() => {
290
310
291
311
const queryBuilderData = ref (queryBuilderProps .value );
292
312
293
- const pageName = computed (() => {
313
+ const pageName = computed (() => {
294
314
return queryBuilderProps .value .pageName ;
295
315
});
296
316
@@ -299,19 +319,19 @@ const forcedVisibleSearchInputs = ref([]);
299
319
const tableFieldset = ref (null );
300
320
301
321
const hasOnlyData = computed (() => {
302
- if (queryBuilderProps .value .hasToggleableColumns ) {
322
+ if (queryBuilderProps .value .hasToggleableColumns ) {
303
323
return false ;
304
324
}
305
325
306
- if (queryBuilderProps .value .hasFilters ) {
326
+ if (queryBuilderProps .value .hasFilters ) {
307
327
return false ;
308
328
}
309
329
310
- if (queryBuilderProps .value .hasSearchInputs ) {
330
+ if (queryBuilderProps .value .hasSearchInputs ) {
311
331
return false ;
312
332
}
313
333
314
- if (queryBuilderProps .value .globalSearch ) {
334
+ if (queryBuilderProps .value .globalSearch ) {
315
335
return false ;
316
336
}
317
337
@@ -320,26 +340,26 @@ const hasOnlyData = computed(() => {
320
340
});
321
341
322
342
const resourceData = computed (() => {
323
- if (Object .keys (props .resource ).length === 0 ){
343
+ if (Object .keys (props .resource ).length === 0 ) {
324
344
return props .data ;
325
345
}
326
346
327
- if (" data" in props .resource ) {
347
+ if (" data" in props .resource ) {
328
348
return props .resource .data ;
329
349
}
330
350
331
351
return props .resource ;
332
352
});
333
353
334
354
const resourceMeta = computed (() => {
335
- if (Object .keys (props .resource ).length === 0 ){
355
+ if (Object .keys (props .resource ).length === 0 ) {
336
356
return props .meta ;
337
357
}
338
358
339
- if (" links" in props .resource && " meta" in props .resource ) {
340
- if (Object .keys (props .resource .links ).length === 4
341
- && " next" in props .resource .links
342
- && " 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 ) {
343
363
return {
344
364
... props .resource .meta ,
345
365
next_page_url: props .resource .links .next ,
@@ -348,19 +368,19 @@ const resourceMeta = computed(() => {
348
368
}
349
369
}
350
370
351
- if (" meta" in props .resource ) {
371
+ if (" meta" in props .resource ) {
352
372
return props .resource .meta ;
353
373
}
354
374
355
375
return props .resource ;
356
376
});
357
377
358
378
const hasData = computed (() => {
359
- if (resourceData .value .length > 0 ){
379
+ if (resourceData .value .length > 0 ) {
360
380
return true ;
361
381
}
362
382
363
- if (resourceMeta .value .total > 0 ) {
383
+ if (resourceMeta .value .total > 0 ) {
364
384
return true ;
365
385
}
366
386
@@ -380,15 +400,15 @@ function showSearchInput(key) {
380
400
}
381
401
382
402
const canBeReset = computed (() => {
383
- if (forcedVisibleSearchInputs .value .length > 0 ){
403
+ if (forcedVisibleSearchInputs .value .length > 0 ) {
384
404
return true ;
385
405
}
386
406
387
407
const queryStringData = qs .parse (location .search .substring (1 ));
388
408
389
409
const page = queryStringData[pageName .value ];
390
410
391
- if (page > 1 ) {
411
+ if (page > 1 ) {
392
412
return true ;
393
413
}
394
414
@@ -398,11 +418,11 @@ const canBeReset = computed(() => {
398
418
forEach ([" filter" , " columns" , " cursor" , " sort" ], (key ) => {
399
419
const value = queryStringData[prefix + key];
400
420
401
- if (key === " sort" && value === queryBuilderProps .value .defaultSort ) {
421
+ if (key === " sort" && value === queryBuilderProps .value .defaultSort ) {
402
422
return ;
403
423
}
404
424
405
- if (value !== undefined ) {
425
+ if (value !== undefined ) {
406
426
dirty = true ;
407
427
}
408
428
});
@@ -438,7 +458,7 @@ function changeSearchInputValue(key, value) {
438
458
clearTimeout (debounceTimeouts[key]);
439
459
440
460
debounceTimeouts[key] = setTimeout (() => {
441
- if (visitCancelToken .value && props .preventOverlappingRequests ){
461
+ if (visitCancelToken .value && props .preventOverlappingRequests ) {
442
462
visitCancelToken .value .cancel ();
443
463
}
444
464
@@ -509,7 +529,7 @@ function getColumnsForQuery() {
509
529
return column .key ;
510
530
}).sort ();
511
531
512
- if (isEqual (visibleColumnKeys, queryBuilderProps .value .defaultVisibleToggleableColumns )){
532
+ if (isEqual (visibleColumnKeys, queryBuilderProps .value .defaultVisibleToggleableColumns )) {
513
533
return {};
514
534
}
515
535
@@ -522,11 +542,11 @@ function dataForNewQueryString() {
522
542
523
543
const queryData = {};
524
544
525
- if (Object .keys (filterForQuery).length > 0 ) {
545
+ if (Object .keys (filterForQuery).length > 0 ) {
526
546
queryData .filter = filterForQuery;
527
547
}
528
548
529
- if (Object .keys (columnsForQuery).length > 0 ) {
549
+ if (Object .keys (columnsForQuery).length > 0 ) {
530
550
queryData .columns = columnsForQuery;
531
551
}
532
552
@@ -535,20 +555,20 @@ function dataForNewQueryString() {
535
555
const sort = queryBuilderData .value .sort ;
536
556
const perPage = queryBuilderData .value .perPage ;
537
557
538
- if (cursor) {
558
+ if (cursor) {
539
559
queryData .cursor = cursor;
540
560
}
541
561
542
- if (page > 1 ) {
562
+ if (page > 1 ) {
543
563
queryData .page = page;
544
564
}
545
565
546
- if (perPage > 1 ) {
566
+ if (perPage > 1 ) {
547
567
queryData .perPage = perPage;
548
568
}
549
569
550
570
551
- if (sort) {
571
+ if (sort) {
552
572
queryData .sort = sort;
553
573
}
554
574
@@ -566,10 +586,10 @@ function generateNewQueryString() {
566
586
567
587
delete queryStringData[pageName .value ];
568
588
569
- forEach (dataForNewQueryString (), (value , key ) => {
570
- if (key === " page" ) {
589
+ forEach (dataForNewQueryString (), (value , key ) => {
590
+ if (key === " page" ) {
571
591
queryStringData[pageName .value ] = value;
572
- } else if (key === " perPage" ) {
592
+ } else if (key === " perPage" ) {
573
593
queryStringData .perPage = value;
574
594
} else {
575
595
queryStringData[prefix + key] = value;
@@ -600,7 +620,7 @@ const isVisiting = ref(false);
600
620
const visitCancelToken = ref (null );
601
621
602
622
function visit (url ) {
603
- if (! url) {
623
+ if (! url) {
604
624
return ;
605
625
}
606
626
@@ -611,7 +631,7 @@ function visit(url) {
611
631
replace: true ,
612
632
preserveState: true ,
613
633
preserveScroll: props .preserveScroll !== false ,
614
- onBefore (){
634
+ onBefore () {
615
635
isVisiting .value = true ;
616
636
},
617
637
onCancelToken (cancelToken ) {
@@ -621,12 +641,12 @@ function visit(url) {
621
641
isVisiting .value = false ;
622
642
},
623
643
onSuccess () {
624
- if (" queryBuilderProps" in $inertia .page .props ){
644
+ if (" queryBuilderProps" in $inertia .page .props ) {
625
645
queryBuilderData .value .cursor = queryBuilderProps .value .cursor ;
626
646
queryBuilderData .value .page = queryBuilderProps .value .page ;
627
647
}
628
648
629
- if (props .preserveScroll === " table-top" ) {
649
+ if (props .preserveScroll === " table-top" ) {
630
650
const offset = - 8 ;
631
651
const top = tableFieldset .value .getBoundingClientRect ().top + window .pageYOffset + offset;
632
652
@@ -640,7 +660,7 @@ function visit(url) {
640
660
}
641
661
642
662
watch (queryBuilderData, () => {
643
- visit (location .pathname + " ?" + generateNewQueryString ());
663
+ visit (location .pathname + " ?" + generateNewQueryString ());
644
664
}, { deep: true });
645
665
646
666
const inertiaListener = () => {
@@ -658,7 +678,7 @@ onUnmounted(() => {
658
678
//
659
679
660
680
function sortBy (column ) {
661
- if (queryBuilderData .value .sort == column) {
681
+ if (queryBuilderData .value .sort == column) {
662
682
queryBuilderData .value .sort = ` -${ column} ` ;
663
683
} else {
664
684
queryBuilderData .value .sort = column;
0 commit comments