diff --git a/resources/i18n/en.json b/resources/i18n/en.json index 169ff0efe9..0e2a15e099 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -181,6 +181,24 @@ "scopenote": "Scope Note" }, "no-items": "No metadata fields to show." + }, + "notification": { + "success": "Success", + "failure": "Error", + "created": "Successfully created metadata schema \"{{prefix}}\"", + "edited": "Successfully edited metadata schema \"{{prefix}}\"", + "deleted": { + "success": "Successfully deleted {{amount}} metadata schemas", + "failure": "Failed to delete {{amount}} metadata schemas" + }, + "field": { + "created": "Successfully created metadata field \"{{field}}\"", + "edited": "Successfully edited metadata field \"{{field}}\"", + "deleted": { + "success": "Successfully deleted {{amount}} metadata fields", + "failure": "Failed to delete {{amount}} metadata fields" + } + } } }, "bitstream-formats": { diff --git a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts index 2b1ea9eba8..dbd09fa178 100644 --- a/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts +++ b/src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { RegistryService } from '../../../core/registry/registry.service'; -import { Observable } from 'rxjs'; +import { Observable, combineLatest as observableCombineLatest } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; import { MetadataSchema } from '../../../core/metadata/metadataschema.model'; @@ -11,6 +11,7 @@ import { RestResponse } from '../../../core/cache/response.models'; import { zip } from 'rxjs/internal/observable/zip'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { Route, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'ds-metadata-registry', @@ -28,7 +29,8 @@ export class MetadataRegistryComponent { constructor(private registryService: RegistryService, private notificationsService: NotificationsService, - private router: Router) { + private router: Router, + private translateService: TranslateService) { this.updateSchemas(); } @@ -91,10 +93,10 @@ export class MetadataRegistryComponent { const successResponses = responses.filter((response: RestResponse) => response.isSuccessful); const failedResponses = responses.filter((response: RestResponse) => !response.isSuccessful); if (successResponses.length > 0) { - this.notificationsService.success('Success', `Successfully deleted ${successResponses.length} metadata schemas`); + this.showNotification(true, successResponses.length); } if (failedResponses.length > 0) { - this.notificationsService.error('Error', `Failed to delete ${failedResponses.length} metadata schemas`); + this.showNotification(false, failedResponses.length); } this.registryService.deselectAllMetadataSchema(); this.router.navigate([], { queryParams: { page: 1 }, queryParamsHandling: 'merge'}); @@ -103,4 +105,20 @@ export class MetadataRegistryComponent { } ) } + + showNotification(success: boolean, amount: number) { + const prefix = 'admin.registries.schema.notification'; + const suffix = success ? 'success' : 'failure'; + const messages = observableCombineLatest( + this.translateService.get(success ? `${prefix}.${suffix}` : `${prefix}.${suffix}`), + this.translateService.get(`${prefix}.deleted.${suffix}`, { amount: amount }) + ); + messages.subscribe(([head, content]) => { + if (success) { + this.notificationsService.success(head, content) + } else { + this.notificationsService.error(head, content) + } + }); + } } diff --git a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts index 0411b505aa..2cdc9020ba 100644 --- a/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts +++ b/src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { RegistryService } from '../../../core/registry/registry.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { Observable } from 'rxjs'; +import { Observable, combineLatest as observableCombineLatest } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; import { PaginatedList } from '../../../core/data/paginated-list'; import { MetadataField } from '../../../core/metadata/metadatafield.model'; @@ -12,6 +12,7 @@ import { hasValue } from '../../../shared/empty.util'; import { RestResponse } from '../../../core/cache/response.models'; import { zip } from 'rxjs/internal/observable/zip'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'ds-metadata-schema', @@ -33,7 +34,8 @@ export class MetadataSchemaComponent implements OnInit { constructor(private registryService: RegistryService, private route: ActivatedRoute, private notificationsService: NotificationsService, - private router: Router) { + private router: Router, + private translateService: TranslateService) { } @@ -111,10 +113,10 @@ export class MetadataSchemaComponent implements OnInit { const successResponses = responses.filter((response: RestResponse) => response.isSuccessful); const failedResponses = responses.filter((response: RestResponse) => !response.isSuccessful); if (successResponses.length > 0) { - this.notificationsService.success('Success', `Successfully deleted ${successResponses.length} metadata fields`); + this.showNotification(true, successResponses.length); } if (failedResponses.length > 0) { - this.notificationsService.error('Error', `Failed to delete ${failedResponses.length} metadata fields`); + this.showNotification(false, failedResponses.length); } this.registryService.deselectAllMetadataField(); this.router.navigate([], { queryParams: { page: 1 }, queryParamsHandling: 'merge'}); @@ -123,4 +125,20 @@ export class MetadataSchemaComponent implements OnInit { } ) } + + showNotification(success: boolean, amount: number) { + const prefix = 'admin.registries.schema.notification'; + const suffix = success ? 'success' : 'failure'; + const messages = observableCombineLatest( + this.translateService.get(success ? `${prefix}.${suffix}` : `${prefix}.${suffix}`), + this.translateService.get(`${prefix}.field.deleted.${suffix}`, { amount: amount }) + ); + messages.subscribe(([head, content]) => { + if (success) { + this.notificationsService.success(head, content) + } else { + this.notificationsService.error(head, content) + } + }); + } } diff --git a/src/app/core/registry/registry.service.ts b/src/app/core/registry/registry.service.ts index f07a656de8..6cd3a7fa28 100644 --- a/src/app/core/registry/registry.service.ts +++ b/src/app/core/registry/registry.service.ts @@ -56,6 +56,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { NotificationOptions } from '../../shared/notifications/models/notification-options.model'; import { HttpOptions } from '../dspace-rest-v2/dspace-rest-v2.service'; import { HttpHeaders } from '@angular/common/http'; +import { TranslateService } from '@ngx-translate/core'; const metadataRegistryStateSelector = (state: AppState) => state.metadataRegistry; const editMetadataSchemaSelector = createSelector(metadataRegistryStateSelector, (metadataState: MetadataRegistryState) => metadataState.editSchema); @@ -74,7 +75,8 @@ export class RegistryService { private rdb: RemoteDataBuildService, private halService: HALEndpointService, private store: Store, - private notificationsService: NotificationsService) { + private notificationsService: NotificationsService, + private translateService: TranslateService) { } @@ -352,7 +354,7 @@ export class RegistryService { this.notificationsService.error('Server Error:', (response as any).errorMessage, new NotificationOptions(-1)); } } else { - this.notificationsService.success('Success', `Successfully ${isUpdate ? 'updated' : 'created'} metadata schema "${schema.prefix}"`); + this.showNotifications(true, isUpdate, false, { prefix: schema.prefix }); return response; } }), @@ -413,7 +415,8 @@ export class RegistryService { this.notificationsService.error('Server Error:', (response as any).errorMessage, new NotificationOptions(-1)); } } else { - this.notificationsService.success('Success', `Successfully ${isUpdate ? 'updated' : 'created'} metadata field "${field.schema.prefix}.${field.element}.${field.qualifier}"`); + const fieldString = `${field.schema.prefix}.${field.element}${field.qualifier ? `.${field.qualifier}` : ''}`; + this.showNotifications(true, isUpdate, true, { field: fieldString }); return response; } }), @@ -458,4 +461,21 @@ export class RegistryService { getResponseFromEntry() ); } + + private showNotifications(success: boolean, edited: boolean, isField: boolean, options: any) { + const prefix = 'admin.registries.schema.notification'; + const suffix = success ? 'success' : 'failure'; + const editedString = edited ? 'edited' : 'created'; + const messages = observableCombineLatest( + this.translateService.get(success ? `${prefix}.${suffix}` : `${prefix}.${suffix}`), + this.translateService.get(`${prefix}${isField ? '.field' : ''}.${editedString}`, options) + ); + messages.subscribe(([head, content]) => { + if (success) { + this.notificationsService.success(head, content) + } else { + this.notificationsService.error(head, content) + } + }); + } }