merge CST-5337

This commit is contained in:
FrancescoMolinaro
2023-12-18 12:10:15 +01:00
59 changed files with 187 additions and 132 deletions

View File

@@ -11,9 +11,11 @@ import { AdminQualityAssuranceTopicsPageResolver } from './admin-quality-assuran
import { AdminQualityAssuranceEventsPageResolver } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.resolver'; import { AdminQualityAssuranceEventsPageResolver } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.resolver';
import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component'; import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component';
import { AdminQualityAssuranceSourcePageResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service'; import { AdminQualityAssuranceSourcePageResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service';
import { SourceDataResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-data.reslover';
import {QualityAssuranceBreadcrumbResolver} from '../../core/breadcrumbs/quality-assurance-breadcrumb.resolver'; import {QualityAssuranceBreadcrumbResolver} from '../../core/breadcrumbs/quality-assurance-breadcrumb.resolver';
import {QualityAssuranceBreadcrumbService} from '../../core/breadcrumbs/quality-assurance-breadcrumb.service'; import {QualityAssuranceBreadcrumbService} from '../../core/breadcrumbs/quality-assurance-breadcrumb.service';
import {
SourceDataResolver
} from "./admin-quality-assurance-source-page-component/admin-quality-assurance-source-data.resolver";
@NgModule({ @NgModule({
imports: [ imports: [

View File

@@ -6,7 +6,7 @@ import { AdminNotificationsRoutingModule } from './admin-notifications-routing.m
import { AdminQualityAssuranceTopicsPageComponent } from './admin-quality-assurance-topics-page/admin-quality-assurance-topics-page.component'; import { AdminQualityAssuranceTopicsPageComponent } from './admin-quality-assurance-topics-page/admin-quality-assurance-topics-page.component';
import { AdminQualityAssuranceEventsPageComponent } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.component'; import { AdminQualityAssuranceEventsPageComponent } from './admin-quality-assurance-events-page/admin-quality-assurance-events-page.component';
import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component'; import { AdminQualityAssuranceSourcePageComponent } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page.component';
import {SuggestionNotificationsModule} from '../../suggestion-notifications/suggestion-notifications.module'; import {NotificationsModule} from '../../notifications/notifications.module';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -14,7 +14,7 @@ import {SuggestionNotificationsModule} from '../../suggestion-notifications/sugg
SharedModule, SharedModule,
CoreModule.forRoot(), CoreModule.forRoot(),
AdminNotificationsRoutingModule, AdminNotificationsRoutingModule,
SuggestionNotificationsModule NotificationsModule
], ],
declarations: [ declarations: [
AdminQualityAssuranceTopicsPageComponent, AdminQualityAssuranceTopicsPageComponent,

View File

@@ -3,13 +3,15 @@ import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot, Router } from '@a
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { QualityAssuranceSourceObject } from '../../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; import { QualityAssuranceSourceObject } from '../../../core/notifications/qa/models/quality-assurance-source.model';
import { QualityAssuranceSourceService } from '../../../suggestion-notifications/qa/source/quality-assurance-source.service'; import { QualityAssuranceSourceService } from '../../../notifications/qa/source/quality-assurance-source.service';
import {environment} from '../../../../environments/environment';
/** /**
* This class represents a resolver that retrieve the route data before the route is activated. * This class represents a resolver that retrieve the route data before the route is activated.
*/ */
@Injectable() @Injectable()
export class SourceDataResolver implements Resolve<Observable<QualityAssuranceSourceObject[]>> { export class SourceDataResolver implements Resolve<Observable<QualityAssuranceSourceObject[]>> {
private pageSize = environment.qualityAssuranceConfig.pageSize;
/** /**
* Initialize the effect class variables. * Initialize the effect class variables.
* @param {QualityAssuranceSourceService} qualityAssuranceSourceService * @param {QualityAssuranceSourceService} qualityAssuranceSourceService
@@ -25,7 +27,7 @@ export class SourceDataResolver implements Resolve<Observable<QualityAssuranceSo
* @returns Observable<QualityAssuranceSourceObject[]> * @returns Observable<QualityAssuranceSourceObject[]>
*/ */
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<QualityAssuranceSourceObject[]> { resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<QualityAssuranceSourceObject[]> {
return this.qualityAssuranceSourceService.getSources(5,0).pipe( return this.qualityAssuranceSourceService.getSources(this.pageSize, 0).pipe(
map((sources: PaginatedList<QualityAssuranceSourceObject>) => { map((sources: PaginatedList<QualityAssuranceSourceObject>) => {
if (sources.page.length === 1) { if (sources.page.length === 1) {
this.router.navigate([this.getResolvedUrl(route) + '/' + sources.page[0].id]); this.router.navigate([this.getResolvedUrl(route) + '/' + sources.page[0].id]);

View File

@@ -5,9 +5,8 @@ import { Injectable } from '@angular/core';
import {map} from 'rxjs/operators'; import {map} from 'rxjs/operators';
import {getFirstCompletedRemoteData} from '../shared/operators'; import {getFirstCompletedRemoteData} from '../shared/operators';
import {TranslateService} from '@ngx-translate/core'; import {TranslateService} from '@ngx-translate/core';
import { import {QualityAssuranceTopicDataService} from "../notifications/qa/topics/quality-assurance-topic-data.service";
QualityAssuranceTopicDataService
} from '../suggestion-notifications/qa/topics/quality-assurance-topic-data.service';
/** /**
@@ -42,7 +41,7 @@ export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderSer
map((topic) => { map((topic) => {
return [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url), return [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
new Breadcrumb(sourceId, `${url}${sourceId}`), new Breadcrumb(sourceId, `${url}${sourceId}`),
new Breadcrumb(topic.payload.name, undefined)]; new Breadcrumb(topicId, undefined)];
}) })
); );
} else { } else {

View File

@@ -157,9 +157,9 @@ import { SequenceService } from './shared/sequence.service';
import { CoreState } from './core-state.model'; import { CoreState } from './core-state.model';
import { GroupDataService } from './eperson/group-data.service'; import { GroupDataService } from './eperson/group-data.service';
import { SubmissionAccessesModel } from './config/models/config-submission-accesses.model'; import { SubmissionAccessesModel } from './config/models/config-submission-accesses.model';
import { QualityAssuranceTopicObject } from './suggestion-notifications/qa/models/quality-assurance-topic.model'; import { QualityAssuranceTopicObject } from './notifications/qa/models/quality-assurance-topic.model';
import { QualityAssuranceEventObject } from './suggestion-notifications/qa/models/quality-assurance-event.model'; import { QualityAssuranceEventObject } from './notifications/qa/models/quality-assurance-event.model';
import { QualityAssuranceSourceObject } from './suggestion-notifications/qa/models/quality-assurance-source.model'; import { QualityAssuranceSourceObject } from './notifications/qa/models/quality-assurance-source.model';
import { RatingAdvancedWorkflowInfo } from './tasks/models/rating-advanced-workflow-info.model'; import { RatingAdvancedWorkflowInfo } from './tasks/models/rating-advanced-workflow-info.model';
import { AdvancedWorkflowInfo } from './tasks/models/advanced-workflow-info.model'; import { AdvancedWorkflowInfo } from './tasks/models/advanced-workflow-info.model';
import { SelectReviewerAdvancedWorkflowInfo } from './tasks/models/select-reviewer-advanced-workflow-info.model'; import { SelectReviewerAdvancedWorkflowInfo } from './tasks/models/select-reviewer-advanced-workflow-info.model';

View File

@@ -34,4 +34,5 @@ export enum FeatureID {
CanEditItem = 'canEditItem', CanEditItem = 'canEditItem',
CanRegisterDOI = 'canRegisterDOI', CanRegisterDOI = 'canRegisterDOI',
CanSubscribe = 'canSubscribeDso', CanSubscribe = 'canSubscribeDso',
CanSeeQA = 'canSeeQA'
} }

View File

@@ -22,7 +22,7 @@ export interface QualityAssuranceEventMessageObject {
/** /**
* The interface representing the Quality Assurance event message * The interface representing the Quality Assurance event message
*/ */
export interface OpenaireQualityAssuranceEventMessageObject { export interface SourceQualityAssuranceEventMessageObject {
/** /**
* The type of 'value' * The type of 'value'
*/ */
@@ -69,9 +69,9 @@ export interface OpenaireQualityAssuranceEventMessageObject {
title: string; title: string;
/** /**
* The OPENAIRE ID. * The Source ID.
*/ */
openaireId: string; sourceId: string;
/** /**
* The PID href. * The PID href.
@@ -136,7 +136,7 @@ export class QualityAssuranceEventObject implements CacheableObject {
* The suggestion data. Data may vary depending on the source * The suggestion data. Data may vary depending on the source
*/ */
@autoserialize @autoserialize
message: OpenaireQualityAssuranceEventMessageObject; message: SourceQualityAssuranceEventMessageObject;
/** /**
* The type of this ConfigObject * The type of this ConfigObject

View File

@@ -530,13 +530,17 @@ export class MenuResolver implements Resolve<boolean> {
* Create menu sections dependent on whether or not the current user is a site administrator * Create menu sections dependent on whether or not the current user is a site administrator
*/ */
createSiteAdministratorMenuSections() { createSiteAdministratorMenuSections() {
this.authorizationService.isAuthorized(FeatureID.AdministratorOf).subscribe((authorized) => { combineLatest([
this.authorizationService.isAuthorized(FeatureID.AdministratorOf),
this.authorizationService.isAuthorized(FeatureID.CanSeeQA)
])
.subscribe(([authorized, canSeeQA]) => {
const menuList = [ const menuList = [
/* Notifications */ /* Notifications */
{ {
id: 'notifications', id: 'notifications',
active: false, active: false,
visible: authorized, visible: authorized && canSeeQA,
model: { model: {
type: MenuItemType.TEXT, type: MenuItemType.TEXT,
text: 'menu.section.notifications' text: 'menu.section.notifications'

View File

@@ -1,7 +1,7 @@
import { QualityAssuranceSourceEffects } from './qa/source/quality-assurance-source.effects'; import { QualityAssuranceSourceEffects } from './qa/source/quality-assurance-source.effects';
import { QualityAssuranceTopicsEffects } from './qa/topics/quality-assurance-topics.effects'; import { QualityAssuranceTopicsEffects } from './qa/topics/quality-assurance-topics.effects';
export const suggestionNotificationsEffects = [ export const notificationsEffects = [
QualityAssuranceTopicsEffects, QualityAssuranceTopicsEffects,
QualityAssuranceSourceEffects QualityAssuranceSourceEffects
]; ];

View File

@@ -2,8 +2,8 @@ import { TestBed } from '@angular/core/testing';
import { Store, StoreModule } from '@ngrx/store'; import { Store, StoreModule } from '@ngrx/store';
import { provideMockStore } from '@ngrx/store/testing'; import { provideMockStore } from '@ngrx/store/testing';
import { cold } from 'jasmine-marbles'; import { cold } from 'jasmine-marbles';
import { suggestionNotificationsReducers } from './suggestion-notifications.reducer'; import { suggestionNotificationsReducers } from './notifications.reducer';
import { SuggestionNotificationsStateService } from './suggestion-notifications-state.service'; import { NotificationsStateService } from './notifications-state.service';
import { import {
qualityAssuranceSourceObjectMissingPid, qualityAssuranceSourceObjectMissingPid,
qualityAssuranceSourceObjectMoreAbstract, qualityAssuranceSourceObjectMoreAbstract,
@@ -16,7 +16,7 @@ import { RetrieveAllTopicsAction } from './qa/topics/quality-assurance-topics.ac
import { RetrieveAllSourceAction } from './qa/source/quality-assurance-source.actions'; import { RetrieveAllSourceAction } from './qa/source/quality-assurance-source.actions';
describe('NotificationsStateService', () => { describe('NotificationsStateService', () => {
let service: SuggestionNotificationsStateService; let service: NotificationsStateService;
let serviceAsAny: any; let serviceAsAny: any;
let store: any; let store: any;
let initialState: any; let initialState: any;
@@ -67,14 +67,14 @@ describe('NotificationsStateService', () => {
], ],
providers: [ providers: [
provideMockStore({ initialState }), provideMockStore({ initialState }),
{ provide: SuggestionNotificationsStateService, useValue: service } { provide: NotificationsStateService, useValue: service }
] ]
}).compileComponents(); }).compileComponents();
}); });
beforeEach(() => { beforeEach(() => {
store = TestBed.get(Store); store = TestBed.get(Store);
service = new SuggestionNotificationsStateService(store); service = new NotificationsStateService(store);
serviceAsAny = service; serviceAsAny = service;
spyOn(store, 'dispatch'); spyOn(store, 'dispatch');
}); });
@@ -159,14 +159,14 @@ describe('NotificationsStateService', () => {
], ],
providers: [ providers: [
provideMockStore({ initialState }), provideMockStore({ initialState }),
{ provide: SuggestionNotificationsStateService, useValue: service } { provide: NotificationsStateService, useValue: service }
] ]
}).compileComponents(); }).compileComponents();
}); });
beforeEach(() => { beforeEach(() => {
store = TestBed.get(Store); store = TestBed.get(Store);
service = new SuggestionNotificationsStateService(store); service = new NotificationsStateService(store);
serviceAsAny = service; serviceAsAny = service;
spyOn(store, 'dispatch'); spyOn(store, 'dispatch');
}); });
@@ -255,14 +255,14 @@ describe('NotificationsStateService', () => {
], ],
providers: [ providers: [
provideMockStore({ initialState }), provideMockStore({ initialState }),
{ provide: SuggestionNotificationsStateService, useValue: service } { provide: NotificationsStateService, useValue: service }
] ]
}).compileComponents(); }).compileComponents();
}); });
beforeEach(() => { beforeEach(() => {
store = TestBed.get(Store); store = TestBed.get(Store);
service = new SuggestionNotificationsStateService(store); service = new NotificationsStateService(store);
serviceAsAny = service; serviceAsAny = service;
spyOn(store, 'dispatch'); spyOn(store, 'dispatch');
}); });
@@ -325,14 +325,14 @@ describe('NotificationsStateService', () => {
], ],
providers: [ providers: [
provideMockStore({ initialState }), provideMockStore({ initialState }),
{ provide: SuggestionNotificationsStateService, useValue: service } { provide: NotificationsStateService, useValue: service }
] ]
}).compileComponents(); }).compileComponents();
}); });
beforeEach(() => { beforeEach(() => {
store = TestBed.get(Store); store = TestBed.get(Store);
service = new SuggestionNotificationsStateService(store); service = new NotificationsStateService(store);
serviceAsAny = service; serviceAsAny = service;
spyOn(store, 'dispatch'); spyOn(store, 'dispatch');
}); });
@@ -417,14 +417,14 @@ describe('NotificationsStateService', () => {
], ],
providers: [ providers: [
provideMockStore({ initialState }), provideMockStore({ initialState }),
{ provide: SuggestionNotificationsStateService, useValue: service } { provide: NotificationsStateService, useValue: service }
] ]
}).compileComponents(); }).compileComponents();
}); });
beforeEach(() => { beforeEach(() => {
store = TestBed.get(Store); store = TestBed.get(Store);
service = new SuggestionNotificationsStateService(store); service = new NotificationsStateService(store);
serviceAsAny = service; serviceAsAny = service;
spyOn(store, 'dispatch'); spyOn(store, 'dispatch');
}); });
@@ -513,14 +513,14 @@ describe('NotificationsStateService', () => {
], ],
providers: [ providers: [
provideMockStore({ initialState }), provideMockStore({ initialState }),
{ provide: SuggestionNotificationsStateService, useValue: service } { provide: NotificationsStateService, useValue: service }
] ]
}).compileComponents(); }).compileComponents();
}); });
beforeEach(() => { beforeEach(() => {
store = TestBed.get(Store); store = TestBed.get(Store);
service = new SuggestionNotificationsStateService(store); service = new NotificationsStateService(store);
serviceAsAny = service; serviceAsAny = service;
spyOn(store, 'dispatch'); spyOn(store, 'dispatch');
}); });

