From 7e36986a26110373f26559818e44d2282f260837 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Mon, 4 Jan 2021 00:20:10 -0800
Subject: [PATCH 1/8] Clearing filters on saved views should reset them to
initial rules
---
.../document-list.component.html | 4 +-
.../document-list/document-list.component.ts | 45 +++++++++++++++----
.../filter-editor.component.html | 6 +--
.../filter-editor/filter-editor.component.ts | 28 +++++-------
4 files changed, 52 insertions(+), 31 deletions(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html
index e4d7256e1..90893baee 100644
--- a/src-ui/src/app/components/document-list/document-list.component.html
+++ b/src-ui/src/app/components/document-list/document-list.component.html
@@ -5,7 +5,7 @@
Select
-
+
@@ -78,7 +78,7 @@
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index 1f29cb901..685d40a44 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -30,10 +30,6 @@ export class DocumentListComponent implements OnInit {
displayMode = 'smallCards' // largeCards, smallCards, details
- get isFiltered() {
- return this.list.filterRules?.length > 0
- }
-
getTitle() {
return this.list.savedViewTitle || $localize`Documents`
}
@@ -62,18 +58,16 @@ export class DocumentListComponent implements OnInit {
this.router.navigate(["404"])
return
}
-
this.list.savedView = view
- this.list.reload()
})
} else {
this.list.savedView = null
- this.list.reload()
}
+
+ this.list.reload()
})
}
-
loadViewConfig(view: PaperlessSavedView) {
this.list.load(view)
this.list.reload()
@@ -99,6 +93,7 @@ export class DocumentListComponent implements OnInit {
sort_reverse: this.list.sortReverse,
sort_field: this.list.sortField
}
+
this.savedViewService.create(savedView).subscribe(() => {
modal.close()
this.toastService.showInfo($localize`View "${savedView.name}" created successfully.`)
@@ -109,6 +104,40 @@ export class DocumentListComponent implements OnInit {
})
}
+ resetFilters(): void {
+ if (this.list.savedViewId) {
+ this.savedViewService.getCached(this.list.savedViewId).subscribe(viewUntouched => {
+ this.list.filterRules = viewUntouched.filter_rules
+ })
+ } else {
+ this.list.filterRules = []
+ }
+ this.list.reload()
+ }
+
+ get filterRulesModified(): boolean {
+ if (this.list.savedView == null) {
+ return this.list.filterRules.length > 0 // documents list is modified if it has any filters
+ } else {
+ // compare savedView current filters vs original
+ let modified = false
+ this.savedViewService.getCached(this.list.savedViewId).subscribe(view => {
+ let filterRulesInitial = view.filter_rules
+
+ if (this.list.filterRules.length !== filterRulesInitial.length) modified = true
+ else {
+ this.list.filterRules.forEach(rule => {
+ if (filterRulesInitial.find(fri => fri.rule_type == rule.rule_type && fri.value == rule.value) == undefined) modified = true
+ })
+ filterRulesInitial.forEach(rule => {
+ if (this.list.filterRules.find(fr => fr.rule_type == rule.rule_type && fr.value == rule.value) == undefined) modified = true
+ })
+ }
+ })
+ return modified
+ }
+ }
+
clickTag(tagID: number) {
this.list.selectNone()
setTimeout(() => {
diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
index efbf6ce7e..02a51238d 100644
--- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
+++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.html
@@ -41,11 +41,11 @@
-
diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts
index e6565beac..febb9dd84 100644
--- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts
+++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts
@@ -40,7 +40,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
case FILTER_HAS_TAG:
return $localize`Tag: ${this.tags.find(t => t.id == +rule.value)?.name}`
-
+
case FILTER_HAS_ANY_TAG:
if (rule.value == "false") {
return $localize`Without any tag`
@@ -127,7 +127,7 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
} else {
this.tagSelectionModel.getSelectedItems().filter(tag => tag.id).forEach(tag => {
filterRules.push({rule_type: FILTER_HAS_TAG, value: tag.id?.toString()})
- })
+ })
}
this.correspondentSelectionModel.getSelectedItems().forEach(correspondent => {
filterRules.push({rule_type: FILTER_CORRESPONDENT, value: correspondent.id?.toString()})
@@ -153,16 +153,16 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
@Output()
filterRulesChange = new EventEmitter()
+ @Output()
+ reset = new EventEmitter()
+
+ @Input()
+ rulesModified: boolean = false
+
updateRules() {
this.filterRulesChange.next(this.filterRules)
}
- hasFilters() {
- return this._titleFilter ||
- this.dateAddedAfter || this.dateAddedBefore || this.dateCreatedAfter || this.dateCreatedBefore ||
- this.tagSelectionModel.selectionSize() || this.correspondentSelectionModel.selectionSize() || this.documentTypeSelectionModel.selectionSize()
- }
-
get titleFilter() {
return this._titleFilter
}
@@ -194,16 +194,8 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
this.titleFilterDebounce.complete()
}
- clearSelected() {
- this._titleFilter = ""
- this.tagSelectionModel.clear(false)
- this.documentTypeSelectionModel.clear(false)
- this.correspondentSelectionModel.clear(false)
- this.dateAddedBefore = null
- this.dateAddedAfter = null
- this.dateCreatedBefore = null
- this.dateCreatedAfter = null
- this.updateRules()
+ resetSelected() {
+ this.reset.next()
}
toggleTag(tagId: number) {
From 507085ee7b8cba546704b10a8a72366032cc7061 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 07:30:53 -0800
Subject: [PATCH 2/8] Move list reload after network action completes
---
.../app/components/document-list/document-list.component.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index 685d40a44..a79c497fe 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -108,11 +108,12 @@ export class DocumentListComponent implements OnInit {
if (this.list.savedViewId) {
this.savedViewService.getCached(this.list.savedViewId).subscribe(viewUntouched => {
this.list.filterRules = viewUntouched.filter_rules
+ this.list.reload()
})
} else {
this.list.filterRules = []
+ this.list.reload()
}
- this.list.reload()
}
get filterRulesModified(): boolean {
From 14a2ad2b0d12d18bad7db144cf8f94ee9ea65ef4 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 07:53:48 -0800
Subject: [PATCH 3/8] Change detection of modified filter rules to wait for
filter editor changes only
---
.../document-list/document-list.component.html | 2 +-
.../document-list/document-list.component.ts | 14 ++++++++++----
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.html b/src-ui/src/app/components/document-list/document-list.component.html
index 90893baee..c391591b1 100644
--- a/src-ui/src/app/components/document-list/document-list.component.html
+++ b/src-ui/src/app/components/document-list/document-list.component.html
@@ -78,7 +78,7 @@
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index a79c497fe..a9bdb4a83 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -66,9 +66,12 @@ export class DocumentListComponent implements OnInit {
this.list.reload()
})
+
+ this.rulesChanged()
}
loadViewConfig(view: PaperlessSavedView) {
+ this.filterRulesModified = false
this.list.load(view)
this.list.reload()
}
@@ -105,6 +108,7 @@ export class DocumentListComponent implements OnInit {
}
resetFilters(): void {
+ this.filterRulesModified = false;
if (this.list.savedViewId) {
this.savedViewService.getCached(this.list.savedViewId).subscribe(viewUntouched => {
this.list.filterRules = viewUntouched.filter_rules
@@ -116,12 +120,14 @@ export class DocumentListComponent implements OnInit {
}
}
- get filterRulesModified(): boolean {
+ filterRulesModified: boolean = false
+
+ rulesChanged() {
+ let modified = false
if (this.list.savedView == null) {
- return this.list.filterRules.length > 0 // documents list is modified if it has any filters
+ modified = this.list.filterRules.length > 0 // documents list is modified if it has any filters
} else {
// compare savedView current filters vs original
- let modified = false
this.savedViewService.getCached(this.list.savedViewId).subscribe(view => {
let filterRulesInitial = view.filter_rules
@@ -135,8 +141,8 @@ export class DocumentListComponent implements OnInit {
})
}
})
- return modified
}
+ this.filterRulesModified = modified
}
clickTag(tagID: number) {
From e13dbe48819d60bef98e289117ac9c5dc88c19c8 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 07:57:33 -0800
Subject: [PATCH 4/8] Move variable
---
.../app/components/document-list/document-list.component.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index c5b7dacc3..74131d670 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -33,6 +33,8 @@ export class DocumentListComponent implements OnInit {
displayMode = 'smallCards' // largeCards, smallCards, details
+ filterRulesModified: boolean = false
+
getTitle() {
return this.list.savedViewTitle || $localize`Documents`
}
@@ -127,8 +129,6 @@ export class DocumentListComponent implements OnInit {
}
}
- filterRulesModified: boolean = false
-
rulesChanged() {
let modified = false
if (this.list.savedView == null) {
From 086dccc177364527ad88f5bf1374c0b62bdbd0e7 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 07:59:46 -0800
Subject: [PATCH 5/8] Move back list reload for network action
---
.../app/components/document-list/document-list.component.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index 74131d670..e9a0510c4 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -68,12 +68,12 @@ export class DocumentListComponent implements OnInit {
return
}
this.list.savedView = view
+ this.list.reload()
})
} else {
this.list.savedView = null
+ this.list.reload()
}
-
- this.list.reload()
})
this.rulesChanged()
From 716005fbd265c734b1884a6e25818eaff188a554 Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 10:57:13 -0800
Subject: [PATCH 6/8] restore function was lost in merge
---
.../app/components/document-list/document-list.component.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index e9a0510c4..50f61bfe5 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -35,6 +35,10 @@ export class DocumentListComponent implements OnInit {
filterRulesModified: boolean = false
+ get isFiltered() {
+ return this.list.filterRules?.length > 0
+ }
+
getTitle() {
return this.list.savedViewTitle || $localize`Documents`
}
From ac459b84c6f056cec992da27419909e0f0105e3c Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 11:12:13 -0800
Subject: [PATCH 7/8] Same thing, wait for promise to return =/
---
.../app/components/document-list/document-list.component.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index 50f61bfe5..72c499568 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -73,14 +73,14 @@ export class DocumentListComponent implements OnInit {
}
this.list.savedView = view
this.list.reload()
+ this.rulesChanged()
})
} else {
this.list.savedView = null
this.list.reload()
+ this.rulesChanged()
}
})
-
- this.rulesChanged()
}
loadViewConfig(view: PaperlessSavedView) {
From 858bca0f7d1494bb05a1c41338ddeee0ea89120f Mon Sep 17 00:00:00 2001
From: Michael Shamoon <4887959+nikonratm@users.noreply.github.com>
Date: Wed, 6 Jan 2021 11:12:43 -0800
Subject: [PATCH 8/8] More efficient rule equivalency checking
---
.../document-list/document-list.component.ts | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/src-ui/src/app/components/document-list/document-list.component.ts b/src-ui/src/app/components/document-list/document-list.component.ts
index 72c499568..9b88c13b4 100644
--- a/src-ui/src/app/components/document-list/document-list.component.ts
+++ b/src-ui/src/app/components/document-list/document-list.component.ts
@@ -121,7 +121,7 @@ export class DocumentListComponent implements OnInit {
}
resetFilters(): void {
- this.filterRulesModified = false;
+ this.filterRulesModified = false
if (this.list.savedViewId) {
this.savedViewService.getCached(this.list.savedViewId).subscribe(viewUntouched => {
this.list.filterRules = viewUntouched.filter_rules
@@ -144,12 +144,16 @@ export class DocumentListComponent implements OnInit {
if (this.list.filterRules.length !== filterRulesInitial.length) modified = true
else {
- this.list.filterRules.forEach(rule => {
- if (filterRulesInitial.find(fri => fri.rule_type == rule.rule_type && fri.value == rule.value) == undefined) modified = true
- })
- filterRulesInitial.forEach(rule => {
- if (this.list.filterRules.find(fr => fr.rule_type == rule.rule_type && fr.value == rule.value) == undefined) modified = true
+ modified = this.list.filterRules.some(rule => {
+ return (filterRulesInitial.find(fri => fri.rule_type == rule.rule_type && fri.value == rule.value) == undefined)
})
+
+ if (!modified) {
+ // only check other direction if we havent already determined is modified
+ modified = filterRulesInitial.some(rule => {
+ this.list.filterRules.find(fr => fr.rule_type == rule.rule_type && fr.value == rule.value) == undefined
+ })
+ }
}
})
}