import { Component, Inject, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { SearchResult } from '../../search/models/search-result.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { hasValue } from '../../empty.util'; import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component'; import { TruncatableService } from '../../truncatable/truncatable.service'; import { Metadata } from '../../../core/shared/metadata.utils'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { APP_CONFIG, AppConfig } from '../../../../config/app-config.interface'; @Component({ selector: 'ds-search-result-list-element', template: `` }) export class SearchResultListElementComponent, K extends DSpaceObject> extends AbstractListableElementComponent implements OnInit { /** * The DSpaceObject of the search result */ dso: K; dsoTitle: string; public constructor(protected truncatableService: TruncatableService, protected dsoNameService: DSONameService, @Inject(APP_CONFIG) protected appConfig?: AppConfig) { super(); } /** * Retrieve the dso from the search result */ ngOnInit(): void { if (hasValue(this.object)) { this.dso = this.object.indexableObject; this.dsoTitle = this.dsoNameService.getName(this.dso); } } /** * Gets all matching metadata string values from hitHighlights or dso metadata, preferring hitHighlights. * * @param {string|string[]} keyOrKeys The metadata key(s) in scope. Wildcards are supported; see [[Metadata]]. * @returns {string[]} the matching string values or an empty array. */ allMetadataValues(keyOrKeys: string | string[]): string[] { return Metadata.allValues([this.object.hitHighlights, this.dso.metadata], keyOrKeys); } /** * Gets the first matching metadata string value from hitHighlights or dso metadata, preferring hitHighlights. * * @param {string|string[]} keyOrKeys The metadata key(s) in scope. Wildcards are supported; see [[Metadata]]. * @returns {string} the first matching string value, or `undefined`. */ firstMetadataValue(keyOrKeys: string | string[]): string { return Metadata.firstValue([this.object.hitHighlights, this.dso.metadata], keyOrKeys); } /** * Emits if the list element is currently collapsed or not */ isCollapsed(): Observable { return this.truncatableService.isCollapsed(this.dso.id); } }