View File

@@ -16,17 +16,17 @@ import {
getQualityAssuranceSourceCurrentPageSelector, getQualityAssuranceSourceCurrentPageSelector,
getQualityAssuranceSourceTotalsSelector getQualityAssuranceSourceTotalsSelector
} from './selectors'; } from './selectors';
import { QualityAssuranceTopicObject } from '../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; import { QualityAssuranceTopicObject } from '../core/notifications/qa/models/quality-assurance-topic.model';
import { SuggestionNotificationsState } from './suggestion-notifications.reducer'; import { SuggestionNotificationsState } from './notifications.reducer';
import { RetrieveAllTopicsAction } from './qa/topics/quality-assurance-topics.actions'; import { RetrieveAllTopicsAction } from './qa/topics/quality-assurance-topics.actions';
import { QualityAssuranceSourceObject } from '../core/suggestion-notifications/qa/models/quality-assurance-source.model'; import { QualityAssuranceSourceObject } from '../core/notifications/qa/models/quality-assurance-source.model';
import { RetrieveAllSourceAction } from './qa/source/quality-assurance-source.actions'; import { RetrieveAllSourceAction } from './qa/source/quality-assurance-source.actions';
/** /**
* The service handling the Notifications State. * The service handling the Notifications State.
*/ */
@Injectable() @Injectable()
export class SuggestionNotificationsStateService { export class NotificationsStateService {
/** /**
* Initialize the service variables. * Initialize the service variables.

View File

@@ -8,16 +8,16 @@ import { SharedModule } from '../shared/shared.module';
import { storeModuleConfig } from '../app.reducer'; import { storeModuleConfig } from '../app.reducer';
import { QualityAssuranceTopicsComponent } from './qa/topics/quality-assurance-topics.component'; import { QualityAssuranceTopicsComponent } from './qa/topics/quality-assurance-topics.component';
import { QualityAssuranceEventsComponent } from './qa/events/quality-assurance-events.component'; import { QualityAssuranceEventsComponent } from './qa/events/quality-assurance-events.component';
import { SuggestionNotificationsStateService } from './suggestion-notifications-state.service'; import { NotificationsStateService } from './notifications-state.service';
import { suggestionNotificationsReducers, SuggestionNotificationsState } from './suggestion-notifications.reducer'; import { suggestionNotificationsReducers, SuggestionNotificationsState } from './notifications.reducer';
import { suggestionNotificationsEffects } from './suggestion-notifications-effects'; import { notificationsEffects } from './notifications-effects';
import { QualityAssuranceTopicsService } from './qa/topics/quality-assurance-topics.service'; import { QualityAssuranceTopicsService } from './qa/topics/quality-assurance-topics.service';
import { import {
QualityAssuranceTopicDataService QualityAssuranceTopicDataService
} from '../core/suggestion-notifications/qa/topics/quality-assurance-topic-data.service'; } from '../core/notifications/qa/topics/quality-assurance-topic-data.service';
import { import {
QualityAssuranceEventDataService QualityAssuranceEventDataService
} from '../core/suggestion-notifications/qa/events/quality-assurance-event-data.service'; } from '../core/notifications/qa/events/quality-assurance-event-data.service';
import { ProjectEntryImportModalComponent } from './qa/project-entry-import-modal/project-entry-import-modal.component'; import { ProjectEntryImportModalComponent } from './qa/project-entry-import-modal/project-entry-import-modal.component';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { SearchModule } from '../shared/search/search.module'; import { SearchModule } from '../shared/search/search.module';
@@ -25,7 +25,7 @@ import { QualityAssuranceSourceComponent } from './qa/source/quality-assurance-s
import { QualityAssuranceSourceService } from './qa/source/quality-assurance-source.service'; import { QualityAssuranceSourceService } from './qa/source/quality-assurance-source.service';
import { import {
QualityAssuranceSourceDataService QualityAssuranceSourceDataService
} from '../core/suggestion-notifications/qa/source/quality-assurance-source-data.service'; } from '../core/notifications/qa/source/quality-assurance-source-data.service';
const MODULES = [ const MODULES = [
CommonModule, CommonModule,
@@ -33,7 +33,7 @@ const MODULES = [
SearchModule, SearchModule,
CoreModule.forRoot(), CoreModule.forRoot(),
StoreModule.forFeature('suggestionNotifications', suggestionNotificationsReducers, storeModuleConfig as StoreConfig<SuggestionNotificationsState, Action>), StoreModule.forFeature('suggestionNotifications', suggestionNotificationsReducers, storeModuleConfig as StoreConfig<SuggestionNotificationsState, Action>),
EffectsModule.forFeature(suggestionNotificationsEffects), EffectsModule.forFeature(notificationsEffects),
TranslateModule TranslateModule
]; ];
@@ -50,7 +50,7 @@ const ENTRY_COMPONENTS = [
]; ];
const PROVIDERS = [ const PROVIDERS = [
SuggestionNotificationsStateService, NotificationsStateService,
QualityAssuranceTopicsService, QualityAssuranceTopicsService,
QualityAssuranceSourceService, QualityAssuranceSourceService,
QualityAssuranceTopicDataService, QualityAssuranceTopicDataService,
@@ -82,5 +82,5 @@ const PROVIDERS = [
/** /**
* This module handles all components that are necessary for the OpenAIRE components * This module handles all components that are necessary for the OpenAIRE components
*/ */
export class SuggestionNotificationsModule { export class NotificationsModule {
} }

View File

@@ -48,13 +48,14 @@
</td> </td>
<td><a *ngIf="eventElement?.target" <td><a *ngIf="eventElement?.target"
target="_blank" target="_blank"
rel="noopener noreferrer"
[routerLink]="['/items', eventElement?.target?.id]">{{eventElement.title}}</a> [routerLink]="['/items', eventElement?.target?.id]">{{eventElement.title}}</a>
<span *ngIf="!eventElement?.target">{{eventElement.title}}</span> <span *ngIf="!eventElement?.target">{{eventElement.title}}</span>
</td> </td>
<td *ngIf="showTopic.indexOf('/PID') !== -1"> <td *ngIf="showTopic.indexOf('/PID') !== -1">
<p><span class="small">{{'quality-assurance.event.table.pidtype' | translate}}</span>&nbsp;<span class="badge badge-info">{{eventElement.event.message.type}}</span></p> <p><span class="small">{{'quality-assurance.event.table.pidtype' | translate}}</span>&nbsp;<span class="badge badge-info">{{eventElement.event.message.type}}</span></p>
<p><span class="small">{{'quality-assurance.event.table.pidvalue' | translate}}</span><br> <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"> <a *ngIf="hasPIDHref(eventElement.event.message); else noPID" href="{{getPIDHref(eventElement.event.message)}}" rel="noopener noreferrer" target="_blank">
{{eventElement.event.message.value}} {{eventElement.event.message.value}}
</a> </a>
<ng-template #noPID><span class="badge badge-info">{{eventElement.event.message.value}}</span></ng-template> <ng-template #noPID><span class="badge badge-info">{{eventElement.event.message.value}}</span></ng-template>
@@ -80,7 +81,7 @@
</p> </p>
<p> <p>
<span class="small">{{'quality-assurance.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> <a href="{{sourceUrlForProjectSearch}}{{ eventElement.event.message.sourceId}}" rel="noopener noreferrer" target="_blank">{{eventElement.event.message.title}}</a>
</p> </p>
<p> <p>
<span *ngIf="eventElement.event.message.acronym"><span class="small">{{'quality-assurance.event.table.acronym' | translate}}</span>&nbsp;<span class="badge badge-info">{{eventElement.event.message.acronym}}</span><br></span> <span *ngIf="eventElement.event.message.acronym"><span class="small">{{'quality-assurance.event.table.acronym' | translate}}</span>&nbsp;<span class="badge badge-info">{{eventElement.event.message.acronym}}</span><br></span>
@@ -92,18 +93,22 @@
<hr> <hr>
<div> <div>
{{(eventElement.hasProject ? 'quality-assurance.event.project.found' : 'quality-assurance.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> <a target="_blank" rel="noopener noreferrer" *ngIf="eventElement.hasProject" title="{{eventElement.projectTitle}}" [routerLink]="['/items', eventElement.projectId]">{{eventElement.handle}} </a>
<div class="btn-group"> <div class="btn-group">
<button *ngIf="!eventElement.hasProject" <button *ngIf="!eventElement.hasProject"
class="btn btn-outline-primary btn-sm" class="btn btn-outline-primary btn-sm"
[disabled]="eventElement.isRunning" [disabled]="eventElement.isRunning"
(click)="openModalLookup(eventElement); $event.stopPropagation();"> (click)="openModalLookup(eventElement); $event.stopPropagation();"
[attr.aria-label]="'quality-assurance.event.modal.project.select' | translate"
>
<i class="fas fa-search"></i> <i class="fas fa-search"></i>
</button> </button>
<button *ngIf="eventElement.hasProject" <button *ngIf="eventElement.hasProject"
class="btn btn-outline-danger btn-sm" class="btn btn-outline-danger btn-sm"
[disabled]="eventElement.isRunning" [disabled]="eventElement.isRunning"
(click)="removeProject(eventElement)"> (click)="removeProject(eventElement)"
[attr.aria-label]="'quality-assurance.event.modal.project.remove' | translate"
>
<i class="fas fa-trash-alt"></i> <i class="fas fa-trash-alt"></i>
</button> </button>
</div> </div>
@@ -116,7 +121,9 @@
ngbTooltip="{{'quality-assurance.event.action.import' | translate}}" ngbTooltip="{{'quality-assurance.event.action.import' | translate}}"
container="body" container="body"
[disabled]="eventElement.isRunning" [disabled]="eventElement.isRunning"
(click)="modalChoice('ACCEPTED', eventElement, acceptModal)"> (click)="modalChoice('ACCEPTED', eventElement, acceptModal)"
[attr.aria-label]="'quality-assurance.event.action.import' | translate"
>
<i class="fas fa-check"></i> <i class="fas fa-check"></i>
</button> </button>
<button *ngIf="showTopic.indexOf('/PROJECT') == -1" <button *ngIf="showTopic.indexOf('/PROJECT') == -1"
@@ -124,21 +131,27 @@
ngbTooltip="{{'quality-assurance.event.action.accept' | translate}}" ngbTooltip="{{'quality-assurance.event.action.accept' | translate}}"
container="body" container="body"
[disabled]="eventElement.isRunning" [disabled]="eventElement.isRunning"
(click)="executeAction('ACCEPTED', eventElement)"> (click)="executeAction('ACCEPTED', eventElement)"
[attr.aria-label]="'quality-assurance.event.action.accept' | translate"
>
<i class="fas fa-check"></i> <i class="fas fa-check"></i>
</button> </button>
<button class="btn btn-outline-dark btn-sm button-width" <button class="btn btn-outline-dark btn-sm button-width"
ngbTooltip="{{'quality-assurance.event.action.ignore' | translate}}" ngbTooltip="{{'quality-assurance.event.action.ignore' | translate}}"
container="body" container="body"
[disabled]="eventElement.isRunning" [disabled]="eventElement.isRunning"
(click)="openModal('DISCARDED', eventElement, ignoreModal)"> (click)="openModal('DISCARDED', eventElement, ignoreModal)"
[attr.aria-label]="'quality-assurance.event.action.ignore' | translate"
>
<i class="fas fa-ban"></i> <i class="fas fa-ban"></i>
</button> </button>
<button class="btn btn-outline-danger btn-sm button-width" <button class="btn btn-outline-danger btn-sm button-width"
ngbTooltip="{{'quality-assurance.event.action.reject' | translate}}" ngbTooltip="{{'quality-assurance.event.action.reject' | translate}}"
container="body" container="body"
[disabled]="eventElement.isRunning" [disabled]="eventElement.isRunning"
(click)="openModal('REJECTED', eventElement, rejectModal)"> (click)="openModal('REJECTED', eventElement, rejectModal)"
[attr.aria-label]="'quality-assurance.event.action.reject' | translate"
>
<i class="fas fa-trash-alt"></i> <i class="fas fa-trash-alt"></i>
</button> </button>
</div> </div>

View File

@@ -7,7 +7,7 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { import {
QualityAssuranceEventDataService QualityAssuranceEventDataService
} from '../../../core/suggestion-notifications/qa/events/quality-assurance-event-data.service'; } from '../../../core/notifications/qa/events/quality-assurance-event-data.service';
import { QualityAssuranceEventsComponent } from './quality-assurance-events.component'; import { QualityAssuranceEventsComponent } from './quality-assurance-events.component';
import { import {
getMockQualityAssuranceEventRestService, getMockQualityAssuranceEventRestService,
@@ -26,7 +26,7 @@ import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { import {
QualityAssuranceEventObject QualityAssuranceEventObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-event.model'; } from '../../../core/notifications/qa/models/quality-assurance-event.model';
import { QualityAssuranceEventData } from '../project-entry-import-modal/project-entry-import-modal.component'; import { QualityAssuranceEventData } from '../project-entry-import-modal/project-entry-import-modal.component';
import { TestScheduler } from 'rxjs/testing'; import { TestScheduler } from 'rxjs/testing';
import { cold, getTestScheduler } from 'jasmine-marbles'; import { cold, getTestScheduler } from 'jasmine-marbles';

View File

@@ -10,12 +10,12 @@ import { SortDirection, SortOptions } from '../../../core/cache/models/sort-opti
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { RemoteData } from '../../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { import {
OpenaireQualityAssuranceEventMessageObject, SourceQualityAssuranceEventMessageObject,
QualityAssuranceEventObject QualityAssuranceEventObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-event.model'; } from '../../../core/notifications/qa/models/quality-assurance-event.model';
import { import {
QualityAssuranceEventDataService QualityAssuranceEventDataService
} from '../../../core/suggestion-notifications/qa/events/quality-assurance-event-data.service'; } from '../../../core/notifications/qa/events/quality-assurance-event-data.service';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { Metadata } from '../../../core/shared/metadata.utils'; import { Metadata } from '../../../core/shared/metadata.utils';
import { followLink } from '../../../shared/utils/follow-link-config.model'; import { followLink } from '../../../shared/utils/follow-link-config.model';
@@ -30,6 +30,7 @@ import { getFirstCompletedRemoteData } from '../../../core/shared/operators';
import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationService } from '../../../core/pagination/pagination.service';
import { Item } from '../../../core/shared/item.model'; import { Item } from '../../../core/shared/item.model';
import { FindListOptions } from '../../../core/data/find-list-options.model'; import { FindListOptions } from '../../../core/data/find-list-options.model';
import {environment} from '../../../../environments/environment';
/** /**
* Component to display the Quality Assurance event list. * Component to display the Quality Assurance event list.
@@ -95,6 +96,10 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
* @type {boolean} * @type {boolean}
*/ */
public showMore = false; public showMore = false;
/**
* The quality assurance source base url for project search
*/
public sourceUrlForProjectSearch = environment.qualityAssuranceConfig.sourceUrlForProjectSearch;
/** /**
* The FindListOptions object * The FindListOptions object
*/ */
@@ -140,7 +145,6 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
return this.getQualityAssuranceEvents(); return this.getQualityAssuranceEvents();
}) })
).subscribe((events: QualityAssuranceEventData[]) => { ).subscribe((events: QualityAssuranceEventData[]) => {
console.log(events);
this.eventsUpdated$.next(events); this.eventsUpdated$.next(events);
this.isEventPageLoading.next(false); this.isEventPageLoading.next(false);
}); });
@@ -328,7 +332,7 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
* Check if the event has a valid href. * Check if the event has a valid href.
* @param event * @param event
*/ */
public hasPIDHref(event: OpenaireQualityAssuranceEventMessageObject): boolean { public hasPIDHref(event: SourceQualityAssuranceEventMessageObject): boolean {
return this.getPIDHref(event) !== null; return this.getPIDHref(event) !== null;
} }
@@ -336,7 +340,7 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
* Get the event pid href. * Get the event pid href.
* @param event * @param event
*/ */
public getPIDHref(event: OpenaireQualityAssuranceEventMessageObject): string { public getPIDHref(event: SourceQualityAssuranceEventMessageObject): string {
return event.pidHref; return event.pidHref;
} }
@@ -356,7 +360,6 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
if (rd.hasSucceeded) { if (rd.hasSucceeded) {
this.totalElements$.next(rd.payload.totalElements); this.totalElements$.next(rd.payload.totalElements);
if (rd.payload.totalElements > 0) { if (rd.payload.totalElements > 0) {
console.log(rd.payload.page);
return this.fetchEvents(rd.payload.page); return this.fetchEvents(rd.payload.page);
} else { } else {
return of([]); return of([]);

View File

@@ -9,7 +9,7 @@
<small>{{ (labelPrefix + label + '.publication' | translate) }}</small> <small>{{ (labelPrefix + label + '.publication' | translate) }}</small>
<div class="mb-3"> <div class="mb-3">
<div class="text-truncate"> <div class="text-truncate">
<a target="_blank" href="/items/{{(externalSourceEntry.event.target|async)?.payload?.id}}"> <a target="_blank" [routerLink]="'/items/{{(externalSourceEntry.event.target|async)?.payload?.id}}'">
{{externalSourceEntry.title}} {{externalSourceEntry.title}}
</a> </a>
</div> </div>
@@ -18,7 +18,7 @@
<small>{{ (labelPrefix + label + '.bountToLocal' |translate) }}</small> <small>{{ (labelPrefix + label + '.bountToLocal' |translate) }}</small>
<div class="mb-3"> <div class="mb-3">
<div class="text-truncate"> <div class="text-truncate">
<a target="_blank" href="/items/{{externalSourceEntry.projectId}}"> <a target="_blank" [routerLink]="'/items/{{externalSourceEntry.projectId}}'">
{{externalSourceEntry.projectTitle}} {{externalSourceEntry.projectTitle}}
</a> </a>
</div> </div>

View File

@@ -13,9 +13,9 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio
import { SearchService } from '../../../core/shared/search/search.service'; import { SearchService } from '../../../core/shared/search/search.service';
import { DSpaceObject } from '../../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { import {
OpenaireQualityAssuranceEventMessageObject, SourceQualityAssuranceEventMessageObject,
QualityAssuranceEventObject, QualityAssuranceEventObject,
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-event.model'; } from '../../../core/notifications/qa/models/quality-assurance-event.model';
import { hasValue, isNotEmpty } from '../../../shared/empty.util'; import { hasValue, isNotEmpty } from '../../../shared/empty.util';
import { Item } from '../../../core/shared/item.model'; import { Item } from '../../../core/shared/item.model';
@@ -180,7 +180,7 @@ export class ProjectEntryImportModalComponent implements OnInit {
public ngOnInit(): void { public ngOnInit(): void {
this.pagination = Object.assign(new PaginationComponentOptions(), { id: 'notifications-project-bound', pageSize: this.pageSize }); this.pagination = Object.assign(new PaginationComponentOptions(), { id: 'notifications-project-bound', pageSize: this.pageSize });
this.projectTitle = (this.externalSourceEntry.projectTitle !== null) ? this.externalSourceEntry.projectTitle this.projectTitle = (this.externalSourceEntry.projectTitle !== null) ? this.externalSourceEntry.projectTitle
: (this.externalSourceEntry.event.message as OpenaireQualityAssuranceEventMessageObject).title; : (this.externalSourceEntry.event.message as SourceQualityAssuranceEventMessageObject).title;
this.searchOptions = Object.assign(new PaginatedSearchOptions( this.searchOptions = Object.assign(new PaginatedSearchOptions(
{ {
configuration: this.configuration, configuration: this.configuration,

View File

@@ -1,7 +1,7 @@
/* eslint-disable max-classes-per-file */ /* eslint-disable max-classes-per-file */
import { Action } from '@ngrx/store'; import { Action } from '@ngrx/store';
import { type } from '../../../shared/ngrx/type'; import { type } from '../../../shared/ngrx/type';
import { QualityAssuranceSourceObject } from '../../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; import { QualityAssuranceSourceObject } from '../../../core/notifications/qa/models/quality-assurance-source.model';
/** /**
* For each action type in an action group, make a simple * For each action type in an action group, make a simple
@@ -12,9 +12,9 @@ import { QualityAssuranceSourceObject } from '../../../core/suggestion-notificat
* action types in the application are unique. * action types in the application are unique.
*/ */
export const QualityAssuranceSourceActionTypes = { export const QualityAssuranceSourceActionTypes = {
ADD_SOURCE: type('dspace/integration/suggestion-notifications/qa/ADD_SOURCE'), ADD_SOURCE: type('dspace/integration/notifications/qa/ADD_SOURCE'),
RETRIEVE_ALL_SOURCE: type('dspace/integration/suggestion-notifications/qa/RETRIEVE_ALL_SOURCE'), RETRIEVE_ALL_SOURCE: type('dspace/integration/notifications/qa/RETRIEVE_ALL_SOURCE'),
RETRIEVE_ALL_SOURCE_ERROR: type('dspace/integration/suggestion-notifications/qa/RETRIEVE_ALL_SOURCE_ERROR'), RETRIEVE_ALL_SOURCE_ERROR: type('dspace/integration/notifications/qa/RETRIEVE_ALL_SOURCE_ERROR'),
}; };
/** /**

View File

@@ -11,7 +11,7 @@ import {
qualityAssuranceSourceObjectMorePid qualityAssuranceSourceObjectMorePid
} from '../../../shared/mocks/notifications.mock'; } from '../../../shared/mocks/notifications.mock';
import { QualityAssuranceSourceComponent } from './quality-assurance-source.component'; import { QualityAssuranceSourceComponent } from './quality-assurance-source.component';
import { SuggestionNotificationsStateService } from '../../suggestion-notifications-state.service'; import { NotificationsStateService } from '../../notifications-state.service';
import { cold } from 'jasmine-marbles'; import { cold } from 'jasmine-marbles';
import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub';
import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationService } from '../../../core/pagination/pagination.service';
@@ -40,7 +40,7 @@ describe('QualityAssuranceSourceComponent test suite', () => {
TestComponent, TestComponent,
], ],
providers: [ providers: [
{ provide: SuggestionNotificationsStateService, useValue: mockNotificationsStateService }, { provide: NotificationsStateService, useValue: mockNotificationsStateService },
{ provide: ActivatedRoute, useValue: { data: observableOf(activatedRouteParams), params: observableOf({}) } }, { provide: ActivatedRoute, useValue: { data: observableOf(activatedRouteParams), params: observableOf({}) } },
{ provide: PaginationService, useValue: paginationService }, { provide: PaginationService, useValue: paginationService },
QualityAssuranceSourceComponent QualityAssuranceSourceComponent

View File

@@ -3,9 +3,9 @@ import { PaginationService } from '../../../core/pagination/pagination.service';
import { Observable, Subscription } from 'rxjs'; import { Observable, Subscription } from 'rxjs';
import { distinctUntilChanged, take } from 'rxjs/operators'; import { distinctUntilChanged, take } from 'rxjs/operators';
import { SortOptions } from '../../../core/cache/models/sort-options.model'; import { SortOptions } from '../../../core/cache/models/sort-options.model';
import { QualityAssuranceSourceObject } from '../../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; import { QualityAssuranceSourceObject } from '../../../core/notifications/qa/models/quality-assurance-source.model';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { SuggestionNotificationsStateService } from '../../suggestion-notifications-state.service'; import { NotificationsStateService } from '../../notifications-state.service';
import { AdminQualityAssuranceSourcePageParams } from '../../../admin/admin-notifications/admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service'; import { AdminQualityAssuranceSourcePageParams } from '../../../admin/admin-notifications/admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service';
import { hasValue } from '../../../shared/empty.util'; import { hasValue } from '../../../shared/empty.util';
@@ -50,11 +50,11 @@ export class QualityAssuranceSourceComponent implements OnInit {
/** /**
* Initialize the component variables. * Initialize the component variables.
* @param {PaginationService} paginationService * @param {PaginationService} paginationService
* @param {SuggestionNotificationsStateService} notificationsStateService * @param {NotificationsStateService} notificationsStateService
*/ */
constructor( constructor(
private paginationService: PaginationService, private paginationService: PaginationService,
private notificationsStateService: SuggestionNotificationsStateService, private notificationsStateService: NotificationsStateService,
) { } ) { }
/** /**

View File

@@ -14,13 +14,13 @@ import {
} from './quality-assurance-source.actions'; } from './quality-assurance-source.actions';
import { import {
QualityAssuranceSourceObject QualityAssuranceSourceObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; } from '../../../core/notifications/qa/models/quality-assurance-source.model';
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { QualityAssuranceSourceService } from './quality-assurance-source.service'; import { QualityAssuranceSourceService } from './quality-assurance-source.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { import {
QualityAssuranceSourceDataService QualityAssuranceSourceDataService
} from '../../../core/suggestion-notifications/qa/source/quality-assurance-source-data.service'; } from '../../../core/notifications/qa/source/quality-assurance-source-data.service';
/** /**
* Provides effect methods for the Quality Assurance source actions. * Provides effect methods for the Quality Assurance source actions.

View File

@@ -1,4 +1,4 @@
import { QualityAssuranceSourceObject } from '../../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; import { QualityAssuranceSourceObject } from '../../../core/notifications/qa/models/quality-assurance-source.model';
import { QualityAssuranceSourceActionTypes, QualityAssuranceSourceActions } from './quality-assurance-source.actions'; import { QualityAssuranceSourceActionTypes, QualityAssuranceSourceActions } from './quality-assurance-source.actions';
/** /**

View File

@@ -13,7 +13,7 @@ import { cold } from 'jasmine-marbles';
import { buildPaginatedList } from '../../../core/data/paginated-list.model'; import { buildPaginatedList } from '../../../core/data/paginated-list.model';
import { import {
QualityAssuranceSourceDataService QualityAssuranceSourceDataService
} from '../../../core/suggestion-notifications/qa/source/quality-assurance-source-data.service'; } from '../../../core/notifications/qa/source/quality-assurance-source-data.service';
import { FindListOptions } from '../../../core/data/find-list-options.model'; import { FindListOptions } from '../../../core/data/find-list-options.model';
describe('QualityAssuranceSourceService', () => { describe('QualityAssuranceSourceService', () => {

View File

@@ -5,13 +5,13 @@ import { map } from 'rxjs/operators';
import { import {
QualityAssuranceSourceDataService QualityAssuranceSourceDataService
} from '../../../core/suggestion-notifications/qa/source/quality-assurance-source-data.service'; } from '../../../core/notifications/qa/source/quality-assurance-source-data.service';
import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model'; import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model';
import { RemoteData } from '../../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { import {
QualityAssuranceSourceObject QualityAssuranceSourceObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; } from '../../../core/notifications/qa/models/quality-assurance-source.model';
import { FindListOptions } from '../../../core/data/find-list-options.model'; import { FindListOptions } from '../../../core/data/find-list-options.model';
import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators';

View File

@@ -1,7 +1,7 @@
/* eslint-disable max-classes-per-file */ /* eslint-disable max-classes-per-file */
import { Action } from '@ngrx/store'; import { Action } from '@ngrx/store';
import { type } from '../../../shared/ngrx/type'; import { type } from '../../../shared/ngrx/type';
import { QualityAssuranceTopicObject } from '../../../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; import { QualityAssuranceTopicObject } from '../../../core/notifications/qa/models/quality-assurance-topic.model';
/** /**
* For each action type in an action group, make a simple * For each action type in an action group, make a simple
@@ -12,9 +12,9 @@ import { QualityAssuranceTopicObject } from '../../../core/suggestion-notificati
* action types in the application are unique. * action types in the application are unique.
*/ */
export const QualityAssuranceTopicActionTypes = { export const QualityAssuranceTopicActionTypes = {
ADD_TOPICS: type('dspace/integration/suggestion-notifications/qa/topic/ADD_TOPICS'), ADD_TOPICS: type('dspace/integration/notifications/qa/topic/ADD_TOPICS'),
RETRIEVE_ALL_TOPICS: type('dspace/integration/suggestion-notifications/qa/topic/RETRIEVE_ALL_TOPICS'), RETRIEVE_ALL_TOPICS: type('dspace/integration/notifications/qa/topic/RETRIEVE_ALL_TOPICS'),
RETRIEVE_ALL_TOPICS_ERROR: type('dspace/integration/suggestion-notifications/qa/topic/RETRIEVE_ALL_TOPICS_ERROR'), RETRIEVE_ALL_TOPICS_ERROR: type('dspace/integration/notifications/qa/topic/RETRIEVE_ALL_TOPICS_ERROR'),
}; };
/** /**

View File

@@ -12,7 +12,7 @@ import {
qualityAssuranceTopicObjectMorePid qualityAssuranceTopicObjectMorePid
} from '../../../shared/mocks/notifications.mock'; } from '../../../shared/mocks/notifications.mock';
import { QualityAssuranceTopicsComponent } from './quality-assurance-topics.component'; import { QualityAssuranceTopicsComponent } from './quality-assurance-topics.component';
import { SuggestionNotificationsStateService } from '../../suggestion-notifications-state.service'; import { NotificationsStateService } from '../../notifications-state.service';
import { cold } from 'jasmine-marbles'; import { cold } from 'jasmine-marbles';
import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub'; import { PaginationServiceStub } from '../../../shared/testing/pagination-service.stub';
import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationService } from '../../../core/pagination/pagination.service';
@@ -42,7 +42,7 @@ describe('QualityAssuranceTopicsComponent test suite', () => {
TestComponent, TestComponent,
], ],
providers: [ providers: [
{ provide: SuggestionNotificationsStateService, useValue: mockNotificationsStateService }, { provide: NotificationsStateService, useValue: mockNotificationsStateService },
{ provide: ActivatedRoute, useValue: { data: observableOf(activatedRouteParams), snapshot: { { provide: ActivatedRoute, useValue: { data: observableOf(activatedRouteParams), snapshot: {
paramMap: { paramMap: {
get: () => 'openaire', get: () => 'openaire',

View File

@@ -6,10 +6,10 @@ import { distinctUntilChanged, take } from 'rxjs/operators';
import { SortOptions } from '../../../core/cache/models/sort-options.model'; import { SortOptions } from '../../../core/cache/models/sort-options.model';
import { import {
QualityAssuranceTopicObject QualityAssuranceTopicObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; } from '../../../core/notifications/qa/models/quality-assurance-topic.model';
import { hasValue } from '../../../shared/empty.util'; import { hasValue } from '../../../shared/empty.util';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
import { SuggestionNotificationsStateService } from '../../suggestion-notifications-state.service'; import { NotificationsStateService } from '../../notifications-state.service';
import { import {
AdminQualityAssuranceTopicsPageParams AdminQualityAssuranceTopicsPageParams
} from '../../../admin/admin-notifications/admin-quality-assurance-topics-page/admin-quality-assurance-topics-page-resolver.service'; } from '../../../admin/admin-notifications/admin-quality-assurance-topics-page/admin-quality-assurance-topics-page-resolver.service';
@@ -64,13 +64,13 @@ export class QualityAssuranceTopicsComponent implements OnInit {
* Initialize the component variables. * Initialize the component variables.
* @param {PaginationService} paginationService * @param {PaginationService} paginationService
* @param {ActivatedRoute} activatedRoute * @param {ActivatedRoute} activatedRoute
* @param {SuggestionNotificationsStateService} notificationsStateService * @param {NotificationsStateService} notificationsStateService
* @param {QualityAssuranceTopicsService} qualityAssuranceTopicsService * @param {QualityAssuranceTopicsService} qualityAssuranceTopicsService
*/ */
constructor( constructor(
private paginationService: PaginationService, private paginationService: PaginationService,
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private notificationsStateService: SuggestionNotificationsStateService, private notificationsStateService: NotificationsStateService,
private qualityAssuranceTopicsService: QualityAssuranceTopicsService private qualityAssuranceTopicsService: QualityAssuranceTopicsService
) { ) {
} }

View File

@@ -14,13 +14,13 @@ import {
} from './quality-assurance-topics.actions'; } from './quality-assurance-topics.actions';
import { import {
QualityAssuranceTopicObject QualityAssuranceTopicObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; } from '../../../core/notifications/qa/models/quality-assurance-topic.model';
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { QualityAssuranceTopicsService } from './quality-assurance-topics.service'; import { QualityAssuranceTopicsService } from './quality-assurance-topics.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { import {
QualityAssuranceTopicDataService QualityAssuranceTopicDataService
} from '../../../core/suggestion-notifications/qa/topics/quality-assurance-topic-data.service'; } from '../../../core/notifications/qa/topics/quality-assurance-topic-data.service';
/** /**
* Provides effect methods for the Quality Assurance topics actions. * Provides effect methods for the Quality Assurance topics actions.

View File

@@ -1,4 +1,4 @@
import { QualityAssuranceTopicObject } from '../../../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; import { QualityAssuranceTopicObject } from '../../../core/notifications/qa/models/quality-assurance-topic.model';
import { QualityAssuranceTopicActionTypes, QualityAssuranceTopicsActions } from './quality-assurance-topics.actions'; import { QualityAssuranceTopicActionTypes, QualityAssuranceTopicsActions } from './quality-assurance-topics.actions';
/** /**

View File

@@ -4,7 +4,7 @@ import { QualityAssuranceTopicsService } from './quality-assurance-topics.servic
import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model'; import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model';
import { import {
QualityAssuranceTopicDataService QualityAssuranceTopicDataService
} from '../../../core/suggestion-notifications/qa/topics/quality-assurance-topic-data.service'; } from '../../../core/notifications/qa/topics/quality-assurance-topic-data.service';
import { PageInfo } from '../../../core/shared/page-info.model'; import { PageInfo } from '../../../core/shared/page-info.model';
import { import {
getMockQualityAssuranceTopicRestService, getMockQualityAssuranceTopicRestService,

View File

@@ -3,13 +3,13 @@ import { Observable } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { import {
QualityAssuranceTopicDataService QualityAssuranceTopicDataService
} from '../../../core/suggestion-notifications/qa/topics/quality-assurance-topic-data.service'; } from '../../../core/notifications/qa/topics/quality-assurance-topic-data.service';
import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model'; import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model';
import { RemoteData } from '../../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { PaginatedList } from '../../../core/data/paginated-list.model'; import { PaginatedList } from '../../../core/data/paginated-list.model';
import { import {
QualityAssuranceTopicObject QualityAssuranceTopicObject
} from '../../../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; } from '../../../core/notifications/qa/models/quality-assurance-topic.model';
import { RequestParam } from '../../../core/cache/models/request-param.model'; import { RequestParam } from '../../../core/cache/models/request-param.model';
import { FindListOptions } from '../../../core/data/find-list-options.model'; import { FindListOptions } from '../../../core/data/find-list-options.model';
import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators';

View File

@@ -1,12 +1,12 @@
import { createFeatureSelector, createSelector, MemoizedSelector } from '@ngrx/store'; import { createFeatureSelector, createSelector, MemoizedSelector } from '@ngrx/store';
import { subStateSelector } from '../shared/selector.util'; import { subStateSelector } from '../shared/selector.util';
import { suggestionNotificationsSelector, SuggestionNotificationsState } from './suggestion-notifications.reducer'; import { suggestionNotificationsSelector, SuggestionNotificationsState } from './notifications.reducer';
import { QualityAssuranceTopicObject } from '../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; import { QualityAssuranceTopicObject } from '../core/notifications/qa/models/quality-assurance-topic.model';
import { QualityAssuranceTopicState } from './qa/topics/quality-assurance-topics.reducer'; import { QualityAssuranceTopicState } from './qa/topics/quality-assurance-topics.reducer';
import { QualityAssuranceSourceState } from './qa/source/quality-assurance-source.reducer'; import { QualityAssuranceSourceState } from './qa/source/quality-assurance-source.reducer';
import { import {
QualityAssuranceSourceObject QualityAssuranceSourceObject
} from '../core/suggestion-notifications/qa/models/quality-assurance-source.model'; } from '../core/notifications/qa/models/quality-assurance-source.model';
/** /**
* Returns the Notifications state. * Returns the Notifications state.

View File

@@ -2,16 +2,16 @@ import { of as observableOf } from 'rxjs';
import { ResourceType } from '../../core/shared/resource-type'; import { ResourceType } from '../../core/shared/resource-type';
import { import {
QualityAssuranceTopicObject QualityAssuranceTopicObject
} from '../../core/suggestion-notifications/qa/models/quality-assurance-topic.model'; } from '../../core/notifications/qa/models/quality-assurance-topic.model';
import { import {
QualityAssuranceEventObject QualityAssuranceEventObject
} from '../../core/suggestion-notifications/qa/models/quality-assurance-event.model'; } from '../../core/notifications/qa/models/quality-assurance-event.model';
import { import {
QualityAssuranceTopicDataService QualityAssuranceTopicDataService
} from '../../core/suggestion-notifications/qa/topics/quality-assurance-topic-data.service'; } from '../../core/notifications/qa/topics/quality-assurance-topic-data.service';
import { import {
QualityAssuranceEventDataService QualityAssuranceEventDataService
} from '../../core/suggestion-notifications/qa/events/quality-assurance-event-data.service'; } from '../../core/notifications/qa/events/quality-assurance-event-data.service';
import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model';
import { Item } from '../../core/shared/item.model'; import { Item } from '../../core/shared/item.model';
import { import {
@@ -22,7 +22,7 @@ import {
import { SearchResult } from '../search/models/search-result.model'; import { SearchResult } from '../search/models/search-result.model';
import { import {
QualityAssuranceSourceObject QualityAssuranceSourceObject
} from '../../core/suggestion-notifications/qa/models/quality-assurance-source.model'; } from '../../core/notifications/qa/models/quality-assurance-source.model';
// REST Mock --------------------------------------------------------------------- // REST Mock ---------------------------------------------------------------------
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
@@ -80,7 +80,7 @@ const ItemMockPid1: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -199,7 +199,7 @@ const ItemMockPid2: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -318,7 +318,7 @@ const ItemMockPid3: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -437,7 +437,7 @@ const ItemMockPid4: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -556,7 +556,7 @@ const ItemMockPid5: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -675,7 +675,7 @@ const ItemMockPid6: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -794,7 +794,7 @@ const ItemMockPid7: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -913,7 +913,7 @@ export const ItemMockPid8: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -1032,7 +1032,7 @@ export const ItemMockPid9: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -1151,7 +1151,7 @@ export const ItemMockPid10: Item = Object.assign(
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -1270,7 +1270,7 @@ export const NotificationsMockDspaceObject: SearchResult<DSpaceObject> = Object.
'dc.identifier.uri': [ 'dc.identifier.uri': [
{ {
language: null, language: null,
value: 'http://dspace7.4science.it/xmlui/handle/10673/6' value: 'https://demo.dspace.org/handle/10673/6'
} }
], ],
'dc.description.abstract': [ 'dc.description.abstract': [
@@ -1476,7 +1476,7 @@ export const qualityAssuranceEventObjectMissingPid: QualityAssuranceEventObject
value: '10.18848/1447-9494/cgp/v15i09/45934', value: '10.18848/1447-9494/cgp/v15i09/45934',
pidHref: 'https://doi.org/10.18848/1447-9494/cgp/v15i09/45934', pidHref: 'https://doi.org/10.18848/1447-9494/cgp/v15i09/45934',
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1513,7 +1513,7 @@ export const qualityAssuranceEventObjectMissingPid2: QualityAssuranceEventObject
value: 'http://thesis2.sba.units.it/store/handle/item/12238', value: 'http://thesis2.sba.units.it/store/handle/item/12238',
pidHref:'http://thesis2.sba.units.it/store/handle/item/12238', pidHref:'http://thesis2.sba.units.it/store/handle/item/12238',
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1550,7 +1550,7 @@ export const qualityAssuranceEventObjectMissingPid3: QualityAssuranceEventObject
value: '10.4324/9780203408889', value: '10.4324/9780203408889',
pidHref: 'https://doi.org/10.4324/9780203408889', pidHref: 'https://doi.org/10.4324/9780203408889',
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1587,7 +1587,7 @@ export const qualityAssuranceEventObjectMissingPid4: QualityAssuranceEventObject
value: '10.1080/13698230.2018.1430104', value: '10.1080/13698230.2018.1430104',
pidHref: 'https://doi.org/10.1080/13698230.2018.1430104', pidHref: 'https://doi.org/10.1080/13698230.2018.1430104',
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1624,7 +1624,7 @@ export const qualityAssuranceEventObjectMissingPid5: QualityAssuranceEventObject
value: 'http://thesis2.sba.units.it/store/handle/item/12477', value: 'http://thesis2.sba.units.it/store/handle/item/12477',
pidHref:'http://thesis2.sba.units.it/store/handle/item/12477', pidHref:'http://thesis2.sba.units.it/store/handle/item/12477',
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1661,7 +1661,7 @@ export const qualityAssuranceEventObjectMissingPid6: QualityAssuranceEventObject
value: '10.1111/j.1475-4975.2004.00098.x', value: '10.1111/j.1475-4975.2004.00098.x',
pidHref: 'https://doi.org/10.1111/j.1475-4975.2004.00098.x', pidHref: 'https://doi.org/10.1111/j.1475-4975.2004.00098.x',
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1698,7 +1698,7 @@ export const qualityAssuranceEventObjectMissingAbstract: QualityAssuranceEventOb
value: null, value: null,
pidHref: null, pidHref: null,
abstract: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit.', abstract: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla scelerisque vestibulum tellus sed lacinia. Aenean vitae sapien a quam congue ultrices. Sed vehicula sollicitudin ligula, vitae lacinia velit.',
openaireId: null, sourceId: null,
acronym: null, acronym: null,
code: null, code: null,
funder: null, funder: null,
@@ -1735,7 +1735,7 @@ export const qualityAssuranceEventObjectMissingProjectFound: QualityAssuranceEve
value: null, value: null,
pidHref: null, pidHref: null,
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: 'PAThs', acronym: 'PAThs',
code: '687567', code: '687567',
funder: 'EC', funder: 'EC',
@@ -1772,7 +1772,7 @@ export const qualityAssuranceEventObjectMissingProjectNotFound: QualityAssurance
value: null, value: null,
pidHref: null, pidHref: null,
abstract: null, abstract: null,
openaireId: null, sourceId: null,
acronym: 'PAThs', acronym: 'PAThs',
code: '687567B', code: '687567B',
funder: 'EC', funder: 'EC',
@@ -1799,7 +1799,7 @@ export const qualityAssuranceEventObjectMissingProjectNotFound: QualityAssurance
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
/** /**
* Mock for [[SuggestionNotificationsStateService]] * Mock for [[NotificationsStateService]]
*/ */
export function getMockNotificationsStateService(): any { export function getMockNotificationsStateService(): any {
return jasmine.createSpyObj('NotificationsStateService', { return jasmine.createSpyObj('NotificationsStateService', {

View File

@@ -3206,6 +3206,8 @@
"quality-assurance.event.modal.project.bound": "Bound project", "quality-assurance.event.modal.project.bound": "Bound project",
"quality-assurance.event.modal.project.remove": "Remove",
"quality-assurance.event.modal.project.placeholder": "Enter a project name", "quality-assurance.event.modal.project.placeholder": "Enter a project name",
"quality-assurance.event.modal.project.notFound": "No project found.", "quality-assurance.event.modal.project.notFound": "No project found.",

View File

@@ -22,6 +22,7 @@ import { HomeConfig } from './homepage-config.interface';
import { MarkdownConfig } from './markdown-config.interface'; import { MarkdownConfig } from './markdown-config.interface';
import { FilterVocabularyConfig } from './filter-vocabulary-config'; import { FilterVocabularyConfig } from './filter-vocabulary-config';
import { DiscoverySortConfig } from './discovery-sort.config'; import { DiscoverySortConfig } from './discovery-sort.config';
import {QualityAssuranceConfig} from './quality-assurance.config';
interface AppConfig extends Config { interface AppConfig extends Config {
ui: UIServerConfig; ui: UIServerConfig;
@@ -48,6 +49,7 @@ interface AppConfig extends Config {
markdown: MarkdownConfig; markdown: MarkdownConfig;
vocabularies: FilterVocabularyConfig[]; vocabularies: FilterVocabularyConfig[];
comcolSelectionSort: DiscoverySortConfig; comcolSelectionSort: DiscoverySortConfig;
qualityAssuranceConfig: QualityAssuranceConfig;
} }
/** /**

View File

@@ -22,6 +22,7 @@ import { HomeConfig } from './homepage-config.interface';
import { MarkdownConfig } from './markdown-config.interface'; import { MarkdownConfig } from './markdown-config.interface';
import { FilterVocabularyConfig } from './filter-vocabulary-config'; import { FilterVocabularyConfig } from './filter-vocabulary-config';
import { DiscoverySortConfig } from './discovery-sort.config'; import { DiscoverySortConfig } from './discovery-sort.config';
import {QualityAssuranceConfig} from './quality-assurance.config';
export class DefaultAppConfig implements AppConfig { export class DefaultAppConfig implements AppConfig {
production = false; production = false;
@@ -432,4 +433,9 @@ export class DefaultAppConfig implements AppConfig {
sortField:'dc.title', sortField:'dc.title',
sortDirection:'ASC', sortDirection:'ASC',
}; };
qualityAssuranceConfig: QualityAssuranceConfig = {
sourceUrlForProjectSearch: 'https://explore.openaire.eu/search/project?projectId=',
pageSize: 5,
};
} }

View File

@@ -0,0 +1,17 @@
import { Config } from './config.interface';
/**
* Config that determines a metadata sorting config.
* It's created mainly to sort by metadata community and collection edition and creation
*/
export class QualityAssuranceConfig implements Config {
/**
* Url for project search on quality assurance resource
*/
public sourceUrlForProjectSearch: string;
/**
* default count of QA sources to load
*/
public pageSize: number;
}

View File

@@ -306,6 +306,10 @@ export const environment: BuildConfig = {
sortField:'dc.title', sortField:'dc.title',
sortDirection:'ASC', sortDirection:'ASC',
}, },
qualityAssuranceConfig: {
sourceUrlForProjectSearch: 'https://explore.openaire.eu/search/project?projectId=',
pageSize: 5,
},
vocabularies: [ vocabularies: [
{ {