feat: Kunden archivieren + Ticket-Status-Checkbox-Filter
Kunden: - Neues Feld customers.archived; Archivieren/Wiederherstellen-Button in der Kundendetailseite, 'Archiviert'-Badge - CustomersPage: vierter Filter-Tab 'Archiviert'; archivierte Kunden aus Alle/Leads/Feste Kunden ausgeblendet, nur im Archiv-Tab sichtbar Tickets: - Status-Mehrfachauswahl per Checkbox im Filterbereich; Default alle Status ausser 'Closed' (= archiviert). 'Standard' / 'Alle inkl. Archiv' Shortcuts - useWorkorders: Statusfilter serverseitig via Query.equal(array) statt Client-Filter nach dem Limit (behebt Bug, bei dem archivierte Tickets die neuesten Slots belegten und aktive verdraengten) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ff536b048f
commit
42f729abfc
5 files changed
+82
-37
No files matched your search
+10
-28
@@ -117,22 +117,19 @@ export function useWorkorders(filters = {}) {
|
||||
queries.push(Query.limit(activeFilters.limit))
|
||||
}
|
||||
|
||||
// Appwrite Query.equal mit Array = OR-Match. Serverseitig filtern, damit
|
||||
// das Limit erst NACH dem Statusfilter greift (sonst wuerden archivierte
|
||||
// Tickets die neuesten Slots belegen und aktive verdraengen).
|
||||
if (activeFilters.status && activeFilters.status.length > 0) {
|
||||
if (activeFilters.status.length === 1) {
|
||||
queries.push(Query.equal('status', activeFilters.status[0]))
|
||||
}
|
||||
queries.push(Query.equal('status', activeFilters.status))
|
||||
}
|
||||
|
||||
|
||||
if (activeFilters.type && activeFilters.type.length > 0) {
|
||||
if (activeFilters.type.length === 1) {
|
||||
queries.push(Query.equal('type', activeFilters.type[0]))
|
||||
}
|
||||
queries.push(Query.equal('type', activeFilters.type))
|
||||
}
|
||||
|
||||
|
||||
if (activeFilters.priority && activeFilters.priority.length > 0) {
|
||||
if (activeFilters.priority.length === 1) {
|
||||
queries.push(Query.equal('priority', activeFilters.priority[0]))
|
||||
}
|
||||
queries.push(Query.equal('priority', activeFilters.priority))
|
||||
}
|
||||
|
||||
if (activeFilters.customerId) {
|
||||
@@ -156,23 +153,8 @@ export function useWorkorders(filters = {}) {
|
||||
COLLECTIONS.WORKORDERS,
|
||||
queries
|
||||
)
|
||||
|
||||
// Clientseitige Filterung für Arrays (da Query.or() nicht verfügbar ist)
|
||||
let filteredDocs = response.documents
|
||||
|
||||
if (activeFilters.status && activeFilters.status.length > 1) {
|
||||
filteredDocs = filteredDocs.filter(doc => activeFilters.status.includes(doc.status))
|
||||
}
|
||||
|
||||
if (activeFilters.type && activeFilters.type.length > 1) {
|
||||
filteredDocs = filteredDocs.filter(doc => activeFilters.type.includes(doc.type))
|
||||
}
|
||||
|
||||
if (activeFilters.priority && activeFilters.priority.length > 1) {
|
||||
filteredDocs = filteredDocs.filter(doc => activeFilters.priority.includes(doc.priority))
|
||||
}
|
||||
|
||||
setWorkorders(filteredDocs)
|
||||
|
||||
setWorkorders(response.documents)
|
||||
setError(null)
|
||||
} catch (err) {
|
||||
let errorMessage = err.message || 'Fehler beim Laden der Tickets'
|
||||
|
||||
Reference in new issue
Block a user