mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-13 13:03:04 +00:00
Merged in CST-12904-breadcrumbs-qa (pull request #1107)
CST-12904 breadcrumbs qa Approved-by: Giuseppe Digilio
This commit is contained in:
@@ -11,7 +11,11 @@ import { AdminQualityAssuranceTopicsPageResolver } from './admin-quality-assuran
|
|||||||
import { AdminQualityAssuranceEventsPageResolver } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.resolver';
|
import { AdminQualityAssuranceEventsPageResolver } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.resolver';
|
||||||
import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component';
|
import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component';
|
||||||
import { AdminQualityAssuranceSourcePageResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service';
|
import { AdminQualityAssuranceSourcePageResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service';
|
||||||
import { SourceDataResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-data.resolver';
|
import {QualityAssuranceBreadcrumbResolver} from '../../core/breadcrumbs/quality-assurance-breadcrumb.resolver';
|
||||||
|
import {QualityAssuranceBreadcrumbService} from '../../core/breadcrumbs/quality-assurance-breadcrumb.service';
|
||||||
|
import {
|
||||||
|
SourceDataResolver
|
||||||
|
} from "./admin-quality-assurance-source-page-component/admin-quality-assurance-source-data.resolver";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -22,7 +26,7 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon
|
|||||||
component: AdminQualityAssuranceTopicsPageComponent,
|
component: AdminQualityAssuranceTopicsPageComponent,
|
||||||
pathMatch: 'full',
|
pathMatch: 'full',
|
||||||
resolve: {
|
resolve: {
|
||||||
breadcrumb: I18nBreadcrumbResolver,
|
breadcrumb: QualityAssuranceBreadcrumbResolver,
|
||||||
openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver
|
openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
@@ -53,7 +57,7 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon
|
|||||||
component: AdminQualityAssuranceEventsPageComponent,
|
component: AdminQualityAssuranceEventsPageComponent,
|
||||||
pathMatch: 'full',
|
pathMatch: 'full',
|
||||||
resolve: {
|
resolve: {
|
||||||
breadcrumb: I18nBreadcrumbResolver,
|
breadcrumb: QualityAssuranceBreadcrumbResolver,
|
||||||
openaireQualityAssuranceEventsParams: AdminQualityAssuranceEventsPageResolver
|
openaireQualityAssuranceEventsParams: AdminQualityAssuranceEventsPageResolver
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
@@ -70,7 +74,9 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon
|
|||||||
SourceDataResolver,
|
SourceDataResolver,
|
||||||
AdminQualityAssuranceTopicsPageResolver,
|
AdminQualityAssuranceTopicsPageResolver,
|
||||||
AdminQualityAssuranceEventsPageResolver,
|
AdminQualityAssuranceEventsPageResolver,
|
||||||
AdminQualityAssuranceSourcePageResolver
|
AdminQualityAssuranceSourcePageResolver,
|
||||||
|
QualityAssuranceBreadcrumbResolver,
|
||||||
|
QualityAssuranceBreadcrumbService
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
|
@@ -0,0 +1,31 @@
|
|||||||
|
import {QualityAssuranceBreadcrumbResolver} from './quality-assurance-breadcrumb.resolver';
|
||||||
|
|
||||||
|
describe('QualityAssuranceBreadcrumbResolver', () => {
|
||||||
|
describe('resolve', () => {
|
||||||
|
let resolver: QualityAssuranceBreadcrumbResolver;
|
||||||
|
let qualityAssuranceBreadcrumbService: any;
|
||||||
|
let route: any;
|
||||||
|
const fullPath = '/test/quality-assurance/';
|
||||||
|
const expectedKey = 'testSourceId:testTopicId';
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
route = {
|
||||||
|
paramMap: {
|
||||||
|
get: function (param) {
|
||||||
|
return this[param]
|
||||||
|
},
|
||||||
|
sourceId: 'testSourceId',
|
||||||
|
topicId: 'testTopicId'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
qualityAssuranceBreadcrumbService = {};
|
||||||
|
resolver = new QualityAssuranceBreadcrumbResolver(qualityAssuranceBreadcrumbService);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should resolve the breadcrumb config', () => {
|
||||||
|
const resolvedConfig = resolver.resolve(route as any, {url: fullPath + 'testSourceId'} as any);
|
||||||
|
const expectedConfig = { provider: qualityAssuranceBreadcrumbService, key: expectedKey, url: fullPath };
|
||||||
|
expect(resolvedConfig).toEqual(expectedConfig);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@@ -0,0 +1,32 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import {QualityAssuranceBreadcrumbService} from './quality-assurance-breadcrumb.service';
|
||||||
|
import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router';
|
||||||
|
import {BreadcrumbConfig} from '../../breadcrumbs/breadcrumb/breadcrumb-config.model';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class QualityAssuranceBreadcrumbResolver implements Resolve<BreadcrumbConfig<string>> {
|
||||||
|
constructor(protected breadcrumbService: QualityAssuranceBreadcrumbService) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method that resolve QA item into a breadcrumb
|
||||||
|
* The parameter are retrieved by the url since part of the QA route config
|
||||||
|
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
|
||||||
|
* @param {RouterStateSnapshot} state The current RouterStateSnapshot
|
||||||
|
* @returns BreadcrumbConfig object
|
||||||
|
*/
|
||||||
|
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): BreadcrumbConfig<string> {
|
||||||
|
const sourceId = route.paramMap.get('sourceId');
|
||||||
|
const topicId = route.paramMap.get('topicId');
|
||||||
|
let key = sourceId;
|
||||||
|
|
||||||
|
if (topicId) {
|
||||||
|
key += `:${topicId}`;
|
||||||
|
}
|
||||||
|
const fullPath = state.url;
|
||||||
|
const url = fullPath.substr(0, fullPath.indexOf(sourceId));
|
||||||
|
|
||||||
|
return { provider: this.breadcrumbService, key, url };
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,40 @@
|
|||||||
|
import { TestBed, waitForAsync } from '@angular/core/testing';
|
||||||
|
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
|
||||||
|
import { getTestScheduler } from 'jasmine-marbles';
|
||||||
|
import {QualityAssuranceBreadcrumbService} from './quality-assurance-breadcrumb.service';
|
||||||
|
|
||||||
|
describe('QualityAssuranceBreadcrumbService', () => {
|
||||||
|
let service: QualityAssuranceBreadcrumbService;
|
||||||
|
let dataService: any;
|
||||||
|
let translateService: any = {
|
||||||
|
instant: (str) => str,
|
||||||
|
};
|
||||||
|
|
||||||
|
let exampleString;
|
||||||
|
let exampleURL;
|
||||||
|
let exampleQaKey;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
exampleString = 'sourceId';
|
||||||
|
exampleURL = '/test/quality-assurance/';
|
||||||
|
exampleQaKey = 'admin.quality-assurance.breadcrumbs';
|
||||||
|
}
|
||||||
|
|
||||||
|
beforeEach(waitForAsync(() => {
|
||||||
|
init();
|
||||||
|
TestBed.configureTestingModule({}).compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
service = new QualityAssuranceBreadcrumbService(dataService,translateService);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getBreadcrumbs', () => {
|
||||||
|
it('should return a breadcrumb based on a string', () => {
|
||||||
|
const breadcrumbs = service.getBreadcrumbs(exampleString, exampleURL);
|
||||||
|
getTestScheduler().expectObservable(breadcrumbs).toBe('(a|)', { a: [new Breadcrumb(exampleQaKey, exampleURL),
|
||||||
|
new Breadcrumb(exampleString, exampleURL + exampleString)]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@@ -0,0 +1,53 @@
|
|||||||
|
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
|
||||||
|
import { BreadcrumbsProviderService } from './breadcrumbsProviderService';
|
||||||
|
import { Observable, of as observableOf } from 'rxjs';
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import {map} from 'rxjs/operators';
|
||||||
|
import {getFirstCompletedRemoteData} from '../shared/operators';
|
||||||
|
import {TranslateService} from '@ngx-translate/core';
|
||||||
|
import {QualityAssuranceTopicDataService} from "../notifications/qa/topics/quality-assurance-topic-data.service";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service to calculate QA breadcrumbs for a single part of the route
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderService<string> {
|
||||||
|
|
||||||
|
private QUALITY_ASSURANCE_BREADCRUMB_KEY = 'admin.quality-assurance.breadcrumbs';
|
||||||
|
constructor(
|
||||||
|
protected qualityAssuranceService: QualityAssuranceTopicDataService,
|
||||||
|
private translationService: TranslateService,
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to calculate the breadcrumbs
|
||||||
|
* @param key The key used to resolve the breadcrumb
|
||||||
|
* @param url The url to use as a link for this breadcrumb
|
||||||
|
*/
|
||||||
|
getBreadcrumbs(key: string, url: string): Observable<Breadcrumb[]> {
|
||||||
|
const sourceId = key.split(':')[0];
|
||||||
|
const topicId = key.split(':')[1];
|
||||||
|
|
||||||
|
if (topicId) {
|
||||||
|
return this.qualityAssuranceService.getTopic(topicId).pipe(
|
||||||
|
getFirstCompletedRemoteData(),
|
||||||
|
map((topic) => {
|
||||||
|
return [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
|
||||||
|
new Breadcrumb(sourceId, `${url}${sourceId}`),
|
||||||
|
new Breadcrumb(topicId, undefined)];
|
||||||
|
})
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return observableOf([new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
|
||||||
|
new Breadcrumb(sourceId, `${url}${sourceId}`)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -4,10 +4,6 @@
|
|||||||
<h2 class="border-bottom pb-2">
|
<h2 class="border-bottom pb-2">
|
||||||
<div class="d-flex justify-content-between">
|
<div class="d-flex justify-content-between">
|
||||||
{{'notifications.events.title'| translate}}
|
{{'notifications.events.title'| translate}}
|
||||||
<a class="btn btn-outline-secondary" [routerLink]="['/admin/notifications/quality-assurance']">
|
|
||||||
<i class="fas fa-angle-double-left"></i>
|
|
||||||
{{'quality-assurance.events.back' | translate}}
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</h2>
|
</h2>
|
||||||
<ds-alert [type]="'alert-info'" [content]="'quality-assurance.events.description'"></ds-alert>
|
<ds-alert [type]="'alert-info'" [content]="'quality-assurance.events.description'"></ds-alert>
|
||||||
|
Reference in New Issue
Block a user