fix filtering and sorting
This commit is contained in:
parent
ba507f8e6a
commit
3b86ed0ee7
7 changed files with 334 additions and 201 deletions
|
|
@ -5,7 +5,7 @@ export const useFiltersStore = defineStore("filters", {
|
|||
state: () => ({
|
||||
// Store filters by table/component name
|
||||
tableFilters: {},
|
||||
// Store sorting by table/component name
|
||||
// Store sorting by table/component name - now supports multiple sorts as array
|
||||
tableSorting: {},
|
||||
}),
|
||||
actions: {
|
||||
|
|
@ -16,7 +16,43 @@ export const useFiltersStore = defineStore("filters", {
|
|||
|
||||
// Generic method to get sorting for a specific table
|
||||
getTableSorting(tableName) {
|
||||
return this.tableSorting[tableName] || { field: null, order: null };
|
||||
return this.tableSorting[tableName] || [];
|
||||
},
|
||||
|
||||
// Get sorting in backend format: [["field", "asc/desc"], ["field", "asc/desc"]]
|
||||
getTableSortingForBackend(tableName) {
|
||||
const sorting = this.tableSorting[tableName] || [];
|
||||
console.log("getTableSortingForBackend - raw sorting:", sorting);
|
||||
|
||||
const result = sorting.map((sort) => {
|
||||
const direction = sort.order === 1 ? "asc" : "desc";
|
||||
console.log("Converting sort:", {
|
||||
field: sort.field,
|
||||
order: sort.order,
|
||||
direction,
|
||||
});
|
||||
return [sort.field, direction];
|
||||
});
|
||||
|
||||
console.log("getTableSortingForBackend result:", result);
|
||||
return result;
|
||||
},
|
||||
|
||||
// Get primary sort field for compatibility with PrimeVue
|
||||
getPrimarySortField(tableName) {
|
||||
const sorting = this.tableSorting[tableName] || [];
|
||||
return sorting.length > 0 ? sorting[0].field : null;
|
||||
},
|
||||
|
||||
// Get primary sort order for compatibility with PrimeVue
|
||||
getPrimarySortOrder(tableName) {
|
||||
const sorting = this.tableSorting[tableName] || [];
|
||||
if (sorting.length > 0) {
|
||||
const order = sorting[0].order;
|
||||
console.log("getPrimarySortOrder returning:", order, typeof order);
|
||||
return order;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
// Generic method to update a specific filter
|
||||
|
|
@ -37,13 +73,62 @@ export const useFiltersStore = defineStore("filters", {
|
|||
}
|
||||
},
|
||||
|
||||
// Generic method to update sorting for a table
|
||||
// Generic method to update sorting for a table (supports single sort from PrimeVue)
|
||||
updateTableSorting(tableName, field, order) {
|
||||
if (!this.tableSorting[tableName]) {
|
||||
this.tableSorting[tableName] = { field: null, order: null };
|
||||
this.tableSorting[tableName] = [];
|
||||
}
|
||||
this.tableSorting[tableName].field = field;
|
||||
this.tableSorting[tableName].order = order;
|
||||
|
||||
// Clear sorting if no field provided or order is null/undefined
|
||||
if (!field || order === null || order === undefined) {
|
||||
console.log("Clearing sort for table:", tableName);
|
||||
this.tableSorting[tableName] = [];
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure order is a number (PrimeVue uses 1 for asc, -1 for desc)
|
||||
let numericOrder = order;
|
||||
if (typeof order === "string") {
|
||||
numericOrder = order.toLowerCase() === "asc" ? 1 : -1;
|
||||
} else if (typeof order === "number") {
|
||||
// Ensure it's 1 or -1
|
||||
numericOrder = order > 0 ? 1 : -1;
|
||||
} else {
|
||||
console.warn("Invalid sort order type:", typeof order, order);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("updateTableSorting called with:", {
|
||||
tableName,
|
||||
field,
|
||||
order,
|
||||
numericOrder,
|
||||
});
|
||||
|
||||
// Replace existing sort with new single sort (PrimeVue behavior)
|
||||
this.tableSorting[tableName] = [{ field, order: numericOrder }];
|
||||
},
|
||||
|
||||
// Method to add or update a specific sort field (for multi-sort support)
|
||||
addTableSort(tableName, field, order) {
|
||||
if (!this.tableSorting[tableName]) {
|
||||
this.tableSorting[tableName] = [];
|
||||
}
|
||||
|
||||
// Remove existing sort for this field
|
||||
this.tableSorting[tableName] = this.tableSorting[tableName].filter(
|
||||
(sort) => sort.field !== field,
|
||||
);
|
||||
|
||||
// Add new sort if field and order provided
|
||||
if (field && order) {
|
||||
this.tableSorting[tableName].push({ field, order });
|
||||
}
|
||||
},
|
||||
|
||||
// Method to set multiple sorts at once
|
||||
setTableSorting(tableName, sortArray) {
|
||||
this.tableSorting[tableName] = sortArray || [];
|
||||
},
|
||||
|
||||
// Method to clear all filters for a table
|
||||
|
|
@ -57,9 +142,7 @@ export const useFiltersStore = defineStore("filters", {
|
|||
|
||||
// Method to clear sorting for a table
|
||||
clearTableSorting(tableName) {
|
||||
if (this.tableSorting[tableName]) {
|
||||
this.tableSorting[tableName] = { field: null, order: null };
|
||||
}
|
||||
this.tableSorting[tableName] = [];
|
||||
},
|
||||
|
||||
// Method to clear both filters and sorting for a table
|
||||
|
|
@ -87,7 +170,7 @@ export const useFiltersStore = defineStore("filters", {
|
|||
// Method to initialize sorting for a table
|
||||
initializeTableSorting(tableName) {
|
||||
if (!this.tableSorting[tableName]) {
|
||||
this.tableSorting[tableName] = { field: null, order: null };
|
||||
this.tableSorting[tableName] = [];
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -102,7 +185,7 @@ export const useFiltersStore = defineStore("filters", {
|
|||
// Method to check if sorting is active
|
||||
isSortingActive(tableName) {
|
||||
const sorting = this.getTableSorting(tableName);
|
||||
return sorting.field !== null && sorting.order !== null;
|
||||
return sorting.length > 0;
|
||||
},
|
||||
|
||||
// Method to get all table state (filters + sorting)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue