refactored mydspace/listelements etc

This commit is contained in:
lotte
2019-10-08 15:51:31 +02:00
parent a1f144aa0b
commit 0fb12c4274
76 changed files with 505 additions and 655 deletions

View File

@@ -7,7 +7,6 @@ import { TranslateService } from '@ngx-translate/core';
import { SubmissionState } from '../../submission/submission.reducers'; import { SubmissionState } from '../../submission/submission.reducers';
import { AuthService } from '../../core/auth/auth.service'; import { AuthService } from '../../core/auth/auth.service';
import { MyDSpaceResult } from '../my-dspace-result.model';
import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model';
import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsService } from '../../shared/notifications/notifications.service';
import { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; import { NotificationOptions } from '../../shared/notifications/models/notification-options.model';
@@ -15,6 +14,7 @@ import { UploaderOptions } from '../../shared/uploader/uploader-options.model';
import { HALEndpointService } from '../../core/shared/hal-endpoint.service'; import { HALEndpointService } from '../../core/shared/hal-endpoint.service';
import { NotificationType } from '../../shared/notifications/models/notification-type'; import { NotificationType } from '../../shared/notifications/models/notification-type';
import { hasValue } from '../../shared/empty.util'; import { hasValue } from '../../shared/empty.util';
import { SearchResult } from '../../+search-page/search-result.model';
/** /**
* This component represents the whole mydspace page header * This component represents the whole mydspace page header
@@ -25,7 +25,7 @@ import { hasValue } from '../../shared/empty.util';
templateUrl: './my-dspace-new-submission.component.html' templateUrl: './my-dspace-new-submission.component.html'
}) })
export class MyDSpaceNewSubmissionComponent implements OnDestroy, OnInit { export class MyDSpaceNewSubmissionComponent implements OnDestroy, OnInit {
@Output() uploadEnd = new EventEmitter<Array<MyDSpaceResult<DSpaceObject>>>(); @Output() uploadEnd = new EventEmitter<Array<SearchResult<DSpaceObject>>>();
/** /**
* The UploaderOptions object * The UploaderOptions object

View File

@@ -20,7 +20,6 @@ import { SearchService } from '../+search-page/search-service/search.service';
import { SearchSidebarService } from '../+search-page/search-sidebar/search-sidebar.service'; import { SearchSidebarService } from '../+search-page/search-sidebar/search-sidebar.service';
import { hasValue } from '../shared/empty.util'; import { hasValue } from '../shared/empty.util';
import { getSucceededRemoteData } from '../core/shared/operators'; import { getSucceededRemoteData } from '../core/shared/operators';
import { MyDSpaceResult } from './my-dspace-result.model';
import { MyDSpaceResponseParsingService } from '../core/data/mydspace-response-parsing.service'; import { MyDSpaceResponseParsingService } from '../core/data/mydspace-response-parsing.service';
import { SearchConfigurationOption } from '../+search-page/search-switch-configuration/search-configuration-option.model'; import { SearchConfigurationOption } from '../+search-page/search-switch-configuration/search-configuration-option.model';
import { RoleType } from '../core/roles/role-types'; import { RoleType } from '../core/roles/role-types';
@@ -28,6 +27,7 @@ import { SearchConfigurationService } from '../+search-page/search-service/searc
import { MyDSpaceConfigurationService } from './my-dspace-configuration.service'; import { MyDSpaceConfigurationService } from './my-dspace-configuration.service';
import { ViewMode } from '../core/shared/view-mode.model'; import { ViewMode } from '../core/shared/view-mode.model';
import { MyDSpaceRequest } from '../core/data/request.models'; import { MyDSpaceRequest } from '../core/data/request.models';
import { SearchResult } from '../+search-page/search-result.model';
export const MYDSPACE_ROUTE = '/mydspace'; export const MYDSPACE_ROUTE = '/mydspace';
export const SEARCH_CONFIG_SERVICE: InjectionToken<SearchConfigurationService> = new InjectionToken<SearchConfigurationService>('searchConfigurationService'); export const SEARCH_CONFIG_SERVICE: InjectionToken<SearchConfigurationService> = new InjectionToken<SearchConfigurationService>('searchConfigurationService');
@@ -63,7 +63,7 @@ export class MyDSpacePageComponent implements OnInit {
/** /**
* The current search results * The current search results
*/ */
resultsRD$: BehaviorSubject<RemoteData<PaginatedList<MyDSpaceResult<DSpaceObject>>>> = new BehaviorSubject(null); resultsRD$: BehaviorSubject<RemoteData<PaginatedList<SearchResult<DSpaceObject>>>> = new BehaviorSubject(null);
/** /**
* The current paginated search options * The current paginated search options

View File

@@ -7,19 +7,20 @@ import { MyDspacePageRoutingModule } from './my-dspace-page-routing.module';
import { MyDSpacePageComponent } from './my-dspace-page.component'; import { MyDSpacePageComponent } from './my-dspace-page.component';
import { SearchPageModule } from '../+search-page/search-page.module'; import { SearchPageModule } from '../+search-page/search-page.module';
import { MyDSpaceResultsComponent } from './my-dspace-results/my-dspace-results.component'; import { MyDSpaceResultsComponent } from './my-dspace-results/my-dspace-results.component';
import { WorkspaceitemMyDSpaceResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-list-element.component'; import { WorkspaceItemSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component';
import { ItemMyDSpaceResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component'; import { ClaimedSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component';
import { WorkflowitemMyDSpaceResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-list-element.component'; import { PoolSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component';
import { ClaimedMyDSpaceResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/claimed-my-dspace-result/claimed-my-dspace-result-list-element.component';
import { PoolMyDSpaceResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/pool-my-dspace-result/pool-my-dspace-result-list-element.component';
import { MyDSpaceNewSubmissionComponent } from './my-dspace-new-submission/my-dspace-new-submission.component'; import { MyDSpaceNewSubmissionComponent } from './my-dspace-new-submission/my-dspace-new-submission.component';
import { ItemMyDSpaceResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component'; import { ItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component';
import { WorkspaceitemMyDSpaceResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workspaceitem-my-dspace-result/workspaceitem-my-dspace-result-detail-element.component'; import { WorkspaceItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workspace-item-my-dspace-result/workspace-item-search-result-detail-element.component';
import { WorkflowitemMyDSpaceResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workflowitem-my-dspace-result/workflowitem-my-dspace-result-detail-element.component'; import { WorkflowItemSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component';
import { ClaimedMyDSpaceResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/claimed-my-dspace-result/claimed-my-dspace-result-detail-element.component'; import { ClaimedTaskSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component';
import { PoolMyDSpaceResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-my-dspace-result-detail-element.component';
import { MyDSpaceGuard } from './my-dspace.guard'; import { MyDSpaceGuard } from './my-dspace.guard';
import { MyDSpaceConfigurationService } from './my-dspace-configuration.service'; import { MyDSpaceConfigurationService } from './my-dspace-configuration.service';
import { SearchResultListElementComponent } from '../shared/object-list/search-result-list-element/search-result-list-element.component';
import { ItemSearchResultListElementSubmissionComponent } from '../shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component';
import { WorkflowItemSearchResultListElementComponent } from '../shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component';
import { PoolSearchResultDetailElementComponent } from '../shared/object-detail/my-dspace-result-detail-element/pool-my-dspace-result/pool-search-result-detail-element.component';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -31,33 +32,33 @@ import { MyDSpaceConfigurationService } from './my-dspace-configuration.service'
declarations: [ declarations: [
MyDSpacePageComponent, MyDSpacePageComponent,
MyDSpaceResultsComponent, MyDSpaceResultsComponent,
ItemMyDSpaceResultListElementComponent, WorkspaceItemSearchResultListElementComponent,
WorkspaceitemMyDSpaceResultListElementComponent, WorkflowItemSearchResultListElementComponent,
WorkflowitemMyDSpaceResultListElementComponent, ClaimedSearchResultListElementComponent,
ClaimedMyDSpaceResultListElementComponent, PoolSearchResultListElementComponent,
PoolMyDSpaceResultListElementComponent, ItemSearchResultDetailElementComponent,
ItemMyDSpaceResultDetailElementComponent, WorkspaceItemSearchResultDetailElementComponent,
WorkspaceitemMyDSpaceResultDetailElementComponent, WorkflowItemSearchResultDetailElementComponent,
WorkflowitemMyDSpaceResultDetailElementComponent, ClaimedTaskSearchResultDetailElementComponent,
ClaimedMyDSpaceResultDetailElementComponent, PoolSearchResultDetailElementComponent,
PoolMyDSpaceResultDetailElementComponent, MyDSpaceNewSubmissionComponent,
MyDSpaceNewSubmissionComponent ItemSearchResultListElementSubmissionComponent
], ],
providers: [ providers: [
MyDSpaceGuard, MyDSpaceGuard,
MyDSpaceConfigurationService MyDSpaceConfigurationService
], ],
entryComponents: [ entryComponents: [
ItemMyDSpaceResultListElementComponent, SearchResultListElementComponent,
WorkspaceitemMyDSpaceResultListElementComponent, WorkspaceItemSearchResultListElementComponent,
WorkflowitemMyDSpaceResultListElementComponent, WorkflowItemSearchResultListElementComponent,
ClaimedMyDSpaceResultListElementComponent, ClaimedSearchResultListElementComponent,
PoolMyDSpaceResultListElementComponent, PoolSearchResultListElementComponent,
ItemMyDSpaceResultDetailElementComponent, ItemSearchResultDetailElementComponent,
WorkspaceitemMyDSpaceResultDetailElementComponent, WorkspaceItemSearchResultDetailElementComponent,
WorkflowitemMyDSpaceResultDetailElementComponent, WorkflowItemSearchResultDetailElementComponent,
ClaimedMyDSpaceResultDetailElementComponent, ClaimedTaskSearchResultDetailElementComponent,
PoolMyDSpaceResultDetailElementComponent PoolSearchResultDetailElementComponent
] ]
}) })

View File

@@ -1,22 +0,0 @@
import { DSpaceObject } from '../core/shared/dspace-object.model';
import { MetadataMap } from '../core/shared/metadata.models';
import { ListableObject } from '../shared/object-collection/shared/listable-object.model';
/**
* Represents a search result object of a certain (<T>) DSpaceObject
*/
export class MyDSpaceResult<T extends DSpaceObject> implements ListableObject {
/**
* The DSpaceObject that was found
*/
indexableObject: T;
/**
* The metadata that was used to find this item, hithighlighted
*/
hitHighlights: MetadataMap;
getRenderType(): string {
return this.indexableObject.getRenderType() + 'MyDSpaceResult';
}
}

View File

@@ -1,13 +1,12 @@
import { Component, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
import { RemoteData } from '../../core/data/remote-data'; import { RemoteData } from '../../core/data/remote-data';
import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model';
import { fadeIn, fadeInOut } from '../../shared/animations/fade'; import { fadeIn, fadeInOut } from '../../shared/animations/fade';
import { MyDSpaceResult } from '../my-dspace-result.model';
import { SearchOptions } from '../../+search-page/search-options.model'; import { SearchOptions } from '../../+search-page/search-options.model';
import { PaginatedList } from '../../core/data/paginated-list'; import { PaginatedList } from '../../core/data/paginated-list';
import { ViewMode } from '../../core/shared/view-mode.model'; import { ViewMode } from '../../core/shared/view-mode.model';
import { isEmpty } from '../../shared/empty.util'; import { isEmpty } from '../../shared/empty.util';
import { SearchResult } from '../../+search-page/search-result.model';
/** /**
* Component that represents all results for mydspace page * Component that represents all results for mydspace page
@@ -25,7 +24,7 @@ export class MyDSpaceResultsComponent {
/** /**
* The actual search result objects * The actual search result objects
*/ */
@Input() searchResults: RemoteData<PaginatedList<MyDSpaceResult<DSpaceObject>>>; @Input() searchResults: RemoteData<PaginatedList<SearchResult<DSpaceObject>>>;
/** /**
* The current configuration of the search * The current configuration of the search

View File

@@ -12,19 +12,13 @@ const searchResultMap = new Map();
* @param {GenericConstructor<ListableObject>} domainConstructor The constructor of the DSpaceObject * @param {GenericConstructor<ListableObject>} domainConstructor The constructor of the DSpaceObject
* @returns Decorator function that performs the actual mapping on initialization of the component * @returns Decorator function that performs the actual mapping on initialization of the component
*/ */
export function searchResultFor(domainConstructor: GenericConstructor<ListableObject>, configuration: string = null) { export function searchResultFor(domainConstructor: GenericConstructor<ListableObject>) {
return function decorator(searchResult: any) { return function decorator(searchResult: any) {
if (!searchResult) { if (!searchResult) {
return; return;
} }
if (isNull(configuration)) { searchResultMap.set(domainConstructor, searchResult);
searchResultMap.set(domainConstructor, searchResult);
} else {
if (!searchResultMap.get(configuration)) {
searchResultMap.set(configuration, new Map());
}
searchResultMap.get(configuration).set(domainConstructor, searchResult);
}
}; };
} }
@@ -33,10 +27,6 @@ export function searchResultFor(domainConstructor: GenericConstructor<ListableOb
* @param {GenericConstructor<ListableObject>} domainConstructor The DSpaceObject's constructor for which the search result component is requested * @param {GenericConstructor<ListableObject>} domainConstructor The DSpaceObject's constructor for which the search result component is requested
* @returns The component's constructor that matches the given DSpaceObject * @returns The component's constructor that matches the given DSpaceObject
*/ */
export function getSearchResultFor(domainConstructor: GenericConstructor<ListableObject>, configuration: string = null) { export function getSearchResultFor(domainConstructor: GenericConstructor<ListableObject>) {
if (isNull(configuration) || configuration === 'default' || hasNoValue(searchResultMap.get(configuration))) {
return searchResultMap.get(domainConstructor); return searchResultMap.get(domainConstructor);
} else {
return searchResultMap.get(configuration).get(domainConstructor);
}
} }

View File

@@ -158,7 +158,7 @@ export class SearchService implements OnDestroy {
let co = DSpaceObject; let co = DSpaceObject;
if (dsos.payload[index]) { if (dsos.payload[index]) {
const constructor: GenericConstructor<ListableObject> = dsos.payload[index].constructor as GenericConstructor<ListableObject>; const constructor: GenericConstructor<ListableObject> = dsos.payload[index].constructor as GenericConstructor<ListableObject>;
co = getSearchResultFor(constructor, searchOptions.configuration); co = getSearchResultFor(constructor);
return Object.assign(new co(), object, { return Object.assign(new co(), object, {
indexableObject: dsos.payload[index] indexableObject: dsos.payload[index]
}); });

View File

@@ -1,32 +1,30 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <div>
<div> <ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
<ds-grid-thumbnail [thumbnail]="item.getThumbnail() | async"> </ds-grid-thumbnail>
</ds-grid-thumbnail> </div>
</div> </a>
</a> <div class="card-body">
<div class="card-body"> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('dc.title')"></h4> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('creativework.datePublished')" class="item-date card-text text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="1">
<span [innerHTML]="firstMetadataValue('creativework.datePublished')"></span>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('creativework.datePublished')" class="item-date card-text text-muted"> </p>
<ds-truncatable-part [id]="item.id" [minLines]="1"> <p *ngIf="dso.hasMetadata('journal.title')" class="item-journal-title card-text">
<span [innerHTML]="firstMetadataValue('creativework.datePublished')"></span> <ds-truncatable-part [id]="dso.id" [minLines]="3">
</ds-truncatable-part> <span [innerHTML]="firstMetadataValue('journal.title')"></span>
</p> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('journal.title')" class="item-journal-title card-text"> </p>
<ds-truncatable-part [id]="item.id" [minLines]="3"> <div class="text-center">
<span [innerHTML]="firstMetadataValue('journal.title')"></span> <a [routerLink]="['/items/' + dso.id]"
</ds-truncatable-part> class="lead btn btn-primary viewButton">View</a>
</p>
<div class="text-center">
<a [routerLink]="['/items/' + item.id]"
class="lead btn btn-primary viewButton">View</a>
</div>
</div> </div>
</div> </div>
</ds-truncatable> </div>
</ng-container> </ds-truncatable>

View File

@@ -1,32 +1,30 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<div> <div>
<ds-grid-thumbnail [thumbnail]="this.item.getThumbnail() | async"> <ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
</ds-grid-thumbnail> </ds-grid-thumbnail>
</div> </div>
</a> </a>
<div class="card-body"> <div class="card-body">
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('dc.title')"></h4> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('creativework.datePublished')" class="item-date card-text text-muted"> <p *ngIf="dso.hasMetadata('creativework.datePublished')" class="item-date card-text text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<span [innerHTML]="firstMetadataValue('creativework.datePublished')"></span> <span [innerHTML]="firstMetadataValue('creativework.datePublished')"></span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<p *ngIf="item.hasMetadata('dc.description')" class="item-description card-text"> <p *ngIf="dso.hasMetadata('dc.description')" class="item-description card-text">
<ds-truncatable-part [id]="item.id" [minLines]="3"> <ds-truncatable-part [id]="dso.id" [minLines]="3">
<span [innerHTML]="firstMetadataValue('dc.description')"></span> <span [innerHTML]="firstMetadataValue('dc.description')"></span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<div class="text-center"> <div class="text-center">
<a [routerLink]="['/items/' + item.id]" <a [routerLink]="['/items/' + dso.id]"
class="lead btn btn-primary viewButton">View</a> class="lead btn btn-primary viewButton">View</a>
</div> </div>
</div> </div>
</div> </div>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -1,37 +1,35 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <div>
<div> <ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
<ds-grid-thumbnail [thumbnail]="this.item.getThumbnail() | async"> </ds-grid-thumbnail>
</ds-grid-thumbnail> </div>
</div> </a>
</a> <div class="card-body">
<div class="card-body"> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('dc.title')"></h4> </ds-truncatable-part>
</ds-truncatable-part> <p *ngIf="dso.hasMetadata('creativework.editor')"
<p *ngIf="item.hasMetadata('creativework.editor')" class="item-publisher card-text text-muted">
class="item-publisher card-text text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <span class="item-editor">{{dso.firstMetadataValue('creativework.editor')}}</span>
<span class="item-editor">{{item.firstMetadataValue('creativework.editor')}}</span> <span *ngIf="dso.hasMetadata('creativework.publisher')" class="item-publisher">
<span *ngIf="item.hasMetadata('creativework.publisher')" class="item-publisher">
<span>, </span> <span>, </span>
{{item.firstMetadataValue('creativework.publisher')}} {{dso.firstMetadataValue('creativework.publisher')}}
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<p *ngIf="item.hasMetadata('dc.description')" class="item-description card-text"> <p *ngIf="dso.hasMetadata('dc.description')" class="item-description card-text">
<ds-truncatable-part [id]="item.id" [minLines]="3"> <ds-truncatable-part [id]="dso.id" [minLines]="3">
<span [innerHTML]="firstMetadataValue('dc.description')"></span> <span [innerHTML]="firstMetadataValue('dc.description')"></span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<div class="text-center"> <div class="text-center">
<a [routerLink]="['/items/' + item.id]" <a [routerLink]="['/items/' + dso.id]"
class="lead btn btn-primary viewButton">View</a> class="lead btn btn-primary viewButton">View</a>
</div>
</div> </div>
</div> </div>
</ds-truncatable> </div>
</ng-container> </ds-truncatable>

View File

@@ -1,17 +1,16 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <a
<a [routerLink]="['/items/' + dso.id]" class="lead"
[routerLink]="['/items/' + item.id]" class="lead" [innerHTML]="firstMetadataValue('dc.title')"></a>
[innerHTML]="firstMetadataValue('dc.title')"></a> <span class="text-muted">
<span class="text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <span *ngIf="dso.allMetadata(['publicationvolume.volumeNumber']).length > 0"
<span *ngIf="item.allMetadata(['publicationvolume.volumeNumber']).length > 0"
class="item-list-journal-issues"> class="item-list-journal-issues">
<span *ngFor="let value of allMetadataValues(['publicationvolume.volumeNumber']); let last=last;"> <span *ngFor="let value of allMetadataValues(['publicationvolume.volumeNumber']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span> <span [innerHTML]="value"><span [innerHTML]="value"></span></span>
</span> </span>
<span *ngIf="item.allMetadata(['publicationissue.issueNumber']).length > 0" <span *ngIf="dso.allMetadata(['publicationissue.issueNumber']).length > 0"
class="item-list-journal-issue-numbers"> class="item-list-journal-issue-numbers">
<span *ngFor="let value of allMetadataValues(['publicationissue.issueNumber']); let last=last;"> <span *ngFor="let value of allMetadataValues(['publicationissue.issueNumber']); let last=last;">
<span> - </span><span [innerHTML]="value"><span [innerHTML]="value"></span></span> <span> - </span><span [innerHTML]="value"><span [innerHTML]="value"></span></span>
@@ -20,5 +19,4 @@
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -1,18 +1,17 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <a
<a [routerLink]="['/items/' + dso.id]" class="lead"
[routerLink]="['/items/' + item.id]" class="lead" [innerHTML]="firstMetadataValue('dc.title')"></a>
[innerHTML]="firstMetadataValue('dc.title')"></a> <span class="text-muted">
<span class="text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <span *ngIf="dso.allMetadata(['journal.title']).length > 0"
<span *ngIf="item.allMetadata(['journal.title']).length > 0"
class="item-list-journal-volumes"> class="item-list-journal-volumes">
<span *ngFor="let value of allMetadataValues(['journal.title']); let last=last;"> <span *ngFor="let value of allMetadataValues(['journal.title']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span> <span [innerHTML]="value"><span [innerHTML]="value"></span></span>
</span> </span>
</span> </span>
<span *ngIf="item.allMetadata(['publicationvolume.volumeNumber']).length > 0" <span *ngIf="dso.allMetadata(['publicationvolume.volumeNumber']).length > 0"
class="item-list-journal-volume-identifiers"> class="item-list-journal-volume-identifiers">
<span *ngFor="let value of allMetadataValues(['publicationvolume.volumeNumber']); let last=last;"> <span *ngFor="let value of allMetadataValues(['publicationvolume.volumeNumber']); let last=last;">
<span> (</span><span [innerHTML]="value"><span [innerHTML]="value"></span></span><span>)</span> <span> (</span><span [innerHTML]="value"><span [innerHTML]="value"></span></span><span>)</span>
@@ -20,5 +19,4 @@
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -1,12 +1,11 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <a
<a [routerLink]="['/items/' + dso.id]" class="lead"
[routerLink]="['/items/' + item.id]" class="lead" [innerHTML]="firstMetadataValue('dc.title')"></a>
[innerHTML]="firstMetadataValue('dc.title')"></a> <span class="text-muted">
<span class="text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <span *ngIf="dso.allMetadata(['creativeworkseries.issn']).length > 0"
<span *ngIf="item.allMetadata(['creativeworkseries.issn']).length > 0"
class="item-list-journals"> class="item-list-journals">
<span *ngFor="let value of allMetadataValues(['creativeworkseries.issn']); let last=last;"> <span *ngFor="let value of allMetadataValues(['creativeworkseries.issn']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span> <span [innerHTML]="value"><span [innerHTML]="value"></span></span>
@@ -14,5 +13,4 @@
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -1,37 +1,35 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <div>
<div> <ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
<ds-grid-thumbnail [thumbnail]="item.getThumbnail() | async"> </ds-grid-thumbnail>
</ds-grid-thumbnail> </div>
</div> </a>
</a> <div class="card-body">
<div class="card-body"> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('organization.legalName')"></h4>
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('organization.legalName')"></h4> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('organization.foundingDate')" class="dso-date card-text text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="1">
<span [innerHTML]="firstMetadataValue('organization.foundingDate')"></span>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('organization.foundingDate')" class="item-date card-text text-muted"> </p>
<ds-truncatable-part [id]="item.id" [minLines]="1"> <p *ngIf="dso.hasMetadata('organization.address.addressCountry')"
<span [innerHTML]="firstMetadataValue('organization.foundingDate')"></span> class="dso-location card-text">
</ds-truncatable-part> <ds-truncatable-part [id]="dso.id" [minLines]="3">
</p> <span class="dso-country">{{dso.firstMetadataValue('organization.address.addressCountry')}}</span>
<p *ngIf="item.hasMetadata('organization.address.addressCountry')" <span *ngIf="dso.hasMetadata('organization.address.addressLocality')" class="dso-city">
class="item-location card-text">
<ds-truncatable-part [id]="item.id" [minLines]="3">
<span class="item-country">{{item.firstMetadataValue('organization.address.addressCountry')}}</span>
<span *ngIf="item.hasMetadata('organization.address.addressLocality')" class="item-city">
<span>, </span> <span>, </span>
{{item.firstMetadataValue('organization.address.addressLocality')}} {{dso.firstMetadataValue('organization.address.addressLocality')}}
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<div class="text-center"> <div class="text-center">
<a [routerLink]="['/items/' + item.id]" <a [routerLink]="['/items/' + dso.id]"
class="lead btn btn-primary viewButton">View</a> class="lead btn btn-primary viewButton">View</a>
</div>
</div> </div>
</div> </div>
</ds-truncatable> </div>
</ng-container> </ds-truncatable>

View File

@@ -1,32 +1,30 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <div>
<div> <ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
<ds-grid-thumbnail [thumbnail]="this.item.getThumbnail() | async"> </ds-grid-thumbnail>
</ds-grid-thumbnail> </div>
</div> </a>
</a> <div class="card-body">
<div class="card-body"> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('person.familyName') + ', ' + dso.firstMetadataValue('person.givenName')"></h4>
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('person.familyName') + ', ' + item.firstMetadataValue('person.givenName')"></h4> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('person.email')" class="dso-email card-text text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="1">
<span [innerHTML]="firstMetadataValue('person.email')"></span>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('person.email')" class="item-email card-text text-muted"> </p>
<ds-truncatable-part [id]="item.id" [minLines]="1"> <p *ngIf="dso.hasMetadata('person.jobTitle')" class="dso-jobtitle card-text">
<span [innerHTML]="firstMetadataValue('person.email')"></span> <ds-truncatable-part [id]="dso.id" [minLines]="3">
</ds-truncatable-part> <span [innerHTML]="firstMetadataValue('person.jobTitle')"></span>
</p> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('person.jobTitle')" class="item-jobtitle card-text"> </p>
<ds-truncatable-part [id]="item.id" [minLines]="3"> <div class="text-center">
<span [innerHTML]="firstMetadataValue('person.jobTitle')"></span> <a [routerLink]="['/items/' + dso.id]"
</ds-truncatable-part> class="lead btn btn-primary viewButton">View</a>
</p>
<div class="text-center">
<a [routerLink]="['/items/' + item.id]"
class="lead btn btn-primary viewButton">View</a>
</div>
</div> </div>
</div> </div>
</ds-truncatable> </div>
</ng-container> </ds-truncatable>

View File

@@ -1,27 +1,25 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <div>
<div> <ds-grid-thumbnail [thumbnail]="dso.getThumbnail() | async">
<ds-grid-thumbnail [thumbnail]="item.getThumbnail() | async"> </ds-grid-thumbnail>
</ds-grid-thumbnail> </div>
</div> </a>
</a> <div class="card-body">
<div class="card-body"> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('dc.title')"></h4> </ds-truncatable-part>
<p *ngIf="dso.hasMetadata('dc.description')" class="dso-description card-text text-muted">
<ds-truncatable-part [id]="dso.id" [minLines]="3">
<span [innerHTML]="firstMetadataValue('dc.description')"></span>
</ds-truncatable-part> </ds-truncatable-part>
<p *ngIf="item.hasMetadata('dc.description')" class="item-description card-text text-muted"> </p>
<ds-truncatable-part [id]="item.id" [minLines]="3"> <div class="text-center">
<span [innerHTML]="firstMetadataValue('dc.description')"></span> <a [routerLink]="['/items/' + dso.id]"
</ds-truncatable-part> class="lead btn btn-primary viewButton">View</a>
</p>
<div class="text-center">
<a [routerLink]="['/items/' + item.id]"
class="lead btn btn-primary viewButton">View</a>
</div>
</div> </div>
</div> </div>
</ds-truncatable> </div>
</ng-container> </ds-truncatable>

View File

@@ -1,11 +1,13 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator'; import { DEFAULT_ITEM_TYPE, listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
import { Context } from '../../../../core/shared/context.model'; import { Context } from '../../../../core/shared/context.model';
import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component'; import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
@listableObjectComponent('OrgUnit', ViewMode.ListElement, Context.ItemPage) @metadataRepresentationComponent('OrgUnit', MetadataRepresentationType.Item)
@Component({ @Component({
selector: 'ds-orgunit-item-page-list-element', selector: 'ds-orgunit-item-page-list-element',
templateUrl: './orgunit-item-page-list-element.component.html' templateUrl: './orgunit-item-page-list-element.component.html'

View File

@@ -1,11 +1,10 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { ViewMode } from '../../../../core/shared/view-mode.model';
import { Context } from '../../../../core/shared/context.model';
import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator';
import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component'; import { AbstractListableElementComponent } from '../../../../shared/object-collection/shared/object-collection-element/abstract-listable-element.component';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator';
import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model';
@listableObjectComponent('OrgUnit', ViewMode.ListElement, Context.ItemPage) @metadataRepresentationComponent('Person', MetadataRepresentationType.Item)
@Component({ @Component({
selector: 'ds-person-item-page-list-element', selector: 'ds-person-item-page-list-element',
templateUrl: './person-item-page-list-element.component.html' templateUrl: './person-item-page-list-element.component.html'

View File

@@ -1,18 +1,16 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <a
<a [routerLink]="['/items/' + dso.id]" class="lead"
[routerLink]="['/items/' + item.id]" class="lead" [innerHTML]="firstMetadataValue('organization.legalName')"></a>
[innerHTML]="firstMetadataValue('organization.legalName')"></a> <span class="text-muted">
<span class="text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="3">
<ds-truncatable-part [id]="item.id" [minLines]="3"> <span *ngIf="dso.allMetadata(['dc.description']).length > 0"
<span *ngIf="item.allMetadata(['dc.description']).length > 0"
class="item-list-orgunit-description"> class="item-list-orgunit-description">
<ds-truncatable-part [id]="item.id" [minLines]="3"><span <ds-truncatable-part [id]="dso.id" [minLines]="3"><span
[innerHTML]="firstMetadataValue('dc.description')"></span> [innerHTML]="firstMetadataValue('dc.description')"></span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -1,12 +1,11 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <a
<a [routerLink]="['/items/' + dso.id]" class="lead"
[routerLink]="['/items/' + item.id]" class="lead" [innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></a>
[innerHTML]="firstMetadataValue('person.familyName') + ', ' + firstMetadataValue('person.givenName')"></a> <span class="text-muted">
<span class="text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <span *ngIf="dso.allMetadata(['person.jobTitle']).length > 0"
<span *ngIf="item.allMetadata(['person.jobTitle']).length > 0"
class="item-list-job-title"> class="item-list-job-title">
<span *ngFor="let value of allMetadataValues(['person.jobTitle']); let last=last;"> <span *ngFor="let value of allMetadataValues(['person.jobTitle']); let last=last;">
<span [innerHTML]="value"><span [innerHTML]="value"></span></span> <span [innerHTML]="value"><span [innerHTML]="value"></span></span>
@@ -14,5 +13,4 @@
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -1,12 +1,11 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge>
<a <a
[routerLink]="['/items/' + item.id]" class="lead" [routerLink]="['/items/' + dso.id]" class="lead"
[innerHTML]="firstMetadataValue('dc.title')"></a> [innerHTML]="firstMetadataValue('dc.title')"></a>
<!--<span class="text-muted">--> <!--<span class="text-muted">-->
<!--<ds-truncatable-part [id]="item.id" [minLines]="1">--> <!--<ds-truncatable-part [id]="dso.id" [minLines]="1">-->
<!--<span *ngIf="item.allMetadata(['project.identifier.status']).length > 0"--> <!--<span *ngIf="dso.allMetadata(['project.identifier.status']).length > 0"-->
<!--class="item-list-status">--> <!--class="item-list-status">-->
<!--<span *ngFor="let value of allMetadataValues(['project.identifier.status']); let last=last;">--> <!--<span *ngFor="let value of allMetadataValues(['project.identifier.status']); let last=last;">-->
<!--<span [innerHTML]="value"><span [innerHTML]="value"></span></span>--> <!--<span [innerHTML]="value"><span [innerHTML]="value"></span></span>-->
@@ -15,4 +14,3 @@
<!--</ds-truncatable-part>--> <!--</ds-truncatable-part>-->
<!--</span>--> <!--</span>-->
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -6,6 +6,6 @@ import { searchResultFor } from '../../../+search-page/search-service/search-res
/** /**
* Represents a search result object of a ClaimedTask object * Represents a search result object of a ClaimedTask object
*/ */
@searchResultFor(ClaimedTask, MyDSpaceConfigurationValueType.Workflow) @searchResultFor(ClaimedTask)
export class ClaimedTaskMyDSpaceResult extends SearchResult<ClaimedTask> { export class ClaimedTaskSearchResult extends SearchResult<ClaimedTask> {
} }

View File

@@ -1,14 +0,0 @@
import { Item } from '../../../core/shared/item.model';
import { SearchResult } from '../../../+search-page/search-result.model';
import { searchResultFor } from '../../../+search-page/search-service/search-result-element-decorator';
import { MyDSpaceConfigurationValueType } from '../../../+my-dspace-page/my-dspace-configuration-value-type';
/**
* Represents a search result object of a Item object
*/
@searchResultFor(Item, MyDSpaceConfigurationValueType.Workspace)
export class ItemMyDSpaceResult extends SearchResult<Item> {
getRenderType(): string {
return ItemMyDSpaceResult.name;
}
}

View File

@@ -41,6 +41,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit {
const componentRef = viewContainerRef.createComponent(componentFactory); const componentRef = viewContainerRef.createComponent(componentFactory);
(<Component>componentRef.instance as any).object = this.object; (<Component>componentRef.instance as any).object = this.object;
(<Component>componentRef.instance as any).index = this.index;
} }
/** /**

View File

@@ -6,6 +6,6 @@ import { searchResultFor } from '../../../+search-page/search-service/search-res
/** /**
* Represents a search result object of a PoolTask object * Represents a search result object of a PoolTask object
*/ */
@searchResultFor(PoolTask, MyDSpaceConfigurationValueType.Workflow) @searchResultFor(PoolTask)
export class PoolTaskMyDSpaceResult extends SearchResult<PoolTask> { export class PoolTaskSearchResult extends SearchResult<PoolTask> {
} }

View File

@@ -1,11 +1,10 @@
import { WorkflowItem } from '../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../core/submission/models/workflowitem.model';
import { SearchResult } from '../../../+search-page/search-result.model'; import { SearchResult } from '../../../+search-page/search-result.model';
import { MyDSpaceConfigurationValueType } from '../../../+my-dspace-page/my-dspace-configuration-value-type';
import { searchResultFor } from '../../../+search-page/search-service/search-result-element-decorator'; import { searchResultFor } from '../../../+search-page/search-service/search-result-element-decorator';
/** /**
* Represents a search result object of a WorkflowItem object * Represents a search result object of a WorkflowItem object
*/ */
@searchResultFor(WorkflowItem, MyDSpaceConfigurationValueType.Workspace) @searchResultFor(WorkflowItem)
export class WorkflowitemMyDSpaceResult extends SearchResult<WorkflowItem> { export class WorkflowItemSearchResult extends SearchResult<WorkflowItem> {
} }

View File

@@ -1,11 +1,10 @@
import { WorkspaceItem } from '../../../core/submission/models/workspaceitem.model'; import { WorkspaceItem } from '../../../core/submission/models/workspaceitem.model';
import { MyDSpaceConfigurationValueType } from '../../../+my-dspace-page/my-dspace-configuration-value-type';
import { searchResultFor } from '../../../+search-page/search-service/search-result-element-decorator'; import { searchResultFor } from '../../../+search-page/search-service/search-result-element-decorator';
import { SearchResult } from '../../../+search-page/search-result.model'; import { SearchResult } from '../../../+search-page/search-result.model';
/** /**
* Represents a search result object of a WorkspaceItem object * Represents a search result object of a WorkspaceItem object
*/ */
@searchResultFor(WorkspaceItem, MyDSpaceConfigurationValueType.Workspace) @searchResultFor(WorkspaceItem)
export class WorkspaceitemMyDSpaceResult extends SearchResult<WorkspaceItem> { export class WorkspaceItemSearchResult extends SearchResult<WorkspaceItem> {
} }

View File

@@ -5,20 +5,20 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { ClaimedMyDSpaceResultDetailElementComponent } from './claimed-my-dspace-result-detail-element.component'; import { ClaimedTaskSearchResultDetailElementComponent } from './claimed-task-search-result-detail-element.component';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: ClaimedMyDSpaceResultDetailElementComponent; let component: ClaimedTaskSearchResultDetailElementComponent;
let fixture: ComponentFixture<ClaimedMyDSpaceResultDetailElementComponent>; let fixture: ComponentFixture<ClaimedTaskSearchResultDetailElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: ClaimedTaskMyDSpaceResult = new ClaimedTaskMyDSpaceResult(); const mockResultObject: ClaimedTaskSearchResult = new ClaimedTaskSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -59,19 +59,19 @@ describe('ClaimedMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [ClaimedMyDSpaceResultDetailElementComponent], declarations: [ClaimedTaskSearchResultDetailElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ClaimedMyDSpaceResultDetailElementComponent, { }).overrideComponent(ClaimedTaskSearchResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(ClaimedMyDSpaceResultDetailElementComponent); fixture = TestBed.createComponent(ClaimedTaskSearchResultDetailElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -6,27 +6,24 @@ import { find } from 'rxjs/operators';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { ListableObject } from '../../../object-collection/shared/listable-object.model';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component';
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { Context } from '../../../../core/shared/context.model'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model';
/** /**
* This component renders claimed task object for the mydspace result in the detail view. * This component renders claimed task object for the mydspace result in the detail view.
*/ */
@Component({ @Component({
selector: 'ds-claimed-my-dspace-result-detail-element', selector: 'ds-claimed-task-search-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss'], styleUrls: ['../search-result-detail-element.component.scss'],
templateUrl: './claimed-my-dspace-result-detail-element.component.html' templateUrl: './claimed-task-search-result-detail-element.component.html'
}) })
@listableObjectComponent(ClaimedTaskMyDSpaceResult.name, ViewMode.DetailedListElement) @listableObjectComponent(ClaimedTaskSearchResult.name, ViewMode.DetailedListElement)
@listableObjectComponent(ClaimedTask.name, ViewMode.DetailedListElement) export class ClaimedTaskSearchResultDetailElementComponent extends SearchResultDetailElementComponent<ClaimedTaskSearchResult, ClaimedTask> {
export class ClaimedMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<ClaimedTaskMyDSpaceResult, ClaimedTask> {
/** /**
* A boolean representing if to show submitter information * A boolean representing if to show submitter information

View File

@@ -1,8 +1,8 @@
import { Component, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
import { Metadata } from '../../../../../core/shared/metadata.utils'; import { Metadata } from '../../../../../core/shared/metadata.utils';
import { MyDSpaceResult } from '../../../../../+my-dspace-page/my-dspace-result.model';
import { Item } from '../../../../../core/shared/item.model'; import { Item } from '../../../../../core/shared/item.model';
import { SearchResult } from '../../../../../+search-page/search-result.model';
/** /**
* This component show values for the given item metadata * This component show values for the given item metadata
@@ -21,7 +21,7 @@ export class ItemDetailPreviewFieldComponent {
/** /**
* The mydspace result object * The mydspace result object
*/ */
@Input() object: MyDSpaceResult<any>; @Input() object: SearchResult<any>;
/** /**
* The metadata label * The metadata label

View File

@@ -6,7 +6,7 @@ import { Item } from '../../../../core/shared/item.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { fadeInOut } from '../../../animations/fade'; import { fadeInOut } from '../../../animations/fade';
import { Bitstream } from '../../../../core/shared/bitstream.model'; import { Bitstream } from '../../../../core/shared/bitstream.model';
import { MyDSpaceResult } from '../../../../+my-dspace-page/my-dspace-result.model'; import { SearchResult } from '../../../../+search-page/search-result.model';
/** /**
* This component show metadata for the given item object in the detail view. * This component show metadata for the given item object in the detail view.
@@ -27,7 +27,7 @@ export class ItemDetailPreviewComponent {
/** /**
* The mydspace result object * The mydspace result object
*/ */
@Input() object: MyDSpaceResult<any>; @Input() object: SearchResult<any>;
/** /**
* Represent item's status * Represent item's status

View File

@@ -1,27 +0,0 @@
import { Component } from '@angular/core';
import { ViewMode } from '../../../../core/shared/view-mode.model';
import { Item } from '../../../../core/shared/item.model';
import { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-dspace-result.model';
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
/**
* This component renders item object for the mydspace result in the detail view.
*/
@Component({
selector: 'ds-workspaceitem-my-dspace-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss', './item-my-dspace-result-detail-element.component.scss'],
templateUrl: './item-my-dspace-result-detail-element.component.html'
})
@listableObjectComponent(ItemMyDSpaceResult.name, ViewMode.DetailedListElement)
export class ItemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<ItemMyDSpaceResult, Item> {
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.ARCHIVED;
}

View File

@@ -5,16 +5,16 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { ItemMyDSpaceResultDetailElementComponent } from './item-my-dspace-result-detail-element.component'; import { ItemSearchResultDetailElementComponent } from './item-search-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-dspace-result.model'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
let component: ItemMyDSpaceResultDetailElementComponent; let component: ItemSearchResultDetailElementComponent;
let fixture: ComponentFixture<ItemMyDSpaceResultDetailElementComponent>; let fixture: ComponentFixture<ItemSearchResultDetailElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: ItemMyDSpaceResult = new ItemMyDSpaceResult(); const mockResultObject: ItemSearchResult = new ItemSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
mockResultObject.indexableObject = Object.assign(new Item(), { mockResultObject.indexableObject = Object.assign(new Item(), {
@@ -51,19 +51,19 @@ describe('ItemMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [ItemMyDSpaceResultDetailElementComponent], declarations: [ItemSearchResultDetailElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemMyDSpaceResultDetailElementComponent, { }).overrideComponent(ItemSearchResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(ItemMyDSpaceResultDetailElementComponent); fixture = TestBed.createComponent(ItemSearchResultDetailElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -0,0 +1,27 @@
import { Component } from '@angular/core';
import { ViewMode } from '../../../../core/shared/view-mode.model';
import { Item } from '../../../../core/shared/item.model';
import { SearchResultDetailElementComponent } from '../search-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
/**
* This component renders item object for the mydspace result in the detail view.
*/
@Component({
selector: 'ds-item-search-result-detail-element',
styleUrls: ['../search-result-detail-element.component.scss', './item-search-result-detail-element.component.scss'],
templateUrl: './item-search-result-detail-element.component.html'
})
@listableObjectComponent('PublicationSearchResult', ViewMode.DetailedListElement)
export class ItemSearchResultDetailElementComponent extends SearchResultDetailElementComponent<ItemSearchResult, Item> {
/**
* Represent item's status
*/
public status = MyDspaceItemStatusType.ARCHIVED;
}

View File

@@ -5,19 +5,19 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { PoolMyDSpaceResultDetailElementComponent } from './pool-my-dspace-result-detail-element.component'; import { PoolSearchResultDetailElementComponent } from './pool-my-dspace-result-detail-element.component';
import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model'; import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: PoolMyDSpaceResultDetailElementComponent; let component: PoolSearchResultDetailElementComponent;
let fixture: ComponentFixture<PoolMyDSpaceResultDetailElementComponent>; let fixture: ComponentFixture<PoolSearchResultDetailElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: PoolTaskMyDSpaceResult = new PoolTaskMyDSpaceResult(); const mockResultObject: PoolTaskSearchResult = new PoolTaskSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -58,19 +58,19 @@ describe('PoolMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [PoolMyDSpaceResultDetailElementComponent], declarations: [PoolSearchResultDetailElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(PoolMyDSpaceResultDetailElementComponent, { }).overrideComponent(PoolSearchResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(PoolMyDSpaceResultDetailElementComponent); fixture = TestBed.createComponent(PoolSearchResultDetailElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -4,27 +4,25 @@ import { Observable } from 'rxjs';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { ListableObject } from '../../../object-collection/shared/listable-object.model';
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component';
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-search-result.model';
/** /**
* This component renders pool task object for the mydspace result in the detail view. * This component renders pool task object for the mydspace result in the detail view.
*/ */
@Component({ @Component({
selector: 'ds-pool-my-dspace-result-detail-element', selector: 'ds-pool-search-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss'], styleUrls: ['../search-result-detail-element.component.scss'],
templateUrl: './pool-my-dspace-result-detail-element.component.html', templateUrl: './pool-search-result-detail-element.component.html',
}) })
@listableObjectComponent(PoolTaskMyDSpaceResult.name, ViewMode.DetailedListElement) @listableObjectComponent(PoolTaskSearchResult.name, ViewMode.DetailedListElement)
@listableObjectComponent(PoolTask.name, ViewMode.DetailedListElement) export class PoolSearchResultDetailElementComponent extends SearchResultDetailElementComponent<PoolTaskSearchResult, PoolTask> {
export class PoolMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<PoolTaskMyDSpaceResult, PoolTask> {
/** /**
* A boolean representing if to show submitter information * A boolean representing if to show submitter information

View File

@@ -1,30 +1,26 @@
import { Component, Inject } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { MyDSpaceResult } from '../../../+my-dspace-page/my-dspace-result.model';
import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component'; import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component';
import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { Metadata } from '../../../core/shared/metadata.utils'; import { Metadata } from '../../../core/shared/metadata.utils';
import { SearchResult } from '../../../+search-page/search-result.model';
import { hasValue } from '../../empty.util';
@Component({ @Component({
selector: 'ds-my-dspace-result-detail-element', selector: 'ds-search-result-detail-element',
template: `` template: ``
}) })
export class MyDSpaceResultDetailElementComponent<T extends MyDSpaceResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> { export class SearchResultDetailElementComponent<T extends SearchResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> implements OnInit {
/** /**
* The result element object * The result element object
*/ */
dso: K; dso: K;
/** ngOnInit(): void {
* Initialize instance variables if (hasValue(this.object)) {
* this.dso = this.object.indexableObject;
* @param {ListableObject} detailable }
*/
public constructor() {
super();
this.dso = this.object.indexableObject;
} }
/** /**

View File

@@ -5,19 +5,19 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { WorkflowitemMyDSpaceResultDetailElementComponent } from './workflowitem-my-dspace-result-detail-element.component'; import { WorkflowItemSearchResultDetailElementComponent } from './workflow-item-search-result-detail-element.component';
import { WorkflowitemMyDSpaceResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: WorkflowitemMyDSpaceResultDetailElementComponent; let component: WorkflowItemSearchResultDetailElementComponent;
let fixture: ComponentFixture<WorkflowitemMyDSpaceResultDetailElementComponent>; let fixture: ComponentFixture<WorkflowItemSearchResultDetailElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: WorkflowitemMyDSpaceResult = new WorkflowitemMyDSpaceResult(); const mockResultObject: WorkflowItemSearchResult = new WorkflowItemSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -56,19 +56,19 @@ describe('WorkflowitemMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [WorkflowitemMyDSpaceResultDetailElementComponent], declarations: [WorkflowItemSearchResultDetailElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkflowitemMyDSpaceResultDetailElementComponent, { }).overrideComponent(WorkflowItemSearchResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(WorkflowitemMyDSpaceResultDetailElementComponent); fixture = TestBed.createComponent(WorkflowItemSearchResultDetailElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -2,29 +2,27 @@ import { Component, Inject } from '@angular/core';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { ListableObject } from '../../../object-collection/shared/listable-object.model';
import { WorkflowitemMyDSpaceResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { Observable } from 'rxjs/internal/Observable'; import { Observable } from 'rxjs/internal/Observable';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-search-result.model';
/** /**
* This component renders workflowitem object for the mydspace result in the detail view. * This component renders workflowitem object for the mydspace result in the detail view.
*/ */
@Component({ @Component({
selector: 'ds-workflowitem-my-dspace-result-detail-element', selector: 'ds-workflow-item-search-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss'], styleUrls: ['../search-result-detail-element.component.scss'],
templateUrl: './workflowitem-my-dspace-result-detail-element.component.html', templateUrl: './workflow-item-search-result-detail-element.component.html',
}) })
@listableObjectComponent(WorkflowitemMyDSpaceResult.name, ViewMode.DetailedListElement) @listableObjectComponent(WorkflowItemSearchResult.name, ViewMode.DetailedListElement)
@listableObjectComponent(WorkflowItem.name, ViewMode.DetailedListElement) export class WorkflowItemSearchResultDetailElementComponent extends SearchResultDetailElementComponent<WorkflowItemSearchResult, WorkflowItem> {
export class WorkflowitemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<WorkflowitemMyDSpaceResult, WorkflowItem> {
/** /**
* The item object that belonging to the result object * The item object that belonging to the result object

View File

@@ -5,19 +5,19 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { WorkspaceitemMyDSpaceResultDetailElementComponent } from './workspaceitem-my-dspace-result-detail-element.component'; import { WorkspaceItemSearchResultDetailElementComponent } from './workspace-item-search-result-detail-element.component';
import { WorkspaceitemMyDSpaceResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model';
import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: WorkspaceitemMyDSpaceResultDetailElementComponent; let component: WorkspaceItemSearchResultDetailElementComponent;
let fixture: ComponentFixture<WorkspaceitemMyDSpaceResultDetailElementComponent>; let fixture: ComponentFixture<WorkspaceItemSearchResultDetailElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: WorkspaceitemMyDSpaceResult = new WorkspaceitemMyDSpaceResult(); const mockResultObject: WorkflowItemSearchResult = new WorkflowItemSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -56,19 +56,19 @@ describe('WorkspaceitemMyDSpaceResultDetailElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [WorkspaceitemMyDSpaceResultDetailElementComponent], declarations: [WorkspaceItemSearchResultDetailElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkspaceitemMyDSpaceResultDetailElementComponent, { }).overrideComponent(WorkspaceItemSearchResultDetailElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(WorkspaceitemMyDSpaceResultDetailElementComponent); fixture = TestBed.createComponent(WorkspaceItemSearchResultDetailElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -1,32 +1,29 @@
import { Component, Inject } from '@angular/core'; import { Component } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model';
WorkspaceItem
} from '../../../../core/submission/models/workspaceitem.model';
import { WorkspaceitemMyDSpaceResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspaceitem-search-result.model';
/** /**
* This component renders workspaceitem object for the mydspace result in the detail view. * This component renders workspaceitem object for the mydspace result in the detail view.
*/ */
@Component({ @Component({
selector: 'ds-workspaceitem-my-dspace-result-detail-element', selector: 'ds-workspace-item-search-result-detail-element',
styleUrls: ['../my-dspace-result-detail-element.component.scss', './workspaceitem-my-dspace-result-detail-element.component.scss'], styleUrls: ['../search-result-detail-element.component.scss', './workspace-item-search-result-detail-element.component.scss'],
templateUrl: './workspaceitem-my-dspace-result-detail-element.component.html', templateUrl: './workspace-item-search-result-detail-element.component.html',
}) })
@listableObjectComponent(WorkspaceitemMyDSpaceResult.name, ViewMode.DetailedListElement) @listableObjectComponent(WorkspaceItemSearchResult.name, ViewMode.DetailedListElement)
@listableObjectComponent(WorkspaceItem.name, ViewMode.DetailedListElement) export class WorkspaceItemSearchResultDetailElementComponent extends SearchResultDetailElementComponent<WorkspaceItemSearchResult, WorkspaceItem> {
export class WorkspaceitemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent<WorkspaceitemMyDSpaceResult, WorkspaceItem> {
/** /**
* The item object that belonging to the result object * The item object that belonging to the result object

View File

@@ -1,36 +1,34 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-truncatable [id]="dso.id">
<ds-truncatable [id]="item.id"> <div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'">
<div class="card" [@focusShadow]="(isCollapsed$ | async)?'blur':'focus'"> <a [routerLink]="['/items/' + dso.id]" class="card-img-top full-width">
<a [routerLink]="['/items/' + item.id]" class="card-img-top full-width"> <div>
<div> <ds-grid-thumbnail [thumbnail]="this.dso.getThumbnail() | async">
<ds-grid-thumbnail [thumbnail]="this.item.getThumbnail() | async"> </ds-grid-thumbnail>
</ds-grid-thumbnail> </div>
</div> </a>
</a> <div class="card-body">
<div class="card-body"> <ds-item-type-badge [object]="object"></ds-item-type-badge>
<ds-item-type-badge [object]="object"></ds-item-type-badge> <ds-truncatable-part [id]="dso.id" [minLines]="3" type="h4">
<ds-truncatable-part [id]="item.id" [minLines]="3" type="h4"> <h4 class="card-title" [innerHTML]="dso.firstMetadataValue('dc.title')"></h4>
<h4 class="card-title" [innerHTML]="item.firstMetadataValue('dc.title')"></h4> </ds-truncatable-part>
</ds-truncatable-part> <p *ngIf="dso.hasMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*'])"
<p *ngIf="item.hasMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*'])" class="dso-authors card-text text-muted">
class="item-authors card-text text-muted"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <span *ngIf="dso.hasMetadata('dc.date.issued')" class="dso-date">{{dso.firstMetadataValue('dc.date.issued')}}</span>
<span *ngIf="item.hasMetadata('dc.date.issued')" class="item-date">{{item.firstMetadataValue('dc.date.issued')}}</span> <span *ngFor="let author of dso.allMetadataValues(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']);">,
<span *ngFor="let author of item.allMetadataValues(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']);">,
<span [innerHTML]="author"></span> <span [innerHTML]="author"></span>
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<p *ngIf="item.hasMetadata('dc.description.abstract')" class="item-abstract card-text"> <p *ngIf="dso.hasMetadata('dc.description.abstract')" class="dso-abstract card-text">
<ds-truncatable-part [id]="item.id" [minLines]="3"> <ds-truncatable-part [id]="dso.id" [minLines]="3">
<span [innerHTML]="firstMetadataValue('dc.description.abstract')"></span> <span [innerHTML]="firstMetadataValue('dc.description.abstract')"></span>
</ds-truncatable-part> </ds-truncatable-part>
</p> </p>
<div class="text-center"> <div class="text-center">
<a [routerLink]="['/items/' + item.id]" <a [routerLink]="['/items/' + dso.id]"
class="lead btn btn-primary viewButton">View</a> class="lead btn btn-primary viewButton">View</a>
</div>
</div> </div>
</div> </div>
</ds-truncatable> </div>
</ng-container> </ds-truncatable>

View File

@@ -1,9 +1,8 @@
import { Component, Inject } from '@angular/core'; import { Component, Inject, OnInit } from '@angular/core';
import { SearchResult } from '../../../+search-page/search-result.model'; import { SearchResult } from '../../../+search-page/search-result.model';
import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component'; import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component';
import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { TruncatableService } from '../../truncatable/truncatable.service'; import { TruncatableService } from '../../truncatable/truncatable.service';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Metadata } from '../../../core/shared/metadata.utils'; import { Metadata } from '../../../core/shared/metadata.utils';
@@ -14,18 +13,23 @@ import { hasValue } from '../../empty.util';
template: `` template: ``
}) })
export class SearchResultGridElementComponent<T extends SearchResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> { export class SearchResultGridElementComponent<T extends SearchResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> implements OnInit {
dso: K; dso: K;
isCollapsed$: Observable<boolean>; isCollapsed$: Observable<boolean>;
public constructor(protected truncatableService: TruncatableService) { public constructor(protected truncatableService: TruncatableService) {
super(); super();
if (hasValue(this.object)) { if (hasValue(this.object)) {
this.dso = this.object.indexableObject;
this.isCollapsed$ = this.isCollapsed(); this.isCollapsed$ = this.isCollapsed();
} }
} }
ngOnInit(): void {
if (hasValue(this.object)) {
this.dso = this.object.indexableObject;
}
}
/** /**
* Gets all matching metadata string values from hitHighlights or dso metadata, preferring hitHighlights. * Gets all matching metadata string values from hitHighlights or dso metadata, preferring hitHighlights.
* *
@@ -49,5 +53,4 @@ export class SearchResultGridElementComponent<T extends SearchResult<K>, K exten
private isCollapsed(): Observable<boolean> { private isCollapsed(): Observable<boolean> {
return this.truncatableService.isCollapsed(this.dso.id); return this.truncatableService.isCollapsed(this.dso.id);
} }
} }

View File

@@ -1,5 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ITEM } from '../../../items/switcher/listable-object-component-loader.component';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { ItemMetadataListElementComponent } from './item-metadata-list-element.component'; import { ItemMetadataListElementComponent } from './item-metadata-list-element.component';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
@@ -15,9 +14,6 @@ describe('ItemMetadataListElementComponent', () => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [], imports: [],
declarations: [ItemMetadataListElementComponent], declarations: [ItemMetadataListElementComponent],
providers: [
{ provide: ITEM, useValue: mockItemMetadataRepresentation }
],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemMetadataListElementComponent, { }).overrideComponent(ItemMetadataListElementComponent, {
set: {changeDetection: ChangeDetectionStrategy.Default} set: {changeDetection: ChangeDetectionStrategy.Default}

View File

@@ -2,7 +2,6 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core';
import { PlainTextMetadataListElementComponent } from './plain-text-metadata-list-element.component'; import { PlainTextMetadataListElementComponent } from './plain-text-metadata-list-element.component';
import { MetadatumRepresentation } from '../../../../core/shared/metadata-representation/metadatum/metadatum-representation.model'; import { MetadatumRepresentation } from '../../../../core/shared/metadata-representation/metadatum/metadatum-representation.model';
import { ITEM } from '../../../items/switcher/listable-object-component-loader.component';
const mockMetadataRepresentation = Object.assign(new MetadatumRepresentation('type'), { const mockMetadataRepresentation = Object.assign(new MetadatumRepresentation('type'), {
key: 'dc.contributor.author', key: 'dc.contributor.author',
@@ -17,9 +16,6 @@ describe('PlainTextMetadataListElementComponent', () => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [], imports: [],
declarations: [PlainTextMetadataListElementComponent], declarations: [PlainTextMetadataListElementComponent],
providers: [
{ provide: ITEM, useValue: mockMetadataRepresentation }
],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(PlainTextMetadataListElementComponent, { }).overrideComponent(PlainTextMetadataListElementComponent, {
set: {changeDetection: ChangeDetectionStrategy.Default} set: {changeDetection: ChangeDetectionStrategy.Default}

View File

@@ -5,20 +5,20 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { ClaimedMyDSpaceResultListElementComponent } from './claimed-my-dspace-result-list-element.component'; import { ClaimedSearchResultListElementComponent } from './claimed-search-result-list-element.component';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: ClaimedMyDSpaceResultListElementComponent; let component: ClaimedSearchResultListElementComponent;
let fixture: ComponentFixture<ClaimedMyDSpaceResultListElementComponent>; let fixture: ComponentFixture<ClaimedSearchResultListElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: ClaimedTaskMyDSpaceResult = new ClaimedTaskMyDSpaceResult(); const mockResultObject: ClaimedTaskSearchResult = new ClaimedTaskSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -59,19 +59,19 @@ describe('ClaimedMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [ClaimedMyDSpaceResultListElementComponent], declarations: [ClaimedSearchResultListElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ClaimedMyDSpaceResultListElementComponent, { }).overrideComponent(ClaimedSearchResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(ClaimedMyDSpaceResultListElementComponent); fixture = TestBed.createComponent(ClaimedSearchResultListElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -4,29 +4,28 @@ import { Location, LocationStrategy, PathLocationStrategy } from '@angular/commo
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model';
import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component';
/** /**
* This component renders claimed task object for the mydspace result in the list view. * This component renders claimed task object for the mydspace result in the list view.
*/ */
@Component({ @Component({
selector: 'ds-claimed-my-dspace-result-list-element', selector: 'ds-claimed-search-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss'], styleUrls: ['../my-dspace-result-list-element.component.scss'],
templateUrl: './claimed-my-dspace-result-list-element.component.html', templateUrl: './claimed-search-result-list-element.component.html',
providers: [Location, { provide: LocationStrategy, useClass: PathLocationStrategy }] providers: [Location, { provide: LocationStrategy, useClass: PathLocationStrategy }]
}) })
@listableObjectComponent(ClaimedTaskMyDSpaceResult.name, ViewMode.ListElement) @listableObjectComponent(ClaimedTaskSearchResult.name, ViewMode.ListElement)
@listableObjectComponent(ClaimedTask.name, ViewMode.ListElement) export class ClaimedSearchResultListElementComponent extends SearchResultListElementComponent<ClaimedTaskSearchResult, ClaimedTask> {
export class ClaimedMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<ClaimedTaskMyDSpaceResult, ClaimedTask> {
/** /**
* A boolean representing if to show submitter information * A boolean representing if to show submitter information

View File

@@ -3,7 +3,7 @@ import { Component, Input } from '@angular/core';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { fadeInOut } from '../../../animations/fade'; import { fadeInOut } from '../../../animations/fade';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { MyDSpaceResult } from '../../../../+my-dspace-page/my-dspace-result.model'; import { SearchResult } from '../../../../+search-page/search-result.model';
/** /**
* This component show metadata for the given item object in the list view. * This component show metadata for the given item object in the list view.
@@ -24,7 +24,7 @@ export class ItemListPreviewComponent {
/** /**
* The mydspace result object * The mydspace result object
*/ */
@Input() object: MyDSpaceResult<any>; @Input() object: SearchResult<any>;
/** /**
* Represent item's status * Represent item's status

View File

@@ -5,16 +5,16 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { ItemMyDSpaceResultListElementComponent } from './item-my-dspace-result-list-element.component';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-dspace-result.model'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
import { ItemSearchResultListElementSubmissionComponent } from './item-search-result-list-element-submission.component';
let component: ItemMyDSpaceResultListElementComponent; let component: ItemSearchResultListElementSubmissionComponent;
let fixture: ComponentFixture<ItemMyDSpaceResultListElementComponent>; let fixture: ComponentFixture<ItemSearchResultListElementSubmissionComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: ItemMyDSpaceResult = new ItemMyDSpaceResult(); const mockResultObject: ItemSearchResult = new ItemSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
mockResultObject.indexableObject = Object.assign(new Item(), { mockResultObject.indexableObject = Object.assign(new Item(), {
@@ -51,19 +51,19 @@ describe('ItemMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [ItemMyDSpaceResultListElementComponent], declarations: [ItemSearchResultListElementSubmissionComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(ItemMyDSpaceResultListElementComponent, { }).overrideComponent(ItemSearchResultListElementSubmissionComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(ItemMyDSpaceResultListElementComponent); fixture = TestBed.createComponent(ItemSearchResultListElementSubmissionComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -1,24 +1,24 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { ItemMyDSpaceResult } from '../../../object-collection/shared/item-my-dspace-result.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { Context } from '../../../../core/shared/context.model'; import { Context } from '../../../../core/shared/context.model';
import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model';
import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component';
/** /**
* This component renders item object for the mydspace result in the list view. * This component renders item object for the mydspace result in the list view.
*/ */
@Component({ @Component({
selector: 'ds-workspaceitem-my-dspace-result-list-element', selector: 'ds-item-search-result-list-element-submission',
styleUrls: ['../my-dspace-result-list-element.component.scss', './item-my-dspace-result-list-element.component.scss'], styleUrls: ['../my-dspace-result-list-element.component.scss', './item-search-result-list-element-submission.component.scss'],
templateUrl: './item-my-dspace-result-list-element.component.html' templateUrl: './item-search-result-list-element-submission.component.html'
}) })
@listableObjectComponent('PublicationSearchResult', ViewMode.ListElement, Context.Submission) @listableObjectComponent('PublicationSearchResult', ViewMode.ListElement, Context.Submission)
export class ItemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<ItemMyDSpaceResult, Item> { export class ItemSearchResultListElementSubmissionComponent extends SearchResultListElementComponent<ItemSearchResult, Item> {
/** /**
* Represent item's status * Represent item's status

View File

@@ -1,57 +0,0 @@
import { Component, Inject } from '@angular/core';
import { MyDSpaceResult } from '../../../+my-dspace-page/my-dspace-result.model';
import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component';
import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { Metadata } from '../../../core/shared/metadata.utils';
@Component({
selector: 'ds-my-dspace-result-list-element',
template: ``
})
export class MyDSpaceResultListElementComponent<T extends MyDSpaceResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> {
/**
* The result element object
*/
dso: K;
/**
* The array index of the result element
*/
dsoIndex: number;
/**
* Initialize instance variables
*
* @param {ListableObject} listable
* @param {number} index
*/
public constructor(@Inject('indexElementProvider') public index: number) {
super();
this.dso = this.object.indexableObject;
this.dsoIndex = this.index;
}
/**
* 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);
}
}

View File

@@ -5,20 +5,20 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { PoolMyDSpaceResultListElementComponent } from './pool-my-dspace-result-list-element.component'; import { PoolSearchResultListElementComponent } from './pool-search-result-list-element.component';
import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model'; import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: PoolMyDSpaceResultListElementComponent; let component: PoolSearchResultListElementComponent;
let fixture: ComponentFixture<PoolMyDSpaceResultListElementComponent>; let fixture: ComponentFixture<PoolSearchResultListElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: PoolTaskMyDSpaceResult = new PoolTaskMyDSpaceResult(); const mockResultObject: PoolTaskSearchResult = new PoolTaskSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -59,19 +59,19 @@ describe('PoolMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [PoolMyDSpaceResultListElementComponent], declarations: [PoolSearchResultListElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(PoolMyDSpaceResultListElementComponent, { }).overrideComponent(PoolSearchResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(PoolMyDSpaceResultListElementComponent); fixture = TestBed.createComponent(PoolSearchResultListElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -3,30 +3,28 @@ import { Component, Inject, OnInit } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { ListableObject } from '../../../object-collection/shared/listable-object.model';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model'; import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-search-result.model';
import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component';
import { TruncatableService } from '../../../truncatable/truncatable.service';
/** /**
* This component renders pool task object for the mydspace result in the list view. * This component renders pool task object for the mydspace result in the list view.
*/ */
@Component({ @Component({
selector: 'ds-pool-my-dspace-result-list-element', selector: 'ds-pool-search-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss'], styleUrls: ['../my-dspace-result-list-element.component.scss'],
templateUrl: './pool-my-dspace-result-list-element.component.html', templateUrl: './pool-search-result-list-element.component.html',
}) })
@listableObjectComponent(PoolTaskMyDSpaceResult.name, ViewMode.ListElement) @listableObjectComponent(PoolTaskSearchResult.name, ViewMode.ListElement)
@listableObjectComponent(PoolTask.name, ViewMode.ListElement) export class PoolSearchResultListElementComponent extends SearchResultListElementComponent<PoolTaskSearchResult, PoolTask> implements OnInit {
export class PoolMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<PoolTaskMyDSpaceResult, PoolTask> implements OnInit {
/** /**
* A boolean representing if to show submitter information * A boolean representing if to show submitter information
@@ -43,8 +41,10 @@ export class PoolMyDSpaceResultListElementComponent extends MyDSpaceResultListEl
*/ */
public workflowitem: WorkflowItem; public workflowitem: WorkflowItem;
constructor(@Inject('indexElementProvider') public index: number) { public index: number;
super(index);
constructor(protected truncatableService: TruncatableService) {
super(truncatableService);
} }
/** /**

View File

@@ -5,19 +5,19 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { WorkflowitemMyDSpaceResultListElementComponent } from './workflowitem-my-dspace-result-list-element.component'; import { WorkflowItemSearchResultListElementComponent } from './workflow-item-my-search-result-list-element.component';
import { WorkflowitemMyDSpaceResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: WorkflowitemMyDSpaceResultListElementComponent; let component: WorkflowItemSearchResultListElementComponent;
let fixture: ComponentFixture<WorkflowitemMyDSpaceResultListElementComponent>; let fixture: ComponentFixture<WorkflowItemSearchResultListElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: WorkflowitemMyDSpaceResult = new WorkflowitemMyDSpaceResult(); const mockResultObject: WorkflowItemSearchResult = new WorkflowItemSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -56,19 +56,19 @@ describe('WorkflowitemMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [WorkflowitemMyDSpaceResultListElementComponent], declarations: [WorkflowItemSearchResultListElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkflowitemMyDSpaceResultListElementComponent, { }).overrideComponent(WorkflowItemSearchResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(WorkflowitemMyDSpaceResultListElementComponent); fixture = TestBed.createComponent(WorkflowItemSearchResultListElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -3,29 +3,28 @@ import { Component } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { WorkflowitemMyDSpaceResult } from '../../../object-collection/shared/workflowitem-my-dspace-result.model';
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflowitem-search-result.model';
import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component';
/** /**
* This component renders workflowitem object for the mydspace result in the list view. * This component renders workflowitem object for the mydspace result in the list view.
*/ */
@Component({ @Component({
selector: 'ds-workflowitem-my-dspace-result-list-element', selector: 'ds-workflow-item-my-dspace-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss'], styleUrls: ['../my-dspace-result-list-element.component.scss'],
templateUrl: './workflowitem-my-dspace-result-list-element.component.html', templateUrl: './workflow-item-search-result-list-element.component.html',
}) })
@listableObjectComponent(WorkflowitemMyDSpaceResult.name, ViewMode.ListElement) @listableObjectComponent(WorkflowItemSearchResult.name, ViewMode.ListElement)
@listableObjectComponent(WorkflowItem.name, ViewMode.ListElement) export class WorkflowItemSearchResultListElementComponent extends SearchResultListElementComponent<WorkflowItemSearchResult, WorkflowItem> {
export class WorkflowitemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<WorkflowitemMyDSpaceResult, WorkflowItem> {
/** /**
* The item object that belonging to the result object * The item object that belonging to the result object
*/ */
@@ -40,7 +39,7 @@ export class WorkflowitemMyDSpaceResultListElementComponent extends MyDSpaceResu
* Initialize all instance variables * Initialize all instance variables
*/ */
ngOnInit() { ngOnInit() {
this.initItem(this.dso.item as Observable<RemoteData<Item>>); this.initItem(this.dso.item as Observable<RemoteData<Item>> );
} }
/** /**

View File

@@ -5,19 +5,19 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { WorkspaceitemMyDSpaceResultListElementComponent } from './workspaceitem-my-dspace-result-list-element.component'; import { WorkspaceItemSearchResultListElementComponent } from './workspace-item-search-result-list-element.component';
import { WorkspaceitemMyDSpaceResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model';
import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { createSuccessfulRemoteDataObject } from '../../../testing/utils'; import { createSuccessfulRemoteDataObject } from '../../../testing/utils';
let component: WorkspaceitemMyDSpaceResultListElementComponent; let component: WorkspaceItemSearchResultListElementComponent;
let fixture: ComponentFixture<WorkspaceitemMyDSpaceResultListElementComponent>; let fixture: ComponentFixture<WorkspaceItemSearchResultListElementComponent>;
const compIndex = 1; const compIndex = 1;
const mockResultObject: WorkspaceitemMyDSpaceResult = new WorkspaceitemMyDSpaceResult(); const mockResultObject: WorkflowItemSearchResult = new WorkflowItemSearchResult();
mockResultObject.hitHighlights = {}; mockResultObject.hitHighlights = {};
const item = Object.assign(new Item(), { const item = Object.assign(new Item(), {
@@ -56,19 +56,19 @@ describe('WorkspaceitemMyDSpaceResultListElementComponent', () => {
beforeEach(async(() => { beforeEach(async(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [NoopAnimationsModule], imports: [NoopAnimationsModule],
declarations: [WorkspaceitemMyDSpaceResultListElementComponent], declarations: [WorkspaceItemSearchResultListElementComponent],
providers: [ providers: [
{ provide: 'objectElementProvider', useValue: (mockResultObject) }, { provide: 'objectElementProvider', useValue: (mockResultObject) },
{ provide: 'indexElementProvider', useValue: (compIndex) } { provide: 'indexElementProvider', useValue: (compIndex) }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(WorkspaceitemMyDSpaceResultListElementComponent, { }).overrideComponent(WorkspaceItemSearchResultListElementComponent, {
set: { changeDetection: ChangeDetectionStrategy.Default } set: { changeDetection: ChangeDetectionStrategy.Default }
}).compileComponents(); }).compileComponents();
})); }));
beforeEach(async(() => { beforeEach(async(() => {
fixture = TestBed.createComponent(WorkspaceitemMyDSpaceResultListElementComponent); fixture = TestBed.createComponent(WorkspaceItemSearchResultListElementComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
})); }));

View File

@@ -3,27 +3,27 @@ import { Component } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { find } from 'rxjs/operators'; import { find } from 'rxjs/operators';
import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
import { ViewMode } from '../../../../core/shared/view-mode.model'; import { ViewMode } from '../../../../core/shared/view-mode.model';
import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model';
import { WorkspaceitemMyDSpaceResult } from '../../../object-collection/shared/workspaceitem-my-dspace-result.model';
import { RemoteData } from '../../../../core/data/remote-data'; import { RemoteData } from '../../../../core/data/remote-data';
import { isNotUndefined } from '../../../empty.util'; import { isNotUndefined } from '../../../empty.util';
import { Item } from '../../../../core/shared/item.model'; import { Item } from '../../../../core/shared/item.model';
import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator';
import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspaceitem-search-result.model';
import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component';
/** /**
* This component renders workspaceitem object for the mydspace result in the list view. * This component renders workspaceitem object for the mydspace result in the list view.
*/ */
@Component({ @Component({
selector: 'ds-workspaceitem-my-dspace-result-list-element', selector: 'ds-workspace-item-search-result-list-element',
styleUrls: ['../my-dspace-result-list-element.component.scss', './workspaceitem-my-dspace-result-list-element.component.scss'], styleUrls: ['../my-dspace-result-list-element.component.scss', './workspace-item-search-result-list-element.component.scss'],
templateUrl: './workspaceitem-my-dspace-result-list-element.component.html', templateUrl: './workspace-item-search-result-list-element.component.html',
}) })
@listableObjectComponent(WorkspaceitemMyDSpaceResult.name, ViewMode.ListElement) @listableObjectComponent(WorkspaceItemSearchResult.name, ViewMode.ListElement)
export class WorkspaceitemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent<WorkspaceitemMyDSpaceResult, WorkspaceItem> { export class WorkspaceItemSearchResultListElementComponent extends SearchResultListElementComponent<WorkspaceItemSearchResult, WorkspaceItem> {
/** /**
* The item object that belonging to the result object * The item object that belonging to the result object

View File

@@ -1,17 +1,16 @@
<ng-container *ngVar="object.indexableObject as item"> <ds-item-type-badge [object]="dso"></ds-item-type-badge>
<ds-item-type-badge [object]="item"></ds-item-type-badge>
<ds-truncatable [id]="item.id" *ngIf="object !== undefined && object !== null"> <ds-truncatable [id]="dso.id" *ngIf="object !== undefined && object !== null">
<a <a
[routerLink]="['/items/' + item.id]" class="lead" [routerLink]="['/items/' + dso.id]" class="lead"
[innerHTML]="firstMetadataValue('dc.title')"></a> [innerHTML]="firstMetadataValue('dc.title')"></a>
<span class="text-muted"> <span class="text-muted">
<ds-truncatable-part [id]="item.id" [minLines]="1"> <ds-truncatable-part [id]="dso.id" [minLines]="1">
<ng-container *ngIf="item.firstMetadataValue('dc.publisher') || item.firstMetadataValue('dc.date.issued')">(<span class="item-list-publisher" <ng-container *ngIf="dso.firstMetadataValue('dc.publisher') || dso.firstMetadataValue('dc.date.issued')">(<span class="item-list-publisher"
[innerHTML]="firstMetadataValue('dc.publisher')">, </span><span [innerHTML]="firstMetadataValue('dc.publisher')">, </span><span
*ngIf="item.firstMetadataValue('dc.date.issued')" class="item-list-date" *ngIf="dso.firstMetadataValue('dc.date.issued')" class="item-list-date"
[innerHTML]="firstMetadataValue('dc.date.issued')"></span>)</ng-container> [innerHTML]="firstMetadataValue('dc.date.issued')"></span>)</ng-container>
<span *ngIf="item.allMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']).length > 0" <span *ngIf="dso.allMetadata(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']).length > 0"
class="item-list-authors"> class="item-list-authors">
<span *ngFor="let author of allMetadataValues(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']); let last=last;"> <span *ngFor="let author of allMetadataValues(['dc.contributor.author', 'dc.creator', 'dc.contributor.*']); let last=last;">
<span [innerHTML]="author"><span [innerHTML]="author"></span></span> <span [innerHTML]="author"><span [innerHTML]="author"></span></span>
@@ -20,10 +19,9 @@
</span> </span>
</ds-truncatable-part> </ds-truncatable-part>
</span> </span>
<div *ngIf="item.firstMetadataValue('dc.description.abstract')" class="item-list-abstract"> <div *ngIf="dso.firstMetadataValue('dc.description.abstract')" class="item-list-abstract">
<ds-truncatable-part [id]="item.id" [minLines]="3"><span <ds-truncatable-part [id]="dso.id" [minLines]="3"><span
[innerHTML]="firstMetadataValue('dc.description.abstract')"></span> [innerHTML]="firstMetadataValue('dc.description.abstract')"></span>
</ds-truncatable-part> </ds-truncatable-part>
</div> </div>
</ds-truncatable> </ds-truncatable>
</ng-container>

View File

@@ -6,6 +6,7 @@ import { SearchResultListElementComponent } from '../../../search-result-list-el
import { Item } from '../../../../../../core/shared/item.model'; import { Item } from '../../../../../../core/shared/item.model';
@listableObjectComponent('PublicationSearchResult', ViewMode.ListElement) @listableObjectComponent('PublicationSearchResult', ViewMode.ListElement)
@listableObjectComponent(ItemSearchResult.name, ViewMode.ListElement)
@Component({ @Component({
selector: 'ds-publication-search-result-list-element', selector: 'ds-publication-search-result-list-element',
styleUrls: ['./publication-search-result-list-element.component.scss'], styleUrls: ['./publication-search-result-list-element.component.scss'],

View File

@@ -1,10 +1,9 @@
import { Component, Inject } from '@angular/core'; import { Component, Inject, OnInit } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { SearchResult } from '../../../+search-page/search-result.model'; import { SearchResult } from '../../../+search-page/search-result.model';
import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { hasValue } from '../../empty.util'; import { hasValue } from '../../empty.util';
import { ListableObject } from '../../object-collection/shared/listable-object.model';
import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component'; import { AbstractListableElementComponent } from '../../object-collection/shared/object-collection-element/abstract-listable-element.component';
import { TruncatableService } from '../../truncatable/truncatable.service'; import { TruncatableService } from '../../truncatable/truncatable.service';
import { Metadata } from '../../../core/shared/metadata.utils'; import { Metadata } from '../../../core/shared/metadata.utils';
@@ -15,12 +14,15 @@ import { MetadataMap } from '../../../core/shared/metadata.models';
template: `` template: ``
}) })
export class SearchResultListElementComponent<T extends SearchResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> { export class SearchResultListElementComponent<T extends SearchResult<K>, K extends DSpaceObject> extends AbstractListableElementComponent<T> implements OnInit {
dso: K; dso: K;
metadata: MetadataMap; metadata: MetadataMap;
public constructor(protected truncatableService: TruncatableService) { public constructor(protected truncatableService: TruncatableService) {
super(); super();
}
ngOnInit(): void {
if (hasValue(this.object)) { if (hasValue(this.object)) {
this.dso = this.object.indexableObject; this.dso = this.object.indexableObject;
} }
@@ -49,4 +51,5 @@ export class SearchResultListElementComponent<T extends SearchResult<K>, K exten
isCollapsed(): Observable<boolean> { isCollapsed(): Observable<boolean> {
return this.truncatableService.isCollapsed(this.dso.id); return this.truncatableService.isCollapsed(this.dso.id);
} }
} }

View File

@@ -74,8 +74,7 @@ import { DsDatePickerComponent } from './form/builder/ds-dynamic-form-ui/models/
import { DsDynamicLookupComponent } from './form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component'; import { DsDynamicLookupComponent } from './form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component';
import { MockAdminGuard } from './mocks/mock-admin-guard.service'; import { MockAdminGuard } from './mocks/mock-admin-guard.service';
import { AlertComponent } from './alert/alert.component'; import { AlertComponent } from './alert/alert.component';
import { MyDSpaceResultListElementComponent } from './object-list/my-dspace-result-list-element/my-dspace-result-list-element.component'; import { SearchResultDetailElementComponent } from './object-detail/my-dspace-result-detail-element/search-result-detail-element.component';
import { MyDSpaceResultDetailElementComponent } from './object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component';
import { ClaimedTaskActionsComponent } from './mydspace-actions/claimed-task/claimed-task-actions.component'; import { ClaimedTaskActionsComponent } from './mydspace-actions/claimed-task/claimed-task-actions.component';
import { PoolTaskActionsComponent } from './mydspace-actions/pool-task/pool-task-actions.component'; import { PoolTaskActionsComponent } from './mydspace-actions/pool-task/pool-task-actions.component';
import { ObjectDetailComponent } from './object-detail/object-detail.component'; import { ObjectDetailComponent } from './object-detail/object-detail.component';
@@ -264,7 +263,6 @@ const ENTRY_COMPONENTS = [
// put shared entry components (components that are created dynamically) here // put shared entry components (components that are created dynamically) here
CollectionListElementComponent, CollectionListElementComponent,
CommunityListElementComponent, CommunityListElementComponent,
MyDSpaceResultListElementComponent,
SearchResultListElementComponent, SearchResultListElementComponent,
CommunitySearchResultListElementComponent, CommunitySearchResultListElementComponent,
CollectionSearchResultListElementComponent, CollectionSearchResultListElementComponent,
@@ -276,7 +274,7 @@ const ENTRY_COMPONENTS = [
PublicationSearchResultListElementComponent, PublicationSearchResultListElementComponent,
PublicationSearchResultGridElementComponent, PublicationSearchResultGridElementComponent,
BrowseEntryListElementComponent, BrowseEntryListElementComponent,
MyDSpaceResultDetailElementComponent, SearchResultDetailElementComponent,
SearchResultGridElementComponent, SearchResultGridElementComponent,
DsDynamicListComponent, DsDynamicListComponent,
DsDynamicLookupComponent, DsDynamicLookupComponent,