[CST-5270] Finished functionalities

This commit is contained in:
Rezart Vata
2022-05-23 17:39:36 +02:00
parent cba7a60476
commit 166f4c3b25
15 changed files with 145 additions and 148 deletions

View File

@@ -1,49 +1,46 @@
<div dsSection #sectionRef="sectionRef"
[attr.id]="'section_' + sectionData.id"
[ngClass]="{ 'section-focus' : sectionRef.isSectionActive() }"
[mandatory]="sectionData.mandatory"
[submissionId]="submissionId"
[sectionType]="sectionData.sectionType"
[sectionId]="sectionData.id">
<ngb-accordion #acc="ngbAccordion"
*ngIf="(sectionRef.isEnabled() | async)"
(panelChange)="sectionRef.sectionChange($event)"
activeIds="{{ sectionData.id }}"
[destroyOnHide]="false">
<div dsSection #sectionRef="sectionRef" [attr.id]="'section_' + sectionData.id"
[ngClass]="{ 'section-focus' : sectionRef.isSectionActive() }" [mandatory]="sectionData.mandatory"
[submissionId]="submissionId" [sectionType]="sectionData.sectionType" [sectionId]="sectionData.id">
<ngb-accordion #acc="ngbAccordion" *ngIf="(sectionRef.isEnabled() | async)"
(panelChange)="sectionRef.sectionChange($event)" activeIds="{{ sectionData.id }}" [destroyOnHide]="false">
<ngb-panel id="{{ sectionData.id }}">
<ng-template ngbPanelTitle>
<span class="float-left section-title" tabindex="0">{{ 'submission.sections.'+sectionData.header | translate }}</span>
<span class="float-left section-title" tabindex="0">{{ 'submission.sections.'+sectionData.header | translate
}}</span>
<div class="d-inline-block float-right">
<i *ngIf="!(sectionRef.isValid() | async) && !(sectionRef.hasErrors())" class="fas fa-exclamation-circle text-warning mr-3"
title="{{'submission.sections.status.warnings.title' | translate}}" role="img" [attr.aria-label]="'submission.sections.status.warnings.aria' | translate"></i>
<i *ngIf="(sectionRef.hasErrors())" class="fas fa-exclamation-circle text-danger mr-3"
title="{{'submission.sections.status.errors.title' | translate}}" role="img" [attr.aria-label]="'submission.sections.status.errors.aria' | translate"></i>
<i *ngIf="(sectionRef.isValid() | async) && !(sectionRef.hasErrors())" class="fas fa-check-circle text-success mr-3"
title="{{'submission.sections.status.valid.title' | translate}}" role="img" [attr.aria-label]="'submission.sections.status.valid.aria' | translate"></i>
<a class="close"
tabindex="0"
role="button"
[attr.aria-label]="(sectionRef.isOpen() ? 'submission.sections.toggle.aria.close' : 'submission.sections.toggle.aria.open') | translate: {sectionHeader: ('submission.sections.'+sectionData.header | translate)}"
[title]="(sectionRef.isOpen() ? 'submission.sections.toggle.close' : 'submission.sections.toggle.open') | translate">
<i *ngIf="!(sectionRef.isValid() | async) && !(sectionRef.hasErrors()) && !(sectionRef.isInfo())"
class="fas fa-exclamation-circle text-warning mr-3"
title="{{'submission.sections.status.warnings.title' | translate}}" role="img"
[attr.aria-label]="'submission.sections.status.warnings.aria' | translate"></i>
<i *ngIf="(sectionRef.hasErrors()) && !(sectionRef.isInfo())"
class="fas fa-exclamation-circle text-danger mr-3"
title="{{'submission.sections.status.errors.title' | translate}}" role="img"
[attr.aria-label]="'submission.sections.status.errors.aria' | translate"></i>
<i *ngIf="(sectionRef.isValid() | async) && !(sectionRef.hasErrors()) && !(sectionRef.isInfo())"
class="fas fa-check-circle text-success mr-3"
title="{{'submission.sections.status.valid.title' | translate}}" role="img"
[attr.aria-label]="'submission.sections.status.valid.aria' | translate"></i>
<i *ngIf="sectionRef.isInfo() " class="fas fa-info-circle text-info mr-3"
title="{{'submission.sections.status.info.title' | translate}}" role="img"
[attr.aria-label]="'submission.sections.status.info.aria' | translate"></i>
<a class="close" tabindex="0" role="button"
[attr.aria-label]="(sectionRef.isOpen() ? 'submission.sections.toggle.aria.close' : 'submission.sections.toggle.aria.open') | translate: {sectionHeader: ('submission.sections.'+sectionData.header | translate)}"
[title]="(sectionRef.isOpen() ? 'submission.sections.toggle.close' : 'submission.sections.toggle.open') | translate">
<span *ngIf="sectionRef.isOpen()" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!sectionRef.isOpen()" class="fas fa-chevron-down fa-fw"></span>
</a>
<a href="javascript:void(0);" class="close mr-3" *ngIf="!sectionRef.isMandatory()"
(click)="removeSection($event)">
(click)="removeSection($event)">
<i class="fas fa-trash-o" aria-hidden="true" tabindex="0"></i>
</a>
</div>
</ng-template>
<ng-template ngbPanelContent>
<div id="sectionGenericError_{{sectionData.id}}" *ngIf="sectionRef.hasGenericErrors()">
<ds-alert *ngFor="let error of sectionRef.getErrors(); let i = index"
[content]="error"
[dismissible]="true"
[type]="AlertTypeEnum.Error"
(close)="sectionRef.removeError(i)"></ds-alert>
<ds-alert *ngFor="let error of sectionRef.getErrors(); let i = index" [content]="error" [dismissible]="true"
[type]="AlertTypeEnum.Error" (close)="sectionRef.removeError(i)"></ds-alert>
</div>
<div id="sectionContent_{{sectionData.id}}"
(click)="sectionRef.setFocus($event)">
<div id="sectionContent_{{sectionData.id}}" (click)="sectionRef.setFocus($event)">
<ng-container *ngComponentOutlet="getSectionContent(); injector: objectInjector;"></ng-container>
</div>
</ng-template>

