diff --git a/src/app/core/shared/context.model.ts b/src/app/core/shared/context.model.ts index 4699a7977b..207c1fb99d 100644 --- a/src/app/core/shared/context.model.ts +++ b/src/app/core/shared/context.model.ts @@ -13,4 +13,5 @@ export enum Context { EntitySearchModal = 'EntitySearchModal', AdminSearch = 'adminSearch', AdminWorkflowSearch = 'adminWorkflowSearch', + SideBarSearchModal = 'sideBarSearchModal', } diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.html b/src/app/shared/dso-selector/dso-selector/dso-selector.component.html index 92ddf4cf36..8a2f9272c4 100644 --- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.html +++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.html @@ -16,6 +16,6 @@ title="{{ listEntry.indexableObject.name }}" (click)="onSelect.emit(listEntry.indexableObject)" #listEntryElement> + [linkType]=linkTypes.None [context]="context"> diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts index 37c9a99f59..d0404d61c9 100644 --- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts +++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts @@ -21,6 +21,7 @@ import { PaginatedList } from '../../../core/data/paginated-list'; import { SearchResult } from '../../search/search-result.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { ViewMode } from '../../../core/shared/view-mode.model'; +import { Context } from '../../../core/shared/context.model'; @Component({ selector: 'ds-dso-selector', @@ -85,6 +86,11 @@ export class DSOSelectorComponent implements OnInit { */ linkTypes = CollectionElementLinkType; + /** + * This component's context to display listable objects for + */ + context = Context.SideBarSearchModal; + constructor(private searchService: SearchService) { } diff --git a/src/app/shared/object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component.html b/src/app/shared/object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component.html new file mode 100644 index 0000000000..be25f1af49 --- /dev/null +++ b/src/app/shared/object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component.html @@ -0,0 +1 @@ +Test display for sidebar-search list elements diff --git a/src/app/shared/object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component.ts b/src/app/shared/object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component.ts new file mode 100644 index 0000000000..49724a9309 --- /dev/null +++ b/src/app/shared/object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component.ts @@ -0,0 +1,17 @@ +import { listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator'; +import { ViewMode } from '../../../../../core/shared/view-mode.model'; +import { Component } from '@angular/core'; +import { Context } from '../../../../../core/shared/context.model'; +import { ItemSearchResult } from '../../../../object-collection/shared/item-search-result.model'; +import { Item } from '../../../../../core/shared/item.model'; +import { SidebarSearchListElementComponent } from '../../sidebar-search-list-element.component'; + +@listableObjectComponent('PublicationSearchResult', ViewMode.ListElement, Context.SideBarSearchModal) +@listableObjectComponent(ItemSearchResult, ViewMode.ListElement, Context.SideBarSearchModal) +@Component({ + selector: 'ds-publication-sidebar-search-list-element', + templateUrl: '../../sidebar-search-list-element.component.html' +}) +export class PublicationSidebarSearchListElementComponent extends SidebarSearchListElementComponent { + +} diff --git a/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.html b/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.html new file mode 100644 index 0000000000..b0fe1e58d2 --- /dev/null +++ b/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.html @@ -0,0 +1,3 @@ +{{ parentTitle$ | async }} +{{ title }} +{{ description }} diff --git a/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.ts b/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.ts new file mode 100644 index 0000000000..0489f9f3b7 --- /dev/null +++ b/src/app/shared/object-list/sidebar-search-list-element/sidebar-search-list-element.component.ts @@ -0,0 +1,56 @@ +import { SearchResult } from '../../search/search-result.model'; +import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { SearchResultListElementComponent } from '../search-result-list-element/search-result-list-element.component'; +import { Component } from '@angular/core'; +import { hasValue } from '../../empty.util'; +import { Observable } from 'rxjs/internal/Observable'; +import { TruncatableService } from '../../truncatable/truncatable.service'; +import { LinkService } from '../../../core/cache/builders/link.service'; +import { find, map } from 'rxjs/operators'; +import { ChildHALResource } from '../../../core/shared/child-hal-resource.model'; +import { followLink } from '../../utils/follow-link-config.model'; +import { RemoteData } from '../../../core/data/remote-data'; + +@Component({ + selector: 'ds-sidebar-search-list-element', + templateUrl: './sidebar-search-list-element.component.html' +}) +export class SidebarSearchListElementComponent, K extends DSpaceObject> extends SearchResultListElementComponent { + parentTitle$: Observable; + title: string; + description: string; + + public constructor(protected truncatableService: TruncatableService, + protected linkService: LinkService) { + super(truncatableService); + } + + ngOnInit(): void { + super.ngOnInit(); + if (hasValue(this.dso)) { + this.parentTitle$ = this.getParentTitle(); + this.title = this.getTitle(); + this.description = this.getDescription(); + } + } + + getTitle(): string { + return this.firstMetadataValue('dc.title'); + } + + getDescription(): string { + // TODO: Expand description + return this.firstMetadataValue('dc.publisher'); + } + + getParentTitle(): Observable { + // TODO: Remove cast to "any" and replace with proper type-check + const propertyName = (this.dso as any).getParentLinkKey(); + return this.linkService.resolveLink(this.dso, followLink(propertyName))[propertyName].pipe( + find((parentRD: RemoteData) => parentRD.hasSucceeded || parentRD.statusCode === 204), + map((parentRD: RemoteData) => { + return parentRD.payload.firstMetadataValue('dc.title'); + }) + ); + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 5f35ed4ceb..5b849eb403 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -210,6 +210,8 @@ import { CollectionDropdownComponent } from './collection-dropdown/collection-dr import { DsSelectComponent } from './ds-select/ds-select.component'; import { VocabularyTreeviewComponent } from './vocabulary-treeview/vocabulary-treeview.component'; import { CurationFormComponent } from '../curation-form/curation-form.component'; +import { PublicationSidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/item-types/publication/publication-sidebar-search-list-element.component'; +import { SidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/sidebar-search-list-element.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -483,7 +485,9 @@ const ENTRY_COMPONENTS = [ CurationFormComponent, ExportMetadataSelectorComponent, ConfirmationModalComponent, - VocabularyTreeviewComponent + VocabularyTreeviewComponent, + SidebarSearchListElementComponent, + PublicationSidebarSearchListElementComponent, ]; const SHARED_ITEM_PAGE_COMPONENTS = [