mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	fixed the date selection dropdowns.
- They still contain that ugly hack.
This commit is contained in:
		@@ -4,23 +4,16 @@
 | 
				
			|||||||
  </button>
 | 
					  </button>
 | 
				
			||||||
  <div class="dropdown-menu date-filter shadow pt-0" ngbDropdownMenu attr.aria-labelledby="dropdown{{title}}">
 | 
					  <div class="dropdown-menu date-filter shadow pt-0" ngbDropdownMenu attr.aria-labelledby="dropdown{{title}}">
 | 
				
			||||||
    <div class="list-group list-group-flush">
 | 
					    <div class="list-group list-group-flush">
 | 
				
			||||||
 | 
					        <button class="list-group-item small list-goup list-group-item-action d-flex p-2 pl-3" (click)="clear()">Clear</button>
 | 
				
			||||||
        <button *ngFor="let range of [7, 30, 'month', 'year']" class="list-group-item small list-goup list-group-item-action d-flex p-2 pl-3" role="menuitem" (click)="setDateQuickFilter(range)">
 | 
					        <button *ngFor="let range of [7, 30, 'month', 'year']" class="list-group-item small list-goup list-group-item-action d-flex p-2 pl-3" role="menuitem" (click)="setDateQuickFilter(range)">
 | 
				
			||||||
          <ng-container *ngIf="isStringRange(range)">This </ng-container>
 | 
					          <ng-container *ngIf="isStringRange(range)">This </ng-container>
 | 
				
			||||||
          {{ range }}
 | 
					          {{ range }}
 | 
				
			||||||
          <ng-container *ngIf="!isStringRange(range)"> days</ng-container>
 | 
					          <ng-container *ngIf="!isStringRange(range)"> days</ng-container>
 | 
				
			||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <div class="list-group-item d-flex flex-column align-items-start" role="menuitem">
 | 
					        <div class="list-group-item d-flex flex-column align-items-start" role="menuitem">
 | 
				
			||||||
          <div class="mb-2 d-flex flex-row w-100 justify-content-between small">
 | 
					          <div>Before</div>
 | 
				
			||||||
            <div>Before</div>
 | 
					 | 
				
			||||||
            <a *ngIf="dateBefore" class="btn btn-link p-0 m-0" (click)="clearBefore()">
 | 
					 | 
				
			||||||
              <svg width="0.8em" height="0.8em" viewBox="0 0 16 16" class="bi bi-x" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					 | 
				
			||||||
                <path fill-rule="evenodd" d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
 | 
					 | 
				
			||||||
              </svg>
 | 
					 | 
				
			||||||
              <small>Clear</small>
 | 
					 | 
				
			||||||
            </a>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
          <div class="input-group input-group-sm">
 | 
					          <div class="input-group input-group-sm">
 | 
				
			||||||
            <input class="form-control" type="text" placeholder="yyyy-mm-dd" name="before" [(ngModel)]="_dateBefore" [maxDate]="this._maxDate" ngbDatepicker (dateSelect)="onDateSelected($event)" #dpBefore="ngbDatepicker">
 | 
					            <input class="form-control" type="text" placeholder="yyyy-mm-dd" name="before" [(ngModel)]="_dateBefore" [maxDate]="this._maxDate" ngbDatepicker (dateSelect)="onBeforeSelected($event)" #dpBefore="ngbDatepicker">
 | 
				
			||||||
            <div class="input-group-append">
 | 
					            <div class="input-group-append">
 | 
				
			||||||
              <button class="btn btn-outline-secondary btn-sm" (click)="dpBefore.toggle()" type="button">
 | 
					              <button class="btn btn-outline-secondary btn-sm" (click)="dpBefore.toggle()" type="button">
 | 
				
			||||||
                <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-calendar-date" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					                <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-calendar-date" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
