74199: Edit current DSO button

This commit is contained in:
Kristof De Langhe
2020-10-26 17:49:56 +01:00
parent 892e7bdaa1
commit 06769493e1
19 changed files with 214 additions and 80 deletions

View File

@@ -3,37 +3,41 @@
*ngVar="(collectionRD$ | async) as collectionRD"> *ngVar="(collectionRD$ | async) as collectionRD">
<div *ngIf="collectionRD?.hasSucceeded" @fadeInOut> <div *ngIf="collectionRD?.hasSucceeded" @fadeInOut>
<div *ngIf="collectionRD?.payload as collection"> <div *ngIf="collectionRD?.payload as collection">
<ds-view-tracker [object]="collection"></ds-view-tracker> <ds-view-tracker [object]="collection"></ds-view-tracker>
<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">
<!-- Collection Name --> <!-- Collection Name -->
<ds-comcol-page-header <ds-comcol-page-header
[name]="collection.name"> [name]="collection.name">
</ds-comcol-page-header> </ds-comcol-page-header>
<!-- Collection logo --> <!-- Collection logo -->
<ds-comcol-page-logo *ngIf="logoRD$" <ds-comcol-page-logo *ngIf="logoRD$"
[logo]="(logoRD$ | async)?.payload" [logo]="(logoRD$ | async)?.payload"
[alternateText]="'Collection Logo'" [alternateText]="'Collection Logo'"
[alternateText]="'Collection Logo'"> [alternateText]="'Collection Logo'">
</ds-comcol-page-logo> </ds-comcol-page-logo>
<!-- Handle --> <!-- Handle -->
<ds-comcol-page-handle <ds-comcol-page-handle
[content]="collection.handle" [content]="collection.handle"
[title]="'collection.page.handle'" > [title]="'collection.page.handle'" >
</ds-comcol-page-handle> </ds-comcol-page-handle>
<!-- Introductory text --> <!-- Introductory text -->
<ds-comcol-page-content <ds-comcol-page-content
[content]="collection.introductoryText" [content]="collection.introductoryText"
[hasInnerHtml]="true"> [hasInnerHtml]="true">
</ds-comcol-page-content> </ds-comcol-page-content>
<!-- News --> <!-- News -->
<ds-comcol-page-content <ds-comcol-page-content
[content]="collection.sidebarText" [content]="collection.sidebarText"
[hasInnerHtml]="true" [hasInnerHtml]="true"
[title]="'collection.page.news'"> [title]="'collection.page.news'">
</ds-comcol-page-content> </ds-comcol-page-content>
</header>
</header> <div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'collections'" [dso]="collection" [tooltipMsg]="'collection.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<section class="comcol-page-browse-section"> <section class="comcol-page-browse-section">
<!-- Browse-By Links --> <!-- Browse-By Links -->
<ds-comcol-page-browse-by <ds-comcol-page-browse-by

View File

