diff --git a/resources/i18n/en.json b/resources/i18n/en.json index b8fc64eee6..9040e1ddfc 100644 --- a/resources/i18n/en.json +++ b/resources/i18n/en.json @@ -82,22 +82,23 @@ "admin.registries.schema.title": "DSpace Angular :: Metadata Schema Registry", "auth.errors.invalid-user": "Invalid email address or password.", "auth.messages.expired": "Your session has expired. Please log in again.", - "bitstream.edit.title": "Edit bitstream", "bitstream.edit.bitstream": "Bitstream: ", - "bitstream.edit.form.description.label": "Description", "bitstream.edit.form.description.hint": "Optionally, provide a brief description of the file, for example \"Main article\" or \"Experiment data readings\".", - "bitstream.edit.form.embargo.label": "Embargo until specific date", + "bitstream.edit.form.description.label": "Description", "bitstream.edit.form.embargo.hint": "The first day from which access is allowed. This date cannot be modified on this form. To set an embargo date for a bitstream, go to the Item Status tab, click Authorizations..., create or edit the bitstream's READ policy, and set the Start Date as desired.", - "bitstream.edit.form.fileName.label": "Filename", + "bitstream.edit.form.embargo.label": "Embargo until specific date", "bitstream.edit.form.fileName.hint": "Change the filename for the bitstream. Note that this will change the display bitstream URL, but old links will still resolve as long as the sequence ID does not change.", + "bitstream.edit.form.fileName.label": "Filename", + "bitstream.edit.form.otherFormat.label": "Other Format", + "bitstream.edit.form.otherFormat.hint": "The application you used to create the file, and the version number (for example, \"ACMESoft SuperApp version 1.5\").", "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Other Format\".", "bitstream.edit.form.selectedFormat.label": "Selected Format", "bitstream.edit.form.selectedFormat.unknown": "Format not in list", - "bitstream.edit.form.otherFormat.label": "Other Format", - "bitstream.edit.form.otherFormat.hint": "The application you used to create the file, and the version number (for example, \"ACMESoft SuperApp version 1.5\").", + "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.title": "Bitstream saved", + "bitstream.edit.title": "Edit bitstream", "browse.comcol.by.author": "By Author", "browse.comcol.by.dateissued": "By Issue Date", "browse.comcol.by.subject": "By Subject", @@ -391,6 +392,7 @@ "journalvolume.page.issuedate": "Issue Date", "journalvolume.page.titleprefix": "Journal Volume: ", "journalvolume.page.volume": "Volume", + "loading.bitstream": "Loading bitstream...", "loading.browse-by": "Loading items...", "loading.browse-by-page": "Loading page...", "loading.collection": "Loading collection...", diff --git a/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html b/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html index 6efbcb20ab..bf37f2bc1c 100644 --- a/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html +++ b/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.html @@ -1,5 +1,5 @@
-
+
@@ -20,4 +20,5 @@ (dfChange)="onChange($event)">
+
diff --git a/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 5107a53c4d..94e1609c97 100644 --- a/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -8,7 +8,7 @@ import { ActivatedRoute } from '@angular/router'; import { DynamicFormControlModel, DynamicFormService } from '@ng-dynamic-forms/core'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { BitstreamDataService } from '../../core/data/bitstream-data.service'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectorRef, NO_ERRORS_SCHEMA } from '@angular/core'; import { BitstreamFormatDataService } from '../../core/data/bitstream-format-data.service'; import { Bitstream } from '../../core/shared/bitstream.model'; import { NotificationType } from '../../shared/notifications/models/notification-type'; @@ -111,7 +111,8 @@ describe('EditBitstreamPageComponent', () => { { provide: DynamicFormService, useValue: formService }, { provide: ActivatedRoute, useValue: { data: observableOf({ bitstream: new RemoteData(false, false, true, null, bitstream) }) } }, { provide: BitstreamDataService, useValue: bitstreamService }, - { provide: BitstreamFormatDataService, useValue: bitstreamFormatService } + { provide: BitstreamFormatDataService, useValue: bitstreamFormatService }, + ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); diff --git a/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 83c3bb10fd..264747b339 100644 --- a/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ActivatedRoute } from '@angular/router'; import { map, take, tap } from 'rxjs/operators'; @@ -248,7 +248,8 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { private translate: TranslateService, private bitstreamService: BitstreamDataService, private notificationsService: NotificationsService, - private bitstreamFormatService: BitstreamFormatDataService) { + private bitstreamFormatService: BitstreamFormatDataService, + private changeDetectorRef: ChangeDetectorRef) { } /** @@ -278,6 +279,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.formats = allFormats.page; this.updateFormatModel(); this.updateForm(this.bitstream); + this.changeDetectorRef.detectChanges(); }); this.updateFieldTranslations(); @@ -285,6 +287,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { .subscribe(() => { this.updateFieldTranslations(); }); + this.changeDetectorRef.detectChanges(); } /** @@ -429,6 +432,12 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.translate.instant(this.NOTIFICATIONS_PREFIX + 'saved.title'), this.translate.instant(this.NOTIFICATIONS_PREFIX + 'saved.content') ); + if (hasValue(formatResponse) && !formatResponse.isSuccessful) { + this.notificationsService.error( + this.translate.instant(this.NOTIFICATIONS_PREFIX + 'error.format.title'), + formatResponse.statusText + ); + } } /** diff --git a/src/app/+item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts b/src/app/+item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts index 255532c8c4..7cb24f9e46 100644 --- a/src/app/+item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts +++ b/src/app/+item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts @@ -1,4 +1,4 @@ -import { Inject, Injectable, OnInit } from '@angular/core'; +import { Component, Inject, Injectable, OnInit } from '@angular/core'; import { FieldUpdate, FieldUpdates } from '../../../core/data/object-updates/object-updates.reducer'; import { Observable } from 'rxjs/internal/Observable'; import { Item } from '../../../core/shared/item.model'; @@ -12,11 +12,14 @@ import { first, map } from 'rxjs/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { AbstractTrackableComponent } from '../../../shared/trackable/abstract-trackable.component'; -@Injectable() +@Component({ + selector: 'ds-abstract-item-update', + template: '' +}) /** * Abstract component for managing object updates of an item */ -export abstract class AbstractItemUpdateComponent extends AbstractTrackableComponent implements OnInit { +export class AbstractItemUpdateComponent extends AbstractTrackableComponent implements OnInit { /** * The item to display the edit page for */ @@ -70,18 +73,35 @@ export abstract class AbstractItemUpdateComponent extends AbstractTrackableCompo /** * Initialize the values and updates of the current item's fields + * Abstract method: Should be overwritten in the sub class */ - abstract initializeUpdates(): void; + initializeUpdates(): void { + // Overwrite in subclasses + } /** * Initialize the prefix for notification messages + * Abstract method: Should be overwritten in the sub class */ - abstract initializeNotificationsPrefix(): void; + initializeNotificationsPrefix(): void { + // Overwrite in subclasses + } /** * Sends all initial values of this item to the object updates service + * Abstract method: Should be overwritten in the sub class */ - abstract initializeOriginalFields(): void; + initializeOriginalFields(): void { + // Overwrite in subclasses + } + + /** + * Submit the current changes + * Abstract method: Should be overwritten in the sub class + */ + submit(): void { + // Overwrite in subclasses + } /** * Prevent unnecessary rerendering so fields don't lose focus @@ -112,9 +132,4 @@ export abstract class AbstractItemUpdateComponent extends AbstractTrackableCompo } ); } - - /** - * Submit the current changes - */ - abstract submit(): void; } diff --git a/src/app/+item-page/edit-item-page/edit-item-page.module.ts b/src/app/+item-page/edit-item-page/edit-item-page.module.ts index 97478b81aa..77f5712a4c 100644 --- a/src/app/+item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/+item-page/edit-item-page/edit-item-page.module.ts @@ -19,6 +19,7 @@ import { ItemEditBitstreamComponent } from './item-bitstreams/item-edit-bitstrea import { ItemRelationshipsComponent } from './item-relationships/item-relationships.component'; import { EditRelationshipComponent } from './item-relationships/edit-relationship/edit-relationship.component'; import { EditRelationshipListComponent } from './item-relationships/edit-relationship-list/edit-relationship-list.component'; +import { AbstractItemUpdateComponent } from './abstract-item-update/abstract-item-update.component'; /** * Module that contains all components related to the Edit Item page administrator functionality @@ -33,6 +34,7 @@ import { EditRelationshipListComponent } from './item-relationships/edit-relatio EditItemPageComponent, ItemOperationComponent, AbstractSimpleItemActionComponent, + AbstractItemUpdateComponent, ModifyItemOverviewComponent, ItemWithdrawComponent, ItemReinstateComponent, diff --git a/src/app/+item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts b/src/app/+item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts index 3ead77ae92..8039f5d7cd 100644 --- a/src/app/+item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts +++ b/src/app/+item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts @@ -50,7 +50,7 @@ const url = 'thisUrl'; let item: Item; let itemService: ItemDataService; let objectUpdatesService: ObjectUpdatesService; -let router: Router; +let router: any; let route: ActivatedRoute; let notificationsService: NotificationsService; let bitstreamService: BitstreamDataService; diff --git a/src/app/core/cache/server-sync-buffer.effects.spec.ts b/src/app/core/cache/server-sync-buffer.effects.spec.ts index 68e5b1f94f..66477adc20 100644 --- a/src/app/core/cache/server-sync-buffer.effects.spec.ts +++ b/src/app/core/cache/server-sync-buffer.effects.spec.ts @@ -18,7 +18,7 @@ import { DSpaceObject } from '../shared/dspace-object.model'; import { getMockRequestService } from '../../shared/mocks/mock-request.service'; import { ApplyPatchObjectCacheAction } from './object-cache.actions'; -fdescribe('ServerSyncBufferEffects', () => { +describe('ServerSyncBufferEffects', () => { let ssbEffects: ServerSyncBufferEffects; let actions: Observable; const testConfig = {