@@ -32,17 +25,9 @@
 | 
				
			|||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div class="list-group-item d-flex flex-column align-items-start" role="menuitem">
 | 
					        <div class="list-group-item d-flex flex-column align-items-start" role="menuitem">
 | 
				
			||||||
          <div class="mb-2 d-flex flex-row w-100 justify-content-between small">
 | 
					          <div>After</div>
 | 
				
			||||||
            <div>After</div>
 | 
					 | 
				
			||||||
            <a *ngIf="dateAfter" class="btn btn-link p-0 m-0" (click)="clearAfter()">
 | 
					 | 
				
			||||||
              <svg width="0.8em" height="0.8em" viewBox="0 0 16 16" class="bi bi-x" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					 | 
				
			||||||
                <path fill-rule="evenodd" d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
 | 
					 | 
				
			||||||
              </svg>
 | 
					 | 
				
			||||||
              <small>Clear</small>
 | 
					 | 
				
			||||||
            </a>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
          <div class="input-group input-group-sm">
 | 
					          <div class="input-group input-group-sm">
 | 
				
			||||||
            <input class="form-control form-control-sm" type="text" placeholder="yyyy-mm-dd" name="after" [(ngModel)]="_dateAfter" [maxDate]="this._maxDate" ngbDatepicker (dateSelect)="onDateSelected($event)" #dpAfter="ngbDatepicker">
 | 
					            <input class="form-control form-control-sm" type="text" placeholder="yyyy-mm-dd" name="after" [(ngModel)]="_dateAfter" [maxDate]="this._maxDate" ngbDatepicker (dateSelect)="onAfterSelected($event)" #dpAfter="ngbDatepicker">
 | 
				
			||||||
            <div class="input-group-append">
 | 
					            <div class="input-group-append">
 | 
				
			||||||
              <button class="btn btn-outline-secondary btn-sm" (click)="dpAfter.toggle()" type="button">
 | 
					              <button class="btn btn-outline-secondary btn-sm" (click)="dpAfter.toggle()" type="button">
 | 
				
			||||||
                <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-calendar-date" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					                <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-calendar-date" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,13 @@
 | 
				
			|||||||
import { Component, EventEmitter, Input, Output, ElementRef, ViewChild, SimpleChange } from '@angular/core';
 | 
					import { Component, EventEmitter, Input, Output, ElementRef, ViewChild, SimpleChange } from '@angular/core';
 | 
				
			||||||
