diff --git a/.vscode/settings.json b/.vscode/settings.json
index e8522b85d7..f60eb01f00 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,5 +3,6 @@
"i18n-ally.localesPaths": [
"src/assets/i18n",
"src/app/core/locale"
- ]
+ ],
+ "typescript.tsdk": "node_modules\\typescript\\lib"
}
\ No newline at end of file
diff --git a/package.json b/package.json
index b901c8d2db..236845da1a 100644
--- a/package.json
+++ b/package.json
@@ -63,26 +63,26 @@
"webdriver-manager": "^12.1.8"
},
"dependencies": {
- "@angular/animations": "~10.2.3",
- "@angular/cdk": "^10.2.6",
- "@angular/common": "~10.2.3",
- "@angular/compiler": "~10.2.3",
- "@angular/core": "~10.2.3",
- "@angular/forms": "~10.2.3",
- "@angular/localize": "10.2.3",
- "@angular/platform-browser": "~10.2.3",
- "@angular/platform-browser-dynamic": "~10.2.3",
- "@angular/platform-server": "~10.2.3",
- "@angular/router": "~10.2.3",
+ "@angular/animations": "~11.2.14",
+ "@angular/cdk": "^11.2.13",
+ "@angular/common": "~11.2.14",
+ "@angular/compiler": "~11.2.14",
+ "@angular/core": "~11.2.14",
+ "@angular/forms": "~11.2.14",
+ "@angular/localize": "11.2.14",
+ "@angular/platform-browser": "~11.2.14",
+ "@angular/platform-browser-dynamic": "~11.2.14",
+ "@angular/platform-server": "~11.2.14",
+ "@angular/router": "~11.2.14",
"@angularclass/bootloader": "1.0.1",
"@kolkov/ngx-gallery": "^1.2.3",
- "@ng-bootstrap/ng-bootstrap": "7.0.0",
- "@ng-dynamic-forms/core": "^12.0.0",
- "@ng-dynamic-forms/ui-ng-bootstrap": "^12.0.0",
- "@ngrx/effects": "^10.0.1",
- "@ngrx/router-store": "^10.0.1",
- "@ngrx/store": "^10.0.1",
- "@nguniversal/express-engine": "10.1.0",
+ "@ng-bootstrap/ng-bootstrap": "9.1.3",
+ "@ng-dynamic-forms/core": "^13.0.0",
+ "@ng-dynamic-forms/ui-ng-bootstrap": "^13.0.0",
+ "@ngrx/effects": "^11.1.1",
+ "@ngrx/router-store": "^11.1.1",
+ "@ngrx/store": "^11.1.1",
+ "@nguniversal/express-engine": "11.2.1",
"@ngx-translate/core": "^13.0.0",
"@nicky-lenaers/ngx-scroll-to": "^9.0.0",
"angular-idle-preload": "3.0.0",
@@ -115,13 +115,13 @@
"mirador-share-plugin": "^0.10.0",
"moment": "^2.29.1",
"morgan": "^1.10.0",
- "ng-mocks": "10.5.4",
+ "ng-mocks": "11.11.2",
"ng2-file-upload": "1.4.0",
"ng2-nouislider": "^1.8.3",
"ngx-infinite-scroll": "^10.0.1",
"ngx-moment": "^5.0.0",
"ngx-pagination": "5.0.0",
- "ngx-sortablejs": "^10.0.0",
+ "ngx-sortablejs": "^11.1.0",
"nouislider": "^14.6.3",
"pem": "1.14.4",
"postcss-cli": "^8.3.0",
@@ -138,25 +138,25 @@
},
"devDependencies": {
"@angular-builders/custom-webpack": "10.0.1",
- "@angular-devkit/build-angular": "~0.1002.3",
- "@angular/cli": "~10.2.0",
- "@angular/compiler-cli": "~10.2.3",
- "@angular/language-service": "~10.2.3",
+ "@angular-devkit/build-angular": "~0.1102.15",
+ "@angular/cli": "~11.2.15",
+ "@angular/compiler-cli": "~11.2.14",
+ "@angular/language-service": "~11.2.14",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^5.5.0",
- "@ngrx/store-devtools": "^10.0.1",
+ "@ngrx/store-devtools": "^11.1.1",
"@ngtools/webpack": "10.2.3",
- "@nguniversal/builders": "~10.1.0",
+ "@nguniversal/builders": "~11.2.1",
"@types/deep-freeze": "0.1.2",
"@types/express": "^4.17.9",
"@types/file-saver": "^2.0.1",
- "@types/jasmine": "^3.6.2",
+ "@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.8",
"@types/js-cookie": "2.2.6",
"@types/lodash": "^4.14.165",
"@types/node": "^14.14.9",
"axe-core": "^4.3.3",
- "codelyzer": "^6.0.1",
+ "codelyzer": "^6.0.0",
"compression-webpack-plugin": "^3.0.1",
"copy-webpack-plugin": "^6.4.1",
"css-loader": "3.4.0",
@@ -169,14 +169,14 @@
"fork-ts-checker-webpack-plugin": "^6.0.3",
"html-loader": "^1.3.2",
"html-webpack-plugin": "^4.5.0",
- "jasmine-core": "^3.6.0",
+ "jasmine-core": "~3.6.0",
"jasmine-marbles": "0.6.0",
- "jasmine-spec-reporter": "^6.0.0",
+ "jasmine-spec-reporter": "~5.0.0",
"karma": "^5.2.3",
- "karma-chrome-launcher": "^3.1.0",
+ "karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
- "karma-jasmine": "^4.0.1",
- "karma-jasmine-html-reporter": "^1.5.4",
+ "karma-jasmine": "~4.0.0",
+ "karma-jasmine-html-reporter": "^1.5.0",
"karma-mocha-reporter": "2.2.5",
"nodemon": "^2.0.2",
"npm-run-all": "^4.1.5",
@@ -204,4 +204,4 @@
"webpack-cli": "^4.2.0",
"webpack-dev-server": "^4.5.0"
}
-}
+}
\ No newline at end of file
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 157ada622d..26d9a5dc0d 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -202,8 +202,9 @@ import { GroupAdministratorGuard } from './core/data/feature-authorization/featu
{ path: '**', pathMatch: 'full', component: ThemedPageNotFoundComponent },
]}
],{
- onSameUrlNavigation: 'reload',
- })
+ onSameUrlNavigation: 'reload',
+ relativeLinkResolution: 'legacy'
+})
],
exports: [RouterModule],
})
diff --git a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html
index e10b9da247..042beddc84 100644
--- a/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html
+++ b/src/app/collection-page/collection-item-mapper/collection-item-mapper.component.html
@@ -5,9 +5,10 @@
{{'collection.edit.item-mapper.description' | translate}}
-
-
-
+
-
-
+
+
+ {{'collection.edit.item-mapper.tabs.map' | translate}}
+
diff --git a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html
index 589981d3c9..c779c4aafa 100644
--- a/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html
+++ b/src/app/item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.html
@@ -5,9 +5,10 @@
{{'item.edit.item-mapper.description' | translate}}
-
-
-
+
-
-
+
+
+ {{'item.edit.item-mapper.tabs.map' | translate}}
+
diff --git a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.spec.ts b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.spec.ts
index 1f1fed789f..98d0ac08a6 100644
--- a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.spec.ts
+++ b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.spec.ts
@@ -1,5 +1,5 @@
import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { NgxGalleryOptions } from '@kolkov/ngx-gallery';
import { Bitstream } from '../../../core/shared/bitstream.model';
import { MediaViewerItem } from '../../../core/shared/media-viewer-item.model';
@@ -55,7 +55,7 @@ describe('MediaViewerImageComponent', () => {
]
);
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports:[],
declarations: [MediaViewerImageComponent],
diff --git a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.spec.ts b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.spec.ts
index 88138a252f..354ba57727 100644
--- a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.spec.ts
+++ b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.spec.ts
@@ -1,5 +1,5 @@
import { NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { of as observableOf } from 'rxjs';
@@ -17,7 +17,7 @@ describe('MediaViewerVideoComponent', () => {
let component: MediaViewerVideoComponent;
let fixture: ComponentFixture;
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
TranslateModule.forRoot({
diff --git a/src/app/item-page/media-viewer/media-viewer.component.spec.ts b/src/app/item-page/media-viewer/media-viewer.component.spec.ts
index ebea703ec8..cfd72bf416 100644
--- a/src/app/item-page/media-viewer/media-viewer.component.spec.ts
+++ b/src/app/item-page/media-viewer/media-viewer.component.spec.ts
@@ -1,4 +1,4 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { Bitstream } from '../../core/shared/bitstream.model';
import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils';
import { createPaginatedList } from '../../shared/testing/utils.test';
@@ -60,7 +60,7 @@ describe('MediaViewerComponent', () => {
{ bitstream: mockBitstream, format: 'image', thumbnail: null }
);
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
TranslateModule.forRoot({
diff --git a/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.html b/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.html
index f9642d2c01..223d4a6ed0 100644
--- a/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.html
+++ b/src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.html
@@ -1,17 +1,21 @@
- 1" [destroyOnHide]="true" #tabs="ngbTabset" [activeId]="activeTab$ | async" (tabChange)="onTabChange($event)">
-
-
-
-
-
-
-
-
-
+ 1">
+
+
+
{
};
describe('With only one Entity', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
CommonModule,
@@ -126,7 +126,7 @@ describe('MyDSpaceNewExternalDropdownComponent test', () => {
});
describe('With more than one Entity', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
CommonModule,
diff --git a/src/app/my-dspace-page/my-dspace-new-submission/my-dspace-new-submission-dropdown/my-dspace-new-submission-dropdown.component.spec.ts b/src/app/my-dspace-page/my-dspace-new-submission/my-dspace-new-submission-dropdown/my-dspace-new-submission-dropdown.component.spec.ts
index 2e7361c560..a13acd0501 100644
--- a/src/app/my-dspace-page/my-dspace-new-submission/my-dspace-new-submission-dropdown/my-dspace-new-submission-dropdown.component.spec.ts
+++ b/src/app/my-dspace-page/my-dspace-new-submission/my-dspace-new-submission-dropdown/my-dspace-new-submission-dropdown.component.spec.ts
@@ -1,5 +1,5 @@
import { Component, DebugElement, NO_ERRORS_SCHEMA } from '@angular/core';
-import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing';
+import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core';
@@ -79,7 +79,7 @@ describe('MyDSpaceNewSubmissionDropdownComponent test', () => {
};
describe('With only one Entity', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
CommonModule,
@@ -130,7 +130,7 @@ describe('MyDSpaceNewSubmissionDropdownComponent test', () => {
});
describe('With more than one Entity', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [
CommonModule,
diff --git a/src/app/shared/bitstream-download-page/bitstream-download-page.component.spec.ts b/src/app/shared/bitstream-download-page/bitstream-download-page.component.spec.ts
index 2803a7f789..4100653e0f 100644
--- a/src/app/shared/bitstream-download-page/bitstream-download-page.component.spec.ts
+++ b/src/app/shared/bitstream-download-page/bitstream-download-page.component.spec.ts
@@ -1,4 +1,4 @@
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { AuthService } from '../../core/auth/auth.service';
import { FileService } from '../../core/shared/file.service';
import { of as observableOf } from 'rxjs';
@@ -77,7 +77,7 @@ describe('BitstreamDownloadPageComponent', () => {
}
describe('init', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
init();
initTestbed();
}));
@@ -93,7 +93,7 @@ describe('BitstreamDownloadPageComponent', () => {
describe('bitstream retrieval', () => {
describe('when the user is authorized and not logged in', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
init();
(authService.isAuthenticated as jasmine.Spy).and.returnValue(observableOf(false));
@@ -109,7 +109,7 @@ describe('BitstreamDownloadPageComponent', () => {
});
});
describe('when the user is authorized and logged in', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
init();
initTestbed();
}));
@@ -123,7 +123,7 @@ describe('BitstreamDownloadPageComponent', () => {
});
});
describe('when the user is not authorized and logged in', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
init();
(authorizationService.isAuthorized as jasmine.Spy).and.returnValue(observableOf(false));
initTestbed();
@@ -138,7 +138,7 @@ describe('BitstreamDownloadPageComponent', () => {
});
});
describe('when the user is not authorized and not logged in', () => {
- beforeEach(async(() => {
+ beforeEach(waitForAsync(() => {
init();
(authService.isAuthenticated as jasmine.Spy).and.returnValue(observableOf(false));
(authorizationService.isAuthorized as jasmine.Spy).and.returnValue(observableOf(false));
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html
index ab4984f2fe..058b3142c3 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html
@@ -7,59 +7,64 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+