import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { SearchResult } from '../../search/search-result.model'; import { BitstreamDataService } from '../../../core/data/bitstream-data.service'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { Metadata } from '../../../core/shared/metadata.utils'; import { hasValue } from '../../empty.util'; import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component'; import { TruncatableService } from '../../truncatable/truncatable.service'; @Component({ selector: 'ds-search-result-grid-element', template: `` }) export class SearchResultGridElementComponent, K extends DSpaceObject> extends AbstractListableElementComponent implements OnInit { /** * The DSpaceObject of the search result */ dso: K; /** * Whether or not the grid element is currently collapsed */ isCollapsed$: Observable; public constructor( protected truncatableService: TruncatableService, protected bitstreamDataService: BitstreamDataService ) { super(); } /** * Retrieve the dso from the search result */ ngOnInit(): void { if (hasValue(this.object)) { this.dso = this.object.indexableObject; this.isCollapsed$ = this.isCollapsed(); } } /** * 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); } private isCollapsed(): Observable { return this.truncatableService.isCollapsed(this.dso.id); } }