resolve conflicts after main alignment

This commit is contained in:
FrancescoMolinaro
2024-02-28 17:58:24 +01:00
parent 47a907c1d2
commit 5eb2405a68
12 changed files with 158 additions and 69 deletions

View File

@@ -313,7 +313,10 @@ export class LdnServiceFormComponent implements OnInit, OnDestroy {
*/ */
selectInboundItemFilter(filterValue: string, index: number): void { selectInboundItemFilter(filterValue: string, index: number): void {
const filterArray = (this.formModel.get('notifyServiceInboundPatterns') as FormArray); const filterArray = (this.formModel.get('notifyServiceInboundPatterns') as FormArray);
filterArray.controls[index].patchValue({constraint: filterValue, constraintFormatted: this.translateService.instant(filterValue + '.label')}); filterArray.controls[index].patchValue({
constraint: filterValue,
constraintFormatted: this.translateService.instant((filterValue !== '' ? filterValue : 'ldn.no-filter') + '.label')
});
filterArray.markAllAsTouched(); filterArray.markAllAsTouched();
} }

View File

@@ -6,22 +6,37 @@ import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.r
import { I18nBreadcrumbsService } from '../../core/breadcrumbs/i18n-breadcrumbs.service'; import { I18nBreadcrumbsService } from '../../core/breadcrumbs/i18n-breadcrumbs.service';
import { PUBLICATION_CLAIMS_PATH } from './admin-notifications-routing-paths'; import { PUBLICATION_CLAIMS_PATH } from './admin-notifications-routing-paths';
import { AdminNotificationsPublicationClaimPageComponent } from './admin-notifications-publication-claim-page/admin-notifications-publication-claim-page.component'; import { AdminNotificationsPublicationClaimPageComponent } from './admin-notifications-publication-claim-page/admin-notifications-publication-claim-page.component';
import { AdminNotificationsPublicationClaimPageResolver } from './admin-notifications-publication-claim-page/admin-notifications-publication-claim-page-resolver.service';
import { QUALITY_ASSURANCE_EDIT_PATH } from './admin-notifications-routing-paths'; import { QUALITY_ASSURANCE_EDIT_PATH } from './admin-notifications-routing-paths';
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 { AdminQualityAssuranceTopicsPageResolver } from './admin-quality-assurance-topics-page/admin-quality-assurance-topics-page-resolver.service';
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 { AdminQualityAssuranceSourcePageResolver } from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-page-resolver.service';
import { import {
SiteAdministratorGuard SiteAdministratorGuard
} from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; } from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
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 {
QualityAssuranceEventsPageResolver
} from '../../quality-assurance-notifications-pages/quality-assurance-events-page/quality-assurance-events-page.resolver';
import {
AdminNotificationsPublicationClaimPageResolver
} from '../../quality-assurance-notifications-pages/notifications-suggestion-targets-page/notifications-suggestion-targets-page-resolver.service';
import {
QualityAssuranceTopicsPageComponent
} from '../../quality-assurance-notifications-pages/quality-assurance-topics-page/quality-assurance-topics-page.component';
import {
QualityAssuranceTopicsPageResolver
} from '../../quality-assurance-notifications-pages/quality-assurance-topics-page/quality-assurance-topics-page-resolver.service';
import {
QualityAssuranceSourcePageComponent
} from '../../quality-assurance-notifications-pages/quality-assurance-source-page-component/quality-assurance-source-page.component';
import {
QualityAssuranceSourcePageResolver
} from '../../quality-assurance-notifications-pages/quality-assurance-source-page-component/quality-assurance-source-page-resolver.service';
import { import {
SourceDataResolver SourceDataResolver
} from './admin-quality-assurance-source-page-component/admin-quality-assurance-source-data.resolver'; } from '../../quality-assurance-notifications-pages/quality-assurance-source-page-component/quality-assurance-source-data.resolver';
import {
QualityAssuranceEventsPageComponent
} from '../../quality-assurance-notifications-pages/quality-assurance-events-page/quality-assurance-events-page.component';
@NgModule({ @NgModule({
imports: [ imports: [
@@ -44,11 +59,11 @@ import {
{ {
canActivate: [ AuthenticatedGuard ], canActivate: [ AuthenticatedGuard ],
path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId`, path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId`,
component: AdminQualityAssuranceTopicsPageComponent, component: QualityAssuranceTopicsPageComponent,
pathMatch: 'full', pathMatch: 'full',
resolve: { resolve: {
breadcrumb: QualityAssuranceBreadcrumbResolver, breadcrumb: QualityAssuranceBreadcrumbResolver,
openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver openaireQualityAssuranceTopicsParams: QualityAssuranceTopicsPageResolver
}, },
data: { data: {
title: 'admin.quality-assurance.page.title', title: 'admin.quality-assurance.page.title',
@@ -59,11 +74,11 @@ import {
{ {
canActivate: [ AuthenticatedGuard ], canActivate: [ AuthenticatedGuard ],
path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/target/:targetId`, path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/target/:targetId`,
component: AdminQualityAssuranceTopicsPageComponent, component: QualityAssuranceTopicsPageComponent,
pathMatch: 'full', pathMatch: 'full',
resolve: { resolve: {
breadcrumb: I18nBreadcrumbResolver, breadcrumb: I18nBreadcrumbResolver,
openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver openaireQualityAssuranceTopicsParams: QualityAssuranceTopicsPageResolver
}, },
data: { data: {
title: 'admin.quality-assurance.page.title', title: 'admin.quality-assurance.page.title',
@@ -74,11 +89,11 @@ import {
{ {
canActivate: [ SiteAdministratorGuard ], canActivate: [ SiteAdministratorGuard ],
path: `${QUALITY_ASSURANCE_EDIT_PATH}`, path: `${QUALITY_ASSURANCE_EDIT_PATH}`,
component: AdminQualityAssuranceSourcePageComponent, component: QualityAssuranceSourcePageComponent,
pathMatch: 'full', pathMatch: 'full',
resolve: { resolve: {
breadcrumb: I18nBreadcrumbResolver, breadcrumb: I18nBreadcrumbResolver,
openaireQualityAssuranceSourceParams: AdminQualityAssuranceSourcePageResolver, openaireQualityAssuranceSourceParams: QualityAssuranceSourcePageResolver,
sourceData: SourceDataResolver sourceData: SourceDataResolver
}, },
data: { data: {
@@ -90,11 +105,11 @@ import {
{ {
canActivate: [ AuthenticatedGuard ], canActivate: [ AuthenticatedGuard ],
path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/:topicId`, path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/:topicId`,
component: AdminQualityAssuranceEventsPageComponent, component: QualityAssuranceEventsPageComponent,
pathMatch: 'full', pathMatch: 'full',
resolve: { resolve: {
breadcrumb: QualityAssuranceBreadcrumbResolver, breadcrumb: QualityAssuranceBreadcrumbResolver,
openaireQualityAssuranceEventsParams: AdminQualityAssuranceEventsPageResolver openaireQualityAssuranceEventsParams: QualityAssuranceEventsPageResolver
}, },
data: { data: {
title: 'admin.notifications.event.page.title', title: 'admin.notifications.event.page.title',
@@ -109,10 +124,10 @@ import {
I18nBreadcrumbsService, I18nBreadcrumbsService,
AdminNotificationsPublicationClaimPageResolver, AdminNotificationsPublicationClaimPageResolver,
SourceDataResolver, SourceDataResolver,
AdminQualityAssuranceSourcePageResolver, QualityAssuranceSourcePageResolver,
AdminQualityAssuranceTopicsPageResolver, QualityAssuranceTopicsPageResolver,
AdminQualityAssuranceEventsPageResolver, QualityAssuranceEventsPageResolver,
AdminQualityAssuranceSourcePageResolver, QualityAssuranceSourcePageResolver,
QualityAssuranceBreadcrumbResolver, QualityAssuranceBreadcrumbResolver,
QualityAssuranceBreadcrumbService QualityAssuranceBreadcrumbService
] ]

View File

@@ -4,11 +4,17 @@ import { getQualityAssuranceEditRoute } from './admin-notifications/admin-notifi
export const REGISTRIES_MODULE_PATH = 'registries'; export const REGISTRIES_MODULE_PATH = 'registries';
export const NOTIFICATIONS_MODULE_PATH = 'notifications'; export const NOTIFICATIONS_MODULE_PATH = 'notifications';
export const LDN_PATH = 'ldn';
export function getRegistriesModuleRoute() { export function getRegistriesModuleRoute() {
return new URLCombiner(getAdminModuleRoute(), REGISTRIES_MODULE_PATH).toString(); return new URLCombiner(getAdminModuleRoute(), REGISTRIES_MODULE_PATH).toString();
} }
export function getLdnServicesModuleRoute() {
return new URLCombiner(getAdminModuleRoute(), LDN_PATH).toString();
}
export function getNotificationsModuleRoute() { export function getNotificationsModuleRoute() {
return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString(); return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString();
} }

View File

@@ -6,7 +6,7 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso
import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component';
import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service'; import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service';
import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component'; import { AdminCurationTasksComponent } from './admin-curation-tasks/admin-curation-tasks.component';
import { REGISTRIES_MODULE_PATH } from './admin-routing-paths'; import { LDN_PATH, NOTIFICATIONS_MODULE_PATH, REGISTRIES_MODULE_PATH } from './admin-routing-paths';
import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component';
import { import {
SiteAdministratorGuard SiteAdministratorGuard
@@ -15,6 +15,11 @@ import {
@NgModule({ @NgModule({
imports: [ imports: [
RouterModule.forChild([ RouterModule.forChild([
{
path: NOTIFICATIONS_MODULE_PATH,
loadChildren: () => import('./admin-notifications/admin-notifications.module')
.then((m) => m.AdminNotificationsModule),
},
{ {
path: REGISTRIES_MODULE_PATH, path: REGISTRIES_MODULE_PATH,
loadChildren: () => import('./admin-registries/admin-registries.module') loadChildren: () => import('./admin-registries/admin-registries.module')
@@ -63,6 +68,17 @@ import {
data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'}, data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'},
canActivate: [SiteAdministratorGuard] canActivate: [SiteAdministratorGuard]
}, },
{
path: LDN_PATH,
children: [
{ path: '', pathMatch: 'full', redirectTo: 'services' },
{
path: 'services',
loadChildren: () => import('./admin-ldn-services/admin-ldn-services.module')
.then((m) => m.AdminLdnServicesModule),
}
],
},
]) ])
], ],
providers: [ providers: [

View File

@@ -2,10 +2,7 @@ import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model';
import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService';
import { Observable, of as observableOf } from 'rxjs'; import { Observable, of as observableOf } from 'rxjs';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';
import { getFirstCompletedRemoteData } from '../shared/operators';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { QualityAssuranceTopicDataService } from '../notifications/qa/topics/quality-assurance-topic-data.service';
@@ -19,7 +16,6 @@ export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderSer
private QUALITY_ASSURANCE_BREADCRUMB_KEY = 'admin.quality-assurance.breadcrumbs'; private QUALITY_ASSURANCE_BREADCRUMB_KEY = 'admin.quality-assurance.breadcrumbs';
constructor( constructor(
protected qualityAssuranceService: QualityAssuranceTopicDataService,
private translationService: TranslateService, private translationService: TranslateService,
) { ) {
@@ -32,18 +28,14 @@ export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderSer
* @param url The url to use as a link for this breadcrumb * @param url The url to use as a link for this breadcrumb
*/ */
getBreadcrumbs(key: string, url: string): Observable<Breadcrumb[]> { getBreadcrumbs(key: string, url: string): Observable<Breadcrumb[]> {
const sourceId = key.split(':')[0]; const args = key.split(':');
const topicId = key.split(':')[2]; const sourceId = args[0];
const topicId = args.length > 2 ? args[args.length - 1] : args[1];
if (topicId) { if (topicId) {
return this.qualityAssuranceService.getTopic(topicId).pipe( return observableOf( [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
getFirstCompletedRemoteData(), new Breadcrumb(sourceId, `${url}${sourceId}`),
map((topic) => { new Breadcrumb(topicId, undefined)]);
return [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
new Breadcrumb(sourceId, `${url}${sourceId}`),
new Breadcrumb(topicId.replace(/[!:]/g, '/'), undefined)];
})
);
} else { } else {
return observableOf([new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url), return observableOf([new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url),
new Breadcrumb(sourceId, `${url}${sourceId}`)]); new Breadcrumb(sourceId, `${url}${sourceId}`)]);

View File

@@ -186,8 +186,18 @@ import { ValueListBrowseDefinition } from './shared/value-list-browse-definition
import { NonHierarchicalBrowseDefinition } from './shared/non-hierarchical-browse-definition'; import { NonHierarchicalBrowseDefinition } from './shared/non-hierarchical-browse-definition';
import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model'; import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model';
import { CorrectionTypeDataService } from './submission/correctiontype-data.service'; import { CorrectionTypeDataService } from './submission/correctiontype-data.service';
import { SuggestionTarget } from './suggestion-notifications/models/suggestion-target.model'; import { LdnServicesService } from '../admin/admin-ldn-services/ldn-services-data/ldn-services-data.service';
import { SuggestionSource } from './suggestion-notifications/models/suggestion-source.model'; import { LdnItemfiltersService } from '../admin/admin-ldn-services/ldn-services-data/ldn-itemfilters-data.service';
import {
CoarNotifyConfigDataService
} from '../submission/sections/section-coar-notify/coar-notify-config-data.service';
import { NotifyRequestsStatusDataService } from './data/notify-services-status-data.service';
import { SuggestionTarget } from './notifications/models/suggestion-target.model';
import { SuggestionSource } from './notifications/models/suggestion-source.model';
import { NotifyRequestsStatus } from '../item-page/simple/notify-requests-status/notify-requests-status.model';
import { LdnService } from '../admin/admin-ldn-services/ldn-services-model/ldn-services.model';
import { Itemfilter } from '../admin/admin-ldn-services/ldn-services-model/ldn-service-itemfilters';
import { SubmissionCoarNotifyConfig } from '../submission/sections/section-coar-notify/submission-coar-notify.config';
/** /**
* When not in production, endpoint responses can be mocked for testing purposes * When not in production, endpoint responses can be mocked for testing purposes
@@ -311,7 +321,11 @@ const PROVIDERS = [
OrcidQueueDataService, OrcidQueueDataService,
OrcidHistoryDataService, OrcidHistoryDataService,
SupervisionOrderDataService, SupervisionOrderDataService,
CorrectionTypeDataService CorrectionTypeDataService,
LdnServicesService,
LdnItemfiltersService,
CoarNotifyConfigDataService,
NotifyRequestsStatusDataService
]; ];
/** /**
@@ -392,7 +406,11 @@ export const models =
ItemRequest, ItemRequest,
BulkAccessConditionOptions, BulkAccessConditionOptions,
SuggestionTarget, SuggestionTarget,
SuggestionSource SuggestionSource,
LdnService,
Itemfilter,
SubmissionCoarNotifyConfig,
NotifyRequestsStatus,
]; ];
@NgModule({ @NgModule({

View File

@@ -27,29 +27,20 @@ import {
QualityAssuranceSourceDataService QualityAssuranceSourceDataService
} from '../core/notifications/qa/source/quality-assurance-source-data.service'; } from '../core/notifications/qa/source/quality-assurance-source-data.service';
import { EPersonDataComponent } from './qa/events/ePerson-data/ePerson-data.component'; import { EPersonDataComponent } from './qa/events/ePerson-data/ePerson-data.component';
import { PublicationClaimComponent } from '../suggestion-notifications/suggestion-targets/publication-claim/publication-claim.component'; import { SuggestionActionsComponent } from './suggestion-actions/suggestion-actions.component';
import { SuggestionActionsComponent } from '../suggestion-notifications/suggestion-actions/suggestion-actions.component'; import { PublicationClaimComponent } from './suggestion-targets/publication-claim/publication-claim.component';
import { import { SuggestionListElementComponent } from './suggestion-list-element/suggestion-list-element.component';
SuggestionListElementComponent
} from '../suggestion-notifications/suggestion-list-element/suggestion-list-element.component';
import { import {
SuggestionEvidencesComponent SuggestionEvidencesComponent
} from '../suggestion-notifications/suggestion-list-element/suggestion-evidences/suggestion-evidences.component'; } from './suggestion-list-element/suggestion-evidences/suggestion-evidences.component';
import { SuggestionsPopupComponent } from '../suggestion-notifications/suggestions-popup/suggestions-popup.component'; import { SuggestionsPopupComponent } from './suggestions-popup/suggestions-popup.component';
import { import { SuggestionsNotificationComponent } from './suggestions-notification/suggestions-notification.component';
SuggestionsNotificationComponent import { SuggestionsService } from './suggestions.service';
} from '../suggestion-notifications/suggestions-notification/suggestions-notification.component'; import { SuggestionSourceDataService } from '../core/notifications/source/suggestion-source-data.service';
import { SuggestionsService } from '../suggestion-notifications/suggestions.service'; import { SuggestionTargetDataService } from '../core/notifications/target/suggestion-target-data.service';
import { SuggestionsDataService } from '../core/suggestion-notifications/suggestions-data.service'; import { SuggestionTargetsStateService } from './suggestion-targets/suggestion-targets.state.service';
import { import { SuggestionsDataService } from '../core/notifications/suggestions-data.service';
SuggestionSourceDataService
} from '../core/suggestion-notifications/source/suggestion-source-data.service';
import {
SuggestionTargetDataService
} from '../core/suggestion-notifications/target/suggestion-target-data.service';
import {
SuggestionTargetsStateService
} from '../suggestion-notifications/suggestion-targets/suggestion-targets.state.service';
const MODULES = [ const MODULES = [

View File

@@ -26,7 +26,7 @@ import {
ProjectEntryImportModalComponent, ProjectEntryImportModalComponent,
QualityAssuranceEventData QualityAssuranceEventData
} from '../project-entry-import-modal/project-entry-import-modal.component'; } from '../project-entry-import-modal/project-entry-import-modal.component';
import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { getFirstCompletedRemoteData, getRemoteDataPayload } 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';
@@ -34,6 +34,8 @@ import { AuthorizationDataService } from '../../../core/data/feature-authorizati
import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; import { FeatureID } from '../../../core/data/feature-authorization/feature-id';
import { NoContent } from '../../../core/shared/NoContent.model'; import { NoContent } from '../../../core/shared/NoContent.model';
import { environment } from '../../../../environments/environment'; import { environment } from '../../../../environments/environment';
import { getItemPageRoute } from '../../../item-page/item-page-routing-paths';
import { ItemDataService } from '../../../core/data/item-data.service';
/** /**
* Component to display the Quality Assurance event list. * Component to display the Quality Assurance event list.
@@ -119,6 +121,22 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
*/ */
protected subs: Subscription[] = []; protected subs: Subscription[] = [];
/**
* The target item id, retrieved from the topic-id composition.
*/
public targetId: string;
/**
* The URL of the item page/target.
*/
public itemPageUrl: string;
/**
* Plain topic name (without the source id)
*/
public selectedTopicName: string;
/** /**
* Observable that emits a boolean value indicating whether the user is an admin. * Observable that emits a boolean value indicating whether the user is an admin.
*/ */
@@ -132,6 +150,8 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
* @param {QualityAssuranceEventDataService} qualityAssuranceEventRestService * @param {QualityAssuranceEventDataService} qualityAssuranceEventRestService
* @param {PaginationService} paginationService * @param {PaginationService} paginationService
* @param {TranslateService} translateService * @param {TranslateService} translateService
* @param authorizationService
* @param itemService
*/ */
constructor( constructor(
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
@@ -141,6 +161,7 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
private paginationService: PaginationService, private paginationService: PaginationService,
private translateService: TranslateService, private translateService: TranslateService,
private authorizationService: AuthorizationDataService, private authorizationService: AuthorizationDataService,
private itemService: ItemDataService,
) { ) {
} }
@@ -161,6 +182,10 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
const regEx = /!/g; const regEx = /!/g;
this.showTopic = id.replace(regEx, '/'); this.showTopic = id.replace(regEx, '/');
this.topic = id; this.topic = id;
const splitList = this.showTopic?.split(':');
this.targetId = splitList.length > 2 ? splitList.pop() : null;
this.selectedTopicName = splitList[1];
this.sourceId = splitList[0];
return this.getQualityAssuranceEvents(); return this.getQualityAssuranceEvents();
}) })
).subscribe( ).subscribe(
@@ -471,4 +496,21 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy {
delete(qaEvent: QualityAssuranceEventData): Observable<RemoteData<NoContent>> { delete(qaEvent: QualityAssuranceEventData): Observable<RemoteData<NoContent>> {
return this.qualityAssuranceEventRestService.deleteQAEvent(qaEvent); return this.qualityAssuranceEventRestService.deleteQAEvent(qaEvent);
} }
/**
* Returns an Observable that emits the title of the target item.
* The target item is retrieved by its ID using the itemService.
* The title is extracted from the first metadata value of the item.
* The item page URL is also set in the component.
* @returns An Observable that emits the title of the target item.
*/
public getTargetItemTitle(): Observable<string> {
return this.itemService.findById(this.targetId).pipe(
take(1),
getFirstCompletedRemoteData(),
getRemoteDataPayload(),
tap((item: Item) => this.itemPageUrl = getItemPageRoute(item)),
map((item: Item) => item.firstMetadataValue('dc.title'))
);
}
} }

View File

@@ -10,9 +10,7 @@ import {
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 { NotificationsStateService } from '../../notifications-state.service'; import { NotificationsStateService } from '../../notifications-state.service';
import {
AdminQualityAssuranceTopicsPageParams
} from '../../../admin/admin-notifications/admin-quality-assurance-topics-page/admin-quality-assurance-topics-page-resolver.service';
import { PaginationService } from '../../../core/pagination/pagination.service'; import { PaginationService } from '../../../core/pagination/pagination.service';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { ItemDataService } from '../../../core/data/item-data.service'; import { ItemDataService } from '../../../core/data/item-data.service';
@@ -20,6 +18,9 @@ import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../../../core
import { Item } from '../../../core/shared/item.model'; import { Item } from '../../../core/shared/item.model';
import { getItemPageRoute } from '../../../item-page/item-page-routing-paths'; import { getItemPageRoute } from '../../../item-page/item-page-routing-paths';
import { getNotificatioQualityAssuranceRoute } from '../../../admin/admin-routing-paths'; import { getNotificatioQualityAssuranceRoute } from '../../../admin/admin-routing-paths';
import {
QualityAssuranceTopicsPageParams
} from '../../../quality-assurance-notifications-pages/quality-assurance-topics-page/quality-assurance-topics-page-resolver.service';
/** /**
* Component to display the Quality Assurance topic list. * Component to display the Quality Assurance topic list.
@@ -79,8 +80,9 @@ export class QualityAssuranceTopicsComponent implements OnInit, OnDestroy, After
* Initialize the component variables. * Initialize the component variables.
* @param {PaginationService} paginationService * @param {PaginationService} paginationService
* @param {ActivatedRoute} activatedRoute * @param {ActivatedRoute} activatedRoute
* @param itemService
* @param {NotificationsStateService} notificationsStateService * @param {NotificationsStateService} notificationsStateService
* @param {QualityAssuranceTopicsService} qualityAssuranceTopicsService * @param router
*/ */
constructor( constructor(
private paginationService: PaginationService, private paginationService: PaginationService,
@@ -163,7 +165,7 @@ export class QualityAssuranceTopicsComponent implements OnInit, OnDestroy, After
* *
* @param eventsRouteParams * @param eventsRouteParams
*/ */
protected updatePaginationFromRouteParams(eventsRouteParams: AdminQualityAssuranceTopicsPageParams) { protected updatePaginationFromRouteParams(eventsRouteParams: QualityAssuranceTopicsPageParams) {
if (eventsRouteParams.currentPage) { if (eventsRouteParams.currentPage) {
this.paginationConfig.currentPage = eventsRouteParams.currentPage; this.paginationConfig.currentPage = eventsRouteParams.currentPage;
} }

View File

@@ -286,6 +286,7 @@ import { QualityAssuranceEventDataService } from '../core/notifications/qa/event
import { QualityAssuranceSourceDataService } from '../core/notifications/qa/source/quality-assurance-source-data.service'; import { QualityAssuranceSourceDataService } from '../core/notifications/qa/source/quality-assurance-source-data.service';
import { DynamicComponentLoaderDirective } from './abstract-component-loader/dynamic-component-loader.directive'; import { DynamicComponentLoaderDirective } from './abstract-component-loader/dynamic-component-loader.directive';
import { StartsWithLoaderComponent } from './starts-with/starts-with-loader.component'; import { StartsWithLoaderComponent } from './starts-with/starts-with-loader.component';
import { IpV4Validator } from './utils/ipV4.validator';
const MODULES = [ const MODULES = [
CommonModule, CommonModule,
@@ -496,6 +497,7 @@ const DIRECTIVES = [
HoverClassDirective, HoverClassDirective,
ContextHelpDirective, ContextHelpDirective,
DynamicComponentLoaderDirective, DynamicComponentLoaderDirective,
IpV4Validator,
]; ];
@NgModule({ @NgModule({

View File

@@ -141,9 +141,9 @@ export class SubmissionSectionCoarNotifyComponent extends SectionModelComponent
this.operationsBuilder.flushOperation(this.pathCombiner.getPath([pattern, '-'])); this.operationsBuilder.flushOperation(this.pathCombiner.getPath([pattern, '-']));
} }
if (!hasPrevValueStored || (selectedService?.id && hasPrevValueStored)) { if (!hasPrevValueStored || (selectedService?.id && hasPrevValueStored) || (!hasValue(selectedService) && hasPrevValueStored)) {
// add the path when there is no previous value stored // add the path when there is no previous value stored
this.operationsBuilder.add(this.pathCombiner.getPath([pattern, '-']), [selectedService.id], false, true); this.operationsBuilder.add(this.pathCombiner.getPath([pattern, '-']), hasValue(selectedService) ? [selectedService.id] : [], false, true);
} }
// set the previous value to the new value // set the previous value to the new value
this.previousServices[pattern].services[index] = this.ldnServiceByPattern[pattern].services[index]; this.previousServices[pattern].services[index] = this.ldnServiceByPattern[pattern].services[index];

View File

@@ -6097,4 +6097,6 @@
"filter.search.text.placeholder": "Search text", "filter.search.text.placeholder": "Search text",
"advancesearch.form.submit": "Add", "advancesearch.form.submit": "Add",
"ldn.no-filter.label": "None",
} }