@@ -14,13 +14,14 @@ import { DSpaceObject } from '../shared/dspace-object.model';
1414import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model' ;
1515import { SearchObjects } from '../../shared/search/models/search-objects.model' ;
1616import { SearchService } from '../shared/search/search.service' ;
17- import { WorkspaceItem } from '../submission/models/workspaceitem.model' ;
18- import { WorkflowItem } from '../submission/models/workflowitem.model' ;
19- import { hasValue } from '../../shared/empty.util' ;
17+ import { hasValue , isNotEmpty } from '../../shared/empty.util' ;
2018import { FollowAuthorityMetadata } from '../../../config/search-follow-metadata.interface' ;
2119import { MetadataValue } from '../shared/metadata.models' ;
2220import { Metadata } from '../shared/metadata.utils' ;
2321import isArray from 'lodash/isArray' ;
22+ import { WORKSPACEITEM } from '../eperson/models/workspaceitem.resource-type' ;
23+ import { WORKFLOWITEM } from '../eperson/models/workflowitem.resource-type' ;
24+ import { ITEM } from '../shared/item.resource-type' ;
2425
2526/**
2627 * The service aims to manage browse requests and subsequent extra fetch requests.
@@ -84,7 +85,8 @@ export class SearchManager {
8485 protected completeSearchObjectsWithExtraData < T extends DSpaceObject > ( ) {
8586 return switchMap ( ( searchObjectsRD : RemoteData < SearchObjects < T > > ) => {
8687 if ( searchObjectsRD . isSuccess ) {
87- const items : Item [ ] = searchObjectsRD . payload . page . map ( ( searchResult ) => searchResult . indexableObject ) as any ;
88+ const items : Item [ ] = searchObjectsRD . payload . page
89+ . map ( ( searchResult ) => isNotEmpty ( searchResult ?. _embedded ?. indexableObject ) ? searchResult . _embedded . indexableObject : searchResult . indexableObject ) as any ;
8890 return this . fetchExtraData ( items ) . pipe ( map ( ( ) => {
8991 return searchObjectsRD ;
9092 } ) ) ;
@@ -96,13 +98,16 @@ export class SearchManager {
9698 protected fetchExtraData < T extends DSpaceObject > ( objects : T [ ] ) : Observable < any > {
9799
98100 const items : Item [ ] = objects
99- . map ( ( object ) => {
100- if ( object instanceof WorkspaceItem || object instanceof WorkflowItem ) {
101- return object . item as Item ;
102- }
103- if ( object instanceof Item ) {
101+ . map ( ( object : any ) => {
102+ if ( object . type === ITEM . value ) {
104103 return object as Item ;
104+ } else if ( object . type === WORKSPACEITEM . value || object . type === WORKFLOWITEM . value ) {
105+ return object ?. _embedded ?. item as Item ;
106+ } else {
107+ // Handle workflow task here, where the item is embedded in a workflowitem
108+ return object ?. _embedded ?. workflowitem ?. _embedded ?. item as Item ;
105109 }
110+
106111 } )
107112 . filter ( ( item ) => hasValue ( item ) ) ;
108113
@@ -127,12 +132,12 @@ export class SearchManager {
127132 if ( item . entityType === followMetadata . type ) {
128133 if ( isArray ( followMetadata . metadata ) ) {
129134 followMetadata . metadata . forEach ( ( metadata ) => {
130- item . allMetadata ( metadata )
135+ Metadata . all ( item . metadata , metadata )
131136 . filter ( ( metadataValue : MetadataValue ) => Metadata . hasValidItemAuthority ( metadataValue . authority ) )
132137 . forEach ( ( metadataValue : MetadataValue ) => uuidMap [ metadataValue . authority ] = metadataValue ) ;
133138 } ) ;
134139 } else {
135- item . allMetadata ( followMetadata . metadata )
140+ Metadata . all ( item . metadata , followMetadata . metadata )
136141 . filter ( ( metadataValue : MetadataValue ) => Metadata . hasValidItemAuthority ( metadataValue . authority ) )
137142 . forEach ( ( metadataValue : MetadataValue ) => uuidMap [ metadataValue . authority ] = metadataValue ) ;
138143 }
0 commit comments