diff --git a/src/app/admin/admin-ldn-services/ldn-service-form/ldn-service-form.component.ts b/src/app/admin/admin-ldn-services/ldn-service-form/ldn-service-form.component.ts index 56bd474a80..0a08264bda 100644 --- a/src/app/admin/admin-ldn-services/ldn-service-form/ldn-service-form.component.ts +++ b/src/app/admin/admin-ldn-services/ldn-service-form/ldn-service-form.component.ts @@ -313,7 +313,10 @@ export class LdnServiceFormComponent implements OnInit, OnDestroy { */ selectInboundItemFilter(filterValue: string, index: number): void { 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(); } diff --git a/src/app/admin/admin-notifications/admin-notifications-routing.module.ts b/src/app/admin/admin-notifications/admin-notifications-routing.module.ts index e00a88cbe2..c82c91233e 100644 --- a/src/app/admin/admin-notifications/admin-notifications-routing.module.ts +++ b/src/app/admin/admin-notifications/admin-notifications-routing.module.ts @@ -6,22 +6,37 @@ import { I18nBreadcrumbResolver } from '../../core/breadcrumbs/i18n-breadcrumb.r import { I18nBreadcrumbsService } from '../../core/breadcrumbs/i18n-breadcrumbs.service'; import { PUBLICATION_CLAIMS_PATH } from './admin-notifications-routing-paths'; 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 { 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 { SiteAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; import { QualityAssuranceBreadcrumbResolver } from '../../core/breadcrumbs/quality-assurance-breadcrumb.resolver'; 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 { 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({ imports: [ @@ -44,11 +59,11 @@ import { { canActivate: [ AuthenticatedGuard ], path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId`, - component: AdminQualityAssuranceTopicsPageComponent, + component: QualityAssuranceTopicsPageComponent, pathMatch: 'full', resolve: { breadcrumb: QualityAssuranceBreadcrumbResolver, - openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver + openaireQualityAssuranceTopicsParams: QualityAssuranceTopicsPageResolver }, data: { title: 'admin.quality-assurance.page.title', @@ -59,11 +74,11 @@ import { { canActivate: [ AuthenticatedGuard ], path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/target/:targetId`, - component: AdminQualityAssuranceTopicsPageComponent, + component: QualityAssuranceTopicsPageComponent, pathMatch: 'full', resolve: { breadcrumb: I18nBreadcrumbResolver, - openaireQualityAssuranceTopicsParams: AdminQualityAssuranceTopicsPageResolver + openaireQualityAssuranceTopicsParams: QualityAssuranceTopicsPageResolver }, data: { title: 'admin.quality-assurance.page.title', @@ -74,11 +89,11 @@ import { { canActivate: [ SiteAdministratorGuard ], path: `${QUALITY_ASSURANCE_EDIT_PATH}`, - component: AdminQualityAssuranceSourcePageComponent, + component: QualityAssuranceSourcePageComponent, pathMatch: 'full', resolve: { breadcrumb: I18nBreadcrumbResolver, - openaireQualityAssuranceSourceParams: AdminQualityAssuranceSourcePageResolver, + openaireQualityAssuranceSourceParams: QualityAssuranceSourcePageResolver, sourceData: SourceDataResolver }, data: { @@ -90,11 +105,11 @@ import { { canActivate: [ AuthenticatedGuard ], path: `${QUALITY_ASSURANCE_EDIT_PATH}/:sourceId/:topicId`, - component: AdminQualityAssuranceEventsPageComponent, + component: QualityAssuranceEventsPageComponent, pathMatch: 'full', resolve: { breadcrumb: QualityAssuranceBreadcrumbResolver, - openaireQualityAssuranceEventsParams: AdminQualityAssuranceEventsPageResolver + openaireQualityAssuranceEventsParams: QualityAssuranceEventsPageResolver }, data: { title: 'admin.notifications.event.page.title', @@ -109,10 +124,10 @@ import { I18nBreadcrumbsService, AdminNotificationsPublicationClaimPageResolver, SourceDataResolver, - AdminQualityAssuranceSourcePageResolver, - AdminQualityAssuranceTopicsPageResolver, - AdminQualityAssuranceEventsPageResolver, - AdminQualityAssuranceSourcePageResolver, + QualityAssuranceSourcePageResolver, + QualityAssuranceTopicsPageResolver, + QualityAssuranceEventsPageResolver, + QualityAssuranceSourcePageResolver, QualityAssuranceBreadcrumbResolver, QualityAssuranceBreadcrumbService ] diff --git a/src/app/admin/admin-routing-paths.ts b/src/app/admin/admin-routing-paths.ts index 144b9d09bf..270fb8bc81 100644 --- a/src/app/admin/admin-routing-paths.ts +++ b/src/app/admin/admin-routing-paths.ts @@ -4,11 +4,17 @@ import { getQualityAssuranceEditRoute } from './admin-notifications/admin-notifi export const REGISTRIES_MODULE_PATH = 'registries'; export const NOTIFICATIONS_MODULE_PATH = 'notifications'; +export const LDN_PATH = 'ldn'; + export function getRegistriesModuleRoute() { return new URLCombiner(getAdminModuleRoute(), REGISTRIES_MODULE_PATH).toString(); } +export function getLdnServicesModuleRoute() { + return new URLCombiner(getAdminModuleRoute(), LDN_PATH).toString(); +} + export function getNotificationsModuleRoute() { return new URLCombiner(getAdminModuleRoute(), NOTIFICATIONS_MODULE_PATH).toString(); } diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts index c17dd5554f..2374c9af1e 100644 --- a/src/app/admin/admin-routing.module.ts +++ b/src/app/admin/admin-routing.module.ts @@ -6,7 +6,7 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; import { I18nBreadcrumbsService } from '../core/breadcrumbs/i18n-breadcrumbs.service'; 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 { SiteAdministratorGuard @@ -15,6 +15,11 @@ import { @NgModule({ imports: [ RouterModule.forChild([ + { + path: NOTIFICATIONS_MODULE_PATH, + loadChildren: () => import('./admin-notifications/admin-notifications.module') + .then((m) => m.AdminNotificationsModule), + }, { path: REGISTRIES_MODULE_PATH, loadChildren: () => import('./admin-registries/admin-registries.module') @@ -63,6 +68,17 @@ import { data: {title: 'admin.system-wide-alert.title', breadcrumbKey: 'admin.system-wide-alert'}, 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: [ diff --git a/src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.ts b/src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.ts index 53aba9fa0d..a0299705a4 100644 --- a/src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.ts +++ b/src/app/core/breadcrumbs/quality-assurance-breadcrumb.service.ts @@ -2,10 +2,7 @@ import { Breadcrumb } from '../../breadcrumbs/breadcrumb/breadcrumb.model'; import { BreadcrumbsProviderService } from './breadcrumbsProviderService'; import { Observable, of as observableOf } from 'rxjs'; import { Injectable } from '@angular/core'; -import { map } from 'rxjs/operators'; -import { getFirstCompletedRemoteData } from '../shared/operators'; 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'; constructor( - protected qualityAssuranceService: QualityAssuranceTopicDataService, private translationService: TranslateService, ) { @@ -32,18 +28,14 @@ export class QualityAssuranceBreadcrumbService implements BreadcrumbsProviderSer * @param url The url to use as a link for this breadcrumb */ getBreadcrumbs(key: string, url: string): Observable { - const sourceId = key.split(':')[0]; - const topicId = key.split(':')[2]; + const args = key.split(':'); + const sourceId = args[0]; + const topicId = args.length > 2 ? args[args.length - 1] : args[1]; if (topicId) { - return this.qualityAssuranceService.getTopic(topicId).pipe( - getFirstCompletedRemoteData(), - map((topic) => { - return [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url), - new Breadcrumb(sourceId, `${url}${sourceId}`), - new Breadcrumb(topicId.replace(/[!:]/g, '/'), undefined)]; - }) - ); + return observableOf( [new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url), + new Breadcrumb(sourceId, `${url}${sourceId}`), + new Breadcrumb(topicId, undefined)]); } else { return observableOf([new Breadcrumb(this.translationService.instant(this.QUALITY_ASSURANCE_BREADCRUMB_KEY), url), new Breadcrumb(sourceId, `${url}${sourceId}`)]); diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 119b993faf..7088860674 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -186,8 +186,18 @@ import { ValueListBrowseDefinition } from './shared/value-list-browse-definition import { NonHierarchicalBrowseDefinition } from './shared/non-hierarchical-browse-definition'; import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model'; import { CorrectionTypeDataService } from './submission/correctiontype-data.service'; -import { SuggestionTarget } from './suggestion-notifications/models/suggestion-target.model'; -import { SuggestionSource } from './suggestion-notifications/models/suggestion-source.model'; +import { LdnServicesService } from '../admin/admin-ldn-services/ldn-services-data/ldn-services-data.service'; +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 @@ -311,7 +321,11 @@ const PROVIDERS = [ OrcidQueueDataService, OrcidHistoryDataService, SupervisionOrderDataService, - CorrectionTypeDataService + CorrectionTypeDataService, + LdnServicesService, + LdnItemfiltersService, + CoarNotifyConfigDataService, + NotifyRequestsStatusDataService ]; /** @@ -392,7 +406,11 @@ export const models = ItemRequest, BulkAccessConditionOptions, SuggestionTarget, - SuggestionSource + SuggestionSource, + LdnService, + Itemfilter, + SubmissionCoarNotifyConfig, + NotifyRequestsStatus, ]; @NgModule({ diff --git a/src/app/notifications/notifications.module.ts b/src/app/notifications/notifications.module.ts index 88b69f26a1..11bf675f72 100644 --- a/src/app/notifications/notifications.module.ts +++ b/src/app/notifications/notifications.module.ts @@ -27,29 +27,20 @@ import { QualityAssuranceSourceDataService } from '../core/notifications/qa/source/quality-assurance-source-data.service'; 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-notifications/suggestion-actions/suggestion-actions.component'; -import { - SuggestionListElementComponent -} from '../suggestion-notifications/suggestion-list-element/suggestion-list-element.component'; +import { SuggestionActionsComponent } from './suggestion-actions/suggestion-actions.component'; +import { PublicationClaimComponent } from './suggestion-targets/publication-claim/publication-claim.component'; +import { SuggestionListElementComponent } from './suggestion-list-element/suggestion-list-element.component'; import { SuggestionEvidencesComponent -} from '../suggestion-notifications/suggestion-list-element/suggestion-evidences/suggestion-evidences.component'; -import { SuggestionsPopupComponent } from '../suggestion-notifications/suggestions-popup/suggestions-popup.component'; -import { - SuggestionsNotificationComponent -} from '../suggestion-notifications/suggestions-notification/suggestions-notification.component'; -import { SuggestionsService } from '../suggestion-notifications/suggestions.service'; -import { SuggestionsDataService } from '../core/suggestion-notifications/suggestions-data.service'; -import { - 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'; +} from './suggestion-list-element/suggestion-evidences/suggestion-evidences.component'; +import { SuggestionsPopupComponent } from './suggestions-popup/suggestions-popup.component'; +import { SuggestionsNotificationComponent } from './suggestions-notification/suggestions-notification.component'; +import { SuggestionsService } from './suggestions.service'; +import { SuggestionSourceDataService } from '../core/notifications/source/suggestion-source-data.service'; +import { SuggestionTargetDataService } from '../core/notifications/target/suggestion-target-data.service'; +import { SuggestionTargetsStateService } from './suggestion-targets/suggestion-targets.state.service'; +import { SuggestionsDataService } from '../core/notifications/suggestions-data.service'; + const MODULES = [ diff --git a/src/app/notifications/qa/events/quality-assurance-events.component.ts b/src/app/notifications/qa/events/quality-assurance-events.component.ts index 60550a8baf..953fc9c405 100644 --- a/src/app/notifications/qa/events/quality-assurance-events.component.ts +++ b/src/app/notifications/qa/events/quality-assurance-events.component.ts @@ -26,7 +26,7 @@ import { ProjectEntryImportModalComponent, QualityAssuranceEventData } 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 { Item } from '../../../core/shared/item.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 { NoContent } from '../../../core/shared/NoContent.model'; 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. @@ -119,6 +121,22 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy { */ 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. */ @@ -132,6 +150,8 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy { * @param {QualityAssuranceEventDataService} qualityAssuranceEventRestService * @param {PaginationService} paginationService * @param {TranslateService} translateService + * @param authorizationService + * @param itemService */ constructor( private activatedRoute: ActivatedRoute, @@ -141,6 +161,7 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy { private paginationService: PaginationService, private translateService: TranslateService, private authorizationService: AuthorizationDataService, + private itemService: ItemDataService, ) { } @@ -161,6 +182,10 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy { const regEx = /!/g; this.showTopic = id.replace(regEx, '/'); 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(); }) ).subscribe( @@ -471,4 +496,21 @@ export class QualityAssuranceEventsComponent implements OnInit, OnDestroy { delete(qaEvent: QualityAssuranceEventData): Observable> { 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 { + 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')) + ); + } } diff --git a/src/app/notifications/qa/topics/quality-assurance-topics.component.ts b/src/app/notifications/qa/topics/quality-assurance-topics.component.ts index bda45c71c8..5a077de1fe 100644 --- a/src/app/notifications/qa/topics/quality-assurance-topics.component.ts +++ b/src/app/notifications/qa/topics/quality-assurance-topics.component.ts @@ -10,9 +10,7 @@ import { import { hasValue } from '../../../shared/empty.util'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; 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 { ActivatedRoute, Router } from '@angular/router'; 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 { getItemPageRoute } from '../../../item-page/item-page-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. @@ -79,8 +80,9 @@ export class QualityAssuranceTopicsComponent implements OnInit, OnDestroy, After * Initialize the component variables. * @param {PaginationService} paginationService * @param {ActivatedRoute} activatedRoute + * @param itemService * @param {NotificationsStateService} notificationsStateService - * @param {QualityAssuranceTopicsService} qualityAssuranceTopicsService + * @param router */ constructor( private paginationService: PaginationService, @@ -163,7 +165,7 @@ export class QualityAssuranceTopicsComponent implements OnInit, OnDestroy, After * * @param eventsRouteParams */ - protected updatePaginationFromRouteParams(eventsRouteParams: AdminQualityAssuranceTopicsPageParams) { + protected updatePaginationFromRouteParams(eventsRouteParams: QualityAssuranceTopicsPageParams) { if (eventsRouteParams.currentPage) { this.paginationConfig.currentPage = eventsRouteParams.currentPage; } diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index e31ff2cac1..9fd09789cf 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -286,6 +286,7 @@ import { QualityAssuranceEventDataService } from '../core/notifications/qa/event import { QualityAssuranceSourceDataService } from '../core/notifications/qa/source/quality-assurance-source-data.service'; import { DynamicComponentLoaderDirective } from './abstract-component-loader/dynamic-component-loader.directive'; import { StartsWithLoaderComponent } from './starts-with/starts-with-loader.component'; +import { IpV4Validator } from './utils/ipV4.validator'; const MODULES = [ CommonModule, @@ -496,6 +497,7 @@ const DIRECTIVES = [ HoverClassDirective, ContextHelpDirective, DynamicComponentLoaderDirective, + IpV4Validator, ]; @NgModule({ diff --git a/src/app/submission/sections/section-coar-notify/section-coar-notify.component.ts b/src/app/submission/sections/section-coar-notify/section-coar-notify.component.ts index bd627608cd..2fe7391106 100644 --- a/src/app/submission/sections/section-coar-notify/section-coar-notify.component.ts +++ b/src/app/submission/sections/section-coar-notify/section-coar-notify.component.ts @@ -141,9 +141,9 @@ export class SubmissionSectionCoarNotifyComponent extends SectionModelComponent 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 - 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 this.previousServices[pattern].services[index] = this.ldnServiceByPattern[pattern].services[index]; diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 8331a3cbeb..d0ec135028 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -6097,4 +6097,6 @@ "filter.search.text.placeholder": "Search text", "advancesearch.form.submit": "Add", + + "ldn.no-filter.label": "None", }