import { AsyncPipe } from '@angular/common' import { AfterViewInit, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core' import { RouterModule } from '@angular/router' import { NgbProgressbarModule, NgbTooltipModule, } from '@ng-bootstrap/ng-bootstrap' import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons' import { DEFAULT_DISPLAY_FIELDS, DisplayField, Document, } from 'src/app/data/document' import { SETTINGS_KEYS } from 'src/app/data/ui-settings' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { CustomDatePipe } from 'src/app/pipes/custom-date.pipe' import { DocumentTitlePipe } from 'src/app/pipes/document-title.pipe' import { IsNumberPipe } from 'src/app/pipes/is-number.pipe' import { UsernamePipe } from 'src/app/pipes/username.pipe' import { DocumentService } from 'src/app/services/rest/document.service' import { SettingsService } from 'src/app/services/settings.service' import { CustomFieldDisplayComponent } from '../../common/custom-field-display/custom-field-display.component' import { PreviewPopupComponent } from '../../common/preview-popup/preview-popup.component' import { TagComponent } from '../../common/tag/tag.component' import { LoadingComponentWithPermissions } from '../../loading-component/loading.component' @Component({ selector: 'pngx-document-card-large', templateUrl: './document-card-large.component.html', styleUrls: ['./document-card-large.component.scss'], imports: [ DocumentTitlePipe, IsNumberPipe, PreviewPopupComponent, TagComponent, CustomFieldDisplayComponent, AsyncPipe, UsernamePipe, IfPermissionsDirective, CustomDatePipe, RouterModule, NgbTooltipModule, NgbProgressbarModule, NgxBootstrapIconsModule, ], }) export class DocumentCardLargeComponent extends LoadingComponentWithPermissions implements AfterViewInit { DisplayField = DisplayField constructor( private documentService: DocumentService, public settingsService: SettingsService ) { super() } @Input() selected = false @Input() displayFields: string[] = DEFAULT_DISPLAY_FIELDS.map((f) => f.id) @Output() toggleSelected = new EventEmitter() get selectable() { return this.toggleSelected.observers.length > 0 } @Input() document: Document @Output() dblClickDocument = new EventEmitter() @Output() clickTag = new EventEmitter() @Output() clickCorrespondent = new EventEmitter() @Output() clickDocumentType = new EventEmitter() @Output() clickStoragePath = new EventEmitter() @Output() clickMoreLike = new EventEmitter() @ViewChild('popupPreview') popupPreview: PreviewPopupComponent mouseOnPreview = false popoverHidden = true ngAfterViewInit(): void { setInterval(() => { this.show = true }, 100) } get searchScoreClass() { if (this.document.__search_hit__) { if (this.document.__search_hit__.score > 0.7) { return 'success' } else if (this.document.__search_hit__.score > 0.3) { return 'warning' } else { return 'danger' } } } get searchNoteHighlights() { let highlights = [] if ( this.document['__search_hit__'] && this.document['__search_hit__'].note_highlights ) { // only show notes with a match highlights = (this.document['__search_hit__'].note_highlights as string) .split(',') .filter((highlight) => highlight.includes(' 500 ? '...' : '') ) } get notesEnabled(): boolean { return this.settingsService.get(SETTINGS_KEYS.NOTES_ENABLED) } }