View File

@@ -94,8 +94,8 @@ export class SectionsDirective implements OnDestroy, OnInit {
* @param {SectionsService} sectionService
*/
constructor(private changeDetectorRef: ChangeDetectorRef,
private submissionService: SubmissionService,
private sectionService: SectionsService) {
private submissionService: SubmissionService,
private sectionService: SectionsService) {
}
/**
@@ -272,6 +272,19 @@ export class SectionsDirective implements OnDestroy, OnInit {
}
}
/**
* Check if section is information
*
* @returns {Observable<boolean>}
* Emits true whenever section is information
*/
public isInfo(): boolean {
return this.sectionService.getIsInformational(this.sectionType);
}
/**
* Remove error from list
*

View File

@@ -60,11 +60,11 @@ export class SectionsService {
* @param {TranslateService} translate
*/
constructor(private formService: FormService,
private notificationsService: NotificationsService,
private scrollToService: ScrollToService,
private submissionService: SubmissionService,
private store: Store<SubmissionState>,
private translate: TranslateService) {
private notificationsService: NotificationsService,
private scrollToService: ScrollToService,
private submissionService: SubmissionService,
private store: Store<SubmissionState>,
private translate: TranslateService) {
}
/**
@@ -197,7 +197,7 @@ export class SectionsService {
path: pathCombiner.getPath(error.fieldId.replace(/\_/g, '.')).path,
message: error.message
} as SubmissionSectionError))
.filter((sectionError: SubmissionSectionError) => findIndex(state.errorsToShow, {path: sectionError.path}) === -1);
.filter((sectionError: SubmissionSectionError) => findIndex(state.errorsToShow, { path: sectionError.path }) === -1);
return [...state.errorsToShow, ...sectionErrors];
})
))
@@ -262,7 +262,7 @@ export class SectionsService {
}
}),
distinctUntilChanged()
);
);
}
/**
@@ -371,7 +371,7 @@ export class SectionsService {
return this.store.select(submissionObjectFromIdSelector(submissionId)).pipe(
filter((submissionState: SubmissionObjectEntry) => isNotUndefined(submissionState)),
map((submissionState: SubmissionObjectEntry) => {
return isNotUndefined(submissionState.sections) && isNotUndefined(findKey(submissionState.sections, {sectionType: sectionType}));
return isNotUndefined(submissionState.sections) && isNotUndefined(findKey(submissionState.sections, { sectionType: sectionType }));
}),
distinctUntilChanged());
}
@@ -514,4 +514,16 @@ export class SectionsService {
return metadata;
}
/**
* Return if the section is an informational type section.
* @param sectionType
*/
public getIsInformational(sectionType: SectionsType): boolean {
if (sectionType === SectionsType.SherpaPolicies) {
return true;
} else {
return false;
}
}
}

