mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
add breadcrumbs, adapt tests, fix issue on page loading
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
import { PublicationClaimBreadcrumbResolver } from './publication-claim-breadcrumb.resolver';
|
||||
|
||||
describe('PublicationClaimBreadcrumbResolver', () => {
|
||||
describe('resolve', () => {
|
||||
let resolver: PublicationClaimBreadcrumbResolver;
|
||||
let publicationClaimBreadcrumbService: any;
|
||||
const fullPath = '/test/publication-claim/openaire:6bee076d-4f2a-4555-a475-04a267769b2a';
|
||||
const expectedKey = '6bee076d-4f2a-4555-a475-04a267769b2a';
|
||||
const expectedId = 'openaire:6bee076d-4f2a-4555-a475-04a267769b2a';
|
||||
let route;
|
||||
|
||||
beforeEach(() => {
|
||||
route = {
|
||||
paramMap: {
|
||||
get: function (param) {
|
||||
return this[param];
|
||||
},
|
||||
targetId: expectedId,
|
||||
}
|
||||
};
|
||||
publicationClaimBreadcrumbService = {};
|
||||
resolver = new PublicationClaimBreadcrumbResolver(publicationClaimBreadcrumbService);
|
||||
});
|
||||
|
||||
it('should resolve the breadcrumb config', () => {
|
||||
const resolvedConfig = resolver.resolve(route as any, {url: fullPath } as any);
|
||||
const expectedConfig = { provider: publicationClaimBreadcrumbService, key: expectedKey };
|
||||
expect(resolvedConfig).toEqual(expectedConfig);
|
||||
});
|
||||
});
|
||||
});
|
@@ -0,0 +1,24 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||
import {BreadcrumbConfig} from '../../breadcrumbs/breadcrumb/breadcrumb-config.model';
|
||||
import { PublicationClaimBreadcrumbService } from './publication-claim-breadcrumb.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class PublicationClaimBreadcrumbResolver implements Resolve<BreadcrumbConfig<string>> {
|
||||
constructor(protected breadcrumbService: PublicationClaimBreadcrumbService) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Method that resolve Publication Claim item into a breadcrumb
|
||||
* The parameter are retrieved by the url since part of the Publication Claim 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 targetId = route.paramMap.get('targetId').split(':')[1];
|
||||
return { provider: this.breadcrumbService, key: targetId };
|
||||
}
|
||||
}
|
@@ -0,0 +1,46 @@
|
||||
import { TestBed, waitForAsync } from '@angular/core/testing';
|
||||
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
|
||||
import { getTestScheduler } from 'jasmine-marbles';
|
||||
import { PublicationClaimBreadcrumbService } from './publication-claim-breadcrumb.service';
|
||||
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
|
||||
|
||||
describe('PublicationClaimBreadcrumbService', () => {
|
||||
let service: PublicationClaimBreadcrumbService;
|
||||
let dsoNameService: any = {
|
||||
getName: (str) => str
|
||||
};
|
||||
let translateService: any = {
|
||||
instant: (str) => str,
|
||||
};
|
||||
|
||||
let dataService: any = {
|
||||
findById: (str) => createSuccessfulRemoteDataObject$(str),
|
||||
};
|
||||
|
||||
let exampleKey;
|
||||
|
||||
const ADMIN_PUBLICATION_CLAIMS_PATH = 'admin/notifications/publication-claim';
|
||||
const ADMIN_PUBLICATION_CLAIMS_BREADCRUMB_KEY = 'admin.notifications.publicationclaim.page.title';
|
||||
|
||||
function init() {
|
||||
exampleKey = '6bee076d-4f2a-4555-a475-04a267769b2a';
|
||||
}
|
||||
|
||||
beforeEach(waitForAsync(() => {
|
||||
init();
|
||||
TestBed.configureTestingModule({}).compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
service = new PublicationClaimBreadcrumbService(dataService,dsoNameService,translateService);
|
||||
});
|
||||
|
||||
describe('getBreadcrumbs', () => {
|
||||
it('should return a breadcrumb based on a string', () => {
|
||||
const breadcrumbs = service.getBreadcrumbs(exampleKey);
|
||||
getTestScheduler().expectObservable(breadcrumbs).toBe('(a|)', { a: [new Breadcrumb(ADMIN_PUBLICATION_CLAIMS_BREADCRUMB_KEY, ADMIN_PUBLICATION_CLAIMS_PATH),
|
||||
new Breadcrumb(exampleKey, undefined)]
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
@@ -0,0 +1,42 @@
|
||||
import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
|
||||
import { BreadcrumbsProviderService } from './breadcrumbsProviderService';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ItemDataService } from '../data/item-data.service';
|
||||
import { getFirstCompletedRemoteData } from '../shared/operators';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { DSONameService } from './dso-name.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Service to calculate Publication claims breadcrumbs
|
||||
*/
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class PublicationClaimBreadcrumbService implements BreadcrumbsProviderService<string> {
|
||||
private ADMIN_PUBLICATION_CLAIMS_PATH = 'admin/notifications/publication-claim';
|
||||
private ADMIN_PUBLICATION_CLAIMS_BREADCRUMB_KEY = 'admin.notifications.publicationclaim.page.title';
|
||||
|
||||
constructor(private dataService: ItemDataService,
|
||||
private dsoNameService: DSONameService,
|
||||
private tranlsateService: TranslateService) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Method to calculate the breadcrumbs
|
||||
* @param key The key used to resolve the breadcrumb
|
||||
*/
|
||||
getBreadcrumbs(key: string): Observable<Breadcrumb[]> {
|
||||
return this.dataService.findById(key).pipe(
|
||||
getFirstCompletedRemoteData(),
|
||||
map((item) => {
|
||||
return [new Breadcrumb(this.tranlsateService.instant(this.ADMIN_PUBLICATION_CLAIMS_BREADCRUMB_KEY), this.ADMIN_PUBLICATION_CLAIMS_PATH),
|
||||
new Breadcrumb(this.dsoNameService.getName(item.payload), undefined)];
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
import { HALLink } from '../../shared/hal-link.model';
|
||||
import { HALResource } from '../../shared/hal-resource.model';
|
||||
import { ResourceType } from '../../shared/resource-type';
|
||||
import { dataService, getLinkDefinition, link } from './build-decorators';
|
||||
import { dataService, getDataServiceFor, getLinkDefinition, link } from './build-decorators';
|
||||
|
||||
class TestHALResource implements HALResource {
|
||||
_links: {
|
||||
@@ -51,6 +51,12 @@ describe('build decorators', () => {
|
||||
it(`should throw error`, () => {
|
||||
expect(dataService(null)).toThrow();
|
||||
});
|
||||
|
||||
it(`should set properly data service for type`, () => {
|
||||
const target = new TestHALResource();
|
||||
dataService(testType)(target);
|
||||
expect(getDataServiceFor(testType)).toEqual(target);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -31,7 +31,7 @@
|
||||
</td>
|
||||
<td>
|
||||
<div class="btn-group edit-field">
|
||||
<button (click)="redirectToSuggestions(targetElement.id, targetElement.display)"
|
||||
<button (click)="redirectToSuggestions(targetElement.id)"
|
||||
class="btn btn-outline-primary btn-sm"
|
||||
title="{{('suggestion.button.review.title' | translate: { total: targetElement.total.toString() }) +
|
||||
targetElement.display}}">
|
||||
|
@@ -71,12 +71,7 @@ export class PublicationClaimComponent implements OnInit {
|
||||
ngOnInit(): void {
|
||||
this.targets$ = this.suggestionTargetsStateService.getSuggestionTargets();
|
||||
this.totalElements$ = this.suggestionTargetsStateService.getSuggestionTargetsTotals();
|
||||
}
|
||||
|
||||
/**
|
||||
* First Suggestion Targets loading after view initialization.
|
||||
*/
|
||||
ngAfterViewInit(): void {
|
||||
this.subs.push(
|
||||
this.suggestionTargetsStateService.isSuggestionTargetsLoaded().pipe(
|
||||
take(1)
|
||||
@@ -111,10 +106,8 @@ export class PublicationClaimComponent implements OnInit {
|
||||
*
|
||||
* @param {string} id
|
||||
* the id of suggestion target
|
||||
* @param {string} name
|
||||
* the name of suggestion target
|
||||
*/
|
||||
public redirectToSuggestions(id: string, name: string) {
|
||||
public redirectToSuggestions(id: string) {
|
||||
this.router.navigate([getSuggestionPageRoute(id)]);
|
||||
}
|
||||
|
||||
|
@@ -4,7 +4,7 @@ import { RouterModule } from '@angular/router';
|
||||
import { SuggestionsPageResolver } from './suggestions-page.resolver';
|
||||
import { SuggestionsPageComponent } from './suggestions-page.component';
|
||||
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
|
||||
import { ItemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.resolver';
|
||||
import { PublicationClaimBreadcrumbResolver } from '../core/breadcrumbs/publication-claim-breadcrumb.resolver';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
@@ -13,7 +13,7 @@ import { ItemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.reso
|
||||
path: ':targetId',
|
||||
resolve: {
|
||||
suggestionTargets: SuggestionsPageResolver,
|
||||
breadcrumb: ItemBreadcrumbResolver//I18nBreadcrumbResolver
|
||||
breadcrumb: PublicationClaimBreadcrumbResolver//I18nBreadcrumbResolver
|
||||
},
|
||||
data: {
|
||||
title: 'admin.notifications.publicationclaim.page.title',
|
||||
@@ -28,7 +28,7 @@ import { ItemBreadcrumbResolver } from '../core/breadcrumbs/item-breadcrumb.reso
|
||||
],
|
||||
providers: [
|
||||
SuggestionsPageResolver,
|
||||
ItemBreadcrumbResolver
|
||||
PublicationClaimBreadcrumbResolver
|
||||
]
|
||||
})
|
||||
export class SuggestionsPageRoutingModule {
|
||||
|
Reference in New Issue
Block a user