import { NgbDate, NgbDateStruct, NgbDatepicker } from '@ng-bootstrap/ng-bootstrap';
 | 
					import { NgbDate, NgbDateStruct, NgbDatepicker } from '@ng-bootstrap/ng-bootstrap';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface DateSelection {
 | 
				
			||||||
 | 
					  before?: NgbDateStruct
 | 
				
			||||||
 | 
					  after?: NgbDateStruct
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-filter-dropdown-date',
 | 
					  selector: 'app-filter-dropdown-date',
 | 
				
			||||||
  templateUrl: './filter-dropdown-date.component.html',
 | 
					  templateUrl: './filter-dropdown-date.component.html',
 | 
				
			||||||
@@ -18,10 +25,7 @@ export class FilterDropdownDateComponent {
 | 
				
			|||||||
  title: string
 | 
					  title: string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  dateBeforeSet = new EventEmitter()
 | 
					  datesSet = new EventEmitter<DateSelection>()
 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Output()
 | 
					 | 
				
			||||||
  dateAfterSet = new EventEmitter()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @ViewChild('dpAfter') dpAfter: NgbDatepicker
 | 
					  @ViewChild('dpAfter') dpAfter: NgbDatepicker
 | 
				
			||||||
  @ViewChild('dpBefore') dpBefore: NgbDatepicker
 | 
					  @ViewChild('dpBefore') dpBefore: NgbDatepicker
 | 
				
			||||||
@@ -88,19 +92,18 @@ export class FilterDropdownDateComponent {
 | 
				
			|||||||
        break
 | 
					        break
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this._dateAfter = newDate
 | 
					    this._dateAfter = newDate
 | 
				
			||||||
    this.onDateSelected(this._dateAfter)
 | 
					    this.datesSet.emit({after: newDate, before: null})
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onDateSelected(date:NgbDateStruct) {
 | 
					  onBeforeSelected(date: NgbDateStruct) {
 | 
				
			||||||
    let emitter = this._dateAfter && NgbDate.from(this._dateAfter).equals(date) ? this.dateAfterSet : this.dateBeforeSet
 | 
					    this.datesSet.emit({after: this._dateAfter, before: date})
 | 
				
			||||||
    emitter.emit(date)
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  clearAfter() {
 | 
					  onAfterSelected(date: NgbDateStruct) {
 | 
				
			||||||
    this.dateAfterSet.next()
 | 
					    this.datesSet.emit({after: date, before: this._dateBefore})
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  clearBefore() {
 | 
					  clear() {
 | 
				
			||||||
    this.dateBeforeSet.next()
 | 
					    this.datesSet.emit({after: null, before: null})
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,8 +10,8 @@
 | 
				
			|||||||
  <app-filter-dropdown class="col-auto" [items]="correspondents" [itemsSelected]="selectedCorrespondents" title="Correspondents" (toggle)="toggleCorrespondent($event.id)"></app-filter-dropdown>
 | 
					  <app-filter-dropdown class="col-auto" [items]="correspondents" [itemsSelected]="selectedCorrespondents" title="Correspondents" (toggle)="toggleCorrespondent($event.id)"></app-filter-dropdown>
 | 
				
			||||||
  <app-filter-dropdown class="col-auto" [items]="documentTypes" [itemsSelected]="selectedDocumentTypes" title="Document types" (toggle)="toggleDocumentType($event.id)"></app-filter-dropdown>
 | 
					  <app-filter-dropdown class="col-auto" [items]="documentTypes" [itemsSelected]="selectedDocumentTypes" title="Document types" (toggle)="toggleDocumentType($event.id)"></app-filter-dropdown>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <app-filter-dropdown-date class="col-auto" [dateBefore]="dateCreatedBefore" [dateAfter]="dateCreatedAfter" title="Created" (dateBeforeSet)="onDateCreatedBeforeSet($event)" (dateAfterSet)="onDateCreatedAfterSet($event)"></app-filter-dropdown-date>
 | 
					  <app-filter-dropdown-date class="col-auto" [dateBefore]="dateCreatedBefore" [dateAfter]="dateCreatedAfter" title="Created" (datesSet)="onDatesCreatedSet($event)"></app-filter-dropdown-date>
 | 
				
			||||||
  <app-filter-dropdown-date class="col-auto" [dateBefore]="dateAddedBefore" [dateAfter]="dateAddedAfter" title="Added"  (dateBeforeSet)="onDateAddedBeforeSet($event)" (dateAfterSet)="onDateAddedAfterSet($event)"></app-filter-dropdown-date>
 | 
					  <app-filter-dropdown-date class="col-auto" [dateBefore]="dateAddedBefore" [dateAfter]="dateAddedAfter" title="Added"  (datesSet)="onDatesAddedSet($event)"></app-filter-dropdown-date>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <button class="btn btn-link btn-sm" [disabled]="!hasFilters()" (click)="clearSelected()">
 | 
					  <button class="btn btn-link btn-sm" [disabled]="!hasFilters()" (click)="clearSelected()">
 | 
				
			||||||
    <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-x" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					    <svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-x" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ import { TagService } from 'src/app/services/rest/tag.service';
 | 
				
			|||||||
import { CorrespondentService } from 'src/app/services/rest/correspondent.service';
 | 
					import { CorrespondentService } from 'src/app/services/rest/correspondent.service';
 | 
				
			||||||
import { FilterRule } from 'src/app/data/filter-rule';
 | 
					import { FilterRule } from 'src/app/data/filter-rule';
 | 
				
			||||||
import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_TAG, FILTER_RULE_TYPES, FILTER_TITLE } from 'src/app/data/filter-rule-type';
 | 
					import { FILTER_ADDED_AFTER, FILTER_ADDED_BEFORE, FILTER_CORRESPONDENT, FILTER_CREATED_AFTER, FILTER_CREATED_BEFORE, FILTER_DOCUMENT_TYPE, FILTER_HAS_TAG, FILTER_RULE_TYPES, FILTER_TITLE } from 'src/app/data/filter-rule-type';
 | 
				
			||||||
 | 
					import { DateSelection } from './filter-dropdown-date/filter-dropdown-date.component';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component({
 | 
					@Component({
 | 
				
			||||||
  selector: 'app-filter-editor',
 | 
					  selector: 'app-filter-editor',
 | 
				
			||||||
@@ -146,23 +147,15 @@ export class FilterEditorComponent implements OnInit, OnDestroy {
 | 
				
			|||||||
  // Date handling
 | 
					  // Date handling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onDateCreatedBeforeSet(date: NgbDateStruct) {
 | 
					  onDatesCreatedSet(dates: DateSelection) {
 | 
				
			||||||
    this.setDateCreatedBefore(date)
 | 
					    this.setDateCreatedBefore(dates.before)
 | 
				
			||||||
 | 
					    this.setDateCreatedAfter(dates.after)
 | 
				
			||||||
    this.applyFilters()
 | 
					    this.applyFilters()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onDateCreatedAfterSet(date: NgbDateStruct) {
 | 
					  onDatesAddedSet(dates: DateSelection) {
 | 
				
			||||||
    this.setDateCreatedAfter(date)
 | 
					    this.setDateAddedBefore(dates.before)
 | 
				
			||||||
    this.applyFilters()
 | 
					    this.setDateAddedAfter(dates.after)
 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onDateAddedBeforeSet(date: NgbDateStruct) {
 | 
					 | 
				
			||||||
    this.setDateAddedBefore(date)
 | 
					 | 
				
			||||||
    this.applyFilters()
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  onDateAddedAfterSet(date: NgbDateStruct) {
 | 
					 | 
				
			||||||
    this.setDateAddedAfter(date)
 | 
					 | 
				
			||||||
    this.applyFilters()
 | 
					    this.applyFilters()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user