diff --git a/src/app/core/data/base/identifiable-data.service.spec.ts b/src/app/core/data/base/identifiable-data.service.spec.ts index 11af83ff9f6..817779fae7a 100644 --- a/src/app/core/data/base/identifiable-data.service.spec.ts +++ b/src/app/core/data/base/identifiable-data.service.spec.ts @@ -5,7 +5,6 @@ * * http://www.dspace.org/license/ */ -import { FindListOptions } from '../find-list-options.model'; import { getMockRequestService } from '../../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../../shared/testing/hal-endpoint-service.stub'; import { getMockRemoteDataBuildService } from '../../../shared/mocks/remote-data-build.service.mock'; @@ -13,7 +12,7 @@ import { followLink } from '../../../shared/utils/follow-link-config.model'; import { TestScheduler } from 'rxjs/testing'; import { RemoteData } from '../remote-data'; import { RequestEntryState } from '../request-entry-state.model'; -import { Observable, of as observableOf } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { RequestService } from '../request.service'; import { RemoteDataBuildService } from '../../cache/builders/remote-data-build.service'; import { HALEndpointService } from '../../shared/hal-endpoint.service'; @@ -21,7 +20,8 @@ import { ObjectCacheService } from '../../cache/object-cache.service'; import { IdentifiableDataService } from './identifiable-data.service'; import { EMBED_SEPARATOR } from './base-data.service'; -const endpoint = 'https://rest.api/core'; +const base = 'https://rest.api/core'; +const endpoint = 'test'; class TestService extends IdentifiableDataService { constructor( @@ -30,11 +30,7 @@ class TestService extends IdentifiableDataService { protected objectCache: ObjectCacheService, protected halService: HALEndpointService, ) { - super(undefined, requestService, rdbService, objectCache, halService); - } - - public getBrowseEndpoint(options: FindListOptions = {}, linkPath: string = this.linkPath): Observable { - return observableOf(endpoint); + super(endpoint, requestService, rdbService, objectCache, halService); } } @@ -51,7 +47,7 @@ describe('IdentifiableDataService', () => { function initTestService(): TestService { requestService = getMockRequestService(); - halService = new HALEndpointServiceStub('url') as any; + halService = new HALEndpointServiceStub(base) as any; rdbService = getMockRemoteDataBuildService(); objectCache = { @@ -143,4 +139,12 @@ describe('IdentifiableDataService', () => { expect(result).toEqual(expected); }); }); + + describe('invalidateById', () => { + it('should invalidate the correct resource by href', () => { + spyOn(service, 'invalidateByHref').and.returnValue(observableOf(true)); + service.invalidateById('123'); + expect(service.invalidateByHref).toHaveBeenCalledWith(`${base}/${endpoint}/123`); + }); + }); }); diff --git a/src/app/core/data/base/identifiable-data.service.ts b/src/app/core/data/base/identifiable-data.service.ts index 904f925765c..fae6fd88c19 100644 --- a/src/app/core/data/base/identifiable-data.service.ts +++ b/src/app/core/data/base/identifiable-data.service.ts @@ -8,7 +8,7 @@ import { CacheableObject } from '../../cache/cacheable-object.model'; import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model'; import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { map, switchMap, take } from 'rxjs/operators'; import { RemoteData } from '../remote-data'; import { BaseDataService } from './base-data.service'; import { RequestService } from '../request.service'; @@ -80,4 +80,19 @@ export class IdentifiableDataService extends BaseData return this.getEndpoint().pipe( map((endpoint: string) => this.getIDHref(endpoint, resourceID, ...linksToFollow))); } + + /** + * Invalidate a cached resource by its identifier + * @param resourceID the identifier of the resource to invalidate + */ + invalidateById(resourceID: string): Observable { + const ok$ = this.getIDHrefObs(resourceID).pipe( + take(1), + switchMap((href) => this.invalidateByHref(href)) + ); + + ok$.subscribe(); + + return ok$; + } } diff --git a/src/app/core/data/version-history-data.service.spec.ts b/src/app/core/data/version-history-data.service.spec.ts index 03bf6c8bcb7..1d55b4b2f19 100644 --- a/src/app/core/data/version-history-data.service.spec.ts +++ b/src/app/core/data/version-history-data.service.spec.ts @@ -65,6 +65,10 @@ describe('VersionHistoryDataService', () => { }, }, }); + const version1WithDraft = Object.assign(new Version(), { + ...version1, + versionhistory: createSuccessfulRemoteDataObject$(versionHistoryDraft), + }); const versions = [version1, version2]; versionHistory.versions = createSuccessfulRemoteDataObject$(createPaginatedList(versions)); const item1 = Object.assign(new Item(), { @@ -186,21 +190,18 @@ describe('VersionHistoryDataService', () => { }); describe('hasDraftVersion$', () => { - beforeEach(waitForAsync(() => { - versionService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(version1)); - })); it('should return false if draftVersion is false', fakeAsync(() => { - versionService.getHistoryFromVersion.and.returnValue(of(versionHistory)); + versionService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(version1)); service.hasDraftVersion$('href').subscribe((res) => { expect(res).toBeFalse(); }); })); + it('should return true if draftVersion is true', fakeAsync(() => { - versionService.getHistoryFromVersion.and.returnValue(of(versionHistoryDraft)); + versionService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(version1WithDraft)); service.hasDraftVersion$('href').subscribe((res) => { expect(res).toBeTrue(); }); })); }); - }); diff --git a/src/app/core/data/version-history-data.service.ts b/src/app/core/data/version-history-data.service.ts index b331c4f2e40..82290835355 100644 --- a/src/app/core/data/version-history-data.service.ts +++ b/src/app/core/data/version-history-data.service.ts @@ -6,23 +6,21 @@ import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { HttpHeaders } from '@angular/common/http'; import { PostRequest } from './request.models'; -import { Observable, of } from 'rxjs'; +import { combineLatest, Observable, of as observableOf } from 'rxjs'; import { PaginatedSearchOptions } from '../../shared/search/models/paginated-search-options.model'; import { RemoteData } from './remote-data'; import { PaginatedList } from './paginated-list.model'; import { Version } from '../shared/version.model'; -import { filter, map, switchMap, take } from 'rxjs/operators'; +import { filter, find, map, switchMap, take } from 'rxjs/operators'; import { VERSION_HISTORY } from '../shared/version-history.resource-type'; import { followLink, FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { VersionDataService } from './version-data.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { getAllSucceededRemoteData, getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload, getRemoteDataPayload } from '../shared/operators'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { hasValueOperator } from '../../shared/empty.util'; +import { hasValue, hasValueOperator } from '../../shared/empty.util'; import { Item } from '../shared/item.model'; import { FindListOptions } from './find-list-options.model'; -import { sendRequest } from '../shared/request.operators'; -import { RestRequest } from './rest-request.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { dataService } from './base/data-service.decorator'; @@ -86,19 +84,31 @@ export class VersionHistoryDataService extends IdentifiableDataService> { + const requestId = this.requestService.generateRequestId(); const requestOptions: HttpOptions = Object.create({}); let requestHeaders = new HttpHeaders(); requestHeaders = requestHeaders.append('Content-Type', 'text/uri-list'); requestOptions.headers = requestHeaders; - return this.halService.getEndpoint(this.versionsEndpoint).pipe( + this.halService.getEndpoint(this.versionsEndpoint).pipe( take(1), map((endpointUrl: string) => (summary?.length > 0) ? `${endpointUrl}?summary=${summary}` : `${endpointUrl}`), - map((endpointURL: string) => new PostRequest(this.requestService.generateRequestId(), endpointURL, itemHref, requestOptions)), - sendRequest(this.requestService), - switchMap((restRequest: RestRequest) => this.rdbService.buildFromRequestUUID(restRequest.uuid)), - getFirstCompletedRemoteData() - ) as Observable>; + find((href: string) => hasValue(href)), + ).subscribe((href) => { + const request = new PostRequest(requestId, href, itemHref, requestOptions); + if (hasValue(this.responseMsToLive)) { + request.responseMsToLive = this.responseMsToLive; + } + + this.requestService.send(request); + }); + + return this.rdbService.buildFromRequestUUIDAndAwait(requestId, (versionRD) => combineLatest([ + this.requestService.setStaleByHrefSubstring(versionRD.payload._links.self.href), + this.requestService.setStaleByHrefSubstring(versionRD.payload._links.versionhistory.href), + ])).pipe( + getFirstCompletedRemoteData(), + ); } /** @@ -137,7 +147,7 @@ export class VersionHistoryDataService extends IdentifiableDataService res.versionhistory), getFirstSucceededRemoteDataPayload(), switchMap((versionHistoryRD) => this.getLatestVersionFromHistory$(versionHistoryRD)), - ) : of(null); + ) : observableOf(null); } /** @@ -148,8 +158,8 @@ export class VersionHistoryDataService extends IdentifiableDataService { return version ? this.getLatestVersion$(version).pipe( take(1), - switchMap((latestVersion) => of(version.version === latestVersion.version)) - ) : of(null); + switchMap((latestVersion) => observableOf(version.version === latestVersion.version)) + ) : observableOf(null); } /** @@ -158,17 +168,22 @@ export class VersionHistoryDataService extends IdentifiableDataService { - return this.versionDataService.findByHref(versionHref, true, true, followLink('versionhistory')).pipe( + return this.versionDataService.findByHref(versionHref, false, true, followLink('versionhistory')).pipe( getFirstCompletedRemoteData(), - switchMap((res) => { - if (res.hasSucceeded && !res.hasNoContent) { - return of(res).pipe( - getFirstSucceededRemoteDataPayload(), - switchMap((version) => this.versionDataService.getHistoryFromVersion(version)), - map((versionHistory) => versionHistory ? versionHistory.draftVersion : false), + switchMap((versionRD: RemoteData) => { + if (versionRD.hasSucceeded && !versionRD.hasNoContent) { + return versionRD.payload.versionhistory.pipe( + getFirstCompletedRemoteData(), + map((versionHistoryRD: RemoteData) => { + if (versionHistoryRD.hasSucceeded && !versionHistoryRD.hasNoContent) { + return versionHistoryRD.payload.draftVersion; + } else { + return false; + } + }), ); } else { - return of(false); + return observableOf(false); } }), ); diff --git a/src/app/core/submission/workflowitem-data.service.ts b/src/app/core/submission/workflowitem-data.service.ts index 47d18470d39..25e3aa6aae7 100644 --- a/src/app/core/submission/workflowitem-data.service.ts +++ b/src/app/core/submission/workflowitem-data.service.ts @@ -13,7 +13,6 @@ import { RemoteData } from '../data/remote-data'; import { NoContent } from '../shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; -import { WorkspaceItem } from './models/workspaceitem.model'; import { RequestParam } from '../cache/models/request-param.model'; import { FindListOptions } from '../data/find-list-options.model'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; @@ -28,7 +27,6 @@ import { dataService } from '../data/base/data-service.decorator'; @Injectable() @dataService(WorkflowItem.type) export class WorkflowItemDataService extends IdentifiableDataService implements SearchData, DeleteData { - protected linkPath = 'workflowitems'; protected searchByItemLinkPath = 'item'; protected responseMsToLive = 10 * 1000; @@ -42,7 +40,7 @@ export class WorkflowItemDataService extends IdentifiableDataService[]): Observable> { + public findByItem(uuid: string, useCachedVersionIfAvailable = false, reRequestOnStale = true, options: FindListOptions = {}, ...linksToFollow: FollowLinkConfig[]): Observable> { const findListOptions = new FindListOptions(); findListOptions.searchParams = [new RequestParam('uuid', encodeURIComponent(uuid))]; const href$ = this.searchData.getSearchByHref(this.searchByItemLinkPath, findListOptions, ...linksToFollow); @@ -126,7 +124,7 @@ export class WorkflowItemDataService extends IdentifiableDataService>} * Return an observable that emits response from the server */ - public searchBy(searchMethod: string, options?: FindListOptions, useCachedVersionIfAvailable?: boolean, reRequestOnStale?: boolean, ...linksToFollow: FollowLinkConfig[]): Observable>> { + public searchBy(searchMethod: string, options?: FindListOptions, useCachedVersionIfAvailable?: boolean, reRequestOnStale?: boolean, ...linksToFollow: FollowLinkConfig[]): Observable>> { return this.searchData.searchBy(searchMethod, options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } diff --git a/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts index 46792294dd8..b9c77dc56b6 100644 --- a/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts +++ b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts @@ -1,7 +1,7 @@ import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { Version } from '../../../core/shared/version.model'; -import { map, startWith, switchMap, tap } from 'rxjs/operators'; +import { map, switchMap, tap } from 'rxjs/operators'; import { Item } from '../../../core/shared/item.model'; import { WorkspaceItem } from '../../../core/submission/models/workspaceitem.model'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; @@ -13,9 +13,7 @@ import { ItemDataService } from '../../../core/data/item-data.service'; import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { ItemVersionsSharedService } from '../../../item-page/versions/item-versions-shared.service'; -import { - ItemVersionsSummaryModalComponent -} from '../../../item-page/versions/item-versions-summary-modal/item-versions-summary-modal.component'; +import { ItemVersionsSummaryModalComponent } from '../../../item-page/versions/item-versions-summary-modal/item-versions-summary-modal.component'; /** * Service to take care of all the functionality related to the version creation modal @@ -86,7 +84,6 @@ export class DsoVersioningModalService { // button is disabled if hasDraftVersion = true, and enabled if hasDraftVersion = false or null // (hasDraftVersion is null when a version history does not exist) map((res) => Boolean(res)), - startWith(true), ); } diff --git a/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.spec.ts index b79040fb125..617fd95b045 100644 --- a/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.spec.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/co import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; -import { of, of as observableOf } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { ClaimedTaskActionsApproveComponent } from './claimed-task-actions-approve.component'; import { TranslateLoaderMock } from '../../../mocks/translate-loader.mock'; @@ -18,6 +18,7 @@ import { Router } from '@angular/router'; import { RouterStub } from '../../../testing/router.stub'; import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; +import { WorkflowItemDataService } from '../../../../core/submission/workflowitem-data.service'; let component: ClaimedTaskActionsApproveComponent; let fixture: ComponentFixture; @@ -27,6 +28,7 @@ const searchService = getMockSearchService(); const requestService = getMockRequestService(); let mockPoolTaskDataService: PoolTaskDataService; +let mockWorkflowItemDataService: WorkflowItemDataService; describe('ClaimedTaskActionsApproveComponent', () => { const object = Object.assign(new ClaimedTask(), { id: 'claimed-task-1' }); @@ -36,6 +38,10 @@ describe('ClaimedTaskActionsApproveComponent', () => { beforeEach(waitForAsync(() => { mockPoolTaskDataService = new PoolTaskDataService(null, null, null, null); + mockWorkflowItemDataService = jasmine.createSpyObj('WorkflowItemDataService', { + 'invalidateByHref': observableOf(false), + }); + TestBed.configureTestingModule({ imports: [ TranslateModule.forRoot({ @@ -53,6 +59,7 @@ describe('ClaimedTaskActionsApproveComponent', () => { { provide: SearchService, useValue: searchService }, { provide: RequestService, useValue: requestService }, { provide: PoolTaskDataService, useValue: mockPoolTaskDataService }, + { provide: WorkflowItemDataService, useValue: mockWorkflowItemDataService }, ], declarations: [ClaimedTaskActionsApproveComponent], schemas: [NO_ERRORS_SCHEMA] @@ -89,7 +96,7 @@ describe('ClaimedTaskActionsApproveComponent', () => { beforeEach(() => { spyOn(component.processCompleted, 'emit'); - spyOn(component, 'startActionExecution').and.returnValue(of(null)); + spyOn(component, 'startActionExecution').and.returnValue(observableOf(null)); expectedBody = { [component.option]: 'true' diff --git a/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.ts b/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.ts index 467d1514c90..ebee0f01080 100644 --- a/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.ts @@ -10,6 +10,7 @@ import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; import { RequestService } from '../../../../core/data/request.service'; import { ClaimedApprovedTaskSearchResult } from '../../../object-collection/shared/claimed-approved-task-search-result.model'; +import { WorkflowItemDataService } from '../../../../core/submission/workflowitem-data.service'; export const WORKFLOW_TASK_OPTION_APPROVE = 'submit_approve'; @@ -28,12 +29,15 @@ export class ClaimedTaskActionsApproveComponent extends ClaimedTaskActionsAbstra */ option = WORKFLOW_TASK_OPTION_APPROVE; - constructor(protected injector: Injector, - protected router: Router, - protected notificationsService: NotificationsService, - protected translate: TranslateService, - protected searchService: SearchService, - protected requestService: RequestService) { + constructor( + protected injector: Injector, + protected router: Router, + protected notificationsService: NotificationsService, + protected translate: TranslateService, + protected searchService: SearchService, + protected requestService: RequestService, + protected workflowItemDataService: WorkflowItemDataService, + ) { super(injector, router, notificationsService, translate, searchService, requestService); } @@ -48,4 +52,13 @@ export class ClaimedTaskActionsApproveComponent extends ClaimedTaskActionsAbstra return reloadedObject; } + public handleReloadableActionResponse(result: boolean, dso: DSpaceObject): void { + super.handleReloadableActionResponse(result, dso); + + // Item page version table includes labels for workflow Items, determined + // based on the result of /workflowitems/search/item?uuid=... + // In order for this label to be in sync with the workflow state, we should + // invalidate WFIs as they are approved. + this.workflowItemDataService.invalidateByHref(this.object?._links.workflowitem?.href); + } } diff --git a/src/app/submission/objects/submission-objects.effects.spec.ts b/src/app/submission/objects/submission-objects.effects.spec.ts index a1bb878aa59..11eb375cc63 100644 --- a/src/app/submission/objects/submission-objects.effects.spec.ts +++ b/src/app/submission/objects/submission-objects.effects.spec.ts @@ -66,6 +66,8 @@ describe('SubmissionObjectEffects test suite', () => { let submissionServiceStub; let submissionJsonPatchOperationsServiceStub; let submissionObjectDataServiceStub; + let workspaceItemDataService; + const collectionId: string = mockSubmissionCollectionId; const submissionId: string = mockSubmissionId; const submissionDefinitionResponse: any = mockSubmissionDefinitionResponse; @@ -82,6 +84,10 @@ describe('SubmissionObjectEffects test suite', () => { submissionServiceStub.hasUnsavedModification.and.returnValue(observableOf(true)); + workspaceItemDataService = jasmine.createSpyObj('WorkspaceItemDataService', { + invalidateById: observableOf(true), + }); + TestBed.configureTestingModule({ imports: [ StoreModule.forRoot({}, storeModuleConfig), @@ -106,6 +112,7 @@ describe('SubmissionObjectEffects test suite', () => { { provide: WorkflowItemDataService, useValue: {} }, { provide: HALEndpointService, useValue: {} }, { provide: SubmissionObjectDataService, useValue: submissionObjectDataServiceStub }, + { provide: WorkspaceitemDataService, useValue: workspaceItemDataService }, ], }); diff --git a/src/app/submission/objects/submission-objects.effects.ts b/src/app/submission/objects/submission-objects.effects.ts index 2c19224336d..4623d808e2d 100644 --- a/src/app/submission/objects/submission-objects.effects.ts +++ b/src/app/submission/objects/submission-objects.effects.ts @@ -55,6 +55,7 @@ import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionE import { FormState } from '../../shared/form/form.reducer'; import { SubmissionSectionObject } from './submission-section-object.model'; import { SubmissionSectionError } from './submission-section-error.model'; +import { WorkspaceitemDataService } from '../../core/submission/workspaceitem-data.service'; @Injectable() export class SubmissionObjectEffects { @@ -258,6 +259,7 @@ export class SubmissionObjectEffects { depositSubmissionSuccess$ = createEffect(() => this.actions$.pipe( ofType(SubmissionObjectActionTypes.DEPOSIT_SUBMISSION_SUCCESS), tap(() => this.notificationsService.success(null, this.translate.get('submission.sections.general.deposit_success_notice'))), + tap((action: DepositSubmissionSuccessAction) => this.workspaceItemDataService.invalidateById(action.payload.submissionId)), tap(() => this.submissionService.redirectToMyDSpace())), { dispatch: false }); /** @@ -326,14 +328,17 @@ export class SubmissionObjectEffects { ofType(SubmissionObjectActionTypes.DISCARD_SUBMISSION_ERROR), tap(() => this.notificationsService.error(null, this.translate.get('submission.sections.general.discard_error_notice')))), { dispatch: false }); - constructor(private actions$: Actions, + constructor( + private actions$: Actions, private notificationsService: NotificationsService, private operationsService: SubmissionJsonPatchOperationsService, private sectionService: SectionsService, private store$: Store, private submissionService: SubmissionService, private submissionObjectService: SubmissionObjectDataService, - private translate: TranslateService) { + private translate: TranslateService, + private workspaceItemDataService: WorkspaceitemDataService, + ) { } /** diff --git a/src/assets/i18n/bn.json5 b/src/assets/i18n/bn.json5 index c70cc6f4595..50f6ced88c5 100644 --- a/src/assets/i18n/bn.json5 +++ b/src/assets/i18n/bn.json5 @@ -3121,7 +3121,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "নতুন সংস্করণ তৈরি করুন", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "একটি নতুন সংস্করণ তৈরি করা যাচ্ছে না কারণ ভার্সন হিস্ট্রিতে একটি জমা ইনপ্রগ্রেসস অবস্থাই রয়েছে", // "item.preview.dc.identifier.uri": "Identifier:", @@ -3250,7 +3250,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "মুছে ফেলুন সংস্করণ", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "একটি নতুন সংস্করণ তৈরি করা যাচ্ছে না কারণ ভার্সন হিস্ট্রিতে একটি জমা ইনপ্রগ্রেসস অবস্থাই রয়েছে", @@ -3291,7 +3291,7 @@ // "item.version.create.notification.failure" : "New version has not been created", "item.version.create.notification.failure": "নতুন সংস্করণ তৈরি করা হয়নি", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "একটি নতুন সংস্করণ তৈরি করা যাবে না কারণ ভার্সন হিস্ট্রিতে একটি জমা ইনপ্রগ্রেসস অবস্থাই রয়েছে", diff --git a/src/assets/i18n/ca.json5 b/src/assets/i18n/ca.json5 index ad8fe49424e..33919fecc32 100644 --- a/src/assets/i18n/ca.json5 +++ b/src/assets/i18n/ca.json5 @@ -3376,7 +3376,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Crear una nova versió", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "No es pot crear una nova versió perquè a l'historial de versions hi ha un enviament en curs", // "item.page.claim.button": "Claim", @@ -3535,7 +3535,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Esborrar versió", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "No és possible crear una nova versió ja que existeix a l'historial de versions un enviament pendent", @@ -3582,7 +3582,7 @@ // "item.version.create.notification.failure" : "New version has not been created", "item.version.create.notification.failure": "No s'ha creat una nova versió", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "No és possible crear una nova versió ja que existeix a l'historial de versions un enviament pendent", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index e6613160bd0..45e4fc9167e 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2745,7 +2745,7 @@ "item.page.version.create": "Create new version", - "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.claim.button": "Claim", @@ -2933,7 +2933,7 @@ "item.version.history.table.action.deleteVersion": "Delete version", - "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -2963,7 +2963,7 @@ "item.version.create.notification.failure": "New version has not been created", - "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.delete.modal.header": "Delete version", diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 0d5b27473cf..13e6b36b7b8 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -3660,7 +3660,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Crear una nueva version", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "No se puede crear una nueva versión porque en el historial de versiones hay un envío en curso", // "item.page.claim.button": "Claim", @@ -3819,7 +3819,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Borrar versión", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "No es posible crear una nueva versión puesto que existe en el historial de versiones un envío pendiente", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -3864,7 +3864,7 @@ // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "No se ha creado una nueva versión", - // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "No es posible crear una nueva versión puesto que existe en el historial de versiones un envío pendiente", // "item.version.delete.modal.header": "Delete version", diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index 699ca5cc27b..62143efb6ce 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -3108,7 +3108,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Créer une nouvelle version", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Une nouvelle version ne peut être créée car il y a une soumission en cours dans l'historique des versions", // "item.preview.dc.identifier.uri": "Identifier:", @@ -3234,7 +3234,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Supprimer la version", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "Une nouvelle version ne peut pas être créée parce qu'il y a une soumission en cours dans l'historique des versions.", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -3273,7 +3273,7 @@ // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "La nouvelle version n'a pas été créée", - // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "Une nouvelle version ne peut pas être créée parce qu'il y a une soumission en cours dans l'historique des versions.", // "item.version.delete.modal.header": "Delete version", diff --git a/src/assets/i18n/gd.json5 b/src/assets/i18n/gd.json5 index 55a53bc6f1b..b509f57b5a6 100644 --- a/src/assets/i18n/gd.json5 +++ b/src/assets/i18n/gd.json5 @@ -3106,7 +3106,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Cruthaich dreach ùr", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Cha ghabh dreach ùr a chruthachadh oir tha cur-a-steach a' tachairt ann an eachdraidh nan dreachan", // "item.preview.dc.identifier.uri": "Identifier:", @@ -3235,7 +3235,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Dubh às dreach", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "Cha ghabh dreach ùr a chruthachadh oir tha cur-a-steach a' tachairt ann an eachdraidh nan dreachan", @@ -3276,7 +3276,7 @@ // "item.version.create.notification.failure" : "New version has not been created", "item.version.create.notification.failure": "Cha deach dreach ùr a chruthachadh", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "Cha ghabh dreach ùr a chruthachadh oir tha cur-a-steach a' tachairt ann an eachdraidh nan dreachan", diff --git a/src/assets/i18n/hu.json5 b/src/assets/i18n/hu.json5 index d186f6435a7..5f70b05e12c 100644 --- a/src/assets/i18n/hu.json5 +++ b/src/assets/i18n/hu.json5 @@ -3975,9 +3975,9 @@ // TODO New key - Add a translation "item.page.version.create": "Create new version", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", // TODO New key - Add a translation - "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", // "item.page.claim.button": "Claim", // TODO New key - Add a translation @@ -4162,9 +4162,9 @@ // TODO New key - Add a translation "item.version.history.table.action.deleteVersion": "Delete version", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", // TODO New key - Add a translation - "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -4223,9 +4223,9 @@ // TODO New key - Add a translation "item.version.create.notification.failure": "New version has not been created", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an in-progress submission in the version history", // TODO New key - Add a translation - "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", // "item.version.delete.modal.header": "Delete version", diff --git a/src/assets/i18n/it.json5 b/src/assets/i18n/it.json5 index 7f410ce0b17..49389cb83fc 100644 --- a/src/assets/i18n/it.json5 +++ b/src/assets/i18n/it.json5 @@ -3663,7 +3663,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Crea una nuova versione", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Impossibile creare una nuova versione perché è presente un'submission in corso nella cronologia delle versioni", // "item.page.claim.button": "Claim", @@ -3822,7 +3822,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Elimina versione", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "Non è possibile creare una nuova versione perchè c'è già una submission in progress nella cronologia delle versioni", @@ -3869,7 +3869,8 @@ // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "Non è stata creata una nuova versione", - // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", + // TODO Source message changed - Revise the translation "item.version.create.notification.inProgress": "Non è possibile creare una nuova versione perchè c'è già una submission in progress nella cronologia delle versioni", diff --git a/src/assets/i18n/kk.json5 b/src/assets/i18n/kk.json5 index d23dc23c475..6ad3942d23a 100644 --- a/src/assets/i18n/kk.json5 +++ b/src/assets/i18n/kk.json5 @@ -3321,7 +3321,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Жаңа нұсқасын жасау", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Жаңа нұсқаны жасау мүмкін емес, өйткені нұсқа тарихында аяқталмаған жіберу бар", // "item.page.claim.button": "Claim", @@ -3481,7 +3481,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Нұсқаны өшіру", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "Жаңа нұсқаны жасау мүмкін емес, өйткені нұсқа тарихында аяқталмаған бағынымдар бар", @@ -3528,7 +3528,7 @@ // "item.version.create.notification.failure" : "New version has not been created", "item.version.create.notification.failure": "Жаңа нұсқа жасалмады", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "Жаңа нұсқаны жасау мүмкін емес, өйткені нұсқа тарихында аяқталмаған жіберу бар", diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index ce35f1ec055..3eea67069df 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -3669,7 +3669,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Criar nova versão", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Não é possível criar uma nova versão porque há uma submissão em andamento no histórico de versões", // "item.page.claim.button": "Claim", @@ -3828,7 +3828,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Apagar versão", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "Não é possível criar uma nova versão porque há uma submissão em andamento no histórico de versões", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -3873,7 +3873,7 @@ // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "A nova versão não foi criada", - // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "Não é possível criar uma nova versão porque há uma submissão em andamento no histórico de versões", // "item.version.delete.modal.header": "Delete version", diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index faa027705e0..59ac6aca71f 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -3619,7 +3619,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Criar nova versão", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", // "item.page.claim.button": "Claim", @@ -3776,7 +3776,7 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Remover versão", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.history.table.action.hasDraft": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -3821,7 +3821,7 @@ // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "Nova versão não foi criada", - // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", "item.version.create.notification.inProgress": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", // "item.version.delete.modal.header": "Delete version", diff --git a/src/assets/i18n/sv.json5 b/src/assets/i18n/sv.json5 index 4e3576ccfc0..023b3e2e18e 100644 --- a/src/assets/i18n/sv.json5 +++ b/src/assets/i18n/sv.json5 @@ -3151,7 +3151,7 @@ // "item.page.version.create": "Create new version", "item.page.version.create": "Skapa ny version", - // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.page.version.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", "item.page.version.hasDraft": "Ny version kan inte skapas pga pågående uppladdning i versionshistoriken", // "item.preview.dc.identifier.uri": "Identifier:", @@ -3281,9 +3281,9 @@ // "item.version.history.table.action.deleteVersion": "Delete version", "item.version.history.table.action.deleteVersion": "Radera version", - // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", // TODO New key - Add a translation - "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an in-progress submission in the version history", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", @@ -3323,9 +3323,9 @@ // "item.version.create.notification.failure" : "New version has not been created", "item.version.create.notification.failure": "Ny version har inte skapats", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an in-progress submission in the version history", // TODO New key - Add a translation - "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress": "A new version cannot be created because there is an in-progress submission in the version history", // "item.version.delete.modal.header": "Delete version",