forked from hazza/dspace-angular
111638: Highlight newly created processes
This commit is contained in:
@@ -7,8 +7,7 @@ import { ControlContainer, NgForm } from '@angular/forms';
|
|||||||
import { ScriptParameter } from '../scripts/script-parameter.model';
|
import { ScriptParameter } from '../scripts/script-parameter.model';
|
||||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { RequestService } from '../../core/data/request.service';
|
import { Router, NavigationExtras } from '@angular/router';
|
||||||
import { Router } from '@angular/router';
|
|
||||||
import { getFirstCompletedRemoteData } from '../../core/shared/operators';
|
import { getFirstCompletedRemoteData } from '../../core/shared/operators';
|
||||||
import { RemoteData } from '../../core/data/remote-data';
|
import { RemoteData } from '../../core/data/remote-data';
|
||||||
import { getProcessListRoute } from '../process-page-routing.paths';
|
import { getProcessListRoute } from '../process-page-routing.paths';
|
||||||
@@ -57,7 +56,6 @@ export class ProcessFormComponent implements OnInit {
|
|||||||
private scriptService: ScriptDataService,
|
private scriptService: ScriptDataService,
|
||||||
private notificationsService: NotificationsService,
|
private notificationsService: NotificationsService,
|
||||||
private translationService: TranslateService,
|
private translationService: TranslateService,
|
||||||
private requestService: RequestService,
|
|
||||||
private router: Router) {
|
private router: Router) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +89,7 @@ export class ProcessFormComponent implements OnInit {
|
|||||||
const title = this.translationService.get('process.new.notification.success.title');
|
const title = this.translationService.get('process.new.notification.success.title');
|
||||||
const content = this.translationService.get('process.new.notification.success.content');
|
const content = this.translationService.get('process.new.notification.success.content');
|
||||||
this.notificationsService.success(title, content);
|
this.notificationsService.success(title, content);
|
||||||
this.sendBack();
|
this.sendBack(rd.payload);
|
||||||
} else {
|
} else {
|
||||||
const title = this.translationService.get('process.new.notification.error.title');
|
const title = this.translationService.get('process.new.notification.error.title');
|
||||||
const content = this.translationService.get('process.new.notification.error.content');
|
const content = this.translationService.get('process.new.notification.error.content');
|
||||||
@@ -143,11 +141,17 @@ export class ProcessFormComponent implements OnInit {
|
|||||||
return this.missingParameters.length > 0;
|
return this.missingParameters.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private sendBack() {
|
/**
|
||||||
this.requestService.removeByHrefSubstring('/processes');
|
* Redirect the user to the processes overview page with the new process' ID,
|
||||||
/* should subscribe on the previous method to know the action is finished and then navigate,
|
* so it can be highlighted in the overview table.
|
||||||
will fix this when the removeByHrefSubstring changes are merged */
|
* @param newProcess The newly created process
|
||||||
this.router.navigateByUrl(getProcessListRoute());
|
* @private
|
||||||
|
*/
|
||||||
|
private sendBack(newProcess: Process) {
|
||||||
|
const extras: NavigationExtras = {
|
||||||
|
queryParams: { new_process_id: newProcess.processId },
|
||||||
|
};
|
||||||
|
void this.router.navigate([getProcessListRoute()], extras);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr *ngFor="let tableEntry of processesRD?.payload?.page"
|
<tr *ngFor="let tableEntry of processesRD?.payload?.page"
|
||||||
[class.table-danger]="processBulkDeleteService.isToBeDeleted(tableEntry.process.processId)">
|
[class]="getRowClass(tableEntry.process)">
|
||||||
<td><a [routerLink]="['/processes/', tableEntry.process.processId]">{{tableEntry.process.processId}}</a></td>
|
<td><a [routerLink]="['/processes/', tableEntry.process.processId]">{{tableEntry.process.processId}}</a></td>
|
||||||
<td><a [routerLink]="['/processes/', tableEntry.process.processId]">{{tableEntry.process.scriptName}}</a></td>
|
<td><a [routerLink]="['/processes/', tableEntry.process.processId]">{{tableEntry.process.scriptName}}</a></td>
|
||||||
<td>{{tableEntry.user}}</td>
|
<td>{{tableEntry.user}}</td>
|
||||||
|
@@ -19,6 +19,8 @@ import { NO_ERRORS_SCHEMA } from '@angular/core';
|
|||||||
import { By } from '@angular/platform-browser';
|
import { By } from '@angular/platform-browser';
|
||||||
import { AuthService } from '../../../core/auth/auth.service';
|
import { AuthService } from '../../../core/auth/auth.service';
|
||||||
import { AuthServiceMock } from '../../../shared/mocks/auth.service.mock';
|
import { AuthServiceMock } from '../../../shared/mocks/auth.service.mock';
|
||||||
|
import { RouteService } from '../../../core/services/route.service';
|
||||||
|
import { routeServiceStub } from '../../../shared/testing/route-service.stub';
|
||||||
|
|
||||||
|
|
||||||
describe('ProcessOverviewTableComponent', () => {
|
describe('ProcessOverviewTableComponent', () => {
|
||||||
@@ -31,6 +33,7 @@ describe('ProcessOverviewTableComponent', () => {
|
|||||||
let processBulkDeleteService: ProcessBulkDeleteService;
|
let processBulkDeleteService: ProcessBulkDeleteService;
|
||||||
let modalService: NgbModal;
|
let modalService: NgbModal;
|
||||||
let authService; // : AuthService; Not typed as the mock does not fully implement AuthService
|
let authService; // : AuthService; Not typed as the mock does not fully implement AuthService
|
||||||
|
let routeService: RouteService;
|
||||||
|
|
||||||
let processes: Process[];
|
let processes: Process[];
|
||||||
let ePerson: EPerson;
|
let ePerson: EPerson;
|
||||||
@@ -104,6 +107,7 @@ describe('ProcessOverviewTableComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
authService = new AuthServiceMock();
|
authService = new AuthServiceMock();
|
||||||
|
routeService = routeServiceStub;
|
||||||
}
|
}
|
||||||
|
|
||||||
beforeEach(waitForAsync(() => {
|
beforeEach(waitForAsync(() => {
|
||||||
@@ -119,6 +123,7 @@ describe('ProcessOverviewTableComponent', () => {
|
|||||||
{ provide: ProcessBulkDeleteService, useValue: processBulkDeleteService },
|
{ provide: ProcessBulkDeleteService, useValue: processBulkDeleteService },
|
||||||
{ provide: NgbModal, useValue: modalService },
|
{ provide: NgbModal, useValue: modalService },
|
||||||
{ provide: AuthService, useValue: authService },
|
{ provide: AuthService, useValue: authService },
|
||||||
|
{ provide: RouteService, useValue: routeService },
|
||||||
],
|
],
|
||||||
schemas: [NO_ERRORS_SCHEMA]
|
schemas: [NO_ERRORS_SCHEMA]
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
|
@@ -18,6 +18,9 @@ import { redirectOn4xx } from '../../../core/shared/authorized.operators';
|
|||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { AuthService } from '../../../core/auth/auth.service';
|
import { AuthService } from '../../../core/auth/auth.service';
|
||||||
import { isPlatformBrowser } from '@angular/common';
|
import { isPlatformBrowser } from '@angular/common';
|
||||||
|
import { RouteService } from '../../../core/services/route.service';
|
||||||
|
|
||||||
|
const NEW_PROCESS_PARAM = 'new_process_id';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An interface to store a process and extra information related to the process
|
* An interface to store a process and extra information related to the process
|
||||||
@@ -84,11 +87,17 @@ export class ProcessOverviewTableComponent implements OnInit {
|
|||||||
*/
|
*/
|
||||||
isCollapsed = false;
|
isCollapsed = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The id of the process to highlight
|
||||||
|
*/
|
||||||
|
newProcessId: string;
|
||||||
|
|
||||||
constructor(protected processOverviewService: ProcessOverviewService,
|
constructor(protected processOverviewService: ProcessOverviewService,
|
||||||
protected processBulkDeleteService: ProcessBulkDeleteService,
|
protected processBulkDeleteService: ProcessBulkDeleteService,
|
||||||
protected ePersonDataService: EPersonDataService,
|
protected ePersonDataService: EPersonDataService,
|
||||||
protected dsoNameService: DSONameService,
|
protected dsoNameService: DSONameService,
|
||||||
protected paginationService: PaginationService,
|
protected paginationService: PaginationService,
|
||||||
|
protected routeService: RouteService,
|
||||||
protected router: Router,
|
protected router: Router,
|
||||||
protected auth: AuthService,
|
protected auth: AuthService,
|
||||||
@Inject(PLATFORM_ID) protected platformId: object,
|
@Inject(PLATFORM_ID) protected platformId: object,
|
||||||
@@ -101,6 +110,10 @@ export class ProcessOverviewTableComponent implements OnInit {
|
|||||||
this.useAutoRefreshingSearchBy = false;
|
this.useAutoRefreshingSearchBy = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.routeService.getQueryParameterValue(NEW_PROCESS_PARAM).pipe(take(1)).subscribe((id) => {
|
||||||
|
this.newProcessId = id;
|
||||||
|
});
|
||||||
|
|
||||||
// Creates an ID from the first 2 characters of the process status.
|
// Creates an ID from the first 2 characters of the process status.
|
||||||
// Should two process status values ever start with the same substring,
|
// Should two process status values ever start with the same substring,
|
||||||
// increase the number of characters until the ids are distinct.
|
// increase the number of characters until the ids are distinct.
|
||||||
@@ -193,4 +206,18 @@ export class ProcessOverviewTableComponent implements OnInit {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the css class for a row depending on the state of the process
|
||||||
|
* @param process
|
||||||
|
*/
|
||||||
|
getRowClass(process: Process): string {
|
||||||
|
if (this.processBulkDeleteService.isToBeDeleted(process.processId)) {
|
||||||
|
return 'table-danger';
|
||||||
|
} else if (this.newProcessId === process.processId) {
|
||||||
|
return 'table-info';
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user