View File

@@ -1,20 +1,45 @@
<div class="mb-3 border-bottom" data-test="collapse">
<div class="w-100 d-flex justify-content-between collapse-toggle" (click)="collapse.toggle()">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()"
[attr.aria-expanded]="!collapse.collapsed" aria-controls="collapseExample">
{{version.articleVersion | titlecase}} {{ 'submission.sections.sherpa.publisher.policy.version' | translate
}}
</button>
<div class="d-flex">
<button type="button" class="btn btn-link p-0 mr-4" (click)="$event.preventDefault()"
[attr.aria-expanded]="!collapse.collapsed" aria-controls="collapseExample">
{{version.articleVersion | titlecase}} {{ 'submission.sections.sherpa.publisher.policy.version' |
translate
}}
</button>
<div>
<span *ngIf="!!version?.embargo && !!version?.embargo.amount;else noEmbargoTitle"> <i
class="fas fa-hourglass-half"></i> {{version.embargo.amount}}
{{version.embargo.units[1]}}</span>
<ng-template #noEmbargoTitle>
<span><i class="fas fa-hourglass-half"></i> {{
'submission.sections.sherpa.publisher.policy.noembargo' | translate }}</span>
</ng-template>
<span class="m-1 ml-4">
<i class="far fa-folder-open"></i>
<span *ngIf="!!version?.locations && version.locations.length > 0; else noLocations">
{{version.locations[0]}} <span
*ngIf="version.locations.length > 1">+{{version.locations.length-1}}</span>
</span>
<ng-template #noLocations>
<span>{{
'submission.sections.sherpa.publisher.policy.nolocation' | translate }}</span>
</ng-template>
</span>
</div>
</div>
<div class="d-inline-block">
<span *ngIf="collapse.collapsed" class="fas fa-chevron-down"></span>
<span *ngIf="!collapse.collapsed" class="fas fa-chevron-up"></span>
</div>
</div>
<div #collapse="ngbCollapse" [ngbCollapse]="isCollapsed">
<div class="ml-4">
<div class="row">
<div *ngIf="!!version" class="ml-4">
<div class="row" *ngIf="!!version?.embargo && !!version?.embargo.amount">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.publisher.policy.embargo' | translate }}</p>
<p class="m-1"><i class="fas fa-hourglass-half"></i> {{
'submission.sections.sherpa.publisher.policy.embargo' | translate }}</p>
</div>
<div class="col-6">
<p class="m-1" *ngIf="!!version.embargo;else noEmbargo">{{version.embargo.amount}}
@@ -22,36 +47,39 @@
<ng-template #noEmbargo>
<p class="m-1">{{ 'submission.sections.sherpa.publisher.policy.noembargo' | translate }}</p>
</ng-template>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!version?.licenses && version.licenses.length > 0">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.publisher.policy.license' | translate }}</p>
<p class="m-1"><i class="fas fa-certificate"></i> {{
'submission.sections.sherpa.publisher.policy.license' | translate }}</p>
</div>
<div class="col-6">
<p class="m-1" *ngFor="let license of version.licenses">{{license}}</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!version?.prerequisites && version.prerequisites.length > 0">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.publisher.policy.prerequisites' | translate }}</p>
<p class="m-1"><i class="fas fa-exclamation-circle"></i> {{
'submission.sections.sherpa.publisher.policy.prerequisites' | translate }}</p>
</div>
<div class="col-6">
<p class="m-1" *ngFor="let prerequisite of version.prerequisites">{{prerequisite}}</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!version?.locations && version.locations.length > 0">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.publisher.policy.location' | translate }}</p>
<p class="m-1"><i class="far fa-folder-open"></i> {{
'submission.sections.sherpa.publisher.policy.location' | translate }}</p>
</div>
<div class="col-6">
<p class="m-1" *ngFor="let location of version.locations">{{location}}</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!version?.conditions && version.conditions.length > 0">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.publisher.policy.conditions' | translate }}</p>
<p class="m-1"><i class="fas fa-tasks"></i> {{
'submission.sections.sherpa.publisher.policy.conditions' | translate }}</p>
</div>
<div class="col-6">
<p class="m-1" *ngFor="let condition of version.conditions">{{condition}}</p>

