[CST-5249] Renamed nbevent and nbtopics

This commit is contained in:
Luca Giamminonni
2022-07-06 17:14:12 +02:00
parent a355a15459
commit a7d2278d99
26 changed files with 285 additions and 262 deletions

View File

@@ -23,11 +23,11 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon
pathMatch: 'full',
resolve: {
breadcrumb: I18nBreadcrumbResolver,
openaireBrokerTopicsParams: AdminQualityAssuranceTopicsPageResolver
openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver
},
data: {
title: 'admin.notifications.broker.page.title',
breadcrumbKey: 'admin.notifications.broker',
title: 'admin.quality-assurance.page.title',
breadcrumbKey: 'admin.quality-assurance',
showBreadcrumbsFluid: false
}
},
@@ -38,7 +38,7 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon
pathMatch: 'full',
resolve: {
breadcrumb: I18nBreadcrumbResolver,
openaireBrokerSourceParams: AdminQualityAssuranceSourcePageResolver,
openaireQualityAssuranceSourceParams: AdminQualityAssuranceSourcePageResolver,
sourceData: SourceDataResolver
},
data: {
@@ -54,7 +54,7 @@ import { SourceDataResolver } from './admin-quality-assurance-source-page-compon
pathMatch: 'full',
resolve: {
breadcrumb: I18nBreadcrumbResolver,
openaireBrokerEventsParams: AdminQualityAssuranceEventsPageResolver
openaireQualityAssuranceEventsParams: AdminQualityAssuranceEventsPageResolver
},
data: {
title: 'admin.notifications.event.page.title',

View File

@@ -1,7 +1,7 @@
import { Component } from '@angular/core';
@Component({
selector: 'ds-notification-broker-page',
selector: 'ds-notification-qa-page',
templateUrl: './admin-quality-assurance-topics-page.component.html'
})
export class AdminQualityAssuranceTopicsPageComponent {

View File

@@ -38,15 +38,15 @@ describe('QualityAssuranceEventRestService', () => {
let http: HttpClient;
let comparator: any;
const endpointURL = 'https://rest.api/rest/api/integration/nbtopics';
const endpointURL = 'https://rest.api/rest/api/integration/qatopics';
const requestUUID = '8b3c913a-5a4b-438b-9181-be1a5b4a1c8a';
const topic = 'ENRICH!MORE!PID';
const pageInfo = new PageInfo();
const array = [ qualityAssuranceEventObjectMissingPid, qualityAssuranceEventObjectMissingPid2 ];
const paginatedList = buildPaginatedList(pageInfo, array);
const brokerEventObjectRD = createSuccessfulRemoteDataObject(qualityAssuranceEventObjectMissingPid);
const brokerEventObjectMissingProjectRD = createSuccessfulRemoteDataObject(qualityAssuranceEventObjectMissingProjectFound);
const qaEventObjectRD = createSuccessfulRemoteDataObject(qualityAssuranceEventObjectMissingPid);
const qaEventObjectMissingProjectRD = createSuccessfulRemoteDataObject(qualityAssuranceEventObjectMissingProjectFound);
const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList);
const status = 'ACCEPTED';
@@ -82,7 +82,7 @@ describe('QualityAssuranceEventRestService', () => {
rdbService = jasmine.createSpyObj('rdbService', {
buildSingle: cold('(a)', {
a: brokerEventObjectRD
a: qaEventObjectRD
}),
buildList: cold('(a)', {
a: paginatedListRD
@@ -122,7 +122,7 @@ describe('QualityAssuranceEventRestService', () => {
beforeEach(() => {
serviceASAny.requestService.getByHref.and.returnValue(observableOf(responseCacheEntry));
serviceASAny.requestService.getByUUID.and.returnValue(observableOf(responseCacheEntry));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(brokerEventObjectRD));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(qaEventObjectRD));
});
it('should proxy the call to dataservice.searchBy', () => {
@@ -151,7 +151,7 @@ describe('QualityAssuranceEventRestService', () => {
beforeEach(() => {
serviceASAny.requestService.getByHref.and.returnValue(observableOf(responseCacheEntry));
serviceASAny.requestService.getByUUID.and.returnValue(observableOf(responseCacheEntry));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(brokerEventObjectRD));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(qaEventObjectRD));
});
it('should proxy the call to dataservice.findById', () => {
@@ -165,7 +165,7 @@ describe('QualityAssuranceEventRestService', () => {
it('should return a RemoteData<QualityAssuranceEventObject> for the object with the given URL', () => {
const result = service.getEvent(qualityAssuranceEventObjectMissingPid.id);
const expected = cold('(a)', {
a: brokerEventObjectRD
a: qaEventObjectRD
});
expect(result).toBeObservable(expected);
});
@@ -175,7 +175,7 @@ describe('QualityAssuranceEventRestService', () => {
beforeEach(() => {
serviceASAny.requestService.getByHref.and.returnValue(observableOf(responseCacheEntry));
serviceASAny.requestService.getByUUID.and.returnValue(observableOf(responseCacheEntry));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(brokerEventObjectRD));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(qaEventObjectRD));
});
it('should proxy the call to dataservice.patch', () => {
@@ -199,7 +199,7 @@ describe('QualityAssuranceEventRestService', () => {
beforeEach(() => {
serviceASAny.requestService.getByHref.and.returnValue(observableOf(responseCacheEntryB));
serviceASAny.requestService.getByUUID.and.returnValue(observableOf(responseCacheEntryB));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(brokerEventObjectMissingProjectRD));
serviceASAny.rdbService.buildFromRequestUUID.and.returnValue(observableOf(qaEventObjectMissingProjectRD));
});
it('should proxy the call to dataservice.postOnRelated', () => {

View File

@@ -33,7 +33,7 @@ class DataServiceImpl extends DataService<QualityAssuranceEventObject> {
/**
* The REST endpoint.
*/
protected linkPath = 'nbevents';
protected linkPath = 'qaevents';
/**
* Initialize service variables

View File

@@ -6,4 +6,4 @@ import { ResourceType } from '../../../shared/resource-type';
* Needs to be in a separate file to prevent circular
* dependencies in webpack.
*/
export const QUALITY_ASSURANCE_EVENT_OBJECT = new ResourceType('nbevent');
export const QUALITY_ASSURANCE_EVENT_OBJECT = new ResourceType('qaevent');

View File

@@ -11,16 +11,16 @@ import { RemoteData } from '../../../data/remote-data';
import {CacheableObject} from '../../../cache/cacheable-object.model';
/**
* The interface representing the Notifications Broker event message
* The interface representing the Quality Assurance event message
*/
export interface QualityAssuranceEventMessageObject {
}
/**
* The interface representing the Notifications Broker event message
* The interface representing the Quality Assurance event message
*/
export interface OpenaireBrokerEventMessageObject {
export interface OpenaireQualityAssuranceEventMessageObject {
/**
* The type of 'value'
*/
@@ -74,7 +74,7 @@ export interface OpenaireBrokerEventMessageObject {
}
/**
* The interface representing the Notifications Broker event model
* The interface representing the Quality Assurance event model
*/
@typedObject
export class QualityAssuranceEventObject implements CacheableObject {
@@ -84,19 +84,19 @@ export class QualityAssuranceEventObject implements CacheableObject {
static type = QUALITY_ASSURANCE_EVENT_OBJECT;
/**
* The Notifications Broker event uuid inside DSpace
* The Quality Assurance event uuid inside DSpace
*/
@autoserialize
id: string;
/**
* The universally unique identifier of this Notifications Broker event
* The universally unique identifier of this Quality Assurance event
*/
@autoserializeAs(String, 'id')
uuid: string;
/**
* The Notifications Broker event original id (ex.: the source archive OAI-PMH identifier)
* The Quality Assurance event original id (ex.: the source archive OAI-PMH identifier)
*/
@autoserialize
originalId: string;
@@ -114,13 +114,13 @@ export class QualityAssuranceEventObject implements CacheableObject {
trust: number;
/**
* The timestamp Notifications Broker event was saved in DSpace
* The timestamp Quality Assurance event was saved in DSpace
*/
@autoserialize
eventDate: string;
/**
* The Notifications Broker event status (ACCEPTED, REJECTED, DISCARDED, PENDING)
* The Quality Assurance event status (ACCEPTED, REJECTED, DISCARDED, PENDING)
*/
@autoserialize
status: string;
@@ -129,7 +129,7 @@ export class QualityAssuranceEventObject implements CacheableObject {
* The suggestion data. Data may vary depending on the source
*/
@autoserialize
message: OpenaireBrokerEventMessageObject;
message: OpenaireQualityAssuranceEventMessageObject;
/**
* The type of this ConfigObject

View File

@@ -6,4 +6,4 @@ import { ResourceType } from '../../../shared/resource-type';
* Needs to be in a separate file to prevent circular
* dependencies in webpack.
*/
export const QUALITY_ASSURANCE_SOURCE_OBJECT = new ResourceType('nbsource');
export const QUALITY_ASSURANCE_SOURCE_OBJECT = new ResourceType('qasource');

View File

@@ -6,4 +6,4 @@ import { ResourceType } from '../../../shared/resource-type';
* Needs to be in a separate file to prevent circular
* dependencies in webpack.
*/
export const QUALITY_ASSURANCE_TOPIC_OBJECT = new ResourceType('nbtopic');
export const QUALITY_ASSURANCE_TOPIC_OBJECT = new ResourceType('qatopic');

View File

@@ -32,13 +32,13 @@ describe('QualityAssuranceSourceRestService', () => {
let http: HttpClient;
let comparator: any;
const endpointURL = 'https://rest.api/rest/api/integration/nbsources';
const endpointURL = 'https://rest.api/rest/api/integration/qasources';
const requestUUID = '8b3c913a-5a4b-438b-9181-be1a5b4a1c8a';
const pageInfo = new PageInfo();
const array = [ qualityAssuranceSourceObjectMorePid, qualityAssuranceSourceObjectMoreAbstract ];
const paginatedList = buildPaginatedList(pageInfo, array);
const brokerSourceObjectRD = createSuccessfulRemoteDataObject(qualityAssuranceSourceObjectMorePid);
const qaSourceObjectRD = createSuccessfulRemoteDataObject(qualityAssuranceSourceObjectMorePid);
const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList);
beforeEach(() => {
@@ -56,7 +56,7 @@ describe('QualityAssuranceSourceRestService', () => {
rdbService = jasmine.createSpyObj('rdbService', {
buildSingle: cold('(a)', {
a: brokerSourceObjectRD
a: qaSourceObjectRD
}),
buildList: cold('(a)', {
a: paginatedListRD
@@ -118,7 +118,7 @@ describe('QualityAssuranceSourceRestService', () => {
it('should return a RemoteData<QualityAssuranceSourceObject> for the object with the given URL', () => {
const result = service.getSource(qualityAssuranceSourceObjectMorePid.id);
const expected = cold('(a)', {
a: brokerSourceObjectRD
a: qaSourceObjectRD
});
expect(result).toBeObservable(expected);
});

View File

@@ -31,7 +31,7 @@ class DataServiceImpl extends DataService<QualityAssuranceSourceObject> {
/**
* The REST endpoint.
*/
protected linkPath = 'nbsources';
protected linkPath = 'qasources';
/**
* Initialize service variables
@@ -100,7 +100,7 @@ export class QualityAssuranceSourceRestService {
* The list of Quality Assurance source.
*/
public getSources(options: FindListOptions = {}, ...linksToFollow: FollowLinkConfig<QualityAssuranceSourceObject>[]): Observable<RemoteData<PaginatedList<QualityAssuranceSourceObject>>> {
return this.dataService.getBrowseEndpoint(options, 'nbsources').pipe(
return this.dataService.getBrowseEndpoint(options, 'qasources').pipe(
take(1),
mergeMap((href: string) => this.dataService.findAllByHref(href, options, true, true, ...linksToFollow)),
);
@@ -110,7 +110,7 @@ export class QualityAssuranceSourceRestService {
* Clear FindAll source requests from cache
*/
public clearFindAllSourceRequests() {
this.requestService.setStaleByHrefSubstring('nbsources');
this.requestService.setStaleByHrefSubstring('qasources');
}
/**
@@ -125,7 +125,7 @@ export class QualityAssuranceSourceRestService {
*/
public getSource(id: string, ...linksToFollow: FollowLinkConfig<QualityAssuranceSourceObject>[]): Observable<RemoteData<QualityAssuranceSourceObject>> {
const options = {};
return this.dataService.getBrowseEndpoint(options, 'nbsources').pipe(
return this.dataService.getBrowseEndpoint(options, 'qasources').pipe(
take(1),
mergeMap((href: string) => this.dataService.findByHref(href + '/' + id, true, true, ...linksToFollow))
);

View File

@@ -32,13 +32,13 @@ describe('QualityAssuranceTopicRestService', () => {
let http: HttpClient;
let comparator: any;
const endpointURL = 'https://rest.api/rest/api/integration/nbtopics';
const endpointURL = 'https://rest.api/rest/api/integration/qatopics';
const requestUUID = '8b3c913a-5a4b-438b-9181-be1a5b4a1c8a';
const pageInfo = new PageInfo();
const array = [ qualityAssuranceTopicObjectMorePid, qualityAssuranceTopicObjectMoreAbstract ];
const paginatedList = buildPaginatedList(pageInfo, array);
const brokerTopicObjectRD = createSuccessfulRemoteDataObject(qualityAssuranceTopicObjectMorePid);
const qaTopicObjectRD = createSuccessfulRemoteDataObject(qualityAssuranceTopicObjectMorePid);
const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList);
beforeEach(() => {
@@ -56,7 +56,7 @@ describe('QualityAssuranceTopicRestService', () => {
rdbService = jasmine.createSpyObj('rdbService', {
buildSingle: cold('(a)', {
a: brokerTopicObjectRD
a: qaTopicObjectRD
}),
buildList: cold('(a)', {
a: paginatedListRD
@@ -118,7 +118,7 @@ describe('QualityAssuranceTopicRestService', () => {
it('should return a RemoteData<QualityAssuranceTopicObject> for the object with the given URL', () => {
const result = service.getTopic(qualityAssuranceTopicObjectMorePid.id);
const expected = cold('(a)', {
a: brokerTopicObjectRD
a: qaTopicObjectRD
});
expect(result).toBeObservable(expected);
});

View File

@@ -31,7 +31,7 @@ class DataServiceImpl extends DataService<QualityAssuranceTopicObject> {
/**
* The REST endpoint.
*/
protected linkPath = 'nbtopics';
protected linkPath = 'qatopics';
/**
* Initialize service variables
@@ -100,7 +100,7 @@ export class QualityAssuranceTopicRestService {
* The list of Quality Assurance topics.
*/
public getTopics(options: FindListOptions = {}, ...linksToFollow: FollowLinkConfig<QualityAssuranceTopicObject>[]): Observable<RemoteData<PaginatedList<QualityAssuranceTopicObject>>> {
return this.dataService.getBrowseEndpoint(options, 'nbtopics').pipe(
return this.dataService.getBrowseEndpoint(options, 'qatopics').pipe(
take(1),
mergeMap((href: string) => this.dataService.findAllByHref(href, options, true, true, ...linksToFollow)),
);
@@ -110,7 +110,7 @@ export class QualityAssuranceTopicRestService {
* Clear FindAll topics requests from cache
*/
public clearFindAllTopicsRequests() {
this.requestService.setStaleByHrefSubstring('nbtopics');
this.requestService.setStaleByHrefSubstring('qatopics');
}
/**
@@ -125,7 +125,7 @@ export class QualityAssuranceTopicRestService {
*/
public getTopic(id: string, ...linksToFollow: FollowLinkConfig<QualityAssuranceTopicObject>[]): Observable<RemoteData<QualityAssuranceTopicObject>> {
const options = {};
return this.dataService.getBrowseEndpoint(options, 'nbtopics').pipe(
return this.dataService.getBrowseEndpoint(options, 'qatopics').pipe(
take(1),
mergeMap((href: string) => this.dataService.findByHref(href + '/' + id, true, true, ...linksToFollow))
);

View File

@@ -507,6 +507,29 @@ export class MenuResolver implements Resolve<boolean> {
createSiteAdministratorMenuSections() {
this.authorizationService.isAuthorized(FeatureID.AdministratorOf).subscribe((authorized) => {
const menuList = [
/* Notifications */
{
id: 'notifications',
active: false,
visible: authorized,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.notifications'
} as TextMenuItemModel,
icon: 'bell',
index: 4
},
{
id: 'notifications_quality-assurance',
parentID: 'notifications',
active: false,
visible: authorized,
model: {
type: MenuItemType.LINK,
text: 'menu.section.quality-assurance',
link: '/admin/notifications/quality-assurance'
} as LinkMenuItemModel,
},
/* Admin Search */
{
id: 'admin_search',

View File

@@ -26,7 +26,7 @@ describe('NotificationsStateService', () => {
if (mode === 'empty') {
initialState = {
notifications: {
brokerTopic: {
qaTopic: {
topics: [],
processing: false,
loaded: false,
@@ -40,7 +40,7 @@ describe('NotificationsStateService', () => {
} else {
initialState = {
notifications: {
brokerTopic: {
qaTopic: {
topics: [
qualityAssuranceTopicObjectMorePid,
qualityAssuranceTopicObjectMoreAbstract,
@@ -284,7 +284,7 @@ describe('NotificationsStateService', () => {
if (mode === 'empty') {
initialState = {
notifications: {
brokerSource: {
qaSource: {
source: [],
processing: false,
loaded: false,
@@ -298,7 +298,7 @@ describe('NotificationsStateService', () => {
} else {
initialState = {
notifications: {
brokerSource: {
qaSource: {
source: [
qualityAssuranceSourceObjectMorePid,
qualityAssuranceSourceObjectMoreAbstract,

View File

@@ -6,13 +6,13 @@ import { qualityAssuranceTopicsReducer, QualityAssuranceTopicState, } from './qa
* The OpenAIRE State
*/
export interface NotificationsState {
'brokerTopic': QualityAssuranceTopicState;
'brokerSource': QualityAssuranceSourceState;
'qaTopic': QualityAssuranceTopicState;
'qaSource': QualityAssuranceSourceState;
}
export const notificationsReducers: ActionReducerMap<NotificationsState> = {
brokerTopic: qualityAssuranceTopicsReducer,
brokerSource: qualityAssuranceSourceReducer
qaTopic: qualityAssuranceTopicsReducer,
qaSource: qualityAssuranceSourceReducer
};
export const notificationsSelector = createFeatureSelector<NotificationsState>('notifications');

View File

@@ -2,11 +2,11 @@
<div class="row">
<div class="col-12">
<h2 class="border-bottom pb-2">{{'notifications.events.title'| translate}}</h2>
<p>{{'notifications.broker.events.description'| translate}}</p>
<p>{{'quality-assurance.events.description'| translate}}</p>
<p>
<a class="btn btn-outline-secondary" [routerLink]="['/admin/notifications/quality-assurance']">
<i class="fas fa-angle-double-left"></i>
{{'notifications.broker.events.back' | translate}}
{{'quality-assurance.events.back' | translate}}
</a>
</p>
</div>
@@ -14,10 +14,10 @@
<div class="row">
<div class="col-12">
<h3 class="border-bottom pb-2">
{{'notifications.broker.events.topic' | translate}} {{this.showTopic}}
{{'quality-assurance.events.topic' | translate}} {{this.showTopic}}
</h3>
<ds-loading class="container" *ngIf="(isEventPageLoading | async)" message="{{'notifications.broker.loading' | translate}}"></ds-loading>
<ds-loading class="container" *ngIf="(isEventPageLoading | async)" message="{{'quality-assurance.loading' | translate}}"></ds-loading>
<ds-pagination *ngIf="!(isEventPageLoading | async)"
[paginationOptions]="paginationConfig"
@@ -25,20 +25,20 @@
[sortOptions]="paginationSortConfig"
(paginationChange)="getQualityAssuranceEvents()">
<ds-loading class="container" *ngIf="(isEventLoading | async)" message="{{'notifications.broker.loading' | translate}}"></ds-loading>
<ds-loading class="container" *ngIf="(isEventLoading | async)" message="{{'quality-assurance.loading' | translate}}"></ds-loading>
<ng-container *ngIf="!(isEventLoading | async)">
<div *ngIf="(eventsUpdated$|async)?.length == 0" class="alert alert-info w-100 mb-2 mt-2" role="alert">
{{'notifications.broker.noEvents' | translate}}
{{'quality-assurance.noEvents' | translate}}
</div>
<div *ngIf="(eventsUpdated$|async)?.length != 0" class="table-responsive mt-2">
<table id="events" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{'notifications.broker.event.table.trust' | translate}}</th>
<th scope="col">{{'notifications.broker.event.table.publication' | translate}}</th>
<th *ngIf="hasDetailColumn() && showTopic.indexOf('/PROJECT') == -1" scope="col">{{'notifications.broker.event.table.details' | translate}}</th>
<th *ngIf="hasDetailColumn() && showTopic.indexOf('/PROJECT') !== -1" scope="col">{{'notifications.broker.event.table.project-details' | translate}}</th>
<th scope="col" class="button-rows">{{'notifications.broker.event.table.actions' | translate}}</th>
<th scope="col">{{'quality-assurance.event.table.trust' | translate}}</th>
<th scope="col">{{'quality-assurance.event.table.publication' | translate}}</th>
<th *ngIf="hasDetailColumn() && showTopic.indexOf('/PROJECT') == -1" scope="col">{{'quality-assurance.event.table.details' | translate}}</th>
<th *ngIf="hasDetailColumn() && showTopic.indexOf('/PROJECT') !== -1" scope="col">{{'quality-assurance.event.table.project-details' | translate}}</th>
<th scope="col" class="button-rows">{{'quality-assurance.event.table.actions' | translate}}</th>
</tr>
</thead>
<tbody>
@@ -51,8 +51,8 @@
<span *ngIf="!eventElement?.target">{{eventElement.title}}</span>
</td>
<td *ngIf="showTopic.indexOf('/PID') !== -1">
<p><span class="small">{{'notifications.broker.event.table.pidtype' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.type}}</span></p>
<p><span class="small">{{'notifications.broker.event.table.pidvalue' | translate}}</span><br>
<p><span class="small">{{'quality-assurance.event.table.pidtype' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.type}}</span></p>
<p><span class="small">{{'quality-assurance.event.table.pidvalue' | translate}}</span><br>
<a *ngIf="hasPIDHref(eventElement.event.message); else noPID" href="{{getPIDHref(eventElement.event.message)}}" target="_blank">
{{eventElement.event.message.value}}
</a>
@@ -60,37 +60,37 @@
</p>
</td>
<td *ngIf="showTopic.indexOf('/SUBJECT') !== -1">
<p><span class="small">{{'notifications.broker.event.table.subjectValue' | translate}}</span><br><span class="badge badge-info">{{eventElement.event.message.value}}</span></p>
<p><span class="small">{{'quality-assurance.event.table.subjectValue' | translate}}</span><br><span class="badge badge-info">{{eventElement.event.message.value}}</span></p>
</td>
<td *ngIf="showTopic.indexOf('/ABSTRACT') !== -1">
<p class="abstract-container" [class.show]="showMore">
<span class="small">{{'notifications.broker.event.table.abstract' | translate}}</span><br>
<span class="small">{{'quality-assurance.event.table.abstract' | translate}}</span><br>
<span class="text-ellipsis">{{eventElement.event.message.abstract}}</span>
</p>
<button class="btn btn-outline-primary btn-sm" (click)="showMore = !showMore">
<i *ngIf="!showMore" class="fas fa-angle-down"></i>
<i *ngIf="showMore" class="fas fa-angle-up"></i>
{{ (showMore ? 'notifications.broker.event.table.less': 'notifications.broker.event.table.more') | translate }}
{{ (showMore ? 'quality-assurance.event.table.less': 'quality-assurance.event.table.more') | translate }}
</button>
</td>
<td *ngIf="showTopic.indexOf('/PROJECT') !== -1">
<p>
{{'notifications.broker.event.table.suggestedProject' | translate}}
{{'quality-assurance.event.table.suggestedProject' | translate}}
</p>
<p>
<span class="small">{{'notifications.broker.event.table.project' | translate}}</span><br>
<span class="small">{{'quality-assurance.event.table.project' | translate}}</span><br>
<a href="https://explore.openaire.eu/search/project?projectId={{ eventElement.event.message.openaireId}}" target="_blank">{{eventElement.event.message.title}}</a>
</p>
<p>
<span *ngIf="eventElement.event.message.acronym"><span class="small">{{'notifications.broker.event.table.acronym' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.acronym}}</span><br></span>
<span *ngIf="eventElement.event.message.code"><span class="small">{{'notifications.broker.event.table.code' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.code}}</span><br></span>
<span *ngIf="eventElement.event.message.funder"><span class="small">{{'notifications.broker.event.table.funder' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.funder}}</span><br></span>
<span *ngIf="eventElement.event.message.fundingProgram"><span class="small">{{'notifications.broker.event.table.fundingProgram' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.fundingProgram}}</span><br></span>
<span *ngIf="eventElement.event.message.jurisdiction"><span class="small">{{'notifications.broker.event.table.jurisdiction' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.jurisdiction}}</span></span>
<span *ngIf="eventElement.event.message.acronym"><span class="small">{{'quality-assurance.event.table.acronym' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.acronym}}</span><br></span>
<span *ngIf="eventElement.event.message.code"><span class="small">{{'quality-assurance.event.table.code' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.code}}</span><br></span>
<span *ngIf="eventElement.event.message.funder"><span class="small">{{'quality-assurance.event.table.funder' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.funder}}</span><br></span>
<span *ngIf="eventElement.event.message.fundingProgram"><span class="small">{{'quality-assurance.event.table.fundingProgram' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.fundingProgram}}</span><br></span>
<span *ngIf="eventElement.event.message.jurisdiction"><span class="small">{{'quality-assurance.event.table.jurisdiction' | translate}}</span> <span class="badge badge-info">{{eventElement.event.message.jurisdiction}}</span></span>
</p>
<hr>
<div>
{{(eventElement.hasProject ? 'notifications.broker.event.project.found' : 'notifications.broker.event.project.notFound') | translate}}
{{(eventElement.hasProject ? 'quality-assurance.event.project.found' : 'quality-assurance.event.project.notFound') | translate}}
<a target="_blank" *ngIf="eventElement.hasProject" title="{{eventElement.projectTitle}}" [routerLink]="['/items', eventElement.projectId]">{{eventElement.handle}}</a>
<div class="btn-group">
<button class="btn btn-outline-primary btn-sm"
@@ -114,19 +114,19 @@
[disabled]="eventElement.isRunning"
(click)="modalChoice('ACCEPTED', eventElement, acceptModal)">
<i class="fas fa-check"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.import' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.import' | translate}}</span>
</button>
<button *ngIf="showTopic.indexOf('/PROJECT') == -1" class="btn btn-outline-success btn-sm button-width" [disabled]="eventElement.isRunning" (click)="executeAction('ACCEPTED', eventElement)">
<i class="fas fa-check"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.accept' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.accept' | translate}}</span>
</button>
<button class="btn btn-outline-dark btn-sm button-width" [disabled]="eventElement.isRunning" (click)="openModal('DISCARDED', eventElement, ignoreModal)">
<i class="fas fa-trash-alt"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.ignore' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.ignore' | translate}}</span>
</button>
<button class="btn btn-outline-danger btn-sm button-width" [disabled]="eventElement.isRunning" (click)="openModal('REJECTED', eventElement, rejectModal)">
<i class="fas fa-trash-alt"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.reject' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.reject' | translate}}</span>
</button>
</div>
</td>
@@ -142,7 +142,7 @@
<div class="col-md-12">
<a class="btn btn-outline-secondary" [routerLink]="['/admin/notifications/quality-assurance']">
<i class="fas fa-angle-double-left"></i>
{{'notifications.broker.events.back' | translate}}
{{'quality-assurance.events.back' | translate}}
</a>
</div>
</div>
@@ -150,58 +150,58 @@
<ng-template #acceptModal let-modal>
<div class="modal-header">
<h4 class="modal-title" id="acceptModal">{{'notifications.broker.event.sure' | translate}}</h4>
<h4 class="modal-title" id="acceptModal">{{'quality-assurance.event.sure' | translate}}</h4>
</div>
<div class="modal-body">
<p>{{'notifications.broker.event.accept.description' | translate}}</p>
<p>{{'quality-assurance.event.accept.description' | translate}}</p>
<button class="btn btn-outline-success float-left" (click)="modal.close('do')">
<i class="fas fa-check"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.import' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.import' | translate}}</span>
</button>
<button class="btn btn-outline-secondary float-right" (click)="modal.close('cancel')">
<i class="fas fa-close"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.cancel' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.cancel' | translate}}</span>
</button>
</div>
</ng-template>
<ng-template #ignoreModal let-modal>
<div class="modal-header">
<h4 class="modal-title" id="ignoreModal">{{'notifications.broker.event.sure' | translate}}</h4>
<h4 class="modal-title" id="ignoreModal">{{'quality-assurance.event.sure' | translate}}</h4>
</div>
<div class="modal-body">
<p>{{'notifications.broker.event.ignore.description' | translate}}</p>
<p>{{'quality-assurance.event.ignore.description' | translate}}</p>
<!-- textarea class="form-control mb-2" [(ngModel)]="selectedReason" placeholder="{{'notifications.broker.event.reason' |translate}}"></textarea -->
<!-- textarea class="form-control mb-2" [(ngModel)]="selectedReason" placeholder="{{'quality-assurance.event.reason' |translate}}"></textarea -->
<button class="btn btn-outline-danger float-left" (click)="modal.close('do')">
<i class="fas fa-trash-alt"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.ignore' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.ignore' | translate}}</span>
</button>
<button class="btn btn-outline-secondary float-right" (click)="modal.close('cancel')">
<i class="fas fa-close"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.cancel' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.cancel' | translate}}</span>
</button>
</div>
</ng-template>
<ng-template #rejectModal let-modal>
<div class="modal-header">
<h4 class="modal-title" id="rejectModal">{{'notifications.broker.event.sure' | translate}}</h4>
<h4 class="modal-title" id="rejectModal">{{'quality-assurance.event.sure' | translate}}</h4>
</div>
<div class="modal-body">
<p>{{'notifications.broker.event.reject.description' | translate}}</p>
<p>{{'quality-assurance.event.reject.description' | translate}}</p>
<!-- textarea class="form-control mb-2" [(ngModel)]="selectedReason" placeholder="{{'notifications.broker.event.reason' |translate}}"></textarea -->
<!-- textarea class="form-control mb-2" [(ngModel)]="selectedReason" placeholder="{{'quality-assurance.event.reason' |translate}}"></textarea -->
<button class="btn btn-outline-danger float-left" (click)="modal.close('do')">
<i class="fas fa-trash-alt"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.reject' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.reject' | translate}}</span>
</button>
<button class="btn btn-outline-secondary float-right" (click)="modal.close('cancel')">
<i class="fas fa-close"></i>
<span class="d-none d-sm-inline">{{'notifications.broker.event.action.cancel' | translate}}</span>
<span class="d-none d-sm-inline">{{'quality-assurance.event.action.cancel' | translate}}</span>
</button>
</div>
</ng-template>

View File

@@ -11,7 +11,7 @@ import { PaginatedList } from '../../../core/data/paginated-list.model';
import { RemoteData } from '../../../core/data/remote-data';
import {
QualityAssuranceEventObject,
OpenaireBrokerEventMessageObject
OpenaireQualityAssuranceEventMessageObject
} from '../../../core/notifications/qa/models/quality-assurance-event.model';
import { QualityAssuranceEventRestService } from '../../../core/notifications/qa/events/quality-assurance-event-rest.service';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
@@ -242,12 +242,12 @@ export class QualityAssuranceEventsComponent implements OnInit {
.subscribe((rd: RemoteData<QualityAssuranceEventObject>) => {
if (rd.isSuccess && rd.statusCode === 200) {
this.notificationsService.success(
this.translateService.instant('notifications.broker.event.action.saved')
this.translateService.instant('quality-assurance.event.action.saved')
);
this.getQualityAssuranceEvents();
} else {
this.notificationsService.error(
this.translateService.instant('notifications.broker.event.action.error')
this.translateService.instant('quality-assurance.event.action.error')
);
}
eventData.isRunning = false;
@@ -274,7 +274,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
.subscribe((rd: RemoteData<QualityAssuranceEventObject>) => {
if (rd.isSuccess) {
this.notificationsService.success(
this.translateService.instant('notifications.broker.event.project.bounded')
this.translateService.instant('quality-assurance.event.project.bounded')
);
eventData.hasProject = true;
eventData.projectTitle = projectTitle;
@@ -282,7 +282,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
eventData.projectId = projectId;
} else {
this.notificationsService.error(
this.translateService.instant('notifications.broker.event.project.error')
this.translateService.instant('quality-assurance.event.project.error')
);
}
eventData.isRunning = false;
@@ -303,7 +303,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
.subscribe((rd: RemoteData<QualityAssuranceEventObject>) => {
if (rd.isSuccess) {
this.notificationsService.success(
this.translateService.instant('notifications.broker.event.project.removed')
this.translateService.instant('quality-assurance.event.project.removed')
);
eventData.hasProject = false;
eventData.projectTitle = null;
@@ -311,7 +311,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
eventData.projectId = null;
} else {
this.notificationsService.error(
this.translateService.instant('notifications.broker.event.project.error')
this.translateService.instant('quality-assurance.event.project.error')
);
}
eventData.isRunning = false;
@@ -323,7 +323,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
* Check if the event has a valid href.
* @param event
*/
public hasPIDHref(event: OpenaireBrokerEventMessageObject): boolean {
public hasPIDHref(event: OpenaireQualityAssuranceEventMessageObject): boolean {
return this.getPIDHref(event) !== null;
}
@@ -331,7 +331,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
* Get the event pid href.
* @param event
*/
public getPIDHref(event: OpenaireBrokerEventMessageObject): string {
public getPIDHref(event: OpenaireQualityAssuranceEventMessageObject): string {
return this.computePIDHref(event);
}
@@ -419,7 +419,7 @@ export class QualityAssuranceEventsComponent implements OnInit {
);
}
protected computePIDHref(event: OpenaireBrokerEventMessageObject) {
protected computePIDHref(event: OpenaireQualityAssuranceEventMessageObject) {
const type = event.type.toLowerCase();
const pid = event.value;
let prefix = null;

View File

@@ -15,7 +15,7 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import {
QualityAssuranceEventObject,
QualityAssuranceEventMessageObject,
OpenaireBrokerEventMessageObject,
OpenaireQualityAssuranceEventMessageObject,
} from '../../../core/notifications/qa/models/quality-assurance-event.model';
import { hasValue, isNotEmpty } from '../../../shared/empty.util';
import { Item } from '../../../core/shared/item.model';
@@ -98,7 +98,7 @@ export class ProjectEntryImportModalComponent implements OnInit {
/**
* The prefix for every i18n key within this modal
*/
labelPrefix = 'notifications.broker.event.modal.';
labelPrefix = 'quality-assurance.event.modal.';
/**
* The search configuration to retrieve project
*/
@@ -181,7 +181,7 @@ export class ProjectEntryImportModalComponent implements OnInit {
public ngOnInit(): void {
this.pagination = Object.assign(new PaginationComponentOptions(), { id: 'notifications-project-bound', pageSize: this.pageSize });
this.projectTitle = (this.externalSourceEntry.projectTitle !== null) ? this.externalSourceEntry.projectTitle
: (this.externalSourceEntry.event.message as OpenaireBrokerEventMessageObject).title;
: (this.externalSourceEntry.event.message as OpenaireQualityAssuranceEventMessageObject).title;
this.searchOptions = Object.assign(new PaginatedSearchOptions(
{
configuration: this.configuration,

View File

@@ -1,15 +1,15 @@
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="border-bottom pb-2">{{'notifications.broker.title'| translate}}</h2>
<p>{{'notifications.broker.source.description'| translate}}</p>
<h2 class="border-bottom pb-2">{{'quality-assurance.title'| translate}}</h2>
<p>{{'quality-assurance.source.description'| translate}}</p>
</div>
</div>
<div class="row">
<div class="col-12">
<h3 class="border-bottom pb-2">{{'notifications.broker.source'| translate}}</h3>
<h3 class="border-bottom pb-2">{{'quality-assurance.source'| translate}}</h3>
<ds-loading class="container" *ngIf="(isSourceLoading() | async)" message="{{'notifications.broker.loading' | translate}}"></ds-loading>
<ds-loading class="container" *ngIf="(isSourceLoading() | async)" message="{{'quality-assurance.loading' | translate}}"></ds-loading>
<ds-pagination *ngIf="!(isSourceLoading() | async)"
[paginationOptions]="paginationConfig"
[collectionSize]="(totalElements$ | async)"
@@ -17,18 +17,18 @@
[hideSortOptions]="true"
(paginationChange)="getQualityAssuranceSource()">
<ds-loading class="container" *ngIf="(isSourceProcessing() | async)" message="'notifications.broker.loading' | translate"></ds-loading>
<ds-loading class="container" *ngIf="(isSourceProcessing() | async)" message="'quality-assurance.loading' | translate"></ds-loading>
<ng-container *ngIf="!(isSourceProcessing() | async)">
<div *ngIf="(sources$|async)?.length == 0" class="alert alert-info w-100 mb-2 mt-2" role="alert">
{{'notifications.broker.noSource' | translate}}
{{'quality-assurance.noSource' | translate}}
</div>
<div *ngIf="(sources$|async)?.length != 0" class="table-responsive mt-2">
<table id="epeople" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{'notifications.broker.table.source' | translate}}</th>
<th scope="col">{{'notifications.broker.table.last-event' | translate}}</th>
<th scope="col">{{'notifications.broker.table.actions' | translate}}</th>
<th scope="col">{{'quality-assurance.table.source' | translate}}</th>
<th scope="col">{{'quality-assurance.table.last-event' | translate}}</th>
<th scope="col">{{'quality-assurance.table.actions' | translate}}</th>
</tr>
</thead>
<tbody>
@@ -39,7 +39,7 @@
<div class="btn-group edit-field">
<button
class="btn btn-outline-primary btn-sm"
title="{{'notifications.broker.button.detail' | translate }}"
title="{{'quality-assurance.button.detail' | translate }}"
[routerLink]="[sourceElement.id]">
<span class="badge badge-info">{{sourceElement.totalEvents}}</span>
<i class="fas fa-info fa-fw"></i>

View File

@@ -53,7 +53,7 @@ export class QualityAssuranceSourceEffects {
@Effect({ dispatch: false }) retrieveAllSourceErrorAction$ = this.actions$.pipe(
ofType(QualityAssuranceSourceActionTypes.RETRIEVE_ALL_SOURCE_ERROR),
tap(() => {
this.notificationsService.error(null, this.translate.get('notifications.broker.source.error.service.retrieve'));
this.notificationsService.error(null, this.translate.get('quality-assurance.source.error.service.retrieve'));
})
);

View File

@@ -1,15 +1,15 @@
<div class="container">
<div class="row">
<div class="col-12">
<h2 class="border-bottom pb-2">{{'notifications.broker.title'| translate}}</h2>
<p>{{'notifications.broker.topics.description'| translate:{source: sourceId} }}</p>
<h2 class="border-bottom pb-2">{{'quality-assurance.title'| translate}}</h2>
<p>{{'quality-assurance.topics.description'| translate:{source: sourceId} }}</p>
</div>
</div>
<div class="row">
<div class="col-12">
<h3 class="border-bottom pb-2">{{'notifications.broker.topics'| translate}}</h3>
<h3 class="border-bottom pb-2">{{'quality-assurance.topics'| translate}}</h3>
<ds-loading class="container" *ngIf="(isTopicsLoading() | async)" message="{{'notifications.broker.loading' | translate}}"></ds-loading>
<ds-loading class="container" *ngIf="(isTopicsLoading() | async)" message="{{'quality-assurance.loading' | translate}}"></ds-loading>
<ds-pagination *ngIf="!(isTopicsLoading() | async)"
[paginationOptions]="paginationConfig"
[collectionSize]="(totalElements$ | async)"
@@ -17,18 +17,18 @@
[hideSortOptions]="true"
(paginationChange)="getQualityAssuranceTopics()">
<ds-loading class="container" *ngIf="(isTopicsProcessing() | async)" message="'notifications.broker.loading' | translate"></ds-loading>
<ds-loading class="container" *ngIf="(isTopicsProcessing() | async)" message="'quality-assurance.loading' | translate"></ds-loading>
<ng-container *ngIf="!(isTopicsProcessing() | async)">
<div *ngIf="(topics$|async)?.length == 0" class="alert alert-info w-100 mb-2 mt-2" role="alert">
{{'notifications.broker.noTopics' | translate}}
{{'quality-assurance.noTopics' | translate}}
</div>
<div *ngIf="(topics$|async)?.length != 0" class="table-responsive mt-2">
<table id="epeople" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{'notifications.broker.table.topic' | translate}}</th>
<th scope="col">{{'notifications.broker.table.last-event' | translate}}</th>
<th scope="col">{{'notifications.broker.table.actions' | translate}}</th>
<th scope="col">{{'quality-assurance.table.topic' | translate}}</th>
<th scope="col">{{'quality-assurance.table.last-event' | translate}}</th>
<th scope="col">{{'quality-assurance.table.actions' | translate}}</th>
</tr>
</thead>
<tbody>
@@ -39,7 +39,7 @@
<div class="btn-group edit-field">
<button
class="btn btn-outline-primary btn-sm"
title="{{'notifications.broker.button.detail' | translate }}"
title="{{'quality-assurance.button.detail' | translate }}"
[routerLink]="[topicElement.id]">
<span class="badge badge-info">{{topicElement.totalEvents}}</span>
<i class="fas fa-info fa-fw"></i>

View File

@@ -53,7 +53,7 @@ export class QualityAssuranceTopicsEffects {
@Effect({ dispatch: false }) retrieveAllTopicsErrorAction$ = this.actions$.pipe(
ofType(QualityAssuranceTopicActionTypes.RETRIEVE_ALL_TOPICS_ERROR),
tap(() => {
this.notificationsService.error(null, this.translate.get('notifications.broker.topic.error.service.retrieve'));
this.notificationsService.error(null, this.translate.get('quality-assurance.topic.error.service.retrieve'));
})
);

View File

@@ -23,7 +23,7 @@ const _getNotificationsState = createFeatureSelector<NotificationsState>('notifi
* @return {QualityAssuranceTopicState}
*/
export function qualityAssuranceTopicsStateSelector(): MemoizedSelector<NotificationsState, QualityAssuranceTopicState> {
return subStateSelector<NotificationsState,QualityAssuranceTopicState>(notificationsSelector, 'brokerTopic');
return subStateSelector<NotificationsState,QualityAssuranceTopicState>(notificationsSelector, 'qaTopic');
}
/**
@@ -41,7 +41,7 @@ export function qualityAssuranceTopicsObjectSelector(): MemoizedSelector<Notific
* @return {boolean}
*/
export const isQualityAssuranceTopicsLoadedSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerTopic.loaded
(state: NotificationsState) => state.qaTopic.loaded
);
/**
@@ -50,7 +50,7 @@ export const isQualityAssuranceTopicsLoadedSelector = createSelector(_getNotific
* @return {boolean}
*/
export const isQualityAssuranceTopicsProcessingSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerTopic.processing
(state: NotificationsState) => state.qaTopic.processing
);
/**
@@ -59,7 +59,7 @@ export const isQualityAssuranceTopicsProcessingSelector = createSelector(_getNot
* @return {number}
*/
export const getQualityAssuranceTopicsTotalPagesSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerTopic.totalPages
(state: NotificationsState) => state.qaTopic.totalPages
);
/**
@@ -68,7 +68,7 @@ export const getQualityAssuranceTopicsTotalPagesSelector = createSelector(_getNo
* @return {number}
*/
export const getQualityAssuranceTopicsCurrentPageSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerTopic.currentPage
(state: NotificationsState) => state.qaTopic.currentPage
);
/**
@@ -77,7 +77,7 @@ export const getQualityAssuranceTopicsCurrentPageSelector = createSelector(_getN
* @return {number}
*/
export const getQualityAssuranceTopicsTotalsSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerTopic.totalElements
(state: NotificationsState) => state.qaTopic.totalElements
);
// Quality Assurance source
@@ -89,7 +89,7 @@ export const getQualityAssuranceTopicsTotalsSelector = createSelector(_getNotifi
* @return {QualityAssuranceSourceState}
*/
export function qualityAssuranceSourceStateSelector(): MemoizedSelector<NotificationsState, QualityAssuranceSourceState> {
return subStateSelector<NotificationsState,QualityAssuranceSourceState>(notificationsSelector, 'brokerSource');
return subStateSelector<NotificationsState,QualityAssuranceSourceState>(notificationsSelector, 'qaSource');
}
/**
@@ -107,7 +107,7 @@ export function qualityAssuranceSourceObjectSelector(): MemoizedSelector<Notific
* @return {boolean}
*/
export const isQualityAssuranceSourceLoadedSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerSource.loaded
(state: NotificationsState) => state.qaSource.loaded
);
/**
@@ -116,7 +116,7 @@ export const isQualityAssuranceSourceLoadedSelector = createSelector(_getNotific
* @return {boolean}
*/
export const isQualityAssuranceSourceProcessingSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerSource.processing
(state: NotificationsState) => state.qaSource.processing
);
/**
@@ -125,7 +125,7 @@ export const isQualityAssuranceSourceProcessingSelector = createSelector(_getNot
* @return {number}
*/
export const getQualityAssuranceSourceTotalPagesSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerSource.totalPages
(state: NotificationsState) => state.qaSource.totalPages
);
/**
@@ -134,7 +134,7 @@ export const getQualityAssuranceSourceTotalPagesSelector = createSelector(_getNo
* @return {number}
*/
export const getQualityAssuranceSourceCurrentPageSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerSource.currentPage
(state: NotificationsState) => state.qaSource.currentPage
);
/**
@@ -143,5 +143,5 @@ export const getQualityAssuranceSourceCurrentPageSelector = createSelector(_getN
* @return {number}
*/
export const getQualityAssuranceSourceTotalsSelector = createSelector(_getNotificationsState,
(state: NotificationsState) => state.brokerSource.totalElements
(state: NotificationsState) => state.qaSource.totalElements
);

View File

@@ -1334,37 +1334,37 @@ export const NotificationsMockDspaceObject: SearchResult<DSpaceObject> = Object.
// -------------------------------------------------------------------------------
export const qualityAssuranceSourceObjectMorePid: QualityAssuranceSourceObject = {
type: new ResourceType('nbsource'),
type: new ResourceType('qasource'),
id: 'ENRICH!MORE!PID',
lastEvent: '2020/10/09 10:11 UTC',
totalEvents: 33,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbsources/ENRICH!MORE!PID'
href: 'https://rest.api/rest/api/integration/qasources/ENRICH!MORE!PID'
}
}
};
export const qualityAssuranceSourceObjectMoreAbstract: QualityAssuranceSourceObject = {
type: new ResourceType('nbsource'),
type: new ResourceType('qasource'),
id: 'ENRICH!MORE!ABSTRACT',
lastEvent: '2020/09/08 21:14 UTC',
totalEvents: 5,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbsources/ENRICH!MORE!ABSTRACT'
href: 'https://rest.api/rest/api/integration/qasources/ENRICH!MORE!ABSTRACT'
}
}
};
export const qualityAssuranceSourceObjectMissingPid: QualityAssuranceSourceObject = {
type: new ResourceType('nbsource'),
type: new ResourceType('qasource'),
id: 'ENRICH!MISSING!PID',
lastEvent: '2020/10/01 07:36 UTC',
totalEvents: 4,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbsources/ENRICH!MISSING!PID'
href: 'https://rest.api/rest/api/integration/qasources/ENRICH!MISSING!PID'
}
}
};
@@ -1373,79 +1373,79 @@ export const qualityAssuranceSourceObjectMissingPid: QualityAssuranceSourceObjec
// -------------------------------------------------------------------------------
export const qualityAssuranceTopicObjectMorePid: QualityAssuranceTopicObject = {
type: new ResourceType('nbtopic'),
type: new ResourceType('qatopic'),
id: 'ENRICH!MORE!PID',
name: 'ENRICH/MORE/PID',
lastEvent: '2020/10/09 10:11 UTC',
totalEvents: 33,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MORE!PID'
href: 'https://rest.api/rest/api/integration/qatopics/ENRICH!MORE!PID'
}
}
};
export const qualityAssuranceTopicObjectMoreAbstract: QualityAssuranceTopicObject = {
type: new ResourceType('nbtopic'),
type: new ResourceType('qatopic'),
id: 'ENRICH!MORE!ABSTRACT',
name: 'ENRICH/MORE/ABSTRACT',
lastEvent: '2020/09/08 21:14 UTC',
totalEvents: 5,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MORE!ABSTRACT'
href: 'https://rest.api/rest/api/integration/qatopics/ENRICH!MORE!ABSTRACT'
}
}
};
export const qualityAssuranceTopicObjectMissingPid: QualityAssuranceTopicObject = {
type: new ResourceType('nbtopic'),
type: new ResourceType('qatopic'),
id: 'ENRICH!MISSING!PID',
name: 'ENRICH/MISSING/PID',
lastEvent: '2020/10/01 07:36 UTC',
totalEvents: 4,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!PID'
href: 'https://rest.api/rest/api/integration/qatopics/ENRICH!MISSING!PID'
}
}
};
export const qualityAssuranceTopicObjectMissingAbstract: QualityAssuranceTopicObject = {
type: new ResourceType('nbtopic'),
type: new ResourceType('qatopic'),
id: 'ENRICH!MISSING!ABSTRACT',
name: 'ENRICH/MISSING/ABSTRACT',
lastEvent: '2020/10/08 16:14 UTC',
totalEvents: 71,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!ABSTRACT'
href: 'https://rest.api/rest/api/integration/qatopics/ENRICH!MISSING!ABSTRACT'
}
}
};
export const qualityAssuranceTopicObjectMissingAcm: QualityAssuranceTopicObject = {
type: new ResourceType('nbtopic'),
type: new ResourceType('qatopic'),
id: 'ENRICH!MISSING!SUBJECT!ACM',
name: 'ENRICH/MISSING/SUBJECT/ACM',
lastEvent: '2020/09/21 17:51 UTC',
totalEvents: 18,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!SUBJECT!ACM'
href: 'https://rest.api/rest/api/integration/qatopics/ENRICH!MISSING!SUBJECT!ACM'
}
}
};
export const qualityAssuranceTopicObjectMissingProject: QualityAssuranceTopicObject = {
type: new ResourceType('nbtopic'),
type: new ResourceType('qatopic'),
id: 'ENRICH!MISSING!PROJECT',
name: 'ENRICH/MISSING/PROJECT',
lastEvent: '2020/09/17 10:28 UTC',
totalEvents: 6,
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbtopics/ENRICH!MISSING!PROJECT'
href: 'https://rest.api/rest/api/integration/qatopics/ENRICH!MISSING!PROJECT'
}
}
};
@@ -1456,7 +1456,7 @@ export const qualityAssuranceTopicObjectMissingProject: QualityAssuranceTopicObj
export const qualityAssuranceEventObjectMissingPid: QualityAssuranceEventObject = {
id: '123e4567-e89b-12d3-a456-426614174001',
uuid: '123e4567-e89b-12d3-a456-426614174001',
type: new ResourceType('nbevent'),
type: new ResourceType('qaevent'),
originalId: 'oai:www.openstarts.units.it:10077/21486',
title: 'Index nominum et rerum',
trust: 0.375,
@@ -1476,13 +1476,13 @@ export const qualityAssuranceEventObjectMissingPid: QualityAssuranceEventObject
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001',
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174001',
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174001/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174001/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174001/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid1)),
@@ -1512,13 +1512,13 @@ export const qualityAssuranceEventObjectMissingPid2: QualityAssuranceEventObject
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174004'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174004/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174004/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174004/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid2)),
@@ -1548,13 +1548,13 @@ export const qualityAssuranceEventObjectMissingPid3: QualityAssuranceEventObject
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174005'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174005/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174005/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174005/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid3)),
@@ -1584,13 +1584,13 @@ export const qualityAssuranceEventObjectMissingPid4: QualityAssuranceEventObject
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174006'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174006/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174006/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174006/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid4)),
@@ -1620,13 +1620,13 @@ export const qualityAssuranceEventObjectMissingPid5: QualityAssuranceEventObject
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174007'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174007/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174007/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174007/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid5)),
@@ -1656,13 +1656,13 @@ export const qualityAssuranceEventObjectMissingPid6: QualityAssuranceEventObject
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174008'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174008/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174008/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174008/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid6)),
@@ -1692,13 +1692,13 @@ export const qualityAssuranceEventObjectMissingAbstract: QualityAssuranceEventOb
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174009'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174009/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174009/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174009/related'
}
},
target: observableOf(createSuccessfulRemoteDataObject(ItemMockPid7)),
@@ -1728,13 +1728,13 @@ export const qualityAssuranceEventObjectMissingProjectFound: QualityAssuranceEve
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174002'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174002/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174002/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174002/related'
}
},
target: createSuccessfulRemoteDataObject$(ItemMockPid8),
@@ -1764,13 +1764,13 @@ export const qualityAssuranceEventObjectMissingProjectNotFound: QualityAssurance
},
_links: {
self: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174003'
},
target: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003/target'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174003/target'
},
related: {
href: 'https://rest.api/rest/api/integration/nbevents/123e4567-e89b-12d3-a456-426614174003/related'
href: 'https://rest.api/rest/api/integration/qaevents/123e4567-e89b-12d3-a456-426614174003/related'
}
},
target: createSuccessfulRemoteDataObject$(ItemMockPid9),

View File

@@ -4,7 +4,7 @@ import { hasValue } from './empty.util';
/**
* Export a function to return a subset of the state by key
*/
export function keySelector<T, V>(parentSelector: Selector<any, any>, subState: string, key: string): MemoizedSelector<T, V> {
export function keySelector<T, V>(parentSelector, subState: string, key: string): MemoizedSelector<T, V> {
return createSelector(parentSelector, (state: T) => {
if (hasValue(state) && hasValue(state[subState])) {
return state[subState][key];
@@ -16,7 +16,7 @@ export function keySelector<T, V>(parentSelector: Selector<any, any>, subState:
/**
* Export a function to return a subset of the state
*/
export function subStateSelector<T, V>(parentSelector: Selector<any, any>, subState: string): MemoizedSelector<T, V> {
export function subStateSelector<T, V>(parentSelector, subState: string): MemoizedSelector<T, V> {
return createSelector(parentSelector, (state: T) => {
if (hasValue(state) && hasValue(state[subState])) {
return state[subState];

View File

@@ -499,15 +499,15 @@
"admin.access-control.groups.form.return": "Back",
"admin.notifications.broker.breadcrumbs": "Quality Assurance",
"admin.quality-assurance.breadcrumbs": "Quality Assurance",
"admin.notifications.event.breadcrumbs": "Broker Suggestions",
"admin.notifications.event.breadcrumbs": "Quality Assurance Suggestions",
"admin.notifications.event.page.title": "Broker Suggestions",
"admin.notifications.event.page.title": "Quality Assurance Suggestions",
"admin.notifications.broker.page.title": "Quality Assurance",
"admin.quality-assurance.page.title": "Quality Assurance",
"admin.notifications.source.breadcrumbs": "Notifications Source",
"admin.notifications.source.breadcrumbs": "Quality Assurance Source",
"admin.search.breadcrumbs": "Administrative Search",
@@ -2687,7 +2687,7 @@
"menu.section.notifications": "Notifications",
"menu.section.notifications_broker": "Quality Assurance",
"menu.section.quality-assurance": "Quality Assurance",
"menu.section.notifications_reciter": "Publication Claim",
@@ -2863,135 +2863,135 @@
"none.listelement.badge": "Item",
"notifications.broker.title": "Notifications",
"quality-assurance.title": "Quality Assurance",
"notifications.broker.topics.description": "Below you can see all the topics received from the subscriptions to {{source}}.",
"quality-assurance.topics.description": "Below you can see all the topics received from the subscriptions to {{source}}.",
"notifications.broker.source.description": "Below you can see all the notification's sources.",
"quality-assurance.source.description": "Below you can see all the notification's sources.",
"notifications.broker.topics": "Current Topics",
"quality-assurance.topics": "Current Topics",
"notifications.broker.source": "Current Sources",
"quality-assurance.source": "Current Sources",
"notifications.broker.table.topic": "Topic",
"quality-assurance.table.topic": "Topic",
"notifications.broker.table.source": "Source",
"quality-assurance.table.source": "Source",
"notifications.broker.table.last-event": "Last Event",
"quality-assurance.table.last-event": "Last Event",
"notifications.broker.table.actions": "Actions",
"quality-assurance.table.actions": "Actions",
"notifications.broker.button.detail": "Show details",
"quality-assurance.button.detail": "Show details",
"notifications.broker.noTopics": "No topics found.",
"quality-assurance.noTopics": "No topics found.",
"notifications.broker.noSource": "No sources found.",
"quality-assurance.noSource": "No sources found.",
"notifications.events.title": "Broker Suggestions",
"notifications.events.title": "Quality Assurance Suggestions",
"notifications.broker.topic.error.service.retrieve": "An error occurred while loading the Quality Assurance topics",
"quality-assurance.topic.error.service.retrieve": "An error occurred while loading the Quality Assurance topics",
"notifications.broker.source.error.service.retrieve": "An error occurred while loading the Quality Assurance source",
"quality-assurance.source.error.service.retrieve": "An error occurred while loading the Quality Assurance source",
"notifications.broker.events.description": "Below the list of all the suggestions for the selected topic.",
"quality-assurance.events.description": "Below the list of all the suggestions for the selected topic.",
"notifications.broker.loading": "Loading ...",
"quality-assurance.loading": "Loading ...",
"notifications.broker.events.topic": "Topic:",
"quality-assurance.events.topic": "Topic:",
"notifications.broker.noEvents": "No suggestions found.",
"quality-assurance.noEvents": "No suggestions found.",
"notifications.broker.event.table.trust": "Trust",
"quality-assurance.event.table.trust": "Trust",
"notifications.broker.event.table.publication": "Publication",
"quality-assurance.event.table.publication": "Publication",
"notifications.broker.event.table.details": "Details",
"quality-assurance.event.table.details": "Details",
"notifications.broker.event.table.project-details": "Project details",
"quality-assurance.event.table.project-details": "Project details",
"notifications.broker.event.table.actions": "Actions",
"quality-assurance.event.table.actions": "Actions",
"notifications.broker.event.action.accept": "Accept suggestion",
"quality-assurance.event.action.accept": "Accept suggestion",
"notifications.broker.event.action.ignore": "Ignore suggestion",
"quality-assurance.event.action.ignore": "Ignore suggestion",
"notifications.broker.event.action.reject": "Reject suggestion",
"quality-assurance.event.action.reject": "Reject suggestion",
"notifications.broker.event.action.import": "Import project and accept suggestion",
"quality-assurance.event.action.import": "Import project and accept suggestion",
"notifications.broker.event.table.pidtype": "PID Type:",
"quality-assurance.event.table.pidtype": "PID Type:",
"notifications.broker.event.table.pidvalue": "PID Value:",
"quality-assurance.event.table.pidvalue": "PID Value:",
"notifications.broker.event.table.subjectValue": "Subject Value:",
"quality-assurance.event.table.subjectValue": "Subject Value:",
"notifications.broker.event.table.abstract": "Abstract:",
"quality-assurance.event.table.abstract": "Abstract:",
"notifications.broker.event.table.suggestedProject": "OpenAIRE Suggested Project data",
"quality-assurance.event.table.suggestedProject": "OpenAIRE Suggested Project data",
"notifications.broker.event.table.project": "Project title:",
"quality-assurance.event.table.project": "Project title:",
"notifications.broker.event.table.acronym": "Acronym:",
"quality-assurance.event.table.acronym": "Acronym:",
"notifications.broker.event.table.code": "Code:",
"quality-assurance.event.table.code": "Code:",
"notifications.broker.event.table.funder": "Funder:",
"quality-assurance.event.table.funder": "Funder:",
"notifications.broker.event.table.fundingProgram": "Funding program:",
"quality-assurance.event.table.fundingProgram": "Funding program:",
"notifications.broker.event.table.jurisdiction": "Jurisdiction:",
"quality-assurance.event.table.jurisdiction": "Jurisdiction:",
"notifications.broker.events.back": "Back to topics",
"quality-assurance.events.back": "Back to topics",
"notifications.broker.event.table.less": "Show less",
"quality-assurance.event.table.less": "Show less",
"notifications.broker.event.table.more": "Show more",
"quality-assurance.event.table.more": "Show more",
"notifications.broker.event.project.found": "Bound to the local record:",
"quality-assurance.event.project.found": "Bound to the local record:",
"notifications.broker.event.project.notFound": "No local record found",
"quality-assurance.event.project.notFound": "No local record found",
"notifications.broker.event.sure": "Are you sure?",
"quality-assurance.event.sure": "Are you sure?",
"notifications.broker.event.ignore.description": "This operation can't be undone. Ignore this suggestion?",
"quality-assurance.event.ignore.description": "This operation can't be undone. Ignore this suggestion?",
"notifications.broker.event.reject.description": "This operation can't be undone. Reject this suggestion?",
"quality-assurance.event.reject.description": "This operation can't be undone. Reject this suggestion?",
"notifications.broker.event.accept.description": "No DSpace project selected. A new project will be created based on the suggestion data.",
"quality-assurance.event.accept.description": "No DSpace project selected. A new project will be created based on the suggestion data.",
"notifications.broker.event.action.cancel": "Cancel",
"quality-assurance.event.action.cancel": "Cancel",
"notifications.broker.event.action.saved": "Your decision has been saved successfully.",
"quality-assurance.event.action.saved": "Your decision has been saved successfully.",
"notifications.broker.event.action.error": "An error has occurred. Your decision has not been saved.",
"quality-assurance.event.action.error": "An error has occurred. Your decision has not been saved.",
"notifications.broker.event.modal.project.title": "Choose a project to bound",
"quality-assurance.event.modal.project.title": "Choose a project to bound",
"notifications.broker.event.modal.project.publication": "Publication:",
"quality-assurance.event.modal.project.publication": "Publication:",
"notifications.broker.event.modal.project.bountToLocal": "Bound to the local record:",
"quality-assurance.event.modal.project.bountToLocal": "Bound to the local record:",
"notifications.broker.event.modal.project.select": "Project search",
"quality-assurance.event.modal.project.select": "Project search",
"notifications.broker.event.modal.project.search": "Search",
"quality-assurance.event.modal.project.search": "Search",
"notifications.broker.event.modal.project.clear": "Clear",
"quality-assurance.event.modal.project.clear": "Clear",
"notifications.broker.event.modal.project.cancel": "Cancel",
"quality-assurance.event.modal.project.cancel": "Cancel",
"notifications.broker.event.modal.project.bound": "Bound project",
"quality-assurance.event.modal.project.bound": "Bound project",
"notifications.broker.event.modal.project.placeholder": "Enter a project name",
"quality-assurance.event.modal.project.placeholder": "Enter a project name",
"notifications.broker.event.modal.project.notFound": "No project found.",
"quality-assurance.event.modal.project.notFound": "No project found.",
"notifications.broker.event.project.bounded": "The project has been linked successfully.",
"quality-assurance.event.project.bounded": "The project has been linked successfully.",
"notifications.broker.event.project.removed": "The project has been successfully unlinked.",
"quality-assurance.event.project.removed": "The project has been successfully unlinked.",
"notifications.broker.event.project.error": "An error has occurred. No operation performed.",
"quality-assurance.event.project.error": "An error has occurred. No operation performed.",
"notifications.broker.event.reason": "Reason",
"quality-assurance.event.reason": "Reason",
"orgunit.listelement.badge": "Organizational Unit",