fix filtering and sorting

This commit is contained in:
Casey 2025-11-12 07:01:26 -06:00
parent ba507f8e6a
commit 3b86ed0ee7
7 changed files with 334 additions and 201 deletions

View file

@ -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)