mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	Convert selection functions on cards to toggling, let service handle setting selected
Also because we need to capture mouseevents
This commit is contained in:
		@@ -1,11 +1,11 @@
 | 
				
			|||||||
<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable">
 | 
					<div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable">
 | 
				
			||||||
  <div class="row no-gutters">
 | 
					  <div class="row no-gutters">
 | 
				
			||||||
    <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected">
 | 
					    <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected">
 | 
				
			||||||
      <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left" (click)="setSelected(selectable ? !selected : false)">
 | 
					      <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left" (click)="toggleSelected.emit($event)">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <div style="top: 0; left: 0" class="position-absolute border-right border-bottom bg-light p-1" [class.document-card-check]="!selected">
 | 
					      <div style="top: 0; left: 0" class="position-absolute border-right border-bottom bg-light p-1" [class.document-card-check]="!selected">
 | 
				
			||||||
        <div class="custom-control custom-checkbox">
 | 
					        <div class="custom-control custom-checkbox">
 | 
				
			||||||
          <input type="checkbox" class="custom-control-input" id="smallCardCheck{{document.id}}" [checked]="selected" (change)="setSelected($event.target.checked)">
 | 
					          <input type="checkbox" class="custom-control-input" id="smallCardCheck{{document.id}}" [checked]="selected" (click)="toggleSelected.emit($event)">
 | 
				
			||||||
          <label class="custom-control-label" for="smallCardCheck{{document.id}}"></label>
 | 
					          <label class="custom-control-label" for="smallCardCheck{{document.id}}"></label>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,16 +15,11 @@ export class DocumentCardLargeComponent implements OnInit {
 | 
				
			|||||||
  @Input()
 | 
					  @Input()
 | 
				
			||||||
  selected = false
 | 
					  selected = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setSelected(value: boolean) {
 | 
					 | 
				
			||||||
    this.selected = value
 | 
					 | 
				
			||||||
    this.selectedChange.emit(value)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  selectedChange = new EventEmitter<boolean>()
 | 
					  toggleSelected = new EventEmitter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get selectable() {
 | 
					  get selectable() {
 | 
				
			||||||
    return this.selectedChange.observers.length > 0
 | 
					    return this.toggleSelected.observers.length > 0
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Input()
 | 
					  @Input()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
<div class="col p-2 h-100">
 | 
					<div class="col p-2 h-100">
 | 
				
			||||||
  <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected">
 | 
					  <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected">
 | 
				
			||||||
    <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected">
 | 
					    <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected">
 | 
				
			||||||
      <img class="card-img doc-img rounded-top" [src]="getThumbUrl()" (click)="setSelected(!selected)">
 | 
					      <img class="card-img doc-img rounded-top" [src]="getThumbUrl()" (click)="toggleSelected.emit($event)">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <div class="border-right border-bottom bg-light p-1 rounded document-card-check">
 | 
					      <div class="border-right border-bottom bg-light p-1 rounded document-card-check">
 | 
				
			||||||
        <div class="custom-control custom-checkbox">
 | 
					        <div class="custom-control custom-checkbox">
 | 
				
			||||||
          <input type="checkbox" class="custom-control-input" id="smallCardCheck{{document.id}}" [checked]="selected" (change)="setSelected($event.target.checked)">
 | 
					          <input type="checkbox" class="custom-control-input" id="smallCardCheck{{document.id}}" [checked]="selected" (click)="toggleSelected.emit($event)">
 | 
				
			||||||
          <label class="custom-control-label" for="smallCardCheck{{document.id}}"></label>
 | 
					          <label class="custom-control-label" for="smallCardCheck{{document.id}}"></label>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,13 +15,8 @@ export class DocumentCardSmallComponent implements OnInit {
 | 
				
			|||||||
  @Input()
 | 
					  @Input()
 | 
				
			||||||
  selected = false
 | 
					  selected = false
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  setSelected(value: boolean) {
 | 
					 | 
				
			||||||
    this.selected = value
 | 
					 | 
				
			||||||
    this.selectedChange.emit(value)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Output()
 | 
					  @Output()
 | 
				
			||||||
  selectedChange = new EventEmitter<boolean>()
 | 
					  toggleSelected = new EventEmitter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Input()
 | 
					  @Input()
 | 
				
			||||||
  document: PaperlessDocument
 | 
					  document: PaperlessDocument
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,7 +90,7 @@
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div *ngIf="displayMode == 'largeCards'">
 | 
					<div *ngIf="displayMode == 'largeCards'">
 | 
				
			||||||
  <app-document-card-large [selected]="list.isSelected(d)" (selectedChange)="list.setSelected(d, $event)"   *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" [details]="d.content" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)">
 | 
					  <app-document-card-large [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)" *ngFor="let d of list.documents; trackBy: trackByDocumentId" [document]="d" [details]="d.content" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)">
 | 
				
			||||||
  </app-document-card-large>
 | 
					  </app-document-card-large>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -138,7 +138,7 @@
 | 
				
			|||||||
    <tr *ngFor="let d of list.documents; trackBy: trackByDocumentId" [ngClass]="list.isSelected(d) ? 'table-row-selected' : ''">
 | 
					    <tr *ngFor="let d of list.documents; trackBy: trackByDocumentId" [ngClass]="list.isSelected(d) ? 'table-row-selected' : ''">
 | 
				
			||||||
      <td>
 | 
					      <td>
 | 
				
			||||||
        <div class="custom-control custom-checkbox">
 | 
					        <div class="custom-control custom-checkbox">
 | 
				
			||||||
          <input type="checkbox" class="custom-control-input" id="docCheck{{d.id}}" [checked]="list.isSelected(d)" (change)="list.setSelected(d, $event.target.checked)">
 | 
					          <input type="checkbox" class="custom-control-input" id="docCheck{{d.id}}" [checked]="list.isSelected(d)" (click)="toggleSelected(d, $event)">
 | 
				
			||||||
          <label class="custom-control-label" for="docCheck{{d.id}}"></label>
 | 
					          <label class="custom-control-label" for="docCheck{{d.id}}"></label>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </td>
 | 
					      </td>
 | 
				
			||||||
@@ -170,5 +170,5 @@
 | 
				
			|||||||
</table>
 | 
					</table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'">
 | 
					<div class="m-n2 row row-cols-paperless-cards" *ngIf="displayMode == 'smallCards'">
 | 
				
			||||||
  <app-document-card-small [selected]="list.isSelected(d)" (selectedChange)="list.setSelected(d, $event)"  [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small>
 | 
					  <app-document-card-small [selected]="list.isSelected(d)" (toggleSelected)="toggleSelected(d, $event)"  [document]="d" *ngFor="let d of list.documents; trackBy: trackByDocumentId" (clickTag)="clickTag($event)" (clickCorrespondent)="clickCorrespondent($event)"></app-document-card-small>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -160,6 +160,10 @@ export class DocumentListComponent implements OnInit {
 | 
				
			|||||||
    this.filterRulesModified = modified
 | 
					    this.filterRulesModified = modified
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  toggleSelected(document: PaperlessDocument, event: Event): void {
 | 
				
			||||||
 | 
					    this.list.toggleSelected(document)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  clickTag(tagID: number) {
 | 
					  clickTag(tagID: number) {
 | 
				
			||||||
    this.list.selectNone()
 | 
					    this.list.selectNone()
 | 
				
			||||||
    setTimeout(() => {
 | 
					    setTimeout(() => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -255,6 +255,9 @@ export class DocumentListViewService {
 | 
				
			|||||||
    } else if (!value) {
 | 
					    } else if (!value) {
 | 
				
			||||||
      this.selected.delete(d.id)
 | 
					      this.selected.delete(d.id)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  toggleSelected(d: PaperlessDocument): void {
 | 
				
			||||||
 | 
					    if (this.selected.has(d.id)) this.selected.delete(d.id)
 | 
				
			||||||
 | 
					    else this.selected.add(d.id)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor(private documentService: DocumentService, private settings: SettingsService, private router: Router) {
 | 
					  constructor(private documentService: DocumentService, private settings: SettingsService, private router: Router) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user