mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-09 09:58:20 -05:00
Refactored dropdowns allow clearing, active checkmarks
This commit is contained in:
parent
db02d68a5a
commit
f83185bfe4
@ -1,6 +1,6 @@
|
|||||||
<div class="btn-group" ngbDropdown role="group">
|
<div class="btn-group" ngbDropdown role="group">
|
||||||
<button class="btn btn-outline-primary btn-sm" id="dropdown{{title}}" ngbDropdownToggle>{{title}}</button>
|
<button class="btn btn-outline-primary btn-sm" id="dropdown{{title}}" ngbDropdownToggle>{{title}}</button>
|
||||||
<div class="dropdown-menu quick-filter" ngbDropdownMenu aria-labelledby="dropdown{{title}}">
|
<div class="dropdown-menu quick-filter" ngbDropdownMenu attr.aria-labelledby="dropdown{{title}}">
|
||||||
<div class="list-group list-group-flush">
|
<div class="list-group list-group-flush">
|
||||||
<input class="list-group-item form-control" type="text" [(ngModel)]="filterText" placeholder="Filter {{title}}">
|
<input class="list-group-item form-control" type="text" [(ngModel)]="filterText" placeholder="Filter {{title}}">
|
||||||
<ng-container *ngIf="(items | filter: filterText).length > 0">
|
<ng-container *ngIf="(items | filter: filterText).length > 0">
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
||||||
import { FilterRuleType, FILTER_CORRESPONDENT, FILTER_DOCUMENT_TYPE, FILTER_HAS_TAG, FILTER_TITLE, FILTER_RULE_TYPES } from 'src/app/data/filter-rule-type';
|
import { FilterRuleType, FILTER_CORRESPONDENT, FILTER_DOCUMENT_TYPE, FILTER_HAS_TAG, FILTER_TITLE, FILTER_RULE_TYPES } from 'src/app/data/filter-rule-type';
|
||||||
import { ObjectWithId } from 'src/app/data/object-with-id';
|
import { ObjectWithId } from 'src/app/data/object-with-id';
|
||||||
import { MatchingModel } from 'src/app/data/matching-model';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-filter-dropdown',
|
selector: 'app-filter-dropdown',
|
||||||
@ -18,8 +17,8 @@ export class FilterDropdownComponent implements OnInit {
|
|||||||
@Output()
|
@Output()
|
||||||
toggle = new EventEmitter()
|
toggle = new EventEmitter()
|
||||||
|
|
||||||
items: MatchingModel[] = []
|
items: ObjectWithId[] = []
|
||||||
itemsActive: MatchingModel[] = []
|
itemsActive: ObjectWithId[] = []
|
||||||
title: string
|
title: string
|
||||||
filterText: string
|
filterText: string
|
||||||
|
|
||||||
@ -29,6 +28,6 @@ export class FilterDropdownComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
toggleItem(item: ObjectWithId) {
|
toggleItem(item: ObjectWithId) {
|
||||||
this.toggle.emit(item, this.filterRuleTypeID)
|
this.toggle.emit(item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,11 +65,21 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
setDropdownItems(items: ObjectWithId[], filterRuleTypeID: number) {
|
setDropdownItems(items: ObjectWithId[], filterRuleTypeID: number): void {
|
||||||
let dropdown: FilterDropdownComponent = this.getDropdownByFilterRuleTypeID(filterRuleTypeID)
|
let dropdown: FilterDropdownComponent = this.getDropdownByFilterRuleTypeID(filterRuleTypeID)
|
||||||
if (dropdown) {
|
if (dropdown) {
|
||||||
dropdown.items = items
|
dropdown.items = items
|
||||||
}
|
}
|
||||||
|
this.updateDropdownActiveItems(dropdown)
|
||||||
|
}
|
||||||
|
|
||||||
|
updateDropdownActiveItems(dropdown: FilterDropdownComponent): void {
|
||||||
|
let activeRulesValues = this.filterRules.filter(r => r.type.id == dropdown.filterRuleTypeID).map(r => r.value)
|
||||||
|
let activeItems = []
|
||||||
|
if (activeRulesValues.length > 0) {
|
||||||
|
activeItems = dropdown.items.filter(i => activeRulesValues.includes(i.id))
|
||||||
|
}
|
||||||
|
dropdown.itemsActive = activeItems
|
||||||
}
|
}
|
||||||
|
|
||||||
getDropdownByFilterRuleTypeID(filterRuleTypeID: number): FilterDropdownComponent {
|
getDropdownByFilterRuleTypeID(filterRuleTypeID: number): FilterDropdownComponent {
|
||||||
@ -83,6 +93,7 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
|
|||||||
clearSelected() {
|
clearSelected() {
|
||||||
this.filterRules.splice(0,this.filterRules.length)
|
this.filterRules.splice(0,this.filterRules.length)
|
||||||
this.updateTextFilterInput()
|
this.updateTextFilterInput()
|
||||||
|
this.quickFilterDropdowns.forEach(d => this.updateDropdownActiveItems(d))
|
||||||
this.clear.next()
|
this.clear.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +129,8 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
|
|||||||
|
|
||||||
if (existingRule && existingRule.value == item.id && filterRuleType.id == FILTER_HAS_TAG) {
|
if (existingRule && existingRule.value == item.id && filterRuleType.id == FILTER_HAS_TAG) {
|
||||||
filterRules.splice(filterRules.indexOf(existingRule), 1)
|
filterRules.splice(filterRules.indexOf(existingRule), 1)
|
||||||
|
} else if (existingRule && filterRuleType.id == FILTER_HAS_TAG) {
|
||||||
|
filterRules.push({type: FILTER_RULE_TYPES.find(t => t.id == filterRuleType.id), value: item.id})
|
||||||
} else if (existingRule && existingRule.value == item.id) {
|
} else if (existingRule && existingRule.value == item.id) {
|
||||||
return
|
return
|
||||||
} else if (existingRule) {
|
} else if (existingRule) {
|
||||||
@ -125,6 +138,10 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
|
|||||||
} else {
|
} else {
|
||||||
filterRules.push({type: FILTER_RULE_TYPES.find(t => t.id == filterRuleType.id), value: item.id})
|
filterRules.push({type: FILTER_RULE_TYPES.find(t => t.id == filterRuleType.id), value: item.id})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let dropdown = this.getDropdownByFilterRuleTypeID(filterRuleTypeID)
|
||||||
|
this.updateDropdownActiveItems(dropdown)
|
||||||
|
|
||||||
this.filterRules = filterRules
|
this.filterRules = filterRules
|
||||||
this.applySelected()
|
this.applySelected()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user