mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 19:17:13 -05:00 
			
		
		
		
	Date filter clearing
This commit is contained in:
		
							parent
							
								
									9cd40e96f4
								
							
						
					
					
						commit
						02871e1e22
					
				@ -30,31 +30,33 @@ export class FilterDropdownDateComponent extends FilterDropdownComponent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  setDateQuickFilter(range: any) {
 | 
					  setDateQuickFilter(range: any) {
 | 
				
			||||||
    this.dateAfter = this.dateBefore = undefined
 | 
					    this.dateAfter = this.dateBefore = undefined
 | 
				
			||||||
    let now = new Date()
 | 
					    let date = new Date()
 | 
				
			||||||
 | 
					    let newDate: NgbDateStruct = { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() }
 | 
				
			||||||
    switch (typeof range) {
 | 
					    switch (typeof range) {
 | 
				
			||||||
      case 'number':
 | 
					      case 'number':
 | 
				
			||||||
        now.setDate(now.getDate() - range)
 | 
					        date.setDate(date.getDate() - range)
 | 
				
			||||||
        this.dateAfter = { year: now.getFullYear(), month: now.getMonth() + 1, day: now.getDate() }
 | 
					        newDate.year = date.getFullYear()
 | 
				
			||||||
        this.dateSelected(this.dateAfter)
 | 
					        newDate.month = date.getMonth() + 1
 | 
				
			||||||
        break;
 | 
					        newDate.day = date.getDate()
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      case 'string':
 | 
					      case 'string':
 | 
				
			||||||
        let date = { year: now.getFullYear(), month: now.getMonth() + 1, day: 1 }
 | 
					        newDate.day = 1
 | 
				
			||||||
        if (range == 'year') date.month = 1
 | 
					        if (range == 'year') newDate.month = 1
 | 
				
			||||||
        this.dateAfter = date
 | 
					        break
 | 
				
			||||||
        this.dateSelected(this.dateAfter)
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      default:
 | 
					      default:
 | 
				
			||||||
        break;
 | 
					        break
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    this.dateAfter = newDate
 | 
				
			||||||
 | 
					    this.dateSelected(this.dateAfter)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dateSelected(date:NgbDateStruct) {
 | 
					  dateSelected(date:NgbDateStruct) {
 | 
				
			||||||
    let isAfter = this.dateAfter !== undefined
 | 
					    let isAfter = this.dateAfter == date
 | 
				
			||||||
    let filterRuleType = this.filterRuleTypes.find(rt => rt.filtervar.indexOf(isAfter ? 'gt' : 'lt') > -1)
 | 
					    let filterRuleType = this.filterRuleTypes.find(rt => rt.filtervar.indexOf(isAfter ? 'gt' : 'lt') > -1)
 | 
				
			||||||
    if (filterRuleType) {
 | 
					    if (filterRuleType) {
 | 
				
			||||||
      let dateFilterRule:FilterRule = {value: `${date.year}-${date.month}-${date.day}`, type: filterRuleType}
 | 
					      let dateFilterRule:FilterRule = {value: `${date.year}-${date.month.toString().padStart(2,0)}-${date.day.toString().padStart(2,0)}`, type: filterRuleType}
 | 
				
			||||||
      this.selected.emit(dateFilterRule)
 | 
					      this.selected.emit(dateFilterRule)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ import { CorrespondentService } from 'src/app/services/rest/correspondent.servic
 | 
				
			|||||||
import { DocumentTypeService } from 'src/app/services/rest/document-type.service';
 | 
					import { DocumentTypeService } from 'src/app/services/rest/document-type.service';
 | 
				
			||||||
import { TagService } from 'src/app/services/rest/tag.service';
 | 
					import { TagService } from 'src/app/services/rest/tag.service';
 | 
				
			||||||
import { FilterDropdownComponent } from './filter-dropdown/filter-dropdown.component'
 | 
					import { FilterDropdownComponent } from './filter-dropdown/filter-dropdown.component'
 | 
				
			||||||
 | 
					import { FilterDropdownDateComponent } from './filter-dropdown/filter-dropdown-date/filter-dropdown-date.component'
 | 
				
			||||||
import { fromEvent } from 'rxjs';
 | 
					import { fromEvent } from 'rxjs';
 | 
				
			||||||
import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
 | 
					import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
 | 
				
			||||||
import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
 | 
					import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
 | 
				
			||||||
@ -34,6 +35,7 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @ViewChild('filterTextInput') filterTextInput: ElementRef;
 | 
					  @ViewChild('filterTextInput') filterTextInput: ElementRef;
 | 
				
			||||||
  @ViewChildren(FilterDropdownComponent) quickFilterDropdowns!: QueryList<FilterDropdownComponent>;
 | 
					  @ViewChildren(FilterDropdownComponent) quickFilterDropdowns!: QueryList<FilterDropdownComponent>;
 | 
				
			||||||
 | 
					  @ViewChildren(FilterDropdownDateComponent) quickDateFilterDropdowns!: QueryList<FilterDropdownDateComponent>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  quickFilterRuleTypeIDs: number[] = [FILTER_HAS_TAG, FILTER_CORRESPONDENT, FILTER_DOCUMENT_TYPE]
 | 
					  quickFilterRuleTypeIDs: number[] = [FILTER_HAS_TAG, FILTER_CORRESPONDENT, FILTER_DOCUMENT_TYPE]
 | 
				
			||||||
  dateAddedFilterRuleTypeIDs: any[] = [[FILTER_ADDED_BEFORE, FILTER_ADDED_AFTER], [FILTER_CREATED_BEFORE, FILTER_CREATED_AFTER]]
 | 
					  dateAddedFilterRuleTypeIDs: any[] = [[FILTER_ADDED_BEFORE, FILTER_ADDED_AFTER], [FILTER_CREATED_BEFORE, FILTER_CREATED_AFTER]]
 | 
				
			||||||
@ -52,16 +54,15 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ngAfterViewInit() {
 | 
					  ngAfterViewInit() {
 | 
				
			||||||
    fromEvent(this.filterTextInput.nativeElement,'keyup')
 | 
					    fromEvent(this.filterTextInput.nativeElement,'keyup').pipe(
 | 
				
			||||||
        .pipe(
 | 
					      debounceTime(150),
 | 
				
			||||||
            debounceTime(150),
 | 
					      distinctUntilChanged(),
 | 
				
			||||||
            distinctUntilChanged(),
 | 
					      tap()
 | 
				
			||||||
            tap()
 | 
					    ).subscribe((event: Event) => {
 | 
				
			||||||
        )
 | 
					      this.filterText = (event.target as HTMLInputElement).value
 | 
				
			||||||
        .subscribe((event: Event) => {
 | 
					      this.onTextFilterInput()
 | 
				
			||||||
          this.filterText = (event.target as HTMLInputElement).value
 | 
					    })
 | 
				
			||||||
          this.onTextFilterInput()
 | 
					    this.quickDateFilterDropdowns.forEach(d => this.updateDateDropdown(d))
 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setDropdownItems(items: ObjectWithId[], filterRuleTypeID: number): void {
 | 
					  setDropdownItems(items: ObjectWithId[], filterRuleTypeID: number): void {
 | 
				
			||||||
@ -69,7 +70,6 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
    if (dropdown) {
 | 
					    if (dropdown) {
 | 
				
			||||||
      dropdown.items = items
 | 
					      dropdown.items = items
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.updateDropdownActiveItems(dropdown)
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  updateDropdownActiveItems(dropdown: FilterDropdownComponent): void {
 | 
					  updateDropdownActiveItems(dropdown: FilterDropdownComponent): void {
 | 
				
			||||||
@ -81,6 +81,18 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
    dropdown.itemsActive = activeItems
 | 
					    dropdown.itemsActive = activeItems
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  updateDateDropdown(dateDropdown: FilterDropdownDateComponent) {
 | 
				
			||||||
 | 
					    let activeRules = this.filterRules.filter(r => dateDropdown.filterRuleTypeIDs.includes(r.type.id))
 | 
				
			||||||
 | 
					    if (activeRules.length > 0) {
 | 
				
			||||||
 | 
					      activeRules.forEach(rule => {
 | 
				
			||||||
 | 
					        let date = { year: rule.value.substring(0,4), month: rule.value.substring(5,7), day: rule.value.substring(8,10) }
 | 
				
			||||||
 | 
					        rule.type.filtervar.indexOf('gt') > -1 ? dateDropdown.dateAfter = date : dateDropdown.dateBefore = date
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      dateDropdown.dateAfter = dateDropdown.dateBefore = undefined
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getDropdownByFilterRuleTypeID(filterRuleTypeID: number): FilterDropdownComponent {
 | 
					  getDropdownByFilterRuleTypeID(filterRuleTypeID: number): FilterDropdownComponent {
 | 
				
			||||||
    return this.quickFilterDropdowns.find(d => d.filterRuleTypeID == filterRuleTypeID)
 | 
					    return this.quickFilterDropdowns.find(d => d.filterRuleTypeID == filterRuleTypeID)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -93,6 +105,7 @@ export class FilterEditorComponent implements OnInit, AfterViewInit {
 | 
				
			|||||||
    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.quickFilterDropdowns.forEach(d => this.updateDropdownActiveItems(d))
 | 
				
			||||||
 | 
					    this.quickDateFilterDropdowns.forEach(d => this.updateDateDropdown(d))
 | 
				
			||||||
    this.clear.next()
 | 
					    this.clear.next()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user