import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core' import { map } from 'rxjs/operators' import { PaperlessDocument } from 'src/app/data/paperless-document' import { DocumentService } from 'src/app/services/rest/document.service' import { SettingsService } from 'src/app/services/settings.service' import { NgbPopover } from '@ng-bootstrap/ng-bootstrap' import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings' @Component({ selector: 'app-document-card-small', templateUrl: './document-card-small.component.html', styleUrls: [ './document-card-small.component.scss', '../popover-preview/popover-preview.scss', ], }) export class DocumentCardSmallComponent { constructor( private documentService: DocumentService, private settingsService: SettingsService ) {} @Input() selected = false @Output() toggleSelected = new EventEmitter() @Input() document: PaperlessDocument @Output() clickTag = new EventEmitter() @Output() clickCorrespondent = new EventEmitter() @Output() clickDocumentType = new EventEmitter() @Output() clickStoragePath = new EventEmitter() moreTags: number = null @ViewChild('popover') popover: NgbPopover mouseOnPreview = false popoverHidden = true getIsThumbInverted() { return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED) } getThumbUrl() { return this.documentService.getThumbUrl(this.document.id) } getDownloadUrl() { return this.documentService.getDownloadUrl(this.document.id) } get previewUrl() { return this.documentService.getPreviewUrl(this.document.id) } getTagsLimited$() { return this.document.tags$.pipe( map((tags) => { if (tags.length > 7) { this.moreTags = tags.length - 6 return tags.slice(0, 6) } else { return tags } }) ) } mouseEnterPreview() { this.mouseOnPreview = true if (!this.popover.isOpen()) { // we're going to open but hide to pre-load content during hover delay this.popover.open() this.popoverHidden = true setTimeout(() => { if (this.mouseOnPreview) { // show popover this.popoverHidden = false } else { this.popover.close() } }, 600) } } mouseLeavePreview() { this.mouseOnPreview = false } mouseLeaveCard() { this.popover.close() } }