qdadm 0.26.1 → 0.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref, computed, watch, onMounted, inject, provide
|
|
1
|
+
import { ref, computed, watch, onMounted, inject, provide } from 'vue'
|
|
2
2
|
import { useRouter, useRoute } from 'vue-router'
|
|
3
3
|
import { useToast } from 'primevue/usetoast'
|
|
4
4
|
import { useConfirm } from 'primevue/useconfirm'
|
|
@@ -165,12 +165,19 @@ export function useListPageBuilder(config = {}) {
|
|
|
165
165
|
// Get HookRegistry for list:alter hook (optional, may not exist in tests)
|
|
166
166
|
const hooks = useHooks()
|
|
167
167
|
|
|
168
|
+
// ============ SESSION RESTORE ============
|
|
169
|
+
// Load saved filters + search from session storage (used by filterValues and searchQuery)
|
|
170
|
+
const savedSession = persistFilters ? getSessionFilters(filterSessionKey) : null
|
|
171
|
+
const savedSearch = savedSession?._search || ''
|
|
172
|
+
// Clone and remove _search from filters
|
|
173
|
+
const savedFilters = savedSession ? { ...savedSession } : null
|
|
174
|
+
if (savedFilters) delete savedFilters._search
|
|
175
|
+
|
|
168
176
|
// ============ STATE ============
|
|
169
177
|
const items = ref([])
|
|
170
178
|
const loading = ref(false)
|
|
171
179
|
const selected = ref([])
|
|
172
180
|
const deleting = ref(false)
|
|
173
|
-
let isRestoringFilters = false // Flag to skip watch during restore
|
|
174
181
|
|
|
175
182
|
// Pagination (load from cookie if available)
|
|
176
183
|
const page = ref(1)
|
|
@@ -182,8 +189,8 @@ export function useListPageBuilder(config = {}) {
|
|
|
182
189
|
const sortField = ref(defaultSort)
|
|
183
190
|
const sortOrder = ref(defaultSortOrder)
|
|
184
191
|
|
|
185
|
-
// Search
|
|
186
|
-
const searchQuery = ref(
|
|
192
|
+
// Search (initialized from session storage)
|
|
193
|
+
const searchQuery = ref(savedSearch)
|
|
187
194
|
const searchConfig = ref({
|
|
188
195
|
placeholder: 'Search...',
|
|
189
196
|
fields: [],
|
|
@@ -473,8 +480,7 @@ export function useListPageBuilder(config = {}) {
|
|
|
473
480
|
|
|
474
481
|
// ============ FILTERS ============
|
|
475
482
|
const filtersMap = ref(new Map())
|
|
476
|
-
//
|
|
477
|
-
const savedFilters = persistFilters ? getSessionFilters(filterSessionKey) : null
|
|
483
|
+
// filterValues initialized from savedFilters (loaded in SESSION RESTORE section)
|
|
478
484
|
const filterValues = ref(savedFilters || {})
|
|
479
485
|
|
|
480
486
|
function addFilter(name, filterConfig) {
|
|
@@ -897,55 +903,24 @@ export function useListPageBuilder(config = {}) {
|
|
|
897
903
|
}
|
|
898
904
|
|
|
899
905
|
/**
|
|
900
|
-
*
|
|
906
|
+
* Apply URL query params as overrides (session already loaded at init)
|
|
901
907
|
*/
|
|
902
908
|
function restoreFilters() {
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
// Priority 1: URL query params
|
|
906
|
-
const urlFilters = {}
|
|
909
|
+
// URL params override session values
|
|
907
910
|
for (const key of filtersMap.value.keys()) {
|
|
908
911
|
if (route.query[key] !== undefined) {
|
|
909
|
-
// Parse value (handle booleans, numbers, etc.)
|
|
910
912
|
let value = route.query[key]
|
|
911
913
|
if (value === 'true') value = true
|
|
912
914
|
else if (value === 'false') value = false
|
|
913
915
|
else if (value === 'null') value = null
|
|
914
916
|
else if (!isNaN(Number(value)) && value !== '') value = Number(value)
|
|
915
|
-
|
|
917
|
+
filterValues.value[key] = value
|
|
916
918
|
}
|
|
917
919
|
}
|
|
918
|
-
//
|
|
920
|
+
// URL search overrides session search
|
|
919
921
|
if (route.query.search) {
|
|
920
922
|
searchQuery.value = route.query.search
|
|
921
923
|
}
|
|
922
|
-
|
|
923
|
-
// Priority 2: Session storage (only for filters/search not in URL)
|
|
924
|
-
const sessionData = persistFilters ? getSessionFilters(filterSessionKey) : null
|
|
925
|
-
|
|
926
|
-
// Extract search from session (stored as _search)
|
|
927
|
-
if (sessionData?._search && !route.query.search) {
|
|
928
|
-
searchQuery.value = sessionData._search
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
// Remove _search from session data before merging with filters
|
|
932
|
-
const sessionFilters = sessionData ? { ...sessionData } : null
|
|
933
|
-
if (sessionFilters) delete sessionFilters._search
|
|
934
|
-
|
|
935
|
-
// Merge: URL takes priority over session
|
|
936
|
-
const restoredFilters = { ...sessionFilters, ...urlFilters }
|
|
937
|
-
|
|
938
|
-
// Apply restored values
|
|
939
|
-
for (const [name, value] of Object.entries(restoredFilters)) {
|
|
940
|
-
if (filtersMap.value.has(name)) {
|
|
941
|
-
filterValues.value[name] = value
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
// Reset flag after Vue processes updates
|
|
946
|
-
nextTick(() => {
|
|
947
|
-
isRestoringFilters = false
|
|
948
|
-
})
|
|
949
924
|
}
|
|
950
925
|
|
|
951
926
|
// ============ ACTIONS ============
|
|
@@ -1242,8 +1217,6 @@ export function useListPageBuilder(config = {}) {
|
|
|
1242
1217
|
// ============ WATCHERS ============
|
|
1243
1218
|
let searchTimeout = null
|
|
1244
1219
|
watch(searchQuery, () => {
|
|
1245
|
-
// Skip watch during restore (loadItems will be called after restore)
|
|
1246
|
-
if (isRestoringFilters) return
|
|
1247
1220
|
clearTimeout(searchTimeout)
|
|
1248
1221
|
searchTimeout = setTimeout(() => {
|
|
1249
1222
|
// Use onFiltersChanged to also sync URL params
|