- {
+}
diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status-type.ts b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status-type.ts
new file mode 100644
index 0000000000..f6b3cbd7e8
--- /dev/null
+++ b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status-type.ts
@@ -0,0 +1,8 @@
+export enum MyDspaceItemStatusType {
+ WORKFLOW = 'mydspace.status.workflow',
+ REJECTED = 'mydspace.status.rejected',
+ VALIDATION = 'mydspace.status.validation',
+ WAITING_CONTROLLER = 'mydspace.status.waiting-for-controller',
+ IN_PROGRESS = 'mydspace.status.in-progress',
+ ACCEPTED = 'mydspace.status.accepted'
+}
diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.html b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.html
new file mode 100644
index 0000000000..848dd502a4
--- /dev/null
+++ b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.html
@@ -0,0 +1,5 @@
+
+
+ {{badgeContent | translate}}
+
+
diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.scss b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.ts b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.ts
new file mode 100644
index 0000000000..2ae1bc2ef5
--- /dev/null
+++ b/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.ts
@@ -0,0 +1,41 @@
+import { Component, Input, OnInit } from '@angular/core';
+import { MyDspaceItemStatusType } from './my-dspace-item-status-type';
+
+@Component({
+ selector: 'ds-mydspace-item-status',
+ styleUrls: ['./my-dspace-item-status.component.scss'],
+ templateUrl: './my-dspace-item-status.component.html'
+})
+
+export class MyDSpaceItemStatusComponent implements OnInit {
+
+ @Input() status: MyDspaceItemStatusType;
+ public badgeClass: string;
+ public badgeContent: string;
+
+ ngOnInit() {
+ this.badgeContent = this.status;
+ this.badgeClass = 'text-light badge ';
+ switch (this.status) {
+ case MyDspaceItemStatusType.REJECTED:
+ this.badgeClass += 'badge-danger';
+ break;
+ case MyDspaceItemStatusType.VALIDATION:
+ this.badgeClass += 'badge-warning';
+ break;
+ case MyDspaceItemStatusType.WAITING_CONTROLLER:
+ this.badgeClass += 'badge-info';
+ break;
+ case MyDspaceItemStatusType.IN_PROGRESS:
+ this.badgeClass += 'badge-primary';
+ break;
+ case MyDspaceItemStatusType.ACCEPTED:
+ this.badgeClass += 'badge-success';
+ break;
+ case MyDspaceItemStatusType.WORKFLOW:
+ this.badgeClass += 'badge-info';
+ break;
+ }
+ }
+
+}
diff --git a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html
new file mode 100644
index 0000000000..1f13fbfa2c
--- /dev/null
+++ b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html
@@ -0,0 +1,3 @@
+
+ {{'submission.workflow.tasks.generic.submitter' | translate}} : {{(submitter | async)?.name}}
+
diff --git a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.scss b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.ts b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.ts
new file mode 100644
index 0000000000..b800686714
--- /dev/null
+++ b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.ts
@@ -0,0 +1,29 @@
+import { Component, Input, OnInit } from '@angular/core';
+
+import { Observable } from 'rxjs';
+import { filter, find, flatMap, map } from 'rxjs/operators';
+
+import { EPerson } from '../../../../core/eperson/models/eperson.model';
+import { RemoteData } from '../../../../core/data/remote-data';
+import { isNotEmpty, isNotUndefined } from '../../../empty.util';
+import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
+
+@Component({
+ selector: 'ds-item-submitter',
+ styleUrls: ['./item-submitter.component.scss'],
+ templateUrl: './item-submitter.component.html'
+})
+
+export class ItemSubmitterComponent implements OnInit {
+ @Input() object: any;
+
+ submitter: Observable;
+
+ ngOnInit() {
+ this.submitter = (this.object.workflowitem as Observable>).pipe(
+ filter((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload))),
+ flatMap((rd: RemoteData) => rd.payload.submitter as Observable>),
+ find((rd: RemoteData) => rd.hasSucceeded && isNotEmpty(rd.payload)),
+ map((rd: RemoteData) => rd.payload));
+ }
+}
diff --git a/src/app/shared/object-collection/shared/pool-task-my-dspace-result.model.ts b/src/app/shared/object-collection/shared/pool-task-my-dspace-result.model.ts
new file mode 100644
index 0000000000..04352b5b4c
--- /dev/null
+++ b/src/app/shared/object-collection/shared/pool-task-my-dspace-result.model.ts
@@ -0,0 +1,8 @@
+import { PoolTask } from '../../../core/tasks/models/pool-task-object.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';
+
+@searchResultFor(PoolTask, MyDSpaceConfigurationValueType.Workflow)
+export class PoolTaskMyDSpaceResult extends SearchResult {
+}
diff --git a/src/app/shared/object-collection/shared/workflowitem-my-dspace-result.model.ts b/src/app/shared/object-collection/shared/workflowitem-my-dspace-result.model.ts
new file mode 100644
index 0000000000..d60fabc04c
--- /dev/null
+++ b/src/app/shared/object-collection/shared/workflowitem-my-dspace-result.model.ts
@@ -0,0 +1,8 @@
+import { Workflowitem } from '../../../core/submission/models/workflowitem.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';
+
+@searchResultFor(Workflowitem, MyDSpaceConfigurationValueType.Workspace)
+export class WorkflowitemMyDSpaceResult extends SearchResult {
+}
diff --git a/src/app/shared/object-collection/shared/workspaceitem-my-dspace-result.model.ts b/src/app/shared/object-collection/shared/workspaceitem-my-dspace-result.model.ts
new file mode 100644
index 0000000000..381b8cd3c4
--- /dev/null
+++ b/src/app/shared/object-collection/shared/workspaceitem-my-dspace-result.model.ts
@@ -0,0 +1,8 @@
+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 { SearchResult } from '../../../+search-page/search-result.model';
+
+@searchResultFor(Workspaceitem, MyDSpaceConfigurationValueType.Workspace)
+export class WorkspaceitemMyDSpaceResult extends SearchResult {
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/ct-my-dspace-result/ct-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/ct-my-dspace-result/ct-my-dspace-result-detail-element.component.html
new file mode 100644
index 0000000000..134b85523e
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/ct-my-dspace-result/ct-my-dspace-result-detail-element.component.html
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/ct-my-dspace-result/ct-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/ct-my-dspace-result/ct-my-dspace-result-detail-element.component.ts
new file mode 100644
index 0000000000..90531af2b0
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/ct-my-dspace-result/ct-my-dspace-result-detail-element.component.ts
@@ -0,0 +1,58 @@
+import { Component, Inject } from '@angular/core';
+
+import { Observable } from 'rxjs';
+import { find } from 'rxjs/operators';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { RemoteData } from '../../../../core/data/remote-data';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { isNotUndefined } from '../../../empty.util';
+import { ListableObject } from '../../../object-collection/shared/listable-object.model';
+import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
+import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
+import { ClaimedTaskMyDSpaceResult } from '../../../object-collection/shared/claimed-task-my-dspace-result.model';
+import { ClaimedTaskDataService } from '../../../../core/tasks/claimed-task-data.service';
+import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common';
+import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+
+@Component({
+ selector: 'ds-claimtask-my-dspace-result-detail-element',
+ styleUrls: ['../my-dspace-result-detail-element.component.scss'],
+ templateUrl: './ct-my-dspace-result-detail-element.component.html',
+ providers: [Location, {provide: LocationStrategy, useClass: PathLocationStrategy}]
+})
+
+@renderElementsFor(ClaimedTaskMyDSpaceResult, ViewMode.Detail)
+@renderElementsFor(ClaimedTask, ViewMode.Detail)
+export class ClaimedTaskMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent {
+ public status = MyDspaceItemStatusType.VALIDATION;
+ public workFlow: Workflowitem;
+ public rejectForm: FormGroup;
+
+ constructor(private ctDataService: ClaimedTaskDataService,
+ private modalService: NgbModal,
+ private formBuilder: FormBuilder,
+ @Inject('objectElementProvider') public listable: ListableObject) {
+ super(listable);
+
+ this.rejectForm = this.formBuilder.group({
+ reason: ['', Validators.required]
+ });
+ }
+
+ ngOnInit() {
+ this.initWorkflowItem(this.dso.workflowitem as Observable>);
+ }
+
+ initWorkflowItem(wfi$: Observable>) {
+ wfi$.pipe(
+ find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload)))
+ ).subscribe((rd: RemoteData) => {
+ this.workFlow = rd.payload;
+ });
+ }
+
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html
new file mode 100644
index 0000000000..4f9d8f3e94
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.scss b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts
new file mode 100644
index 0000000000..9b42bb2268
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts
@@ -0,0 +1,32 @@
+import { Component, Input } from '@angular/core';
+
+import { Observable } from 'rxjs';
+
+import { Item } from '../../../../core/shared/item.model';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+import { fadeInOut } from '../../../animations/fade';
+import { Bitstream } from '../../../../core/shared/bitstream.model';
+
+@Component({
+ selector: 'ds-item-detail-preview',
+ styleUrls: ['./item-detail-preview.component.scss'],
+ templateUrl: './item-detail-preview.component.html',
+ animations: [fadeInOut]
+})
+export class ItemDetailPreviewComponent {
+
+ @Input() item: Item;
+ @Input() object: any;
+ @Input() status: MyDspaceItemStatusType;
+
+ public ALL_STATUS = [];
+ public thumbnail$: Observable;
+
+ ngOnInit() {
+ Object.keys(MyDspaceItemStatusType).forEach((s) => {
+ this.ALL_STATUS.push(MyDspaceItemStatusType[s]);
+ });
+ this.thumbnail$ = this.item.getThumbnail();
+ }
+
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.html
new file mode 100644
index 0000000000..2b687960ab
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.scss b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.scss
new file mode 100644
index 0000000000..1d0786105c
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.scss
@@ -0,0 +1 @@
+@import '../../../../../styles/variables';
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts
new file mode 100644
index 0000000000..75bfb30939
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-my-dspace-result/item-my-dspace-result-detail-element.component.ts
@@ -0,0 +1,21 @@
+import { Component } from '@angular/core';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+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';
+
+@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'
+})
+
+@renderElementsFor(ItemMyDSpaceResult, ViewMode.Detail)
+export class ItemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent {
+
+ public status = MyDspaceItemStatusType.ACCEPTED;
+
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component.scss b/src/app/shared/object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component.scss
new file mode 100644
index 0000000000..9a442f84e1
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component.scss
@@ -0,0 +1 @@
+@import '../../object-grid/search-result-grid-element/search-result-grid-element.component';
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component.ts
new file mode 100644
index 0000000000..f5c2cd0897
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/my-dspace-result-detail-element.component.ts
@@ -0,0 +1,41 @@
+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.model';
+
+@Component({
+ selector: 'ds-my-dspace-result-detail-element',
+ template: ``
+})
+
+export class MyDSpaceResultDetailElementComponent, K extends DSpaceObject> extends AbstractListableElementComponent {
+ dso: K;
+
+ public constructor(@Inject('objectElementProvider') public gridable: ListableObject) {
+ super(gridable);
+ this.dso = this.object.dspaceObject;
+ }
+
+ /**
+ * 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);
+ }
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pt-my-dspace-result/pt-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/pt-my-dspace-result/pt-my-dspace-result-detail-element.component.html
new file mode 100644
index 0000000000..8d808815c2
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pt-my-dspace-result/pt-my-dspace-result-detail-element.component.html
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pt-my-dspace-result/pt-my-dspace-result-detail-lement.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pt-my-dspace-result/pt-my-dspace-result-detail-lement.component.ts
new file mode 100644
index 0000000000..28ebefe633
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pt-my-dspace-result/pt-my-dspace-result-detail-lement.component.ts
@@ -0,0 +1,46 @@
+import { Component, Inject } from '@angular/core';
+
+import { Observable } from 'rxjs';
+import { find } from 'rxjs/operators';
+
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { RemoteData } from '../../../../core/data/remote-data';
+import { isNotUndefined } from '../../../empty.util';
+import { ListableObject } from '../../../object-collection/shared/listable-object.model';
+import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
+import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
+import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-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';
+
+@Component({
+ selector: 'ds-pooltask-my-dspace-result-detail-element',
+ styleUrls: ['../my-dspace-result-detail-element.component.scss'],
+ templateUrl: './pt-my-dspace-result-detail-element.component.html',
+})
+
+@renderElementsFor(PoolTaskMyDSpaceResult, ViewMode.Detail)
+@renderElementsFor(PoolTask, ViewMode.Detail)
+export class PoolTaskMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent {
+ public status = MyDspaceItemStatusType.WAITING_CONTROLLER;
+ public workFlow: Workflowitem;
+
+ constructor(@Inject('objectElementProvider') public listable: ListableObject) {
+
+ super(listable);
+ }
+
+ ngOnInit() {
+ this.initWorkflowItem(this.dso.workflowitem as Observable>);
+ }
+
+ initWorkflowItem(wfi$: Observable>) {
+ wfi$.pipe(
+ find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload)))
+ ).subscribe((rd: RemoteData) => {
+ this.workFlow = rd.payload;
+ });
+ }
+
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/wfi-my-dspace-result/wfi-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/wfi-my-dspace-result/wfi-my-dspace-result-detail-element.component.html
new file mode 100644
index 0000000000..7ff1a9bf72
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/wfi-my-dspace-result/wfi-my-dspace-result-detail-element.component.html
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/wfi-my-dspace-result/wfi-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/wfi-my-dspace-result/wfi-my-dspace-result-detail-element.component.ts
new file mode 100644
index 0000000000..398e758896
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/wfi-my-dspace-result/wfi-my-dspace-result-detail-element.component.ts
@@ -0,0 +1,45 @@
+import { Component, Inject } from '@angular/core';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.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 { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+import { Observable } from 'rxjs/internal/Observable';
+import { RemoteData } from '../../../../core/data/remote-data';
+import { find } from 'rxjs/operators';
+import { isNotUndefined } from '../../../empty.util';
+
+@Component({
+ selector: 'ds-workflowitem-my-dspace-result-detail-element',
+ styleUrls: ['../my-dspace-result-detail-element.component.scss'],
+ templateUrl: './wfi-my-dspace-result-detail-element.component.html',
+})
+
+@renderElementsFor(WorkflowitemMyDSpaceResult, ViewMode.Detail)
+@renderElementsFor(Workflowitem, ViewMode.Detail)
+export class WorkflowitemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent {
+
+ public item: Item;
+ public status = MyDspaceItemStatusType.WORKFLOW;
+
+ constructor(@Inject('objectElementProvider') public listable: ListableObject) {
+ super(listable);
+ }
+
+ ngOnInit() {
+ this.initItem(this.dso.item as Observable>);
+ }
+
+ initItem(itemObs: Observable>) {
+ itemObs.pipe(
+ find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload))
+ ).subscribe((rd: RemoteData) => {
+ this.item = rd.payload[0];
+ });
+ }
+
+}
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.html
new file mode 100644
index 0000000000..8d4eee6ba9
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.html
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.scss b/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.ts
new file mode 100644
index 0000000000..4c2c47eae3
--- /dev/null
+++ b/src/app/shared/object-detail/my-dspace-result-detail-element/wsi-my-dspace-result/wsi-my-dspace-result-detail-element.component.ts
@@ -0,0 +1,44 @@
+import { Component, Inject } from '@angular/core';
+
+import { Observable } from 'rxjs';
+import { find } from 'rxjs/operators';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { 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 { RemoteData } from '../../../../core/data/remote-data';
+import { isNotUndefined } from '../../../empty.util';
+import { ListableObject } from '../../../object-collection/shared/listable-object.model';
+import { MyDSpaceResultDetailElementComponent } from '../my-dspace-result-detail-element.component';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+
+@Component({
+ selector: 'ds-workspaceitem-my-dspace-result-detail-element',
+ styleUrls: ['../my-dspace-result-detail-element.component.scss', './wsi-my-dspace-result-detail-element.component.scss'],
+ templateUrl: './wsi-my-dspace-result-detail-element.component.html',
+})
+
+@renderElementsFor(WorkspaceitemMyDSpaceResult, ViewMode.Detail)
+@renderElementsFor(Workspaceitem, ViewMode.Detail)
+export class WorkspaceitemMyDSpaceResultDetailElementComponent extends MyDSpaceResultDetailElementComponent {
+ public item: Item;
+ status = MyDspaceItemStatusType.IN_PROGRESS;
+
+ constructor(@Inject('objectElementProvider') public listable: ListableObject) {
+ super(listable);
+ }
+
+ ngOnInit() {
+ this.initItem(this.dso.item as Observable>);
+ }
+
+ initItem(itemObs: Observable>) {
+ itemObs.pipe(
+ find((rd: RemoteData) => rd.hasSucceeded && isNotUndefined(rd.payload))
+ ).subscribe((rd: RemoteData) => {
+ this.item = rd.payload[0];
+ });
+ }
+}
diff --git a/src/app/shared/object-detail/object-detail.component.html b/src/app/shared/object-detail/object-detail.component.html
new file mode 100644
index 0000000000..fc2f3abae1
--- /dev/null
+++ b/src/app/shared/object-detail/object-detail.component.html
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/src/app/shared/object-detail/object-detail.component.scss b/src/app/shared/object-detail/object-detail.component.scss
new file mode 100644
index 0000000000..19de7e6b30
--- /dev/null
+++ b/src/app/shared/object-detail/object-detail.component.scss
@@ -0,0 +1,28 @@
+@import '../../../styles/variables';
+@import '../../../styles/mixins';
+
+ds-wrapper-detail-element ::ng-deep {
+ div.thumbnail > img {
+ height: $card-thumbnail-height;
+ width: 100%;
+ }
+ .card-title {
+ line-height: $headings-line-height;
+ height: ($headings-line-height*3) +em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .item-abstract {
+ line-height: $line-height-base;
+ height: ($line-height-base*5)+em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .item-authors{
+ line-height: $line-height-base;
+ height: ($line-height-base*1.5)+em;
+ }
+ div.card {
+ margin-bottom: 20px;
+ }
+}
diff --git a/src/app/shared/object-detail/object-detail.component.spec.ts b/src/app/shared/object-detail/object-detail.component.spec.ts
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/app/shared/object-detail/object-detail.component.ts b/src/app/shared/object-detail/object-detail.component.ts
new file mode 100644
index 0000000000..bdbb360be6
--- /dev/null
+++ b/src/app/shared/object-detail/object-detail.component.ts
@@ -0,0 +1,100 @@
+import {
+ ChangeDetectionStrategy,
+ Component,
+ EventEmitter,
+ Input,
+ Output,
+ ViewEncapsulation
+} from '@angular/core';
+
+import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
+import { PaginatedList } from '../../core/data/paginated-list';
+
+import { RemoteData } from '../../core/data/remote-data';
+import { fadeIn } from '../animations/fade';
+import { ListableObject } from '../object-collection/shared/listable-object.model';
+
+import { PaginationComponentOptions } from '../pagination/pagination-component-options.model';
+
+@Component({
+ changeDetection: ChangeDetectionStrategy.Default,
+ encapsulation: ViewEncapsulation.Emulated,
+ selector: 'ds-object-detail',
+ styleUrls: [ './object-detail.component.scss' ],
+ templateUrl: './object-detail.component.html',
+ animations: [fadeIn]
+})
+
+export class ObjectDetailComponent {
+
+ @Input() config: PaginationComponentOptions;
+ @Input() sortConfig: SortOptions;
+ @Input() hideGear = false;
+ @Input() hidePagerWhenSinglePage = true;
+ private _objects: RemoteData>;
+ @Input() set objects(objects: RemoteData>) {
+ this._objects = objects;
+ }
+ get objects() {
+ return this._objects;
+ }
+
+ /**
+ * An event fired when the page is changed.
+ * Event's payload equals to the newly selected page.
+ */
+ @Output() change: EventEmitter<{
+ pagination: PaginationComponentOptions,
+ sort: SortOptions
+ }> = new EventEmitter<{
+ pagination: PaginationComponentOptions,
+ sort: SortOptions
+ }>();
+
+ /**
+ * An event fired when the page is changed.
+ * Event's payload equals to the newly selected page.
+ */
+ @Output() pageChange: EventEmitter = new EventEmitter();
+
+ /**
+ * An event fired when the page wsize is changed.
+ * Event's payload equals to the newly selected page size.
+ */
+ @Output() pageSizeChange: EventEmitter = new EventEmitter();
+
+ /**
+ * An event fired when the sort direction is changed.
+ * Event's payload equals to the newly selected sort direction.
+ */
+ @Output() sortDirectionChange: EventEmitter = new EventEmitter();
+
+ @Output() paginationChange: EventEmitter = new EventEmitter();
+
+ /**
+ * An event fired when the sort field is changed.
+ * Event's payload equals to the newly selected sort field.
+ */
+ @Output() sortFieldChange: EventEmitter = new EventEmitter();
+ data: any = {};
+ onPageChange(event) {
+ this.pageChange.emit(event);
+ }
+
+ onPageSizeChange(event) {
+ this.pageSizeChange.emit(event);
+ }
+
+ onSortDirectionChange(event) {
+ this.sortDirectionChange.emit(event);
+ }
+
+ onSortFieldChange(event) {
+ this.sortFieldChange.emit(event);
+ }
+
+ onPaginationChange(event) {
+ this.paginationChange.emit(event);
+ }
+
+}
diff --git a/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.html b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.html
new file mode 100644
index 0000000000..00a8ed2dc8
--- /dev/null
+++ b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.html
@@ -0,0 +1 @@
+
diff --git a/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.scss b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.scss
new file mode 100644
index 0000000000..51a7fc6a55
--- /dev/null
+++ b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.scss
@@ -0,0 +1,2 @@
+@import '../../../../styles/variables';
+
diff --git a/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.spec.ts b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.spec.ts
new file mode 100644
index 0000000000..3f28d5e76b
--- /dev/null
+++ b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.spec.ts
@@ -0,0 +1,46 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { By } from '@angular/platform-browser';
+
+import { of as observableOf } from 'rxjs';
+
+import { ActivatedRoute, Router } from '@angular/router';
+import { RouterStub } from '../../testing/router-stub';
+
+import { WrapperGridElementComponent } from '../../object-grid/wrapper-grid-element/wrapper-grid-element.component';
+
+let wrapperGridElementComponent: WrapperGridElementComponent;
+let fixture: ComponentFixture;
+const queryParam = 'test query';
+const scopeParam = '7669c72a-3f2a-451f-a3b9-9210e7a4c02f';
+const activatedRouteStub = {
+ queryParams: observableOf({
+ query: queryParam,
+ scope: scopeParam
+ })
+};
+
+describe('WrapperGridElementComponent', () => {
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ WrapperGridElementComponent ],
+ providers: [
+ { provide: ActivatedRoute, useValue: activatedRouteStub },
+ { provide: Router, useClass: RouterStub },
+ { provide: 'objectElementProvider', useFactory: (wrapperGridElementComponent)}
+ ],
+
+ schemas: [ NO_ERRORS_SCHEMA ]
+ }).compileComponents(); // compile template and css
+ }));
+
+ beforeEach(async(() => {
+ fixture = TestBed.createComponent(WrapperGridElementComponent);
+ wrapperGridElementComponent = fixture.componentInstance;
+
+ }));
+
+ it('should show the wrapper element containing the cards',() => {
+ expect(fixture.debugElement.query(By.css('ds-collection-grid-element'))).toBeDefined();
+ })
+});
diff --git a/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.ts b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.ts
new file mode 100644
index 0000000000..0d3bfef3fe
--- /dev/null
+++ b/src/app/shared/object-detail/wrapper-detail-element/wrapper-detail-element.component.ts
@@ -0,0 +1,32 @@
+import { Component, Injector, Input, OnInit } from '@angular/core';
+
+import { ViewMode } from '../../../core/shared/view-mode.model';
+import { GenericConstructor } from '../../../core/shared/generic-constructor';
+import { rendersDSOType } from '../../object-collection/shared/dso-element-decorator';
+import { ListableObject } from '../../object-collection/shared/listable-object.model';
+
+@Component({
+ selector: 'ds-wrapper-detail-element',
+ styleUrls: ['./wrapper-detail-element.component.scss'],
+ templateUrl: './wrapper-detail-element.component.html'
+})
+export class WrapperDetailElementComponent implements OnInit {
+ @Input() object: ListableObject;
+ objectInjector: Injector;
+
+ constructor(private injector: Injector) {
+ }
+
+ ngOnInit(): void {
+ this.objectInjector = Injector.create({
+ providers: [{ provide: 'objectElementProvider', useFactory: () => (this.object), deps:[] }],
+ parent: this.injector
+ });
+
+ }
+
+ getDetailElement(): string {
+ const f: GenericConstructor = this.object.constructor as GenericConstructor;
+ return rendersDSOType(f, ViewMode.Detail);
+ }
+}
diff --git a/src/app/shared/object-list/item-list-preview/item-list-preview.component.html b/src/app/shared/object-list/item-list-preview/item-list-preview.component.html
new file mode 100644
index 0000000000..0aa93ab711
--- /dev/null
+++ b/src/app/shared/object-list/item-list-preview/item-list-preview.component.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+ (
+ )
+
+ {{'mydspace.results.no-authors' | translate}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/shared/object-list/item-list-preview/item-list-preview.component.scss b/src/app/shared/object-list/item-list-preview/item-list-preview.component.scss
new file mode 100644
index 0000000000..8d0339f264
--- /dev/null
+++ b/src/app/shared/object-list/item-list-preview/item-list-preview.component.scss
@@ -0,0 +1,5 @@
+@import '../../../../styles/_variables.scss';
+
+.h3-title {
+ color: $link-color;
+}
diff --git a/src/app/shared/object-list/item-list-preview/item-list-preview.component.ts b/src/app/shared/object-list/item-list-preview/item-list-preview.component.ts
new file mode 100644
index 0000000000..83b8d8fd92
--- /dev/null
+++ b/src/app/shared/object-list/item-list-preview/item-list-preview.component.ts
@@ -0,0 +1,41 @@
+import { Component, Input } from '@angular/core';
+
+import { Item } from '../../../core/shared/item.model';
+import { fadeInOut } from '../../animations/fade';
+import { MyDspaceItemStatusType } from '../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+import { Metadata } from '../../../core/shared/metadata.model';
+
+@Component({
+ selector: 'ds-item-list-preview',
+ styleUrls: ['item-list-preview.component.scss'],
+ templateUrl: 'item-list-preview.component.html',
+ animations: [fadeInOut]
+})
+
+export class ItemListPreviewComponent {
+ @Input() item: Item;
+ @Input() object: any;
+ @Input() status: MyDspaceItemStatusType;
+ @Input() showSubmitter = false;
+
+ /**
+ * 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.item.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.item.metadata], keyOrKeys);
+ }
+
+}
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/ct-my-dspace-result/ct-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/ct-my-dspace-result/ct-my-dspace-result-list-element.component.html
new file mode 100644
index 0000000000..5ec6e59f95
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/ct-my-dspace-result/ct-my-dspace-result-list-element.component.html
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/ct-my-dspace-result/ct-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/ct-my-dspace-result/ct-my-dspace-result-list-element.component.ts
new file mode 100644
index 0000000000..36626e1968
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/ct-my-dspace-result/ct-my-dspace-result-list-element.component.ts
@@ -0,0 +1,42 @@
+import { Component } from '@angular/core';
+import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common';
+
+import { Observable } from 'rxjs';
+import { find } from 'rxjs/operators';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { RemoteData } from '../../../../core/data/remote-data';
+import { isNotUndefined } from '../../../empty.util';
+import { Workflowitem } from '../../../../core/submission/models/workflowitem.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';
+
+@Component({
+ selector: 'ds-claimtask-my-dspace-result-list-element',
+ styleUrls: ['../my-dspace-result-list-element.component.scss'],
+ templateUrl: './ct-my-dspace-result-list-element.component.html',
+ providers: [Location, { provide: LocationStrategy, useClass: PathLocationStrategy }]
+})
+
+@renderElementsFor(ClaimedTaskMyDSpaceResult, ViewMode.List)
+@renderElementsFor(ClaimedTask, ViewMode.List)
+export class ClaimedTaskMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent {
+ public showSubmitter = true;
+ public status = MyDspaceItemStatusType.VALIDATION;
+ public workFlow: Workflowitem;
+
+ ngOnInit() {
+ this.initWorkflowItem(this.dso.workflowitem as Observable>);
+ }
+
+ initWorkflowItem(wfi$: Observable>) {
+ wfi$.pipe(
+ find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload)))
+ ).subscribe((rd: RemoteData) => {
+ this.workFlow = rd.payload;
+ });
+ }
+}
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.html
new file mode 100644
index 0000000000..e1b1435481
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.html
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.scss b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.scss
new file mode 100644
index 0000000000..1d0786105c
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.scss
@@ -0,0 +1 @@
+@import '../../../../../styles/variables';
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts
new file mode 100644
index 0000000000..484ca9af11
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/item-my-dspace-result/item-my-dspace-result-list-element.component.ts
@@ -0,0 +1,21 @@
+import { Component } from '@angular/core';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
+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 { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+
+@Component({
+ selector: 'ds-workspaceitem-my-dspace-result-list-element',
+ styleUrls: ['../my-dspace-result-list-element.component.scss', './item-my-dspace-result-list-element.component.scss'],
+ templateUrl: './item-my-dspace-result-list-element.component.html'
+})
+
+@renderElementsFor(ItemMyDSpaceResult, ViewMode.List)
+export class ItemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent {
+
+ public status = MyDspaceItemStatusType.ACCEPTED;
+
+}
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/my-dspace-result-list-element.component.scss b/src/app/shared/object-list/my-dspace-result-list-element/my-dspace-result-list-element.component.scss
new file mode 100644
index 0000000000..4cd8a2b697
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/my-dspace-result-list-element.component.scss
@@ -0,0 +1 @@
+@import '../search-result-list-element/search-result-list-element.component.scss';
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/my-dspace-result-list-element.component.ts
new file mode 100644
index 0000000000..6c759f8946
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/my-dspace-result-list-element.component.ts
@@ -0,0 +1,46 @@
+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.model';
+import { TruncatableService } from '../../truncatable/truncatable.service';
+
+@Component({
+ selector: 'ds-my-dspace-result-list-element',
+ template: ``
+})
+
+export class MyDSpaceResultListElementComponent, K extends DSpaceObject> extends AbstractListableElementComponent {
+ dso: K;
+ dsoIndex: number;
+
+ public constructor(@Inject('objectElementProvider') public listable: ListableObject,
+ @Inject('indexElementProvider') public index: number) {
+ super(listable);
+ this.dso = this.object.dspaceObject;
+ 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);
+ }
+
+}
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pt-my-dspace-result/pt-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/pt-my-dspace-result/pt-my-dspace-result-list-element.component.html
new file mode 100644
index 0000000000..b5018615e0
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/pt-my-dspace-result/pt-my-dspace-result-list-element.component.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pt-my-dspace-result/pt-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pt-my-dspace-result/pt-my-dspace-result-list-element.component.ts
new file mode 100644
index 0000000000..c3c27a53ae
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/pt-my-dspace-result/pt-my-dspace-result-list-element.component.ts
@@ -0,0 +1,81 @@
+import { Component, Inject, OnDestroy, OnInit } from '@angular/core';
+
+import { Observable, Subscription } from 'rxjs';
+import { find, first } from 'rxjs/operators';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { RemoteData } from '../../../../core/data/remote-data';
+import { hasValue, isNotUndefined } from '../../../empty.util';
+import { ListableObject } from '../../../object-collection/shared/listable-object.model';
+import { Workflowitem } from '../../../../core/submission/models/workflowitem.model';
+import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model';
+import { PoolTaskMyDSpaceResult } from '../../../object-collection/shared/pool-task-my-dspace-result.model';
+import { ActivatedRoute, NavigationExtras, Router } from '@angular/router';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+import { MYDSPACE_ROUTE } from '../../../../+my-dspace-page/my-dspace-page.component';
+
+@Component({
+ selector: 'ds-pooltask-my-dspace-result-list-element',
+ styleUrls: ['../my-dspace-result-list-element.component.scss'],
+ templateUrl: './pt-my-dspace-result-list-element.component.html',
+})
+
+@renderElementsFor(PoolTaskMyDSpaceResult, ViewMode.List)
+@renderElementsFor(PoolTask, ViewMode.List)
+export class PoolTaskMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent implements OnDestroy, OnInit {
+ public status = MyDspaceItemStatusType.WAITING_CONTROLLER;
+ public workFlow: Workflowitem;
+ public viewMode: ViewMode = ViewMode.List;
+ private sub: Subscription;
+
+ constructor(@Inject('objectElementProvider') public listable: ListableObject,
+ @Inject('indexElementProvider') public index: number,
+ private route: ActivatedRoute,
+ private router: Router) {
+ super(listable, index);
+ }
+
+ ngOnInit() {
+ this.initWorkflowItem(this.dso.workflowitem as Observable>);
+ }
+
+ initWorkflowItem(wfi$: Observable>) {
+ wfi$.pipe(
+ find((rd: RemoteData) => (rd.hasSucceeded && isNotUndefined(rd.payload)))
+ ).subscribe((rd: RemoteData) => {
+ this.workFlow = rd.payload;
+ });
+ }
+
+ switchView() {
+ this.viewMode = (this.viewMode === ViewMode.List) ? ViewMode.Detail : ViewMode.List;
+ }
+
+ view() {
+ this.sub = this.route.queryParams.pipe(
+ first()
+ ).subscribe((params) => {
+ const pageSize = params.pageSize || 1;
+ const page = (pageSize * this.dsoIndex ) + 1;
+
+ const navigationExtras: NavigationExtras = {
+ queryParams: {
+ view: ViewMode.Detail,
+ page,
+ pageSize
+ },
+ queryParamsHandling: 'merge'
+ };
+ this.router.navigate([MYDSPACE_ROUTE], navigationExtras);
+ });
+ }
+
+ ngOnDestroy() {
+ if (hasValue(this.sub)) {
+ this.sub.unsubscribe();
+ }
+ }
+
+}
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/wfi-my-dspace-result/wfi-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/wfi-my-dspace-result/wfi-my-dspace-result-list-element.component.html
new file mode 100644
index 0000000000..782c5f9e56
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/wfi-my-dspace-result/wfi-my-dspace-result-list-element.component.html
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/wfi-my-dspace-result/wfi-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/wfi-my-dspace-result/wfi-my-dspace-result-list-element.component.ts
new file mode 100644
index 0000000000..a0f1e8decd
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/wfi-my-dspace-result/wfi-my-dspace-result-list-element.component.ts
@@ -0,0 +1,40 @@
+import { Component } from '@angular/core';
+
+import { Observable } from 'rxjs';
+import { find } from 'rxjs/operators';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
+import { ViewMode } from '../../../../core/shared/view-mode.model';
+import { RemoteData } from '../../../../core/data/remote-data';
+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 { Item } from '../../../../core/shared/item.model';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+
+@Component({
+ selector: 'ds-workflowitem-my-dspace-result-list-element',
+ styleUrls: ['../my-dspace-result-list-element.component.scss'],
+ templateUrl: './wfi-my-dspace-result-list-element.component.html',
+})
+
+@renderElementsFor(WorkflowitemMyDSpaceResult, ViewMode.List)
+@renderElementsFor(Workflowitem, ViewMode.List)
+export class WorkflowitemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent {
+ public item: Item;
+ public status = MyDspaceItemStatusType.WORKFLOW;
+
+ ngOnInit() {
+ this.initItem(this.dso.item as Observable>);
+ }
+
+ initItem(item$: Observable>) {
+ item$.pipe(
+ find((rd: RemoteData- ) => rd.hasSucceeded && isNotUndefined(rd.payload))
+ ).subscribe((rd: RemoteData
- ) => {
+ this.item = rd.payload;
+ });
+ }
+
+}
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.html
new file mode 100644
index 0000000000..79a31770d6
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.html
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.scss b/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.scss
new file mode 100644
index 0000000000..a32ecc6925
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.scss
@@ -0,0 +1,20 @@
+@import '../../../../../styles/variables';
+
+::-webkit-scrollbar-track
+{
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
+ background-color: #F5F5F5;
+}
+
+::-webkit-scrollbar
+{
+ width: 12px;
+ background-color: #F5F5F5;
+}
+
+::-webkit-scrollbar-thumb
+{
+ -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
+ background-color: #555;
+}
+
diff --git a/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.ts
new file mode 100644
index 0000000000..7a19f54a10
--- /dev/null
+++ b/src/app/shared/object-list/my-dspace-result-list-element/wsi-my-dspace-result/wsi-my-dspace-result-list-element.component.ts
@@ -0,0 +1,39 @@
+import { Component } from '@angular/core';
+
+import { Observable } from 'rxjs';
+import { find } from 'rxjs/operators';
+
+import { renderElementsFor } from '../../../object-collection/shared/dso-element-decorator';
+import { MyDSpaceResultListElementComponent, } from '../my-dspace-result-list-element.component';
+import { ViewMode } from '../../../../core/shared/view-mode.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 { isNotUndefined } from '../../../empty.util';
+import { Item } from '../../../../core/shared/item.model';
+import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type';
+
+@Component({
+ selector: 'ds-workspaceitem-my-dspace-result-list-element',
+ styleUrls: ['../my-dspace-result-list-element.component.scss', './wsi-my-dspace-result-list-element.component.scss'],
+ templateUrl: './wsi-my-dspace-result-list-element.component.html',
+})
+
+@renderElementsFor(WorkspaceitemMyDSpaceResult, ViewMode.List)
+export class WorkspaceitemMyDSpaceResultListElementComponent extends MyDSpaceResultListElementComponent {
+
+ item: Item;
+ status = MyDspaceItemStatusType.IN_PROGRESS;
+
+ ngOnInit() {
+ this.initItem(this.dso.item as Observable>);
+ }
+
+ initItem(item$: Observable>) {
+ item$.pipe(
+ find((rd: RemoteData
- ) => rd.hasSucceeded && isNotUndefined(rd.payload))
+ ).subscribe((rd: RemoteData
- ) => {
+ this.item = rd.payload;
+ });
+ }
+}
diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html
index 420886668a..3249434921 100644
--- a/src/app/shared/object-list/object-list.component.html
+++ b/src/app/shared/object-list/object-list.component.html
@@ -11,8 +11,8 @@
(sortFieldChange)="onSortFieldChange($event)"
(paginationChange)="onPaginationChange($event)">
diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts
index b0296d5ae1..afc376034f 100644
--- a/src/app/shared/object-list/object-list.component.ts
+++ b/src/app/shared/object-list/object-list.component.ts
@@ -25,6 +25,7 @@ export class ObjectListComponent {
@Input() config: PaginationComponentOptions;
@Input() sortConfig: SortOptions;
+ @Input() hasBorder = false;
@Input() hideGear = false;
@Input() hidePagerWhenSinglePage = true;
private _objects: RemoteData>;
diff --git a/src/app/shared/object-list/wrapper-list-element/wrapper-list-element.component.ts b/src/app/shared/object-list/wrapper-list-element/wrapper-list-element.component.ts
index e95def7cf7..708c143282 100644
--- a/src/app/shared/object-list/wrapper-list-element/wrapper-list-element.component.ts
+++ b/src/app/shared/object-list/wrapper-list-element/wrapper-list-element.component.ts
@@ -1,4 +1,5 @@
import { Component, Injector, Input, OnInit } from '@angular/core';
+
import { GenericConstructor } from '../../../core/shared/generic-constructor';
import { rendersDSOType } from '../../object-collection/shared/dso-element-decorator'
import { ListableObject } from '../../object-collection/shared/listable-object.model';
@@ -11,13 +12,17 @@ import { ViewMode } from '../../../core/shared/view-mode.model';
})
export class WrapperListElementComponent implements OnInit {
@Input() object: ListableObject;
+ @Input() index: number;
objectInjector: Injector;
constructor(private injector: Injector) {}
ngOnInit(): void {
this.objectInjector = Injector.create({
- providers: [{ provide: 'objectElementProvider', useFactory: () => (this.object), deps:[] }],
+ providers: [
+ { provide: 'objectElementProvider', useFactory: () => (this.object), deps:[] },
+ { provide: 'indexElementProvider', useFactory: () => (this.index), deps:[] }
+ ],
parent: this.injector
});
}