21
21
/>
22
22
</slot >
23
23
24
- <slot
25
- name =" tableGlobalSearch"
26
- :has-global-search =" queryBuilderProps.globalSearch"
27
- :label =" queryBuilderProps.globalSearch ? queryBuilderProps.globalSearch.label : null"
28
- :value =" queryBuilderProps.globalSearch ? queryBuilderProps.globalSearch.value : null"
29
- :on-change =" changeGlobalSearchValue"
24
+ <div
25
+ v-if =" queryBuilderProps.globalSearch || canBeReset"
26
+ class =" flex flex-row "
27
+ :class =" {
28
+ 'space-x-4': queryBuilderProps.globalSearch && canBeReset,
29
+ 'flex-grow': queryBuilderProps.globalSearch
30
+ }"
30
31
>
31
- <div
32
- v-if =" queryBuilderProps.globalSearch"
33
- class =" flex-grow"
34
- >
35
- <TableGlobalSearch
36
- :label =" queryBuilderProps.globalSearch.label"
37
- :value =" queryBuilderProps.globalSearch.value"
32
+ <div class =" flex-grow" >
33
+ <slot
34
+ name =" tableGlobalSearch"
35
+ :has-global-search =" queryBuilderProps.globalSearch"
36
+ :label =" queryBuilderProps.globalSearch ? queryBuilderProps.globalSearch.label : null"
37
+ :value =" queryBuilderProps.globalSearch ? queryBuilderProps.globalSearch.value : null"
38
38
:on-change =" changeGlobalSearchValue"
39
- />
39
+ >
40
+ <TableGlobalSearch
41
+ v-if =" queryBuilderProps.globalSearch"
42
+ :label =" queryBuilderProps.globalSearch.label"
43
+ :value =" queryBuilderProps.globalSearch.value"
44
+ :on-change =" changeGlobalSearchValue"
45
+ />
46
+ </slot >
40
47
</div >
41
- </slot >
48
+
49
+ <slot
50
+ name =" tableReset"
51
+ can-be-reset =" canBeReset"
52
+ :on-click =" resetQuery"
53
+ >
54
+ <div >
55
+ <TableReset
56
+ v-if =" canBeReset"
57
+ :on-click =" resetQuery"
58
+ />
59
+ </div >
60
+ </slot >
61
+ </div >
62
+
42
63
43
64
<slot
44
65
name =" tableAddSearchRow"
@@ -170,10 +191,12 @@ import TableColumns from "./TableColumns.vue";
170
191
import TableFilter from " ./TableFilter.vue" ;
171
192
import TableGlobalSearch from " ./TableGlobalSearch.vue" ;
172
193
import TableSearchRows from " ./TableSearchRows.vue" ;
194
+ import TableReset from " ./TableReset.vue" ;
173
195
import TableWrapper from " ./TableWrapper.vue" ;
174
- import { computed , ref , watch } from " vue"
196
+ import { computed , nextTick , ref , watch } from " vue"
175
197
import qs from " qs" ;
176
198
import clone from " lodash-es/clone" ;
199
+ import each from " lodash-es/each" ;
177
200
import filter from " lodash-es/filter" ;
178
201
import findKey from " lodash-es/findKey" ;
179
202
import forEach from " lodash-es/forEach" ;
@@ -313,7 +336,6 @@ const hasData = computed(() => {
313
336
314
337
//
315
338
316
-
317
339
function disableSearchInput (key ) {
318
340
forcedVisibleSearchInputs .value = forcedVisibleSearchInputs .value .filter ((search ) => search != key);
319
341
@@ -324,7 +346,55 @@ function showSearchInput(key) {
324
346
forcedVisibleSearchInputs .value .push (key);
325
347
}
326
348
327
- //
349
+ const updates = ref (0 )
350
+
351
+ const canBeReset = computed (() => {
352
+ if (updates .value < 0 ){
353
+ return false ;
354
+ }
355
+
356
+ if (forcedVisibleSearchInputs .value .length > 0 ){
357
+ return true ;
358
+ }
359
+
360
+ const query = qs .parse (location .search .substring (1 ))
361
+ const keys = Object .keys (query);
362
+
363
+ if (keys .length === 0 ) {
364
+ return false ;
365
+ }
366
+
367
+ if (keys .length === 1 && query .remember === " forget" ){
368
+ return false ;
369
+ }
370
+ if (keys .length === 1 && query .page == 1 ){
371
+ return false ;
372
+ }
373
+
374
+ return true ;
375
+ });
376
+
377
+ function resetQuery () {
378
+ forcedVisibleSearchInputs .value = [];
379
+
380
+ each (queryBuilderData .value .filters , (filter , key )=> {
381
+ queryBuilderData .value .filters [key].value = null ;
382
+ })
383
+
384
+ each (queryBuilderData .value .searchInputs , (filter , key )=> {
385
+ queryBuilderData .value .searchInputs [key].value = null ;
386
+ })
387
+
388
+ each (queryBuilderData .value .columns , (column , key ) => {
389
+ queryBuilderData .value .columns [key].hidden = column .can_be_hidden
390
+ ? ! queryBuilderProps .value .defaultVisibleToggleableColumns .includes (column .key )
391
+ : false ;
392
+ })
393
+
394
+ queryBuilderData .value .sort = null ;
395
+ queryBuilderData .value .cursor = null ;
396
+ queryBuilderData .value .page = 1 ;
397
+ }
328
398
329
399
const debounceTimeouts = {};
330
400
@@ -398,14 +468,13 @@ function getColumnsForQuery() {
398
468
}).sort ();
399
469
400
470
if (isEqual (visibleColumnKeys, queryBuilderProps .value .defaultVisibleToggleableColumns )){
401
- visibleColumnKeys = {};
471
+ return {};
402
472
}
403
473
404
474
return visibleColumnKeys;
405
475
}
406
476
407
477
function dataForNewQueryString () {
408
-
409
478
const filterForQuery = getFilterForQuery ()
410
479
const columnsForQuery = getColumnsForQuery ()
411
480
@@ -489,6 +558,9 @@ function visit(url) {
489
558
},
490
559
onSuccess () {
491
560
queryBuilderProps .value = props .inertia .page .props .queryBuilderProps [props .name ] || {}
561
+ queryBuilderData .value .cursor = queryBuilderProps .value .cursor
562
+ queryBuilderData .value .page = queryBuilderProps .value .page
563
+ updates .value ++ ;
492
564
}
493
565
}
494
566
);
0 commit comments