@@ -2,24 +2,28 @@
<div class="community-page" *ngIf="communityRD?.hasSucceeded" @fadeInOut> <div class="community-page" *ngIf="communityRD?.hasSucceeded" @fadeInOut>
<div *ngIf="communityRD?.payload; let communityPayload"> <div *ngIf="communityRD?.payload; let communityPayload">
<ds-view-tracker [object]="communityPayload"></ds-view-tracker> <ds-view-tracker [object]="communityPayload"></ds-view-tracker>
<header class="comcol-header border-bottom mb-4 pb-4"> <div class="d-flex flex-row border-bottom mb-4 pb-4">
<!-- Community name --> <header class="comcol-header mr-auto">
<ds-comcol-page-header [name]="communityPayload.name"></ds-comcol-page-header> <!-- Community name -->
<!-- Community logo --> <ds-comcol-page-header [name]="communityPayload.name"></ds-comcol-page-header>
<ds-comcol-page-logo *ngIf="logoRD$" [logo]="(logoRD$ | async)?.payload" [alternateText]="'Community Logo'"> <!-- Community logo -->
</ds-comcol-page-logo> <ds-comcol-page-logo *ngIf="logoRD$" [logo]="(logoRD$ | async)?.payload" [alternateText]="'Community Logo'">
<!-- Handle --> </ds-comcol-page-logo>
<ds-comcol-page-handle [content]="communityPayload.handle" [title]="'community.page.handle'"> <!-- Handle -->
</ds-comcol-page-handle> <ds-comcol-page-handle [content]="communityPayload.handle" [title]="'community.page.handle'">
<!-- Introductory text --> </ds-comcol-page-handle>
<ds-comcol-page-content [content]="communityPayload.introductoryText" [hasInnerHtml]="true"> <!-- Introductory text -->
</ds-comcol-page-content> <ds-comcol-page-content [content]="communityPayload.introductoryText" [hasInnerHtml]="true">
<!-- News --> </ds-comcol-page-content>
<ds-comcol-page-content [content]="communityPayload.sidebarText" [hasInnerHtml]="true" <!-- News -->
[title]="'community.page.news'"> <ds-comcol-page-content [content]="communityPayload.sidebarText" [hasInnerHtml]="true"
</ds-comcol-page-content> [title]="'community.page.news'">
</ds-comcol-page-content>
</header> </header>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'communities'" [dso]="communityPayload" [tooltipMsg]="'community.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<section class="comcol-page-browse-section"> <section class="comcol-page-browse-section">
<!-- Browse-By Links --> <!-- Browse-By Links -->
<ds-comcol-page-browse-by [id]="communityPayload.id" [contentType]="communityPayload.type"> <ds-comcol-page-browse-by [id]="communityPayload.id" [contentType]="communityPayload.type">

View File

@@ -56,7 +56,7 @@ export class ItemStatusComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.itemRD$ = this.route.parent.data.pipe(map((data) => data.item)); this.itemRD$ = this.route.parent.data.pipe(map((data) => data.dso));
this.itemRD$.pipe( this.itemRD$.pipe(
first(), first(),
map((data: RemoteData<Item>) => data.payload) map((data: RemoteData<Item>) => data.payload)

View File

@@ -30,6 +30,6 @@ export class ItemVersionHistoryComponent {
} }
ngOnInit(): void { ngOnInit(): void {
this.itemRD$ = this.route.parent.data.pipe(map((data) => data.item)).pipe(getSucceededRemoteData()) as Observable<RemoteData<Item>>; this.itemRD$ = this.route.parent.data.pipe(map((data) => data.dso)).pipe(getSucceededRemoteData()) as Observable<RemoteData<Item>>;
} }
} }

View File

