From 56dfc71bb9f5c45b58eb338b9deeee8e6b413c4e Mon Sep 17 00:00:00 2001 From: jonaswinkler Date: Fri, 11 Dec 2020 14:48:33 +0100 Subject: [PATCH] document list service: selection model --- .../services/document-list-view.service.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 149096591..b3fe351ac 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -118,6 +118,7 @@ export class DocumentListViewService { //want changes in the filter editor to propagate into here right away. this.view.filterRules = cloneFilterRules(filterRules) this.reload() + this.reduceSelectionToFilter() this.saveDocumentListView() } @@ -192,6 +193,49 @@ export class DocumentListViewService { } } + selected = new Set() + + selectNone() { + this.selected.clear() + } + + private reduceSelectionToFilter() { + if (this.selected.size > 0) { + this.documentService.listAllFilteredIds(this.filterRules).subscribe(ids => { + let subset = new Set() + for (let id of ids) { + if (this.selected.has(id)) { + subset.add(id) + } + } + this.selected = subset + }) + } + } + + selectAll() { + this.documentService.listAllFilteredIds(this.filterRules).subscribe(ids => ids.forEach(id => this.selected.add(id))) + } + + selectPage() { + this.selected.clear() + this.documents.forEach(doc => { + this.selected.add(doc.id) + }) + } + + isSelected(d: PaperlessDocument) { + return this.selected.has(d.id) + } + + setSelected(d: PaperlessDocument, value: boolean) { + if (value) { + this.selected.add(d.id) + } else if (!value) { + this.selected.delete(d.id) + } + } + constructor(private documentService: DocumentService) { let documentListViewConfigJson = sessionStorage.getItem(DOCUMENT_LIST_SERVICE.CURRENT_VIEW_CONFIG) if (documentListViewConfigJson) {