From 68406b4ae4fdd9a5afa5426899a03407aba273ec Mon Sep 17 00:00:00 2001 From: Hydra Builder Date: Sat, 18 Apr 2026 18:12:40 +0000 Subject: [PATCH 01/36] feat(case-management): add case list filters, search, and integrate custom properties and documents panels (#205) --- src/views/cases/CaseDetail.vue | 21 ++++ src/views/cases/CaseList.vue | 214 ++++++++++++++++++++++++++++++++- 2 files changed, 234 insertions(+), 1 deletion(-) diff --git a/src/views/cases/CaseDetail.vue b/src/views/cases/CaseDetail.vue index 565bc68f..b36d143d 100644 --- a/src/views/cases/CaseDetail.vue +++ b/src/views/cases/CaseDetail.vue @@ -209,6 +209,23 @@ @handler-changed="onHandlerChanged" /> + + + + + + + + + + import(/* webpackChunkName: "map" */ './components/LocationTab.vue') @@ -490,6 +509,8 @@ export default { DeadlineIndicator, BeroepEscalationPanel, CourtProceedingsPanel, + CustomPropertiesPanel, + DocumentChecklist, }, props: { caseId: { diff --git a/src/views/cases/CaseList.vue b/src/views/cases/CaseList.vue index 6cd60e13..f77877d0 100644 --- a/src/views/cases/CaseList.vue +++ b/src/views/cases/CaseList.vue @@ -5,11 +5,60 @@ @created="onCaseCreated" @close="showCreateDialog = false" /> + +
+
+ +
+ +
+
+ + +
+ +
+ + +
+ +
+ +
+ + +
+
+ { + // Search filter (title, description, identifier) + if (this.searchQuery) { + const query = this.searchQuery.toLowerCase() + const title = (caseObj.title || '').toLowerCase() + const description = (caseObj.description || '').toLowerCase() + const identifier = (caseObj.identifier || '').toLowerCase() + + if (!title.includes(query) && !description.includes(query) && !identifier.includes(query)) { + return false + } + } + + // Priority filter + if (this.filterPriority && caseObj.priority !== this.filterPriority) { + return false + } + + // Handler filter + if (this.filterHandler) { + const handler = (caseObj.assignee || '').toLowerCase() + if (!handler.includes(this.filterHandler.toLowerCase())) { + return false + } + } + + // Overdue filter + if (this.filterOverdue) { + const isFinal = this.isAtFinalStatus(caseObj) + if (!isCaseOverdue(caseObj, isFinal)) { + return false + } + } + + return true + }) + }, + }, + watch: { objects: { handler(newObjects) { @@ -211,11 +311,123 @@ export default { } } }, + + onSearchInput() { + // Search is applied via the computed filteredObjects property + // This method can be used for debounced API calls if needed in future + }, + + onFilterChange() { + // Filters are applied via the computed filteredObjects property + // This method can be extended for advanced filtering in future versions + }, + + clearFilters() { + this.searchQuery = '' + this.filterPriority = '' + this.filterHandler = '' + this.filterOverdue = false + }, }, }