@@ -3,7 +3,12 @@
<div *ngIf="itemRD?.payload as item"> <div *ngIf="itemRD?.payload as item">
<ds-item-versions-notice [item]="item"></ds-item-versions-notice> <ds-item-versions-notice [item]="item"></ds-item-versions-notice>
<ds-view-tracker [object]="item"></ds-view-tracker> <ds-view-tracker [object]="item"></ds-view-tracker>
<ds-item-page-title-field [item]="item"></ds-item-page-title-field> <div class="d-flex flex-row">
<ds-item-page-title-field class="mr-auto" [item]="item"></ds-item-page-title-field>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="item" [tooltipMsg]="'item.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="simple-view-link my-3"> <div class="simple-view-link my-3">
<a class="btn btn-outline-primary" [routerLink]="['/items/' + item.id]"> <a class="btn btn-outline-primary" [routerLink]="['/items/' + item.id]">
{{"item.page.link.simple" | translate}} {{"item.page.link.simple" | translate}}

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'publication.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'publication.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'publication.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -5,6 +5,7 @@ export enum FeatureID {
LoginOnBehalfOf = 'loginOnBehalfOf', LoginOnBehalfOf = 'loginOnBehalfOf',
AdministratorOf = 'administratorOf', AdministratorOf = 'administratorOf',
CanDelete = 'canDelete', CanDelete = 'canDelete',
CanEditMetadata = 'canEditMetadata',
WithdrawItem = 'withdrawItem', WithdrawItem = 'withdrawItem',
ReinstateItem = 'reinstateItem', ReinstateItem = 'reinstateItem',
EPersonRegistration = 'epersonRegistration', EPersonRegistration = 'epersonRegistration',

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'journalissue.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'journalissue.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'journalissue.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'journalvolume.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'journalvolume.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'journalvolume.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'journal.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'journal.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'journal.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'orgunit.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['organization.legalName'])"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'orgunit.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['organization.legalName'])"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'orgunit.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'person.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="[object?.firstMetadata('person.familyName'), object?.firstMetadata('person.givenName')]" [separator]="', '"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'person.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="[object?.firstMetadata('person.familyName'), object?.firstMetadata('person.givenName')]" [separator]="', '"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'person.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -1,6 +1,11 @@
<h2 class="item-page-title-field"> <div class="d-flex flex-row">
{{'project.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values> <h2 class="item-page-title-field mr-auto">
</h2> {{'project.page.titleprefix' | translate}}<ds-metadata-values [mdValues]="object?.allMetadata(['dc.title'])"></ds-metadata-values>
</h2>
<div class="pl-2">
<ds-dso-page-edit-button [pageRoutePrefix]="'items'" [dso]="object" [tooltipMsg]="'project.page.edit'"></ds-dso-page-edit-button>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-xs-12 col-md-4"> <div class="col-xs-12 col-md-4">
<ds-metadata-field-wrapper> <ds-metadata-field-wrapper>

View File

@@ -0,0 +1,6 @@
<a *ngIf="isAuthorized$ | async"
[routerLink]="['/' + pageRoutePrefix, dso.id, 'edit']"
class="edit-button btn btn-dark text-light btn-sm"
[tooltip]="tooltipMsg | translate">
<i class="fas fa-pencil-alt fa-fw"></i>
</a>

View File

@@ -0,0 +1,3 @@
.btn-dark {
background-color: $admin-sidebar-bg;
}

View File

@@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DsoPageEditButtonComponent } from './dso-page-edit-button.component';
describe('DsoPageEditButtonComponent', () => {
let component: DsoPageEditButtonComponent;
let fixture: ComponentFixture<DsoPageEditButtonComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DsoPageEditButtonComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DsoPageEditButtonComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,28 @@
import { Component, Input, OnInit } from '@angular/core';
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service';
import { Observable } from 'rxjs/internal/Observable';
import { FeatureID } from '../../../core/data/feature-authorization/feature-id';
@Component({
selector: 'ds-dso-page-edit-button',
templateUrl: './dso-page-edit-button.component.html',
styleUrls: ['./dso-page-edit-button.component.scss']
})
export class DsoPageEditButtonComponent implements OnInit {
@Input() dso: DSpaceObject;
@Input() pageRoutePrefix: string;
@Input() tooltipMsg: string;
isAuthorized$: Observable<boolean>;
constructor(protected authorizationService: AuthorizationDataService) { }
ngOnInit() {
this.isAuthorized$ = this.authorizationService.isAuthorized(FeatureID.CanEditMetadata, this.dso.self);
}
}

View File

@@ -215,6 +215,7 @@ import { SidebarSearchListElementComponent } from './object-list/sidebar-search-
import { CollectionSidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/collection/collection-sidebar-search-list-element.component'; import { CollectionSidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/collection/collection-sidebar-search-list-element.component';
import { CommunitySidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/community/community-sidebar-search-list-element.component'; import { CommunitySidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/community/community-sidebar-search-list-element.component';
import { AuthorizedCollectionSelectorComponent } from './dso-selector/dso-selector/authorized-collection-selector/authorized-collection-selector.component'; import { AuthorizedCollectionSelectorComponent } from './dso-selector/dso-selector/authorized-collection-selector/authorized-collection-selector.component';
import { DsoPageEditButtonComponent } from './dso-page/dso-page-edit-button/dso-page-edit-button.component';
const MODULES = [ const MODULES = [
// Do NOT include UniversalModule, HttpModule, or JsonpModule here // Do NOT include UniversalModule, HttpModule, or JsonpModule here
@@ -543,19 +544,21 @@ const DIRECTIVES = [
...COMPONENTS, ...COMPONENTS,
...DIRECTIVES, ...DIRECTIVES,
...ENTRY_COMPONENTS, ...ENTRY_COMPONENTS,
...SHARED_ITEM_PAGE_COMPONENTS ...SHARED_ITEM_PAGE_COMPONENTS,
DsoPageEditButtonComponent
], ],
providers: [ providers: [
...PROVIDERS ...PROVIDERS
], ],
exports: [ exports: [
...MODULES, ...MODULES,
...PIPES, ...PIPES,
...COMPONENTS, ...COMPONENTS,
...SHARED_ITEM_PAGE_COMPONENTS, ...SHARED_ITEM_PAGE_COMPONENTS,
...DIRECTIVES, ...DIRECTIVES,
CurationFormComponent CurationFormComponent,
], DsoPageEditButtonComponent
],
entryComponents: [ entryComponents: [
...ENTRY_COMPONENTS ...ENTRY_COMPONENTS
] ]

View File

@@ -764,6 +764,8 @@
"collection.page.browse.recent.empty": "No items to show", "collection.page.browse.recent.empty": "No items to show",
"collection.page.edit": "Edit this collection",
"collection.page.handle": "Permanent URI for this collection", "collection.page.handle": "Permanent URI for this collection",
"collection.page.license": "License", "collection.page.license": "License",
@@ -927,6 +929,8 @@
"community.form.title": "Name", "community.form.title": "Name",
"community.page.edit": "Edit this community",
"community.page.handle": "Permanent URI for this community", "community.page.handle": "Permanent URI for this community",
"community.page.license": "License", "community.page.license": "License",
@@ -1676,6 +1680,8 @@
"item.page.date": "Date", "item.page.date": "Date",
"item.page.edit": "Edit this item",
"item.page.files": "Files", "item.page.files": "Files",
"item.page.filesection.description": "Description:", "item.page.filesection.description": "Description:",
@@ -1782,6 +1788,8 @@
"journal.page.description": "Description", "journal.page.description": "Description",
"journal.page.edit": "Edit this item",
"journal.page.editor": "Editor-in-Chief", "journal.page.editor": "Editor-in-Chief",
"journal.page.issn": "ISSN", "journal.page.issn": "ISSN",
@@ -1800,6 +1808,8 @@
"journalissue.page.description": "Description", "journalissue.page.description": "Description",
"journalissue.page.edit": "Edit this item",
"journalissue.page.issuedate": "Issue Date", "journalissue.page.issuedate": "Issue Date",
"journalissue.page.journal-issn": "Journal ISSN", "journalissue.page.journal-issn": "Journal ISSN",
@@ -1818,6 +1828,8 @@
"journalvolume.page.description": "Description", "journalvolume.page.description": "Description",
"journalvolume.page.edit": "Edit this item",
"journalvolume.page.issuedate": "Issue Date", "journalvolume.page.issuedate": "Issue Date",
"journalvolume.page.titleprefix": "Journal Volume: ", "journalvolume.page.titleprefix": "Journal Volume: ",
@@ -2180,6 +2192,8 @@
"orgunit.page.description": "Description", "orgunit.page.description": "Description",
"orgunit.page.edit": "Edit this item",
"orgunit.page.id": "ID", "orgunit.page.id": "ID",
"orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organizational Unit: ",
@@ -2202,6 +2216,8 @@
"person.page.birthdate": "Birth Date", "person.page.birthdate": "Birth Date",
"person.page.edit": "Edit this item",
"person.page.email": "Email Address", "person.page.email": "Email Address",
"person.page.firstname": "First Name", "person.page.firstname": "First Name",
@@ -2433,6 +2449,8 @@
"project.page.description": "Description", "project.page.description": "Description",
"project.page.edit": "Edit this item",
"project.page.expectedcompletion": "Expected Completion", "project.page.expectedcompletion": "Expected Completion",
"project.page.funder": "Funders", "project.page.funder": "Funders",
@@ -2453,6 +2471,8 @@
"publication.page.description": "Description", "publication.page.description": "Description",
"publication.page.edit": "Edit this item",
"publication.page.journal-issn": "Journal ISSN", "publication.page.journal-issn": "Journal ISSN",
"publication.page.journal-title": "Journal Title", "publication.page.journal-title": "Journal Title",