mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 10:04:11 +00:00
94391: Add support for com/col browse pages
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<ng-container *ngVar="(parent$ | async) as parent">
|
<ng-container *ngVar="(parent$ | async) as parent">
|
||||||
<ng-container *ngIf="parent?.payload as parentContext">
|
<ng-container *ngIf="parent?.payload as parentContext">
|
||||||
<header class="comcol-header border-bottom mb-4 pb-4">
|
<div class="d-flex flex-row border-bottom mb-4 pb-4">
|
||||||
|
|
||||||
|
<header class="comcol-header mr-auto">
|
||||||
<!-- Parent Name -->
|
<!-- Parent Name -->
|
||||||
<ds-comcol-page-header [name]="parentContext.name">
|
<ds-comcol-page-header [name]="parentContext.name">
|
||||||
</ds-comcol-page-header>
|
</ds-comcol-page-header>
|
||||||
@@ -17,6 +19,8 @@
|
|||||||
<ds-comcol-page-content [content]="parentContext.sidebarText" [hasInnerHtml]="true" [title]="'community.page.news'">
|
<ds-comcol-page-content [content]="parentContext.sidebarText" [hasInnerHtml]="true" [title]="'community.page.news'">
|
||||||
</ds-comcol-page-content>
|
</ds-comcol-page-content>
|
||||||
</header>
|
</header>
|
||||||
|
<ds-dso-edit-menu></ds-dso-edit-menu>
|
||||||
|
</div>
|
||||||
<!-- Browse-By Links -->
|
<!-- Browse-By Links -->
|
||||||
<ds-comcol-page-browse-by [id]="parentContext.id" [contentType]="parentContext.type"></ds-comcol-page-browse-by>
|
<ds-comcol-page-browse-by [id]="parentContext.id" [contentType]="parentContext.type"></ds-comcol-page-browse-by>
|
||||||
</ng-container></ng-container>
|
</ng-container></ng-container>
|
||||||
|
@@ -4,13 +4,17 @@ import { BrowseByGuard } from './browse-by-guard';
|
|||||||
import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolver';
|
import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolver';
|
||||||
import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver';
|
import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver';
|
||||||
import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component';
|
import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component';
|
||||||
|
import { DSOEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
RouterModule.forChild([
|
RouterModule.forChild([
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
resolve: { breadcrumb: BrowseByDSOBreadcrumbResolver },
|
resolve: {
|
||||||
|
breadcrumb: BrowseByDSOBreadcrumbResolver,
|
||||||
|
menu: DSOEditMenuResolver
|
||||||
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: ':id',
|
path: ':id',
|
||||||
|
@@ -126,7 +126,7 @@ describe('DSOEditMenuResolver', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('resolve', () => {
|
describe('resolve', () => {
|
||||||
it('should create all menus when a dso is found', (done) => {
|
it('should create all menus when a dso is found based on the route id param', (done) => {
|
||||||
spyOn(resolver, 'getDsoMenus').and.returnValue(
|
spyOn(resolver, 'getDsoMenus').and.returnValue(
|
||||||
[observableOf(dummySections1), observableOf(dummySections2)]
|
[observableOf(dummySections1), observableOf(dummySections2)]
|
||||||
);
|
);
|
||||||
@@ -140,6 +140,41 @@ describe('DSOEditMenuResolver', () => {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
expect(dSpaceObjectDataService.findById).toHaveBeenCalledWith('test-uuid', true, false);
|
||||||
|
expect(resolver.getDsoMenus).toHaveBeenCalled();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
it('should create all menus when a dso is found based on the route scope query param when no id param is present', (done) => {
|
||||||
|
spyOn(resolver, 'getDsoMenus').and.returnValue(
|
||||||
|
[observableOf(dummySections1), observableOf(dummySections2)]
|
||||||
|
);
|
||||||
|
const routeWithScope = {
|
||||||
|
data: {
|
||||||
|
menu: {
|
||||||
|
'statistics': [{
|
||||||
|
id: 'statistics-dummy-1',
|
||||||
|
active: false,
|
||||||
|
visible: true,
|
||||||
|
model: null
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
params: {},
|
||||||
|
queryParams: {scope: 'test-scope-uuid'},
|
||||||
|
};
|
||||||
|
|
||||||
|
resolver.resolve(routeWithScope as any, null).subscribe(resolved => {
|
||||||
|
expect(resolved).toEqual(
|
||||||
|
{
|
||||||
|
...route.data.menu,
|
||||||
|
[MenuID.DSO_EDIT]: [
|
||||||
|
...dummySections1.map((menu) => Object.assign(menu, {id: menu.id + '-test-scope-uuid'})),
|
||||||
|
...dummySections2.map((menu) => Object.assign(menu, {id: menu.id + '-test-scope-uuid'}))
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
expect(dSpaceObjectDataService.findById).toHaveBeenCalledWith('test-scope-uuid', true, false);
|
||||||
expect(resolver.getDsoMenus).toHaveBeenCalled();
|
expect(resolver.getDsoMenus).toHaveBeenCalled();
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
@@ -182,7 +217,7 @@ describe('DSOEditMenuResolver', () => {
|
|||||||
expect(menuList[0].visible).toEqual(true);
|
expect(menuList[0].visible).toEqual(true);
|
||||||
expect(menuList[0].model.type).toEqual(MenuItemType.LINK);
|
expect(menuList[0].model.type).toEqual(MenuItemType.LINK);
|
||||||
expect((menuList[0].model as LinkMenuItemModel).text).toEqual('item.page.edit');
|
expect((menuList[0].model as LinkMenuItemModel).text).toEqual('item.page.edit');
|
||||||
expect((menuList[0].model as LinkMenuItemModel).link).toEqual('test-url/edit/metadata');
|
expect((menuList[0].model as LinkMenuItemModel).link).toEqual('/items/test-uuid/edit/metadata');
|
||||||
expect(menuList[0].icon).toEqual('pencil-alt');
|
expect(menuList[0].icon).toEqual('pencil-alt');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@@ -14,8 +14,9 @@ import { map, switchMap } from 'rxjs/operators';
|
|||||||
import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
|
import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
|
||||||
import { URLCombiner } from '../../core/url-combiner/url-combiner';
|
import { URLCombiner } from '../../core/url-combiner/url-combiner';
|
||||||
import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-versioning-modal.service';
|
import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-versioning-modal.service';
|
||||||
import { hasValue } from '../empty.util';
|
import { hasNoValue, hasValue } from '../empty.util';
|
||||||
import { MenuSection } from '../menu/menu.reducer';
|
import { MenuSection } from '../menu/menu.reducer';
|
||||||
|
import { getDSORoute } from '../../app-routing-paths';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the menus for the dspace object pages
|
* Creates the menus for the dspace object pages
|
||||||
@@ -38,8 +39,11 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection
|
|||||||
* Initialise all dspace object related menus
|
* Initialise all dspace object related menus
|
||||||
*/
|
*/
|
||||||
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<{ [key: string]: MenuSection[] }> {
|
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<{ [key: string]: MenuSection[] }> {
|
||||||
const uuid = route.params.id;
|
let id = route.params.id;
|
||||||
return this.dSpaceObjectDataService.findById(uuid, true, false).pipe(
|
if (hasNoValue(id) && hasValue(route.queryParams.scope)) {
|
||||||
|
id = route.queryParams.scope;
|
||||||
|
}
|
||||||
|
return this.dSpaceObjectDataService.findById(id, true, false).pipe(
|
||||||
getFirstCompletedRemoteData(),
|
getFirstCompletedRemoteData(),
|
||||||
switchMap((dsoRD) => {
|
switchMap((dsoRD) => {
|
||||||
if (dsoRD.hasSucceeded) {
|
if (dsoRD.hasSucceeded) {
|
||||||
@@ -88,7 +92,7 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection
|
|||||||
model: {
|
model: {
|
||||||
type: MenuItemType.LINK,
|
type: MenuItemType.LINK,
|
||||||
text: this.getDsoType(dso) + '.page.edit',
|
text: this.getDsoType(dso) + '.page.edit',
|
||||||
link: new URLCombiner(state.url, 'edit', 'metadata').toString()
|
link: new URLCombiner(getDSORoute(dso), 'edit', 'metadata').toString()
|
||||||
} as LinkMenuItemModel,
|
} as LinkMenuItemModel,
|
||||||
icon: 'pencil-alt',
|
icon: 'pencil-alt',
|
||||||
index: 1
|
index: 1
|
||||||
|
Reference in New Issue
Block a user