mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-08 02:24:11 +00:00
69940: Process detail page intermediate commit
This commit is contained in:

committed by
Art Lowel

parent
eacc13a95c
commit
07a5dceed1
@@ -1534,6 +1534,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
"process.page.detail.title" : "Process: {{ id }} - {{ name }}",
|
||||||
|
|
||||||
"process.page.overview.table.finish" : "Finish time",
|
"process.page.overview.table.finish" : "Finish time",
|
||||||
|
|
||||||
"process.page.overview.table.id" : "Process ID",
|
"process.page.overview.table.id" : "Process ID",
|
||||||
|
@@ -10,8 +10,11 @@ import { NotificationsService } from '../../../shared/notifications/notification
|
|||||||
import { HttpClient } from '@angular/common/http';
|
import { HttpClient } from '@angular/common/http';
|
||||||
import { DefaultChangeAnalyzer } from '../default-change-analyzer.service';
|
import { DefaultChangeAnalyzer } from '../default-change-analyzer.service';
|
||||||
import { Process } from '../../../process-page/processes/process.model';
|
import { Process } from '../../../process-page/processes/process.model';
|
||||||
|
import { dataService } from '../../cache/builders/build-decorators';
|
||||||
|
import { PROCESS } from '../../../process-page/processes/process.resource-type';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
@dataService(PROCESS)
|
||||||
export class ProcessDataService extends DataService<Process> {
|
export class ProcessDataService extends DataService<Process> {
|
||||||
protected linkPath = 'processes';
|
protected linkPath = 'processes';
|
||||||
|
|
||||||
|
@@ -16,8 +16,11 @@ import { MultipartPostRequest, RestRequest } from '../request.models';
|
|||||||
import { RequestService } from '../request.service';
|
import { RequestService } from '../request.service';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { RequestEntry } from '../request.reducer';
|
import { RequestEntry } from '../request.reducer';
|
||||||
|
import { dataService } from '../../cache/builders/build-decorators';
|
||||||
|
import { SCRIPT } from '../../../process-page/scripts/script.resource-type';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
|
@dataService(SCRIPT)
|
||||||
export class ScriptDataService extends DataService<Script> {
|
export class ScriptDataService extends DataService<Script> {
|
||||||
protected linkPath = 'scripts';
|
protected linkPath = 'scripts';
|
||||||
|
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
<h4 class="mt-3">{{title | translate}}</h4>
|
||||||
|
<ng-content></ng-content>
|
@@ -0,0 +1,9 @@
|
|||||||
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-process-detail-field',
|
||||||
|
templateUrl: './process-detail-field.component.html',
|
||||||
|
})
|
||||||
|
export class ProcessDetailFieldComponent {
|
||||||
|
@Input() title: string;
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
<div class="container" *ngVar="(processRD$ | async)?.payload as process">
|
||||||
|
<h2>{{'process.page.detail.title' | translate:{ id: process?.id, name: process?.scriptName } }}</h2>
|
||||||
|
|
||||||
|
<ds-process-detail-field [title]="'process.page.detail.script'">
|
||||||
|
<div>{{ process?.scriptName }}</div>
|
||||||
|
</ds-process-detail-field>
|
||||||
|
</div>
|
28
src/app/process-page/detail/process-detail.component.ts
Normal file
28
src/app/process-page/detail/process-detail.component.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { Observable } from 'rxjs/internal/Observable';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
import { Process } from '../processes/process.model';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
import { redirectToPageNotFoundOn404 } from '../../core/shared/operators';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ds-process-detail',
|
||||||
|
templateUrl: './process-detail.component.html',
|
||||||
|
})
|
||||||
|
export class ProcessDetailComponent implements OnInit {
|
||||||
|
|
||||||
|
processRD$: Observable<RemoteData<Process>>;
|
||||||
|
|
||||||
|
constructor(protected route: ActivatedRoute,
|
||||||
|
protected router: Router) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.processRD$ = this.route.data.pipe(
|
||||||
|
map((data) => data.process as RemoteData<Process>),
|
||||||
|
redirectToPageNotFoundOn404(this.router)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -2,6 +2,8 @@ import { RouterModule } from '@angular/router';
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { NewProcessComponent } from './new/new-process.component';
|
import { NewProcessComponent } from './new/new-process.component';
|
||||||
import { ProcessOverviewComponent } from './overview/process-overview.component';
|
import { ProcessOverviewComponent } from './overview/process-overview.component';
|
||||||
|
import { ProcessPageResolver } from './process-page.resolver';
|
||||||
|
import { ProcessDetailComponent } from './detail/process-detail.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -15,7 +17,17 @@ import { ProcessOverviewComponent } from './overview/process-overview.component'
|
|||||||
component: NewProcessComponent,
|
component: NewProcessComponent,
|
||||||
data: { title: 'process.new.title' }
|
data: { title: 'process.new.title' }
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: ':id',
|
||||||
|
component: ProcessDetailComponent,
|
||||||
|
resolve: {
|
||||||
|
process: ProcessPageResolver
|
||||||
|
}
|
||||||
|
}
|
||||||
])
|
])
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
ProcessPageResolver
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class ProcessPageRoutingModule {
|
export class ProcessPageRoutingModule {
|
||||||
|
@@ -12,6 +12,8 @@ import { FileValueInputComponent } from './new/process-parameters/parameter-valu
|
|||||||
import { BooleanValueInputComponent } from './new/process-parameters/parameter-value-input/boolean-value-input/boolean-value-input.component';
|
import { BooleanValueInputComponent } from './new/process-parameters/parameter-value-input/boolean-value-input/boolean-value-input.component';
|
||||||
import { DateValueInputComponent } from './new/process-parameters/parameter-value-input/date-value-input/date-value-input.component';
|
import { DateValueInputComponent } from './new/process-parameters/parameter-value-input/date-value-input/date-value-input.component';
|
||||||
import { ProcessOverviewComponent } from './overview/process-overview.component';
|
import { ProcessOverviewComponent } from './overview/process-overview.component';
|
||||||
|
import { ProcessDetailComponent } from './detail/process-detail.component';
|
||||||
|
import { ProcessDetailFieldComponent } from './detail/process-detail-field/process-detail-field.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -29,7 +31,9 @@ import { ProcessOverviewComponent } from './overview/process-overview.component'
|
|||||||
FileValueInputComponent,
|
FileValueInputComponent,
|
||||||
BooleanValueInputComponent,
|
BooleanValueInputComponent,
|
||||||
DateValueInputComponent,
|
DateValueInputComponent,
|
||||||
ProcessOverviewComponent
|
ProcessOverviewComponent,
|
||||||
|
ProcessDetailComponent,
|
||||||
|
ProcessDetailFieldComponent
|
||||||
],
|
],
|
||||||
entryComponents: []
|
entryComponents: []
|
||||||
})
|
})
|
||||||
|
31
src/app/process-page/process-page.resolver.ts
Normal file
31
src/app/process-page/process-page.resolver.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||||
|
import { RemoteData } from '../core/data/remote-data';
|
||||||
|
import { Observable } from 'rxjs/internal/Observable';
|
||||||
|
import { find } from 'rxjs/operators';
|
||||||
|
import { hasValue } from '../shared/empty.util';
|
||||||
|
import { ProcessDataService } from './processes/process-data.service';
|
||||||
|
import { Process } from './processes/process.model';
|
||||||
|
import { followLink } from '../shared/utils/follow-link-config.model';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents a resolver that requests a specific process before the route is activated
|
||||||
|
*/
|
||||||
|
@Injectable()
|
||||||
|
export class ProcessPageResolver implements Resolve<RemoteData<Process>> {
|
||||||
|
constructor(private processService: ProcessDataService) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method for resolving a process based on the parameters in the current route
|
||||||
|
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
|
||||||
|
* @param {RouterStateSnapshot} state The current RouterStateSnapshot
|
||||||
|
* @returns Observable<<RemoteData<Process>> Emits the found process based on the parameters in the current route,
|
||||||
|
* or an error if something went wrong
|
||||||
|
*/
|
||||||
|
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<RemoteData<Process>> {
|
||||||
|
return this.processService.findById(route.params.id, followLink('script')).pipe(
|
||||||
|
find((RD) => hasValue(RD.error) || RD.hasSucceeded),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@@ -6,7 +6,13 @@ import { autoserialize, deserialize } from 'cerialize';
|
|||||||
import { PROCESS } from './process.resource-type';
|
import { PROCESS } from './process.resource-type';
|
||||||
import { excludeFromEquals } from '../../core/utilities/equals.decorators';
|
import { excludeFromEquals } from '../../core/utilities/equals.decorators';
|
||||||
import { ResourceType } from '../../core/shared/resource-type';
|
import { ResourceType } from '../../core/shared/resource-type';
|
||||||
import { typedObject } from '../../core/cache/builders/build-decorators';
|
import { link, typedObject } from '../../core/cache/builders/build-decorators';
|
||||||
|
import { COLLECTION } from '../../core/shared/collection.resource-type';
|
||||||
|
import { Observable } from 'rxjs/internal/Observable';
|
||||||
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
|
import { Collection } from '../../core/shared/collection.model';
|
||||||
|
import { SCRIPT } from '../scripts/script.resource-type';
|
||||||
|
import { Script } from '../scripts/script.model';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object representing a process
|
* Object representing a process
|
||||||
@@ -74,4 +80,11 @@ export class Process implements CacheableObject {
|
|||||||
output: HALLink,
|
output: HALLink,
|
||||||
files: HALLink
|
files: HALLink
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Script that created this Process
|
||||||
|
* Will be undefined unless the owningCollection {@link HALLink} has been resolved.
|
||||||
|
*/
|
||||||
|
@link(SCRIPT)
|
||||||
|
script?: Observable<RemoteData<Script>>;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user