View File

@@ -1,33 +0,0 @@
:host ::ng-deep {
.card {
border: none;
margin-bottom: 20px;
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
.card-header {
border: none;
background-color: transparent;
border-top: 1px solid rgba(0, 0, 0, 0.125);
button {
text-align: left;
padding: 0px;
width: 100%;
color: #000;
font-weight: 600;
.fas {
background: #fff;
color: #000;
margin-right: 10px;
height: 1.25em;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
}
}
}
}
}

View File

@@ -2,6 +2,9 @@ import { Component, Input } from '@angular/core';
import { PermittedVersions } from '../../../../core/submission/models/sherpa-policies-details.model';
/**
* This component represents a section that contains the inner accordions for the publisher policy versions.
*/
@Component({
selector: 'ds-content-accordion',
templateUrl: './content-accordion.component.html',
@@ -16,5 +19,5 @@ export class ContentAccordionComponent {
/**
* A boolean representing if div should start collapsed
*/
public isCollapsed = false;
public isCollapsed = true;
}

View File

@@ -1,5 +1,5 @@
<div class="ml-4">
<div class="row">
<div class="row" *ngIf="!!metadata?.id">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.record.information.id' | translate }}</p>
</div>
@@ -8,7 +8,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!metadata?.dateCreated">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.record.information.date.created' | translate }}</p>
</div>
@@ -17,7 +17,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!metadata?.dateModified">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.record.information.date.modified' | translate }}</p>
</div>
@@ -26,7 +26,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!metadata?.uri">
<div class="col-4">
<p class="m-1">{{ 'submission.sections.sherpa.record.information.uri' | translate }}</p>
</div>

View File

@@ -2,6 +2,9 @@ import { Component, Input } from '@angular/core';
import { Metadata } from '../../../../core/submission/models/sherpa-policies-details.model';
/**
* This component represents a section that contains the matadata informations.
*/
@Component({
selector: 'ds-metadata-information',
templateUrl: './metadata-information.component.html',

View File

@@ -1,5 +1,5 @@
<div class="ml-4">
<div class="row">
<div class="row" *ngIf="!!journal?.titles && journal.titles.length > 0">
<div class="col-4">
<p class="m-1">{{'submission.sections.sherpa.publication.information.title' | translate}}</p>
</div>
@@ -8,7 +8,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!journal?.issns && journal.issns.length > 0">
<div class="col-4">
<p class="m-1">{{'submission.sections.sherpa.publication.information.issns' | translate}}</p>
</div>
@@ -17,7 +17,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!journal?.url">
<div class="col-4">
<p class="m-1">{{'submission.sections.sherpa.publication.information.url' | translate}}</p>
</div>
@@ -29,7 +29,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!journal?.publishers && journal.publishers.length > 0">
<div class="col-4">
<p class="m-1">{{'submission.sections.sherpa.publication.information.publishers' | translate}}</p>
</div>
@@ -41,7 +41,7 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!journal?.romeoPub">
<div class="col-4">
<p class="m-1">{{'submission.sections.sherpa.publication.information.romeoPub' | translate}}</p>
</div>
@@ -51,9 +51,9 @@
</p>
</div>
</div>
<div class="row">
<div class="row" *ngIf="!!journal?.zetoPub">
<div class="col-4">
<p class="m-1">{{'submission.sections.sherpa.publication.information.zetoPub' | translate}}</p>
<p class="m-1">{{'submission.sections.sherpa.publication.information.zetoPub' | translate}}</p>
</div>
<div class="col-4">
<p class="m-1">

View File

@@ -2,6 +2,9 @@ import { Component, Input } from '@angular/core';
import { Journal } from '../../../../core/submission/models/sherpa-policies-details.model';
/**
* This component represents a section that contains the journal publication information.
*/
@Component({
selector: 'ds-publication-information',
templateUrl: './publication-information.component.html',

View File

@@ -8,7 +8,7 @@
</div>
<ds-content-accordion *ngFor="let permittedVersions of policy.permittedVersions" [version]="permittedVersions">
</ds-content-accordion>
<div class="row">
<div class="row" *ngIf="!!policy?.urls">
<div class="col-12">
<p class="m-1">
{{'submission.sections.sherpa.publisher.policy.more.information' | translate}}

View File

@@ -2,6 +2,9 @@ import { Component, Input } from '@angular/core';
import { Policy } from '../../../../core/submission/models/sherpa-policies-details.model';
/**
* This component represents a section that contains the publisher policy informations.
*/
@Component({
selector: 'ds-publisher-policy',
templateUrl: './publisher-policy.component.html',

View File

@@ -1,35 +1,3 @@
:host ::ng-deep {
.card {
border: none;
margin-bottom: 20px;
border-bottom: 1px solid rgba(0, 0, 0, 0.125);
.card-header {
border: none;
background-color: transparent;
border-top: 1px solid rgba(0, 0, 0, 0.125);
button {
text-align: left;
padding: 0px;
// width: auto;
font-weight: bold;
.fas {
background: #207698;
color: #fff;
margin-right: 10px;
height: 1.25em;
display: flex;
align-items: center;
justify-content: center;
}
}
}
}
}
.refresh-container {
display: flex;
justify-content: right;

View File

@@ -14,10 +14,9 @@ import { SectionsService } from '../sections.service';
import { SectionModelComponent } from '../models/section.model';
import { SubmissionService } from '../../submission.service';
import { hasValue, isEmpty } from '../../../shared/empty.util';
import { debounce, debounceTime, timeInterval } from 'rxjs/operators';
/**
* This component represents a section for managing item's access conditions.
* This component represents a section for the sherpa policy informations structure.
*/
@Component({
selector: 'ds-section-sherpa-policies',

View File

@@ -3894,6 +3894,10 @@
"submission.sections.status.warnings.aria": "has warnings",
"submission.sections.status.info.title": "Additional Information",
"submission.sections.status.info.aria": "Additional Information",
"submission.sections.toggle.open": "Open section",
"submission.sections.toggle.close": "Close section",
@@ -4020,6 +4024,8 @@
"submission.sections.sherpa.publisher.policy.noembargo": "No Embargo",
"submission.sections.sherpa.publisher.policy.nolocation": "None",
"submission.sections.sherpa.publisher.policy.license": "License",
"submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites",
@@ -4042,11 +4048,6 @@
"submission.submit.breadcrumbs": "New submission",
"submission.submit.title": "New submission",