From 72e5909b713cb39022cccbdca298ff252faeffba Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 1 Sep 2022 19:02:19 +0200 Subject: [PATCH] 94060: MyDSpace Workflow/Workspace item display as correct entity types --- .../my-dspace-page/my-dspace-search.module.ts | 2 + ...-search-result-list-element.component.html | 13 +++---- ...arch-result-list-element.component.spec.ts | 9 +++-- ...em-search-result-list-element.component.ts | 36 +++++++++-------- ...-search-result-list-element.component.html | 17 ++++---- ...arch-result-list-element.component.spec.ts | 9 +++-- ...em-search-result-list-element.component.ts | 39 +++++++++++-------- 7 files changed, 68 insertions(+), 57 deletions(-) diff --git a/src/app/my-dspace-page/my-dspace-search.module.ts b/src/app/my-dspace-page/my-dspace-search.module.ts index a97f2207e7..d2c975b352 100644 --- a/src/app/my-dspace-page/my-dspace-search.module.ts +++ b/src/app/my-dspace-page/my-dspace-search.module.ts @@ -16,6 +16,7 @@ import { WorkflowItemSearchResultListElementComponent } from '../shared/object-l import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component'; import { ClaimedApprovedSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component'; import { ClaimedDeclinedSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component'; +import { ResearchEntitiesModule } from '../entity-groups/research-entities/research-entities.module'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -38,6 +39,7 @@ const ENTRY_COMPONENTS = [ CommonModule, SharedModule, MyDspacePageRoutingModule, + ResearchEntitiesModule.withEntryComponents() ], declarations: [ ...ENTRY_COMPONENTS diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html index 74fc5fd06d..2529bbb012 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html @@ -1,11 +1,10 @@ - - - + + + diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts index 61337b0cb3..609e53dfdb 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts @@ -83,14 +83,15 @@ describe('WorkflowItemSearchResultListElementComponent', () => { })); beforeEach(() => { - component.dso = mockResultObject.indexableObject; + component.object = mockResultObject; fixture.detectChanges(); }); - it('should init item properly', (done) => { - component.item$.pipe(take(1)).subscribe((i) => { + it('should init derivedSearchResult$ properly', (done) => { + component.derivedSearchResult$.pipe(take(1)).subscribe((i) => { expect(linkService.resolveLink).toHaveBeenCalled(); - expect(i).toBe(item); + expect(i.indexableObject).toBe(item); + expect(i.hitHighlights).toBe(mockResultObject.hitHighlights); done(); }); }); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts index 836a3ee268..455be79ec6 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts @@ -1,14 +1,12 @@ import { Component } from '@angular/core'; import { Observable } from 'rxjs'; -import { find, map } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { LinkService } from '../../../../core/cache/builders/link.service'; -import { RemoteData } from '../../../../core/data/remote-data'; import { Item } from '../../../../core/shared/item.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; -import { isNotUndefined } from '../../../empty.util'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; @@ -16,6 +14,9 @@ import { TruncatableService } from '../../../truncatable/truncatable.service'; import { followLink } from '../../../utils/follow-link-config.model'; import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; +import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; +import { CollectionElementLinkType } from '../../../object-collection/collection-element-link.type'; /** * This component renders workflowitem object for the search result in the list view. @@ -28,11 +29,14 @@ import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; @listableObjectComponent(WorkflowItemSearchResult, ViewMode.ListElement) export class WorkflowItemSearchResultListElementComponent extends SearchResultListElementComponent { + LinkTypes = CollectionElementLinkType; + + ViewModes = ViewMode; /** - * The item object that belonging to the result object + * The item search result derived from the WorkspaceItemSearchResult */ - public item$: Observable; + derivedSearchResult$: Observable; /** * Represent item's status @@ -52,18 +56,18 @@ export class WorkflowItemSearchResultListElementComponent extends SearchResultLi */ ngOnInit() { super.ngOnInit(); - this.linkService.resolveLink(this.dso, followLink('item')); - this.initItem(this.dso.item as Observable> ); + this.deriveSearchResult(); } - /** - * Retrieve item from result object - */ - initItem(item$: Observable>) { - this.item$ = item$.pipe( - find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload)), - map((rd: RemoteData) => rd.payload) - ); + private deriveSearchResult() { + this.linkService.resolveLink(this.object.indexableObject, followLink('item')); + this.derivedSearchResult$ = this.object.indexableObject.item.pipe( + getFirstSucceededRemoteDataPayload(), + map((item: Item) => { + const result = new ItemSearchResult(); + result.indexableObject = item; + result.hitHighlights = this.object.hitHighlights; + return result; + })); } - } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html index 41d95b87af..76cf207f00 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html @@ -1,11 +1,10 @@ - - - - + + + + + *ngIf="!(derivedSearchResult$ | async)" + [showMessage]="false"> diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts index 87f5fd3733..eaabd7503d 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts @@ -82,14 +82,15 @@ describe('WorkspaceItemSearchResultListElementComponent', () => { })); beforeEach(() => { - component.dso = mockResultObject.indexableObject; + component.object = mockResultObject; fixture.detectChanges(); }); - it('should init item properly', (done) => { - component.item$.pipe(take(1)).subscribe((i) => { + it('should init derivedSearchResult$ properly', (done) => { + component.derivedSearchResult$.pipe(take(1)).subscribe((i) => { expect(linkService.resolveLink).toHaveBeenCalled(); - expect(i).toBe(item); + expect(i.indexableObject).toBe(item); + expect(i.hitHighlights).toBe(mockResultObject.hitHighlights); done(); }); }); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts index 5edfc1929e..e76886beb1 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts @@ -1,21 +1,22 @@ import { Component } from '@angular/core'; import { Observable } from 'rxjs'; -import { find, map } from 'rxjs/operators'; import { LinkService } from '../../../../core/cache/builders/link.service'; -import { RemoteData } from '../../../../core/data/remote-data'; import { Item } from '../../../../core/shared/item.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; -import { isNotUndefined } from '../../../empty.util'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspace-item-search-result.model'; import { TruncatableService } from '../../../truncatable/truncatable.service'; -import { followLink } from '../../../utils/follow-link-config.model'; import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; +import { map } from 'rxjs/operators'; +import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; +import { CollectionElementLinkType } from '../../../object-collection/collection-element-link.type'; +import { followLink } from '../../../utils/follow-link-config.model'; /** * This component renders workspaceitem object for the search result in the list view. @@ -27,12 +28,15 @@ import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; }) @listableObjectComponent(WorkspaceItemSearchResult, ViewMode.ListElement) -export class WorkspaceItemSearchResultListElementComponent extends SearchResultListElementComponent { +export class WorkspaceItemSearchResultListElementComponent extends SearchResultListElementComponent { + LinkTypes = CollectionElementLinkType; + + ViewModes = ViewMode; /** - * The item object that belonging to the result object + * The item search result derived from the WorkspaceItemSearchResult */ - item$: Observable; + derivedSearchResult$: Observable; /** * Represent item's status @@ -52,17 +56,18 @@ export class WorkspaceItemSearchResultListElementComponent extends SearchResultL */ ngOnInit() { super.ngOnInit(); - this.linkService.resolveLink(this.dso, followLink('item')); - this.initItem(this.dso.item as Observable>); + this.deriveSearchResult(); } - /** - * Retrieve item from result object - */ - initItem(item$: Observable>) { - this.item$ = item$.pipe( - find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload)), - map((rd: RemoteData) => rd.payload) - ); + private deriveSearchResult() { + this.linkService.resolveLink(this.object.indexableObject, followLink('item')); + this.derivedSearchResult$ = this.object.indexableObject.item.pipe( + getFirstSucceededRemoteDataPayload(), + map((item: Item) => { + const result = new ItemSearchResult(); + result.indexableObject = item; + result.hitHighlights = this.object.hitHighlights; + return result; + })); } }