Compare commits

...

1517 Commits

Author SHA1 Message Date
Tim Donohue
d6c4dad800 Merge pull request #4730 from alanorth/collection-mapper-trash-icon-7x
[Port dspace-7_x] src/app: use correct icon in item mapper
2025-09-22 16:59:47 -05:00
Alan Orth
15525b5df1 src/app: use correct icon in item mapper
When adding mappings in the item mapper we should use the save icon
rather than the trash icon!
2025-09-19 16:41:37 +03:00
Alan Orth
92ffac6eaa Merge pull request #4369 from atmire/w2p-130679_fix-back-button-on-group-roles-page-contribute_7.6 2025-09-15 08:56:29 +03:00
Tim Donohue
ab53a7e7db Merge pull request #4702 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.45.1
Bump core-js from 3.44.0 to 3.45.1
2025-09-12 14:07:07 -05:00
Tim Donohue
b97f02ed7a Merge pull request #4704 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.28.4
Bump @babel/runtime from 7.28.2 to 7.28.4
2025-09-12 12:32:39 -05:00
Tim Donohue
50123adc36 Merge pull request #4703 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-2e0f0fb0cc
Bump sass from 1.89.2 to 1.92.1 in the sass group
2025-09-10 16:58:51 -05:00
Tim Donohue
a36131557f Merge pull request #4705 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.30
Bump isbot from 5.1.29 to 5.1.30
2025-09-10 16:36:19 -05:00
Tim Donohue
2c4790c9ae Merge pull request #4701 from DSpace/dependabot/npm_and_yarn/dspace-7_x/testing-c9201e7a88
Bump cypress-axe from 1.6.0 to 1.7.0 in the testing group
2025-09-10 15:55:49 -05:00
Tim Donohue
7154bc0689 Merge pull request #4717 from DSpace/backport-4634-to-dspace-7_x
[Port dspace-7_x] server.ts: remove port and host fallbacks in run
2025-09-10 15:51:18 -05:00
Tim Donohue
42419d12ee Merge pull request #4714 from DSpace/backport-4636-to-dspace-7_x
[Port dspace-7_x] src/themes/dspace: rework banner image
2025-09-10 14:57:10 -05:00
Alan Orth
65cd1df6ef server.ts: remove port fallback
If a user has messed up their config so much that the fallbacks in
our default configuration interface don't work then we should just
fail here.

(cherry picked from commit 6c09677510)
2025-09-10 19:48:58 +00:00
Alan Orth
66cdc972d2 server.ts: remove invalid host fallback
If `environment.ui.host` is Falsy, then we attempt to fall back to
a host value of '/', which is invalid. I think that, if a user has
messed up their config so much that defaults in our configuration
interface don't work, then we should actually fail here.

(cherry picked from commit f622d58917)
2025-09-10 19:48:58 +00:00
Alan Orth
be06c4fcd1 src/themes/dspace: rework banner image
For some reason our version of this image is twice the size of the
original (~860KiB vs 1.6MiB). To make matters worse, the dimensions
of the image are 4777x3166 pixels, but we display it at 2000 pixels
wide.

This regenerates the images based on the original and adjusts the
dimensions to be more appropriate. Generated using ImageMagick 7
on Linux:

$ magick pexels-inspiredimages-132477.jpg -resize 2000x src/themes/dspace/assets/images/banner.jpg
$ magick pexels-inspiredimages-132477.jpg -resize 2000x src/themes/dspace/assets/images/banner.webp
$ magick pexels-inspiredimages-132477.jpg -resize 1200x src/themes/dspace/assets/images/banner-half.jpg
$ magick pexels-inspiredimages-132477.jpg -resize 1200x src/themes/dspace/assets/images/banner-half.webp

See: https://www.pexels.com/photo/clear-water-drops-132477/
(cherry picked from commit d9e8fea5bf)
2025-09-10 19:07:59 +00:00
Tim Donohue
ccd8d433ee Merge pull request #4180 from alanorth/port-4136-dspace-7
[Port dspace-7_x] Clean up spacing in input forms
2025-09-10 13:36:46 -05:00
Tim Donohue
c186423ad7 Merge pull request #4707 from DSpace/backport-4644-to-dspace-7_x
[Port dspace-7_x] fix: call parent ngOnDestroy in dynamic form control container
2025-09-10 08:52:50 -05:00
Jukka Lipka
826157c1d4 fix: call parent ngOnDestroy in dynamic form control container
(cherry picked from commit 4d803a58d4)
2025-09-09 21:36:50 +00:00
dependabot[bot]
96422c2909 Bump isbot from 5.1.29 to 5.1.30
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.29 to 5.1.30.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.29...v5.1.30)

---
updated-dependencies:
- dependency-name: isbot
  dependency-version: 5.1.30
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 22:40:59 +00:00
dependabot[bot]
57c75d06f9 Bump @babel/runtime from 7.28.2 to 7.28.4
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.28.2 to 7.28.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.4/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.28.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 22:40:21 +00:00
dependabot[bot]
0a63a34533 Bump sass from 1.89.2 to 1.92.1 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.89.2 to 1.92.1
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.2...1.92.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.92.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 22:39:53 +00:00
dependabot[bot]
fffbe2d62c Bump core-js from 3.44.0 to 3.45.1
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.44.0 to 3.45.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.45.1/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.45.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 22:39:48 +00:00
dependabot[bot]
b1bd60ca79 Bump cypress-axe from 1.6.0 to 1.7.0 in the testing group
Bumps the testing group with 1 update: [cypress-axe](https://github.com/component-driven/cypress-axe).


Updates `cypress-axe` from 1.6.0 to 1.7.0
- [Release notes](https://github.com/component-driven/cypress-axe/releases)
- [Commits](https://github.com/component-driven/cypress-axe/compare/v1.6.0...v1.7.0)

---
updated-dependencies:
- dependency-name: cypress-axe
  dependency-version: 1.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 22:39:16 +00:00
Atmire-Kristof
90a1ca6f5d 7.x - Clear url parameters for entity search tabs (#2735)
* 110878: Entity search - clear params on tab switch

* 110878: Properly clear browse-by values when navigating

* 132230: Related entity tab switching: only keep query & scope, reset page to 1

---------

Co-authored-by: Nona Luypaert <nona.luypaert@atmire.com>
2025-09-05 16:47:44 -05:00
Art Lowel
6071065c12 Merge pull request #4669 from DSpace/backport-4664-to-dspace-7_x
[Port dspace-7_x] Inspect event key characters, not keyCodes on tag keyUp for dynamic tag input
2025-09-04 17:38:01 +02:00
Kim Shepherd
86a18f31d9 Create dynamic tag test events with key chars, not keyCodes
(cherry picked from commit 98fc76d867)
2025-09-04 14:46:06 +00:00
Kim Shepherd
1ade04398a Inspect event key characters, not keyCodes on tag keyUp
(cherry picked from commit f313b4a8fd)
2025-09-04 14:46:06 +00:00
Tim Donohue
f5314156f6 Merge pull request #4616 from nimabehforouz/translate-7x-fr
Adding the missing French translations (dspace-7_x)
2025-08-28 16:01:12 -05:00
Tim Donohue
a833ba3d3c Merge pull request #4649 from DSpace/backport-4640-to-dspace-7_x
[Port dspace-7_x] .github/workflows/codescan.yml: use codeql-action v3
2025-08-20 17:16:34 -05:00
Alan Orth
4392a4b67e .github/workflows/codescan.yml: use codeql-action v3
Version 2 was deprecated in January, 2024 after the release of v3.

See: https://github.blog/changelog/2025-01-10-code-scanning-codeql-action-v2-is-now-deprecated/
(cherry picked from commit 3333ee4fbb)
2025-08-20 21:10:47 +00:00
Tim Donohue
d98963c9d1 Merge pull request #4588 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.28.2
Bump @babel/runtime from 7.27.6 to 7.28.2
2025-08-01 10:47:59 -05:00
Tim Donohue
d6a39f2164 Merge pull request #4618 from DSpace/dependabot/npm_and_yarn/dspace-7_x/webpack-dev-server-5.2.2
Bump webpack-dev-server from 5.2.1 to 5.2.2
2025-08-01 10:00:59 -05:00
dependabot[bot]
81648512e9 Bump webpack-dev-server from 5.2.1 to 5.2.2
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 5.2.1 to 5.2.2.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v5.2.1...v5.2.2)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-version: 5.2.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-31 21:28:11 +00:00
Nima Behforouz
414589ee89 Updates French translations for 7.x 2025-07-31 11:28:55 -04:00
dependabot[bot]
21d6c54183 Bump @babel/runtime from 7.27.6 to 7.28.2
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.27.6 to 7.28.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.2/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.28.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-30 20:57:54 +00:00
Tim Donohue
e92a96bd92 Merge pull request #4608 from DSpace-Labs/dependabot/npm_and_yarn/babel/helpers-7.27.6
[Dependabot] Bump @babel/helpers from 7.21.0 to 7.27.6
2025-07-30 15:36:29 -05:00
Tim Donohue
37d6c0d61d Merge pull request #4609 from DSpace-Labs/dependabot/npm_and_yarn/webpack-dev-server-5.2.1
[Dependabot] Bump webpack-dev-server from 4.15.2 to 5.2.1
2025-07-30 15:19:03 -05:00
Tim Donohue
88e18a3559 Merge pull request #4542 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.44.0
Bump core-js from 3.42.0 to 3.44.0
2025-07-30 11:44:20 -05:00
Tim Donohue
18e2446a7e Merge pull request #4601 from DSpace/backport-4344-to-dspace-7_x
[Port dspace-7_x] fix(versioning): Encode summary
2025-07-30 11:02:00 -05:00
dependabot[bot]
376a731beb Bump webpack-dev-server from 4.15.2 to 5.2.1
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 4.15.2 to 5.2.1.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v4.15.2...v5.2.1)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-version: 5.2.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-30 15:43:23 +00:00
Tim Donohue
e41f576d3a Merge pull request #4535 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.20
Bump @types/lodash from 4.17.17 to 4.17.20
2025-07-30 10:09:10 -05:00
Tim Donohue
d919d255c1 Merge pull request #4587 from DSpace/dependabot/npm_and_yarn/dspace-7_x/axios-1.11.0
Bump axios from 1.10.0 to 1.11.0
2025-07-30 10:00:53 -05:00
Jukka Lipka
0988c41c19 fix(versioning): encode summary
The reason for creating a new version is now encoded in the URL.

(cherry picked from commit 2dd870ea7e)
2025-07-30 14:21:07 +00:00
Tim Donohue
a7a543cfb0 Merge pull request #4596 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.29
Bump isbot from 5.1.28 to 5.1.29
2025-07-29 13:29:58 -05:00
dependabot[bot]
07d3c7aa15 Bump isbot from 5.1.28 to 5.1.29
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.28 to 5.1.29.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.28...v5.1.29)

---
updated-dependencies:
- dependency-name: isbot
  dependency-version: 5.1.29
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-29 14:33:25 +00:00
dependabot[bot]
57b1de3b94 Bump axios from 1.10.0 to 1.11.0
Bumps [axios](https://github.com/axios/axios) from 1.10.0 to 1.11.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.10.0...v1.11.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-28 07:31:25 +00:00
Tim Donohue
5a08173f5e Merge pull request #4579 from DSpace/backport-4536-to-dspace-7_x
[Port dspace-7_x] Fix empty search query after previous non-empty search
2025-07-24 13:42:09 -05:00
Jesiel Viana
be8def0064 fix empty search query after previous non-empty search
(cherry picked from commit cf34198d54)
2025-07-24 17:58:57 +00:00
dependabot[bot]
d9d0032378 Bump @babel/helpers from 7.21.0 to 7.27.6
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.21.0 to 7.27.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.6/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-version: 7.27.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-23 19:13:16 +00:00
Tim Donohue
da99511ff3 Merge pull request #4571 from DSpace/backport-4568-to-dspace-7_x
[Port dspace-7_x] Fix current parent order when creating subcommunity
2025-07-23 12:31:24 -05:00
Jesiel Viana
08eb6def3e Fix current parent order when creating subcommunity
(cherry picked from commit 44fcc7221b)
2025-07-23 15:42:12 +00:00
Tim Donohue
1419ed9a22 Update version tag for development of next release 2025-07-22 15:33:00 -05:00
Tim Donohue
9497decf07 Update version tag for release 2025-07-22 15:30:23 -05:00
Tim Donohue
d4edbf2e25 Automatic update to yarn.locak after various dependency updates. This dependency is no longer needed. 2025-07-22 11:26:15 -05:00
dependabot[bot]
7376ae2b26 Bump core-js from 3.42.0 to 3.44.0
---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.44.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-22 15:55:48 +00:00
Tim Donohue
f80992f1fc Merge pull request #4559 from DSpace/dependabot/npm_and_yarn/dspace-7_x/morgan-1.10.1
Bump morgan from 1.10.0 to 1.10.1
2025-07-22 10:52:57 -05:00
Alan Orth
bb3af14b6c Merge pull request #4560 from DSpace/dependabot/npm_and_yarn/dspace-7_x/compression-1.8.1 2025-07-21 21:27:13 -07:00
Alan Orth
3a5f4565a5 Merge pull request #4493 from DSpace/dependabot/npm_and_yarn/dspace-7_x/eslint-036d341c50 2025-07-21 21:07:37 -07:00
Alan Orth
fc43e2473d Merge pull request #4457 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-63defccb8e 2025-07-21 18:17:26 -07:00
dependabot[bot]
16da9855fc Bump compression from 1.8.0 to 1.8.1
---
updated-dependencies:
- dependency-name: compression
  dependency-version: 1.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 06:47:30 +00:00
dependabot[bot]
821f16ea1d Bump morgan from 1.10.0 to 1.10.1
---
updated-dependencies:
- dependency-name: morgan
  dependency-version: 1.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 06:45:01 +00:00
dependabot[bot]
f9fb6d06f1 Bump eslint-plugin-import from 2.31.0 to 2.32.0 in the eslint group
Bumps the eslint group with 1 update: [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import).


Updates `eslint-plugin-import` from 2.31.0 to 2.32.0
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.31.0...v2.32.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-version: 2.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 05:38:45 +00:00
dependabot[bot]
4fa71b801c Bump sass from 1.89.1 to 1.89.2 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.89.1 to 1.89.2
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.1...1.89.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 05:38:29 +00:00
Tim Donohue
7a7e468492 Update version tag for development of next release 2025-07-14 14:10:06 -05:00
Tim Donohue
34fc08766d Update version tag for release 2025-07-14 14:04:48 -05:00
Tim Donohue
13d6acaf76 Sync i18n files to prepare for the 7.6.4 release 2025-07-11 13:43:39 -05:00
Tim Donohue
d9c0401bdd Merge pull request #4530 from atmire/w2p-119612_export-item-limit-7_x
[Port dspace-7_x] UI warning for export item limit
2025-07-10 13:25:34 -05:00
Jens Vannerum
5a2702c797 fix missing imports after backport 2025-07-10 10:39:55 +02:00
dependabot[bot]
ac5ef72bbe Bump @types/lodash from 4.17.17 to 4.17.20
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.17 to 4.17.20.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-version: 4.17.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-07 07:34:47 +00:00
Jens Vannerum
dabc3b400b 119612: fix spec test
(cherry picked from commit 6232d4e9cf)
2025-07-04 10:26:25 +02:00
Jens Vannerum
5b19ebe48c 119612: aria-label to also include warning message if applicable
(cherry picked from commit 8eaff78737)
2025-07-04 10:25:51 +02:00
Jens Vannerum
32511b0f50 119612: Check if a warning should be shown on changes to the total elements of the search, default to 500 if no value for the configuration property was returned
(cherry picked from commit e1b773c097)
2025-07-04 10:25:43 +02:00
Jens Vannerum
17e58ae5e3 119612: UI warning that only first part of configured items will be exported
(cherry picked from commit b69b21af6c)
2025-07-04 10:24:36 +02:00
Tim Donohue
0d87a72f41 Merge pull request #4417 from atmire/w2p-131442_backport-4335-to-dspace-7_x
[Port dspace-7_x] Improve accessibility for screen readers
2025-07-03 15:14:03 -05:00
Tim Donohue
a17d58acc5 Merge pull request #4277 from DSpace/backport-3888-to-dspace-7_x
[Port dspace-7_x] Fixed search page still returning stale data after invalidating a request
2025-07-03 14:42:57 -05:00
Tim Donohue
44f2ad7f4f Merge pull request #3821 from atmire/vocabulary-preloadlevel-fix-7_x
[Port dspace-7_x] Vocabulary preloadlevel fix
2025-07-01 17:02:27 -05:00
Tim Donohue
c7f8ed1f42 Merge pull request #4519 from atmire/accessibility-settings-7_x
[Port dspace-7_x] Accessibility settings page SSR Fix
2025-07-01 13:58:20 -05:00
Andreas Awouters
c6ef2467bc 119602: Fix SSR error by making klaroService optional
KlaroService handles cookies which are not applicable during SSR. By
making the service optional, and handling the case when it is not
available, SSR can do its work without throwing NullInjectorErrors.
2025-07-01 09:06:40 +02:00
Tim Donohue
c07bc3c379 Merge pull request #3615 from atmire/accessibility-settings-7_x
[Port dspace-7_x] Accessibility settings page
2025-06-30 11:03:38 -05:00
Andreas Awouters
b44f74a20a 119602: Port disabling of cookie popup from main 2025-06-30 11:54:20 +02:00
Andreas Awouters
50757247ab Merge branch 'dspace-7_x' into accessibility-settings-7_x 2025-06-30 10:37:10 +02:00
Andreas Awouters
1883d93198 119602: Open tooltip to left of info icon 2025-06-30 10:35:47 +02:00
Andreas Awouters
d9ab4bca65 119602: Align accessibility link with other footer links 2025-06-30 10:35:26 +02:00
Alan Orth
edeb2d2e3a Merge pull request #4492 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-bff535204e 2025-06-28 11:57:44 +03:00
Tim Donohue
c2257ebc81 Merge pull request #4449 from 4Science/task/dspace-7_x/DURACOM-291
[Port dspace-7_x] Fix submission section visibility in order to rely on the configured section scope
2025-06-26 16:41:09 -05:00
Tim Donohue
cf2407ba90 Merge pull request #4488 from alexandrevryghem/w2p-117573_remove-observable-function-calls-from-template-7_x
[Port dspace-7_x] Removed observable function calls from template (part 2)
2025-06-26 11:36:11 -05:00
dependabot[bot]
e0af01ff43 Bump postcss from 8.5.5 to 8.5.6 in the postcss group
Bumps the postcss group with 1 update: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.5.5 to 8.5.6
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.5...8.5.6)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: postcss
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-23 06:08:24 +00:00
Alexandre Vryghem
7afe49d2b0 117287: Fixed various layout issues
- The unthemed home news didn't stick to the header like the dspace theme
- Impersonate user button has additional margin
- Submission form loading icon is not translatable
- Create resource policy page doesn't have the correct heading

(cherry picked from commit 56e45a9f08)
2025-06-21 01:38:08 +02:00
Alexandre Vryghem
c89ad9f22a 122464: Fixed a memory leak when initComponentInstance is called multiple times
(cherry picked from commit 62f15668b6)
2025-06-21 01:33:21 +02:00
Alexandre Vryghem
391e87a11f Merge branch 'w2p-117573_remove-observable-function-calls-from-template-7.6' 2025-06-21 01:26:12 +02:00
Alan Orth
a864260d00 Merge pull request #4458 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-ff1e1e588d 2025-06-17 09:26:32 +03:00
Alan Orth
abfdf63482 Merge pull request #4463 from DSpace/dependabot/npm_and_yarn/dspace-7_x/axios-1.10.0 2025-06-17 07:06:53 +03:00
dependabot[bot]
7f3b3370d9 Bump axios from 1.9.0 to 1.10.0
Bumps [axios](https://github.com/axios/axios) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.9.0...v1.10.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-16 05:40:32 +00:00
dependabot[bot]
d56119793f Bump postcss from 8.5.4 to 8.5.5 in the postcss group
Bumps the postcss group with 1 update: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.5.4 to 8.5.5
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.4...8.5.5)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: postcss
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-16 05:38:56 +00:00
Tim Donohue
7677f2941d Merge pull request #4450 from DSpace/backport-4434-to-dspace-7_x
[Port dspace-7_x] Resolve field instance models using index when filtering errors
2025-06-12 12:47:31 -05:00
Kim Shepherd
7ef44c5e35 Resolve field instance models using index when filtering errors
(cherry picked from commit d218e22944)
2025-06-12 16:40:39 +00:00
Giuseppe Digilio
a77f98e29e [DURACOM-291] back porting of fix submission section visibility in order to rely on the configured section scope 2025-06-12 15:53:21 +02:00
Alan Orth
5c66bb9d2b Merge pull request #4442 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.27.6
Bump @babel/runtime from 7.27.4 to 7.27.6
2025-06-11 12:23:18 +03:00
dependabot[bot]
7cc17a5544 Bump @babel/runtime from 7.27.4 to 7.27.6
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.27.4 to 7.27.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.6/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.27.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-09 05:32:54 +00:00
Alan Orth
b7b1e368d6 Merge pull request #4430 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-d83863101d
Bump sass from 1.89.0 to 1.89.1 in the sass group
2025-06-05 08:54:07 +03:00
dependabot[bot]
5e8dd3480f Bump sass from 1.89.0 to 1.89.1 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.89.0 to 1.89.1
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.0...1.89.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-04 13:49:29 +00:00
Alan Orth
f2131ec757 Merge pull request #4427 from DSpace/backport-4076-to-dspace-7_x
[Port dspace-7_x] fix typo in German translation of bitstream.edit.form.description.hint
2025-06-04 14:05:27 +03:00
Sascha Szott
c52c7e778a fix typo in German translation of bitstream.edit.form.description.hint
(cherry picked from commit c72af8edb5)
2025-06-04 09:52:26 +00:00
Alan Orth
b870c54c83 Merge pull request #4357 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sanitize-html-2.17.0
Bump sanitize-html from 2.16.0 to 2.17.0
2025-06-04 12:39:34 +03:00
Alan Orth
f58ab77d5d Merge pull request #4409 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-3f4fa9ea8d
Bump postcss from 8.5.3 to 8.5.4 in the postcss group
2025-06-03 09:07:50 +03:00
Alan Orth
406b46ba3f Merge pull request #4410 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.27.4
Bump @babel/runtime from 7.27.3 to 7.27.4
2025-06-03 09:03:45 +03:00
Alexandre Vryghem
b6448a7caf 129964: Fixed the header role structure being invalid in the custom theme
- Replaced the menubar role from the parent of all the header buttons like lang switch, auth menu & help toggle with toolbar
- Replaced the remaining `<a>` buttons in the header with `<button>` to make them expandable with space
- Fixed accessibility issues flagged by axe DevTools in the user menu dropdown
2025-06-02 13:55:33 +02:00
dependabot[bot]
8a1daa5cf9 Bump @babel/runtime from 7.27.3 to 7.27.4
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.27.3 to 7.27.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.4/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.27.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 06:45:45 +00:00
dependabot[bot]
fa9ddefb59 Bump postcss from 8.5.3 to 8.5.4 in the postcss group
Bumps the postcss group with 1 update: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.5.3 to 8.5.4
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.3...8.5.4)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: postcss
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 06:42:07 +00:00
Alan Orth
8a1ca84d91 Merge pull request #4402 from DSpace/backport-2774-to-dspace-7_x
[Port dspace-7_x] German translation improvements in cookie consent dialog
2025-06-01 17:42:12 +03:00
Tim Donohue
06e30050a4 Merge pull request #4384 from atmire/w2p-131441_backport-3065-7.6
[Port dspace-7_x] Made AdminSearchPageComponent themeable
2025-05-30 10:38:39 -05:00
Tim Donohue
ffda0d6521 Merge pull request #4379 from DSpace/dependabot/npm_and_yarn/dspace-7_x/testing-ff22ddd0c9
Bump ng-mocks from 14.13.4 to 14.13.5 in the testing group
2025-05-29 08:49:39 -05:00
Sascha Szott
a692a6762d added german translations
(cherry picked from commit 4ca1edfc63)
2025-05-29 05:53:54 +00:00
Sascha Szott
2687ded0df added German translations
(cherry picked from commit f12fae3865)
2025-05-29 05:53:54 +00:00
Sascha Szott
e387be1e10 minor translation improvement: use plural in German translation
(cherry picked from commit 027a5ec5f0)
2025-05-29 05:53:54 +00:00
Alan Orth
b0e56c4129 Merge pull request #4398 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.27.3
Bump @babel/runtime from 7.27.1 to 7.27.3
2025-05-29 08:39:56 +03:00
dependabot[bot]
9a11618d11 Bump sanitize-html from 2.16.0 to 2.17.0
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.16.0 to 2.17.0.
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.16.0...2.17.0)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-version: 2.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-28 21:27:11 +00:00
Tim Donohue
5b47170b6d Merge pull request #4380 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.17
Bump @types/lodash from 4.17.16 to 4.17.17
2025-05-28 16:10:09 -05:00
dependabot[bot]
983551aea8 Bump @babel/runtime from 7.27.1 to 7.27.3
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.27.1 to 7.27.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.3/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.27.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-28 18:33:15 +00:00
dependabot[bot]
1727acab33 Bump ng-mocks from 14.13.4 to 14.13.5 in the testing group
Bumps the testing group with 1 update: [ng-mocks](https://github.com/help-me-mom/ng-mocks).


Updates `ng-mocks` from 14.13.4 to 14.13.5
- [Release notes](https://github.com/help-me-mom/ng-mocks/releases)
- [Changelog](https://github.com/help-me-mom/ng-mocks/blob/master/CHANGELOG.md)
- [Commits](https://github.com/help-me-mom/ng-mocks/compare/v14.13.4...v14.13.5)

---
updated-dependencies:
- dependency-name: ng-mocks
  dependency-version: 14.13.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-28 18:08:28 +00:00
Joran De Braekeleer
bf585e77c3 Merge remote-tracking branch 'upstream/dspace-7_x' into w2p-131442_backport-4335-to-dspace-7_x 2025-05-28 18:02:40 +02:00
Tim Donohue
a226502c72 Merge pull request #4387 from atmire/w2p-127655_fix-submission-form-getting-stuck-in-loop_contribute-7.6
[Port dspace-7_x] Fix infinite loading submission forms
2025-05-27 16:43:54 -05:00
Tim Donohue
4f79574a76 Merge pull request #4383 from atmire/w2p-130424_impossible-to-add-new-values-for-fields-without-qualifiers_contribute-7.6
[Port dspace-7_x] Fix unqualified metadata field validation in Edit Metadata tab by sorting fields in validation request
2025-05-27 14:55:33 -05:00
frabacche
cb0ac0c9e5 fix e2e test 18x aria on <ul> html tag
(cherry picked from commit e6389a73df)
2025-05-26 13:18:46 +02:00
abhinav
d3876c7c0a Merge branch 'dspace-7_x' into w2p-127655_fix-submission-form-getting-stuck-in-loop_contribute-7.6 2025-05-26 11:23:24 +02:00
Alexandre Vryghem
db119e4118 Fixed search facet deadlock
Also fixed minor issue in MetadataService, but this doesn't cause any issues in the current code

(cherry picked from commit 446280b59a)
2025-05-26 10:50:48 +02:00
abhinav
0c9f8c02f6 Merge remote-tracking branch 'alex-upstream/w2p-115051_themed-admin-search-page_contribute-7.4' into w2p-131441_backport-3065-7.6 2025-05-26 10:45:44 +02:00
dependabot[bot]
e42d4228ed Bump @types/lodash from 4.17.16 to 4.17.17
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.16 to 4.17.17.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-version: 4.17.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 02:53:33 +00:00
abhinav
38812a3e04 Merge branch 'dspace-7_x' into w2p-130424_impossible-to-add-new-values-for-fields-without-qualifiers_contribute-7.6 2025-05-23 18:11:40 +02:00
abhinav
084cad6e46 Fix back button behavior on roles page 2025-05-23 13:56:46 +02:00
Tim Donohue
1aaa20ec73 Merge pull request #4365 from DSpace/backport-4364-to-dspace-7_x
[Port dspace-7_x] Remove stray comma from `config.example.yml` which makes example config invalid
2025-05-22 13:58:46 -05:00
Tim Donohue
e7709b8091 Remove stray comma
(cherry picked from commit bcd2081ee3)
2025-05-22 17:05:11 +00:00
Tim Donohue
6971ac98c2 Merge pull request #4354 from DSpace/dependabot/npm_and_yarn/dspace-7_x/eslint-1ccb09f07e
Bump eslint-plugin-jsonc from 2.20.0 to 2.20.1 in the eslint group
2025-05-19 11:07:07 -05:00
Tim Donohue
280866a58f Merge pull request #4355 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-5219375de9
Bump sass from 1.88.0 to 1.89.0 in the sass group
2025-05-19 11:05:57 -05:00
Tim Donohue
c8b375d238 Merge pull request #4356 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.28
Bump isbot from 5.1.27 to 5.1.28
2025-05-19 10:22:32 -05:00
dependabot[bot]
37383acb6b Bump isbot from 5.1.27 to 5.1.28
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.27 to 5.1.28.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.27...v5.1.28)

---
updated-dependencies:
- dependency-name: isbot
  dependency-version: 5.1.28
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 03:06:55 +00:00
dependabot[bot]
277eca837e Bump sass from 1.88.0 to 1.89.0 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.88.0 to 1.89.0
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.88.0...1.89.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 03:06:09 +00:00
dependabot[bot]
160f33f98a Bump eslint-plugin-jsonc from 2.20.0 to 2.20.1 in the eslint group
Bumps the eslint group with 1 update: [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc).


Updates `eslint-plugin-jsonc` from 2.20.0 to 2.20.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.20.0...v2.20.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.20.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 03:05:35 +00:00
Tim Donohue
ca92b4cf0e Merge pull request #4342 from DSpace/backport-4341-to-dspace-7_x
[Port dspace-7_x] Use ellipsis for truncatable parts
2025-05-15 15:54:06 -05:00
Andrea Barbasso
46b58c369e [CST-19327] use ellipsis for truncatable parts
(cherry picked from commit 6703a07207)
2025-05-15 19:55:45 +00:00
Tim Donohue
a0ebf4af63 Merge pull request #4322 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-d0f2b75659
Bump sass from 1.87.0 to 1.88.0 in the sass group
2025-05-14 10:02:48 -05:00
Alexandre Vryghem
c58b398e43 129964: Restored language button border on focus 2025-05-14 13:49:16 +02:00
Tim Donohue
df2d18b5f1 Merge pull request #4336 from DSpace/backport-3373-to-dspace-7_x
[Port dspace-7_x] Adjust the font size of the 'No thumbnails available' text.
2025-05-13 17:34:16 -05:00
DanGastardelli
1e8c55faf4 Adjust thumb text for smaller resolutions
(cherry picked from commit fa723c17a9)
2025-05-13 21:41:21 +00:00
DanGastardelli
9273c83179 Key spacing adjustment
(cherry picked from commit 829d406808)
2025-05-13 21:41:21 +00:00
DanGastardelli
e06caab25c Adding treatment for the use of the thumb-font-2 class
(cherry picked from commit e06db4cbab)
2025-05-13 21:41:21 +00:00
DanGastardelli
a21db5b887 Changed the implementation of changing the text font size when there is no thumbnail.
(cherry picked from commit 3cd5432034)
2025-05-13 21:41:21 +00:00
DanGastardelli
cae435a5c7 Adjust the font size of the 'No thumbnails available' text.
(cherry picked from commit c4dfed0e02)
2025-05-13 21:41:21 +00:00
Tim Donohue
974e3bf3f3 Merge pull request #4323 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/sanitize-html-2.16.0
Bump @types/sanitize-html from 2.15.0 to 2.16.0
2025-05-13 14:42:28 -05:00
Tim Donohue
f0ce4b2170 Merge pull request #4314 from oscar-escire/new-dspace-7_x
[Port dspace-7_x] Keyboard 'tab' key navigation improved
2025-05-13 12:08:40 -05:00
Alexandre Vryghem
830be1f15a 129964: Hide duplicate links for keyboard navigators 2025-05-13 18:59:04 +02:00
Alexandre Vryghem
8ff943b084 129964: Made DSO badges more screen-reader friendly
- Added commas between the labels to prevent screen readers from reading it as a sentence
- Added hidden text describing what the badges represent
2025-05-13 18:52:14 +02:00
Tim Donohue
206df7781e Merge pull request #4334 from tdonohue/port_4326_to_7x
[Port dspace-7_x] Add basic automated tests to ensure common HTTP Return Codes do not break
2025-05-13 11:35:48 -05:00
Alexandre Vryghem
545b2ff8a7 130479: Hide no results status when query is empty 2025-05-13 18:30:38 +02:00
wout
163cc75437 130479: using ul > li in recent-item + "Load more ..." to "<a>" element 2025-05-13 18:30:38 +02:00
wout
e9940f4005 130479: add aria-selected to selected language + globe button uses a button element 2025-05-13 18:30:37 +02:00
Tim Donohue
2301a8fd52 Add basic tests to our build to verify correct HTTP return codes for 301, 403, 404 and 500. 2025-05-13 10:59:45 -05:00
Tim Donohue
f9aa721ec8 Merge pull request #4332 from 4Science/task/dspace-7_x/DURACOM-344
[Port dspace-7_x] Remove `ssr.paths` configuration and replace with `ssr.excludePathPatterns` which excludes specific paths from SSR
2025-05-13 10:58:45 -05:00
FrancescoMolinaro
d47baab3a1 [DURACOM-344] fix property name 2025-05-13 16:11:00 +02:00
FrancescoMolinaro
c0e71a0e68 [DURACOM-344] refactor solution to avoid double slashes 2025-05-13 15:41:21 +02:00
FrancescoMolinaro
21ac024423 [DURACOM-344] adapt patterns and example file, fix possible error from YAML 2025-05-13 15:38:42 +02:00
FrancescoMolinaro
ce0f6153b9 [DURACOM-344] Adapt SSR page filtering mechanism to a not allowed list 2025-05-13 15:37:31 +02:00
dependabot[bot]
cafcee110e Bump @types/sanitize-html from 2.15.0 to 2.16.0
Bumps [@types/sanitize-html](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/sanitize-html) from 2.15.0 to 2.16.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/sanitize-html)

---
updated-dependencies:
- dependency-name: "@types/sanitize-html"
  dependency-version: 2.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 03:09:54 +00:00
dependabot[bot]
a8fcad7b6a Bump sass from 1.87.0 to 1.88.0 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.87.0 to 1.88.0
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.87.0...1.88.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.88.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 03:09:06 +00:00
Oscar Chacón
5c446d18f7 fixed accessibility tests on filters 2025-05-09 15:56:13 -06:00
Oscar Chacón
cd0aa134f8 fixed some dynamic params over <a> components 2025-05-09 15:07:55 -06:00
Oscar Chacón
9aed649160 improved "tab" navigation in safari 2025-05-09 13:27:29 -06:00
Tim Donohue
fbbf16f387 Merge pull request #4250 from atmire/fix-embargoed-thumbnails_contribute-7.6
[Port dspace-7_x] Show restricted thumbnails to users with access rights
2025-05-08 16:09:07 -05:00
Art Lowel
283b345cdc always use thumbnail component for files not supported by the media viewer, and switch to themed version of thumbnail component 2025-05-08 11:26:14 +02:00
Alexandre Vryghem
da6ace1882 130424: Fix validation on the edit metadata tab sometimes wrongly displaying an error message
This only happens when the request that validates the metadata field doesn't return the field with qualifier null on the first page
2025-05-08 01:48:52 +02:00
Tim Donohue
aaa4b910e2 Merge pull request #4307 from DSpace/backport-4288-to-dspace-7_x
[Port dspace-7_x] Bitstream upload failure during the workflow editing process when impersonating an editor
2025-05-07 17:10:02 -05:00
Adamo
926abe6241 [DURACOM-312] lint fix
(cherry picked from commit c68e5a181d)
2025-05-07 21:42:14 +00:00
Adamo
97fd42a2e1 [DURACOM-312] set the X-On-Behalf-Of header with impersonatingID in FileUploader.
(cherry picked from commit 727bcdc2cb23ae7fcff1d9ddfa794f872f1d1b8c)
(cherry picked from commit 0574c8ed98)
2025-05-07 21:42:14 +00:00
Adamo
3cff971297 [DURACOM-312] set the newly created impersonatingID filed in UploaderOptions.
(cherry picked from commit c70fe184208805be8657d4373f50f193e2c6e85f)
(cherry picked from commit 70c6af3630)
2025-05-07 21:42:14 +00:00
Adamo
49b27b5bc0 [DURACOM-312] updated UploaderOptions to include impersonatingID.
(cherry picked from commit 2c79be1456c753665e27b58563e56accc87b0383)
(cherry picked from commit 4b0ab8161f)
2025-05-07 21:42:14 +00:00
Tim Donohue
f9f3d186c5 Merge pull request #4305 from 4Science/task/dspace-7_x/DURACOM-326
[Port dspace-7_x] [DURACOM-326] fix possible issue on missing value for eperson patch #4289
2025-05-07 09:19:27 -05:00
FrancescoMolinaro
05e1fc3505 [DURACOM-326] fix possible issue on missing value for eperson patch 2025-05-07 14:36:26 +02:00
Tim Donohue
3635bf40fe Merge pull request #4296 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.42.0
Bump core-js from 3.41.0 to 3.42.0
2025-05-06 17:07:06 -05:00
Art Lowel
70d1e499c1 don't show the loading animation when src is set to null 2025-05-06 14:58:53 +02:00
Art Lowel
e40a44c5ac fix issue where thumbnail would sometimes keep loading indefinitely 2025-05-06 14:38:45 +02:00
Alexandre Vryghem
3d32715d25 127655: Fixed getFirstDataDefinition not always returning a correct SubmitDataResponseDefinitionObject, leading to an infinite loading screen
- Also fixed an issue where the collection switcher could accidentally show the old collection name instead of the new one
- Also updated the WorkspaceItemPageResolver & WorkflowItemPageResolver to embed the collection to use fewer requests
2025-05-06 14:15:34 +02:00
Alan Orth
498fad9e76 Merge pull request #4295 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.27.1
Bump @babel/runtime from 7.27.0 to 7.27.1
2025-05-06 07:50:55 +03:00
Alexandre Vryghem
e9061a46b6 117287: Fixed broken pagination on resource policy page 2025-05-06 00:49:01 +02:00
dependabot[bot]
a1d391576e Bump core-js from 3.41.0 to 3.42.0
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.41.0 to 3.42.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.42.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 02:46:13 +00:00
dependabot[bot]
d985bfa091 Bump @babel/runtime from 7.27.0 to 7.27.1
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.27.0 to 7.27.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.1/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-version: 7.27.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 02:45:34 +00:00
Tim Donohue
4eb827c089 Merge pull request #4286 from tdonohue/port_4282_to_7x
[Port dspace-7_x] Fixed Missing Tags in Import Popup from External Sources - 4220
2025-05-01 12:59:42 -05:00
guillermo2519
43db1731ec Fixed Missing Tags in Import Popup from External Sources - 4220 2025-05-01 12:21:29 -05:00
Tim Donohue
e2b72201b2 Merge pull request #4258 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-f1c32079c7
Bump sass from 1.86.3 to 1.87.0 in the sass group
2025-05-01 10:04:10 -05:00
Tim Donohue
34248186e8 Merge pull request #4260 from DSpace/dependabot/npm_and_yarn/dspace-7_x/axios-1.9.0
Bump axios from 1.8.4 to 1.9.0
2025-04-30 17:18:15 -05:00
Tim Donohue
9dca838f25 Merge pull request #4281 from atmire/w2p-130484_bitstreams-tables-keep-being-duplicated-7_x
[Port dspace-7_x] Fix bitstream tables being duplicated
2025-04-30 11:26:43 -05:00
Andreas Awouters
ae23e68d12 130484: Filter new bundles 2025-04-30 15:51:57 +02:00
Alexandre Vryghem
dc8b10593c 117287: Removed remaining observable function calls from the HTML templates 2025-04-30 15:37:06 +02:00
Andreas Awouters
501ccfea1b 130484: Correctly update the 'showLoadMoreLink$' observable 2025-04-30 14:15:52 +02:00
Andreas Awouters
02be3e0ad5 130484: Only add bundles when they are missing from the subject 2025-04-30 14:15:03 +02:00
Alexandre Vryghem
d34dafd838 119276: Added tests to prove that cached stale requests are not emitted
Also cleaned up test class

(cherry picked from commit 58ff240c05)
2025-04-29 18:58:02 +00:00
Alexandre Vryghem
85610d4eb6 119276: Fixed search service first emitting cached stale values instead of waiting for non-stale response
This was problematic for the places that used getFist operators. This is because they only emit data once, and the first value could be the old cached value

(cherry picked from commit edfaee6aab)
2025-04-29 18:58:01 +00:00
Kristof De Langhe
c1bd65e8c6 127655: avoid nullpointer 2025-04-29 10:46:45 +02:00
Kristof De Langhe
0dabc8ed8f 127655: refactor to use buildFromRequestUUID 2025-04-28 17:47:17 +02:00
Tim Donohue
da12147043 Merge pull request #4259 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.27
Bump isbot from 5.1.26 to 5.1.27
2025-04-28 10:16:16 -05:00
Kristof De Langhe
99e8c1044c 127655: Submission get data stale re-request 2025-04-28 15:15:26 +02:00
Kristof De Langhe
287d35cb26 127655: Fix submission infinite loading 2025-04-28 13:04:44 +02:00
dependabot[bot]
15a8008869 Bump axios from 1.8.4 to 1.9.0
Bumps [axios](https://github.com/axios/axios) from 1.8.4 to 1.9.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.8.4...v1.9.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 02:45:21 +00:00
dependabot[bot]
e35adee7f8 Bump isbot from 5.1.26 to 5.1.27
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.26 to 5.1.27.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.26...v5.1.27)

---
updated-dependencies:
- dependency-name: isbot
  dependency-version: 5.1.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 02:45:12 +00:00
dependabot[bot]
ee3154c069 Bump sass from 1.86.3 to 1.87.0 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.86.3 to 1.87.0
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.86.3...1.87.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.87.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 02:44:10 +00:00
Tim Donohue
b491ed3c27 Merge pull request #4253 from tdonohue/port_4212_to_7x
[Port dspace-7_x] Fix: prevent bitstream format cache issue by disabling cached version
2025-04-25 17:15:38 -05:00
Jesiel Viana
b184db7a99 fix unit tests for bitstream-data.service.ts 2025-04-25 16:47:58 -05:00
Jesiel Viana
eac787f1f4 fix: invalidate cache only for the modified bitstream 2025-04-25 16:45:58 -05:00
Jesiel Viana
8dbdb27c67 fix: prevent bitstream format cache issue by disabling cached version 2025-04-25 16:45:43 -05:00
Tim Donohue
02f30ab331 Merge pull request #4247 from DSpace/backport-4243-to-dspace-7_x
[Port dspace-7_x] Add translation keys for journal submission volume lookup
2025-04-25 12:23:38 -05:00
Joran De Braekeleer
523c13ff3d 130405: Add translations for journal submission volume lookup
(cherry picked from commit fef16bca14)
2025-04-25 15:31:43 +00:00
Art Lowel
1ddd248d0e Merge remote-tracking branch 'upstream/dspace-7_x' into fix-embargoed-thumbnails_contribute-7.6 2025-04-25 15:39:20 +02:00
Art Lowel
11f251755b fix issue where thumnails of embargoed bitstreams wouldn't show up for users with access rights 2025-04-25 14:55:52 +02:00
Tim Donohue
7b25b1d63c Merge pull request #4233 from atmire/4099-duplicate-view-events_contibute-7.x
[Port to dspace-7_x] Fix for double view events when using dynamic themes
2025-04-23 17:01:35 -05:00
Tim Donohue
d43730a542 Merge pull request #4237 from DSpace/backport-4167-to-dspace-7_x
[Port dspace-7_x] Fix unable to remove data from a submission form field of type "name"
2025-04-23 13:44:34 -05:00
Tim Donohue
1c1b129068 Merge pull request #4238 from DSpace/backport-3968-to-dspace-7_x
[Port dspace-7_x] Fix - previously entered qualdrop value field is deleted when adding a new (emtpy) line with the same(!) qualifier and then deleting it
2025-04-23 12:53:22 -05:00
VictorDuranEscire
ae563442e7 Fix - Validate value on remove item for submission form only for qualdrop component
(cherry picked from commit 1e73fa626d)
2025-04-23 16:38:38 +00:00
abhinav
08d56407ff 129621: Add a not empty check
This check is present in the other event handlers above so adding it here as well.

(cherry picked from commit 0b28789e4f)
2025-04-23 16:07:11 +00:00
lotte
8bc2c8768f Merge branch 'dspace-7_x' into 4099-duplicate-view-events_contibute-7.x 2025-04-22 12:30:15 +02:00
lotte
9a0e4ec107 Merge branch '4099-duplicate-view-events_contibute-7.6.3' into 4099-duplicate-view-events_contibute-7.x 2025-04-22 10:43:32 +02:00
Tim Donohue
3a04ea8f79 Merge pull request #4222 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sanitize-html-2.16.0
Bump sanitize-html from 2.15.0 to 2.16.0
2025-04-21 08:58:16 -05:00
dependabot[bot]
c272e51aeb Bump sanitize-html from 2.15.0 to 2.16.0
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.15.0 to 2.16.0.
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.15.0...2.16.0)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-version: 2.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 02:50:44 +00:00
kshepherd
c6a1401f34 Merge pull request #4210 from alanorth/eslint-json5-dspace7
[Port dspace-7_x] Update ESLint configuration for json5 files
2025-04-17 00:44:27 +02:00
Alan Orth
19c680ebf0 .eslintrc.json: use jsonc/no-irregular-whitespace
The eslint-plugin-jsonc documentation recommends turning ESLint's
own no-irregular-whitespace plugin off for JSON files in favor of
its own jsonc/no-irregular-whitespace plugin.

See: https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-irregular-whitespace.html
2025-04-16 23:24:06 +03:00
Alan Orth
9a025f6610 .eslintrc.json: use plugin:jsonc/recommended-with-json5
The eslint-plugin-jsonc has a recommended configuration for json5.

See: https://ota-meshi.github.io/eslint-plugin-jsonc/user-guide/#usage
2025-04-16 23:21:52 +03:00
Tim Donohue
ac940c1bb2 Merge pull request #4026 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-c120d6abdd
Bump postcss from 8.5.1 to 8.5.3 in the postcss group across 1 directory
2025-04-16 11:47:22 -05:00
Tim Donohue
1c4f650ef9 Merge pull request #4186 from DSpace/dependabot/npm_and_yarn/dspace-7_x/http-proxy-middleware-2.0.9
Bump http-proxy-middleware from 2.0.7 to 2.0.9
2025-04-15 14:13:24 -05:00
Tim Donohue
6ef781822d Merge pull request #4150 from DSpace/dependabot/npm_and_yarn/dspace-7_x/multi-02a33f2273
Bump sanitize-html and @types/sanitize-html
2025-04-15 14:10:12 -05:00
Tim Donohue
0115edaa07 Merge pull request #4120 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.27.0
Bump @babel/runtime from 7.26.7 to 7.27.0
2025-04-15 14:04:37 -05:00
Tim Donohue
faebbbe680 Merge pull request #4197 from tdonohue/port_4189_to_7x
[Port dspace-7_x] Add additional automated server-side rendering (SSR) tests for all Entity Types
2025-04-15 13:14:39 -05:00
dependabot[bot]
0ff0b5298a Bump http-proxy-middleware from 2.0.7 to 2.0.9
Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 2.0.7 to 2.0.9.
- [Release notes](https://github.com/chimurai/http-proxy-middleware/releases)
- [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/v2.0.9/CHANGELOG.md)
- [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7...v2.0.9)

---
updated-dependencies:
- dependency-name: http-proxy-middleware
  dependency-version: 2.0.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 15:09:53 +00:00
dependabot[bot]
87bb0d4e5a Bump sanitize-html and @types/sanitize-html
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) and [@types/sanitize-html](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/sanitize-html). These dependencies needed to be updated together.

Updates `sanitize-html` from 2.14.0 to 2.15.0
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.14.0...2.15.0)

Updates `@types/sanitize-html` from 2.13.0 to 2.15.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/sanitize-html)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-version: 2.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/sanitize-html"
  dependency-version: 2.15.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 15:04:44 +00:00
Tim Donohue
eee9897312 Merge pull request #4153 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.26
Bump isbot from 5.1.25 to 5.1.26
2025-04-15 09:51:13 -05:00
Tim Donohue
fdc23a3350 Merge pull request #4028 from DSpace/dependabot/npm_and_yarn/dspace-7_x/rxjs-7.8.2
Bump rxjs from 7.8.1 to 7.8.2
2025-04-15 09:49:12 -05:00
Tim Donohue
c4104be75b Add additional automated SSR tests for Community, Collection, Publication/Item, Person, OrgUnit and all Journal entities 2025-04-15 09:36:33 -05:00
dependabot[bot]
08a707477c Bump rxjs from 7.8.1 to 7.8.2
Bumps [rxjs](https://github.com/reactivex/rxjs) from 7.8.1 to 7.8.2.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/7.8.2/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/7.8.1...7.8.2)

---
updated-dependencies:
- dependency-name: rxjs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 10:05:42 +00:00
Tim Donohue
d4efd6a8ef Merge pull request #4176 from DSpace/backport-4143-to-dspace-7_x
[Port dspace-7_x] Fix pagination on the "Select bitstreams" modal of the "Access Control" tab
2025-04-14 11:33:04 -05:00
dependabot[bot]
04516fad5a Bump postcss from 8.5.1 to 8.5.3 in the postcss group across 1 directory
Bumps the postcss group with 1 update in the / directory: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.5.1 to 8.5.3
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.1...8.5.3)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: postcss
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 03:16:07 +00:00
Alan Orth
377c7034ff [Port dspace-7_x] Clean up spacing in input forms
Manual port of #4136 by @gingyx to DSpace 7.x.
2025-04-12 16:28:11 +03:00
Tim Donohue
28eb709ef5 Merge pull request #4169 from atmire/w29-129641_fix-export-button_contribute-7_x
[Port dspace-7_x] Fix export button enabled in bulk access management without selecting step 2
2025-04-11 14:45:08 -05:00
Nona Luypaert
cc202b7adb 130081: Fix pagination on 'Select bistreams' modal on 'Access Control' tab
(cherry picked from commit c03bbb01a2)
2025-04-11 18:55:22 +00:00
Tim Donohue
f5df726a18 Merge pull request #4121 from arvoConsultores/DS-4097
Store the state of the computed filters
2025-04-11 11:28:51 -05:00
Tim Donohue
077467efa2 Merge pull request #4111 from DSpace/dependabot/npm_and_yarn/dspace-7_x/axios-1.8.4
Bump axios from 1.7.9 to 1.8.4
2025-04-11 06:53:08 -05:00
Sergio Fernández Celorio
dc3e842747 No need to subscribe anymore to the router events 2025-04-11 11:39:41 +02:00
dependabot[bot]
828648aa7e Bump axios from 1.7.9 to 1.8.4
Bumps [axios](https://github.com/axios/axios) from 1.7.9 to 1.8.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.9...v1.8.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-10 21:56:43 +00:00
Tim Donohue
7063c49072 Merge pull request #4065 from DSpace/dependabot/npm_and_yarn/dspace-7_x/testing-64070fe020
Bump the testing group with 2 updates
2025-04-10 16:53:53 -05:00
dependabot[bot]
036fd1c871 Bump the testing group with 2 updates
Bumps the testing group with 2 updates: [axe-core](https://github.com/dequelabs/axe-core) and [ng-mocks](https://github.com/help-me-mom/ng-mocks).


Updates `axe-core` from 4.10.2 to 4.10.3
- [Release notes](https://github.com/dequelabs/axe-core/releases)
- [Changelog](https://github.com/dequelabs/axe-core/blob/v4.10.3/CHANGELOG.md)
- [Commits](https://github.com/dequelabs/axe-core/compare/v4.10.2...v4.10.3)

Updates `ng-mocks` from 14.13.2 to 14.13.3
- [Release notes](https://github.com/help-me-mom/ng-mocks/releases)
- [Changelog](https://github.com/help-me-mom/ng-mocks/blob/master/CHANGELOG.md)
- [Commits](https://github.com/help-me-mom/ng-mocks/compare/v14.13.2...v14.13.3)

---
updated-dependencies:
- dependency-name: axe-core
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing
- dependency-name: ng-mocks
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-10 19:27:52 +00:00
Tim Donohue
22db6745b8 Merge pull request #4148 from DSpace/dependabot/npm_and_yarn/dspace-7_x/eslint-7904436953
Bump eslint-plugin-jsonc from 2.19.1 to 2.20.0 in the eslint group
2025-04-10 10:55:12 -05:00
Sergio Fernández Celorio
4f42c1e95f Use take instead unsubscribe 2025-04-10 17:34:36 +02:00
dependabot[bot]
b37a7a1456 Bump isbot from 5.1.25 to 5.1.26
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.25 to 5.1.26.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.25...v5.1.26)

---
updated-dependencies:
- dependency-name: isbot
  dependency-version: 5.1.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-09 22:27:19 +00:00
dependabot[bot]
33146603df Bump eslint-plugin-jsonc from 2.19.1 to 2.20.0 in the eslint group
Bumps the eslint group with 1 update: [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc).


Updates `eslint-plugin-jsonc` from 2.19.1 to 2.20.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.19.1...v2.20.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsonc
  dependency-version: 2.20.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-09 22:26:28 +00:00
Tim Donohue
d3a97d9d15 Merge pull request #4007 from DSpace/dependabot/npm_and_yarn/dspace-7_x/compression-1.8.0
Bump compression from 1.7.5 to 1.8.0
2025-04-09 17:16:35 -05:00
Tim Donohue
2a1c762e73 Merge pull request #4049 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.16
Bump @types/lodash from 4.17.15 to 4.17.16
2025-04-09 16:49:42 -05:00
Tim Donohue
c94279edc0 Merge pull request #4051 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.41.0
Bump core-js from 3.40.0 to 3.41.0
2025-04-09 16:31:36 -05:00
Tim Donohue
878b2dba4a Merge pull request #4050 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-b0ce3413d9
Bump sass from 1.84.0 to 1.85.1 in the sass group across 1 directory
2025-04-09 16:16:14 -05:00
Tim Donohue
2eca99379f Merge pull request #4112 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.25
Bump isbot from 5.1.22 to 5.1.25
2025-04-09 12:30:57 -05:00
lotte
8a4405c473 Merge branch 'backport-4099-duplicate-view-events-7.6' into 4099-duplicate-view-events_contibute-7.6.3 2025-04-07 10:43:09 +02:00
dependabot[bot]
0d2e49b12c Bump sass from 1.84.0 to 1.85.1 in the sass group across 1 directory
Bumps the sass group with 1 update in the / directory: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.84.0 to 1.85.1
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.84.0...1.85.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 03:06:35 +00:00
lotte
edd5496a4d 129694: Fixed lint issues 2025-04-04 15:11:02 +02:00
lotte
01becae7d0 129694: backported view tracker resolver 2025-04-04 13:31:49 +02:00
Tim Donohue
eef6bbe134 Merge pull request #3983 from atmire/no-platform-specific-code-in-abstract-services-7_x
No platform specific code in abstract services 7_x
2025-04-03 12:11:45 -05:00
lotte
ff5f23017a 129694: PoC #4099 solution with resolvers 2025-04-02 14:49:23 +02:00
Sergio Fernández Celorio
7dd6ab79ff Store the state of the computed filters 2025-03-31 09:14:32 +02:00
dependabot[bot]
ecc03343b7 Bump @babel/runtime from 7.26.7 to 7.27.0
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.26.7 to 7.27.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.27.0/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 02:43:43 +00:00
abhinav
fa6b8cc21d 129641: Fix Export button is enabled wrongly
This fixes the export button being enabled when the second step is not active in bulk access edit. The tests have been updated accordingly
2025-03-26 15:47:17 +01:00
dependabot[bot]
6c11621d91 Bump isbot from 5.1.22 to 5.1.25
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.22 to 5.1.25.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.22...v5.1.25)

---
updated-dependencies:
- dependency-name: isbot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 02:47:30 +00:00
Alan Orth
d65ff20777 Merge pull request #4077 from arvoConsultores/DS-4053
Filters disappeared on reload
2025-03-14 16:23:57 +03:00
ana
c2528a9c1f Filters disappeared on reload 2025-03-13 09:51:17 +01:00
Andreas Awouters
3ad99804d1 Merge branch 'accessibility-settings-7.6' into accessibility-settings-7_x 2025-03-07 13:40:49 +01:00
Andreas Awouters
122d31b11b 119602: Make KlaroService optional in AccSettingsService 2025-03-07 12:58:31 +01:00
Andreas Awouters
7ab598d571 119602: Reorder footer links 2025-03-07 10:03:57 +01:00
Andreas Awouters
bd06eded8c 119602: Fix small accessibility settings typo 2025-03-07 10:02:57 +01:00
kshepherd
99840ba3bc Merge pull request #4034 from alanorth/7_x-citation-doi
Add citation_doi tag to head meta
2025-03-06 13:43:08 +01:00
Alan Orth
204556de20 src/app/core: remove unnecessary comment
Remove commented out this.setCitationDOITag() since it is not used
and we use camel case with this.setCitationDoiTag() now anyway.
2025-03-05 16:40:14 +03:00
Alan Orth
8d7b4cd101 src/app/core: add citation_doi tag to head meta
This is used by harvesters like Altmetric and was present in DSpace
version 6 and previous.
2025-03-05 16:40:12 +03:00
dependabot[bot]
ac5c5c8a14 Bump core-js from 3.40.0 to 3.41.0
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.40.0 to 3.41.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.41.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 03:10:19 +00:00
dependabot[bot]
008fe0151b Bump @types/lodash from 4.17.15 to 4.17.16
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.15 to 4.17.16.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 03:10:07 +00:00
Andreas Awouters
f8bcce43b5 119602: Fix tests after merge 2025-02-21 13:19:01 +01:00
Andreas Awouters
e75052bbcf Merge branch 'dspace-7_x' into accessibility-settings-7_x
# Conflicts:
#	config/config.example.yml
#	src/config/app-config.interface.ts
#	src/config/default-app-config.ts
#	src/environments/environment.test.ts
2025-02-21 13:01:18 +01:00
Andreas Awouters
3340192382 Merge branch 'accessibility-settings-7.6' into accessibility-settings-7_x 2025-02-21 12:58:42 +01:00
Andreas Awouters
dcd32c48c3 119602: Rework settings validation 2025-02-21 12:53:44 +01:00
Andreas Awouters
cd825ac0da 119602: Inject AppConfig instead of using environment directly 2025-02-21 10:51:30 +01:00
Andreas Awouters
ca80812d0a 119602: Add additional accessibility-settings.component test 2025-02-21 10:27:44 +01:00
Andreas Awouters
4a74a3ac99 119602: Fix existing accessibility-settings.component tests 2025-02-21 10:10:35 +01:00
Andreas Awouters
62904747fc 119602: Add accessibility-settings.service tests for cookie functionality 2025-02-21 10:03:43 +01:00
Andreas Awouters
4c30e2d0be 119602: Fix existing accessibility-settings.service tests 2025-02-21 09:56:00 +01:00
Andreas Awouters
d05096c015 119602: Add KlaroServiceStub 2025-02-21 09:16:41 +01:00
Andreas Awouters
b837f63b7c 119602: Add 'Accessibility Settings' Klaro option & respect user choice 2025-02-18 10:22:59 +01:00
Andreas Awouters
e838873235 119602: Set default value as actual value instead of placeholder 2025-02-17 13:37:07 +01:00
dependabot[bot]
e9fa2812a0 Bump compression from 1.7.5 to 1.8.0
Bumps [compression](https://github.com/expressjs/compression) from 1.7.5 to 1.8.0.
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/compression/compare/1.7.5...1.8.0)

---
updated-dependencies:
- dependency-name: compression
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 02:52:11 +00:00
Tim Donohue
885c52ed34 Merge pull request #3996 from DSpace/backport-3673-to-dspace-7_x
[Port dspace-7_x] Update fr.json5
2025-02-14 14:49:32 -06:00
Carolyn Sullivan
9b0669f76c Update fr.json5
Ajouté les corrections faites par Pierre Lasou :)

(cherry picked from commit e32d9feaf5)
2025-02-14 16:29:44 +00:00
Carolyn Sullivan
3daa110116 Update fr.json5
Ajouté des traductions/noté quelques étiquettes sans traductions

(cherry picked from commit 477ca5e712)
2025-02-14 16:29:44 +00:00
Tim Donohue
d9c6856d9c Merge pull request #3990 from DSpace/backport-3960-to-dspace-7_x
[Port dspace-7_x] Update fr.json5 to add identifiers deposit's step translations in french
2025-02-14 10:26:03 -06:00
Pierre Lasou
3372110839 Update fr.json5
(cherry picked from commit f721028d81)
2025-02-14 14:43:40 +00:00
Andreas Awouters
ddd7c323ab Merge branch 'no-platform-specific-code-in-abstract-services-7.6' into no-platform-specific-code-in-abstract-services-7_x 2025-02-13 13:31:21 +01:00
Andreas Awouters
961bb11b59 125969: Fix auth service tests 2025-02-13 13:15:24 +01:00
Andreas Awouters
f82426b1dc 125969: Get rid of REQUEST and RESPONSE imports in AuthService 2025-02-13 13:15:24 +01:00
Andreas Awouters
8b90d999ac 125969: Move constructor to server-cookie.service
This makes it possible to remove the REQUEST import from
cookie.service.ts which solves a typescript issue.
2025-02-13 13:15:24 +01:00
Andreas Awouters
80948d98f0 119602: Force minimum time out 2025-02-11 09:33:03 +01:00
Tim Donohue
6446a52e46 Merge pull request #3969 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-fd5fd03206
Bump sass from 1.83.4 to 1.84.0 in the sass group
2025-02-10 15:37:11 -06:00
Tim Donohue
e58a66f849 Merge pull request #3904 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.26.7
Bump @babel/runtime from 7.26.0 to 7.26.7
2025-02-10 15:24:24 -06:00
Tim Donohue
1167f8a414 Merge pull request #3903 from DSpace/dependabot/npm_and_yarn/dspace-7_x/eslint-82f73a5bca
Bump eslint-plugin-jsonc from 2.18.2 to 2.19.1 in the eslint group
2025-02-10 12:08:30 -06:00
Tim Donohue
eee851f001 Merge pull request #3941 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.15
Bump @types/lodash from 4.17.14 to 4.17.15
2025-02-10 09:38:57 -06:00
Tim Donohue
b18ff86894 Merge pull request #3942 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.22
Bump isbot from 5.1.21 to 5.1.22
2025-02-10 09:36:29 -06:00
Tim Donohue
e811083339 Merge pull request #3940 from DSpace/dependabot/npm_and_yarn/dspace-7_x/testing-206d00ed14
Bump cypress-axe from 1.5.0 to 1.6.0 in the testing group
2025-02-10 09:33:34 -06:00
dependabot[bot]
e0590109c1 Bump sass from 1.83.4 to 1.84.0 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.83.4 to 1.84.0
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.83.4...1.84.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 02:18:27 +00:00
dependabot[bot]
ed1aa37100 Bump cypress-axe from 1.5.0 to 1.6.0 in the testing group
Bumps the testing group with 1 update: [cypress-axe](https://github.com/component-driven/cypress-axe).


Updates `cypress-axe` from 1.5.0 to 1.6.0
- [Release notes](https://github.com/component-driven/cypress-axe/releases)
- [Commits](https://github.com/component-driven/cypress-axe/compare/v1.5.0...v1.6.0)

---
updated-dependencies:
- dependency-name: cypress-axe
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 02:18:04 +00:00
dependabot[bot]
601850cb6a Bump eslint-plugin-jsonc from 2.18.2 to 2.19.1 in the eslint group
Bumps the eslint group with 1 update: [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc).


Updates `eslint-plugin-jsonc` from 2.18.2 to 2.19.1
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.18.2...v2.19.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsonc
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 02:18:00 +00:00
Tim Donohue
ebe26a7eb0 Update version tag for development of next release 2025-02-07 11:21:57 -06:00
Tim Donohue
6eb5eec050 Update version tag for release 2025-02-07 11:17:42 -06:00
Tim Donohue
1956e25a83 Merge pull request #3962 from 4Science/task/dspace-7_x/DURACOM-288
[Port dspace-7_x] Provide a setting to use a different REST url during SSR execution
2025-02-07 09:33:23 -06:00
Andreas Awouters
59cb19ae80 119602: Restructure labels 2025-02-07 14:54:24 +01:00
Giuseppe Digilio
2e28a51b02 [DURACOM-288] fix tests 2025-02-07 09:00:10 +01:00
Tim Donohue
7fab9633ea Merge pull request #3965 from tdonohue/port_2827_to_7x
[Port dspace-7_x] use translation service to determine placeholder values of date picker
2025-02-06 16:33:33 -06:00
Sascha Szott
7584b9e1c3 use translation service to determine placeholder values of date picker (#2827)
* use translation service to determine placeholder values

* added translation of date-picker placeholder values

* added German translations of date-picker placeholder values

* fix lint warning: added missing comma

* fix lint warning: removed trailing spaces

* fixed broken tests

* fixed lint warning

* try to mock TranslateService correctly

* remove TranslateService mock

* removed imports

* fixed lint warnings

* fixed lint warnings

* fixed lint warning

* fixed lint warning

* fixed lint error

* fixed lint errors

* removed TestComponent

* added imports

* removed declarations

* fixed lint error

* fix lint error (invalid sorting)

* finally fixing lint error

* use translation pipe directly in template

* move translation of placeholders into HTML template

* remove TranslateService dependency
2025-02-06 15:18:41 -06:00
Vincenzo Mecca
7660dd8d95 [DURACOM-288] Fixes undefined request in thumbnail 2025-02-06 17:27:54 +01:00
Giuseppe Digilio
6f4c3860a3 [DURACOM-288] Add convention SSR REST environment variable 2025-02-06 17:27:39 +01:00
Giuseppe Digilio
d73885137a [DURACOM-288] Change properties description 2025-02-06 17:27:27 +01:00
Giuseppe Digilio
290c24b448 [DURACOM-288] Enable URL replacement by default 2025-02-06 17:26:41 +01:00
Giuseppe Digilio
21dac408ee [DURACOM-288] Add unit test to test SSR url replace 2025-02-06 17:26:30 +01:00
Giuseppe Digilio
d118496075 [DURACOM-288] Add missing settings to config.example.yml 2025-02-06 17:26:16 +01:00
Giuseppe Digilio
cb5deb644e [DURACOM-288] Refactoring configuration to transfer state 2025-02-06 17:25:26 +01:00
Yury Bondarenko
f9d8e4e0b7 Add configuration to toggle replace/transfer 2025-02-06 17:19:44 +01:00
Giuseppe Digilio
a3ffda3bf8 [DURACOM-288] Additional test for thumbnail component 2025-02-06 17:18:28 +01:00
Giuseppe Digilio
8ca668159e [DURACOM-288] Provide a setting to use a different REST url during SSR execution
# Conflicts:
#	src/app/app.config.ts
#	src/app/core/services/server-hard-redirect.service.spec.ts
#	src/app/core/services/server-hard-redirect.service.ts
#	src/app/thumbnail/thumbnail.component.ts
#	src/modules/app/browser-init.service.ts
#	src/modules/app/server-init.service.ts
2025-02-06 17:15:42 +01:00
kshepherd
95064122d0 Merge pull request #3946 from DSpace/backport-3935-to-dspace-7_x
[Port dspace-7_x] Ensure `/reload/` (hard reload) path is included in SSR paths.
2025-02-03 12:44:36 +01:00
Tim Donohue
d92424e2f4 Ensure "/reload/" (hard reload) path is included in SSR paths.
(cherry picked from commit 83d24f8c21)
2025-02-03 11:11:04 +00:00
dependabot[bot]
45cc177cab Bump isbot from 5.1.21 to 5.1.22
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.21 to 5.1.22.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.21...v5.1.22)

---
updated-dependencies:
- dependency-name: isbot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:04:40 +00:00
dependabot[bot]
59b39f12d6 Bump @types/lodash from 4.17.14 to 4.17.15
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.14 to 4.17.15.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:03:49 +00:00
Tim Donohue
636fba40f7 Merge pull request #3932 from 4Science/task/dspace-7_x/CST-15595
[Port dspace-7_x] Make submission reorder buttons keyboard accessible
2025-01-31 10:38:45 -06:00
Andrea Barbasso
f8123fbbfd Merge branch 'dspace-7_x' into task/dspace-7_x/CST-15595
# Conflicts:
#	src/assets/i18n/en.json5
2025-01-31 15:09:03 +01:00
Andrea Barbasso
8313b9a929 [CST-15595] add keyboard drag and drop functionality 2025-01-31 15:05:36 +01:00
Tim Donohue
51aa5fb61c Merge pull request #3926 from Andrea-Guevara/AccessibilityInSearchFilterDspace7
[Port dspace-7_x] Accessibility when selecting a search filter
2025-01-31 06:54:15 -06:00
Tim Donohue
a5378e0cf5 Add missing UUIDService to test to fix "No provider for UUIDService" errors 2025-01-30 16:55:28 -06:00
Tim Donohue
0abbf80c1d Merge pull request #3929 from DSpace/backport-3912-to-dspace-7_x
[Port dspace-7_x] Fix auth in UI with LDAP if password authentication is disabled
2025-01-30 16:39:41 -06:00
Miika Nurminen
d4536ffbf4 Ensure that password authentication dialog is shown even if only ldap auth method is present
(cherry picked from commit 83d86d7b68)
2025-01-30 22:12:12 +00:00
Tim Donohue
6b73c75205 Merge pull request #3925 from 4Science/task/dspace-7_X/DURACOM-304
[Port dspace-7_x] Prevent request with page size of 9999
2025-01-30 12:25:52 -06:00
Tim Donohue
f01e49f05f Merge pull request #3924 from alexandrevryghem/made-expandable-navbar-section-more-accessible-7_x
[Port dspace-7_x] Made expandable navbar section more keyboard accessible
2025-01-30 11:58:31 -06:00
root
073b2b0acd Accessibility when selecting a search filter v7 2025-01-30 09:27:55 -03:00
FrancescoMolinaro
d155d778ee [DURACOM-304] fix tests and lint 2025-01-30 12:32:58 +01:00
FrancescoMolinaro
50e440bcf5 [DURACOM-304] remove br 2025-01-30 12:15:54 +01:00
FrancescoMolinaro
af39526d77 [DURACOM-304] refactor, fix dynamic-list.component loading 2025-01-30 12:15:41 +01:00
FrancescoMolinaro
f77ce869f8 [DURACOM-304] remove control flow 2025-01-30 12:14:07 +01:00
FrancescoMolinaro
bc06839926 [DURACOM-304] improve loading logic for cc-licenses section and dynamic-list 2025-01-30 12:13:52 +01:00
FrancescoMolinaro
a3ebfc0f36 [DURACOM-304] fix missing import 2025-01-30 12:02:29 +01:00
FrancescoMolinaro
362364136d [DURACOM-304] add support for findAll method in dynamic-scrollable-dropdown.component.ts 2025-01-30 12:02:12 +01:00
FrancescoMolinaro
b892b13529 [DURACOM-304] adapt call to bitstream service 2025-01-30 11:53:31 +01:00
Alisa Ismailati
b220e20053 [DURACOM-304] other fix related to accessibility 2025-01-30 11:52:47 +01:00
Alisa Ismailati
eaff0b1397 [DURACOM-304] Refactor of bundle-data.service.ts by removing page size of 9999 2025-01-30 11:52:31 +01:00
Alisa Ismailati
0108f525ba [DURACOM-304] fix accessibility issue on scripts-select 2025-01-30 11:47:42 +01:00
Alisa Ismailati
3f5de295a7 [DURACOM-304] test fix 2025-01-30 11:47:27 +01:00
Alisa Ismailati
62924cc5e0 [DURACOM-304] Refactored submission-section-cc-licenses.component.ts by removing page size of 9999 2025-01-30 11:47:00 +01:00
Alisa Ismailati
8453b667cb [DURACOM-304] removed unneeded selectAll method (dynamic-lookup-relation-search-tab.component) 2025-01-30 11:41:12 +01:00
Alisa Ismailati
3922130434 [DURACOM-304] Refactored relationship-type-data.service.ts by removing page size of 9999 2025-01-30 11:39:15 +01:00
Alisa Ismailati
c3b265d213 [DURACOM-304] Refactored dynamic-list.component.ts by removing page size of 9999 2025-01-30 11:38:14 +01:00
Alisa Ismailati
2b58377830 [DURACOM-304] Refactored scripts-select.component by using infinite scroll instead of page size 9999 2025-01-30 11:37:03 +01:00
Alisa Ismailati
4536d9c74d [DURACOM-304] Refactored edit-bitstream-page.component by removing page size of 9999 2025-01-30 11:34:39 +01:00
Alisa Ismailati
a3b7125ef9 [DURACOM-304] Refactored item-bitstreams.component by removing page size of 9999 2025-01-30 11:30:45 +01:00
Alexandre Vryghem
6f9c55d250 116404: Prevent the opening from the modal using mouse interactions from automatically focussing on the first element
(cherry picked from commit 82ed3aadff)
2025-01-30 00:52:16 +01:00
Alexandre Vryghem
9c6fb1794f 116404: Replaced ViewChild logic with a CSS selector
This change avoids triggering an additional change detection cycle

(cherry picked from commit f7bb83013a)
2025-01-30 00:52:16 +01:00
Alexandre Vryghem
0f27ae1125 116404: Close modal on escape
(cherry picked from commit 84df67c00b)
2025-01-30 00:52:16 +01:00
Alexandre Vryghem
73285284ce 116404: Apply focus on first item
(cherry picked from commit 2152bab717)
2025-01-30 00:52:16 +01:00
Alexandre Vryghem
53186988f5 116404: Added navigation with arrow keys in navbar & collapsed the expandable menu when hovering outside of it
(cherry picked from commit 05232cdf2b)
2025-01-30 00:52:16 +01:00
Alexandre Vryghem
8f9236f06d 116404: Don't navigate in the expandable navbar section with tab
Had to move the @slide animation to prevent focus being lost when tabbing in the expandable section

(cherry picked from commit c08c2721ac)
2025-01-30 00:03:55 +01:00
Alexandre Vryghem
470ad80741 116404: Fixed expandable navbar section loosing focus on expand through keyboard
(cherry picked from commit 2547b1218f)
2025-01-30 00:03:10 +01:00
Tim Donohue
c3f17b9754 Merge pull request #3921 from tdonohue/config_syntax_7x
[Port dspace-7_x] Fix YAML syntax and revert section name to "universal"
2025-01-29 16:39:06 -06:00
Tim Donohue
e296295df5 Fix YAML syntax and revert section name to "universal" as that's the name in 7.x 2025-01-29 15:57:55 -06:00
Tim Donohue
795f300158 Merge pull request #3913 from alexandrevryghem/w2p-122357_browse-performance-fixes_contribute-7_x
[Port dspace-7_x] Browse performance fixes
2025-01-29 10:02:28 -06:00
Tim Donohue
38d5f87d3e Merge pull request #3916 from tdonohue/port_3818_to_7x
[Port dspace-7_x] Changing metadata in a user profile without specifying a password brings up a success and an error panel
2025-01-29 06:48:54 -06:00
VictorDuranEscire
5a5c1f18e3 Changing metadata in a user profile without specifying a password brings up a success and an error panel (#3818)
* Agregar validador para mostrar mensaje de error solo si se escribe la contraseña actual

* Agregar validador para mostrar mensaje de error solo si se escribe la contraseña actual

* Set constant variable for valid current password in profile page
2025-01-28 17:26:43 -06:00
Alexandre Vryghem
bb3d2bb483 122357: Reduced the amount of times the browse observables are fired again
(cherry picked from commit 0570542b1e)
2025-01-28 23:48:07 +01:00
Alexandre Vryghem
8c92364d43 122357: Ensure the request href$ observable aren't triggered multiple times
(cherry picked from commit 3ecdfe422d)
2025-01-28 23:38:23 +01:00
Tim Donohue
1cc4756ee2 Merge pull request #3270 from atmire/w2p-117544_support-for-disabled-elements-for-screen-readers-7.x
[Port dspace-7_x] support for disabled buttons for screen readers
2025-01-28 16:36:24 -06:00
Tim Donohue
08bda53a2e Merge pull request #3907 from 4Science/task/dspace-7_x/DURACOM-303
[Port dspace-7_x] Exclude search and browse from Angular SSR
2025-01-27 10:25:50 -06:00
Jens Vannerum
cd2f8abd2d 117544: fix issues latest 7.x merge 2025-01-27 10:23:49 +01:00
FrancescoMolinaro
8a4f24fc31 [DURACOM-303] adapt tests dependencies and template variable 2025-01-27 09:34:42 +01:00
dependabot[bot]
868b021118 Bump @babel/runtime from 7.26.0 to 7.26.7
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.26.0 to 7.26.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.7/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 02:35:56 +00:00
Tim Donohue
c7d8949c82 Merge pull request #3861 from DSpace/dependabot/npm_and_yarn/dspace-7_x/mirador-3.4.3
Bump mirador from 3.4.2 to 3.4.3
2025-01-24 16:19:29 -06:00
Tim Donohue
7f1ae419af Merge pull request #3899 from DSpace/backport-3212-to-dspace-7_x
[Port dspace-7_x] Fix truncatable-part keyboard accessibility
2025-01-24 13:48:27 -06:00
Tim Donohue
30d57174e6 Merge pull request #3896 from DSpace/backport-3413-to-dspace-7_x
[Port dspace-7_x] Improve descriptive labels for show/hide x more buttons for related items (Item/Entity Homepage)
2025-01-24 12:52:04 -06:00
Tim Donohue
c155a60a7e Merge pull request #3895 from DSpace-Labs/dependabot/npm_and_yarn/cross-spawn-7.0.6
Bump cross-spawn from 7.0.3 to 7.0.6
2025-01-24 12:29:05 -06:00
autavares-dev
5d6bf0bb33 Fix truncatable-part keyboard accessibility
(cherry picked from commit 6cb4faa8d3)
2025-01-24 18:26:41 +00:00
Alisa Ismailati
147564b114 [CST-17153] improve descriptive labels for show/hide more buttons on related items lists
(cherry picked from commit 7cd82e542b)
2025-01-24 18:05:32 +00:00
dependabot[bot]
ecd2faea4a Bump cross-spawn from 7.0.3 to 7.0.6
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 17:43:00 +00:00
FrancescoMolinaro
990f00b129 [DURACOM-303] adapt solution to older version of angular 2025-01-24 18:26:28 +01:00
FrancescoMolinaro
483b97d9c1 [DURACOM-303] refactor thumbnail's skeleton style 2025-01-24 17:41:56 +01:00
FrancescoMolinaro
171a971572 [DURACOM-303] resolve conflicts 2025-01-24 17:41:38 +01:00
FrancescoMolinaro
8a4e8f6045 [DURACOM-303] fix SSR check on template and on components missing the environment config. Add descriptive comment for skeleton component. Fix JS error on SSR. 2025-01-24 17:41:28 +01:00
FrancescoMolinaro
32364e4f68 [DURACOM-303] add override possibility with input 2025-01-24 17:38:26 +01:00
FrancescoMolinaro
311f648c3f [DURACOM-303] rename variable, minor code refactor 2025-01-24 17:35:36 +01:00
FrancescoMolinaro
2c28f75263 [DURACOM-303] refactor param, add example of configuration 2025-01-24 17:32:31 +01:00
FrancescoMolinaro
53335658e0 [DURACOM-303] adapt interface for ssr 2025-01-24 17:29:37 +01:00
FrancescoMolinaro
9467838066 [DURACOM-303] add grid layout, make SSR enabling configurable, minor restyle of skeletons 2025-01-24 17:29:19 +01:00
FrancescoMolinaro
99656f1357 [DURACOM-303] add loop for filters count 2025-01-24 17:16:20 +01:00
FrancescoMolinaro
8ee05f4352 [DURACOM-303] fix missing url link 2025-01-24 17:11:13 +01:00
FrancescoMolinaro
6756a78ba0 [DURACOM-303] restyle skeleton, add filter badge skeleton 2025-01-24 17:10:20 +01:00
FrancescoMolinaro
b482b58d53 [DURACOM-303] adapt tests 2025-01-24 17:08:39 +01:00
FrancescoMolinaro
312a2a7f58 [DURACOM-303] fix lint and tests 2025-01-24 17:07:27 +01:00
FrancescoMolinaro
d6f0f02c1a [DURACOM-303] minor restyle of skeleton for mobile 2025-01-24 17:05:26 +01:00
FrancescoMolinaro
61eb14783e [DURACOM-303] resolve conflicts 2025-01-24 17:03:47 +01:00
FrancescoMolinaro
126f3c71f4 [DURACOM-303] add skeleton loader for search results and filters 2025-01-24 17:03:29 +01:00
DSpace Bot
6cd092671f [Port dspace-7_x] Improving the color contrast of home news content (#3890)
* Improving the color contrast of home news content

(cherry picked from commit 2290b871f7)

* Improved color contrast

(cherry picked from commit 62b6677e04)

* Adjusting font color changes

(cherry picked from commit be335415fd)

---------

Co-authored-by: root <root@TI-03.OHB.LOCAL>
2025-01-24 09:58:41 -06:00
FrancescoMolinaro
39c5de6e18 [DURACOM-303] implement skeleton component for search results 2025-01-24 16:54:23 +01:00
FrancescoMolinaro
5868a3198f [DURACOM-303] fix missing imports 2025-01-24 16:49:25 +01:00
FrancescoMolinaro
c5fd4426cd [DURACOM-303] prevent possibly long-lasting search and browse calls in SSR 2025-01-24 16:44:39 +01:00
Jens Vannerum
ea715ba9f5 Merge remote-tracking branch 'origin/dspace-7_x' into w2p-117544_support-for-disabled-elements-for-screen-readers-7.x 2025-01-24 10:17:33 +01:00
Tim Donohue
f097652594 Merge pull request #3865 from DSpace/dependabot/npm_and_yarn/dspace-7_x/jsonschema-1.5.0
Bump jsonschema from 1.4.1 to 1.5.0
2025-01-23 16:50:21 -06:00
Tim Donohue
cecf87364e Merge pull request #3864 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.40.0
Bump core-js from 3.39.0 to 3.40.0
2025-01-23 16:02:02 -06:00
Tim Donohue
afa0a9017f Merge pull request #3858 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-d300448e1c
Bump sass from 1.83.1 to 1.83.4 in the sass group
2025-01-23 15:12:00 -06:00
Tim Donohue
7638511762 Merge pull request #3856 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-3a92966d17
Bump postcss from 8.4.49 to 8.5.1 in the postcss group
2025-01-23 14:49:30 -06:00
Tim Donohue
31336efad2 Merge pull request #3860 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.14
Bump @types/lodash from 4.17.13 to 4.17.14
2025-01-23 11:11:53 -06:00
dependabot[bot]
fc2d3f0a23 Bump sass from 1.83.1 to 1.83.4 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.83.1 to 1.83.4
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.83.1...1.83.4)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-22 23:47:29 +00:00
dependabot[bot]
6cb3e8bbfb Bump postcss from 8.4.49 to 8.5.1 in the postcss group
Bumps the postcss group with 1 update: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.4.49 to 8.5.1
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.49...8.5.1)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: postcss
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-22 23:47:21 +00:00
Tim Donohue
00ff0cc7e4 Merge pull request #3876 from scholarsportal/fix-bitsream-filename-encoding-url-dspace-7_x
Fix redirect URLs of bitstreams with spaces in filename
2025-01-22 16:04:49 -06:00
Tim Donohue
81fa0ba446 Merge pull request #3346 from 4Science/task/dspace-7_x/CST-14904
[Port dspace-7_x] Add orcid icon with tooltip
2025-01-22 12:39:51 -06:00
Tim Donohue
5342653b99 Merge pull request #3879 from alanorth/angular-ssr-sitemap-dspace7
[Post dspace-7_x] Restrict Angular SSR to paths in the sitemap
2025-01-22 10:21:10 -06:00
Andreas Awouters
d4b0cf21d3 Merge remote-tracking branch 'dspace/dspace-7_x' into accessibility-settings-7_x
# Conflicts:
#	src/app/profile-page/profile-page.component.html
#	src/app/shared/notifications/notifications-board/notifications-board.component.spec.ts
#	src/app/shared/notifications/notifications-board/notifications-board.component.ts
2025-01-22 15:56:10 +01:00
Tim Donohue
88fb275017 Merge pull request #3878 from DSpace/backport-3875-to-dspace-7_x
[Port dspace-7_x] Stabilize e2e tests that use admin sidebar menu
2025-01-22 08:55:54 -06:00
Andreas Awouters
d9614b9a1b Merge branch 'accessibility-settings-7.6' into accessibility-settings-7_x 2025-01-22 15:50:41 +01:00
Andreas Awouters
b55a318676 119602: Reset notificationTimeOut when left on 0 2025-01-22 15:47:13 +01:00
Alan Orth
b839252ed7 Restrict SSR to paths in the sitemap
Because Angular SSR is not very efficient, after discussion with
the Google Scholar team we realized a compromise would be to only
use SSR for pages in the DSpace sitemap (and the home page).
2025-01-22 11:02:35 +03:00
Tim Donohue
e3f13f8c54 Ensure admin menu e2e tests hover over admin menu before clicking on it. Attempt to stabilize tests which open this menu.
(cherry picked from commit e9cd0f4c64)
2025-01-21 23:12:01 +00:00
Mohana Sarmiento
2bd53d822a Add unit test 2025-01-21 16:26:01 -05:00
Tim Donohue
b11543c3a5 Merge pull request #3873 from DSpace/backport-3872-to-dspace-7_x
[Port dspace-7_x] SCSS cleanup: remove duplicated line
2025-01-21 14:46:03 -06:00
Sascha Szott
6035d9e925 remove duplicated line
(cherry picked from commit 5d04e44ff3)
2025-01-21 19:37:19 +00:00
Mohana Sarmiento
74d6dbb454 Fix double encoding of bitstream filenames in URL 2025-01-20 18:13:35 -05:00
Andrea Barbasso
d0b6571954 [CST-14904] improve orcid logo image alt 2025-01-20 15:31:31 +01:00
dependabot[bot]
39ddc5cbcd Bump jsonschema from 1.4.1 to 1.5.0
Bumps [jsonschema](https://github.com/tdegrunt/jsonschema) from 1.4.1 to 1.5.0.
- [Commits](https://github.com/tdegrunt/jsonschema/commits)

---
updated-dependencies:
- dependency-name: jsonschema
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 22:58:28 +00:00
dependabot[bot]
9bc65b99a6 Bump core-js from 3.39.0 to 3.40.0
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.39.0 to 3.40.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.40.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 22:58:20 +00:00
dependabot[bot]
9741ce3e69 Bump mirador from 3.4.2 to 3.4.3
Bumps [mirador](https://github.com/ProjectMirador/mirador) from 3.4.2 to 3.4.3.
- [Release notes](https://github.com/ProjectMirador/mirador/releases)
- [Commits](https://github.com/ProjectMirador/mirador/compare/v3.4.2...v3.4.3)

---
updated-dependencies:
- dependency-name: mirador
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 22:57:54 +00:00
dependabot[bot]
7472be0098 Bump @types/lodash from 4.17.13 to 4.17.14
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.13 to 4.17.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-17 22:57:43 +00:00
Tim Donohue
f3df3cc96c Merge pull request #3830 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sanitize-html-2.14.0
Bump sanitize-html from 2.13.1 to 2.14.0
2025-01-17 16:29:44 -06:00
Tim Donohue
8ef53178db Merge pull request #3831 from DSpace/dependabot/npm_and_yarn/dspace-7_x/isbot-5.1.21
Bump isbot from 5.1.17 to 5.1.21
2025-01-17 12:04:19 -06:00
Tim Donohue
395a5b2cb1 Merge pull request #3828 from DSpace/dependabot/npm_and_yarn/dspace-7_x/testing-752a8f7b41
Bump the testing group across 1 directory with 2 updates
2025-01-17 10:40:14 -06:00
dependabot[bot]
ce5ab70fd4 Bump isbot from 5.1.17 to 5.1.21
Bumps [isbot](https://github.com/omrilotan/isbot) from 5.1.17 to 5.1.21.
- [Changelog](https://github.com/omrilotan/isbot/blob/main/CHANGELOG.md)
- [Commits](https://github.com/omrilotan/isbot/compare/v5.1.17...v5.1.21)

---
updated-dependencies:
- dependency-name: isbot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 23:48:52 +00:00
dependabot[bot]
2abdf122b4 Bump sanitize-html from 2.13.1 to 2.14.0
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.13.1 to 2.14.0.
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.13.1...2.14.0)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 23:46:54 +00:00
dependabot[bot]
31c9b854c6 Bump the testing group across 1 directory with 2 updates
Bumps the testing group with 2 updates in the / directory: [cypress](https://github.com/cypress-io/cypress) and [ng-mocks](https://github.com/help-me-mom/ng-mocks).


Updates `cypress` from 13.15.1 to 13.17.0
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/cypress-io/cypress/compare/v13.15.1...v13.17.0)

Updates `ng-mocks` from 14.13.1 to 14.13.2
- [Release notes](https://github.com/help-me-mom/ng-mocks/releases)
- [Changelog](https://github.com/help-me-mom/ng-mocks/blob/master/CHANGELOG.md)
- [Commits](https://github.com/help-me-mom/ng-mocks/compare/v14.13.1...v14.13.2)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing
- dependency-name: ng-mocks
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 22:54:06 +00:00
Tim Donohue
75e45d4c15 Merge pull request #3774 from DSpace/dependabot/npm_and_yarn/dspace-7_x/mirador-3.4.2
Bump mirador from 3.3.0 to 3.4.2
2025-01-15 16:47:00 -06:00
Tim Donohue
d88c8ef986 Merge pull request #3669 from DSpace/dependabot/npm_and_yarn/dspace-7_x/eslint-6ac3f070f3
Bump eslint-plugin-jsonc from 2.16.0 to 2.18.2 in the eslint group across 1 directory
2025-01-15 15:56:34 -06:00
Tim Donohue
f07a62b8b6 Merge pull request #3799 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-fc80c07a3c
Bump sass from 1.80.6 to 1.83.1 in the sass group across 1 directory
2025-01-15 15:53:30 -06:00
Tim Donohue
2b96983f9d Merge pull request #3775 from DSpace/dependabot/npm_and_yarn/dspace-7_x/fortawesome/fontawesome-free-6.7.2
Bump @fortawesome/fontawesome-free from 6.6.0 to 6.7.2
2025-01-15 15:12:53 -06:00
Tim Donohue
c8b2642f57 Merge pull request #3829 from DSpace/dependabot/npm_and_yarn/dspace-7_x/express-4.21.2
Bump express from 4.21.1 to 4.21.2
2025-01-15 15:00:29 -06:00
dependabot[bot]
fd166fe79a Bump eslint-plugin-jsonc in the eslint group across 1 directory
Bumps the eslint group with 1 update in the / directory: [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc).


Updates `eslint-plugin-jsonc` from 2.16.0 to 2.18.2
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.16.0...v2.18.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsonc
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-15 19:51:07 +00:00
Tim Donohue
6446911441 Merge pull request #3844 from tdonohue/port_3842_to_7x
[Port dspace-7_x] Attempt to stabilize a few randomly failing e2e tests
2025-01-15 13:45:19 -06:00
Tim Donohue
9e1ce916f6 Ensure Item Edit page tab is visible before & after clicking it. 2025-01-15 13:01:58 -06:00
Tim Donohue
ecceaf9ee1 Ensure Admin sidebar link is visible before clicking links 2025-01-15 13:01:58 -06:00
Tim Donohue
fcf3370d66 Merge pull request #3727 from DSpace/dependabot/npm_and_yarn/dspace-7_x/axios-1.7.9
Bump axios from 1.7.7 to 1.7.9
2025-01-14 17:02:24 -06:00
Tim Donohue
813e965938 Merge pull request #3702 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sortablejs-1.15.6
Bump sortablejs from 1.15.3 to 1.15.6
2025-01-14 16:53:20 -06:00
dependabot[bot]
3c16537fe4 Bump express from 4.21.1 to 4.21.2
Bumps [express](https://github.com/expressjs/express) from 4.21.1 to 4.21.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.2/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.1...4.21.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 02:39:41 +00:00
dependabot[bot]
a57fd1a069 Bump sass from 1.80.6 to 1.83.1 in the sass group across 1 directory
Bumps the sass group with 1 update in the / directory: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.80.6 to 1.83.1
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.80.6...1.83.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 02:39:03 +00:00
Tim Donohue
6f5864d106 Merge pull request #3826 from tdonohue/port_3105_to_7x
[Port dspace-7_x] Fix for User profile (/profile): only 20 group memberships shown instead of all
2025-01-10 17:07:33 -06:00
Tim Donohue
fbe4ce5829 Merge pull request #3824 from tdonohue/port_3096_to_7x
[Port dspace-7_x] Change - Metadata field selector, add infinite scroll for data paginated
2025-01-10 16:23:13 -06:00
VictorHugoDuranS
112bed787a Fix for User profile (/profile): only 20 group memberships shown instead of all (#3105)
* Add - groups paginated on profile page

* Add - groups paginated on profile page

* Add - groups paginated on profile page

* Add - groups paginated on profile page

* Fix UPDATE - Add pagination message error and loader

* Update BRANCH

* Fix - LINT ERRORS

* Fix: Error declaring variable for group pagination

* Fix: Remove unnecessary translations for paging groups

* Fix: Lint erros

* Fix: Remove unnecessary translations

---------

Co-authored-by: VictorDuranEscire <victor@escire.lat>
2025-01-10 15:53:09 -06:00
VictorHugoDuranS
05d5a0816d Change - Metadata field selector, add infinite scroll for data paginated (#3096)
* Change - Metadata field selector add infinite scroll for data paginated

* Update change on new BRANCH

* Fix - LINT ERRORS

* Fix - LINT ERRORS
2025-01-10 15:42:33 -06:00
Alan Orth
58e9a60812 Merge pull request #3812 from tdonohue/port_3701_to_7x 2025-01-08 10:20:58 +03:00
Koen Pauwels
76539dd8a1 Reduce browse definition requests on simple item page (#3701)
* 121561 Reduce the number of browse definition requests on Item pages by reusing the navbar request for all browse indexes

* Fix test issues.

---------

Co-authored-by: Koen Pauwels <koen.pauwels@atmire.com>
2025-01-07 17:00:53 -06:00
Tim Donohue
d0a8448de6 Merge pull request #3668 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-65f8102df2
Bump postcss from 8.4.47 to 8.4.49 in the postcss group across 1 directory
2025-01-07 16:18:38 -06:00
Tim Donohue
9fce33f514 Merge pull request #3805 from DSpace/backport-3719-to-dspace-7_x
[Port dspace-7_x] Remove nested span elements with duplicate content of parent elements
2025-01-07 10:46:04 -06:00
Sascha Szott
04123f92aa fix indentation
(cherry picked from commit dbd67f056e)
2025-01-07 15:08:57 +00:00
Sascha Szott
7538f49a36 remove nested span element
(cherry picked from commit acb7c9bd33)
2025-01-07 15:08:57 +00:00
Sascha Szott
60586f6c33 fix nested span element
(cherry picked from commit 97b5e0cc92)
2025-01-07 15:08:57 +00:00
Sascha Szott
86a6897861 fix nested span element
(cherry picked from commit e9a28c6d3d)
2025-01-07 15:08:57 +00:00
Sascha Szott
68372b2cb8 fix nested span element
(cherry picked from commit 2e174cd9e6)
2025-01-07 15:08:57 +00:00
Sascha Szott
cefeb6a1d6 fix nested span element
(cherry picked from commit 15d3f257b3)
2025-01-07 15:08:57 +00:00
Sascha Szott
9c859b1fdc fix nested span element
(cherry picked from commit 8509096c32)
2025-01-07 15:08:57 +00:00
Sascha Szott
fbaa5068af fix nested span element
(cherry picked from commit 84878ede67)
2025-01-07 15:08:56 +00:00
Sascha Szott
8515de3d10 fix nested span element in templates
(cherry picked from commit 394ecea118)
2025-01-07 15:08:56 +00:00
Tim Donohue
96cdab8d6a Merge pull request #3640 from DSpace/dependabot/npm_and_yarn/dspace-7_x/express-static-gzip-2.2.0
Bump express-static-gzip from 2.1.8 to 2.2.0
2025-01-06 17:00:32 -06:00
Tim Donohue
ebc7799404 Merge pull request #3795 from alexandrevryghem/w2p-122005_fixed-dropdown-values-resetting-on-enter_contribute-7_x
[Port dspace-7_x] Fixed dropdown/lookup & lookup-name fields being reset when hitting enter
2025-01-06 16:24:11 -06:00
Alexandre Vryghem
d3d86f4f2d 119799: Prevent the lookup/lookup-name fields from resetting when hitting the enter key in another input field
(cherry picked from commit c8694e1a87)
2025-01-06 22:38:58 +01:00
Tim Donohue
a078932857 Merge pull request #3143 from atmire/w2p-115284_add-support-for-non-repeatable-relationships_dspace-7-x
[Port dspace-7_x] Add support for non repeatable relationships
2025-01-06 11:59:13 -06:00
Tim Donohue
a1b7c8d9c5 Merge pull request #3789 from DSpace/backport-3718-to-dspace-7_x
[Port dspace-7_x] fix selector in OrgUnitSearchResultListSubmissionElementComponent compontent
2025-01-06 09:00:57 -06:00
dependabot[bot]
894448e3dc Bump postcss in the postcss group across 1 directory
Bumps the postcss group with 1 update in the / directory: [postcss](https://github.com/postcss/postcss).


Updates `postcss` from 8.4.47 to 8.4.49
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.47...8.4.49)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: postcss
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 03:04:09 +00:00
Alexandre Vryghem
b25294c872 Merge branch 'w2p-122005_fixed-dropdown-values-resetting-on-enter_contribute-7.6' into dspace-7_x
# Conflicts:
#	src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html
2025-01-03 17:08:46 +01:00
Sascha Szott
ecf3298345 fix value of selector in component annotation
(cherry picked from commit 71de4b600b)
2025-01-03 06:01:04 +00:00
Andreas Awouters
18819b76a8 Merge branch 'w2p-122839_vocabulary-preloadlevel-fix' into vocabulary-preloadlevel-fix-7_x
# Conflicts:
#	src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts
2025-01-02 15:12:50 +01:00
Andreas Awouters
4ffde928d4 122839: Fix vocabulary-treeview component tests 2025-01-02 14:42:17 +01:00
Andreas Awouters
9406f7b085 122839: Retrieve preloadLevel from vocabulary before creating tree 2025-01-02 12:04:40 +01:00
jensvannerum
33fdee554e [Port dspace-7_x] Get rid of unnecessary and failing REST requests when navigating between different browse indexes (#3788)
Co-authored-by: Koen Pauwels <koen.pauwels@atmire.com>
Co-authored-by: Jens Vannerum <jens.vannerum@atmire.com>
2025-01-01 12:50:30 +03:00
Andreas Awouters
cee9d0422b 122839: Load nodes up to defined preloadLevel 2024-12-24 15:17:27 +01:00
dependabot[bot]
5c8eabddab Bump @fortawesome/fontawesome-free from 6.6.0 to 6.7.2
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.6.0 to 6.7.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.6.0...6.7.2)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-free"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 02:28:53 +00:00
dependabot[bot]
a18225aa4d Bump mirador from 3.3.0 to 3.4.2
Bumps [mirador](https://github.com/ProjectMirador/mirador) from 3.3.0 to 3.4.2.
- [Release notes](https://github.com/ProjectMirador/mirador/releases)
- [Commits](https://github.com/ProjectMirador/mirador/compare/v3.3.0...v3.4.2)

---
updated-dependencies:
- dependency-name: mirador
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 02:28:39 +00:00
Tim Donohue
d578222f8f Merge pull request #3770 from DSpace/backport-3679-to-dspace-7_x
[Port dspace-7_x] #3678, #3217 - Fix ordering and changing values of repeatable inputs in submission form
2024-12-19 16:58:03 -06:00
Andrea Barbasso
abc3c41c63 [DURACOM-297] fix changing values in submission form after ordering
(cherry picked from commit 1c9272107c)
2024-12-19 22:25:50 +00:00
Tim Donohue
a8e658a399 Merge pull request #3768 from tdonohue/port_3367_to_7x
[Port dspace-7_x] Accessibility in vocabulary treeview
2024-12-19 14:31:25 -06:00
Tim Donohue
81522586dd Merge pull request #3766 from tdonohue/port_3322_to_7x
[Port dspace-7_x] fix #3241: Configuring the URI link target
2024-12-19 12:26:22 -06:00
andreaNeki
a8ff6a41e0 Trying to correct an error in the focus implementation 2024-12-19 12:18:08 -06:00
andreaNeki
75260b00d9 Ensuring that the message “There were no items to show” is announced to the screen reader when necessary 2024-12-19 12:17:53 -06:00
andreaNeki
14680b013e Adding focus to the input after the reset button is clicked 2024-12-19 12:15:47 -06:00
andreaNeki
b601405e56 Adding the aria-label attribute to buttons 2024-12-19 12:14:10 -06:00
root
c6ef2f1bd0 Addition of unit tests for the getLinkAttributes() method 2024-12-19 11:50:28 -06:00
igorbaptist4
2a1ef02d75 fix identation 2024-12-19 11:50:21 -06:00
igorbaptist4
25ab69ff21 Configuring the URI link target 2024-12-19 11:50:07 -06:00
Tim Donohue
eb3db9ceb6 Merge pull request #3597 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.39.0
Bump core-js from 3.38.1 to 3.39.0
2024-12-18 16:52:22 -06:00
Tim Donohue
84c0371aab Merge pull request #3763 from tdonohue/port_3264_to_7x
[Port dspace-7_x] More accessible file download link for users who use a screen reader
2024-12-18 15:55:48 -06:00
Andrea-Guevara
4bf4e18389 More accessible file download link for users who use a screen reader (#3264)
* More accessible file download link for users who use a screen reader

* Refactoring implementation - More accessible file download link for users who use a screen reader

* Fixing import error

* Solving the spaces error

* Solving the spaces error

* Solving the spaces error in file pt-BR.json5

---------

Co-authored-by: andreaNeki <root@TI-03.OHB.LOCAL>
2024-12-18 14:48:08 -06:00
Tim Donohue
2ff5350302 Merge pull request #3716 from alexandrevryghem/w2p-120109_fix-findByHref-and-findListByHref-skipping-their-response_contribute-7_x
[Port dspace-7_x] Fix infinite loading on item pages and optimize menu resolver usage
2024-12-18 11:17:35 -06:00
Tim Donohue
36dd4762ed Merge pull request #3466 from atmire/item-edit-bitstreams-table-7_x
[Port dspace-7_x] Edit Item, Bitstreams tab: Accessibility improvements
2024-12-18 10:49:01 -06:00
Tim Donohue
655558538c Merge pull request #3721 from alexandrevryghem/w2p-117573_remove-observable-function-calls-from-template_contribute-7_x
[Port dspace-7_x] Removed observable function calls from template (part 1)
2024-12-18 10:38:54 -06:00
Tim Donohue
12fc5aff71 Merge pull request #3756 from tdonohue/port_3754_to_7x
[Port dspace-7_x][GitHub Actions][Docker] Update Docker scripts & GitHub Actions to use ghcr.io instead of docker.io
2024-12-16 17:26:51 -06:00
Tim Donohue
cd500007b6 Login to GHCR in order to have access to private Docker images for e2e tests. 2024-12-16 16:31:17 -06:00
Tim Donohue
686b61915a Update GitHub Actions for Docker & normal build to use GitHub Container Registry 2024-12-16 16:31:11 -06:00
Tim Donohue
996c877412 Allow for other Docker registries to be used with all Docker compose scripts 2024-12-16 16:30:53 -06:00
Tim Donohue
c9d6c95563 Use fully qualified image names in Dockerfiles. Minor syntax fixes to ENV variables 2024-12-16 16:24:14 -06:00
Andreas Awouters
bee8bde87f Merge branch 'item-edit-bitstreams-table-7.6' into item-edit-bitstreams-table-7_x 2024-12-11 11:22:56 +01:00
Andreas Awouters
5a88cedc22 118223: Remove console.log 2024-12-11 11:17:01 +01:00
Andreas Awouters
442b4ea284 Merge branch 'accessibility-settings-7.6' into accessibility-settings-7_x 2024-12-11 10:12:14 +01:00
Andreas Awouters
c71c6667e0 119602: Improve notification hiding toggle useability 2024-12-11 10:10:16 +01:00
Andreas Awouters
010b2f9693 119602: Improve types & docs 2024-12-11 09:35:01 +01:00
dependabot[bot]
297fc01892 Bump axios from 1.7.7 to 1.7.9
Bumps [axios](https://github.com/axios/axios) from 1.7.7 to 1.7.9.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.7...v1.7.9)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-09 02:29:01 +00:00
Alexandre Vryghem
f9e67dc513 Merge branch 'w2p-117573_remove-observable-function-calls-from-template-7.6' into w2p-117573_remove-observable-function-calls-from-template_contribute-7_x 2024-12-06 18:09:13 +01:00
Alexandre Vryghem
5ee721f2c4 117287: Embed the communities/collections on the EPerson groups 2024-12-06 18:08:57 +01:00
Alexandre Vryghem
830ada37f5 119915: Restored functionality to hide the research profile section on the profile page
(cherry picked from commit ded0079f24)
2024-12-06 17:18:29 +01:00
Alexandre Vryghem
b5a8b56473 117287: Prevent /api/eperson/epersons/undefined from being fired on the create ePerson page
(cherry picked from commit 0cb5b76159)
2024-12-06 17:18:13 +01:00
Alexandre Vryghem
2a72fac646 Merge branch 'w2p-117573_remove-observable-function-calls-from-template-7.6' into dspace-7_x
# Conflicts:
#	src/app/access-control/epeople-registry/epeople-registry.component.html
#	src/app/access-control/epeople-registry/epeople-registry.component.ts
#	src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html
#	src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts
#	src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts
#	src/app/access-control/group-registry/group-form/group-form.component.html
#	src/app/access-control/group-registry/group-form/group-form.component.ts
#	src/app/admin/admin-registries/bitstream-formats/bitstream-formats.component.html
#	src/app/admin/admin-registries/bitstream-formats/bitstream-formats.component.spec.ts
#	src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts
#	src/app/admin/admin-registries/metadata-schema/metadata-schema.component.html
#	src/app/admin/admin-registries/metadata-schema/metadata-schema.component.ts
#	src/app/shared/pagination/pagination.component.ts
2024-12-06 17:14:51 +01:00
Alexandre Vryghem
6988df519e Merge branch 'w2p-120109_fix-findByHref-and-findListByHref-skipping-their-response_contribute-7.6' into dspace-7_x
# Conflicts:
#	src/app/core/data/base/base-data.service.spec.ts
#	src/app/core/data/base/base-data.service.ts
#	src/app/item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts
2024-12-05 23:49:13 +01:00
Alexandre Vryghem
ce17d23c08 120109: Updated the route configuration to only resolve the dsoEditMenuResolver on pages who use the DsoEditMenuComponent
(cherry picked from commit 5c9f494f76)
2024-12-05 23:27:55 +01:00
Alexandre Vryghem
91acc957b1 120109: Fixed "no elements in sequence" sometimes being thrown on the item bitstream & relationship tabs
(cherry picked from commit decacec404)
2024-12-05 23:27:54 +01:00
Alexandre Vryghem
987ea5104a 120109: Fixed BaseDataService not emitting when the request is too fast and the ResponsePending are not emitted
(cherry picked from commit 0f4d71eb58)
2024-12-05 23:27:54 +01:00
Tim Donohue
135c085024 Merge pull request #3710 from DSpace/backport-3693-to-dspace-7_x
[Port dspace-7_x] Removed unauthorized metadata-export-search request on search page
2024-12-04 11:10:21 -06:00
Alexandre Vryghem
ed4e794d46 119799: Prevent submission from updating the dropdown values when hitting enter in another input form (onsubmit) 2024-12-04 17:16:14 +01:00
Alexandre Vryghem
80e938b1f2 121534: Removed unauthorized metadata-export-search request on search page for non-admins
(cherry picked from commit 70b855e785)
2024-12-03 18:16:02 +00:00
Alexandre Vryghem
c9df52cba2 120256: Ensure searchOptions$ is a SearchOptions and not a plain object
(cherry picked from commit e4daf2b825)
2024-12-03 18:16:02 +00:00
Tim Donohue
e975585350 Merge pull request #3182 from 4Science/task/dspace-7_x/CST-14903
[Port dspace-7_x] Orcid Authorization / Synchronization Page Fixes
2024-12-02 09:38:55 -06:00
dependabot[bot]
7eeeab4c26 Bump sortablejs from 1.15.3 to 1.15.6
Bumps [sortablejs](https://github.com/SortableJS/Sortable) from 1.15.3 to 1.15.6.
- [Release notes](https://github.com/SortableJS/Sortable/releases)
- [Commits](https://github.com/SortableJS/Sortable/compare/1.15.3...1.15.6)

---
updated-dependencies:
- dependency-name: sortablejs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-02 02:38:03 +00:00
Alan Orth
a53df4fed4 Merge pull request #3696 from 4Science/backport-3308-to-dspace-7_x 2024-11-29 13:58:04 +03:00
Andreas Awouters
cdec4880d2 119602: Compare notifications by id to correctly update store 2024-11-29 10:44:44 +01:00
Alexandre Vryghem
8849f140fb 117287: Removed method calls returning observables from ItemDetailPreviewComponent 2024-11-28 23:47:29 +01:00
Simone Ramundi
c743387a26 [DURACOM-296] Enabled 'admin-div' only for Site Administrator 2024-11-28 12:36:55 +01:00
Andreas Awouters
c38352ed22 119602: Update doc comments 2024-11-25 10:29:16 +01:00
Andreas Awouters
deb4a63c88 119602: Add additional accessibilitySettingsComponent tests 2024-11-25 10:12:39 +01:00
Andreas Awouters
ec016e80fb 119602: Update AccessibilitySettingsService stub 2024-11-25 10:00:04 +01:00
Andreas Awouters
ced163a25f 119602: Remove obsolete tests 2024-11-25 09:58:50 +01:00
Andreas Awouters
5a28e66b2f 119602: Move hints to contextHelp 2024-11-25 09:44:27 +01:00
Tim Donohue
35a25b372d Merge pull request #3685 from tdonohue/port_3683_to_7x
[Port dspace-7_x] Fix incorrect example in `config.example.yml`
2024-11-22 11:51:30 -06:00
Tim Donohue
62b31ea8c5 Fix incorrect example. The setting category is called "ssr" and not "universal" 2024-11-22 11:19:08 -06:00
Andreas Awouters
9ac92e0196 119602: Add unit after input fields 2024-11-22 16:09:12 +01:00
Andreas Awouters
287d028331 119602: Make input boxes smaller 2024-11-22 16:03:52 +01:00
Andreas Awouters
cae13942e2 119602: Allow resetting accessibility settings 2024-11-22 15:54:21 +01:00
Andreas Awouters
b16cec631d 119602: Add automatic notification hiding toggle 2024-11-22 13:56:39 +01:00
Andreas Awouters
dc8a699e94 119602: Rework convertion & form format 2024-11-22 11:55:05 +01:00
Tim Donohue
b54e54da30 Merge pull request #3660 from alexandrevryghem/w2p-107155_Performance-re-request-embeds_contribute-7_x
[Port dspace-7_x] Added support for caching embedded objects without a self link & null responses
2024-11-18 10:26:38 -06:00
Andreas Awouters
fdfa6e2c06 119602: Update values after converters implementation 2024-11-18 14:26:48 +01:00
Andreas Awouters
ecb00a95a0 119602: Implement converting of accessibility settings values 2024-11-18 13:50:46 +01:00
Andreas Awouters
fe90d39943 119602: Add placeholder in form 2024-11-18 11:36:10 +01:00
Alexandre Vryghem
e2615a798e Fixed flaky item-edit tests
This simply restores the accidental changes made during this cherry-pick: 3df66e0257
2024-11-17 02:33:53 +01:00
Alexandre Vryghem
ff42b65fc9 118944: Fix hasDraftVersion$ not working for embedded payloads with no content
(cherry picked from commit 704cc06f16)
2024-11-16 22:24:02 +01:00
Alexandre Vryghem
1e5eff918d Merge remote-tracking branch 'contributions/w2p-107155_Performance-re-request-embeds-7.6' into w2p-107155_Performance-re-request-embeds_contribute-7_x
# Conflicts:
#	src/app/core/browse/browse.service.ts
#	src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.spec.ts
2024-11-16 22:16:52 +01:00
Tim Donohue
e59674b5ac Merge pull request #3658 from DSpace/backport-3656-to-dspace-7_x
[Port dspace-7_x] #3655 - Fixes Spacing Issue Between Email Label and Email Address on Profile Setup Form
2024-11-15 17:12:29 -06:00
Simone Ramundi
5a1522deac [DURACOM-300] Fixed space in registration form
(cherry picked from commit 2b104183f7)
2024-11-15 22:34:39 +00:00
Tim Donohue
a5dff6df87 Merge pull request #3651 from tdonohue/port_3225_to_7x
[Port dspace-7_x] Fixed headings by their rank
2024-11-13 15:04:03 -06:00
Tim Donohue
790fa26953 Merge pull request #3652 from DSpace/backport-3649-to-dspace-7_x
[Port dspace-7_x] French translations for subscriptions feature
2024-11-13 14:29:58 -06:00
Pierre Lasou
b2f9743f9f French translations for subscriptions feature
Includes all french labels for subcriptions, plus 2 or 3 other missing things.

(cherry picked from commit 2c16162948)
2024-11-13 19:51:37 +00:00
Alisa Ismailati
66dedc5b2e [CST-15591] Fixed headings by their rank 2024-11-13 11:40:48 -06:00
Tim Donohue
6330516630 Merge pull request #3642 from DSpace/backport-3222-to-dspace-7_x
[Port dspace-7_x] Updated `cs` messages following the lindat v5 and clarin-dspace v7 instance
2024-11-11 10:40:20 -06:00
milanmajchrak
bd638f0356 Updated supervised by messages following NTK suggestions
(cherry picked from commit d819cf4396)
2024-11-11 15:31:30 +00:00
milanmajchrak
b11efbbf0c Updated messages for the 'supervised' and 'claim' sentenses
(cherry picked from commit 1aef6ce1d6)
2024-11-11 15:31:30 +00:00
milanmajchrak
68b6cc9bd4 Fixed small cs localization mistakes
(cherry picked from commit 680d6c9416)
2024-11-11 15:31:30 +00:00
milanmajchrak
d586a8450d Updated cs localization for subcommunities and subcollections
(cherry picked from commit 9badd4a4b6)
2024-11-11 15:31:30 +00:00
milanmajchrak
33bc8ba1a3 Fixed messages following the PR from the UFAL - f18d45ce23
(cherry picked from commit 5e5c627b8b)
2024-11-11 15:31:30 +00:00
milanmajchrak
865268e820 Updated cs messages following review requirements
(cherry picked from commit 813d644b32)
2024-11-11 15:31:30 +00:00
milanmajchrak
e5ea435cbe Fixed linting error.
(cherry picked from commit 7e864d27b4)
2024-11-11 15:31:30 +00:00
milanmajchrak
6b32d04aec Updated some messages following the lindat v5 and clarin-dspace v7 instance.
(cherry picked from commit b10563ea53)
2024-11-11 15:31:30 +00:00
dependabot[bot]
06783364c4 Bump express-static-gzip from 2.1.8 to 2.2.0
Bumps [express-static-gzip](https://github.com/tkoenig89/express-static-gzip) from 2.1.8 to 2.2.0.
- [Release notes](https://github.com/tkoenig89/express-static-gzip/releases)
- [Commits](https://github.com/tkoenig89/express-static-gzip/compare/v2.1.8...v2.2.0)

---
updated-dependencies:
- dependency-name: express-static-gzip
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:15:03 +00:00
Tim Donohue
a812e6ae27 Merge pull request #3594 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-8323b2791b
Bump sass from 1.80.4 to 1.80.6 in the sass group
2024-11-08 16:05:14 -06:00
Tim Donohue
841caec3e6 Merge pull request #3627 from tdonohue/port_3328_to_7x
[Port dspace-7_x] Klaro Accessibility cookie settings
2024-11-08 16:01:49 -06:00
Tim Donohue
9715eaba36 Merge pull request #3626 from DSpace/backport-3625-to-dspace-7_x
[Port dspace-7_x] Fix Klaro translations by forcing Klaro to use a zy language code that DSpace will translate
2024-11-08 16:01:40 -06:00
dependabot[bot]
bc50efec5e Bump core-js from 3.38.1 to 3.39.0
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.38.1 to 3.39.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.39.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-08 20:35:42 +00:00
Tim Donohue
25fd1a9d76 Merge pull request #3595 from DSpace/dependabot/npm_and_yarn/dspace-7_x/compression-1.7.5
Bump compression from 1.7.4 to 1.7.5
2024-11-08 14:33:17 -06:00
andreaNeki
64628f7e0d DSpace#2668 - Adding and changing classes in global scss to make cookie settings more accessible 2024-11-08 14:21:54 -06:00
Tim Donohue
4353c57cd0 Fix Klaro translations by forcing Klaro to use a 'zy' language key which DSpace will translate
(cherry picked from commit 6076423907)
2024-11-08 20:13:18 +00:00
Tim Donohue
ce010725ac Merge pull request #3596 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.13
Bump @types/lodash from 4.17.12 to 4.17.13
2024-11-08 10:56:45 -06:00
Tim Donohue
7b4d5f9aad Merge pull request #3621 from DSpace/backport-3619-to-dspace-7_x
[Port dspace-7_x] BitstreamAuthorizationsComponent: update selector and comment to correctly describe component's purpose
2024-11-07 14:53:05 -06:00
Sascha Szott
9f879d3850 fix invalid selector
(cherry picked from commit 752951ce3b)
2024-11-07 20:12:29 +00:00
Sascha Szott
87f5b50201 update comment to correctly describe component's purpose
(cherry picked from commit 33dddc697f)
2024-11-07 20:12:29 +00:00
Andreas Awouters
bb7f0cd3a5 119602: Improve profile page link accessibility 2024-11-07 10:18:11 +01:00
Andreas Awouters
3c92acb770 Merge branch 'accessibility-settings-7.6' into accessibility-settings-7_x 2024-11-06 10:59:32 +01:00
Andreas Awouters
04515591e2 119602: Add link to AccessibilitySettings on profile page 2024-11-06 10:53:41 +01:00
Andreas Awouters
37455a8b6c 119602: Make AccessibilitySettings cookie expiration configurable 2024-11-06 10:53:41 +01:00
Andreas Awouters
82fd9539b7 119602: Add AccessibilitySettingsComponent tests 2024-11-06 10:53:41 +01:00
Andreas Awouters
52eabec70d 119602: Add AccessibilitySettingsService tests 2024-11-06 10:53:41 +01:00
Andreas Awouters
cad086c945 119602: Add AccessibilitySettingsService stub & fix live-region test 2024-11-06 10:53:41 +01:00
Andreas Awouters
6a49df59af 119602: Integrate accessibility settings into notifications-board 2024-11-06 10:53:41 +01:00
Andreas Awouters
d224a2c47d 119602: Integrate accessibility settings into live-region 2024-11-06 09:58:19 +01:00
Andreas Awouters
b72ce73931 119602: Add Accessibility Settings page 2024-11-06 09:58:19 +01:00
Andreas Awouters
8f708d0e28 119602: Add AccessibilitySettingsService 2024-11-06 09:58:19 +01:00
Tim Donohue
38c7988274 Merge pull request #3609 from DSpace/backport-3590-to-dspace-7_x
[Port dspace-7_x] Complete tag translations in french for ORCID and Researcher Profile
2024-11-04 15:15:41 -06:00
Pierre Lasou
9c3363d465 Correction of 2 lint errors due to spacing.
(cherry picked from commit 23dd7903ba)
2024-11-04 20:22:48 +00:00
Pierre Lasou
33262795ba Correct small alignment errors
(cherry picked from commit fde2db85e7)
2024-11-04 20:22:48 +00:00
Pierre Lasou
2aaa32ae5f Complete tag translation in french for ORCID
Contains all french translations for ORCID and Researcher Profile.

(cherry picked from commit ac720033dc)
2024-11-04 20:22:48 +00:00
dependabot[bot]
1b77530a31 Bump @types/lodash from 4.17.12 to 4.17.13
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.12 to 4.17.13.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 02:47:05 +00:00
dependabot[bot]
2eb120909b Bump compression from 1.7.4 to 1.7.5
Bumps [compression](https://github.com/expressjs/compression) from 1.7.4 to 1.7.5.
- [Release notes](https://github.com/expressjs/compression/releases)
- [Changelog](https://github.com/expressjs/compression/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/compression/compare/1.7.4...1.7.5)

---
updated-dependencies:
- dependency-name: compression
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 02:46:50 +00:00
dependabot[bot]
26f4d1d329 Bump sass from 1.80.4 to 1.80.6 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.80.4 to 1.80.6
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.80.4...1.80.6)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 02:46:18 +00:00
Tim Donohue
9d4eeb9c9f Merge pull request #3592 from DSpace/backport-3272-to-dspace-7_x
[Port dspace-7_x] Improving accessibility on the new user registration page
2024-11-01 12:17:11 -05:00
andreaNeki
1011468273 Adjusting spaces in ts
(cherry picked from commit 009da08177)
2024-11-01 14:37:49 +00:00
andreaNeki
1fad3cffc7 Simplifying the implementation of dynamic aria-describedby
(cherry picked from commit fa6e85d6db)
2024-11-01 14:37:49 +00:00
andreaNeki
c330e83095 Resolving a wrongly declared variable error
(cherry picked from commit 7b72a5f0c2)
2024-11-01 14:37:49 +00:00
andreaNeki
3b3fa4f643 Dynamic aria-describedby attribute
(cherry picked from commit e629d9edf0)
2024-11-01 14:37:49 +00:00
andreaNeki
a6b45f777c Code refactoring - Accessibility on the new user registration and forgotten password forms
(cherry picked from commit f00eae6760)
2024-11-01 14:37:49 +00:00
andreaNeki
585bbec5d5 Improving accessibility on the new user registration page
(cherry picked from commit 0eb2d5ce58)
2024-11-01 14:37:49 +00:00
Alexandre Vryghem
59e5f71a73 117287: Fixed group form not working correctly anymore when switching between different groups
Also fixed edit ePerson not showing the group names
2024-10-29 18:21:34 +01:00
Tim Donohue
0a005c2d95 Merge pull request #3579 from DSpace-Labs/dependabot/npm_and_yarn/dompurify-2.5.7
Bump dompurify from 2.4.5 to 2.5.7
2024-10-25 17:06:40 -05:00
Tim Donohue
dda9c6ec09 Merge pull request #3580 from DSpace-Labs/dependabot/npm_and_yarn/tough-cookie-4.1.4
Bump tough-cookie from 4.1.2 to 4.1.4
2024-10-25 17:06:04 -05:00
Tim Donohue
5b8cc3c9da Merge pull request #3577 from DSpace/dependabot/npm_and_yarn/dspace-7_x/testing-bd64cd6aac
Bump the testing group across 1 directory with 2 updates
2024-10-25 16:26:47 -05:00
dependabot[bot]
45fb5aa611 Bump dompurify from 2.4.5 to 2.5.7
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.4.5 to 2.5.7.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.4.5...2.5.7)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-25 21:00:31 +00:00
dependabot[bot]
6f360a6a2d Bump the testing group across 1 directory with 2 updates
Bumps the testing group with 2 updates in the / directory: [axe-core](https://github.com/dequelabs/axe-core) and [cypress](https://github.com/cypress-io/cypress).


Updates `axe-core` from 4.7.2 to 4.10.2
- [Release notes](https://github.com/dequelabs/axe-core/releases)
- [Changelog](https://github.com/dequelabs/axe-core/blob/v4.10.2/CHANGELOG.md)
- [Commits](https://github.com/dequelabs/axe-core/compare/v4.7.2...v4.10.2)

Updates `cypress` from 13.15.0 to 13.15.1
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/cypress-io/cypress/compare/v13.15.0...v13.15.1)

---
updated-dependencies:
- dependency-name: axe-core
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: testing
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: testing
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-25 20:05:40 +00:00
dependabot[bot]
4a394a2a38 Bump tough-cookie from 4.1.2 to 4.1.4
Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 4.1.2 to 4.1.4.
- [Release notes](https://github.com/salesforce/tough-cookie/releases)
- [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/salesforce/tough-cookie/compare/v4.1.2...v4.1.4)

---
updated-dependencies:
- dependency-name: tough-cookie
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-25 20:04:27 +00:00
Tim Donohue
da9e856369 Merge pull request #3574 from tdonohue/remove_unused_deps_7x
[Port dspace-7_x] Remove unused dependencies (& additional Mirador dependency cleanup)
2024-10-25 15:02:00 -05:00
Tim Donohue
eedaa2c120 Move ng-mocks to dev dependencies 2024-10-25 14:07:34 -05:00
Tim Donohue
d4e6aa8660 Move @material-ui depedencies & other mirador dependencies to dev dependencies. Only needed to avoid yarn install warnings 2024-10-25 14:07:34 -05:00
Tim Donohue
4d365936f2 Remove unused dependencies listed in "resolutions" 2024-10-25 14:07:34 -05:00
Tim Donohue
6655dec1ec Remove "analyze" command and webpack-bundle-analyzer dev dependency 2024-10-25 14:07:34 -05:00
Tim Donohue
99d421caec Remove unused rxjs-spy dev dependency 2024-10-25 14:07:34 -05:00
Tim Donohue
8d33d52174 Move @types/grecaptcha to dev dependencies 2024-10-25 14:01:27 -05:00
Tim Donohue
6a7c19ae4b Merge pull request #3565 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.26.0
Bump @babel/runtime from 7.25.9 to 7.26.0
2024-10-25 13:59:38 -05:00
Tim Donohue
fc9eb1157b Merge pull request #3561 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-bcfd08c0da
Bump sass from 1.80.3 to 1.80.4 in the sass group
2024-10-25 13:50:19 -05:00
dependabot[bot]
c83b6ff036 Bump @babel/runtime from 7.25.9 to 7.26.0
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.25.9 to 7.26.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.0/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-25 13:34:55 +00:00
dependabot[bot]
e93e66d3e4 Bump sass from 1.80.3 to 1.80.4 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.80.3 to 1.80.4
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.80.3...1.80.4)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-25 13:34:03 +00:00
kshepherd
ef11340280 Merge pull request #3554 from DSpace/backport-3524-to-dspace-7_x
[Port dspace-7_x] Aligning the browse button
2024-10-24 15:28:14 +02:00
andreaNeki
d4bb79ca18 Issue 3426 - Aligning the browse button
(cherry picked from commit ddafda33b8)
2024-10-24 11:45:55 +00:00
Alan Orth
40e805f90f Merge pull request #3552 from tdonohue/update_http-proxy-middleware_7x 2024-10-24 08:44:25 +03:00
Alan Orth
a719a2337a Merge pull request #3549 from tdonohue/remove_unused_postcss_deps_7x 2024-10-24 08:41:56 +03:00
Tim Donohue
0ed8c05e1c Bump http-proxy-middleware from 1.0.5 to 2.0.7 2024-10-23 15:05:01 -05:00
Tim Donohue
3deef34f5b Merge pull request #3545 from DSpace/backport-3481-to-dspace-7_x
[Port dspace-7_x] Fix code scanning alert no. 6: Incomplete string escaping or encoding
2024-10-23 14:33:08 -05:00
Tim Donohue
425078dc4e Remove unused postcss-responsive-type 2024-10-23 14:13:33 -05:00
Tim Donohue
5c877f56e9 Remove unused/unmaintained postcss-apply 2024-10-23 14:11:53 -05:00
Tim Donohue
9486ab5fa1 Fix code scanning alert no. 6: Incomplete string escaping or encoding
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
(cherry picked from commit 372444c50a)
2024-10-23 17:25:14 +00:00
Tim Donohue
7c6ecf8e9e Merge pull request #3530 from DSpace/dependabot/npm_and_yarn/dspace-7_x/reflect-metadata-0.2.2
Bump reflect-metadata from 0.1.13 to 0.2.2
2024-10-23 11:37:24 -05:00
Tim Donohue
ee36bab60b Merge pull request #3531 from DSpace/dependabot/npm_and_yarn/dspace-7_x/babel/runtime-7.25.9
Bump @babel/runtime from 7.21.0 to 7.25.9
2024-10-23 10:12:06 -05:00
Andreas Awouters
1a816228e8 118223: Add 'loading' overlay while bitstream is moving 2024-10-23 13:59:23 +02:00
Alan Orth
ccf6f36ade Merge pull request #3526 from DSpace/dependabot/npm_and_yarn/dspace-7_x/angulartics2-12.2.1 2024-10-23 09:39:21 +03:00
dependabot[bot]
5cb22bb1d0 Bump reflect-metadata from 0.1.13 to 0.2.2
Bumps [reflect-metadata](https://github.com/rbuckton/reflect-metadata) from 0.1.13 to 0.2.2.
- [Release notes](https://github.com/rbuckton/reflect-metadata/releases)
- [Changelog](https://github.com/rbuckton/reflect-metadata/blob/main/tsconfig-release.json)
- [Commits](https://github.com/rbuckton/reflect-metadata/commits)

---
updated-dependencies:
- dependency-name: reflect-metadata
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 21:58:01 +00:00
Tim Donohue
b237c7f5cb Merge pull request #3525 from DSpace/dependabot/npm_and_yarn/dspace-7_x/multi-c55d84953a
Bump sanitize-html and @types/sanitize-html
2024-10-22 16:56:11 -05:00
Tim Donohue
30c3e3db0c Merge pull request #3532 from DSpace/dependabot/npm_and_yarn/dspace-7_x/zone.js-0.13.3
Bump zone.js from 0.11.8 to 0.13.3
2024-10-22 16:55:24 -05:00
Tim Donohue
39cdd1692a Merge pull request #3528 from DSpace/dependabot/npm_and_yarn/dspace-7_x/webpack-dev-server-4.15.2
Bump webpack-dev-server from 4.13.3 to 4.15.2
2024-10-22 16:51:38 -05:00
dependabot[bot]
603e46283f Bump angulartics2 from 12.2.0 to 12.2.1
Bumps [angulartics2](https://github.com/angulartics/angulartics2) from 12.2.0 to 12.2.1.
- [Release notes](https://github.com/angulartics/angulartics2/releases)
- [Commits](https://github.com/angulartics/angulartics2/compare/v12.2.0...v12.2.1)

---
updated-dependencies:
- dependency-name: angulartics2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 19:31:16 +00:00
Tim Donohue
c17adef242 Merge pull request #3523 from DSpace/dependabot/npm_and_yarn/dspace-7_x/axios-1.7.7
Bump axios from 1.7.5 to 1.7.7
2024-10-22 14:29:41 -05:00
Tim Donohue
bacd484832 Merge pull request #3515 from DSpace/dependabot/npm_and_yarn/dspace-7_x/ng-mocks-14.13.1
Bump ng-mocks from 14.10.0 to 14.13.1
2024-10-22 14:21:04 -05:00
dependabot[bot]
7eb0a47fca Bump zone.js from 0.11.8 to 0.13.3
Bumps [zone.js](https://github.com/angular/angular/tree/HEAD/packages/zone.js) from 0.11.8 to 0.13.3.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/packages/zone.js/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/zone.js-0.13.3/packages/zone.js)

---
updated-dependencies:
- dependency-name: zone.js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 19:20:58 +00:00
dependabot[bot]
cfa6d50583 Bump @babel/runtime from 7.21.0 to 7.25.9
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.21.0 to 7.25.9.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.25.9/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 19:20:30 +00:00
dependabot[bot]
47db669191 Bump webpack-dev-server from 4.13.3 to 4.15.2
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 4.13.3 to 4.15.2.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/v4.15.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v4.13.3...v4.15.2)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 19:19:40 +00:00
dependabot[bot]
ab60ad2072 Bump sanitize-html and @types/sanitize-html
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) and [@types/sanitize-html](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/sanitize-html). These dependencies needed to be updated together.

Updates `sanitize-html` from 2.12.1 to 2.13.1
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.12.1...2.13.1)

Updates `@types/sanitize-html` from 2.9.0 to 2.13.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/sanitize-html)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/sanitize-html"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 19:18:46 +00:00
Tim Donohue
081c573653 Merge pull request #3521 from DSpace/dependabot/npm_and_yarn/dspace-7_x/date-fns-2.30.0
Bump date-fns from 2.29.3 to 2.30.0
2024-10-22 13:48:32 -05:00
Tim Donohue
e22ed77527 Merge pull request #3520 from DSpace/dependabot/npm_and_yarn/dspace-7_x/webpack-bundle-analyzer-4.10.2
Bump webpack-bundle-analyzer from 4.8.0 to 4.10.2
2024-10-22 13:31:32 -05:00
Tim Donohue
4eca7c062c Merge pull request #3514 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sortablejs-1.15.3
Bump sortablejs from 1.15.0 to 1.15.3
2024-10-22 13:30:29 -05:00
Tim Donohue
bef3d37802 Merge pull request #3517 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/express-4.17.21
Bump @types/express from 4.17.17 to 4.17.21
2024-10-22 13:18:47 -05:00
Tim Donohue
2ab52dad8e Merge pull request #3522 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/deep-freeze-0.1.5
Bump @types/deep-freeze from 0.1.2 to 0.1.5
2024-10-22 13:17:41 -05:00
Tim Donohue
6bd66910a9 Merge pull request #3518 from DSpace/dependabot/npm_and_yarn/dspace-7_x/fortawesome/fontawesome-free-6.6.0
Bump @fortawesome/fontawesome-free from 6.4.0 to 6.6.0
2024-10-22 13:16:03 -05:00
dependabot[bot]
cfecf0ff62 Bump ng-mocks from 14.10.0 to 14.13.1
Bumps [ng-mocks](https://github.com/help-me-mom/ng-mocks) from 14.10.0 to 14.13.1.
- [Release notes](https://github.com/help-me-mom/ng-mocks/releases)
- [Changelog](https://github.com/help-me-mom/ng-mocks/blob/master/CHANGELOG.md)
- [Commits](https://github.com/help-me-mom/ng-mocks/compare/v14.10.0...v14.13.1)

---
updated-dependencies:
- dependency-name: ng-mocks
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 17:16:48 +00:00
Tim Donohue
1bea5f8e6c Merge pull request #3519 from DSpace/dependabot/npm_and_yarn/dspace-7_x/mirador-share-plugin-0.16.0
Bump mirador-share-plugin from 0.11.0 to 0.16.0
2024-10-22 12:14:27 -05:00
dependabot[bot]
7ee4fd5b06 Bump axios from 1.7.5 to 1.7.7
Bumps [axios](https://github.com/axios/axios) from 1.7.5 to 1.7.7.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.7.5...v1.7.7)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:24:48 +00:00
dependabot[bot]
b90f8e1b49 Bump @types/deep-freeze from 0.1.2 to 0.1.5
Bumps [@types/deep-freeze](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/deep-freeze) from 0.1.2 to 0.1.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/deep-freeze)

---
updated-dependencies:
- dependency-name: "@types/deep-freeze"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:24:35 +00:00
dependabot[bot]
2a92215d82 Bump date-fns from 2.29.3 to 2.30.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.29.3 to 2.30.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/main/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.29.3...v2.30.0)

---
updated-dependencies:
- dependency-name: date-fns
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:24:25 +00:00
dependabot[bot]
d03b3c3a48 Bump webpack-bundle-analyzer from 4.8.0 to 4.10.2
Bumps [webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) from 4.8.0 to 4.10.2.
- [Changelog](https://github.com/webpack-contrib/webpack-bundle-analyzer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/webpack-bundle-analyzer/compare/v4.8.0...v4.10.2)

---
updated-dependencies:
- dependency-name: webpack-bundle-analyzer
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:24:02 +00:00
dependabot[bot]
5ac126250e Bump mirador-share-plugin from 0.11.0 to 0.16.0
Bumps [mirador-share-plugin]() from 0.11.0 to 0.16.0.

---
updated-dependencies:
- dependency-name: mirador-share-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:23:38 +00:00
dependabot[bot]
a1919a7a1f Bump @fortawesome/fontawesome-free from 6.4.0 to 6.6.0
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.6.0.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.6.0)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-free"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:23:20 +00:00
dependabot[bot]
dfae913dea Bump @types/express from 4.17.17 to 4.17.21
Bumps [@types/express](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express) from 4.17.17 to 4.17.21.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/express)

---
updated-dependencies:
- dependency-name: "@types/express"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:22:59 +00:00
dependabot[bot]
627d8097ac Bump sortablejs from 1.15.0 to 1.15.3
Bumps [sortablejs](https://github.com/SortableJS/Sortable) from 1.15.0 to 1.15.3.
- [Release notes](https://github.com/SortableJS/Sortable/releases)
- [Commits](https://github.com/SortableJS/Sortable/compare/1.15.0...1.15.3)

---
updated-dependencies:
- dependency-name: sortablejs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-22 16:21:46 +00:00
Alan Orth
8dc777fc46 Merge pull request #3510 from tdonohue/remove_unused_deps_7x 2024-10-22 11:36:11 +03:00
Tim Donohue
e7430b9c1a Remove unused webfontloader 2024-10-21 17:01:49 -05:00
Tim Donohue
4543285a9d Merge pull request #3499 from DSpace/dependabot/npm_and_yarn/dspace-7_x/markdown-it-13.0.2
Bump markdown-it from 13.0.1 to 13.0.2
2024-10-21 16:08:59 -05:00
Tim Donohue
86ea2dc5cb Merge pull request #3498 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-25e7b4912b
Bump sass from 1.80.2 to 1.80.3 in the sass group
2024-10-21 15:53:18 -05:00
Tim Donohue
43d4122bc5 Merge pull request #3485 from DSpace/dependabot/npm_and_yarn/dspace-7_x/eslint-dda39ca691
Bump the eslint group with 5 updates
2024-10-21 15:01:17 -05:00
Tim Donohue
e87da70191 Merge pull request #3492 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/ejs-3.1.5
Bump @types/ejs from 3.1.2 to 3.1.5
2024-10-21 14:51:41 -05:00
Tim Donohue
4f24f2d12f Merge pull request #3495 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/grecaptcha-3.0.9
Bump @types/grecaptcha from 3.0.4 to 3.0.9
2024-10-21 14:50:33 -05:00
Tim Donohue
44fdc49e26 Merge pull request #3496 from DSpace/dependabot/npm_and_yarn/dspace-7_x/postcss-8.4.47
Bump postcss from 8.4.38 to 8.4.47
2024-10-21 14:45:04 -05:00
dependabot[bot]
610bd32869 Bump the eslint group with 5 updates
Bumps the eslint group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) | `5.59.1` | `5.62.0` |
| [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) | `5.59.1` | `5.62.0` |
| [eslint-plugin-deprecation](https://github.com/gund/eslint-plugin-deprecation) | `1.4.1` | `1.5.0` |
| [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) | `2.27.5` | `2.31.0` |
| [eslint-plugin-jsonc](https://github.com/ota-meshi/eslint-plugin-jsonc) | `2.6.0` | `2.16.0` |


Updates `@typescript-eslint/eslint-plugin` from 5.59.1 to 5.62.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.62.0/packages/eslint-plugin)

Updates `@typescript-eslint/parser` from 5.59.1 to 5.62.0
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.62.0/packages/parser)

Updates `eslint-plugin-deprecation` from 1.4.1 to 1.5.0
- [Release notes](https://github.com/gund/eslint-plugin-deprecation/releases)
- [Changelog](https://github.com/gund/eslint-plugin-deprecation/blob/master/CHANGELOG.md)
- [Commits](https://github.com/gund/eslint-plugin-deprecation/compare/v1.4.1...v1.5.0)

Updates `eslint-plugin-import` from 2.27.5 to 2.31.0
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.27.5...v2.31.0)

Updates `eslint-plugin-jsonc` from 2.6.0 to 2.16.0
- [Release notes](https://github.com/ota-meshi/eslint-plugin-jsonc/releases)
- [Changelog](https://github.com/ota-meshi/eslint-plugin-jsonc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ota-meshi/eslint-plugin-jsonc/compare/v2.6.0...v2.16.0)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-deprecation
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
- dependency-name: eslint-plugin-jsonc
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: eslint
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 19:22:59 +00:00
dependabot[bot]
059da40c64 Bump markdown-it from 13.0.1 to 13.0.2
Bumps [markdown-it](https://github.com/markdown-it/markdown-it) from 13.0.1 to 13.0.2.
- [Changelog](https://github.com/markdown-it/markdown-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markdown-it/markdown-it/compare/13.0.1...13.0.2)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 19:18:12 +00:00
dependabot[bot]
6f7c64e8ca Bump sass from 1.80.2 to 1.80.3 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.80.2 to 1.80.3
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.80.2...1.80.3)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 19:18:08 +00:00
Tim Donohue
1b99ffbf58 Merge pull request #3435 from DSpace/dependabot/npm_and_yarn/dspace-7_x/klaro-0.7.21
Bump klaro from 0.7.18 to 0.7.21
2024-10-21 14:16:06 -05:00
Tim Donohue
36195a9ed1 Merge pull request #3500 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/lodash-4.17.12
Bump @types/lodash from 4.14.194 to 4.17.12
2024-10-21 14:14:45 -05:00
Tim Donohue
d784a28ddb Merge pull request #3489 from DSpace/dependabot/npm_and_yarn/dspace-7_x/pem-1.14.8
Bump pem from 1.14.7 to 1.14.8
2024-10-21 14:11:47 -05:00
dependabot[bot]
e1619e6a6b Bump @types/lodash from 4.14.194 to 4.17.12
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.14.194 to 4.17.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 02:31:33 +00:00
dependabot[bot]
e3be0cd794 Bump postcss from 8.4.38 to 8.4.47
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.38 to 8.4.47.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.38...8.4.47)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 21:54:22 +00:00
dependabot[bot]
ac3bccc67d Bump klaro from 0.7.18 to 0.7.21
Bumps [klaro](https://github.com/kiprotect/klaro) from 0.7.18 to 0.7.21.
- [Changelog](https://github.com/klaro-org/klaro-js/blob/master/releases.json)
- [Commits](https://github.com/kiprotect/klaro/compare/v0.7.18...v0.7.21)

---
updated-dependencies:
- dependency-name: klaro
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 21:53:59 +00:00
Tim Donohue
b2d46190cb Merge pull request #3488 from DSpace/dependabot/npm_and_yarn/dspace-7_x/sass-7fd8873515
Bump sass from 1.62.0 to 1.80.2 in the sass group
2024-10-18 16:52:20 -05:00
Tim Donohue
532da9d21f Merge pull request #3440 from DSpace/dependabot/npm_and_yarn/dspace-7_x/karma-6.4.4
Bump karma from 6.4.2 to 6.4.4
2024-10-18 15:53:22 -05:00
dependabot[bot]
dc73f85458 Bump @types/grecaptcha from 3.0.4 to 3.0.9
Bumps [@types/grecaptcha](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/grecaptcha) from 3.0.4 to 3.0.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/grecaptcha)

---
updated-dependencies:
- dependency-name: "@types/grecaptcha"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 20:19:21 +00:00
dependabot[bot]
ac1adefeec Bump @types/ejs from 3.1.2 to 3.1.5
Bumps [@types/ejs](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/ejs) from 3.1.2 to 3.1.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/ejs)

---
updated-dependencies:
- dependency-name: "@types/ejs"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 20:19:00 +00:00
dependabot[bot]
6eb407ff3b Bump pem from 1.14.7 to 1.14.8
Bumps [pem](https://github.com/Dexus/pem) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/Dexus/pem/releases)
- [Changelog](https://github.com/Dexus/pem/blob/master/HISTORY.md)
- [Commits](https://github.com/Dexus/pem/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: pem
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 20:18:37 +00:00
dependabot[bot]
2c152e632b Bump sass from 1.62.0 to 1.80.2 in the sass group
Bumps the sass group with 1 update: [sass](https://github.com/sass/dart-sass).


Updates `sass` from 1.62.0 to 1.80.2
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.62.0...1.80.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: sass
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 20:18:26 +00:00
dependabot[bot]
047b4629bf Bump karma from 6.4.2 to 6.4.4
Bumps [karma](https://github.com/karma-runner/karma) from 6.4.2 to 6.4.4.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v6.4.2...v6.4.4)

---
updated-dependencies:
- dependency-name: karma
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-18 19:35:07 +00:00
Tim Donohue
1244f23522 Merge pull request #3471 from tdonohue/flakey_item_page_tests
[dspace-7_x] Fix flakey Item page accessibility tests by waiting for pages to fuly load
2024-10-18 14:33:12 -05:00
Tim Donohue
5275f8d13f Fix flakey Item page accessibility tests by waiting for pages to fully load. 2024-10-18 14:01:19 -05:00
Tim Donohue
c3eaf8bd6f Merge pull request #3442 from DSpace/dependabot/npm_and_yarn/dspace-7_x/nouislider-15.8.1
Bump nouislider from 15.7.1 to 15.8.1
2024-10-18 12:25:34 -05:00
Tim Donohue
53c6e89486 Merge pull request #3443 from DSpace/dependabot/npm_and_yarn/dspace-7_x/core-js-3.38.1
Bump core-js from 3.30.1 to 3.38.1
2024-10-18 12:14:46 -05:00
Tim Donohue
1bfd68bd34 Merge pull request #3444 from DSpace/dependabot/npm_and_yarn/dspace-7_x/types/node-14.18.63
Bump @types/node from 14.18.42 to 14.18.63
2024-10-18 11:56:38 -05:00
Tim Donohue
9410114be3 Merge pull request #3432 from DSpace/dependabot/npm_and_yarn/dspace-7_x/angular-99dae2292d
Bump the angular group with 15 updates
2024-10-18 11:53:53 -05:00
Tim Donohue
5a3b0c6d78 Merge pull request #3446 from DSpace/dependabot/npm_and_yarn/dspace-7_x/express-static-gzip-2.1.8
Bump express-static-gzip from 2.1.7 to 2.1.8
2024-10-17 16:51:22 -05:00
dependabot[bot]
3459bf68cb Bump the angular group with 15 updates
Bumps the angular group with 15 updates:

| Package | From | To |
| --- | --- | --- |
| [@angular/animations](https://github.com/angular/angular/tree/HEAD/packages/animations) | `15.2.8` | `15.2.10` |
| [@angular/cdk](https://github.com/angular/components) | `15.2.8` | `15.2.9` |
| [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) | `15.2.8` | `15.2.10` |
| [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) | `15.2.8` | `15.2.10` |
| [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) | `15.2.8` | `15.2.10` |
| [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) | `15.2.8` | `15.2.10` |
| [@angular/localize](https://github.com/angular/angular) | `15.2.8` | `15.2.10` |
| [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) | `15.2.8` | `15.2.10` |
| [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) | `15.2.8` | `15.2.10` |
| [@angular/platform-server](https://github.com/angular/angular/tree/HEAD/packages/platform-server) | `15.2.8` | `15.2.10` |
| [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) | `15.2.8` | `15.2.10` |
| [@angular-devkit/build-angular](https://github.com/angular/angular-cli) | `15.2.6` | `15.2.11` |
| [@angular/cli](https://github.com/angular/angular-cli) | `16.2.12` | `16.2.16` |
| [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) | `15.2.8` | `15.2.10` |
| [@angular/language-service](https://github.com/angular/angular/tree/HEAD/packages/language-service) | `15.2.8` | `15.2.10` |


Updates `@angular/animations` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/animations)

Updates `@angular/cdk` from 15.2.8 to 15.2.9
- [Release notes](https://github.com/angular/components/releases)
- [Changelog](https://github.com/angular/components/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/components/compare/15.2.8...15.2.9)

Updates `@angular/common` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/common)

Updates `@angular/compiler` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/compiler)

Updates `@angular/core` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/core)

Updates `@angular/forms` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/forms)

Updates `@angular/localize` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/compare/15.2.8...15.2.10)

Updates `@angular/platform-browser` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/platform-browser)

Updates `@angular/platform-browser-dynamic` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/platform-browser-dynamic)

Updates `@angular/platform-server` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/platform-server)

Updates `@angular/router` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/router)

Updates `@angular-devkit/build-angular` from 15.2.6 to 15.2.11
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/15.2.6...15.2.11)

Updates `@angular/cli` from 16.2.12 to 16.2.16
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/16.2.12...16.2.16)

Updates `@angular/compiler-cli` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/compiler-cli)

Updates `@angular/language-service` from 15.2.8 to 15.2.10
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/15.2.10/packages/language-service)

---
updated-dependencies:
- dependency-name: "@angular/animations"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/cdk"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/common"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/compiler"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/forms"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/localize"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/platform-browser"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/platform-browser-dynamic"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/platform-server"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/router"
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular-devkit/build-angular"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/cli"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/compiler-cli"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular
- dependency-name: "@angular/language-service"
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: angular
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-17 19:59:07 +00:00
dependabot[bot]
ab7bded221 Bump express-static-gzip from 2.1.7 to 2.1.8
Bumps [express-static-gzip](https://github.com/tkoenig89/express-static-gzip) from 2.1.7 to 2.1.8.
- [Release notes](https://github.com/tkoenig89/express-static-gzip/releases)
- [Commits](https://github.com/tkoenig89/express-static-gzip/compare/v2.1.7...v2.1.8)

---
updated-dependencies:
- dependency-name: express-static-gzip
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-17 19:56:44 +00:00
Tim Donohue
14a6894540 Merge pull request #3468 from tdonohue/port_3461_to_7x
[Port dspace-7_x] Add basic e2e testing for i18n
2024-10-17 14:55:04 -05:00
Tim Donohue
946a3afde8 Add basic e2e testing for i18n 2024-10-17 14:25:59 -05:00
Andreas Awouters
b0900d5aa9 Merge branch 'item-edit-bitstreams-table-7.6' into item-edit-bitstreams-table-7_x
# Conflicts:
#	src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts
#	src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component.html
#	src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component.html
#	src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.html
#	src/app/item-page/edit-item-page/item-bitstreams/item-edit-bitstream/item-edit-bitstream.component.spec.ts
2024-10-17 09:11:47 +02:00
Andreas Awouters
6644714bb7 119176: clear viewContainerRef on destroy 2024-10-17 08:26:39 +02:00
Andreas Awouters
93f9341387 119176: Add aria-labels to buttons 2024-10-17 08:26:39 +02:00
Andreas Awouters
5bb6f6d34c 119176: Announce notification content in live region 2024-10-17 08:26:39 +02:00
Andreas Awouters
8d93f22767 119176: Make table horizontally scrollable
For most screen sizes, the ResponsiveTableSizes is enough to resize the
table columns. On very small screens, or when zoomed in a lot, even the
smallest column sizes are too big. To make it possible to view the
rest of the content even in these situations, the ability to scroll
horizontally is added.
2024-10-17 08:26:39 +02:00
Andreas Awouters
2b1b9d83d7 118223: Include selection action with selection 2024-10-17 08:26:39 +02:00
Andreas Awouters
7fb4755aba 118223: Add item-edit-bitstream-bundle component tests 2024-10-17 08:26:39 +02:00
Andreas Awouters
e8379db987 118223: Add item-bitstreams component tests 2024-10-17 08:26:39 +02:00
Andreas Awouters
0bdb5742e0 118223: Remove unused item-edit-bitstream component 2024-10-17 08:26:39 +02:00
Andreas Awouters
1dcc5d1ec5 118223: Add ItemBitstreams service tests 2024-10-17 08:26:39 +02:00
Andreas Awouters
b158c5c2a2 118223: Move drag tooltip to center of pagination numbers 2024-10-17 08:26:39 +02:00
Andreas Awouters
0920a21876 118223: Stop sending success notificiations on every move 2024-10-17 08:26:39 +02:00
Andreas Awouters
2e1b1489b6 118223: Stop space from scrolling down page 2024-10-17 08:26:39 +02:00
Andreas Awouters
181ea6d7c9 118223: Implement bitstream reordering with keyboard 2024-10-17 08:26:39 +02:00
Andreas Awouters
1f909dc6ea 118223: Add instructive alert to item-bitstreams edit page 2024-10-17 08:26:39 +02:00
Andreas Awouters
d674bcc390 118220: Integrate live-region component into item-edit-bitsream page 2024-10-17 08:26:39 +02:00
dependabot[bot]
e181e854cc Bump @types/node from 14.18.42 to 14.18.63
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 14.18.42 to 14.18.63.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-16 21:47:00 +00:00
dependabot[bot]
ad8dd8b648 Bump core-js from 3.30.1 to 3.38.1
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.30.1 to 3.38.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.38.1/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-16 21:45:45 +00:00
dependabot[bot]
dfe2d4580e Bump nouislider from 15.7.1 to 15.8.1
Bumps [nouislider](https://github.com/leongersen/noUiSlider) from 15.7.1 to 15.8.1.
- [Release notes](https://github.com/leongersen/noUiSlider/releases)
- [Changelog](https://github.com/leongersen/noUiSlider/blob/master/CHANGELOG.MD)
- [Commits](https://github.com/leongersen/noUiSlider/compare/15.7.1...15.8.1)

---
updated-dependencies:
- dependency-name: nouislider
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-16 21:43:58 +00:00
Tim Donohue
7f1e267b2d Merge pull request #3460 from tdonohue/fix_collection_e2e_test
[dspace-7_x] Fix Collection Page e2e test. Wait on Recent Submissions
2024-10-16 16:39:11 -05:00
Tim Donohue
8c88f7052a Wait on viewevent to trigger before checking Collection Page in e2e tests. This ensures Collection page is fully loaded because viewevent triggers upon loading. 2024-10-16 16:08:39 -05:00
Tim Donohue
f749ade52c Merge pull request #3422 from DSpace/backport-3176-to-dspace-7_x
[Port dspace-7_x] Add German translations (metadata import)
2024-10-14 17:02:02 -05:00
Sascha Szott
533da6624f add missing German translations
(cherry picked from commit 2af168bd54)
2024-10-14 22:01:05 +00:00
Tim Donohue
f7063d4eaf Merge pull request #3411 from alexandrevryghem/w2p-119207_fix-browse-startwith-options-not-loading_contribute-7_x
Fix browse by date's year dropdown being empty on DSpace 7.6.2+
2024-10-11 15:03:16 -05:00
Alexandre Vryghem
4de3c58e06 119207: Reinitialize the BrowseByComponent's objectInjector when startsWithOptions don't exist yet OnInit 2024-10-11 16:23:46 +02:00
Alexandre Vryghem
b709ee0300 118944: Embed the accessStatus link on collection, browse, recent item submissions & the item page related items & delete tab when enabled 2024-10-11 15:08:31 +02:00
Alexandre Vryghem
4af88997e8 Merge branch 'w2p-107155_Performance-re-request-embeds-7.4' into w2p-107155_Performance-re-request-embeds-7.6 2024-10-11 11:02:50 +02:00
Tim Donohue
e74dc22077 Merge pull request #3405 from 4Science/task/backport-3213-to-dspace-7_x
[Port dspace-7_x] Implement e2e accessibility tests for pages in DSpace User Interface
2024-10-10 13:20:34 -05:00
Tim Donohue
7884de94e0 Merge pull request #3409 from tdonohue/port_3407_to_7x
[Port dspace-7_x] Bump cookie, cookie-parser and socket.io
2024-10-10 13:13:51 -05:00
Tim Donohue
169ae41d49 Bump cookie, cookie-parser and socket.io 2024-10-10 11:17:17 -05:00
FrancescoMolinaro
6388613948 revert adding interceptor as not reliable on remote test 2024-10-10 18:00:35 +02:00
Tim Donohue
34a4f5b597 Merge pull request #3368 from alexandrevryghem/w2p-117287_fix-item-version-performance-issues_contribute-7_x
[Port dspace-7_x] Fixed Edit Item's Version History crashing
2024-10-10 10:46:07 -05:00
FrancescoMolinaro
7cf7749367 correct intercept to dso resolved for route 2024-10-10 17:32:46 +02:00
Tim Donohue
adcc6f564d Merge pull request #3404 from tdonohue/port_3343_to_7x
[Port dspace-7_x] Bump send, express and serve-static
2024-10-10 10:08:37 -05:00
FrancescoMolinaro
ba2570b83b Add interceptor for collection page to avoid timeout 2024-10-10 16:18:01 +02:00
FrancescoMolinaro
7ac14daf46 remove interceptors 2024-10-10 15:42:47 +02:00
FrancescoMolinaro
caed26d191 resolve differences with version 8 2024-10-10 14:32:20 +02:00
FrancescoMolinaro
5c0c559685 [CST-15592] remove interceptor for edit group 2024-10-10 12:28:48 +02:00
FrancescoMolinaro
9079a968f0 [CST-15592] add interceptor for edit group, fix landmark-unique accessibility issue in pagination component 2024-10-10 12:28:41 +02:00
FrancescoMolinaro
3df66e0257 [CST-15592] add interceptor for item edit page 2024-10-10 12:28:33 +02:00
FrancescoMolinaro
be36175bb8 [CST-15592] add interceptor to prevent sudden timeout failure 2024-10-10 12:27:48 +02:00
FrancescoMolinaro
d0265eb3f6 [CST-15592] refine health page tests 2024-10-10 12:27:41 +02:00
FrancescoMolinaro
5479cc6274 [CST-15592] change health page test target for second tab 2024-10-10 12:27:31 +02:00
FrancescoMolinaro
db891f2f16 [CST-15592] improve tests, add attributes for testing, fix wrong references 2024-10-10 12:27:22 +02:00
FrancescoMolinaro
543cc42bf3 [CST-15592] add accessibility tests for:
Admin Add New Modals
Admin Edit Modals
Admin Export Modals
Admin Workflow Page
End User Agreement
Feedback
Profile Page
System Wide Alert
2024-10-10 12:27:09 +02:00
FrancescoMolinaro
2ad9a44b99 [CST-15592] add accessibility tests for:
Admin Curation Task
Bitstream Format
Health Page
Metadata Schema
2024-10-10 12:27:02 +02:00
FrancescoMolinaro
ecd2275e1b [CST-15592] add accessibility tests for:
Admin Notifications Publication Claim
Admin Search Page
Bulk Access
Create Group
Metadata Registry
2024-10-10 12:26:54 +02:00
FrancescoMolinaro
f904c0f67d [CST-15592] add accessibility tests for:
Edit Eperson
Edit Group
Create EPerson
Epeople Registry
Groups Registry
2024-10-10 12:26:47 +02:00
FrancescoMolinaro
64855c9cf8 [CST-15592] add accessibility tests for following pages:
Metadata Import
Batch Import
Processes Overview
New Process
Quality Assurance Sources
2024-10-10 12:26:36 +02:00
Tim Donohue
9a7b242827 Bump send, express and serve-static 2024-10-09 16:55:38 -05:00
Tim Donohue
e46c801554 Merge pull request #3402 from tdonohue/port_3400_to_7x
[Port dspace-7_x] Fixed #3399 - minor typo
2024-10-09 15:55:32 -05:00
Arta Seyedian
7be3f1fada Fixed #3399 - minor typo 2024-10-09 14:01:14 -05:00
Tim Donohue
144b455eae Merge pull request #3398 from tdonohue/port_3315_to_7x
[Port dspace-7_x] Upgrade to Cypress 13.15.0
2024-10-09 13:03:19 -05:00
Tim Donohue
bd8659ac11 Test stability fixes. Ensure Item Edit tests wait on tabs to load by testing if tab is active. Fix small bug in login-modal test. 2024-10-09 12:08:11 -05:00
Tim Donohue
5636db84a8 Simplify login CSS selectors 2024-10-09 12:00:02 -05:00
Tim Donohue
5621b84284 Minor changes to login-modal.cy.ts to cleanup CSS selectors 2024-10-09 11:58:55 -05:00
Tim Donohue
35cc7a8096 Ensure Cypress still creates videos in GitHub Actions 2024-10-09 11:56:46 -05:00
Tim Donohue
a4e2c47c51 Bump cypress-axe to 1.5.0 2024-10-09 11:56:11 -05:00
Tim Donohue
7a60cd9aaf Bump to Cypress 13.15.0 2024-10-09 11:55:32 -05:00
Tim Donohue
2f94f49c06 Merge pull request #3391 from DSpace/backport-3221-to-dspace-7_x
[Port dspace-7_x] Removed unnecessary *ngVars from ThumbnailComponent
2024-10-08 16:55:35 -05:00
Alexandre Vryghem
3306d0d699 116728: Removed unnecessary *ngVars from the ThumbnailComponent
(cherry picked from commit d31e17894c)
2024-10-08 20:08:09 +00:00
Tim Donohue
bf9590c1e6 Merge pull request #3387 from DSpace/backport-3386-to-dspace-7_x
[Port dspace-7_x] Update fr.json5 to add capitalization
2024-10-04 10:18:54 -05:00
Julia
e2a84b2145 Update fr.json5 to add capitalization
(cherry picked from commit c5b395802c)
2024-10-04 15:18:06 +00:00
Tim Donohue
3e01912eb2 Merge pull request #3382 from tdonohue/port_3148_to_7x
[Port dspace-7_x] Accessibility of the status page
2024-10-02 17:07:06 -05:00
Tim Donohue
4bd6071071 Squashed commit of changes in #3148 from @Andrea-Guevara
Co-authored-by: @Andrea-Guevara
2024-10-02 17:02:12 -05:00
Yana De Pauw
876d94e124 115284: Add tests for isRepeatable 2024-10-02 10:03:53 +02:00
Andreas Awouters
a207fb51e9 118219: Remove unused paginated-drag-and-drop components 2024-10-01 10:37:39 +02:00
Andreas Awouters
8a16597b69 118219: Fix tests 2024-10-01 10:37:39 +02:00
Andreas Awouters
6a2c7d09d6 118219: Add dragging tooltip explaining how to drag to other page 2024-10-01 10:37:39 +02:00
Andreas Awouters
eadbcdbe14 118219: Store result of drag & dropping bitstream 2024-10-01 10:37:39 +02:00
Andreas Awouters
be99cc5c23 118219: Allow dragging of table rows 2024-10-01 10:37:39 +02:00
Andreas Awouters
a230eee76d 117803: Add negative top-margin to subsequent tables 2024-10-01 10:37:39 +02:00
Andreas Awouters
6a8095d456 117803: Change pagination settings styling 2024-10-01 10:37:39 +02:00
Andreas Awouters
79f3a3116e 117803: Set header border to background color 2024-10-01 10:37:39 +02:00
Andreas Awouters
8481604b1e 117803: Fix table & pagination margin 2024-10-01 10:37:39 +02:00
Andreas Awouters
cc5b841a65 117803: Only visually hide header rows 2024-10-01 10:37:39 +02:00
Andreas Awouters
d8b426d745 117803: Add ItemBitsreamsService tests 2024-10-01 10:37:39 +02:00
Andreas Awouters
3f4bf7ce0f 117803: Fix existing tests 2024-10-01 10:37:39 +02:00
Andreas Awouters
374a9ae14e 117803: Add item-bitstream service 2024-10-01 10:37:39 +02:00
Andreas Awouters
d85124c121 117803: Fix deleted bitstreams not being removed from list 2024-10-01 10:37:39 +02:00
Andreas Awouters
1773a75e98 117803: Allow changing page size of Bitstream list 2024-10-01 10:37:39 +02:00
Andreas Awouters
a11bfc80ad 117803: Hide table headers for subsequent bundle tables 2024-10-01 10:37:39 +02:00
Andreas Awouters
cf54af2c22 117803: Refactor Item Edit Bitstreams page to use HTML Table elements 2024-10-01 10:37:39 +02:00
Andrea Barbasso
a8e5b26744 Merge remote-tracking branch 'lyrasis/dspace-7_x' into task/dspace-7_x/CST-14904
# Conflicts:
#	src/app/shared/shared.module.ts
2024-10-01 09:27:53 +02:00
Tim Donohue
6c0514ab48 Merge pull request #3371 from atmire/live-region-7_x
[Port dspace-7_x] Live region
2024-09-30 16:41:06 -05:00
Andreas Awouters
bc84bc867b Merge branch 'live-region-7.6' into live-region-7_x
# Conflicts:
#	config/config.example.yml
#	src/app/shared/shared.module.ts
2024-09-30 09:09:44 +02:00
Alexandre Vryghem
98c49231b4 Merge branch 'w2p-117287_fix-item-version-performance-issues_contribute-7.6' into w2p-117287_fix-item-version-performance-issues_contribute-7_x
# Conflicts:
#	src/app/item-page/versions/item-versions.component.html
2024-09-29 00:19:11 +02:00
Andreas Awouters
751d689ff6 118220: Add additional TypeDocs 2024-09-27 10:02:26 +02:00
Tim Donohue
cf5ac335ca Merge pull request #3364 from DSpace/backport-3153-to-dspace-7_x
[Port dspace-7_x] Fix to Mobile navbar hamburger menu for base (custom) theme
2024-09-26 16:13:04 -05:00
Elvi Nemiz
fe7d2a8a7e Fix to Mobile navbar hamburger menu for base (custom) theme
https://github.com/DSpace/dspace-angular/pull/2444 only fixes the DSpace theme, not the base (and custom) theme.
(cherry picked from commit a3b6aef66a)
2024-09-26 18:22:10 +00:00
Tim Donohue
5ffd405ba6 Merge pull request #3362 from DSpace/backport-3340-to-dspace-7_x
[Port dspace-7_x] DS-3330: Updated en.json5 to fixed typo for 'occurred'
2024-09-26 12:04:02 -05:00
Julia
edc738ae39 Update en.json5 - fixed typo for occurred
(cherry picked from commit ed5ac47f88)
2024-09-26 16:57:08 +00:00
Tim Donohue
46b241eda5 Merge pull request #3354 from alanorth/update-isbot-7x
[Port dspace-7_x] updates isbot dependency to newest version
2024-09-26 11:14:38 -05:00
Pascal-Nicolas Becker
f244d388be Merge pull request #3359 from DSpace/backport-3149-to-dspace-7_x
[Port dspace-7_x] missing German translations (500 error)
2024-09-26 17:54:02 +02:00
Tim Donohue
59fd32ac68 Merge pull request #3360 from DSpace/backport-3175-to-dspace-7_x
[Port dspace-7_x] minor change: added missing periods in German translations
2024-09-26 10:52:54 -05:00
Sascha Szott
48ec0cdc34 minor change: added missing periods in German translations
(cherry picked from commit e26ab86dd3)
2024-09-26 14:45:31 +00:00
Sascha Szott
aed97c9dcc added missing German translations (500 error)
(cherry picked from commit 5f6b6ef984)
2024-09-26 14:43:28 +00:00
kshepherd
26dcb6b8b0 Merge pull request #3352 from alexandrevryghem/w2p-110615_minor-accessibility-fixes_contribute-7_x
[Port dspace-7_x] Minor accessibility fixes
2024-09-26 11:29:24 +02:00
Andreas Awouters
c1fa52ee64 118220: Store messages with ID so clears can be targeted 2024-09-25 09:50:33 +02:00
Alan Orth
29c1b51073 .github/workflows/build.yml: use Node.js v18 and v20
Node.js v16 LTS is end of life since October, 2023.

See: https://nodejs.org/en/about/previous-releases
2024-09-25 08:34:04 +03:00
Alan Orth
35946dcf7c Update isbot dependency
Note that the minimum supported Node.js version is now v18, as v16
is now end of life.
2024-09-25 08:17:03 +03:00
Alexandre Vryghem
f49bdcd8c8 Merge branch 'w2p-110615_minor-accessibibity-fixes_contribute-7.6' into w2p-110615_minor-accessibility-fixes_contribute-7_x
# Conflicts:
#	src/app/item-page/simple/related-entities/tabbed-related-entities-search/tabbed-related-entities-search.component.html
#	src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.html
#	src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html
2024-09-24 22:03:46 +02:00
Andrea Barbasso
cd51baa5f1 [CST-14904] add orcid icon with tooltip 2024-09-24 12:04:22 +02:00
Andreas Awouters
35d29c8425 118220: Add LiveRegion to RootComponent 2024-09-20 13:31:45 +02:00
Andreas Awouters
e987c35450 118220: Add liveRegionComponent & Service tests 2024-09-20 13:31:45 +02:00
Andreas Awouters
83a44ba924 118220: Add live-region service and component 2024-09-20 13:31:44 +02:00
Jens Vannerum
4a7ebeea16 117544: fix remaining bug 2024-09-16 16:10:36 +02:00
Jens Vannerum
f65d6c5775 117544: rename directive to be clear it should currently only be used for buttons 2024-09-16 14:27:37 +02:00
Jens Vannerum
685e6d83c5 117544: PR feedback
- added typedocs
- changed directive to only be present for buttons
- various other small fixes
2024-09-16 14:24:51 +02:00
Tim Donohue
593e67fe72 Merge pull request #3326 from tdonohue/port_3318_to_7x
[Port dspace-7_x] Bump Express to v4.20.0
2024-09-11 16:58:35 -05:00
Tim Donohue
f7706760cd Bump Express to v4.20.0 2024-09-11 16:30:40 -05:00
Tim Donohue
350cbea6d5 Merge pull request #3306 from tdonohue/port_3011_to_7x
[Port dspace-7_x] Fixed page and admin menu for Shibboleth auth
2024-09-05 16:37:58 -05:00
Michael Spalti
98d9f639f7 Updated browser init to update cache after external auth. 2024-09-05 16:06:42 -05:00
Alexandre Vryghem
f03ed89687 117287: Removed method calls returning observables from the metadata schema registry 2024-09-05 20:09:03 +02:00
Alexandre Vryghem
c74c178533 117287: Removed method calls returning observables from the metadata registry 2024-09-05 19:38:18 +02:00
Tim Donohue
36f07604ae Merge pull request #3302 from tdonohue/port_3284_to_7x
[Port dspace-7_x] Bump micromatch to 4.0.8
2024-09-05 08:41:02 -05:00
Alexandre Vryghem
b55686e187 117287: Removed method calls returning observables from the pagination component 2024-09-05 01:09:05 +02:00
Alexandre Vryghem
680ed3bccf 117287: Removed method calls returning observables from the Group form 2024-09-05 01:09:04 +02:00
Tim Donohue
4ee1c83073 Bump micromatch to 4.0.8 2024-09-04 17:02:50 -05:00
Tim Donohue
e73139d977 Merge pull request #3297 from DSpace/backport-3289-to-dspace-7_x
[Port dspace-7_x] Ignore some paths from file watcher
2024-09-04 11:29:41 -05:00
Kim Shepherd
fa95f56be0 Ignore some paths from file watcher
Watching all these directories can cause systems to exceed
maximum watched files / inotify limits, especially in dev
mode with IDEs etc also watching files.

(cherry picked from commit 8152d39ad0)
2024-09-04 15:47:12 +00:00
Alexandre Vryghem
d3019e4006 117287: Removed method calls returning observables from the Registry Formats page 2024-09-03 18:44:49 +02:00
Alexandre Vryghem
70f0af6611 117287: Removed method calls returning observables from the EPerson form 2024-09-03 11:36:04 +02:00
Tim Donohue
ef4496fd21 Merge pull request #3285 from tdonohue/port_3273_to_7x
[Port dspace-7_x] Bump axios from 1.6.7 to 1.7.4
2024-08-30 13:27:05 -05:00
Tim Donohue
dc3bf37521 Bump axios from 1.6.7 to 1.7.4 2024-08-30 12:05:04 -05:00
Tim Donohue
b00470aca0 Merge pull request #3035 from VictorHugoDuranS/dspace_7_2682
Set color black on filter section for mobile
2024-08-29 14:59:23 -05:00
Tim Donohue
c9ecc560ee Merge pull request #3278 from DSpace/backport-3277-to-dspace-7_x
[Port dspace-7_x] Typo in German translation
2024-08-29 13:29:54 -05:00
Vlad Novski
d697d0f7a7 fix[i18n]: typo in German translation
(cherry picked from commit 3b4e0d51cd)
2024-08-29 18:29:16 +00:00
Jens Vannerum
0945021378 117544: resolve conflicts after merging in latest 7.x branch 2024-08-27 12:30:18 +02:00
Jens Vannerum
b5d301e53c Merge branch 'w2p-117544_support-for-disabled-elements-for-screen-readers-7.6' into w2p-117544_support-for-disabled-elements-for-screen-readers-7.x 2024-08-27 11:34:57 +02:00
Jens Vannerum
2d48cc0f69 117544: add spec for directive 2024-08-26 10:46:45 +02:00
Jens Vannerum
4527349dcf 117544: alter specs to match new logic 2024-08-26 10:46:45 +02:00
Jens Vannerum
43745d830b 117544: replace all disabled states with our dsDisabled directive 2024-08-23 14:52:16 +02:00
Jens Vannerum
63c76644c1 117544: First implementation of an aria friendly disabled state 2024-08-23 14:10:58 +02:00
Alexandre Vryghem
d09f5297a1 117287: Removed method calls returning observables from the item versions overview 2024-08-14 22:46:14 +02:00
Alexandre Vryghem
54d99a84c9 110615: Added missing vocabulary search input label 2024-08-13 12:05:16 +02:00
Alexandre Vryghem
655813a8af Merge branch 'refs/heads/w2p-110615_minor-accessibibity-fixes_contribute-7.2' into w2p-110615_minor-accessibibity-fixes_contribute-7.6
# Conflicts:
#	src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.html
2024-08-13 11:48:45 +02:00
Alexandre Vryghem
a0515c4121 110615: Fixed related entities ay11 tab issue & removed potential duplicate ID issue by removing the unused #browseDropdown ID 2024-08-13 11:43:36 +02:00
Tim Donohue
fd2bc90ae2 Merge pull request #3245 from alanorth/backport-3236-to-dspace-7_x
[Port dspace-7_x] #3094 - Update date slider to prevent automatic page reloads
2024-08-09 09:31:21 -05:00
Alan Orth
288c75851e src/app/shared/search: date slider accessibility
Update date slider to prevent automatic page reloads.
2024-08-08 23:17:22 -07:00
Tim Donohue
d5a375ee65 Merge pull request #3240 from tdonohue/port_3235_to_7x
[Port dspace-7_x] Missing translations in de.json5 (translation key prefix workspace-item)
2024-08-07 14:22:23 -05:00
Sascha Szott
5101677d9a fix space issue 2024-08-07 14:21:03 -05:00
Sascha Szott
9135c6318d added missing translations in de.json5 (prefix workspace-item) 2024-08-07 14:21:00 -05:00
Alexandre Vryghem
d31e17894c 116728: Removed unnecessary *ngVars from the ThumbnailComponent 2024-07-26 14:50:34 +02:00
Tim Donohue
11fad8d3ce Merge pull request #3190 from DSpace/backport-3186-to-dspace-7_x
[Port dspace-7_x] Docker build: fix FromAsCasing warning
2024-07-17 16:33:28 -05:00
Sascha Szott
f7f279c5ed fix FromAsCasing warning
(cherry picked from commit f4fe2b8632)
2024-07-17 16:33:36 +00:00
Tim Donohue
35b83cc168 Merge pull request #3187 from tdonohue/port_3172_to_7x
[Port dspace-7_x] Minor fix in french translation file
2024-07-17 11:19:35 -05:00
Emmanuel
73b5d776da Fix a french translation for consistency 2024-07-17 10:36:08 -05:00
Emmanuel Pastor
b08b6cca8c Fix a french translation for consistency 2024-07-17 10:36:03 -05:00
Tim Donohue
e2c886c9a4 Merge pull request #3177 from DSpace/backport-3155-to-dspace-7_x
[Port dspace-7_x] Accessibility on the Edit metadata tab
2024-07-10 16:26:09 -05:00
Tim Donohue
b00ce65e8b Merge pull request #3147 from atmire/w2p-116132_fixed-cookie-issues_contribute-7.6
[Port dspace-7_x] Fixed bug when declining Google ReCaptcha cookie preferences
2024-07-10 15:22:24 -05:00
root
bdea9a6d71 Resolution of issue #1193 - Addition of the aria-label attribute to the add, save, discard and undo buttons on the metadata editing page
(cherry picked from commit 4e783e76d1)
2024-07-10 19:53:17 +00:00
Vincenzo Mecca
bb770ba65b [CST-14903] Orcid Synchronization improvements
feat:
 - Introduces reactive states derived from item inside orcid-sync page
 - Removes unnecessary navigation
ref:
  - Introduces catchError operator and handles failures with error messages
2024-07-10 11:42:07 +02:00
Tim Donohue
1d8d3b3c27 Update version tag for development of next release 2024-07-09 14:34:17 -05:00
Tim Donohue
c5448fe252 Update version tag for release 2024-07-09 14:28:46 -05:00
Alan Orth
a705067aed Merge pull request #3152 from alanorth/client-user-agent
Forward client's user-agent instead of Node's
2024-07-03 08:54:24 +03:00
Tim Donohue
28bd6a5fe6 Merge pull request #3063 from tdonohue/port_new_csrf_fixes_to_7x
[Port dspace-7_x] Ensures CSRF token is initialized prior to first modifying (non-GET) request
2024-07-01 11:35:51 -05:00
Alan Orth
5b2966cf48 src/app/core: forward client user-agent
Forward the client's user-agent instead of sending Node's.
2024-06-28 07:58:15 +03:00
Yana De Pauw
a5595015e6 Merge remote-tracking branch 'upstream/dspace-7_x' into w2p-115284_add-support-for-non-repeatable-relaationships_dspace-7-x 2024-06-26 08:38:48 +02:00
Yana De Pauw
a23cdfbc2b 115284: Add repeatable based on relationship max cardinality 2024-06-26 08:32:43 +02:00
lotte
087c203f72 116132: Fixed cookie issue 2024-06-25 18:28:56 +02:00
Tim Donohue
735a3af254 Merge pull request #3139 from tdonohue/port_3138_to_7x
[Port dspace-7_x] Fix error which prevent submitter to deposit a new item
2024-06-20 14:37:34 -05:00
Giuseppe Digilio
3036e72c4c [DURACOM-282] fix issue with submission edit page when providing a not existing workspaceitem 2024-06-20 11:35:53 -05:00
Giuseppe Digilio
4eacdfb113 [DURACOM-282] fix issue with removing duplicated json patch operations, which in some case changed the order in the queue 2024-06-20 11:24:51 -05:00
Tim Donohue
fbb97167d6 Merge pull request #3135 from tdonohue/port_3029_to_7x
[Port dspace-7_x] src/assets/i18n: CrossRef → Crossref
2024-06-20 07:00:03 -05:00
Alan Orth
2d881c9621 src/assets/i18n: CrossRef → Crossref
As part of a rebranding in 2015 Crossref started stylizing their
name as "Crossref" instead of "CrossRef".

See: https://www.crossref.org/blog/the-logo-has-landed/
2024-06-18 15:41:31 -05:00
Tim Donohue
31508ed5eb Merge pull request #3121 from alexandrevryghem/w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x
Remove Bitstreams on edit-item-page doesn't work
2024-06-18 12:12:09 -05:00
Tim Donohue
3895d26d0b Merge pull request #3133 from tdonohue/port_3129_to_7x
[Port dspace-7_x] Bump ws from 7.5.9 to 7.5.10
2024-06-17 17:14:06 -05:00
Tim Donohue
e9b39ff106 Merge pull request #3131 from tdonohue/port_3125_to_7x
[Port dspace-7_x] Bump postcss to 8.4.38
2024-06-17 16:49:42 -05:00
Tim Donohue
8615c70ccc Bump ws from 7.5.9 to 7.5.10 2024-06-17 16:21:54 -05:00
Tim Donohue
93f1ae0b49 Merge pull request #3130 from tdonohue/port_3124_to_7x
Bump express from 4.18.2 to 4.19.2
2024-06-17 15:11:52 -05:00
Tim Donohue
8990a2d132 Bump postcss to 8.4.38 2024-06-17 15:03:05 -05:00
Tim Donohue
f4eb8876c2 Bump express from 4.18.2 to 4.19.2 2024-06-17 14:37:28 -05:00
Tim Donohue
eb7a93a12f Merge pull request #3128 from tdonohue/port_2915_to_7x
[Port dspace-7_x] Bump tar to 6.2.1
2024-06-17 14:21:25 -05:00
Tim Donohue
69eedf4015 Bump tar to 6.2.1 2024-06-17 13:04:59 -05:00
Tim Donohue
ff31c302e2 Merge pull request #3126 from tdonohue/port_3123_to_7x
[Port dspace-7_x] Bump braces from 3.0.2 to 3.0.3
2024-06-17 12:34:21 -05:00
Tim Donohue
7b554a48f9 Bump braces from 3.0.2 to 3.0.3 2024-06-17 10:41:08 -05:00
Tim Donohue
c088ccb32e Merge pull request #3119 from tdonohue/port_3067_to_7x
[Port dspace-7_x] Fix "Browse by Author" remaining serious accessibility issues
2024-06-17 09:27:26 -05:00
Alexandre Vryghem
1990120fa0 Merge branch 'refs/heads/w2p-113560_edit-item-add-relationships-one-by-one_contribute-7.6' into w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x 2024-06-14 23:07:12 +02:00
Alexandre Vryghem
1444271e69 115046: Fixed edit item bitstream tab buttons not updating correctly & removed method calls retuning observables in edit collection's content source tab 2024-06-14 23:03:56 +02:00
Tim Donohue
09bf25a233 Merge pull request #3039 from VictorHugoDuranS/dspace-7_2668
Fix - Change color Contrast in cookie settings box
2024-06-14 15:31:33 -05:00
Tim Donohue
9580b29491 Merge pull request #3118 from DSpace/backport-3099-to-dspace-7_x
[Port dspace-7_x] Improving accessibility of the ds-loading component
2024-06-14 15:13:31 -05:00
Tim Donohue
5fe6dfb949 Merge pull request #3117 from DSpace/backport-3115-to-dspace-7_x
[Port dspace-7_x] Fixes: Site hangs when selecting items via keyboard from the hamburger menu
2024-06-14 15:05:43 -05:00
root
ebb846f2a9 Correcting a formatting error 2024-06-14 15:02:36 -05:00
root
983e955398 DSpace #1176 - Browse by Author serious issues 2024-06-14 15:02:13 -05:00
root
36266dffef Melhorando acessibilidade do componente ds-loading
(cherry picked from commit e96d64a622)
2024-06-14 19:09:15 +00:00
Eike Martin Löhden
53fb9f85fc Change key-listener to keydown in order to work on chrome browsers.
(cherry picked from commit a4e9a9a4b8)
2024-06-14 18:56:25 +00:00
Tim Donohue
16210365be Merge pull request #3109 from alexandrevryghem/w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x
[Port dspace-7_x] Fixed caching & same entity type relationship with different left/rightwardtype bugs on edit item relationships
2024-06-11 14:43:12 -05:00
Alexandre Vryghem
a0260f5267 Merge branch 'w2p-113560_edit-item-add-relationships-one-by-one_contribute-7.6' into w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x 2024-06-10 16:54:08 +02:00
Tim Donohue
2d28dfc6e6 Merge pull request #3107 from tdonohue/port_3098_to_7x
[Port dspace-7_x] Fixed item edit relationships with same type name but different entities all being shown under same label
2024-06-10 09:32:40 -05:00
Alexandre Vryghem
31ab05f4fe 115434: Passed relatedEntityType parameter to byLabel endpoint 2024-06-07 15:16:41 -05:00
Alexandre Vryghem
813db7cc9f 115046: Fixed same type entity relationships with same leftward/rightward type displaying twice 2024-06-07 14:55:41 +02:00
Tim Donohue
0d3db9f19d Merge pull request #3103 from alexandrevryghem/w2p-113901_edit-item-relationships-does-not-display-tilted-relationships_contribute-7_x
[Port dspace-7_x] Fixed edit item relationships tab not displaying tilted relationships
2024-06-06 09:21:14 -05:00
Alexandre Vryghem
1f4700cb91 Merge remote-tracking branch 'refs/remotes/alex/w2p-113901_edit-item-relationships-does-not-display-tilted-relationships' into dspace-7_x
# Conflicts:
#	src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.ts
2024-06-05 23:42:34 +02:00
Tim Donohue
27c57d6f4e Merge pull request #3102 from tdonohue/port_2953_to_7x
[Port dspace-7_x] Avoid metadata representation element is rendered twice when checking the browse configuration
2024-06-05 15:52:56 -05:00
Giuseppe Digilio
3f7e273597 Avoid metadata representation element is rendered twice when checking the browse configuration 2024-06-05 15:25:12 -05:00
Alexandre Vryghem
6d1e6f90fc 115046: Fixed issue where relationsToItems would never emit when an empty array was passed to it 2024-06-03 15:03:47 +02:00
Alexandre Vryghem
8ee375016f 115046: Fixed loading animation not resetting hen closing modal 2024-06-03 14:55:53 +02:00
Alexandre Vryghem
f1706e24c2 115046: Fixed related item not invalidating on relationship deletion & automatically invalidate the isSelected value after updating relationship on item 2024-06-03 14:55:53 +02:00
Yana De Pauw
33b59c739d 115284: Fix issue with same type relationships 2024-06-03 11:20:21 +02:00
Giuseppe Digilio
2d81a487d3 [DURACOM-247] Move check for initialized token to request effects 2024-05-31 12:13:05 -05:00
Tim Donohue
df8f0db784 Update build script to use "docker compose" instead of "docker-compose". Fixes random failures starting e2e test backend via Docker 2024-05-31 12:13:05 -05:00
Tim Donohue
950038e6df Fix tests. Add XSRFService to all specs which need it to be initialized 2024-05-31 12:13:01 -05:00
Tim Donohue
769210bef2 Update code to use GET request. Cleanup lint errors & add in basic TypeDocs 2024-05-31 12:12:02 -05:00
Art Lowel
7d5e499f21 make a call to ensure a correct XSRF token before performing any non-GET requests 2024-05-31 12:12:02 -05:00
Tim Donohue
cbee67cd4b Merge pull request #3059 from alexandrevryghem/w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x
[Port dspace-7_x] Fixed creation & deletion of relationships not working correctly & added same entity type relationship support
2024-05-31 12:09:50 -05:00
Tim Donohue
5580c81ff7 Merge pull request #3095 from tdonohue/port_2761_to_7x
[Port dspace-7_x] Fix caching issues for versioning
2024-05-31 11:45:18 -05:00
Yury Bondarenko
73be8a972c Always wait for correct draft status, fix spelling 2024-05-30 17:00:51 -05:00
Yury Bondarenko
5f5f6da067 Clean up VersionHistoryDataService changes 2024-05-30 16:57:26 -05:00
Yury Bondarenko
be817b0ab6 Fix cache invalidation for versioning 2024-05-30 16:57:14 -05:00
Alexandre Vryghem
bedfe02f65 Merge branch 'w2p-113560_edit-item-add-relationships-one-by-one_contribute-7.6' into w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x 2024-05-30 23:17:15 +02:00
Alexandre Vryghem
227d47154c 115046: Fixed issue where store operations would sometimes be performed in incorrect order 2024-05-30 23:12:03 +02:00
Alexandre Vryghem
4a70382072 115046: Fixed incorrect name variant being saved in the store when marking relationship ready for deletion 2024-05-30 23:12:02 +02:00
Alexandre Vryghem
c687d3ff5d 115046: Fixed performance issues in virtual metadata popup 2024-05-30 23:12:02 +02:00
Tim Donohue
491a61b8b1 Merge pull request #3088 from DSpace/backport-3080-to-dspace-7_x
[Port dspace-7_x] Fixed page size change and sorting not working on comcol pages
2024-05-29 16:55:00 -05:00
Tim Donohue
8c6df7ac8e Merge pull request #3089 from DSpace/backport-3079-to-dspace-7_x
[Port dspace-7_x] Fixed delete item page freezing when having relationships
2024-05-29 16:54:40 -05:00
Tim Donohue
8c35ca86c8 Merge pull request #3064 from alexandrevryghem/minor-ui-improvements_contribute-7_x
[Port dspace-7_x] Fixed item-edit.cy.ts regularly failing & minor UI improvements
2024-05-29 16:36:20 -05:00
Alexandre Vryghem
7993020463 115427: Fixed delete item not redirecting when having some virtual metadata that needs to be copied
(cherry picked from commit b8d9c650f5)
2024-05-29 20:51:02 +00:00
Alexandre Vryghem
8b3010be0c 115427: Fixed edit item pages not redirecting to 404 with invalid id
(cherry picked from commit 249cac4f27)
2024-05-29 20:51:01 +00:00
Alexandre Vryghem
2843659416 115427: Fixed delete item page freezing when it has relationships
(cherry picked from commit e6086e16ea)
2024-05-29 20:51:01 +00:00
Alexandre Vryghem
a77d80946b 115428: Fixed EventEmitter being triggered multiple times because its name was the same as a standard DOM event
(cherry picked from commit 4d89a11943)
2024-05-29 20:35:49 +00:00
Tim Donohue
a3a298f51e Merge pull request #3087 from DSpace/backport-3062-to-dspace-7_x
[Port dspace-7_x] Made legacy bitstream URLs redirect with 301 status code
2024-05-29 15:00:44 -05:00
Alexandre Vryghem
c332600633 114624: Made the legacyBitstreamURLRedirectGuard return false for valid bitstream urls in combination with a HardRedirectService#redirect, this will make ensure the redirect is visible for curl instead of being performed by Angular
(cherry picked from commit 23644e9ec7)
2024-05-29 18:38:53 +00:00
Kuno Vercammen
f1b397fc11 114624: Refactored legacyBitstreamURL resolver into a guard to set the redirect status code to 301 Moved Permanently
(cherry picked from commit 369bd693d4)
2024-05-29 18:38:53 +00:00
Alexandre Vryghem
970b19bf01 115051: Created ThemedAdminWorkflowPageComponent 2024-05-22 14:02:41 +02:00
VictorHugoDuranS
975e9fd356 Hide search text field when number of facet values is less than the maximum (#3061)
Hide search text field in the filter section if the number of facet values does not exceed the maximum number of facet values shown.
2024-05-22 09:23:51 +03:00
Alexandre Vryghem
99384a7060 115051: Created ThemedAdminSearchPageComponent 2024-05-21 12:53:02 +02:00
Alexandre Vryghem
6cab13a876 Added missing alt & replaced remaining dspace logo PNGs with SVGs
(cherry picked from commit 56c786d3f7)
2024-05-17 21:34:14 +02:00
Alexandre Vryghem
da439000ac Fixed item-edit.cy.ts regularly failing because of aria-required-children for role="row" & added missing roles to edit comcol tabs
(cherry picked from commit 77d0f9cd60)
2024-05-17 21:32:32 +02:00
Alexandre Vryghem
f8a8b90556 Aligned communities search results like collections on md screens
(cherry picked from commit c2684d3078)
2024-05-17 21:31:14 +02:00
Alexandre Vryghem
7b374f7a32 Merge branch 'minor-ui-improvements_contribute-7.6' into minor-ui-improvements_contribute-7_x 2024-05-17 21:30:51 +02:00
Alexandre Vryghem
14dbced218 Merge branch 'w2p-113560_edit-item-add-relationships-one-by-one_contribute-7.6' into w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x 2024-05-17 20:06:53 +02:00
Alexandre Vryghem
9053489ddd 115046: Fixed url parameters not being filtered out of the url before hasChanges$ & isReinstatable$ is calculated 2024-05-17 18:51:23 +02:00
Alexandre Vryghem
f7c9058e50 Merge branch 'w2p-113560_edit-item-add-relationships-one-by-one_contribute-7.6' into w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x
# Conflicts:
#	src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.html
#	src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html
2024-05-17 14:40:20 +02:00
Alexandre Vryghem
f65b96412a Fixed multiple edit relationship bugs
- Fixed issue making it impossible to add new relationships until the page is refreshed after deleting an existing one (only when you refreshed the page after creating the initial relationship)
- Fixed NPE in DsDynamicLookupRelationModalComponent
- Grouped buttons on relationship page in order to assure that they always have the same behaviour
2024-05-17 14:34:24 +02:00
Tim Donohue
088e56fb8a Merge pull request #3055 from DSpace/backport-3046-to-dspace-7_x
[Port dspace-7_x] Fix self link don't match warnings for authorization endpoint
2024-05-16 08:37:43 -05:00
Alexandre Vryghem
1b38f2d25d Merge branch 'w2p-113560_edit-item-add-relationships-one-by-one' into w2p-113560_edit-item-add-relationships-one-by-one_contribute-7_x
# Conflicts:
#	src/app/item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.html
2024-05-16 10:17:34 +02:00
Alexandre Vryghem
e0fb590b02 Don't encode the uri parameter of /api/authz/authorizations/search/object since the returned self link doesn't encode the uri param
(cherry picked from commit b0991db1d4)
2024-05-15 21:49:41 +00:00
Tim Donohue
8ea7a2572a Merge pull request #3053 from tdonohue/port_2962_to_7x
[Port dspace-7_x] Fix submission lost changes after save
2024-05-15 14:17:49 -05:00
Tim Donohue
3edb663b21 Minor bug fix to specs 2024-05-15 13:28:19 -05:00
Tim Donohue
432692edc8 Merge pull request #3051 from tdonohue/port_2944_to_7x
[Port dspace-7_x] Disable inlineCriticalCss by default for better SSR performance
2024-05-15 13:21:04 -05:00
Tim Donohue
dfc304f9aa Merge pull request #3052 from DSpace/backport-2706-to-dspace-7_x
[Port dspace-7_x] Update pt-PT.json5
2024-05-15 13:20:45 -05:00
Art Lowel
d1890e0253 move embed item fix to SubmissionJsonPatchOperationsService 2024-05-15 12:40:23 -05:00
Art Lowel
66832eeb28 embed the item to submission patch request to fix issue where the submission form would revert to the previous data on save 2024-05-15 12:37:01 -05:00
Ricardo Saraiva
83b67149a6 Update pt-PT.json5
Revision and improvement of some of the already existing translation keys upon reviewers’ suggestions.

(cherry picked from commit 16c5665b31)
2024-05-15 17:16:57 +00:00
Ricardo Saraiva
ba1eee27b3 Update pt-PT.json5
(cherry picked from commit c4142e7a80)
2024-05-15 17:16:57 +00:00
Ricardo Saraiva
bb055e12fb Update pt-PT.json5
(cherry picked from commit 6c5e971dc1)
2024-05-15 17:16:57 +00:00
Ricardo Saraiva
242043b3f8 Update pt-PT.json5
(cherry picked from commit 3262e00d6e)
2024-05-15 17:16:57 +00:00
Ricardo Saraiva
170c7ac6cc Update pt-PT.json5
(cherry picked from commit 38eacf31bf)
2024-05-15 17:16:56 +00:00
Ricardo Saraiva
c2ddaf286d Update pt-PT.json5
Addition of new translation keys (following DSpace 7.6.1 release) & revision/improvement of some of the already existing.

(cherry picked from commit 18085698b2)
2024-05-15 17:16:56 +00:00
Ricardo Saraiva
071fa370bf Update pt-PT.json5
Addition of new translation keys (following DSpace 7.6.1 release) & revision/improvement of some of the already existing.

(cherry picked from commit 02792d28bc)
2024-05-15 17:16:56 +00:00
Tim Donohue
eeb562dd14 Disable inlineCriticalCss by default for better SSR performance 2024-05-15 12:12:55 -05:00
Alexandre Vryghem
479adf6519 115046: Fixed failing tests & added new test to cover added code 2024-05-15 16:09:24 +02:00
Tim Donohue
84e4cc01cc Merge pull request #3044 from DSpace/backport-3028-to-dspace-7_x
[Port dspace-7_x] Add HTML support on system-wide alert (Fixes #3019)
2024-05-14 13:26:10 -05:00
Tim Donohue
d95574df6f Merge pull request #3043 from tdonohue/port_3025_to_7x
[Port dspace-7_x] Czech DSpace 7 UI translation by NTK
2024-05-14 13:25:57 -05:00
Abel Gómez
40b4df6354 Fix code alignment
(cherry picked from commit af193282da)
2024-05-14 17:31:35 +00:00
Abel Gómez
7a364fddeb Add HTML support to system-wide alert banner. Fixes #3019.
(cherry picked from commit b9fb4e2159)
2024-05-14 17:31:35 +00:00
NTK
d9a5f324a5 Czech DSpace 7 UI translation by NTK 2024-05-14 12:14:29 -05:00
Tim Donohue
fdafa0f034 Merge pull request #3042 from tdonohue/port_3007_to_7x
[Port dspace-7_x] After English, reorder languages alphabetically by code
2024-05-14 10:35:44 -05:00
Tim Donohue
d55b0c0dd3 After English, reorder languages alphabetically by code 2024-05-14 09:26:49 -05:00
Tim Donohue
30c025c5c1 Merge pull request #2841 from atmire/w2p-112198_add-relationship-effects-queue
Fix for not all CREATE/DELETE Relationship requests coming through, during submission entity lookup
2024-05-14 09:24:29 -05:00
Tim Donohue
75718bf3ec Merge pull request #2983 from oscar-escire/fix/authorSearch
Fix Author search result without co-author
2024-05-13 14:19:37 -05:00
Tim Donohue
36fa4d4cae Merge pull request #3027 from alexandrevryghem/discovery-backports_contribute-7_x
[Port dspace-7_x] Multiple discovery backports
2024-05-13 11:41:22 -05:00
Tim Donohue
1aa6d358bb Merge pull request #3038 from tdonohue/port_2771_to_7x
[Port dspace-7_x] improved layout of feedback form (increase vertical spacing)
2024-05-13 08:38:59 -05:00
Oscar Chacón
5e59403779 Update: replaced logic of allMetadataValues method by allMetadataNoExcludingValues logic 2024-05-11 17:37:38 -06:00
Sascha Szott
6ff9edaa8b improved layout of feedback form (increase vertical spacing) 2024-05-10 16:38:33 -05:00
Victor Hugo Duran Santiago
876ecb1d12 Fix - Change color Contrast in cookie settings box 2024-05-10 15:27:37 -06:00
Tim Donohue
9bd154792a Merge pull request #3033 from DSpace/backport-2951-to-dspace-7_x
[Port dspace-7_x] Fix display of dso names for EPersons
2024-05-10 15:59:53 -05:00
Tim Donohue
d43c44e911 Merge pull request #2973 from oscar-escire/fix/policyNameForm
added maxlength and hint to resource policy
2024-05-10 15:14:08 -05:00
Tim Donohue
8467bb7c0a Merge pull request #3034 from tdonohue/port_2954_to_7x
[Port dspace-7_x] Live import preview should show all metadata values, not only the first one
2024-05-10 13:43:53 -05:00
Jens Vannerum
01719822c1 114440: fix test 2024-05-10 12:34:45 -05:00
Marie Verdonck
ffbe407d83 104686: Live Import preview only shows first metadata value per field 2024-05-10 12:30:13 -05:00
Gantner, Florian Klaus
202c84c484 extend eperson render type for display of dso name
https://github.com/DSpace/dspace-angular/issues/2947
(cherry picked from commit 97fade00a4)
2024-05-10 17:20:15 +00:00
Tim Donohue
6ac2e9a95d Merge pull request #3032 from DSpace/backport-2725-to-dspace-7_x
[Port dspace-7_x] Encode all `RequestParam` values
2024-05-10 11:21:55 -05:00
Alexandre Vryghem
daff8a4594 Refactored code to always encode the RequestParams
(cherry picked from commit d5cf236938)
2024-05-10 15:53:07 +00:00
Victor Hugo Duran Santiago
36c95db7bf Set color black on filter section for mobile 2024-05-09 20:50:51 -06:00
Alexandre Vryghem
ae8e0f9ae8 110889: Fixed searchevents request containing the query params in the clickedObject
Also fixed minor CSS issue in mobile mode where sidebar is still visible

(cherry picked from commit cbe3f2f8f5)
2024-05-09 18:13:13 +02:00
Alexandre Vryghem
0aadcdfdd9 110889: Prevent vocabulary undefined from being retrieved in hierarchy filter when none is configured
(cherry picked from commit 9e7a59ddd0)
2024-05-09 16:17:53 +02:00
Art Lowel
a658bf4531 decrease the number of unnecessary rerenders by checking whether the relationship types have changed 2024-05-09 15:25:37 +02:00
Art Lowel
4541788a34 fix issue where relationship lists wouldn't update automatically from the second submit onwards 2024-05-09 14:55:37 +02:00
Alan Orth
c44fce9e0f Merge pull request #2866 from atmire/w2p-113124_AddInputToOpenDsMetadataUriValuesInNewWindow
Allow opening ds-metadata-uri-values links in a new window
2024-05-09 15:46:51 +03:00
Art Lowel
cb59c05baf fix spinners 2024-05-09 14:06:56 +02:00
Art Lowel
d75b158ee1 Merge remote-tracking branch 'contributions/fix-api-undefined-issue-7.6' into w2p-113560_edit-item-add-relationships-one-by-one 2024-05-09 13:44:18 +02:00
Art Lowel
1c50dbf4c6 Merge remote-tracking branch 'alexandre/fix-create-relationship-not-working-between-same-types_contribute-7.6' into w2p-113560_edit-item-add-relationships-one-by-one 2024-05-09 13:40:03 +02:00
Alexandre Vryghem
ce3eb76190 110889: Don't retrieve the accessStatus when item.showAccessStatuses is false
(cherry picked from commit 37c534b809)
2024-05-09 12:26:18 +02:00
Alexandre Vryghem
6dac7ceec4 Prevent ItemSearchResult from being recreated at every iteration
(cherry picked from commit da320b5fbc)
2024-05-09 12:18:36 +02:00
Alexandre Vryghem
3454ca99f3 108586: Fixed ItemListElementComponent not pointing to the ItemSearchResultListElementComponent from the themes folder when present
(cherry picked from commit d00fc5d9d3)
2024-05-09 12:16:56 +02:00
Tim Donohue
dd5a167d0d Merge pull request #3013 from atmire/process-ui-null-eperson-fix-7.6
[Port dspace-7_x] Handle Null Users Gracefully in Process Overview Page
2024-05-08 14:45:49 -05:00
Art Lowel
9f3ee32858 fix issue where a submit emitted from the edit relationship modal wouldn't arrive in the edit relationships component 2024-05-08 17:48:33 +02:00
Tim Donohue
3ae9c8e9f8 Merge pull request #3017 from DSpace/backport-3016-to-dspace-7_x
[Port dspace-7_x] Ensure `item` is also embedded in submission form
2024-05-07 14:22:03 -05:00
Tim Donohue
3c9cb4e3b6 Ensure item is also embedded in submission form
(cherry picked from commit bf4d04c909)
2024-05-07 18:53:19 +00:00
Oscar Chacón
f80d1fdc68 fixed lint errors 2024-05-06 11:12:22 -06:00
Tim Donohue
4bf8944c48 Merge pull request #2987 from atmire/w2p-105866_Submission-performance-7_x
7.x - Submission performance
2024-05-06 11:12:25 -05:00
Tim Donohue
2b0f0f627e Merge pull request #3009 from tdonohue/port_2994_to_7x
[Port dspace-7_x] Bump ejs from 3.1.9 to 3.1.10
2024-05-06 08:55:55 -05:00
Kuno Vercammen
b7b1c3e582 Merge remote-tracking branch 'origin/dspace-7_x' into process-ui-null-eperson-fix-7.6
# Conflicts:
#	src/assets/i18n/en.json5
2024-05-06 13:45:39 +02:00
Kuno Vercammen
488958c251 113904: Added tests for null user handling 2024-05-06 12:09:40 +02:00
Kuno Vercammen
26c234e36c 113904: Fix null user handling 2024-05-06 11:53:05 +02:00
Tim Donohue
55e742fbfb Bump ejs from 3.1.9 to 3.1.10 2024-05-03 16:07:48 -05:00
Tim Donohue
0be17bb0ed Merge pull request #3008 from tdonohue/port_2863_to_7x
[Port dspace-7_x] Added Arabic Translation
2024-05-03 15:55:51 -05:00
Mohamed Ali
aa7496e41d Added Arabic Translation 2024-05-03 15:20:51 -05:00
Tim Donohue
bc5262f5f7 Merge pull request #3006 from DSpace/backport-2831-to-dspace-7_x
[Port dspace-7_x] French translations for missing parameters (access control and batch loading)
2024-05-03 12:37:13 -05:00
Tim Donohue
07a91222c4 lint fixes
(cherry picked from commit 3bb559542d)
2024-05-03 16:44:32 +00:00
Pierre Lasou
b06bece1cb Update fr.json5 correcting bad quotation marks
(cherry picked from commit 1abc796734)
2024-05-03 16:44:32 +00:00
Pierre Lasou
053844a7bc Update fr.json5 - adding missing comma
(cherry picked from commit 3b98c8c84f)
2024-05-03 16:44:32 +00:00
Pierre Lasou
7129d6b9c8 Update fr.json5 to adresse reviewer feedback
(cherry picked from commit 46df7e805e)
2024-05-03 16:44:32 +00:00
Pierre Lasou
ae35461516 Update fr.json5 to add batch upload labels
Addition of batch upload labels (ZIP, SAF)

(cherry picked from commit c4548e63ca)
2024-05-03 16:44:32 +00:00
Pierre Lasou
a250de49a0 Update fr.json5 to add access conditions labels
Changes to the labels related to access control and access conditions.

(cherry picked from commit e747520646)
2024-05-03 16:44:32 +00:00
Tim Donohue
13775e53de Merge pull request #3001 from tdonohue/port_2933_to_7x
[Port dspace-7_x] Reset dropdown values
2024-05-02 16:29:14 -05:00
Andreas Awouters
e9c5340f67 113319: Fix dropdown component spec
(cherry picked from commit 70357803e86caabc6357b7cbec9db1ef8edd2a56)
2024-05-02 14:57:41 -05:00
Andreas Awouters
861132d04d 113319: Add dropdown entry to clear selection
(cherry picked from commit 13d1547b3dbf5d4cd74617d6327044da798ed44e)
2024-05-02 14:57:29 -05:00
Tim Donohue
a7517d6814 Merge pull request #2992 from DSpace/backport-2991-to-dspace-7_x
[Port dspace-7_x] Remove obsolete "version" tag from Docker Compose files (Angular version)
2024-05-01 16:28:54 -05:00
Tim Donohue
971c07632a Merge pull request #2641 from hutattedonmyarm/regex-error-messages-backport-dspace7x
[Port dspace-7_x] More meaningful regex error messages
2024-05-01 16:22:43 -05:00
Tim Donohue
45840c1c17 Remove obsolete "version" tag from compose files
(cherry picked from commit d6303de877)
2024-05-01 20:05:31 +00:00
Tim Donohue
91d72c19dd Merge pull request #2694 from hutattedonmyarm/dspace-7_x
[Port dspace-7_x]  Enable type-bind for checkbox inputs during submission
2024-04-30 15:13:40 -05:00
Tim Donohue
5301a8fc51 Merge pull request #2990 from DSpace/backport-2710-to-dspace-7_x
[Port dspace-7_x] Update robots.txt.ejs
2024-04-29 17:03:13 -05:00
Tim Donohue
27d00d133a Merge pull request #2989 from tdonohue/port_2675_to_7x
[Port to dspace-7_x] Multiline selected facet badge on search page
2024-04-29 16:57:02 -05:00
Bram Luyten
6447c3769b Update robots.txt.ejs
Fix for issue #2709

(cherry picked from commit fbd35296f0)
2024-04-29 21:29:37 +00:00
lotte
ebb99c813a Merge branch 'w2p-108595_multiline-search-filter-badge' into multiline-search-filter-badge_main 2024-04-29 16:02:41 -05:00
lotte
e1fe4031e5 Removed unnecessary change 2024-04-29 15:59:22 -05:00
lotte
65860b81b1 108595: fix for overflowing search filter badge selection 2024-04-29 15:59:04 -05:00
Yana De Pauw
dabc0e9b4b [Ticket 2124] Slow response times 2024-04-29 12:59:35 +02:00
Oscar Chacón
2530845b9b Fix trailing spaces and removed console.log 2024-04-26 17:38:06 -06:00
Oscar Chacón
f055ff6fbd Fix: author search result without co-author 2024-04-25 16:19:21 -06:00
Art Lowel
e4b098e64d update test 2024-04-25 10:56:54 +02:00
Alexandre Vryghem
132e1f9524 Minor UI improvements
- Fixed DSO edit menu sometimes displaying underneath header based on header z-index
- Fixed accessibility issue on request a copy page
2024-04-23 02:02:28 +02:00
Tim Donohue
679702bb5a Merge pull request #2967 from tdonohue/update_backend_docker_scripts_7x
Update REST and CI docker compose scripts to sync with 7.x backend
2024-04-22 16:39:38 -05:00
Oscar Chacón
f8e0cc6808 added maxlength and hint to resource policy 2024-04-22 14:42:32 -06:00
Tim Donohue
45ab7231a0 Merge pull request #2969 from alexandrevryghem/w2p-112970_added-missing-breadcrumbs_contribute-7_x
[Port dspace-7_x] Added missing/incomplete breadcrumbs on create community/collection/item pages
2024-04-22 12:23:00 -05:00
Tim Donohue
c794e1ebde Merge pull request #2968 from alexandrevryghem/fix-broken-item-mapper-pagination_contribute-7_x
[Port dspace-7_x] Fixed pagination issues on item mapper
2024-04-22 12:13:02 -05:00
Alexandre Vryghem
7d49666865 Merge remote-tracking branch 'alex/w2p-112970_added-missing-breadcrumbs_contribute-7.4' into dspace-7_x
# Conflicts:
#	src/app/collection-page/collection-page-routing.module.ts
#	src/app/community-page/community-page-routing.module.ts
#	src/app/core/core.module.ts
#	src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts
#	src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts
#	src/assets/i18n/en.json5
2024-04-22 16:23:48 +02:00
Alexandre Vryghem
7e6f736b2f Merge branch 'fix-broken-item-mapper-pagination_contribute-7.6' into dspace-7_x
# Conflicts:
#	src/app/access-control/bulk-access/browse/bulk-access-browse.component.html
#	src/app/access-control/epeople-registry/epeople-registry.component.html
#	src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html
#	src/app/access-control/group-registry/group-form/members-list/members-list.component.html
#	src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.html
#	src/app/shared/object-select/collection-select/collection-select.component.html
#	src/app/shared/object-select/item-select/item-select.component.html
2024-04-19 23:52:34 +02:00
Tim Donohue
b43e99518d Update REST and CI docker compose scripts to sync with 7.x backend 2024-04-19 16:21:12 -05:00
Tim Donohue
7a5694347a Merge pull request #2965 from tdonohue/port_2816_to_7x
[Port dspace-7_x] Return 404 Not Found status code on missing identifiers
2024-04-19 13:21:05 -05:00
Jens Vannerum
92f2a77dae 111326: return not found status code on missing identifiers 2024-04-19 12:17:22 -05:00
Tim Donohue
57c2b02277 Merge pull request #2960 from DSpace/backport-2768-to-dspace-7_x
[Port dspace-7_x] Fix infinite scroll
2024-04-19 11:36:51 -05:00
Andrea Barbasso
fde0ebf872 [DURACOM-224] fix infinite scroll
(cherry picked from commit 2afa473cfb)
2024-04-19 15:43:02 +00:00
Alexandre Vryghem
268d2e54fc 108555: Refactored CollectionSelectComponent to not call canSelect every time changes are detected 2024-04-18 21:18:10 +02:00
Alexandre Vryghem
59197cff2d 108555: Refactored ItemSelectComponent to not call canSelect every time changes are detected 2024-04-18 21:18:10 +02:00
Alexandre Vryghem
da31c4f253 108555: Removed pageInfoState Input since it wasn't used and almost all the components gave the incorrect type of data to it 2024-04-18 19:28:01 +02:00
Tim Donohue
4aa3158f33 Merge pull request #2925 from DSpace/backport-2905-to-dspace-7_x
[Port dspace-7_x] Fix for submission describe warning contribution bug
2024-04-12 13:52:45 -05:00
lotte
3768dc030e 113500: Fixed lint issues
(cherry picked from commit 903af2ccdb)
2024-04-12 17:20:51 +00:00
lotte
27286998f7 113500: Fixed lint error
(cherry picked from commit 722bd6f7f5)
2024-04-12 17:20:51 +00:00
lotte
d8b6e86896 113500: Fixed tests after bugfix
(cherry picked from commit 4e0046022b)
2024-04-12 17:20:51 +00:00
lotte
47537a019c 113500: Fix for warning on first describe step
(cherry picked from commit 993ce1ab16)
2024-04-12 17:20:51 +00:00
Art Lowel
8e59b7d0b0 also add relationships one by one on the edit item relationships tab 2024-04-11 17:51:59 +02:00
Tim Donohue
f72725ceed Merge pull request #2919 from DSpace/backport-2782-to-dspace-7_x
[Port dspace-7_x] Fixed Font Awesome CSS Pseudo-elements not rendering in v6.x
2024-04-11 08:59:54 -05:00
Alexandre Vryghem
4251630ab8 112970: Always rerun resolvers on url change for create comcol pages 2024-04-11 00:18:04 +02:00
Alexandre Vryghem
e2c2174bf7 111373: Fixed Font Awesome CSS Pseudo-elements for v6.x
(cherry picked from commit 01f97a623f)
2024-04-10 21:51:53 +00:00
Tim Donohue
de1a240140 Merge pull request #2858 from 4Science/DURACOM-241
7.x - Header, navbar, and admin sidebar refactoring
2024-04-10 14:18:54 -05:00
Tim Donohue
b12bdfdd22 Docker build IDs must all be unique to avoid image conflicts. Ensure no builds use a generic name like "dspace-angular". 2024-04-09 15:06:43 -05:00
Tim Donohue
971c302378 Merge pull request #2911 from tdonohue/update_actions_7x
[Port dspace-7_x] Update all GitHub Actions & add token for Codecov.io
2024-04-08 16:59:26 -05:00
Tim Donohue
b758d0a5f9 Ensure all artifacts have a unique name by appending Node version to each 2024-04-08 14:46:16 -05:00
Tim Donohue
78f1d9f763 Update all GitHub Actions. Add newly required CODECOV_TOKEN to codecov action 2024-04-08 14:46:10 -05:00
Tim Donohue
90dc0e3f61 Merge pull request #2901 from DSpace/backport-2067-to-dspace-7_x
[Port dspace-7_x] Add configuration option to disable inlined CSS in SSR HTML
2024-04-05 13:45:50 -05:00
Yury Bondarenko
fd10fbe2a8 Add to config.example.yml
(cherry picked from commit 4a39f33006)
2024-04-05 18:14:43 +00:00
Yury Bondarenko
3b11ac517c Add configuration option to disable inlined CSS in SSR HTML
When inlining CSS, Angular Universal needs to extract critical styles.
This seems to take up a significant chunk of processing time.

However, loading may appear less smooth when this feature is disabled.

Added to the configuration to make it easier to A/B test this without a full re-build.

(cherry picked from commit 38a058d7af)
2024-04-05 18:14:42 +00:00
Tim Donohue
a1090fbb0d Merge pull request #2896 from tdonohue/port_2894_to_7x
[Port dspace-7_x] Bump axios to 1.6.8
2024-04-04 15:00:51 -05:00
Tim Donohue
4239d37a38 Bump axios to 1.6.8 2024-04-04 14:12:29 -05:00
Tim Donohue
a87a5f9b5e Merge pull request #2892 from tdonohue/port_2867_to_7x
[Port dspace-7_x]  Bump follow-redirects from 1.15.5 to 1.15.6
2024-04-04 12:36:55 -05:00
Tim Donohue
777fc571b0 Merge pull request #2895 from tdonohue/port_2872_to_7x
[Port dspace-7_x] Bump webpack-dev-middleware from 5.3.3 to 5.3.4
2024-04-04 12:36:36 -05:00
Tim Donohue
dc92bbd80a Merge pull request #2893 from tdonohue/port_2881_to_7x
[Port dspace-7_x] Bump express from 4.18.2 to 4.19.2
2024-04-04 12:09:24 -05:00
Tim Donohue
d503e4db07 Bump webpack-dev-middleware from 5.3.3 to 5.3.4 2024-04-04 11:58:15 -05:00
Tim Donohue
bba7fe2f74 Bump express from 4.18.2 to 4.19.2 2024-04-04 11:34:30 -05:00
Tim Donohue
ed8e280aa4 Bump follow-redirects from 1.15.5 to 1.15.6 2024-04-04 11:01:41 -05:00
Alexandre Vryghem
60d93e653f 113938: Added missing comcol structure to workspace/workflow item breadcrumbs 2024-04-04 12:07:29 +02:00
Tim Donohue
2dfa075423 Merge pull request #2832 from alexandrevryghem/patch_2808
[Port dspace-7_x] Refactored community & collection pages
2024-03-29 10:04:08 -05:00
Alan Orth
43137fe676 Merge pull request #2879 from DSpace/backport-2877-to-dspace-7_x
[Port dspace-7_x] System-wide alert shouldn't be created when the message is empty
2024-03-26 11:26:31 +03:00
Alexandre Vryghem
d05438dc3e Prevent system-wide alert to be activated with empty message
(cherry picked from commit 767de4b5c8)
2024-03-26 07:12:03 +00:00
Alexandre Vryghem
25cb0455e2 Fixed bug in BrowseService where findListByHref was called with null instead of undefined, which prevented its default values from being used
(cherry picked from commit e6bf2f0ca7)
2024-03-24 19:12:48 +01:00
Alexandre Vryghem
692bb991a0 112970: Added missing breadcrumbs to create community/collection pages 2024-03-19 12:06:39 +01:00
Kuno Vercammen
badf00258c 113124: Allow opening ds-metadata-uri-values links in a new window 2024-03-15 11:42:01 +01:00
Tim Donohue
4c693a1294 Merge pull request #2861 from DSpace/backport-2777-to-dspace-7_x
[Port dspace-7_x] Element reference for typeahead directive is only defined when model has authority
2024-03-08 15:56:38 -06:00
William Welling
85922433a5 NgbTypeahead instance is only defined when model has authority
(cherry picked from commit 018d44c616)
2024-03-08 20:13:19 +00:00
Davide Negretti
3caac21648 [DURACOM-195] fix spacing in collapsible menu
(cherry picked from commit a88282d70b)
2024-03-07 18:57:39 +01:00
Davide Negretti
f26b265e64 [DURACOM-195] fix
(cherry picked from commit fdbe7a6005)
2024-03-07 18:57:36 +01:00
Davide Negretti
89c88ca6e0 [DURACOM-195] replace ul/li with div in sidebar
(cherry picked from commit d1dc8e6038)
2024-03-07 18:57:33 +01:00
Davide Negretti
e3f1fa39d5 [DURACOM-195] add background on mouse over to dropdown user menu items
(cherry picked from commit 8e35c0f713)
2024-03-07 18:57:30 +01:00
Davide Negretti
49efc4175d [DURACOM-195] fix issue with logo on small screens
(cherry picked from commit bff93a0847)
2024-03-07 18:57:27 +01:00
Davide Negretti
48e9817245 [DURACOM-195] replace ul/li with div in navbar
(cherry picked from commit abba806d40)
2024-03-07 18:57:24 +01:00
Davide Negretti
a9c3008cee [DURACOM-195] fixes
(cherry picked from commit 523850bc45)
2024-03-07 18:57:19 +01:00
Davide Negretti
8efc401811 [DURACOM-195] fix prefix of custom CSS variables
(cherry picked from commit 46fe7f63e3)
2024-03-07 18:57:16 +01:00
Davide Negretti
9518f70b42 [DURACOM-195] misc fixes
(cherry picked from commit 87d3383bba)
2024-03-07 18:57:13 +01:00
Davide Negretti
2f5c3b1267 [DURACOM-195] fix comment
(cherry picked from commit 80cc4c5d9a)
2024-03-07 18:57:08 +01:00
Davide Negretti
bb16983029 [DURACOM-195] fix issue with event handling in expandable admin sidebar section
(cherry picked from commit f25ec6210b)
2024-03-07 18:56:57 +01:00
Davide Negretti
5b1438f09f [DURACOM-195] accessibility issue fixed on log-out button
(cherry picked from commit 8f73b8ff9d)
2024-03-07 18:56:50 +01:00
Davide Negretti
510968b0c6 [DURACOM-195] [DURACOM-210] Reorder SCSS and CSS theme variables 2024-03-07 18:54:28 +01:00
Davide Negretti
8718bd0df6 [DURACOM-195] Header, navbar, and sidebar refactoring 2024-03-07 18:34:34 +01:00
Davide Negretti
7d2fdb7598 [DURACOM-195] Base components (simplify header-navbar-wrapper) 2024-03-07 18:32:51 +01:00
Davide Negretti
6c6afbf148 [DURACOM-195] Base components 2024-03-07 18:32:46 +01:00
Davide Negretti
d95d5753b4 [DURACOM-195] New host-window service methods 2024-03-07 18:32:38 +01:00
Tim Donohue
2178e0e6a3 Merge pull request #2852 from DSpace/backport-2851-to-dspace-7_x
[Port dspace-7_x] fix selector value in CommunitySidebarSearchListElementComponent
2024-03-05 09:52:46 -06:00
Sascha Szott
77f3b97e46 fix selector value in CommunitySidebarSearchListElementComponent
(cherry picked from commit ad3ef56e06)
2024-03-05 15:13:14 +00:00
Tim Donohue
203b0bbbaf Merge pull request #2850 from DSpace/backport-2847-to-dspace-7_x
[Port dspace-7_x] Bump sanitize-html from 2.10.0 to 2.12.1
2024-03-04 16:37:05 -06:00
dependabot[bot]
781de6e998 Bump sanitize-html from 2.10.0 to 2.12.1
Bumps [sanitize-html](https://github.com/apostrophecms/sanitize-html) from 2.10.0 to 2.12.1.
- [Changelog](https://github.com/apostrophecms/sanitize-html/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apostrophecms/sanitize-html/compare/2.10.0...2.12.1)

---
updated-dependencies:
- dependency-name: sanitize-html
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit e7eaa9f61b)
2024-03-04 22:02:36 +00:00
Tim Donohue
6fefbe129d Merge pull request #2849 from alanorth/backport-2356-to-dspace-7_x
[Port dspace-7_x] Update dependencies for Node v20
2024-03-04 14:28:47 -06:00
Alan Orth
3add551bde [Port dspace-7_x] Update dependencies for Node v20
Port of #2356 by @mwoodiupui to dspace-7_x.
2024-03-04 20:33:12 +03:00
Tim Donohue
51f48b31dc Merge pull request #2843 from DSpace/backport-2822-to-dspace-7_x
[Port dspace-7_x] Bump ip from 2.0.0 to 2.0.1
2024-02-29 15:56:19 -06:00
dependabot[bot]
b2adc42aaf Bump ip from 2.0.0 to 2.0.1
Bumps [ip](https://github.com/indutny/node-ip) from 2.0.0 to 2.0.1.
- [Commits](https://github.com/indutny/node-ip/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: ip
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit c147c7d6ea)
2024-02-29 21:26:32 +00:00
Alexandre Vryghem
f2dab663ca 108588: Fixed browse by issue date show loading icon indefinitely when empty
(cherry picked from commit 6f51bd866c)
2024-02-23 21:40:21 +01:00
DSpace Bot
0f09920cb1 [Port dspace-7_x] site search should not adopt existing URL query string parameters (#2824)
Do not merge existing query params when using site search from MyDSpace workflow.
2024-02-22 11:50:03 +03:00
Alan Orth
41faa5ee52 Merge pull request #2821 from tdonohue/port_2733_to_7x
[Port dspace-7_x]  Use keyboard to select values (part 2)
2024-02-20 21:13:10 +03:00
Jens Vannerum
d920567f8a 111768: move original code back to init only for performance 2024-02-20 09:45:03 -06:00
Jens Vannerum
85694ec285 111768: add back necessary setCurrentValue calls that were removed earlier 2024-02-20 09:44:57 -06:00
Nona Luypaert
325728de8f 112198: Ensure relationship requests are sent one by one
- remove (de)select all buttons in DynamicLookupRelationSearchTab
- add requestQueue to RelationshipEffects
2024-02-19 11:09:05 +01:00
Tim Donohue
3ce4603328 Merge pull request #2812 from DSpace/backport-2770-to-dspace-7_x
[Port dspace-7_x] German translations of feedback page translation keys
2024-02-15 17:11:58 -06:00
Sascha Szott
9cff5e9c34 minor improvement of German translation
(cherry picked from commit e03b492dbd)
2024-02-15 22:11:36 +00:00
Sascha Szott
0fdfecd973 added german translations of feedback page translation keys
(cherry picked from commit 26ebc9f8fc)
2024-02-15 22:11:36 +00:00
Tim Donohue
9dc0363337 Merge pull request #2811 from DSpace/backport-2794-to-dspace-7_x
[Port dspace-7_x] Added scope @Input() to the SearchComponent & fixed related bugs
2024-02-15 15:16:09 -06:00
Alexandre Vryghem
d96c048874 111639: Fixed search settings not using the scope
(cherry picked from commit 93b22cba1f)
2024-02-15 20:38:01 +00:00
Alexandre Vryghem
865f4899b2 111639: Added scope @Input() and made the search facets & search results use that scope
(cherry picked from commit 22e87a5f5a)
2024-02-15 20:38:01 +00:00
Tim Donohue
b350916fe3 Merge pull request #2810 from DSpace/backport-2647-to-dspace-7_x
[Port dspace-7_x] File edit component updated to work for forms without access conditions.
2024-02-15 14:34:38 -06:00
Michael Spalti
381254a16e File edit component updated to work for forms without access conditions.
Fixed unit test

Fixed accidental reformatting

(cherry picked from commit 6fff475a5a)
2024-02-15 20:00:45 +00:00
Tim Donohue
8506d36dbf Merge pull request #2800 from alexandrevryghem/generify-component-loaders_contribute-7_x
[Port dspace-7_x] Refactored community & collection pages
2024-02-14 10:58:38 -06:00
Alexandre Vryghem
0366e8b934 Replace routerLinkActive with [class.active] to ensure visibility of aria-current tag 2024-02-14 00:10:41 +01:00
Tim Donohue
eba7683f6b Merge pull request #2803 from DSpace/backport-2705-to-dspace-7_x
[Port dspace-7_x] Minor updates to i18n strings for clarity and consistency
2024-02-07 12:31:13 -06:00
Tim Donohue
5a0018d4fa Merge pull request #2802 from DSpace/backport-2766-to-dspace-7_x
[Port dspace-7_x] Fix missing Register DOI button if configuration enabled
2024-02-07 11:48:27 -06:00
Thomas Misilo
17dc120ca1 Update "E-mail" to be "Email" for consistency
(cherry picked from commit 7b8962a7cd)
2024-02-07 17:23:05 +00:00
Alan Orth
8eb2e2ce80 src/assets/i18n/en.json5: minor changes for consistency
Fix some random capitalizations and strange wording.

(cherry picked from commit d6c46847c2)
2024-02-07 17:23:05 +00:00
Alan Orth
b2b9fb8bf9 src/assets/i18n/en.json5: minor updates for consistency
We should be capitalizing acronyms and project-specific nouns like
MyDSpace consistently in our interface.

(cherry picked from commit f78f4b45fc)
2024-02-07 17:23:05 +00:00
Alan Orth
9d9d90ab9c src/assets/i18n: change "controller" to "reviewer"
Reviewer is a less obscure term for what this actually is in most
cases.

(cherry picked from commit 98241d8925)
2024-02-07 17:23:05 +00:00
Tim Donohue
ccd7056a87 Merge pull request #2801 from DSpace/backport-2799-to-dspace-7_x
[Port dspace-7_x] Bump follow-redirects from 1.15.3 to 1.15.5
2024-02-07 11:06:06 -06:00
Kim Shepherd
c50dd1a3e9 Improve cfg handling in item-status.component.ts
(cherry picked from commit 68475d1ed6)
2024-02-07 16:57:19 +00:00
Kim Shepherd
8b3bc90864 Improve cfg handling in item-status.component.ts
(cherry picked from commit 3e33785311)
2024-02-07 16:57:19 +00:00
Agustina Martinez
9f99555c64 Update item-status.component.ts
Fix initialOperations typo and return ops with register doi op

(cherry picked from commit e77898eaac)
2024-02-07 16:57:19 +00:00
dependabot[bot]
eb4633557d Bump follow-redirects from 1.15.3 to 1.15.5
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.5.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.5)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 90a277fbeb)
2024-02-07 16:34:28 +00:00
Alexandre Vryghem
effa19f719 111679: Restored missing inAndOutputNames on ClaimedTaskActionsLoaderComponent 2024-02-07 13:56:08 +01:00
Alexandre Vryghem
835891fe59 Merge remote-tracking branch 'upstream/dspace-7_x' into generify-component-loaders_contribute-7_x
# Conflicts:
#	src/app/shared/theme-support/themed.component.ts
2024-02-07 00:18:22 +01:00
Alexandre Vryghem
ff55646c62 108588: Fixed accessibility issues on ds-comcol-page-browse-by 2024-02-07 00:17:46 +01:00
Tim Donohue
972c1098cb Merge pull request #2798 from DSpace/backport-2795-to-dspace-7_x
[Port dspace-7_x] fix German translation of admin.workflow.item.workflow
2024-02-06 16:03:36 -06:00
Sascha Szott
59fc3e5635 remove translation (use singular form instead of plural form)
(cherry picked from commit ac5670a514)
2024-02-06 22:03:10 +00:00
Tim Donohue
60b310e216 Merge pull request #2796 from tdonohue/port_2791_to_7x
[Port dspace-7_x] Fix issue with cli.yml not using same network as backend.
2024-02-05 16:08:24 -06:00
Tim Donohue
b9cc5ba824 Resync docker-compose-ci and docker/docker-compose-rest with DSpace/DSpace docker scripts 2024-02-05 14:19:53 -06:00
Tim Donohue
f072ae74af Bug fix to GitHub CI build. Set compose project name via env variable. Also add default name if unspecified 2024-02-05 11:14:00 -06:00
Tim Donohue
e2d014d0a6 Update cli.yml to reference dspacenet in docker-compose-rest. Remove unnecessary network from cli.assetstore.yml 2024-02-05 11:13:53 -06:00
Tim Donohue
ab579da614 Merge pull request #2790 from DSpace/backport-2778-to-dspace-7_x
[Port dspace-7_x] Dedupe patch operations by op and path
2024-02-01 13:50:52 -06:00
William Welling
05c978bc62 Dedupe patch operations by op and path
(cherry picked from commit f40639de86)
2024-02-01 19:00:52 +00:00
Tim Donohue
95c635c451 Merge pull request #2786 from tdonohue/port_2717_to_7x
[Port dspace-7_x] Fix accessibility issues (part 2)
2024-01-31 11:56:18 -06:00
Alexandre Vryghem
3e48e5903e Fixed dropdown accessibility issue
- Removed non-existing dropdownMenuButton references
- Added appropriate roles to dropdown menus
2024-01-31 09:51:19 -06:00
Alexandre Vryghem
63fa8f39f5 Fixed user authentication/registration accessibility issue
- Added the correct autocomplete value
- Removed dangling labels, because aria labels already describe those input fields & we can't use ids in this component because otherwise there are duplicate ids on the /login page
2024-01-31 09:51:09 -06:00
Alexandre Vryghem
138e163fa8 Fixed edit metadata page accessibility issue
- Hide fontawesome icons for screen readers
- Added missing aria-label to metadata field input
2024-01-31 09:51:03 -06:00
Alexandre Vryghem
ac743c5138 Fixed feedback form page accessibility issue
- The form used a fieldset tag instead of a form tag
2024-01-31 09:50:58 -06:00
Alexandre Vryghem
37803e9330 Fixed remaining community/collection page accessibility issues
- Hide fontawesome icons for screen readers
- Replaced dangling labels with spans and added more descriptive aria label to browse link
- Fixed empty label/missing header in edit resource policy table
- Added missing comcol logo al text
- Refactored dso-edit-menu-section to not display empty link buttons and duplicate titles
2024-01-31 09:50:50 -06:00
Alexandre Vryghem
8b5cd79bdc Fixed accessibility issues on AccessControlFormContainerComponent
- Replaced invisible label in AccessControlArrayFormComponent that was only used for styling with span
- Fixed radio buttons not being part of a fieldset
- Fixed empty table header
2024-01-31 09:50:44 -06:00
Alexandre Vryghem
949e55235a Fixed accessibility issues on BitstreamFormatsComponent
- Removed empty label of the select box and replaced it with an aria-label
- Fixed empty table header
2024-01-31 09:50:38 -06:00
Alexandre Vryghem
5173ac3704 Fixed accessibility issues on MetadataRegistryComponent
- Removed empty label of the select box and replaced it with an aria-label
- Fixed empty table header
2024-01-31 09:50:31 -06:00
Alexandre Vryghem
9335c32334 Fixed accessibility issues on MetadataSchemaComponent
- Removed empty label of the select box and replaced it with an aria-label
- Fixed empty table header
2024-01-31 09:50:23 -06:00
Alexandre Vryghem
b0d3710454 Fixed accessibility issues with pagination button
- Replaced the h6 tags with the role heading
- Gave the gear button the roles in order to be detected as an expandable menu
- Replaced the dropdown structure to render a menu of listboxes
- Added the aria-selected attribute
2024-01-31 09:49:38 -06:00
Alexandre Vryghem
e0849af926 Fix header ordering 2024-01-31 09:42:30 -06:00
Alexandre Vryghem
b076b98996 Fixed accessibility issues on SubmissionImportExternalSearchbarComponent
- Fixed input not describing itself
- Put the items from the dropdown in an ul
- Fixed broken aria labels
- Removed titles who where identical to the displayed value
2024-01-31 09:42:24 -06:00
Alexandre Vryghem
cc0501f340 Fixed search filters having empty input buttons 2024-01-31 09:42:17 -06:00
Alexandre Vryghem
6b204b5b53 Removed invisible buttons on the CommunityListComponent & fixed content displacement when expanding com/col 2024-01-31 09:42:12 -06:00
Alexandre Vryghem
3bf7d819de Fixed accessibility issues related to dso selectors
- Fixed header ordering
- Fixed input field not having a description what it does (because the header isn't always shown I decided to use aria-labels instead of regular labels)
2024-01-31 09:42:04 -06:00
Alexandre Vryghem
6497a156aa Destroy dynamically generated components in onDestroy & replace deprecated createComponent 2024-01-31 00:06:44 +01:00
Tim Donohue
67fc0054c1 Merge pull request #2773 from DSpace/backport-2755-to-dspace-7_x
[Port dspace-7_x] Add logo max constraints
2024-01-25 15:53:07 -06:00
FrancescoMolinaro
d4493cb534 add width 100% to prevent overflow on mobile
(cherry picked from commit f82ba8c5ad)
2024-01-25 21:08:11 +00:00
FrancescoMolinaro
682ec2b678 remove class from template
(cherry picked from commit d9e25882ce)
2024-01-25 21:08:11 +00:00
FrancescoMolinaro
20f5f17aac adapt solution to prevent img overflow
(cherry picked from commit d3c788a4e1)
2024-01-25 21:08:11 +00:00
FrancescoMolinaro
f1a7f36f17 add logo max costraints
(cherry picked from commit 32e3141b19)
2024-01-25 21:08:11 +00:00
Tim Donohue
5d700d5563 Merge pull request #2772 from DSpace/backport-2769-to-dspace-7_x
[Port dspace-7_x] fixed typo in info.feedback.page_help
2024-01-25 11:02:51 -06:00
Sascha Szott
c11a3b1372 fixed typo
(cherry picked from commit 4b7798fcc7)
2024-01-25 16:25:48 +00:00
Alan Orth
be0512d74e Merge pull request #2764 from alanorth/backport-2733-to-dspace-7_x
[Port dspace-7_x] Use keyboard to select values
2024-01-23 12:18:28 +03:00
Jens Vannerum
2d0d6ddc5d 110088: new implementation for keyboard support in dropdowns 2024-01-23 11:43:37 +03:00
Tim Donohue
b2cae3b48d Merge pull request #2758 from DSpace/backport-2691-to-dspace-7_x
[Port dspace-7_x] Decrease min-height for Login Dropdown Menu
2024-01-19 11:12:03 -06:00
Tim Donohue
5f19b6a26a Merge pull request #2757 from DSpace/backport-2736-to-dspace-7_x
[Port dspace-7_x] use localized error message
2024-01-19 11:11:50 -06:00
Thomas Misilo
d880b728ce Decrease min-height for Login Dropdown Menu
Fixes #2690

This is noticable when you have disabled local authentication, and only have a singular remote authentication such as Shibboleth or Orcid.

(cherry picked from commit 09fc44a539)
2024-01-19 15:25:12 +00:00
Sascha Szott
e7490340f8 use localized error message
(cherry picked from commit 92a74cee5a)
2024-01-19 15:21:44 +00:00
Alan Orth
fed70c5e9b Merge pull request #2754 from DSpace/backport-2721-to-dspace-7_x
[Port dspace-7_x] Fix whitespace in links due to newlines
2024-01-19 10:07:44 +03:00
Alan Orth
f08d74b269 src/app/item-page: remove newlines in links
The newlines cause whitespace to be enapsulated in the rendered link.

(cherry picked from commit 7207bbbd0e)
2024-01-19 05:14:00 +00:00
Alan Orth
f2f5156065 src/app/community-list-page: remove newlines in links
The newlines cause whitespace to be enapsulated in the rendered link.

(cherry picked from commit 7bedf7fc59)
2024-01-19 05:14:00 +00:00
Tim Donohue
0ed96d893d Merge pull request #2748 from DSpace/backport-2711-to-dspace-7_x
[Port dspace-7_x] Add more automated accessibility scanning to e2e tests & fix a few minor accessibility bugs
2024-01-17 14:09:02 -06:00
Tim Donohue
2137720602 Add environment variable for Person collection name. Use it in submission e2e tests.
(cherry picked from commit a5a89a4b98)
2024-01-17 19:38:04 +00:00
Tim Donohue
12a19378f7 Move increment/decrement to i18n. Update to use "name".
(cherry picked from commit 0aaf3131fa)
2024-01-17 19:38:04 +00:00
Tim Donohue
75c81b712e Add accessibility testing for admin sidebar
(cherry picked from commit 31bc05235e)
2024-01-17 19:38:04 +00:00
Tim Donohue
4e0a889fa1 Add Item Edit accessibility tests. Switch Item to use to one with bitstreams. Minor updates to HTML to pass accessibility tests.
(cherry picked from commit 80492cd88a)
2024-01-17 19:38:04 +00:00
Tim Donohue
9a7277065f Add accessibility tests (and minor fixes) for Edit Collection's Content Source tab and Item Mapper tab
(cherry picked from commit 00cb2f9e8a)
2024-01-17 19:38:04 +00:00
Tim Donohue
16a10548b8 Add Edit Collection accessibility Testing
(cherry picked from commit 9894d315a0)
2024-01-17 19:38:04 +00:00
Tim Donohue
4187847ad0 Add Edit Community accessibility tests & minor cleanup
(cherry picked from commit 6c76d8c1d7)
2024-01-17 19:38:04 +00:00
Tim Donohue
77bb3ed952 Fix circular dependency issue by using Cypres env variables directly instead of global constants
(cherry picked from commit e47593b303)
2024-01-17 19:38:04 +00:00
Tim Donohue
023f8a6900 Improve accessibility testing on Submission page
(cherry picked from commit 8d61fa6ac3)
2024-01-17 19:38:04 +00:00
Tim Donohue
0be04c754a Refactor e2e test infrastruction to allow easier way to lookup REST API info and generate CSRF tokens
(cherry picked from commit a581219df5)
2024-01-17 19:38:04 +00:00
Tim Donohue
07b95c2634 Fix ARIA labels and tabindex on date picker in submission form. Tabindex is unnecessary & throws accessibility errors from AXE tools
(cherry picked from commit 5dad8bec39)
2024-01-17 19:38:04 +00:00
Tim Donohue
e9efb50e02 Fix ARIA labels on submission form relationship button and dynamic dropdowns
(cherry picked from commit aeea1cd592)
2024-01-17 19:38:04 +00:00
Tim Donohue
868229460f Add new e2e accessibility tests & update some existing ones
(cherry picked from commit 53d521a87e)
2024-01-17 19:38:04 +00:00
Tim Donohue
9d593b657b Merge pull request #2743 from tdonohue/port_2587_to_dspace-7_x
[Port to dspace-7_x]  Deque Analysis Color Contrast fixes #2587
2024-01-16 16:48:13 -06:00
Maciej Kleban
0b43109a29 Replace hard-coded colors with bootstrap variants
* Replace custom variables with Bootstrap variants
* Replace custom button colors with Bootstrap variants
* Remove custom colors and replace them with bootstrap variants
* Fix checkbox offset styles
---------
Co-authored-by: Maciej Kleban <maciej.kleban@pcgacademia.pl>
2024-01-16 16:15:35 -06:00
Dawnkai
07a2f3bbbb Deque Analysis Color Contrast fixes 2024-01-16 16:04:27 -06:00
Alan Orth
fc28693b12 Merge pull request #2740 from DSpace/backport-2662-to-dspace-7_x
[Port dspace-7_x] Fixed ePerson link on edit group page
2024-01-12 08:51:21 +03:00
Alexandre Vryghem
77d2086796 Fixed ePerson link on edit group page
(cherry picked from commit 430ee3846a)
2024-01-12 05:25:16 +00:00
Tim Donohue
8dd0db094e Merge pull request #2670 from atmire/fix-api-undefined-issue-7.6.2-next
Ensure HALEndpointService doesn't use stale responses
2024-01-08 10:16:57 -06:00
Alexandre Vryghem
b28e24fda3 Merge branch 'memory-leak-fixes_contribute-7.4' into memory-leak-fixes_contribute-7.6
# Conflicts:
#	src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component.ts
#	src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component.ts
#	src/app/shared/metadata-representation/metadata-representation-loader.component.ts
#	src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.ts
#	src/app/shared/theme-support/themed.component.ts
2023-12-28 19:58:37 +01:00
Alexandre Vryghem
480c7a6ce0 Destroy dynamically generated components in onDestroy & replace deprecated createComponent 2023-12-26 14:31:07 +01:00
Tim Donohue
33a5dd3e7f Merge pull request #2713 from DSpace/backport-2707-to-dspace-7_x
[Port dspace-7_x] Update fi.json5
2023-12-14 11:22:36 -06:00
reetagithub
9a9311e02a Update fi.json5
Corrected a typo  in search.view.switch.show-grid

(cherry picked from commit 2339a559e9)
2023-12-14 16:16:00 +00:00
Tim Donohue
2fec884072 Merge pull request #2696 from DSpace/backport-2683-to-dspace-7_x
[Port dspace-7_x] Fix accessibility issues
2023-12-06 10:30:55 -06:00
Alexandre Vryghem
4a0bf8a7af Fixed Edit Item Bitstream showing empty buttons when css is turned off & replaced authentication dropdown menu link with button
- Also fixed box-shadows not working the same way for all footer buttons/links

(cherry picked from commit 4545b5354d)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
53f5ceabee Fixed Edit Item Bitstream showing empty buttons when css is turned off
(cherry picked from commit ff6dff72d8)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
8f8a3acba7 Fixed DSONameService getName & getHitHighlights returning empty string for OrgUnits without organization.legalName field
(cherry picked from commit e96d3cd2e9)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
dbb7917058 Fixed accessibility issues on search page
(cherry picked from commit 9a5ad0bc9f)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
7ec57988b8 Fixed accessibility issues about header ordering
(cherry picked from commit 5566c99625)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
3300f72621 Fixed browse by vocabulary treeview accessibility issues
(cherry picked from commit 30fe424cc5)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
77f52df047 Fixed item page accessibility issues
(cherry picked from commit 8ba17c991e)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
79ce4e9ec2 Fix collection mapper accessibility issues
- Added missing aria-labels to input checkboxes
- Fixed multiple tab related accessibility issues

(cherry picked from commit 1db83ba3c5)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
73cffe990a Fix item mapper accessibility issues
- Added missing aria-labels to input checkboxes
- Fixed role="tablist" not having direct role="tab" by adding role="presentation" on the li elements

(cherry picked from commit 5b21d14583)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
b94f0a9b69 Fix resource policy accessibility issues
(cherry picked from commit 09bf8af03c)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
5d5582e2d2 Fix Bitstream format accessibility issues
- Added missing aria-labels to input checkboxes
- Fixed minor css alignment

(cherry picked from commit 57cc34cdd1)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
5e52233cf3 Fix Process detail accessibility issues
- Made Process Output keyboard accessible

(cherry picked from commit 120835cfcd)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
9ed13f31ff Fix Create a new process page accessibility issues
- Added missing aria-label to delete buttons
- Moved hardcoded translation to translation files
- Fix color contrast issues on buttons
- Fix minor alignment issues
- Added missing aria labels to input and select elements

(cherry picked from commit 52c0977489)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
bc1ed9a96f Fix Processes Overview accessibility issues
- Added missing aria-label to delete button

(cherry picked from commit 4ea487cc0d)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
57ebe88994 Fix System-wide Alert accessibility issues
- Added missing aria-label to buttons

(cherry picked from commit 3bdfc386e9)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
96b3423ed1 Fix Health Panel usability issues
- Fixed aria-controls on HealthComponentComponent, HealthInfoComponent, HealthInfoComponentComponent, HealthPanelComponent pointing to non-existing id
- Fixed the tabs not having the role tab on its tabs
- Fixed aria-expanded being set to true when collapsed and backwards for HealthPanelComponent & HealthInfoComponent
- Fixed role="tablist" not having direct role="tab" by adding role="presentation" on the li elements
- Fixed minor alignment issues

(cherry picked from commit 3628c84844)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
fc7aa27706 Fix Bulk Access Management usability issues
- Added aria-labels to trash & select bitstream icon
- Added aria-labels ui-switch components (had to upgrade ngx-ui-switch to 14.1.0)
- Fixed aria-controls pointing to non-existing ids
- Fixed bulk-access-browse not having the tab role on it's tabs
- Fixed role="tablist" not having direct role="tab" by adding role="presentation" on the li elements
- Fixed aria-expanded being set to true when collapsed and backwards for BulkAccessBrowseComponent & BulkAccessSettingsComponent

(cherry picked from commit c300123b78)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
1c4be7d1fe Fixed duplicate search-navbar-container id & renabled accessibility tests for header
(cherry picked from commit cc71d60ebb)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
9f468c2c11 Added aria-labels & fixed aria-controls on myDSpace page
- Added aria-label to the new submission buttons (for repositories with more than 1 entity type)
- Fixed aria-controls pointing to non-existing ids

(cherry picked from commit 8a7bdfe18f)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
69100f0a24 Replaced uncrawlable links with buttons
(cherry picked from commit 9ab30231aa)
2023-12-06 16:03:23 +00:00
Alexandre Vryghem
d32303bf47 Added missing aria labels to edit bitstream tab
(cherry picked from commit e229be44d6)
2023-12-06 16:03:23 +00:00
Art Lowel
91789a698f Merge branch 'fix-api-undefined-issue-7.6' into fix-api-undefined-issue-7.6.2-next 2023-12-06 11:30:28 +01:00
Art Lowel
1d4a36e3b8 Merge remote-tracking branch 'upstream/dspace-7_x' into fix-api-undefined-issue-7.6.2-next 2023-12-06 11:30:23 +01:00
Art Lowel
790e717199 add ResponsePendingStale state 2023-12-06 11:24:35 +01:00
Art Lowel
c8ac260b78 also skip loading hal requests 2023-12-06 11:24:29 +01:00
max.nuding
9f95eb452c enable type-bind for checkbox inputs during submission 2023-12-06 10:15:31 +01:00
Tim Donohue
970c449b30 Merge pull request #2685 from DSpace/backport-2684-to-dspace-7_x
[Port dspace-7_x] Updated bitstream read description in en.json5
2023-12-04 15:57:39 -06:00
Michael Spalti
3b568f7d32 Updated bitstream read description in en.json5
(cherry picked from commit 2592f87356)
2023-12-04 21:08:29 +00:00
Tim Donohue
5de6cedf5e Merge pull request #2677 from DSpace/backport-2673-to-dspace-7_x
[Port dspace-7_x] Fix for loading thumbnail images for Items when MediaViewer enabled
2023-11-30 15:08:01 -06:00
Michael Spalti
9c69a77d43 Fix for thumbnail images in items.
Revert changes in html template

Revert changes in html template

Revert changes in html template

(cherry picked from commit 88c39e8b26)
2023-11-30 20:14:36 +00:00
Art Lowel
db29263eb1 Merge branch 'fix-api-undefined-issue-7.6' into fix-api-undefined-issue-7.6.2-next 2023-11-29 16:58:43 +01:00
Tim Donohue
5b59d37e2f Merge pull request #2667 from tdonohue/port_2666_to_dspace-7_x
[Port dspace-7_x] [Docker] Refactor to simply use the reusable-docker-build.yml from DSpace/DSpace.
2023-11-29 09:38:51 -06:00
Art Lowel
38752d9d71 ensure HALEndpointService doesn't use stale requests 2023-11-29 14:25:36 +01:00
Tim Donohue
92d25dd2a8 Remove unused env variables 2023-11-28 16:52:15 -06:00
Tim Donohue
65fff9361c Use the script from the dspace-7_x branch 2023-11-28 16:13:56 -06:00
Tim Donohue
b83a8421a3 Refactor to simply use the reusable-docker-build.yml from DSpace/DSpace. 2023-11-28 16:12:21 -06:00
Alan Orth
714652ebb0 Merge pull request #2659 from DSpace/backport-2652-to-dspace-7_x
[Port dspace-7_x] Deselect all metadata fields when switching between metadata schemas in registry
2023-11-23 16:27:52 +03:00
Alexandre Vryghem
c3f424dae4 108587: Deselect all fields on component destruction
(cherry picked from commit ecca8286b5)
2023-11-23 04:57:35 +00:00
Tim Donohue
6758b4c4c7 Merge pull request #2655 from tdonohue/port_docker_gh_updates
[Port dspace-7_x] Port recent GitHub Action changes
2023-11-22 12:20:58 -06:00
Tim Donohue
bd78acd559 Redeploy demo/sandbox more quickly by only waiting for AMD64 image 2023-11-22 11:42:11 -06:00
Tim Donohue
62ccd18345 Trigger redeploy of demo/sandbox from GitHub Actions after DockerHub image updated. 2023-11-21 13:55:17 -06:00
Tim Donohue
5ab87ec6c3 Update GH actions to latest versions. Fix bug in codecov to ensure it retries on error. 2023-11-21 13:55:10 -06:00
Tim Donohue
63e792990f Fix directory structure for -dist digests 2023-11-21 13:54:42 -06:00
Tim Donohue
526da8cddf Fix bug in Docker manifest. Each build must use a separate artifact to store digests. Other minor cleanup & comments added. 2023-11-21 13:54:30 -06:00
Thomas Misilo
02eb618c5f Setup the Docker GH Action for Matrix Building
This change enables building of the amd64 and arm64 images simultaneously.

Once both images finish, the manifest is sent to Docker Hub, allowing for a single image that has both the amd64/arm64 images.
2023-11-21 13:54:03 -06:00
Alexandre Vryghem
45e8977db7 Fixed pagination issues on item mapper 2023-11-15 23:31:54 +01:00
Tim Donohue
5a839c2906 Update version tag for development of next release 2023-11-15 14:37:06 -06:00
Tim Donohue
d8ed267e5f Update version tag for release 2023-11-15 14:33:16 -06:00
max.nuding
ab23613b79 Remove unnecessary import 2023-11-15 13:42:53 +01:00
max.nuding
c93a64db83 Fix tests to include translationservice dependency 2023-11-15 13:28:15 +01:00
max.nuding
038e31ccd1 Submission form now displays custom messages for regex validated fields if they exist 2023-11-15 10:51:53 +01:00
Tim Donohue
fdcaeb592c Merge pull request #2639 from tdonohue/port_2610_to_dspace-7_x
[Port dspace-7_x] Fixed menu not updating when a new sub section is added after rendering has already completed
2023-11-13 17:00:20 -06:00
Tim Donohue
8872fd3340 Merge pull request #2638 from DSpace/backport-2633-to-dspace-7_x
[Port dspace-7_x] Edit-item view: random order of buttons in status tab
2023-11-13 16:51:21 -06:00
Tim Donohue
959d592394 Merge pull request #2637 from DSpace/backport-2632-to-dspace-7_x
[Port dspace-7_x] Fixes "some item edit pages are accessible by anonymous users"
2023-11-13 16:40:19 -06:00
Alexandre Vryghem
c98e8f6504 107902: Created test case for 2f26e686cc 2023-11-13 16:36:05 -06:00
Kristof De Langhe
e293f3db52 107685: menu-component re-render section on store update 2023-11-13 16:35:16 -06:00
Vlad Nouski
651b6a7d76 refactor: code
(cherry picked from commit fbbbc18844)
2023-11-13 22:05:45 +00:00
Vlad Nouski
dd554590b1 fix: random order of buttons in status tab
(cherry picked from commit 35f8b55f58)
2023-11-13 22:05:45 +00:00
Tim Donohue
0a3502e9cc Merge pull request #2636 from DSpace/backport-2562-to-dspace-7_x
[Port dspace-7_x] Fix match theme by handle with canonical prefix https://hdl.handle.net/ not working
2023-11-13 16:00:02 -06:00
Vlad Nouski
94866cab45 [DURACOM-202] refactor: code
(cherry picked from commit 6f64db1645)
2023-11-13 20:34:42 +00:00
Vlad Nouski
a5a59dcf8b [DURACOM-202] refactor: code
(cherry picked from commit b6d515ff09)
2023-11-13 20:34:42 +00:00
Vlad Nouski
8f9a358afb [DURACOM-202] feature: item edit pages are accessible by administrator
(cherry picked from commit ccf1cc4547)
2023-11-13 20:34:42 +00:00
Alexandre Vryghem
0cd72e4917 107671: Fixed theme matching by handle not working in production mode
(cherry picked from commit 7529ed8b35)
2023-11-13 20:21:10 +00:00
Alexandre Vryghem
1222ed45ca 107671: Fixed bug where config property would still sometimes be undefined whey calling the ngOnDestroy in the ThemedComponent
(cherry picked from commit 4e54cca600)
2023-11-13 20:21:10 +00:00
Alexandre Vryghem
27f3fc310f 107671: Split Theme model & ThemeConfig classes in separate files to prevent circular dependencies
(cherry picked from commit da8880e5ba)
2023-11-13 20:21:10 +00:00
Alexandre Vryghem
d3fdfebde1 107671: Fix handle theme not working with canonical prefix https://hdl.handle.net/
(cherry picked from commit a7faf7d449)
2023-11-13 20:21:10 +00:00
Tim Donohue
626cc30738 Merge pull request #2635 from DSpace/backport-2579-to-dspace-7_x
[Port dspace-7_x] adding new access-status-list-element-badge css classes
2023-11-13 13:19:23 -06:00
Tim Donohue
64364c9ddb Merge pull request #2634 from DSpace/backport-2630-to-dspace-7_x
[Port dspace-7_x] Fix handle redirect not working with custom nameSpace
2023-11-13 13:18:52 -06:00
Paulo Graça
a276f415a8 adding ngOnDestroy for dealing with unsubscribe
(cherry picked from commit 75b788d05b)
2023-11-13 17:30:28 +00:00
Paulo Graça
59c4d59e45 remove replaceAll and use an object property
(cherry picked from commit c7eae9242a)
2023-11-13 17:30:28 +00:00
Paulo Graça
a12488c827 new accessStatusClass atribute
(cherry picked from commit 6378dbec4a)
2023-11-13 17:30:28 +00:00
Paulo Graça
ff03243298 Create new access-status-badge.component.scss
(cherry picked from commit 3bf2eb1997)
2023-11-13 17:30:28 +00:00
Paulo Graça
116bfbded1 adding new access-status-list-element-badge css classes
(cherry picked from commit e847e4ef51)
2023-11-13 17:30:28 +00:00
Alexandre Vryghem
68cdd120c9 Fix handle redirect not working with custom nameSpace
(cherry picked from commit b894dce3b0)
2023-11-13 17:22:53 +00:00
Tim Donohue
7d5c4560cd Merge pull request #2629 from tdonohue/port_2620_to_dspace-7_x
[Port dspace-7_x] Fix for repeatable date field labels
2023-11-10 17:20:40 -06:00
Tim Donohue
755e89dffa Merge pull request #2628 from DSpace/backport-2625-to-dspace-7_x
[Port dspace-7_x] Bump axios from 0.27.2 to 1.6.0
2023-11-10 17:15:22 -06:00
lotte
8458d589b2 Fixed test 2023-11-10 16:40:31 -06:00
lotte
30ce8440e1 108045: Fix for repeatable date field labels 2023-11-10 16:39:38 -06:00
dependabot[bot]
c8d98ec0b1 Bump axios from 0.27.2 to 1.6.0
Bumps [axios](https://github.com/axios/axios) from 0.27.2 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.27.2...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit ef9f31d3c6)
2023-11-10 22:23:44 +00:00
Tim Donohue
6975fd15d5 Merge pull request #2627 from DSpace/backport-2545-to-dspace-7_x
[Port dspace-7_x] Fix "Edit Group" page always requests all member Subgroups & EPersons
2023-11-10 15:14:27 -06:00
Tim Donohue
d305e6096a Address feedback. Run empty search on init. Reorder sections to list current members before add members (for both eperson and groups)
(cherry picked from commit 9117ac005f)
2023-11-10 19:03:47 +00:00
Tim Donohue
37ae09acd1 Remove seemingly unnecessary page reload after new search.
(cherry picked from commit d163db13f2)
2023-11-10 19:03:47 +00:00
Tim Donohue
8cc36d7056 Refactor subgroups-list component's "search()" to act same as member-list component's "search()". Avoids reloading the page as frequently.
(cherry picked from commit 2eb1a17e4e)
2023-11-10 19:03:47 +00:00
Tim Donohue
4a1f2a1b75 Refactor members-list and subgroups-list components to use new isNotMemberOf endpoints (via services)
(cherry picked from commit 8a10888d2a)
2023-11-10 19:03:47 +00:00
Tim Donohue
1f1dc59f8b Fix subgroups-list specs so they align with new members-list specs
(cherry picked from commit 64f968b246)
2023-11-10 19:03:47 +00:00
Tim Donohue
f0b4239df9 Also remove unnecessary EpersonDtoModel from extending ReviewersListComponent. Remove "memberOfGroup" from EpersonDtoModel as it is no longer used
(cherry picked from commit b598f1b5ca)
2023-11-10 19:03:47 +00:00
Tim Donohue
753a31f7f4 Remove unnecessary EpersonDtoModel. Rework code and tests to use EPerson instead.
(cherry picked from commit bffae54b10)
2023-11-10 19:03:47 +00:00
Tim Donohue
ac6a7be7aa Remove "isMemberOfGroup()" from members-list component.
(cherry picked from commit 43d37196fb)
2023-11-10 19:03:47 +00:00
Tim Donohue
c02cfff8da Fix bug where linked Community/Collection info was sometimes listed many times in a row
(cherry picked from commit 229236634a)
2023-11-10 19:03:47 +00:00
Tim Donohue
d7ccce1f8f Remove isSubgroupOfGroup() functionality as it loads every subgroup at once. Bad peformance for large groups
(cherry picked from commit 97479a2945)
2023-11-10 19:03:47 +00:00
Tim Donohue
139446118b Limit getMembers() and getSubgroups() to only fetching one object. These lists are only used to find the size of each
(cherry picked from commit 0da7c15f2e)
2023-11-10 19:03:47 +00:00
Tim Donohue
787feae631 Merge pull request #2626 from tdonohue/port_2607_to_dspace-7_x
[Port dspace-7_x] Added skip to main content button
2023-11-10 11:43:15 -06:00
Alexandre Vryghem
e545c42aae Added skip to main content button 2023-11-10 10:59:57 -06:00
Tim Donohue
d166b5e37a Merge pull request #2623 from DSpace/backport-2611-to-dspace-7_x
[Port dspace-7_x] Communities & Collections tree browser updates - Replaced #2597
2023-11-10 09:55:38 -06:00
Tim Donohue
61ded72183 Merge pull request #2616 from DSpace/backport-2574-to-dspace-7_x
[Port dspace-7_x] Support type-bind of elements based on repeatable list type-bound element (CHECKBOX_GROUP)
2023-11-10 09:15:59 -06:00
William Welling
b6d8c7d18e Filter expanded nodes by id
Co-Authored-By: Art Lowel <1567693+artlowel@users.noreply.github.com>
(cherry picked from commit dc2ef989e6)
2023-11-10 15:14:28 +00:00
William Welling
1d0ca04992 Update condition to render show more node
`loadingNode` ends up being the current `node` after clicking it preventing it from rendering when more pages available.

Update community list component spec

Make the show more flat node id unique

The nodes with same id are conflicting when added to the tree. Clicking on the second with same id places the show more button under the wrong branch and expands the wrong page.

(cherry picked from commit 11d3771e72)
2023-11-10 15:14:28 +00:00
Tim Donohue
34b91a7dea Merge pull request #2617 from DSpace/backport-2594-to-dspace-7_x
[Port dspace-7_x] Media viewer controls rendered behind DSpace header
2023-11-10 06:49:12 -06:00
Tim Donohue
203dcbebda Merge pull request #2612 from DSpace/backport-2596-to-dspace-7_x
[Port dspace-7_x] Fix cache issue when depositing a submission
2023-11-09 16:53:28 -06:00
Davide Negretti
c6ade09e4a [DURACOM-180] Prevent header from covering media viewer controls (base theme)
(cherry picked from commit c042cd8d11)
2023-11-09 22:44:28 +00:00
Davide Negretti
5f46b638e4 [DURACOM-180] Prevent header from covering media viewer controls (dspace theme)
(cherry picked from commit 0208a78437)
2023-11-09 22:44:28 +00:00
Davide Negretti
0d0c2dac17 [DURACOM-195] Simplify vertical spacing in header and breadcrumbs
(cherry picked from commit a3e6d9b09a)
2023-11-09 22:44:28 +00:00
Andreas Mahnke
bc21085398 Support type-bind of elements based on repeatable list type-bound element (CHECKBOX_GROUP)
(cherry picked from commit 09aaa46875)
2023-11-09 22:04:12 +00:00
Tim Donohue
137a83e7f1 Merge pull request #2614 from DSpace/backport-2595-to-dspace-7_x
[Port dspace-7_x] Add UI nameSpace context path to Mirador viewer path
2023-11-09 13:40:03 -06:00
Alan Orth
31ee580047 Merge pull request #2615 from DSpace/backport-2602-to-dspace-7_x
[Port dspace-7_x] Support for freetext values in submission for vocabulary controlled `onebox` and `tag` types
2023-11-09 22:39:53 +03:00
Jens Vannerum
e815b1d938 108055: add user input to tag list
(cherry picked from commit aac58e612d)
2023-11-09 18:56:37 +00:00
Jens Vannerum
a758848146 108055: fix issue 8686: unable to enter freetext values in the submission form for vocabulary
(cherry picked from commit 0dcf6cb885)
2023-11-09 18:56:37 +00:00
William Welling
fba30781de Add UI nameSpace context path to Mirador viewer path
(cherry picked from commit 3228c457a3)
2023-11-09 17:45:22 +00:00
Giuseppe Digilio
4b4c1dc08a [DURACOM-197] Fix cache issue when depositing a submission
(cherry picked from commit f992ff6671)
2023-11-09 17:31:52 +00:00
Tim Donohue
5eb62e22eb Merge pull request #2605 from DSpace/backport-2364-to-dspace-7_x
[Port dspace-7_x] Utility gap-* classes for flexbox
2023-11-08 16:57:59 -06:00
Tim Donohue
fbe4732450 Merge pull request #2590 from marcoaureliocardoso/dspace-7_x
fix(pt-BR.json5): fix and update the language file
2023-11-08 16:49:38 -06:00
Davide Negretti
c5f22ab959 [DURACOM-177] Use gap-* classes on navbar buttons
(cherry picked from commit a35629536e)
2023-11-08 22:15:29 +00:00
Davide Negretti
75e45cc8c2 [DURACOM-177] gap-* classes
(cherry picked from commit 930a381e4a)
2023-11-08 22:15:29 +00:00
Tim Donohue
5bb451a649 Merge pull request #2604 from DSpace/backport-2603-to-dspace-7_x
[Port dspace-7_x] Fix e2e tests by running in production mode & using a user-agent for statistics
2023-11-08 13:13:21 -06:00
Tim Donohue
042c0f06f1 Specify user agent to avoid being detected as a "bot" by backend
(cherry picked from commit 72cda41731)
2023-11-08 18:25:13 +00:00
Tim Donohue
f3f87dc928 Ensure e2e tests run in production mode
(cherry picked from commit 7dcaae8465)
2023-11-08 18:25:13 +00:00
Tim Donohue
4a10d37d0d Merge pull request #2598 from DSpace/backport-2593-to-dspace-7_x
[Port dspace-7_x] Fix "Submission input type date doesn't work properly once a value has been set"
2023-11-03 15:56:55 -05:00
Alisa Ismailati
c99487babc [DURACOM-194] fixed year input value on input type date
(cherry picked from commit c412c1fa13)
2023-11-03 20:15:37 +00:00
Alisa Ismailati
e54723aa85 Merged in DSC-106 (pull request #643)
[DSC-106] Date input usable via keyboard using tab

Approved-by: Vincenzo Mecca
(cherry picked from commit 543b4ad576)
2023-11-03 20:15:37 +00:00
Marco Aurelio Cardoso
8b48a0b118 fix(pt-BR.json5): fix and update the language file and previous errors
Fix and update the pt-BR language file and the previous errors
2023-10-29 07:18:04 -03:00
Marco Aurelio Cardoso
e1494c0518 fix(pt-BR.json5): fix and update the language file
Fix and update the pt-BR language file
2023-10-29 06:49:20 -03:00
Tim Donohue
701c6e36b0 Merge pull request #2589 from DSpace/backport-2580-to-dspace-7_x
[Port dspace-7_x]   Check cssRules before css variables are read from stylesheet (again)
2023-10-27 13:51:12 -05:00
Gantner, Florian Klaus
c6b66b62e3 more error-prone check of cssRules existence before css variables are get from stylesheet
check the existence off cssRules property before the variables are readed from this stylesheet
https://github.com/DSpace/dspace-angular/issues/2450

(cherry picked from commit 4dd334f2e7)
2023-10-27 15:28:08 +00:00
Tim Donohue
6a182c32e1 Merge pull request #2585 from tdonohue/port_2442_to_7x
[Port dspace-7_x] New themed components & minor CSS fixes
2023-10-26 16:56:03 -05:00
Alexandre Vryghem
b8079a350c New themed components & minor CSS fixes (#2442)
* 100839: Created themeable BrowseByComponent

* 100839: Added themed BrowseByComponent to custom theme

* 100839: Added themed BrowseEntryListElementComponent to custom theme

* Added PersonComponent to custom theme

* Themed LogInComponent

* Fix focus on navbar using different color

* Fix ccLicense checkbox margin

* Fix long search facets name not displaying correctly

* Removed RecentItemListComponent's unnecessary float causing alignment issues when adding components underneath it

* Themed RegisterEmailFormComponent
2023-10-26 16:07:24 -05:00
Tim Donohue
3e9f3aba92 Merge pull request #2584 from DSpace/backport-2441-to-dspace-7_x
[Port dspace-7_x] Minor css variables fixes for header & navbar
2023-10-26 15:02:26 -05:00
Alexandre Vryghem
e548ebcb5a Added new variables for the expandable navbar section
(cherry picked from commit 2ca2a3881f)
2023-10-26 19:03:08 +00:00
Alexandre Vryghem
166444fc50 Fixed breadcrumb padding using incorrect syntax
(cherry picked from commit 6c48238fa2)
2023-10-26 19:03:08 +00:00
Alexandre Vryghem
a40e26985d Fixed header bg color not being set in default (no) theme
(cherry picked from commit 14b1ce5e50)
2023-10-26 19:03:08 +00:00
Alexandre Vryghem
72dcfddff1 Added support for changing the color of the navbar
(cherry picked from commit f6649e1c38)
2023-10-26 19:03:08 +00:00
Tim Donohue
b9f60fa627 Merge pull request #2583 from DSpace/backport-2506-to-dspace-7_x
[Port dspace-7_x] allow insertion of multi-line scope notes in MD field registry
2023-10-26 13:25:32 -05:00
Tim Donohue
97b22c63f8 Merge pull request #2391 from alexandrevryghem/split-eperson-administration-page_contribute-maintenance-7.6
Created separate ePerson pages for create/edit
2023-10-26 13:23:15 -05:00
Sascha Szott
163661a956 allow to insert multi-line scope notes in MD field registry
(cherry picked from commit 5bc5dd859e)
2023-10-26 16:56:44 +00:00
Tim Donohue
f8671e7d4b Merge pull request #2581 from DSpace/backport-2542-to-dspace-7_x
[Port dspace-7_x] Fix i18n labels and alignment in vocabulary-treeview
2023-10-26 11:24:11 -05:00
Tim Donohue
673f81759e Merge pull request #2464 from alexandrevryghem/i18n-cache-busting_contribute-7.6
i18n production improvements
2023-10-26 11:22:36 -05:00
Davide Negretti
e10a08ecfa [DURACOM-190] Fix alignment in vocabulary-treeview
(cherry picked from commit feb2b2be53)
2023-10-26 15:35:38 +00:00
Davide Negretti
00eb24c39d [DURACOM-190] Fix i18n labels in vocabulary-treeview
(cherry picked from commit b321d6f727)
2023-10-26 15:35:38 +00:00
Kristof De Langhe
984c9bfc2a 107155: Allow caching of embedded objects without selflink 2023-10-26 16:33:14 +02:00
Tim Donohue
3b6dd66680 Merge pull request #2458 from atmire/backport-2423-to-dspace-7_x
[Port to dspace-7_x] Fix inherit policies at item move (Angular)
2023-10-25 16:38:44 -05:00
Tim Donohue
d6951dc8e3 Merge pull request #2576 from tdonohue/port_2362_to_7x
[Port dspace-7_x] Making user menu component themeable
2023-10-25 16:06:50 -05:00
Tim Donohue
1d2cdf75e6 Merge pull request #2575 from tdonohue/port_2530_to_7x
[Port to dspace-7_x] Fix display LogInComponent turning blank when entering wrong username/password combination
2023-10-25 15:18:20 -05:00
Eike Martin Löhden
4945460382 Removed default value from inExpandableNavbar. 2023-10-25 15:16:01 -05:00
Eike Martin Löhden
2ec90b8273 Included user-menu component in custom theme. 2023-10-25 15:15:54 -05:00
Eike Martin Löhden
a4aecce865 Replaced tags for ds-user-menu. 2023-10-25 15:15:48 -05:00
Eike Martin Löhden
de826634c8 Corrected missing semicolon. 2023-10-25 15:15:41 -05:00
Eike Martin Löhden
d04d9fd250 Added themed-user-menu component. 2023-10-25 15:15:25 -05:00
Alexandre Vryghem
86657108dd Merge branch 'fix-display-order-authentication-methods_contribute-7.4' into fix-display-order-authentication-methods_contribute-7.6
# Conflicts:
#	src/app/shared/log-in/log-in.component.html
#	src/app/shared/log-in/log-in.component.ts
2023-10-25 14:27:09 -05:00
Alan Orth
73f21f21e7 Merge pull request #2571 from DSpace/backport-2553-to-dspace-7_x
[Port dspace-7_x] Added Serbian Cyrillic translation and corrected Serbian Latin translаtion
2023-10-24 22:47:50 +03:00
imilos
5ab69af71e Added Serbian cyrilic translation and corrected Serbian latin translation.
(cherry picked from commit aa9e12dcfe)
2023-10-24 18:02:41 +00:00
imilos
884e113168 Added Serbian cyrilic translation and corrected Serbian latin translation.
(cherry picked from commit ad12e5a7f2)
2023-10-24 18:02:41 +00:00
Alan Orth
a92aa05049 Merge pull request #2566 from DSpace/backport-2527-to-dspace-7_x
[Port dspace-7_x] Minor header button improvements
2023-10-23 21:57:44 +03:00
Alexandre Vryghem
d7dba4bfcf Fixed invalid html structure the ExpandableNavbarSectionComponent had an ul tag containing non-li tags
(cherry picked from commit fa56d5dfb7)
2023-10-23 17:50:43 +00:00
Alexandre Vryghem
e82a1ebedb Applied same gap between header icons in the dspace theme and made the search field non-focusable when collapsed
(cherry picked from commit 58d31dd73f)
2023-10-23 17:50:43 +00:00
Alexandre Vryghem
d7f1d37e41 Themed LangSwitchComponent
(cherry picked from commit f9b4460e70)
2023-10-23 17:50:43 +00:00
Alexandre Vryghem
d6de6fee6c Use gap instead of individual paddings for header icons
(cherry picked from commit 9f2a1d048b)
2023-10-23 17:50:43 +00:00
Tim Donohue
7dd9156375 Merge pull request #2564 from DSpace/backport-2561-to-dspace-7_x
[Port dspace-7_x] Fix RequestService test sometimes failing in CICD
2023-10-23 10:00:35 -05:00
Alexandre Vryghem
8428b0549b Fix RequestService test failing because of different lastUpdated time
(cherry picked from commit fb315335c9)
2023-10-23 13:56:07 +00:00
Tim Donohue
33c2c98757 Merge pull request #2560 from DSpace/backport-2439-to-dspace-7_x
[Port dspace-7_x] Fix Request-a-Copy grant form optional message not optional in form validation
2023-10-20 15:14:08 -05:00
Agustina Martinez
e9b70e34d5 Update email-request-copy.component.html
Message is optional: remove req in [disabled]

(cherry picked from commit 94c756d52d)
2023-10-20 20:13:00 +00:00
Tim Donohue
c3ee2ca6c1 Merge pull request #2559 from DSpace/backport-2558-to-dspace-7_x
[Port dspace-7_x] Revert 2454 "Check cssRules before css variables are read from stylesheet"
2023-10-20 12:07:43 -05:00
Tim Donohue
2834ac33a4 Revert "Check cssRules before css variables are read from stylesheet (#2454)"
This reverts commit fa79c358c0.

(cherry picked from commit 6f73b65d53)
2023-10-20 17:07:13 +00:00
Tim Donohue
1eeed36036 Merge pull request #2552 from DSpace/backport-2549-to-dspace-7_x
[Port dspace-7_x] Bump @babel/traverse from 7.21.4 to 7.23.2
2023-10-20 09:57:08 -05:00
dependabot[bot]
bc0629e004 Bump @babel/traverse from 7.21.4 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.4 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 97f7a5e82a)
2023-10-19 21:45:57 +00:00
Alexandre Vryghem
d473fcdf16 Merge branch 'split-eperson-administration-page_contribute-7.6' into split-eperson-administration-page_contribute-maintenance-7.6 2023-10-19 23:01:48 +02:00
Alexandre Vryghem
2e571767ea 107664: Normalized ePerson & group edit url and moved error message to translation file 2023-10-19 23:01:24 +02:00
Tim Donohue
c25b80abdd Merge pull request #2504 from atmire/Angular-SRR-menu-issues
Fix Angular SSR menu issues
2023-10-19 10:19:27 -05:00
Alan Orth
b5f942b71d Merge pull request #2547 from DSpace/backport-2454-to-dspace-7_x
[Port dspace-7_x] Check cssRules before css variables are read from stylesheet
2023-10-17 22:50:14 +03:00
Gantner, Florian Klaus
21dcef0a42 checkstyle remove unused extra lines
(cherry picked from commit 5f8a9dea34)
2023-10-17 19:17:51 +00:00
Gantner, Florian Klaus
c4a60abd65 check cssRules existence before css variables are get from stylesheet
(cherry picked from commit 367cda2de0)
2023-10-17 19:17:51 +00:00
Alan Orth
fd850164f5 Merge pull request #2546 from DSpace/backport-2534-to-dspace-7_x
[Port dspace-7_x] Bump postcss from 8.4.23 to 8.4.31
2023-10-16 14:20:07 +03:00
dependabot[bot]
8f881dbb52 Bump postcss from 8.4.23 to 8.4.31
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 3c5079e9ce)
2023-10-16 07:36:28 +00:00
Alexandre Vryghem
a419956e2a Merge remote-tracking branch 'upstream/dspace-7_x' into split-eperson-administration-page_contribute-maintenance-7.6
# Conflicts:
#	src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html
2023-10-14 17:38:26 +02:00
Alan Orth
3cb23c18e7 Merge pull request #2536 from atmire/issue-2535_hide-add-more-button-submission-if-no-disabled-sections-7.x
Issue 2535 hide add more button submission if no disabled sections 7.x
2023-10-12 09:46:14 +03:00
Alan Orth
59be2ae907 Merge pull request #2543 from DSpace/backport-2531-to-dspace-7_x
[Port dspace-7_x] Fix browse by visual bug
2023-10-12 09:17:48 +03:00
Jens Vannerum
15d2880ca4 Fix browse by visual bug
(cherry picked from commit d0b4e15db4)
2023-10-11 19:04:20 +00:00
Pascal-Nicolas Becker
c03cd03274 Merge pull request #2541 from DSpace/backport-2537-to-dspace-7_x
[Port dspace-7_x] Translate community as 'Bereich' in de.json5
2023-10-11 05:33:28 +02:00
Janne Jensen
ec86bc12bd translate community as 'Bereich' in de.json5
(cherry picked from commit 0139670371)
2023-10-10 20:40:03 +00:00
Marie Verdonck
77dd72b6ef Merge branch 'issue-2535_hide-add-more-button-submission-if-no-disabled-sections-7.4' into issue-2535_hide-add-more-button-submission-if-no-disabled-sections-7.x 2023-10-04 17:30:45 +02:00
Marie Verdonck
709848ee25 Issue#2535: Hide add more button in submission if no disabled sections 2023-10-04 17:27:04 +02:00
Kristof De Langhe
be6dbdec66 107155: Allow caching null objects 2023-10-02 13:31:25 +02:00
Alan Orth
980e254d9a Merge pull request #2528 from DSpace/backport-2385-to-dspace-7_x
[Port dspace-7_x] Move subscription button to DSO edit menu
2023-09-27 10:56:27 +03:00
Yury Bondarenko
6d195f5ffa Update DSO edit menu resolver tests
- Abstract away the different "subsections" ~ DSO type (the tests should not care about this)
  Instead, retrieve sections of interest by ID & assert whether they're there & how they should look
- Test separately for Communities, Collections & Items
- Test newly added menu section

(cherry picked from commit 18b7a9c7de)
2023-09-27 07:02:24 +00:00
Yury Bondarenko
578a427f46 Move subscription button to DSO edit menu
(cherry picked from commit c9558167b2)
2023-09-27 07:02:24 +00:00
Alan Orth
506579cd23 Merge pull request #2510 from atmire/fix-mutliple-api-calls-on-route-change
Fix multiple api calls on route change
2023-09-27 08:12:47 +03:00
Alan Orth
19eec6ac31 Merge pull request #2526 from DSpace/backport-2525-to-dspace-7_x
[Port dspace-7_x] Fix mouse cursor on language dropdown menu
2023-09-26 22:09:17 +03:00
Davide Negretti
2aab4265a5 [DURACOM-185] Fix pointer on language dropdown menu
(cherry picked from commit 6b5708cffd)
2023-09-26 18:40:11 +00:00
Art Lowel
67a6f58865 Merge branch 'fix-mutliple-api-calls-on-route-change-7.6' into fix-mutliple-api-calls-on-route-change 2023-09-26 16:56:17 +02:00
Art Lowel
6a99185214 roll back unintended change to the responseMsToLive for RootDataservice 2023-09-26 16:56:07 +02:00
Art Lowel
d02c5397f8 Merge branch 'fix-mutliple-api-calls-on-route-change-7.6' into fix-mutliple-api-calls-on-route-change 2023-09-26 14:44:39 +02:00
Art Lowel
32fc28ec54 fix dev mode issue where retrieving the login options fails 2023-09-26 14:44:13 +02:00
DSpace Bot
77efe52f4a [Port dspace-7_x] Fix missing or wrong Italian translations (#2522)
[DURACOM-184] fix missing or wrong Italian translations

---------

Co-authored-by: Andrea Barbasso <´andrea.barbasso@4science.com´>
2023-09-26 11:04:49 +03:00
Alan Orth
83beb5474e Merge pull request #2521 from DSpace/backport-2473-to-dspace-7_x
[Port dspace-7_x] Fix some routes not using the correct baseHref
2023-09-26 10:51:51 +03:00
DSpace Bot
1c38d9259a [Port dspace-7_x] Serbian (Latin) translation (#2520)
* Serbian (latin) translation added.

---------

Co-authored-by: imilos <imilos@gmail.com>
2023-09-26 10:08:07 +03:00
Alexandre Vryghem
d6d5a2891c Fix routes not working with baseHref
(cherry picked from commit 18febff7a6)
2023-09-26 07:07:20 +00:00
Hrafn Malmquist
abd6c01a98 Merge pull request #2502 from alanorth/undo-text-capitalize
Don't capitalize metadata values in search
2023-09-26 00:19:07 +01:00
DSpace Bot
f77d01c01f [Port dspace-7_x] Update fi.json5 (#2516)
* Update fi.json5

Two last translations to the Finnish file.

(cherry picked from commit c3a908bccb)
2023-09-25 12:53:45 +03:00
Tim Donohue
fd3f1628ee Merge pull request #2514 from DSpace/backport-2505-to-dspace-7_x
[Port dspace-7_x] remove obsolete label element in metadata-schema.component.html
2023-09-22 14:53:04 -05:00
Sascha Szott
c7fe310d81 removed trailing whitespaces as suggested by reviewer
(cherry picked from commit 43f19e7d91)
2023-09-22 17:57:54 +00:00
Sascha Szott
742b2d920a remove obsolete label element in metadata-schema.component.html
(cherry picked from commit 6847c30e58)
2023-09-22 17:57:54 +00:00
Art Lowel
7a8e2206ae Merge branch 'fix-mutliple-api-calls-on-route-change-7.6' into fix-mutliple-api-calls-on-route-change 2023-09-22 12:01:24 +02:00
Art Lowel
8fbe8c16dc fix issue where invalidateRootCache didn't happen when the page first loaded 2023-09-22 12:00:59 +02:00
Art Lowel
0104f81d54 Merge branch 'fix-mutliple-api-calls-on-route-change-7.6' into fix-mutliple-api-calls-on-route-change 2023-09-22 10:48:46 +02:00
Art Lowel
5ad621b27e fix issue where more than one api call was made on every route change 2023-09-22 10:23:07 +02:00
Alan Orth
47029c0a78 src/app/shared/search: don't capitalize metadata values
Don't capitalize metadata values for display purposes.
2023-09-19 07:42:23 +03:00
Yana De Pauw
5a5f71a3d9 Merge remote-tracking branch 'upstream/dspace-7_x' into Angular-SRR-menu-issues 2023-09-18 16:49:36 +02:00
Yana De Pauw
3e8d180f1b 106974: Angular SSR menu issues 2023-09-18 16:43:32 +02:00
Tim Donohue
2d733732f6 Merge pull request #2498 from DSpace/backport-2451-to-dspace-7_x
[Port dspace-7_x] Graceful shutdown on SIGINT (e.g. from 'pm2 stop').
2023-09-14 12:29:23 -05:00
Mark H. Wood
d6cabd1d01 Document a modified method as required by PR guidelines.
(cherry picked from commit bf9b2b82e1)
2023-09-14 16:07:36 +00:00
Mark H. Wood
46e2f4e22c Properly await termination.
(cherry picked from commit 4449737aed)
2023-09-14 16:07:36 +00:00
Mark H. Wood
15c2af5fbf Graceful shutdown on SIGINT (e.g. from 'pm2 stop').
(cherry picked from commit 6709c3bb5f)
2023-09-14 16:07:36 +00:00
Tim Donohue
a37e0f29b7 Merge pull request #2497 from DSpace/backport-2493-to-dspace-7_x
[Port dspace-7_x] Correct text of help info on edit group page
2023-09-14 11:01:38 -05:00
Tim Donohue
b423b49cac Correct text of help info on edit group page
(cherry picked from commit 49247430e5)
2023-09-14 15:07:21 +00:00
Tim Donohue
bdf7414392 Merge pull request #2488 from alexandrevryghem/fix-display-order-authentication-methods_contribute-7.6
[Port dspace-7_x] Made it possible to reorder the login methods
2023-09-11 16:40:43 -05:00
Tim Donohue
459a43184a Merge pull request #2486 from DSpace/backport-2421-to-dspace-7_x
[Port dspace-7_x] 🚸remove thumbnail from file-upload section and show bitstream format …
2023-09-08 16:13:14 -05:00
Alexandre Vryghem
0905a53db5 Fix innerText still being undefined in ssr mode 2023-09-08 22:35:27 +02:00
Alan Orth
cd93c6eecd Merge pull request #2487 from DSpace/backport-2445-to-dspace-7_x
[Port dspace-7_x] Fix to Metadata Registry create new metadata schema doesn't appear without reload #1081
2023-09-08 23:29:50 +03:00
Hugo Dominguez
161d7e069b 🎨 revert format
(cherry picked from commit 3e5524de69)
2023-09-08 19:50:25 +00:00
Hugo Dominguez
e3ea2cb2b0 🐛 fix bug of caching when add new schema
(cherry picked from commit 9fb9e5848c)
2023-09-08 19:50:25 +00:00
Hugo Dominguez
8d295419c7 ♻️ refactor chain of observables to avoid async issues
(cherry picked from commit 2dc9fd44d7)
2023-09-08 19:50:25 +00:00
Tim Donohue
22538f30dc Update workspaceitem-section-upload-file.model.ts
Fix code comment

(cherry picked from commit 01c8a4d9c3)
2023-09-08 19:33:55 +00:00
Hugo Dominguez
5daf993451 🎨revert unnecessary format
(cherry picked from commit 13e4052c4d)
2023-09-08 19:33:55 +00:00
Hugo Dominguez
b7b3db5ba8 🚸remove thumbnail from file-upload section and show bitstream format and checksum
(cherry picked from commit 4c8ec8a4f2)
2023-09-08 19:33:55 +00:00
Tim Donohue
a0a8607628 Merge pull request #2484 from DSpace/backport-2412-to-dspace-7_x
[Port dspace-7_x] remove redundant cache default values from server.ts
2023-09-08 11:40:43 -05:00
Sascha Szott
3a465ac452 remove redundant cache default values from server.ts
(cherry picked from commit e53abcb69e)
2023-09-08 15:44:21 +00:00
Tim Donohue
97b2eb7a7c Merge pull request #2404 from alexandrevryghem/fix-setStaleByHrefSubtring-not-emitting-after-all-requests-were-stale_contribute-maintenance-7.6
[Port dspace-7_x] Fix `setStaleByHrefSubstring` not emitting true when all requests are stale
2023-09-07 14:39:33 -05:00
Tim Donohue
b46390c315 Merge pull request #2396 from alexandrevryghem/w2p-104312_pass-query-to-external-search-tabs_contribute-maintenance-7.6
[Port dspace-7_x] Search query is not set by default when opening an external sources tab
2023-09-07 12:49:47 -05:00
Tim Donohue
d14e258b5b Merge pull request #2483 from DSpace/backport-2470-to-dspace-7_x
[Port dspace-7_x] Minor pt-PT translation fixes
2023-09-07 11:15:21 -05:00
José Carvalho
1622b25aac Minor pt-PT translation fixes
(cherry picked from commit a6c1120700)
2023-09-07 15:35:02 +00:00
Tim Donohue
d95fa43c6b Merge pull request #2479 from DSpace/backport-2366-to-dspace-7_x
[Port dspace-7_x] CSV export fixes
2023-09-06 16:08:21 -05:00
Kristof De Langhe
4918ff212c 104189: CSV export add fixedFilter
(cherry picked from commit 45ad5f7316)
2023-09-06 19:53:01 +00:00
Kristof De Langhe
c2790584bd 104189: Allow CSV export on related entity search
(cherry picked from commit cac1407f08)
2023-09-06 19:53:01 +00:00
Tim Donohue
162cf94772 Merge pull request #2478 from DSpace/backport-2361-to-dspace-7_x
[Port dspace-7_x] Fix tree not updating when switching between "Browse by Vocabulary" pages
2023-09-06 09:22:00 -05:00
Nona Luypaert
92e0b6dddf Fix VocabularyTreeview not updating + i18n for nsi
(cherry picked from commit b5a70e8f95)
2023-09-05 22:14:44 +00:00
Tim Donohue
5b646af818 Merge pull request #2477 from DSpace/backport-2457-to-dspace-7_x
[Port dspace-7_x] config/config.example.yml: fix example syntax
2023-09-05 16:25:23 -05:00
Alan Orth
8363273f58 config/config.example.yml: fix example syntax
As of DSpace Angular 7.2 the syntax has changed from TypeScript to
YAML.

(cherry picked from commit 9e46b5310b)
2023-09-05 21:24:21 +00:00
Alan Orth
5f5d11cc0b Merge pull request #2476 from DSpace/backport-2432-to-dspace-7_x
[Port dspace-7_x] Fix to Value of dropdown changes automatically on item submission page
2023-09-05 20:16:37 +03:00
Hugo Dominguez
eb38b5877e change test event, click by mousedown on dynamic-scrollable-dropdown.component.spec.ts
(cherry picked from commit 25479e1794)
2023-09-05 17:15:51 +00:00
Hugo Dominguez
f88638e9fe 🐛 Fix Value of dropdown changes automatically on item submission page
(cherry picked from commit 651305952d)
2023-09-05 17:15:51 +00:00
Tim Donohue
cd350ddf5f Merge pull request #2472 from DSpace/backport-2448-to-dspace-7_x
[Port dspace-7_x] Spanish translation updated to 7.6
2023-09-05 09:48:32 -05:00
Alan Orth
2987ad05be Merge pull request #2474 from DSpace/backport-2444-to-dspace-7_x
[Port dspace-7_x] Fix to Mobile navbar hamburger menu doesn't work in Firefox/Safari #2372
2023-09-05 12:01:31 +03:00
Hugo Dominguez
9afbd8d746 🐛 fix when navbar expands on firefox
(cherry picked from commit 60706720e4)
2023-09-05 09:00:34 +00:00
Sergio Fernández Celorio
a4eaf02a47 Some lint errors fixed
(cherry picked from commit 1885638ba6)
2023-09-01 19:05:02 +00:00
Sergio Fernández Celorio
d1ebf07456 Spanish translation updated to 7.6
(cherry picked from commit 4cc4192e93)
2023-09-01 19:05:02 +00:00
Tim Donohue
02c47c3234 Merge pull request #2469 from DSpace/backport-2468-to-dspace-7_x
[Port dspace-7_x] Minor Accessibility Fixes & Enable accessibility scan on more pages
2023-08-30 10:31:36 -05:00
Tim Donohue
63c752b3f4 Fix heading order accessibility issue in search filters/facets
(cherry picked from commit 276d80895e)
2023-08-30 14:40:51 +00:00
Tim Donohue
6df76515ba Minor fixes to cypress tests
(cherry picked from commit 70a7bbe3cb)
2023-08-30 14:40:51 +00:00
Tim Donohue
3cdcdaf475 Fix accessibility of date sliders by adding aria-labels
(cherry picked from commit 2a881791ba)
2023-08-30 14:40:51 +00:00
Tim Donohue
b90d102e5e Update ng2-nouislider and nouislider to latest versions
(cherry picked from commit 91d8b7e4f7)
2023-08-30 14:40:51 +00:00
Tim Donohue
13ead8174a Fix heading order issue with item page & update accessibility tests to prove it now passes
(cherry picked from commit ba244bf6b1)
2023-08-30 14:40:51 +00:00
Tim Donohue
a7a807c0bb Enable excessibility checking of login menu, and remove unnecessary exclusion from header
(cherry picked from commit 339ed63734)
2023-08-30 14:40:51 +00:00
Tim Donohue
baecf2ac11 Reenable accessibility check fixed in #2251
(cherry picked from commit 158ebb0e32)
2023-08-30 14:40:51 +00:00
Tim Donohue
7ebdc43ca2 Update to latest axe-core
(cherry picked from commit 50899f1d1b)
2023-08-30 14:40:51 +00:00
Tim Donohue
13c0cb48ed Update to latest cypress
(cherry picked from commit 68a3323fca)
2023-08-30 14:40:51 +00:00
Alan Orth
6639594f7e Merge pull request #2465 from DSpace/backport-2463-to-dspace-7_x
[Port dspace-7_x] Fix to Pagination position is retained between searches #2159
2023-08-29 11:27:09 +03:00
Alexandre Vryghem
07a2e333ca Implemented i18n cache busting 2023-08-28 21:24:03 +02:00
Tim Donohue
af8c599497 Merge pull request #2466 from DSpace/backport-2447-to-dspace-7_x
[Port dspace-7_x] 2251 accessibility issues on the community list page
2023-08-28 14:13:02 -05:00
Alan Orth
0542e9b2fd Merge pull request #2467 from DSpace/backport-2399-to-dspace-7_x
[Port dspace-7_x] fix(i18n): curation-task.task.registerdoi.label
2023-08-28 21:07:04 +03:00
Mirko Scherf
2a55e36082 fix(i18m): curation-task.task.registerdoi.label
changed curation-task.task.register-doi.label back to
curation-task.task.registerdoi.label and added German translation

(cherry picked from commit 0ec72f679b)
2023-08-28 18:02:28 +00:00
Hrafn Malmquist
8a5d6897c4 Reorder instance method to come after member declaration
(cherry picked from commit e59913acab)
2023-08-28 14:44:18 +00:00
Hrafn Malmquist
e89a277702 Improve documentation
(cherry picked from commit d9b6e9d81f)
2023-08-28 14:44:18 +00:00
Hrafn Malmquist
9fc4e213df Add trackby function so cdktree can differentiate between new and old nodes
(cherry picked from commit 5f71de885b)
2023-08-28 14:44:18 +00:00
Hrafn Malmquist
46ac61dcac Replace h2 with a h1
(cherry picked from commit 05c53ad1d4)
2023-08-28 14:44:18 +00:00
Hrafn Malmquist
eef98d70c3 Replace h5 with a span
(cherry picked from commit 5ef4a827f5)
2023-08-28 14:44:18 +00:00
Hugo Dominguez
5c669fb1b7 add first page condition when search submit
(cherry picked from commit 044230209c)
2023-08-28 14:33:34 +00:00
Hugo Dominguez
a343991e74 🐛 go to first page after submit search
(cherry picked from commit 88a7088b47)
2023-08-28 14:33:34 +00:00
Tim Donohue
83de2c5769 Merge pull request #2462 from tdonohue/port_2395
[Port dspace-7_x] Fix themed components duplicating themself when switching themes
2023-08-25 13:28:03 -05:00
Alexandre Vryghem
8b57a2f6af Merge branch 'fix-ngonchanges-not-working-for-themed-components_contribute-7.2' into fix-ngonchanges-not-working-for-themed-components_contribute-7.4
# Conflicts:
#	src/app/app.component.ts
2023-08-25 12:34:10 -05:00
Alexandre Vryghem
7352d9e273 Reset to base theme when no default theme is set and leaving UUID/handle theme 2023-08-25 12:22:51 -05:00
Alexandre Vryghem
4e14bc0b78 101577: Ensure the component is always destroyed before rendering the new component 2023-08-25 12:22:32 -05:00
Alexandre Vryghem
0e289b3f39 103176: Fix vcr not being defined yet in OnInit hook 2023-08-25 12:19:30 -05:00
Koen Pauwels
815425c101 Fix lint issue. 2023-08-25 10:18:09 +02:00
Alan Orth
6ad641f4e2 Merge pull request #2460 from DSpace/backport-2434-to-dspace-7_x
[Port dspace-7_x] Input type list doesn't work correctly if multiple value-pairs have the same pair value
2023-08-25 10:37:33 +03:00
Alexandre Vryghem
7f00253d3d 105265: Made the DsDynamicListComponent's checkbox & radio buttons ids unique for each metadata field to prevent other value-pairs having the same id
(cherry picked from commit 4c419e1eee)
2023-08-25 06:17:16 +00:00
Tim Donohue
03d17678e2 Merge pull request #2459 from DSpace/backport-2449-to-dspace-7_x
[Port dspace-7_x] Update pl.json5
2023-08-24 16:03:53 -05:00
Michał Dykas
0efb95825d Update pl.json5 fix test 2 spaces instead of 1
(cherry picked from commit f58a7a2e9b)
2023-08-24 19:58:39 +00:00
Michał Dykas
95cde220e6 Update pl.json5 fix issues from tests
(cherry picked from commit 93299ec83d)
2023-08-24 19:58:39 +00:00
Michał Dykas
964066056c Update pl.json5
Translation update of 2 spaces instead of 3

(cherry picked from commit cfd753f928)
2023-08-24 19:58:39 +00:00
Michał Dykas
22db36f938 Update pl.json5
Update from 7.4 to 7.6 version

(cherry picked from commit b439ab4484)
2023-08-24 19:58:39 +00:00
Tim Donohue
9df4d660e7 Merge pull request #2453 from tdonohue/fix_demo_urls_7_x
[Port dspace-7_x] Replace mentions of demo7.dspace.org and api7.dspace.org with new demo URLs
2023-08-24 12:41:02 -05:00
Koen Pauwels
a5b30ea3c2 103818 Adjusted "Inherit policies" tooltip 2023-08-24 15:27:52 +02:00
Koen Pauwels
2078b7593a 103818 Add warning tooltip to "Inherit policies" checkbox on item move page 2023-08-24 15:27:52 +02:00
Tim Donohue
fe8429ebbe Enable new skip merge commit feature 2023-08-23 17:08:44 -05:00
Tim Donohue
8feeedfc3a Merge pull request #2455 from DSpace/backport-2438-to-dspace-7_x
[Port dspace-7_x] 2437 Correct and clarify commented-out code in several custom components
2023-08-23 16:07:17 -05:00
Hardy Pottinger
3292222e47 fix lint error in workflow-item-send-back.component.ts
(cherry picked from commit 518cc714f2)
2023-08-23 19:50:22 +00:00
Hardy Pottinger
36868c06f0 2437 Correct and clarify commented-out code in several custom components
- Correct the path in commented-out code in the custom theme's
  components
- Clarify that the workflow-item-sen-back.component.scss file is a stub
- It has no corresponding SCSS file in the base theme

(cherry picked from commit 0906234a29)
2023-08-23 19:50:22 +00:00
Tim Donohue
5853e49bd0 Update default configs to use https://demo.dspace.org/server/ 2023-08-22 16:44:10 -05:00
Tim Donohue
2fd53c7ad2 Replace mentions of demo7.dspace.org and api7.dspace.org with demo or sandbox 2023-08-22 16:38:00 -05:00
Tim Donohue
63345a335a Merge pull request #2428 from DSpace/backport-2409-to-dspace-7_x
[Port dspace-7_x] Bump word-wrap from 1.2.3 to 1.2.5
2023-08-09 10:07:14 -05:00
dependabot[bot]
bbb50f2858 Bump word-wrap from 1.2.3 to 1.2.5
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.5.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 2fec33e70a)
2023-08-08 21:42:41 +00:00
Tim Donohue
3e31c1eee3 Merge pull request #2427 from tdonohue/port_2048
[Port dspace-7_x] ProcessDetailComponent test improvement
2023-08-08 16:25:21 -05:00
Kristof De Langhe
cfcf93ecf8 104126: ProcessDetailComponent test improvement 2023-08-08 15:08:49 -05:00
Tim Donohue
74c2f3d9bb Merge pull request #2405 from alexandrevryghem/fix-collection-form-bugs_contribute-maintenance-7.6
[Port dspace-7_x] Fix minor collection form bugs
2023-08-04 12:48:34 -05:00
Tim Donohue
f22fcc7b3c Merge pull request #2420 from tdonohue/port_2388
[Port dspace-7_x] fix(i18n): add and update missing status strings
2023-08-04 12:25:44 -05:00
Mirko Scherf
c3b9a1d5c6 fix(i18n): add and update missing status strings
New strings for status filter entries:
search.filters.namedresourcetype.*
Refactored strings introduced with #2068 (refactor badged),
e.g. mydspace.status.archived -> mydspace.status.mydspaceArchived
2023-08-04 11:19:55 -05:00
Alan Orth
d072ae7027 Merge pull request #2419 from DSpace/backport-2378-to-dspace-7_x
[Port dspace-7_x] Show error message from the password validation response
2023-08-04 16:04:15 +03:00
milanmajchrak
f746d45ac1 Show error message from the error response
(cherry picked from commit e6546b4499)
2023-08-04 12:21:30 +00:00
Tim Donohue
1fd917dd4a Merge pull request #2418 from DSpace/backport-2344-to-dspace-7_x
[Port dspace-7_x] Catch and handle unsuccessful "convert rels to items" responses
2023-08-03 16:38:44 -05:00
Tim Donohue
99e349b91f Merge pull request #2392 from alexandrevryghem/fix-mathjax-displaying-twiced-in-ui_contribute-maintenance-7.6
[Port dspace-7_x] Fixed MathJax code being displayed twice by `dsMarkdown` pipe
2023-08-03 16:09:56 -05:00
Kim Shepherd
a7ed053d15 catch and handle unsuccessful "convert rels to items" responses
(cherry picked from commit a35b7d8356)
2023-08-03 20:03:27 +00:00
Tim Donohue
99c6dd1829 Merge pull request #2347 from alanorth/finnish-language-strings
src/assets/i18n: update Finnish language strings
2023-08-03 12:56:22 -05:00
Tim Donohue
0a48b09bd7 Merge pull request #2416 from tdonohue/port_of_2381
[Port dspace-7_x] refactor: rename aletr-type.ts to alert-type.ts
2023-08-03 12:37:18 -05:00
Mirko Scherf
0dc74165dc refactor: rename aletr-type.ts to alert-type.ts 2023-08-03 11:51:48 -05:00
Tim Donohue
9cbb634245 Merge pull request #2415 from DSpace/backport-2363-to-dspace-7_x
[Port dspace-7_x] Bump semver from 5.7.1 to 5.7.2
2023-08-02 15:55:32 -05:00
dependabot[bot]
7c379db7ee Bump semver from 5.7.1 to 5.7.2
Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 0b0c60e38c)
2023-08-02 20:06:40 +00:00
Alexandre Vryghem
3dc73f9021 Properly handle AuthMethod subscription in LogInComponent 2023-08-02 21:25:58 +02:00
Alexandre Vryghem
94ceee9080 Merge remote-tracking branch 'templates/dspace-7.6' into fix-display-order-authentication-methods_contribute-7.6
# Conflicts:
#	src/app/shared/log-in/log-in.component.html
#	src/app/shared/log-in/methods/log-in-external-provider/log-in-external-provider.component.spec.ts
#	src/app/shared/log-in/methods/oidc/log-in-oidc.component.html
#	src/app/shared/log-in/methods/oidc/log-in-oidc.component.spec.ts
#	src/app/shared/log-in/methods/orcid/log-in-orcid.component.html
#	src/app/shared/log-in/methods/password/log-in-password.component.ts
#	src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.html
#	src/app/shared/log-in/methods/shibboleth/log-in-shibboleth.component.spec.ts
2023-08-02 21:01:36 +02:00
Alexandre Vryghem
71cf66ecf4 Fix display order of authentication methods 2023-08-02 10:00:43 +02:00
Alan Orth
1b9656b135 src/assets/i18n: update Finnish language strings
Contributed by Reeta Kuukoski from the National Library of Finland.
2023-07-31 12:32:14 +03:00
Tim Donohue
85acdcb9c5 Merge pull request #2407 from DSpace/backport-2406-to-dspace-7_x
[Port dspace-7_x] Add GitHub action to automatically create a port PR (based on label) & minor bug fixes
2023-07-28 15:25:02 -05:00
Tim Donohue
867ae9c341 Minor update to label_merge_conflicts to ignore any errors (seem random at this time)
(cherry picked from commit d75d12b423)
2023-07-28 20:11:29 +00:00
Tim Donohue
4965bdee5f Add action to automatically create a port PR when specified
(cherry picked from commit 338b63ebb8)
2023-07-28 20:11:29 +00:00
Alexandre Vryghem
ebaccc055e Merge branch 'fix-collection-form-bugs_contribute-7.4' into fix-collection-form-bugs_contribute-7.6
# Conflicts:
#	src/app/access-control/epeople-registry/eperson-form/eperson-form.component.html
2023-07-28 00:14:58 +02:00
Alexandre Vryghem
273be5bd81 Merge remote-tracking branch 'contributions/fix-setStaleByHrefSubtring-not-emitting-after-all-requests-were-stale_contribute-7.4' into fix-setStaleByHrefSubtring-not-emitting-after-all-requests-were-stale_contribute-7.6
# Conflicts:
#	src/app/core/data/request.service.ts
2023-07-27 23:57:18 +02:00
Alexandre Vryghem
5062e46433 104312: Add missing query @Input() to ThemedDynamicLookupRelationExternalSourceTabComponent 2023-07-25 18:26:47 +02:00
Alexandre Vryghem
9b1d18bd32 Merge tag 'dspace-7.6' into w2p-104312_pass-query-to-external-search-tabs_contribute-7.6 2023-07-25 18:26:18 +02:00
Alexandre Vryghem
15656b03ce Fix mathjax code being displayed twice
This was due to sanitizeHtml rendering the mjx-assistive-mml tag as text. This tag is used by screen readers and therefor we should allow it to be rendered
2023-07-21 23:18:40 +02:00
Alexandre Vryghem
75ec046bba Hide the delete EPerson/Group buttons when the user can't delete the EPerson/Group 2023-07-21 18:34:42 +02:00
Alexandre Vryghem
998e1fac8d Fix spacing issues for EPerson form buttons 2023-07-21 18:34:42 +02:00
Alexandre Vryghem
9ac19d40fc Cleanup access-control components
- Use the same methods to retrieve the access-control urls
- Fix EPersonDataService.startEditingNewEPerson returning the incorrect link
2023-07-21 18:34:41 +02:00
Alexandre Vryghem
2a35180a1b Created separate pages for edit & create EPersons 2023-07-21 17:15:10 +02:00
Alexandre Vryghem
648925f3e1 104312: DsDynamicLookupRelationExternalSourceTabComponent should have the form value already filled in the search input 2023-07-19 14:04:34 +02:00
Tim Donohue
4f0e1d6de1 Merge pull request #2369 from tdonohue/port_2358_2359
Port recent GitHub Actions changes to dspace-7_x branch
2023-07-14 16:56:32 -05:00
Tim Donohue
1809f0585c Split docker images into separate jobs to run in parallel. Ensure 'main' codebase is tagged as 'latest' 2023-07-14 15:41:57 -05:00
Tim Donohue
a484379f69 Ensure codescan and label_merge_conflicts run on maintenance branches 2023-07-14 15:41:41 -05:00
Tim Donohue
7bf4da55cf Enable Pull Request Opened action to assign PRs to their creator 2023-07-14 15:41:26 -05:00
Alan Orth
a079ed729c Merge pull request #2354 from alanorth/request-copy-component-path
src/app: fix path to deny-request-copy component
2023-07-06 20:45:56 +03:00
Alan Orth
3a48ed390b src/app: fix path to deny-request-copy component
The themed-deny-request-copy.component erroneously includes the cus-
tom theme's deny-request-copy component instead of its own.

Closes: https://github.com/DSpace/dspace-angular/issues/2351
2023-07-06 20:41:52 +03:00
Alexandre Vryghem
cf77726866 Fix enter not submitting collection form correctly
Fixed it for communities, collections, ePersons & groups
2023-07-01 01:01:57 +02:00
Alexandre Vryghem
b2b1782cd8 Hide entity field in collection form when entities aren't initialized 2023-06-30 22:43:46 +02:00
Alexandre Vryghem
02a20c8862 103236: Added tests for setStaleByHrefSubstring 2023-06-30 17:01:25 +02:00
Art Lowel
ae6b183fae 103236: fix issue where setStaleByHrefSubtring wouldn't emit after all requests were stale 2023-06-30 16:56:15 +02:00
Tim Donohue
884aa07430 Update version tag for development of next release 2023-06-23 13:04:19 -05:00
1173 changed files with 151625 additions and 37594 deletions

View File

@@ -231,10 +231,13 @@
"*.json5"
],
"extends": [
"plugin:jsonc/recommended-with-jsonc"
"plugin:jsonc/recommended-with-json5"
],
"rules": {
"no-irregular-whitespace": "error",
// The ESLint core no-irregular-whitespace rule doesn't work well in JSON
// See: https://ota-meshi.github.io/eslint-plugin-jsonc/rules/no-irregular-whitespace.html
"no-irregular-whitespace": "off",
"jsonc/no-irregular-whitespace": "error",
"no-trailing-spaces": "error",
"jsonc/comma-dangle": [
"error",

View File

@@ -1,26 +0,0 @@
# This workflow runs whenever a new pull request is created
# TEMPORARILY DISABLED. Unfortunately this doesn't work for PRs created from forked repositories (which is how we tend to create PRs).
# There is no known workaround yet. See https://github.community/t/how-to-use-github-token-for-prs-from-forks/16818
name: Pull Request opened
# Only run for newly opened PRs against the "main" branch
on:
pull_request:
types: [opened]
branches:
- main
jobs:
automation:
runs-on: ubuntu-latest
steps:
# Assign the PR to whomever created it. This is useful for visualizing assignments on project boards
# See https://github.com/marketplace/actions/pull-request-assigner
- name: Assign PR to creator
uses: thomaseizinger/assign-pr-creator-action@v1.0.0
# Note, this authentication token is created automatically
# See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
# Ignore errors. It is possible the PR was created by someone who cannot be assigned
continue-on-error: true

View File

@@ -7,7 +7,8 @@ name: Build
on: [push, pull_request]
permissions:
contents: read # to fetch code (actions/checkout)
contents: read # to fetch code (actions/checkout)
packages: read # to fetch private images from GitHub Container Registry (GHCR)
jobs:
tests:
@@ -28,26 +29,33 @@ jobs:
DSPACE_CACHE_SERVERSIDE_ANONYMOUSCACHE_MAX: 0
# Tell Cypress to run e2e tests using the same UI URL
CYPRESS_BASE_URL: http://127.0.0.1:4000
# Disable the cookie consent banner in e2e tests to avoid errors because of elements hidden by it
DSPACE_INFO_ENABLECOOKIECONSENTPOPUP: false
# When Chrome version is specified, we pin to a specific version of Chrome
# Comment this out to use the latest release
#CHROME_VERSION: "90.0.4430.212-1"
# Bump Node heap size (OOM in CI after upgrading to Angular 15)
NODE_OPTIONS: '--max-old-space-size=4096'
# Project name to use when running "docker compose" prior to e2e tests
COMPOSE_PROJECT_NAME: 'ci'
# Docker Registry to use for Docker compose scripts below.
# We use GitHub's Container Registry to avoid aggressive rate limits at DockerHub.
DOCKER_REGISTRY: ghcr.io
strategy:
# Create a matrix of Node versions to test against (in parallel)
matrix:
node-version: [16.x, 18.x]
node-version: [18.x, 20.x]
# Do NOT exit immediately if one matrix job fails
fail-fast: false
# These are the actual CI steps to perform per job
steps:
# https://github.com/actions/checkout
- name: Checkout codebase
uses: actions/checkout@v3
uses: actions/checkout@v4
# https://github.com/actions/setup-node
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
@@ -72,7 +80,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- name: Cache Yarn dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
# Cache entire Yarn cache directory (see previous step)
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -99,26 +107,34 @@ jobs:
# so that it can be shared with the 'codecov' job (see below)
# NOTE: Angular CLI only supports code coverage for specs. See https://github.com/angular/angular-cli/issues/6286
- name: Upload code coverage report to Artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: matrix.node-version == '18.x'
with:
name: dspace-angular coverage report
name: coverage-report-${{ matrix.node-version }}
path: 'coverage/dspace-angular/lcov.info'
retention-days: 14
# Using docker-compose start backend using CI configuration
# Login to our Docker registry, so that we can access private Docker images using "docker compose" below.
- name: Login to ${{ env.DOCKER_REGISTRY }}
uses: docker/login-action@v3
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
# Using "docker compose" start backend using CI configuration
# and load assetstore from a cached copy
- name: Start DSpace REST Backend via Docker (for e2e tests)
run: |
docker-compose -f ./docker/docker-compose-ci.yml up -d
docker-compose -f ./docker/cli.yml -f ./docker/cli.assetstore.yml run --rm dspace-cli
docker compose -f ./docker/docker-compose-ci.yml up -d
docker compose -f ./docker/cli.yml -f ./docker/cli.assetstore.yml run --rm dspace-cli
docker container ls
# Run integration tests via Cypress.io
# https://github.com/cypress-io/github-action
# (NOTE: to run these e2e tests locally, just use 'ng e2e')
- name: Run e2e tests (integration tests)
uses: cypress-io/github-action@v5
uses: cypress-io/github-action@v6
with:
# Run tests in Chrome, headless mode (default)
browser: chrome
@@ -133,19 +149,19 @@ jobs:
# Cypress always creates a video of all e2e tests (whether they succeeded or failed)
# Save those in an Artifact
- name: Upload e2e test videos to Artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: always()
with:
name: e2e-test-videos
name: e2e-test-videos-${{ matrix.node-version }}
path: cypress/videos
# If e2e tests fail, Cypress creates a screenshot of what happened
# Save those in an Artifact
- name: Upload e2e test failure screenshots to Artifacts
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: failure()
with:
name: e2e-test-screenshots
name: e2e-test-screenshots-${{ matrix.node-version }}
path: cypress/screenshots
- name: Stop app (in case it stays up after e2e tests)
@@ -170,17 +186,120 @@ jobs:
# Get homepage and verify that the <meta name="title"> tag includes "DSpace".
# If it does, then SSR is working, as this tag is created by our MetadataService.
# This step also prints entire HTML of homepage for easier debugging if grep fails.
- name: Verify SSR (server-side rendering)
- name: Verify SSR (server-side rendering) on Homepage
run: |
result=$(wget -O- -q http://127.0.0.1:4000/home)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep DSpace
# Get a specific community in our test data and verify that the "<h1>" tag includes "Publications" (the community name).
# If it does, then SSR is working.
- name: Verify SSR on a Community page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/communities/0958c910-2037-42a9-81c7-dca80e3892b4)
echo "$result"
echo "$result" | grep -oE "<h1 [^>]*>[^><]*</h1>" | grep Publications
# Get a specific collection in our test data and verify that the "<h1>" tag includes "Articles" (the collection name).
# If it does, then SSR is working.
- name: Verify SSR on a Collection page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/collections/282164f5-d325-4740-8dd1-fa4d6d3e7200)
echo "$result"
echo "$result" | grep -oE "<h1 [^>]*>[^><]*</h1>" | grep Articles
# Get a specific publication in our test data and verify that the <meta name="title"> tag includes
# the title of this publication. If it does, then SSR is working.
- name: Verify SSR on a Publication page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/publication/6160810f-1e53-40db-81ef-f6621a727398)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "An Economic Model of Mortality Salience"
# Get a specific person in our test data and verify that the <meta name="title"> tag includes
# the name of the person. If it does, then SSR is working.
- name: Verify SSR on a Person page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/person/b1b2c768-bda1-448a-a073-fc541e8b24d9)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "Simmons, Cameron"
# Get a specific project in our test data and verify that the <meta name="title"> tag includes
# the name of the project. If it does, then SSR is working.
- name: Verify SSR on a Project page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/project/46ccb608-a74c-4bf6-bc7a-e29cc7defea9)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "University Research Fellowship"
# Get a specific orgunit in our test data and verify that the <meta name="title"> tag includes
# the name of the orgunit. If it does, then SSR is working.
- name: Verify SSR on an OrgUnit page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/orgunit/9851674d-bd9a-467b-8d84-068deb568ccf)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "Law and Development"
# Get a specific journal in our test data and verify that the <meta name="title"> tag includes
# the name of the journal. If it does, then SSR is working.
- name: Verify SSR on a Journal page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/journal/d4af6c3e-53d0-4757-81eb-566f3b45d63a)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "Environmental &amp; Architectural Phenomenology"
# Get a specific journal volume in our test data and verify that the <meta name="title"> tag includes
# the name of the volume. If it does, then SSR is working.
- name: Verify SSR on a Journal Volume page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/journalvolume/07c6249f-4bf7-494d-9ce3-6ffdb2aed538)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "Environmental &amp; Architectural Phenomenology Volume 28 (2017)"
# Get a specific journal issue in our test data and verify that the <meta name="title"> tag includes
# the name of the issue. If it does, then SSR is working.
- name: Verify SSR on a Journal Issue page
run: |
result=$(wget -O- -q http://127.0.0.1:4000/entities/journalissue/44c29473-5de2-48fa-b005-e5029aa1a50b)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep "Environmental &amp; Architectural Phenomenology Vol. 28, No. 1"
# Verify 301 Handle redirect behavior
# Note: /handle/123456789/260 is the same test Publication used by our e2e tests
- name: Verify 301 redirect from '/handle' URLs
run: |
result=$(wget --server-response --quiet http://127.0.0.1:4000/handle/123456789/260 2>&1 | head -1 | awk '{print $2}')
echo "$result"
[[ "$result" -eq "301" ]]
# Verify 403 error code behavior
- name: Verify 403 error code from '/403'
run: |
result=$(wget --server-response --quiet http://127.0.0.1:4000/403 2>&1 | head -1 | awk '{print $2}')
echo "$result"
[[ "$result" -eq "403" ]]
# Verify 404 error code behavior
- name: Verify 404 error code from '/404' and on invalid pages
run: |
result=$(wget --server-response --quiet http://127.0.0.1:4000/404 2>&1 | head -1 | awk '{print $2}')
echo "$result"
result2=$(wget --server-response --quiet http://127.0.0.1:4000/invalidurl 2>&1 | head -1 | awk '{print $2}')
echo "$result2"
[[ "$result" -eq "404" && "$result2" -eq "404" ]]
# Verify 500 error code behavior
- name: Verify 500 error code from '/500'
run: |
result=$(wget --server-response --quiet http://127.0.0.1:4000/500 2>&1 | head -1 | awk '{print $2}')
echo "$result"
[[ "$result" -eq "500" ]]
- name: Stop running app
run: kill -9 $(lsof -t -i:4000)
- name: Shutdown Docker containers
run: docker-compose -f ./docker/docker-compose-ci.yml down
run: docker compose -f ./docker/docker-compose-ci.yml down
# Codecov upload is a separate job in order to allow us to restart this separate from the entire build/test
# job above. This is necessary because Codecov uploads seem to randomly fail at times.
@@ -191,11 +310,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
# Download artifacts from previous 'tests' job
- name: Download coverage artifacts
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
# Now attempt upload to Codecov using its action.
# NOTE: We use a retry action to retry the Codecov upload if it fails the first time.
@@ -203,10 +322,15 @@ jobs:
# Retry action: https://github.com/marketplace/actions/retry-action
# Codecov action: https://github.com/codecov/codecov-action
- name: Upload coverage to Codecov.io
uses: Wandalen/wretry.action@v1.0.36
uses: Wandalen/wretry.action@v1.3.0
with:
action: codecov/codecov-action@v3
# Try upload 5 times max
action: codecov/codecov-action@v4
# Ensure codecov-action throws an error when it fails to upload
# This allows us to auto-restart the action if an error is thrown
with: |
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
# Try re-running action 5 times max
attempt_limit: 5
# Run again in 30 seconds
attempt_delay: 30000

View File

@@ -5,12 +5,16 @@
# because CodeQL requires a fresh build with all tests *disabled*.
name: "Code Scanning"
# Run this code scan for all pushes / PRs to main branch. Also run once a week.
# Run this code scan for all pushes / PRs to main or maintenance branches. Also run once a week.
on:
push:
branches: [ main ]
branches:
- main
- 'dspace-**'
pull_request:
branches: [ main ]
branches:
- main
- 'dspace-**'
# Don't run if PR is only updating static documentation
paths-ignore:
- '**/*.md'
@@ -31,19 +35,19 @@ jobs:
steps:
# https://github.com/actions/checkout
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
# https://github.com/github/codeql-action
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: javascript
# Autobuild attempts to build any compiled languages
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v3
# Perform GitHub Code Scanning.
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

View File

@@ -3,6 +3,9 @@ name: Docker images
# Run this Build for all pushes to 'main' or maintenance branches, or tagged releases.
# Also run for PRs to ensure PR doesn't break Docker build process
# NOTE: uses "reusable-docker-build.yml" in DSpace/DSpace to actually build each of the Docker images
# https://github.com/DSpace/DSpace/blob/dspace-7_x/.github/workflows/reusable-docker-build.yml
#
on:
push:
branches:
@@ -13,108 +16,45 @@ on:
pull_request:
permissions:
contents: read # to fetch code (actions/checkout)
contents: read # to fetch code (actions/checkout)
packages: write # to write images to GitHub Container Registry (GHCR)
jobs:
docker:
#############################################################
# Build/Push the 'dspace/dspace-angular' image
#############################################################
dspace-angular:
# Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace-angular'
if: github.repository == 'dspace/dspace-angular'
runs-on: ubuntu-latest
env:
# Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action)
# For a new commit on default branch (main), use the literal tag 'dspace-7_x' on Docker image.
# For a new commit on other branches, use the branch name as the tag for Docker image.
# For a new tag, copy that tag name as the tag for Docker image.
IMAGE_TAGS: |
type=raw,value=dspace-7_x,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }}
type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }}
type=ref,event=tag
# Define default tag "flavor" for docker/metadata-action per
# https://github.com/docker/metadata-action#flavor-input
# We turn off 'latest' tag by default.
TAGS_FLAVOR: |
latest=false
# Architectures / Platforms for which we will build Docker images
# If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work.
# If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64.
PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }}
# Use the reusable-docker-build.yml script from DSpace/DSpace repo to build our Docker image
uses: DSpace/DSpace/.github/workflows/reusable-docker-build.yml@dspace-7_x
with:
build_id: dspace-angular-dev
image_name: dspace/dspace-angular
dockerfile_path: ./Dockerfile
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_ACCESS_TOKEN: ${{ secrets.DOCKER_ACCESS_TOKEN }}
steps:
# https://github.com/actions/checkout
- name: Checkout codebase
uses: actions/checkout@v3
# https://github.com/docker/setup-buildx-action
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v2
# https://github.com/docker/setup-qemu-action
- name: Set up QEMU emulation to build for multiple architectures
uses: docker/setup-qemu-action@v2
# https://github.com/docker/login-action
- name: Login to DockerHub
# Only login if not a PR, as PRs only trigger a Docker build and not a push
if: github.event_name != 'pull_request'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
###############################################
# Build/Push the 'dspace/dspace-angular' image
###############################################
# https://github.com/docker/metadata-action
# Get Metadata for docker_build step below
- name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular' image
id: meta_build
uses: docker/metadata-action@v4
with:
images: dspace/dspace-angular
tags: ${{ env.IMAGE_TAGS }}
flavor: ${{ env.TAGS_FLAVOR }}
# https://github.com/docker/build-push-action
- name: Build and push 'dspace-angular' image
id: docker_build
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
platforms: ${{ env.PLATFORMS }}
# For pull requests, we run the Docker build (to ensure no PR changes break the build),
# but we ONLY do an image push to DockerHub if it's NOT a PR
push: ${{ github.event_name != 'pull_request' }}
# Use tags / labels provided by 'docker/metadata-action' above
tags: ${{ steps.meta_build.outputs.tags }}
labels: ${{ steps.meta_build.outputs.labels }}
#####################################################
# Build/Push the 'dspace/dspace-angular' image ('-dist' tag)
#####################################################
# https://github.com/docker/metadata-action
# Get Metadata for docker_build_dist step below
- name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular-dist' image
id: meta_build_dist
uses: docker/metadata-action@v4
with:
images: dspace/dspace-angular
tags: ${{ env.IMAGE_TAGS }}
# As this is a "dist" image, its tags are all suffixed with "-dist". Otherwise, it uses the same
# tagging logic as the primary 'dspace/dspace-angular' image above.
flavor: ${{ env.TAGS_FLAVOR }}
suffix=-dist
- name: Build and push 'dspace-angular-dist' image
id: docker_build_dist
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile.dist
platforms: ${{ env.PLATFORMS }}
# For pull requests, we run the Docker build (to ensure no PR changes break the build),
# but we ONLY do an image push to DockerHub if it's NOT a PR
push: ${{ github.event_name != 'pull_request' }}
# Use tags / labels provided by 'docker/metadata-action' above
tags: ${{ steps.meta_build_dist.outputs.tags }}
labels: ${{ steps.meta_build_dist.outputs.labels }}
#############################################################
# Build/Push the 'dspace/dspace-angular' image ('-dist' tag)
#############################################################
dspace-angular-dist:
# Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace-angular'
if: github.repository == 'dspace/dspace-angular'
# Use the reusable-docker-build.yml script from DSpace/DSpace repo to build our Docker image
uses: DSpace/DSpace/.github/workflows/reusable-docker-build.yml@dspace-7_x
with:
build_id: dspace-angular-dist
image_name: dspace/dspace-angular
dockerfile_path: ./Dockerfile.dist
# As this is a "dist" image, its tags are all suffixed with "-dist". Otherwise, it uses the same
# tagging logic as the primary 'dspace/dspace-angular' image above.
tags_flavor: suffix=-dist
secrets:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_ACCESS_TOKEN: ${{ secrets.DOCKER_ACCESS_TOKEN }}
# Enable redeploy of sandbox & demo if the branch for this image matches the deployment branch of
# these sites as specified in reusable-docker-build.xml
REDEPLOY_SANDBOX_URL: ${{ secrets.REDEPLOY_SANDBOX_URL }}
REDEPLOY_DEMO_URL: ${{ secrets.REDEPLOY_DEMO_URL }}

View File

@@ -16,7 +16,7 @@ jobs:
# Only add to project board if issue is flagged as "needs triage" or has no labels
# NOTE: By default we flag new issues as "needs triage" in our issue template
if: (contains(github.event.issue.labels.*.name, 'needs triage') || join(github.event.issue.labels.*.name) == '')
uses: actions/add-to-project@v0.5.0
uses: actions/add-to-project@v1.0.0
# Note, the authentication token below is an ORG level Secret.
# It must be created/recreated manually via a personal access token with admin:org, project, public_repo permissions
# See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token#permissions-for-the-github_token

View File

@@ -1,11 +1,12 @@
# This workflow checks open PRs for merge conflicts and labels them when conflicts are found
name: Check for merge conflicts
# Run whenever the "main" branch is updated
# NOTE: This means merge conflicts are only checked for when a PR is merged to main.
# Run this for all pushes (i.e. merges) to 'main' or maintenance branches
on:
push:
branches: [ main ]
branches:
- main
- 'dspace-**'
# So that the `conflict_label_name` is removed if conflicts are resolved,
# we allow this to run for `pull_request_target` so that github secrets are available.
pull_request_target:
@@ -24,6 +25,8 @@ jobs:
# See: https://github.com/prince-chrismc/label-merge-conflicts-action
- name: Auto-label PRs with merge conflicts
uses: prince-chrismc/label-merge-conflicts-action@v3
# Ignore any failures -- may occur (randomly?) for older, outdated PRs.
continue-on-error: true
# Add "merge conflict" label if a merge conflict is detected. Remove it when resolved.
# Note, the authentication token is created automatically
# See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token

View File

@@ -0,0 +1,46 @@
# This workflow will attempt to port a merged pull request to
# the branch specified in a "port to" label (if exists)
name: Port merged Pull Request
# Only run for merged PRs against the "main" or maintenance branches
# We allow this to run for `pull_request_target` so that github secrets are available
# (This is required when the PR comes from a forked repo)
on:
pull_request_target:
types: [ closed ]
branches:
- main
- 'dspace-**'
permissions:
contents: write # so action can add comments
pull-requests: write # so action can create pull requests
jobs:
port_pr:
runs-on: ubuntu-latest
# Don't run on closed *unmerged* pull requests
if: github.event.pull_request.merged
steps:
# Checkout code
- uses: actions/checkout@v4
# Port PR to other branch (ONLY if labeled with "port to")
# See https://github.com/korthout/backport-action
- name: Create backport pull requests
uses: korthout/backport-action@v2
with:
# Trigger based on a "port to [branch]" label on PR
# (This label must specify the branch name to port to)
label_pattern: '^port to ([^ ]+)$'
# Title to add to the (newly created) port PR
pull_title: '[Port ${target_branch}] ${pull_title}'
# Description to add to the (newly created) port PR
pull_description: 'Port of #${pull_number} by @${pull_author} to `${target_branch}`.'
# Copy all labels from original PR to (newly created) port PR
# NOTE: The labels matching 'label_pattern' are automatically excluded
copy_labels_pattern: '.*'
# Skip any merge commits in the ported PR. This means only non-merge commits are cherry-picked to the new PR
merge_commits: 'skip'
# Use a personal access token (PAT) to create PR as 'dspace-bot' user.
# A PAT is required in order for the new PR to trigger its own actions (for CI checks)
github_token: ${{ secrets.PR_PORT_TOKEN }}

View File

@@ -0,0 +1,24 @@
# This workflow runs whenever a new pull request is created
name: Pull Request opened
# Only run for newly opened PRs against the "main" or maintenance branches
# We allow this to run for `pull_request_target` so that github secrets are available
# (This is required to assign a PR back to the creator when the PR comes from a forked repo)
on:
pull_request_target:
types: [ opened ]
branches:
- main
- 'dspace-**'
permissions:
pull-requests: write
jobs:
automation:
runs-on: ubuntu-latest
steps:
# Assign the PR to whomever created it. This is useful for visualizing assignments on project boards
# See https://github.com/toshimaru/auto-author-assign
- name: Assign PR to creator
uses: toshimaru/auto-author-assign@v2.1.0

View File

@@ -1,7 +1,7 @@
# This image will be published as dspace/dspace-angular
# See https://github.com/DSpace/dspace-angular/tree/main/docker for usage details
FROM node:18-alpine
FROM docker.io/node:18-alpine
# Ensure Python and other build tools are available
# These are needed to install some node modules, especially on linux/arm64
@@ -24,5 +24,5 @@ ENV NODE_OPTIONS="--max_old_space_size=4096"
# Listen / accept connections from all IP addresses.
# NOTE: At this time it is only possible to run Docker container in Production mode
# if you have a public URL. See https://github.com/DSpace/dspace-angular/issues/1485
ENV NODE_ENV development
ENV NODE_ENV=development
CMD yarn serve --host 0.0.0.0

View File

@@ -4,7 +4,7 @@
# Test build:
# docker build -f Dockerfile.dist -t dspace/dspace-angular:dspace-7_x-dist .
FROM node:18-alpine as build
FROM docker.io/node:18-alpine AS build
# Ensure Python and other build tools are available
# These are needed to install some node modules, especially on linux/arm64
@@ -26,6 +26,6 @@ COPY --chown=node:node docker/dspace-ui.json /app/dspace-ui.json
WORKDIR /app
USER node
ENV NODE_ENV production
ENV NODE_ENV=production
EXPOSE 4000
CMD pm2-runtime start dspace-ui.json --json

View File

@@ -157,8 +157,8 @@ DSPACE_UI_SSL => DSPACE_SSL
The same settings can also be overwritten by setting system environment variables instead, E.g.:
```bash
export DSPACE_HOST=api7.dspace.org
export DSPACE_UI_PORT=4200
export DSPACE_HOST=demo.dspace.org
export DSPACE_UI_PORT=4000
```
The priority works as follows: **environment variable** overrides **variable in `.env` file** overrides external config set by `DSPACE_APP_CONFIG_PATH` overrides **`config.(prod or dev).yml`**
@@ -288,7 +288,7 @@ E2E tests (aka integration tests) use [Cypress.io](https://www.cypress.io/). Con
The test files can be found in the `./cypress/integration/` folder.
Before you can run e2e tests, two things are REQUIRED:
1. You MUST be running the DSpace backend (i.e. REST API) locally. The e2e tests will *NOT* succeed if run against our demo REST API (https://api7.dspace.org/server/), as that server is uncontrolled and may have content added/removed at any time.
1. You MUST be running the DSpace backend (i.e. REST API) locally. The e2e tests will *NOT* succeed if run against our demo/sandbox REST API (https://demo.dspace.org/server/ or https://sandbox.dspace.org/server/), as those sites may have content added/removed at any time.
* After starting up your backend on localhost, make sure either your `config.prod.yml` or `config.dev.yml` has its `rest` settings defined to use that localhost backend.
* If you'd prefer, you may instead use environment variables as described at [Configuring](#configuring). For example:
```

View File

@@ -30,7 +30,6 @@
"lodash",
"jwt-decode",
"uuid",
"webfontloader",
"zone.js"
],
"outputPath": "dist/browser",

View File

@@ -1,7 +1,7 @@
# NOTE: will log all redux actions and transfers in console
debug: false
# Angular Universal server settings
# Angular User Inteface settings
# NOTE: these settings define where Node.js will start your UI application. Therefore, these
# "ui" settings usually specify a localhost port/URL which is later proxied to a public URL (using Apache or similar)
ui:
@@ -17,15 +17,61 @@ ui:
# Trust X-FORWARDED-* headers from proxies (default = true)
useProxies: true
# Angular Universal / Server Side Rendering (SSR) settings
universal:
# Whether to tell Angular to inline "critical" styles into the server-side rendered HTML.
# Determining which styles are critical is a relatively expensive operation; this option is
# disabled (false) by default to boost server performance at the expense of loading smoothness.
inlineCriticalCss: false
# Patterns to be run as regexes against the path of the page to check if SSR is allowed.
# If the path match any of the regexes it will be served directly in CSR.
# By default, excludes community and collection browse, global browse, global search, community list, statistics and various administrative tools.
excludePathPatterns:
- pattern: "^/communities/[a-f0-9-]{36}/browse(/.*)?$"
flag: "i"
- pattern: "^/collections/[a-f0-9-]{36}/browse(/.*)?$"
flag: "i"
- pattern: "^/browse/"
- pattern: "^/search$"
- pattern: "^/community-list$"
- pattern: "^/admin/"
- pattern: "^/processes/?"
- pattern: "^/notifications/"
- pattern: "^/statistics/?"
- pattern: "^/access-control/"
- pattern: "^/health$"
# Whether to enable rendering of Search component on SSR.
# If set to true the component will be included in the HTML returned from the server side rendering.
# If set to false the component will not be included in the HTML returned from the server side rendering.
enableSearchComponent: false
# Whether to enable rendering of Browse component on SSR.
# If set to true the component will be included in the HTML returned from the server side rendering.
# If set to false the component will not be included in the HTML returned from the server side rendering.
enableBrowseComponent: false
# Enable state transfer from the server-side application to the client-side application.
# Defaults to true.
# Note: When using an external application cache layer, it's recommended not to transfer the state to avoid caching it.
# Disabling it ensures that dynamic state information is not inadvertently cached, which can improve security and
# ensure that users always use the most up-to-date state.
transferState: true
# When a different REST base URL is used for the server-side application, the generated state contains references to
# REST resources with the internal URL configured. By default, these internal URLs are replaced with public URLs.
# Disable this setting to avoid URL replacement during SSR. In this the state is not transferred to avoid security issues.
replaceRestUrl: true
# The REST API server settings
# NOTE: these settings define which (publicly available) REST API to use. They are usually
# 'synced' with the 'dspace.server.url' setting in your backend's local.cfg.
rest:
ssl: true
host: api7.dspace.org
host: demo.dspace.org
port: 443
# NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: /server
# Provide a different REST url to be used during SSR execution. It must contain the whole url including protocol, server port and
# server namespace (uncomment to use it).
#ssrBaseUrl: http://localhost:8080/server
# Caching settings
cache:
@@ -75,7 +121,7 @@ cache:
anonymousCache:
# Maximum number of pages to cache. Default is zero (0) which means anonymous user cache is disabled.
# As all pages are cached in server memory, increasing this value will increase memory needs.
# Individual cached pages are usually small (<100KB), so a value of max=1000 would only require ~100MB of memory.
# Individual cached pages are usually small (<100KB), so a value of max=1000 would only require ~100MB of memory.
max: 0
# Amount of time after which cached pages are considered stale (in ms). After becoming stale, the cached
# copy is automatically refreshed on the next request.
@@ -169,6 +215,12 @@ languages:
- code: en
label: English
active: true
- code: ar
label: العربية
active: true
- code: bn
label: বাংলা
active: true
- code: ca
label: Català
active: true
@@ -178,24 +230,36 @@ languages:
- code: de
label: Deutsch
active: true
- code: el
label: Ελληνικά
active: true
- code: es
label: Español
active: true
- code: fi
label: Suomi
active: true
- code: fr
label: Français
active: true
- code: gd
label: Gàidhlig
active: true
- code: it
label: Italiano
active: true
- code: lv
label: Latviešu
- code: hi
label: हिंदी
active: true
- code: hu
label: Magyar
active: true
- code: it
label: Italiano
active: true
- code: kk
label: Қазақ
active: true
- code: lv
label: Latviešu
active: true
- code: nl
label: Nederlands
active: true
@@ -208,8 +272,11 @@ languages:
- code: pt-BR
label: Português do Brasil
active: true
- code: fi
label: Suomi
- code: sr-lat
label: Srpski (lat)
active: true
- code: sr-cyr
label: Српски
active: true
- code: sv
label: Svenska
@@ -217,24 +284,12 @@ languages:
- code: tr
label: Türkçe
active: true
- code: vi
label: Tiếng Việt
active: true
- code: kk
label: Қазақ
active: true
- code: bn
label: বাংলা
active: true
- code: hi
label: हिंदी
active: true
- code: el
label: Ελληνικά
active: true
- code: uk
label: раї́нська
active: true
- code: vi
label: Tiếng Việt
active: true
# Browse-By Pages
@@ -292,33 +347,33 @@ themes:
#
# # A theme with a handle property will match the community, collection or item with the given
# # handle, and all collections and/or items within it
# - name: 'custom',
# handle: '10673/1233'
# - name: custom
# handle: 10673/1233
#
# # A theme with a regex property will match the route using a regular expression. If it
# # matches the route for a community or collection it will also apply to all collections
# # and/or items within it
# - name: 'custom',
# regex: 'collections\/e8043bc2.*'
# - name: custom
# regex: collections\/e8043bc2.*
#
# # A theme with a uuid property will match the community, collection or item with the given
# # ID, and all collections and/or items within it
# - name: 'custom',
# uuid: '0958c910-2037-42a9-81c7-dca80e3892b4'
# - name: custom
# uuid: 0958c910-2037-42a9-81c7-dca80e3892b4
#
# # The extends property specifies an ancestor theme (by name). Whenever a themed component is not found
# # in the current theme, its ancestor theme(s) will be checked recursively before falling back to default.
# - name: 'custom-A',
# extends: 'custom-B',
# - name: custom-A
# extends: custom-B
# # Any of the matching properties above can be used
# handle: '10673/34'
# handle: 10673/34
#
# - name: 'custom-B',
# extends: 'custom',
# handle: '10673/12'
# - name: custom-B
# extends: custom
# handle: 10673/12
#
# # A theme with only a name will match every route
# name: 'custom'
# name: custom
#
# # This theme will use the default bootstrap styling for DSpace components
# - name: BASE_THEME_NAME
@@ -376,7 +431,35 @@ vocabularies:
vocabulary: 'srsc'
enabled: true
# Default collection/community sorting order at Advanced search, Create/update community and collection when there are not a query.
# Default collection/community sorting order at Advanced search, Create/update community and collection when there are not a query.
comcolSelectionSort:
sortField: 'dc.title'
sortDirection: 'ASC'
sortDirection: 'ASC'
# Live Region configuration
# Live Region as defined by w3c, https://www.w3.org/TR/wai-aria-1.1/#terms:
# Live regions are perceivable regions of a web page that are typically updated as a
# result of an external event when user focus may be elsewhere.
#
# The DSpace live region is a component present at the bottom of all pages that is invisible by default, but is useful
# for screen readers. Any message pushed to the live region will be announced by the screen reader. These messages
# usually contain information about changes on the page that might not be in focus.
liveRegion:
# The duration after which messages disappear from the live region in milliseconds
messageTimeOutDurationMs: 30000
# The visibility of the live region. Setting this to true is only useful for debugging purposes.
isVisible: false
# Search settings
search:
# Number used to render n UI elements called loading skeletons that act as placeholders.
# These elements indicate that some content will be loaded in their stead.
# Since we don't know how many filters will be loaded before we receive a response from the server we use this parameter for the skeletons count.
# e.g. If we set 5 then 5 loading skeletons will be visualized before the actual filters are retrieved.
defaultFiltersCount: 5
# Configuration for storing accessibility settings, used by the AccessibilitySettingsService
accessibility:
# The duration in days after which the accessibility settings cookie expires
cookieExpirationDuration: 7

View File

@@ -1,5 +1,5 @@
rest:
ssl: true
host: api7.dspace.org
host: demo.dspace.org
port: 443
nameSpace: /server

View File

@@ -1,6 +1,7 @@
import { defineConfig } from 'cypress';
export default defineConfig({
video: true,
videosFolder: 'cypress/videos',
screenshotsFolder: 'cypress/screenshots',
fixturesFolder: 'cypress/fixtures',
@@ -9,27 +10,33 @@ export default defineConfig({
openMode: 0,
},
env: {
// Global constants used in DSpace e2e tests (see also ./cypress/support/e2e.ts)
// May be overridden in our cypress.json config file using specified environment variables.
// Global DSpace environment variables used in all our Cypress e2e tests
// May be modified in this config, or overridden in a variety of ways.
// See Cypress environment variable docs: https://docs.cypress.io/guides/guides/environment-variables
// Default values listed here are all valid for the Demo Entities Data set available at
// https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data
// (This is the data set used in our CI environment)
// Admin account used for administrative tests
DSPACE_TEST_ADMIN_USER: 'dspacedemo+admin@gmail.com',
DSPACE_TEST_ADMIN_USER_UUID: '335647b6-8a52-4ecb-a8c1-7ebabb199bda',
DSPACE_TEST_ADMIN_PASSWORD: 'dspace',
// Community/collection/publication used for view/edit tests
DSPACE_TEST_COMMUNITY: '0958c910-2037-42a9-81c7-dca80e3892b4',
DSPACE_TEST_COLLECTION: '282164f5-d325-4740-8dd1-fa4d6d3e7200',
DSPACE_TEST_ENTITY_PUBLICATION: 'e98b0f27-5c19-49a0-960d-eb6ad5287067',
DSPACE_TEST_ENTITY_PUBLICATION: '6160810f-1e53-40db-81ef-f6621a727398',
// Search term (should return results) used in search tests
DSPACE_TEST_SEARCH_TERM: 'test',
// Collection used for submission tests
// Main Collection used for submission tests. Should be able to accept normal Item objects
DSPACE_TEST_SUBMIT_COLLECTION_NAME: 'Sample Collection',
DSPACE_TEST_SUBMIT_COLLECTION_UUID: '9d8334e9-25d3-4a67-9cea-3dffdef80144',
// Collection used for Person entity submission tests. MUST be configured with EntityType=Person.
DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME: 'People',
// Account used to test basic submission process
DSPACE_TEST_SUBMIT_USER: 'dspacedemo+submit@gmail.com',
DSPACE_TEST_SUBMIT_USER_PASSWORD: 'dspace',
// Administrator users group
DSPACE_ADMINISTRATOR_GROUP: 'e59f5659-bff9-451e-b28f-439e7bd467e4'
},
e2e: {
// Setup our plugins for e2e tests

View File

@@ -0,0 +1,54 @@
import { testA11y } from 'cypress/support/utils';
describe('Admin Add New Modals', () => {
beforeEach(() => {
// Must login as an Admin for sidebar to appear
cy.visit('/login');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('Add new Community modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-new-title').should('be.visible');
cy.get('#admin-menu-section-new-title').click();
cy.get('a[data-test="menu.section.new_community"]').click();
// Analyze <ds-create-community-parent-selector> for accessibility
testA11y('ds-create-community-parent-selector');
});
it('Add new Collection modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-new-title').should('be.visible');
cy.get('#admin-menu-section-new-title').click();
cy.get('a[data-test="menu.section.new_collection"]').click();
// Analyze <ds-create-collection-parent-selector> for accessibility
testA11y('ds-create-collection-parent-selector');
});
it('Add new Item modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-new-title').should('be.visible');
cy.get('#admin-menu-section-new-title').click();
cy.get('a[data-test="menu.section.new_item"]').click();
// Analyze <ds-create-item-parent-selector> for accessibility
testA11y('ds-create-item-parent-selector');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Admin Curation Tasks', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/curation-tasks');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-admin-curation-task').should('be.visible');
// Analyze <ds-admin-curation-task> for accessibility issues
testA11y('ds-admin-curation-task');
});
});

View File

@@ -0,0 +1,54 @@
import { testA11y } from 'cypress/support/utils';
describe('Admin Edit Modals', () => {
beforeEach(() => {
// Must login as an Admin for sidebar to appear
cy.visit('/login');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('Edit Community modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-edit-title').should('be.visible');
cy.get('#admin-menu-section-edit-title').click();
cy.get('a[data-test="menu.section.edit_community"]').click();
// Analyze <ds-edit-community-selector> for accessibility
testA11y('ds-edit-community-selector');
});
it('Edit Collection modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-edit-title').should('be.visible');
cy.get('#admin-menu-section-edit-title').click();
cy.get('a[data-test="menu.section.edit_collection"]').click();
// Analyze <ds-edit-collection-selector> for accessibility
testA11y('ds-edit-collection-selector');
});
it('Edit Item modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-edit-title').should('be.visible');
cy.get('#admin-menu-section-edit-title').click();
cy.get('a[data-test="menu.section.edit_item"]').click();
// Analyze <ds-edit-item-selector> for accessibility
testA11y('ds-edit-item-selector');
});
});

View File

@@ -0,0 +1,39 @@
import { testA11y } from 'cypress/support/utils';
describe('Admin Export Modals', () => {
beforeEach(() => {
// Must login as an Admin for sidebar to appear
cy.visit('/login');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('Export metadata modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-export-title').should('be.visible');
cy.get('#admin-menu-section-export-title').click();
cy.get('a[data-test="menu.section.export_metadata"]').click();
// Analyze <ds-export-metadata-selector> for accessibility
testA11y('ds-export-metadata-selector');
});
it('Export batch modal should pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').trigger('mouseover');
cy.get('#sidebar-collapse-toggle').click();
// Click on entry of menu
cy.get('#admin-menu-section-export-title').should('be.visible');
cy.get('#admin-menu-section-export-title').click();
cy.get('a[data-test="menu.section.export_batch"]').click();
// Analyze <ds-export-batch-selector> for accessibility
testA11y('ds-export-metadata-selector');
});
});

View File

@@ -0,0 +1,21 @@
import { testA11y } from 'cypress/support/utils';
describe('Admin Search Page', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/search');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
//Page must first be visible
cy.get('ds-admin-search-page').should('be.visible');
// At least one search result should be displayed
cy.get('[data-test="list-object"]').should('be.visible');
// Click each filter toggle to open *every* filter
// (As we want to scan filter section for accessibility issues as well)
cy.get('[data-test="filter-toggle"]').click({ multiple: true });
// Analyze <ds-admin-search-page> for accessibility issues
testA11y('ds-admin-search-page');
});
});

View File

@@ -0,0 +1,28 @@
import { Options } from 'cypress-axe';
import { testA11y } from 'cypress/support/utils';
describe('Admin Sidebar', () => {
beforeEach(() => {
// Must login as an Admin for sidebar to appear
cy.visit('/login');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should be pinnable and pass accessibility tests', () => {
// Pin the sidebar open
cy.get('#sidebar-collapse-toggle').click();
// Click on every expandable section to open all menus
cy.get('ds-expandable-admin-sidebar-section').click({multiple: true});
// Analyze <ds-admin-sidebar> for accessibility
testA11y('ds-admin-sidebar',
{
rules: {
// Currently all expandable sections have nested interactive elements
// See https://github.com/DSpace/dspace-angular/issues/2178
'nested-interactive': { enabled: false },
}
} as Options);
});
});

View File

@@ -0,0 +1,21 @@
import { testA11y } from 'cypress/support/utils';
describe('Admin Workflow Page', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/workflow');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-admin-workflow-page').should('be.visible');
// At least one search result should be displayed
cy.get('[data-test="list-object"]').should('be.visible');
// Click each filter toggle to open *every* filter
// (As we want to scan filter section for accessibility issues as well)
cy.get('[data-test="filter-toggle"]').click({ multiple: true });
// Analyze <ds-admin-workflow-page> for accessibility issues
testA11y('ds-admin-workflow-page');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Batch Import Page', () => {
beforeEach(() => {
// Must login as an Admin to see processes
cy.visit('/admin/batch-import');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Batch import form must first be visible
cy.get('ds-batch-import-page').should('be.visible');
// Analyze <ds-batch-import-page> for accessibility issues
testA11y('ds-batch-import-page');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Bitstreams Formats', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/registries/bitstream-formats');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-bitstream-formats').should('be.visible');
// Analyze <ds-bitstream-formats> for accessibility issues
testA11y('ds-bitstream-formats');
});
});

View File

@@ -1,10 +1,9 @@
import { TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Breadcrumbs', () => {
it('should pass accessibility tests', () => {
// Visit an Item, as those have more breadcrumbs
cy.visit('/entities/publication/'.concat(TEST_ENTITY_PUBLICATION));
cy.visit('/entities/publication/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION')));
// Wait for breadcrumbs to be visible
cy.get('ds-breadcrumbs').should('be.visible');

View File

@@ -0,0 +1,31 @@
import { testA11y } from 'cypress/support/utils';
import { Options } from 'cypress-axe';
describe('Bulk Access', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/bulk-access');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-bulk-access').should('be.visible');
// At least one search result should be displayed
cy.get('[data-test="list-object"]').should('be.visible');
// Click each filter toggle to open *every* filter
// (As we want to scan filter section for accessibility issues as well)
cy.get('[data-test="filter-toggle"]').click({ multiple: true });
// Analyze <ds-bulk-access> for accessibility issues
testA11y('ds-bulk-access', {
rules: {
// All panels are accordians & fail "aria-required-children" and "nested-interactive".
// Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216
'aria-required-children': { enabled: false },
'nested-interactive': { enabled: false },
// Card titles fail this test currently
'heading-order': { enabled: false },
},
} as Options);
});
});

View File

@@ -0,0 +1,128 @@
import { testA11y } from 'cypress/support/utils';
const COLLECTION_EDIT_PAGE = '/collections/'.concat(Cypress.env('DSPACE_TEST_COLLECTION')).concat('/edit');
beforeEach(() => {
// All tests start with visiting the Edit Collection Page
cy.visit(COLLECTION_EDIT_PAGE);
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
describe('Edit Collection > Edit Metadata tab', () => {
it('should pass accessibility tests', () => {
// <ds-edit-collection> tag must be loaded
cy.get('ds-edit-collection').should('be.visible');
// Analyze <ds-edit-collection> for accessibility issues
testA11y('ds-edit-collection');
});
});
describe('Edit Collection > Assign Roles tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="roles"]').click();
// <ds-collection-roles> tag must be loaded
cy.get('ds-collection-roles').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-collection-roles');
});
});
describe('Edit Collection > Content Source tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="source"]').click();
// <ds-collection-source> tag must be loaded
cy.get('ds-collection-source').should('be.visible');
// Check the external source checkbox (to display all fields on the page)
cy.get('#externalSourceCheck').check();
// Wait for the source controls to appear
// cy.get('ds-collection-source-controls').should('be.visible');
// Analyze entire page for accessibility issues
testA11y('ds-collection-source');
});
});
describe('Edit Collection > Curate tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="curate"]').click();
// <ds-collection-curate> tag must be loaded
cy.get('ds-collection-curate').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-collection-curate');
});
});
describe('Edit Collection > Access Control tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="access-control"]').click();
// <ds-collection-access-control> tag must be loaded
cy.get('ds-collection-access-control').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-collection-access-control');
});
});
describe('Edit Collection > Authorizations tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="authorizations"]').click();
// <ds-collection-authorizations> tag must be loaded
cy.get('ds-collection-authorizations').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-collection-authorizations');
});
});
describe('Edit Collection > Item Mapper tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="mapper"]').click();
// <ds-collection-item-mapper> tag must be loaded
cy.get('ds-collection-item-mapper').should('be.visible');
// Analyze entire page for accessibility issues
testA11y('ds-collection-item-mapper');
// Click on the "Map new Items" tab
cy.get('li[data-test="mapTab"] a').click();
// Make sure search form is now visible
cy.get('ds-search-form').should('be.visible');
// Analyze entire page (again) for accessibility issues
testA11y('ds-collection-item-mapper');
});
});
describe('Edit Collection > Delete page', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="delete-button"]').click();
// <ds-delete-collection> tag must be loaded
cy.get('ds-delete-collection').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-delete-collection');
});
});

View File

@@ -1,15 +1,21 @@
import { TEST_COLLECTION } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Collection Page', () => {
it('should pass accessibility tests', () => {
cy.visit('/collections/'.concat(TEST_COLLECTION));
it('should pass accessibility tests', () => {
cy.intercept('POST', '/server/api/statistics/viewevents').as('viewevent');
// <ds-collection-page> tag must be loaded
cy.get('ds-collection-page').should('be.visible');
// Visit Collections page
cy.visit('/collections/'.concat(Cypress.env('DSPACE_TEST_COLLECTION')));
// Analyze <ds-collection-page> for accessibility issues
testA11y('ds-collection-page');
});
// Wait for the "viewevent" to trigger on the Collection page.
// This ensures our <ds-collection-page> tag is fully loaded, as the <ds-view-event> tag is contained within it.
cy.wait('@viewevent');
// <ds-collection-page> tag must be loaded
cy.get('ds-collection-page').should('be.visible');
// Analyze <ds-collection-page> for accessibility issues
testA11y('ds-collection-page');
});
});

View File

@@ -1,12 +1,12 @@
import { REGEX_MATCH_NON_EMPTY_TEXT, TEST_COLLECTION } from 'cypress/support/e2e';
import { REGEX_MATCH_NON_EMPTY_TEXT } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Collection Statistics Page', () => {
const COLLECTIONSTATISTICSPAGE = '/statistics/collections/'.concat(TEST_COLLECTION);
const COLLECTIONSTATISTICSPAGE = '/statistics/collections/'.concat(Cypress.env('DSPACE_TEST_COLLECTION'));
it('should load if you click on "Statistics" from a Collection page', () => {
cy.visit('/collections/'.concat(TEST_COLLECTION));
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.visit('/collections/'.concat(Cypress.env('DSPACE_TEST_COLLECTION')));
cy.get('ds-navbar ds-link-menu-item a[data-test="link-menu-item.menu.section.statistics"]').click();
cy.location('pathname').should('eq', COLLECTIONSTATISTICSPAGE);
});
@@ -18,7 +18,7 @@ describe('Collection Statistics Page', () => {
it('should contain a "Total visits per month" section', () => {
cy.visit(COLLECTIONSTATISTICSPAGE);
// Check just for existence because this table is empty in CI environment as it's historical data
cy.get('.'.concat(TEST_COLLECTION).concat('_TotalVisitsPerMonth')).should('exist');
cy.get('.'.concat(Cypress.env('DSPACE_TEST_COLLECTION')).concat('_TotalVisitsPerMonth')).should('exist');
});
it('should pass accessibility tests', () => {

View File

@@ -0,0 +1,86 @@
import { testA11y } from 'cypress/support/utils';
const COMMUNITY_EDIT_PAGE = '/communities/'.concat(Cypress.env('DSPACE_TEST_COMMUNITY')).concat('/edit');
beforeEach(() => {
// All tests start with visiting the Edit Community Page
cy.visit(COMMUNITY_EDIT_PAGE);
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
describe('Edit Community > Edit Metadata tab', () => {
it('should pass accessibility tests', () => {
// <ds-edit-community> tag must be loaded
cy.get('ds-edit-community').should('be.visible');
// Analyze <ds-edit-community> for accessibility issues
testA11y('ds-edit-community');
});
});
describe('Edit Community > Assign Roles tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="roles"]').click();
// <ds-community-roles> tag must be loaded
cy.get('ds-community-roles').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-community-roles');
});
});
describe('Edit Community > Curate tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="curate"]').click();
// <ds-community-curate> tag must be loaded
cy.get('ds-community-curate').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-community-curate');
});
});
describe('Edit Community > Access Control tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="access-control"]').click();
// <ds-community-access-control> tag must be loaded
cy.get('ds-community-access-control').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-community-access-control');
});
});
describe('Edit Community > Authorizations tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="authorizations"]').click();
// <ds-community-authorizations> tag must be loaded
cy.get('ds-community-authorizations').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-community-authorizations');
});
});
describe('Edit Community > Delete page', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="delete-button"]').click();
// <ds-delete-community> tag must be loaded
cy.get('ds-delete-community').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-delete-community');
});
});

View File

@@ -1,4 +1,3 @@
import { Options } from 'cypress-axe';
import { testA11y } from 'cypress/support/utils';
describe('Community List Page', () => {
@@ -13,13 +12,6 @@ describe('Community List Page', () => {
cy.get('[data-test="expand-button"]').click({ multiple: true });
// Analyze <ds-community-list-page> for accessibility issues
// Disable heading-order checks until it is fixed
testA11y('ds-community-list-page',
{
rules: {
'heading-order': { enabled: false }
}
} as Options
);
testA11y('ds-community-list-page');
});
});

View File

@@ -1,15 +1,14 @@
import { TEST_COMMUNITY } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Community Page', () => {
it('should pass accessibility tests', () => {
cy.visit('/communities/'.concat(TEST_COMMUNITY));
cy.visit('/communities/'.concat(Cypress.env('DSPACE_TEST_COMMUNITY')));
// <ds-community-page> tag must be loaded
cy.get('ds-community-page').should('be.visible');
// Analyze <ds-community-page> for accessibility issues
testA11y('ds-community-page',);
testA11y('ds-community-page');
});
});

View File

@@ -1,12 +1,12 @@
import { REGEX_MATCH_NON_EMPTY_TEXT, TEST_COMMUNITY } from 'cypress/support/e2e';
import { REGEX_MATCH_NON_EMPTY_TEXT } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Community Statistics Page', () => {
const COMMUNITYSTATISTICSPAGE = '/statistics/communities/'.concat(TEST_COMMUNITY);
const COMMUNITYSTATISTICSPAGE = '/statistics/communities/'.concat(Cypress.env('DSPACE_TEST_COMMUNITY'));
it('should load if you click on "Statistics" from a Community page', () => {
cy.visit('/communities/'.concat(TEST_COMMUNITY));
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.visit('/communities/'.concat(Cypress.env('DSPACE_TEST_COMMUNITY')));
cy.get('a[data-test="link-menu-item.menu.section.statistics"]').click();
cy.location('pathname').should('eq', COMMUNITYSTATISTICSPAGE);
});
@@ -18,7 +18,7 @@ describe('Community Statistics Page', () => {
it('should contain a "Total visits per month" section', () => {
cy.visit(COMMUNITYSTATISTICSPAGE);
// Check just for existence because this table is empty in CI environment as it's historical data
cy.get('.'.concat(TEST_COMMUNITY).concat('_TotalVisitsPerMonth')).should('exist');
cy.get('.'.concat(Cypress.env('DSPACE_TEST_COMMUNITY')).concat('_TotalVisitsPerMonth')).should('exist');
});
it('should pass accessibility tests', () => {

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Create Eperson', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/epeople/create');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Form must first be visible
cy.get('ds-eperson-form').should('be.visible');
// Analyze <ds-eperson-form> for accessibility issues
testA11y('ds-eperson-form');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Create Group', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/groups/create');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Form must first be visible
cy.get('ds-group-form').should('be.visible');
// Analyze <ds-group-form> for accessibility issues
testA11y('ds-group-form');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Edit Eperson', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/epeople/'.concat(Cypress.env('DSPACE_TEST_ADMIN_USER_UUID')).concat('/edit'));
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Form must first be visible
cy.get('ds-eperson-form').should('be.visible');
// Analyze <ds-eperson-form> for accessibility issues
testA11y('ds-eperson-form');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Edit Group', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/groups/'.concat(Cypress.env('DSPACE_ADMINISTRATOR_GROUP')).concat('/edit'));
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Form must first be visible
cy.get('ds-group-form').should('be.visible');
// Analyze <ds-group-form> for accessibility issues
testA11y('ds-group-form');
});
});

View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('End User Agreement', () => {
it('should pass accessibility tests', () => {
cy.visit('/info/end-user-agreement');
// Page must first be visible
cy.get('ds-end-user-agreement').should('be.visible');
// Analyze <ds-end-user-agreement> for accessibility
testA11y('ds-end-user-agreement');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Epeople registry', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/epeople');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Epeople registry page must first be visible
cy.get('ds-epeople-registry').should('be.visible');
// Analyze <ds-epeople-registry> for accessibility issues
testA11y('ds-epeople-registry');
});
});

View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('Feedback', () => {
it('should pass accessibility tests', () => {
cy.visit('/info/feedback');
// Page must first be visible
cy.get('ds-feedback').should('be.visible');
// Analyze <ds-feedback> for accessibility
testA11y('ds-feedback');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Groups registry', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/access-control/groups');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Epeople registry page must first be visible
cy.get('ds-groups-registry').should('be.visible');
// Analyze <ds-groups-registry> for accessibility issues
testA11y('ds-groups-registry');
});
});

View File

@@ -8,12 +8,31 @@ describe('Header', () => {
cy.get('ds-header').should('be.visible');
// Analyze <ds-header> for accessibility
testA11y({
include: ['ds-header'],
exclude: [
['#search-navbar-container'], // search in navbar has duplicative ID. Will be fixed in #1174
['.dropdownLogin'] // "Log in" link has color contrast issues. Will be fixed in #1149
],
});
testA11y('ds-header');
});
it('should allow for changing language to German (for example)', () => {
cy.visit('/');
// Click the language switcher (globe) in header
cy.get('button[data-test="lang-switch"]').click();
// Click on the "Deusch" language in dropdown
cy.get('#language-menu-list div[role="option"]').contains('Deutsch').click();
// HTML "lang" attribute should switch to "de"
cy.get('html').invoke('attr', 'lang').should('eq', 'de');
// Login menu should now be in German
cy.get('[data-test="login-menu"]').contains('Anmelden');
// Change back to English from language switcher
cy.get('button[data-test="lang-switch"]').click();
cy.get('#language-menu-list div[role="option"]').contains('English').click();
// HTML "lang" attribute should switch to "en"
cy.get('html').invoke('attr', 'lang').should('eq', 'en');
// Login menu should now be in English
cy.get('[data-test="login-menu"]').contains('Log In');
});
});

View File

@@ -0,0 +1,62 @@
import { testA11y } from 'cypress/support/utils';
import { Options } from 'cypress-axe';
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/health');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
describe('Health Page > Status Tab', () => {
it('should pass accessibility tests', () => {
cy.intercept('GET', '/server/actuator/health').as('status');
cy.wait('@status');
cy.get('a[data-test="health-page.status-tab"]').click();
// Page must first be visible
cy.get('ds-health-page').should('be.visible');
cy.get('ds-health-panel').should('be.visible');
// wait for all the ds-health-info-component components to be rendered
cy.get('div[role="tabpanel"]').each(($panel: HTMLDivElement) => {
cy.wrap($panel).find('ds-health-component').should('be.visible');
});
// Analyze <ds-health-page> for accessibility issues
testA11y('ds-health-page', {
rules: {
// All panels are accordians & fail "aria-required-children" and "nested-interactive".
// Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216
'aria-required-children': { enabled: false },
'nested-interactive': { enabled: false },
},
} as Options);
});
});
describe('Health Page > Info Tab', () => {
it('should pass accessibility tests', () => {
cy.intercept('GET', '/server/actuator/info').as('info');
cy.wait('@info');
cy.get('a[data-test="health-page.info-tab"]').click();
// Page must first be visible
cy.get('ds-health-page').should('be.visible');
cy.get('ds-health-info').should('be.visible');
// wait for all the ds-health-info-component components to be rendered
cy.get('div[role="tabpanel"]').each(($panel: HTMLDivElement) => {
cy.wrap($panel).find('ds-health-info-component').should('be.visible');
});
// Analyze <ds-health-info> for accessibility issues
testA11y('ds-health-info', {
rules: {
// All panels are accordions & fail "aria-required-children" and "nested-interactive".
// Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216
'aria-required-children': { enabled: false },
'nested-interactive': { enabled: false },
},
} as Options);
});
});

View File

@@ -1,18 +1,18 @@
import { REGEX_MATCH_NON_EMPTY_TEXT, TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e';
import { REGEX_MATCH_NON_EMPTY_TEXT } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
import '../support/commands';
describe('Site Statistics Page', () => {
it('should load if you click on "Statistics" from homepage', () => {
cy.visit('/');
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.get('a[data-test="link-menu-item.menu.section.statistics"]').click();
cy.location('pathname').should('eq', '/statistics');
});
it('should pass accessibility tests', () => {
// generate 2 view events on an Item's page
cy.generateViewEvent(TEST_ENTITY_PUBLICATION, 'item');
cy.generateViewEvent(TEST_ENTITY_PUBLICATION, 'item');
cy.generateViewEvent(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION'), 'item');
cy.generateViewEvent(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION'), 'item');
cy.visit('/statistics');

180
cypress/e2e/item-edit.cy.ts Normal file
View File

@@ -0,0 +1,180 @@
import { testA11y } from 'cypress/support/utils';
import { Options } from 'cypress-axe';
const ITEM_EDIT_PAGE = '/items/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION')).concat('/edit');
beforeEach(() => {
// All tests start with visiting the Edit Item Page
cy.visit(ITEM_EDIT_PAGE);
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
describe('Edit Item > Edit Metadata tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="metadata"]').should('be.visible');
cy.get('a[data-test="metadata"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="metadata"]').should('be.visible');
cy.get('a[data-test="metadata"]').should('have.class', 'active');
// <ds-edit-item-page> tag must be loaded
cy.get('ds-edit-item-page').should('be.visible');
// wait for all the ds-dso-edit-metadata-value components to be rendered
cy.get('ds-dso-edit-metadata-value div[role="row"]').each(($row: HTMLDivElement) => {
cy.wrap($row).find('div[role="cell"]').should('be.visible');
});
// Analyze <ds-edit-item-page> for accessibility issues
testA11y('ds-edit-item-page');
});
});
describe('Edit Item > Status tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="status"]').should('be.visible');
cy.get('a[data-test="status"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="status"]').should('be.visible');
cy.get('a[data-test="status"]').should('have.class', 'active');
// <ds-item-status> tag must be loaded
cy.get('ds-item-status').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-item-status');
});
});
describe('Edit Item > Bitstreams tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="bitstreams"]').should('be.visible');
cy.get('a[data-test="bitstreams"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="bitstreams"]').should('be.visible');
cy.get('a[data-test="bitstreams"]').should('have.class', 'active');
// <ds-item-bitstreams> tag must be loaded
cy.get('ds-item-bitstreams').should('be.visible');
// Table of item bitstreams must also be loaded
cy.get('div.item-bitstreams').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-item-bitstreams',
{
rules: {
// Currently Bitstreams page loads a pagination component per Bundle
// and they all use the same 'id="p-dad"'.
'duplicate-id': { enabled: false },
},
} as Options,
);
});
});
describe('Edit Item > Curate tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="curate"]').should('be.visible');
cy.get('a[data-test="curate"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="curate"]').should('be.visible');
cy.get('a[data-test="curate"]').should('have.class', 'active');
// <ds-item-curate> tag must be loaded
cy.get('ds-item-curate').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-item-curate');
});
});
describe('Edit Item > Relationships tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="relationships"]').should('be.visible');
cy.get('a[data-test="relationships"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="relationships"]').should('be.visible');
cy.get('a[data-test="relationships"]').should('have.class', 'active');
// <ds-item-relationships> tag must be loaded
cy.get('ds-item-relationships').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-item-relationships');
});
});
describe('Edit Item > Version History tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="versionhistory"]').should('be.visible');
cy.get('a[data-test="versionhistory"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="versionhistory"]').should('be.visible');
cy.get('a[data-test="versionhistory"]').should('have.class', 'active');
// <ds-item-version-history> tag must be loaded
cy.get('ds-item-version-history').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-item-version-history');
});
});
describe('Edit Item > Access Control tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="access-control"]').should('be.visible');
cy.get('a[data-test="access-control"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="access-control"]').should('be.visible');
cy.get('a[data-test="access-control"]').should('have.class', 'active');
// <ds-item-access-control> tag must be loaded
cy.get('ds-item-access-control').should('be.visible');
// Analyze for accessibility issues
testA11y('ds-item-access-control');
});
});
describe('Edit Item > Collection Mapper tab', () => {
it('should pass accessibility tests', () => {
cy.get('a[data-test="mapper"]').should('be.visible');
cy.get('a[data-test="mapper"]').click();
// Our selected tab should be both visible & active
cy.get('a[data-test="mapper"]').should('be.visible');
cy.get('a[data-test="mapper"]').should('have.class', 'active');
// <ds-item-collection-mapper> tag must be loaded
cy.get('ds-item-collection-mapper').should('be.visible');
// Analyze entire page for accessibility issues
testA11y('ds-item-collection-mapper');
// Click on the "Map new collections" tab
cy.get('li[data-test="mapTab"] a').click();
// Make sure search form is now visible
cy.get('ds-search-form').should('be.visible');
// Analyze entire page (again) for accessibility issues
testA11y('ds-item-collection-mapper');
});
});

View File

@@ -1,31 +1,45 @@
import { Options } from 'cypress-axe';
import { TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Item Page', () => {
const ITEMPAGE = '/items/'.concat(TEST_ENTITY_PUBLICATION);
const ENTITYPAGE = '/entities/publication/'.concat(TEST_ENTITY_PUBLICATION);
const ITEMPAGE = '/items/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION'));
const ENTITYPAGE = '/entities/publication/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION'));
// Test that entities will redirect to /entities/[type]/[uuid] when accessed via /items/[uuid]
it('should redirect to the entity page when navigating to an item page', () => {
cy.visit(ITEMPAGE);
cy.wait(1000);
cy.location('pathname').should('eq', ENTITYPAGE);
});
it('should pass accessibility tests', () => {
cy.intercept('POST', '/server/api/statistics/viewevents').as('viewevent');
cy.visit(ENTITYPAGE);
// Wait for the "viewevent" to trigger on the Item page.
// This ensures our <ds-item-page> tag is fully loaded, as the <ds-view-event> tag is contained within it.
cy.wait('@viewevent');
// <ds-item-page> tag must be loaded
cy.get('ds-item-page').should('be.visible');
// Analyze <ds-item-page> for accessibility issues
// Disable heading-order checks until it is fixed
testA11y('ds-item-page',
{
rules: {
'heading-order': { enabled: false }
}
} as Options
);
testA11y('ds-item-page');
});
it('should pass accessibility tests on full item page', () => {
cy.intercept('POST', '/server/api/statistics/viewevents').as('viewevent');
cy.visit(ENTITYPAGE + '/full');
// Wait for the "viewevent" to trigger on the Item page.
// This ensures our <ds-item-page> tag is fully loaded, as the <ds-view-event> tag is contained within it.
cy.wait('@viewevent');
// <ds-full-item-page> tag must be loaded
cy.get('ds-full-item-page').should('be.visible');
// Analyze <ds-full-item-page> for accessibility issues
testA11y('ds-full-item-page');
});
});

View File

@@ -1,12 +1,12 @@
import { REGEX_MATCH_NON_EMPTY_TEXT, TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e';
import { REGEX_MATCH_NON_EMPTY_TEXT } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Item Statistics Page', () => {
const ITEMSTATISTICSPAGE = '/statistics/items/'.concat(TEST_ENTITY_PUBLICATION);
const ITEMSTATISTICSPAGE = '/statistics/items/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION'));
it('should load if you click on "Statistics" from an Item/Entity page', () => {
cy.visit('/entities/publication/'.concat(TEST_ENTITY_PUBLICATION));
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.visit('/entities/publication/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION')));
cy.get('a[data-test="link-menu-item.menu.section.statistics"]').click();
cy.location('pathname').should('eq', ITEMSTATISTICSPAGE);
});
@@ -23,8 +23,7 @@ describe('Item Statistics Page', () => {
it('should contain a "Total visits per month" section', () => {
cy.visit(ITEMSTATISTICSPAGE);
// Check just for existence because this table is empty in CI environment as it's historical data
cy.get('.'.concat(TEST_ENTITY_PUBLICATION).concat('_TotalVisitsPerMonth')).should('exist');
cy.get('table[data-test="TotalVisitsPerMonth"]').should('be.visible');
});
it('should pass accessibility tests', () => {

View File

@@ -1,42 +1,42 @@
import { TEST_ADMIN_PASSWORD, TEST_ADMIN_USER, TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
const page = {
openLoginMenu() {
// Click the "Log In" dropdown menu in header
cy.get('ds-themed-navbar [data-test="login-menu"]').click();
},
openUserMenu() {
// Once logged in, click the User menu in header
cy.get('ds-themed-navbar [data-test="user-menu"]').click();
},
submitLoginAndPasswordByPressingButton(email, password) {
// Enter email
cy.get('ds-themed-navbar [data-test="email"]').type(email);
// Enter password
cy.get('ds-themed-navbar [data-test="password"]').type(password);
// Click login button
cy.get('ds-themed-navbar [data-test="login-button"]').click();
},
submitLoginAndPasswordByPressingEnter(email, password) {
// In opened Login modal, fill out email & password, then click Enter
cy.get('ds-themed-navbar [data-test="email"]').type(email);
cy.get('ds-themed-navbar [data-test="password"]').type(password);
cy.get('ds-themed-navbar [data-test="password"]').type('{enter}');
},
submitLogoutByPressingButton() {
// This is the POST command that will actually log us out
cy.intercept('POST', '/server/api/authn/logout').as('logout');
// Click logout button
cy.get('ds-themed-navbar [data-test="logout-button"]').click();
// Wait until above POST command responds before continuing
// (This ensures next action waits until logout completes)
cy.wait('@logout');
}
openLoginMenu() {
// Click the "Log In" dropdown menu in header
cy.get('[data-test="login-menu"]').click();
},
openUserMenu() {
// Once logged in, click the User menu in header
cy.get('[data-test="user-menu"]').click();
},
submitLoginAndPasswordByPressingButton(email, password) {
// Enter email
cy.get('[data-test="email"]').type(email);
// Enter password
cy.get('[data-test="password"]').type(password);
// Click login button
cy.get('[data-test="login-button"]').click();
},
submitLoginAndPasswordByPressingEnter(email, password) {
// In opened Login modal, fill out email & password, then click Enter
cy.get('[data-test="email"]').type(email);
cy.get('[data-test="password"]').type(password);
cy.get('[data-test="password"]').type('{enter}');
},
submitLogoutByPressingButton() {
// This is the POST command that will actually log us out
cy.intercept('POST', '/server/api/authn/logout').as('logout');
// Click logout button
cy.get('[data-test="logout-button"]').click();
// Wait until above POST command responds before continuing
// (This ensures next action waits until logout completes)
cy.wait('@logout');
},
};
describe('Login Modal', () => {
it('should login when clicking button & stay on same page', () => {
const ENTITYPAGE = '/entities/publication/'.concat(TEST_ENTITY_PUBLICATION);
const ENTITYPAGE = '/entities/publication/'.concat(Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION'));
cy.visit(ENTITYPAGE);
// Login menu should exist
@@ -46,7 +46,7 @@ describe('Login Modal', () => {
page.openLoginMenu();
cy.get('.form-login').should('be.visible');
page.submitLoginAndPasswordByPressingButton(TEST_ADMIN_USER, TEST_ADMIN_PASSWORD);
page.submitLoginAndPasswordByPressingButton(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
cy.get('ds-log-in').should('not.exist');
// Verify we are still on the same page
@@ -66,8 +66,8 @@ describe('Login Modal', () => {
cy.get('.form-login').should('be.visible');
// Login, and the <ds-log-in> tag should no longer exist
page.submitLoginAndPasswordByPressingEnter(TEST_ADMIN_USER, TEST_ADMIN_PASSWORD);
cy.get('.form-login').should('not.exist');
page.submitLoginAndPasswordByPressingEnter(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
cy.get('ds-log-in').should('not.exist');
// Verify we are still on homepage
cy.url().should('include', '/home');
@@ -80,7 +80,7 @@ describe('Login Modal', () => {
it('should support logout', () => {
// First authenticate & access homepage
cy.login(TEST_ADMIN_USER, TEST_ADMIN_PASSWORD);
cy.login(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
cy.visit('/');
// Verify ds-log-in tag doesn't exist, but ds-log-out tag does exist
@@ -102,12 +102,15 @@ describe('Login Modal', () => {
page.openLoginMenu();
// Registration link should be visible
cy.get('ds-themed-navbar [data-test="register"]').should('be.visible');
cy.get('ds-themed-header [data-test="register"]').should('be.visible');
// Click registration link & you should go to registration page
cy.get('ds-themed-navbar [data-test="register"]').click();
cy.get('ds-themed-header [data-test="register"]').click();
cy.location('pathname').should('eq', '/register');
cy.get('ds-register-email').should('exist');
// Test accessibility of this page
testA11y('ds-register-email');
});
it('should allow forgot password', () => {
@@ -116,11 +119,32 @@ describe('Login Modal', () => {
page.openLoginMenu();
// Forgot password link should be visible
cy.get('ds-themed-navbar [data-test="forgot"]').should('be.visible');
cy.get('ds-themed-header [data-test="forgot"]').should('be.visible');
// Click link & you should go to Forgot Password page
cy.get('ds-themed-navbar [data-test="forgot"]').click();
cy.get('ds-themed-header [data-test="forgot"]').click();
cy.location('pathname').should('eq', '/forgot');
cy.get('ds-forgot-email').should('exist');
// Test accessibility of this page
testA11y('ds-forgot-email');
});
it('should pass accessibility tests in menus', () => {
cy.visit('/');
// Open login menu & verify accessibility
page.openLoginMenu();
cy.get('ds-log-in').should('exist');
testA11y('ds-log-in');
// Now login
page.submitLoginAndPasswordByPressingButton(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
cy.get('ds-log-in').should('not.exist');
// Open user menu, verify user menu accesibility
page.openUserMenu();
cy.get('ds-user-menu').should('be.visible');
testA11y('ds-user-menu');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Metadata Import Page', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/metadata-import');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Metadata import form must first be visible
cy.get('ds-metadata-import-page').should('be.visible');
// Analyze <ds-metadata-import-page> for accessibility issues
testA11y('ds-metadata-import-page');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Metadata Registry', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/registries/metadata');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-metadata-registry').should('be.visible');
// Analyze <ds-metadata-registry> for accessibility issues
testA11y('ds-metadata-registry');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Metadata Schema', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/registries/metadata/dc');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-metadata-schema').should('be.visible');
// Analyze <ds-metadata-schema> for accessibility issues
testA11y('ds-metadata-schema');
});
});

View File

@@ -1,5 +1,3 @@
import { Options } from 'cypress-axe';
import { TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD, TEST_SUBMIT_COLLECTION_NAME } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('My DSpace page', () => {
@@ -7,7 +5,7 @@ describe('My DSpace page', () => {
cy.visit('/mydspace');
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
cy.get('ds-my-dspace-page').should('be.visible');
@@ -19,28 +17,14 @@ describe('My DSpace page', () => {
cy.get('.filter-toggle').click({ multiple: true });
// Analyze <ds-my-dspace-page> for accessibility issues
testA11y(
{
include: ['ds-my-dspace-page'],
exclude: [
['nouislider'] // Date filter slider is missing ARIA labels. Will be fixed by #1175
],
},
{
rules: {
// Search filters fail these two "moderate" impact rules
'heading-order': { enabled: false },
'landmark-unique': { enabled: false }
}
} as Options
);
testA11y('ds-my-dspace-page');
});
it('should have a working detailed view that passes accessibility tests', () => {
cy.visit('/mydspace');
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
cy.get('ds-my-dspace-page').should('be.visible');
@@ -49,16 +33,8 @@ describe('My DSpace page', () => {
cy.get('ds-object-detail').should('be.visible');
// Analyze <ds-search-page> for accessibility issues
testA11y('ds-my-dspace-page',
{
rules: {
// Search filters fail these two "moderate" impact rules
'heading-order': { enabled: false },
'landmark-unique': { enabled: false }
}
} as Options
);
// Analyze <ds-my-dspace-page> for accessibility issues
testA11y('ds-my-dspace-page');
});
// NOTE: Deleting existing submissions is exercised by submission.spec.ts
@@ -66,7 +42,7 @@ describe('My DSpace page', () => {
cy.visit('/mydspace');
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
// Open the New Submission dropdown
cy.get('button[data-test="submission-dropdown"]').click();
@@ -77,10 +53,10 @@ describe('My DSpace page', () => {
cy.get('ds-create-item-parent-selector').should('be.visible');
// Type in a known Collection name in the search box
cy.get('ds-authorized-collection-selector input[type="search"]').type(TEST_SUBMIT_COLLECTION_NAME);
cy.get('ds-authorized-collection-selector input[type="search"]').type(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME'));
// Click on the button matching that known Collection name
cy.get('ds-authorized-collection-selector button[title="'.concat(TEST_SUBMIT_COLLECTION_NAME).concat('"]')).click();
cy.get('ds-authorized-collection-selector button[title="'.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME')).concat('"]')).click();
// New URL should include /workspaceitems, as we've started a new submission
cy.url().should('include', '/workspaceitems');
@@ -89,7 +65,7 @@ describe('My DSpace page', () => {
cy.get('ds-submission-edit').should('be.visible');
// A Collection menu button should exist & its value should be the selected collection
cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME);
cy.get('#collectionControlsMenuButton span').should('have.text', Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME'));
// Now that we've created a submission, we'll test that we can go back and Edit it.
// Get our Submission URL, to parse out the ID of this new submission
@@ -138,7 +114,7 @@ describe('My DSpace page', () => {
cy.visit('/mydspace');
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
// Open the New Import dropdown
cy.get('button[data-test="import-dropdown"]').click();
@@ -150,6 +126,9 @@ describe('My DSpace page', () => {
// The external import searchbox should be visible
cy.get('ds-submission-import-external-searchbar').should('be.visible');
// Test for accessibility issues
testA11y('ds-submission-import-external');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('New Process', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/processes/new');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Process form must first be visible
cy.get('ds-new-process').should('be.visible');
// Analyze <ds-new-process> for accessibility issues
testA11y('ds-new-process');
});
});

View File

@@ -1,8 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('PageNotFound', () => {
it('should contain element ds-pagenotfound when navigating to page that doesnt exist', () => {
// request an invalid page (UUIDs at root path aren't valid)
cy.visit('/e9019a69-d4f1-4773-b6a3-bd362caa46f2', { failOnStatusCode: false });
cy.get('ds-pagenotfound').should('be.visible');
// Analyze <ds-pagenotfound> for accessibility issues
testA11y('ds-pagenotfound');
});
it('should not contain element ds-pagenotfound when navigating to existing page', () => {

13
cypress/e2e/privacy.cy.ts Normal file
View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('Privacy', () => {
it('should pass accessibility tests', () => {
cy.visit('/info/privacy');
// Page must first be visible
cy.get('ds-privacy').should('be.visible');
// Analyze <ds-privacy> for accessibility
testA11y('ds-privacy');
});
});

View File

@@ -0,0 +1,17 @@
import { testA11y } from 'cypress/support/utils';
describe('Processes Overview', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/processes');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Process overview must first be visible
cy.get('ds-process-overview').should('be.visible');
// Analyze <ds-process-overview> for accessibility issues
testA11y('ds-process-overview');
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('Profile page', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/profile');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Process form must first be visible
cy.get('ds-profile-page').should('be.visible');
// Analyze <ds-profile-page> for accessibility issues
testA11y('ds-profile-page');
});
});

View File

@@ -1,23 +1,21 @@
import { TEST_SEARCH_TERM } from 'cypress/support/e2e';
const page = {
fillOutQueryInNavBar(query) {
// Click the magnifying glass
cy.get('ds-themed-navbar [data-test="header-search-icon"]').click();
cy.get('ds-themed-header [data-test="header-search-icon"]').click();
// Fill out a query in input that appears
cy.get('ds-themed-navbar [data-test="header-search-box"]').type(query);
cy.get('ds-themed-header [data-test="header-search-box"]').type(query);
},
submitQueryByPressingEnter() {
cy.get('ds-themed-navbar [data-test="header-search-box"]').type('{enter}');
cy.get('ds-themed-header [data-test="header-search-box"]').type('{enter}');
},
submitQueryByPressingIcon() {
cy.get('ds-themed-navbar [data-test="header-search-icon"]').click();
cy.get('ds-themed-header [data-test="header-search-icon"]').click();
}
};
describe('Search from Navigation Bar', () => {
// NOTE: these tests currently assume this query will return results!
const query = TEST_SEARCH_TERM;
const query = Cypress.env('DSPACE_TEST_SEARCH_TERM');
it('should go to search page with correct query if submitted (from home)', () => {
cy.visit('/');

View File

@@ -1,8 +1,10 @@
import { Options } from 'cypress-axe';
import { TEST_SEARCH_TERM } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
describe('Search Page', () => {
// NOTE: these tests currently assume this query will return results!
const query = Cypress.env('DSPACE_TEST_SEARCH_TERM');
it('should redirect to the correct url when query was set and submit button was triggered', () => {
const queryString = 'Another interesting query string';
cy.visit('/search');
@@ -13,8 +15,8 @@ describe('Search Page', () => {
});
it('should load results and pass accessibility tests', () => {
cy.visit('/search?query='.concat(TEST_SEARCH_TERM));
cy.get('[data-test="search-box"]').should('have.value', TEST_SEARCH_TERM);
cy.visit('/search?query='.concat(query));
cy.get('[data-test="search-box"]').should('have.value', query);
// <ds-search-page> tag must be loaded
cy.get('ds-search-page').should('be.visible');
@@ -27,25 +29,11 @@ describe('Search Page', () => {
cy.get('[data-test="filter-toggle"]').click({ multiple: true });
// Analyze <ds-search-page> for accessibility issues
testA11y(
{
include: ['ds-search-page'],
exclude: [
['nouislider'] // Date filter slider is missing ARIA labels. Will be fixed by #1175
],
},
{
rules: {
// Search filters fail these two "moderate" impact rules
'heading-order': { enabled: false },
'landmark-unique': { enabled: false }
}
} as Options
);
testA11y('ds-search-page');
});
it('should have a working grid view that passes accessibility tests', () => {
cy.visit('/search?query='.concat(TEST_SEARCH_TERM));
cy.visit('/search?query='.concat(query));
// Click button in sidebar to display grid view
cy.get('ds-search-sidebar [data-test="grid-view"]').click();
@@ -60,9 +48,8 @@ describe('Search Page', () => {
testA11y('ds-search-page',
{
rules: {
// Search filters fail these two "moderate" impact rules
'heading-order': { enabled: false },
'landmark-unique': { enabled: false }
// Card titles fail this test currently
'heading-order': { enabled: false }
}
} as Options
);

View File

@@ -1,14 +1,16 @@
import { TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD, TEST_SUBMIT_COLLECTION_NAME, TEST_SUBMIT_COLLECTION_UUID } from 'cypress/support/e2e';
import { testA11y } from 'cypress/support/utils';
//import { TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD, TEST_SUBMIT_COLLECTION_NAME, TEST_SUBMIT_COLLECTION_UUID, TEST_ADMIN_USER, TEST_ADMIN_PASSWORD } from 'cypress/support/e2e';
import { Options } from 'cypress-axe';
describe('New Submission page', () => {
// NOTE: We already test that new submissions can be started from MyDSpace in my-dspace.spec.ts
// NOTE: We already test that new Item submissions can be started from MyDSpace in my-dspace.spec.ts
it('should create a new submission when using /submit path & pass accessibility', () => {
// Test that calling /submit with collection & entityType will create a new submission
cy.visit('/submit?collection='.concat(TEST_SUBMIT_COLLECTION_UUID).concat('&entityType=none'));
cy.visit('/submit?collection='.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID')).concat('&entityType=none'));
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
// Should redirect to /workspaceitems, as we've started a new submission
cy.url().should('include', '/workspaceitems');
@@ -17,7 +19,7 @@ describe('New Submission page', () => {
cy.get('ds-submission-edit').should('be.visible');
// A Collection menu button should exist & it's value should be the selected collection
cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME);
cy.get('#collectionControlsMenuButton span').should('have.text', Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME'));
// 4 sections should be visible by default
cy.get('div#section_traditionalpageone').should('be.visible');
@@ -25,6 +27,25 @@ describe('New Submission page', () => {
cy.get('div#section_upload').should('be.visible');
cy.get('div#section_license').should('be.visible');
// Test entire page for accessibility
testA11y('ds-submission-edit',
{
rules: {
// Author & Subject fields have invalid "aria-multiline" attrs.
// See https://github.com/DSpace/dspace-angular/issues/1272
'aria-allowed-attr': { enabled: false },
// All panels are accordians & fail "aria-required-children" and "nested-interactive".
// Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216
'aria-required-children': { enabled: false },
'nested-interactive': { enabled: false },
// All select boxes fail to have a name / aria-label.
// This is a bug in ng-dynamic-forms and may require https://github.com/DSpace/dspace-angular/issues/2216
'select-name': { enabled: false },
}
} as Options
);
// Discard button should work
// Clicking it will display a confirmation, which we will confirm with another click
cy.get('button#discard').click();
@@ -33,10 +54,10 @@ describe('New Submission page', () => {
it('should block submission & show errors if required fields are missing', () => {
// Create a new submission
cy.visit('/submit?collection='.concat(TEST_SUBMIT_COLLECTION_UUID).concat('&entityType=none'));
cy.visit('/submit?collection='.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID')).concat('&entityType=none'));
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
// Attempt an immediate deposit without filling out any fields
cy.get('button#deposit').click();
@@ -93,10 +114,10 @@ describe('New Submission page', () => {
it('should allow for deposit if all required fields completed & file uploaded', () => {
// Create a new submission
cy.visit('/submit?collection='.concat(TEST_SUBMIT_COLLECTION_UUID).concat('&entityType=none'));
cy.visit('/submit?collection='.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID')).concat('&entityType=none'));
// This page is restricted, so we will be shown the login form. Fill it out & submit.
cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD'));
// Fill out all required fields (Title, Date)
cy.get('input#dc_title').type('DSpace logo uploaded via e2e tests');
@@ -116,7 +137,7 @@ describe('New Submission page', () => {
// Upload our DSpace logo via drag & drop onto submission form
// cy.get('div#section_upload')
cy.get('div.ds-document-drop-zone').selectFile('src/assets/images/dspace-logo.png', {
cy.get('div.ds-document-drop-zone').selectFile('src/assets/images/dspace-logo.svg', {
action: 'drag-drop'
});
@@ -131,4 +152,76 @@ describe('New Submission page', () => {
cy.get('ds-notification div.alert-success').should('be.visible');
});
it('is possible to submit a new "Person" and that form passes accessibility', () => {
// To submit a different entity type, we'll start from MyDSpace
cy.visit('/mydspace');
// This page is restricted, so we will be shown the login form. Fill it out & submit.
// NOTE: At this time, we MUST login as admin to submit Person objects
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
// Open the New Submission dropdown
cy.get('button[data-test="submission-dropdown"]').click();
// Click on the "Person" type in that dropdown
cy.get('#entityControlsDropdownMenu button[title="Person"]').click();
// This should display the <ds-create-item-parent-selector> (popup window)
cy.get('ds-create-item-parent-selector').should('be.visible');
// Type in a known Collection name in the search box
cy.get('ds-authorized-collection-selector input[type="search"]').type(Cypress.env('DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME'));
// Click on the button matching that known Collection name
cy.get('ds-authorized-collection-selector button[title="'.concat(Cypress.env('DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME')).concat('"]')).click();
// New URL should include /workspaceitems, as we've started a new submission
cy.url().should('include', '/workspaceitems');
// The Submission edit form tag should be visible
cy.get('ds-submission-edit').should('be.visible');
// A Collection menu button should exist & its value should be the selected collection
cy.get('#collectionControlsMenuButton span').should('have.text', Cypress.env('DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME'));
// 3 sections should be visible by default
cy.get('div#section_personStep').should('be.visible');
cy.get('div#section_upload').should('be.visible');
cy.get('div#section_license').should('be.visible');
// Test entire page for accessibility
testA11y('ds-submission-edit',
{
rules: {
// All panels are accordians & fail "aria-required-children" and "nested-interactive".
// Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216
'aria-required-children': { enabled: false },
'nested-interactive': { enabled: false },
}
} as Options
);
// Click the lookup button next to "Publication" field
cy.get('button[data-test="lookup-button"]').click();
// A popup modal window should be visible
cy.get('ds-dynamic-lookup-relation-modal').should('be.visible');
// Popup modal should also pass accessibility tests
//testA11y('ds-dynamic-lookup-relation-modal');
testA11y({
include: ['ds-dynamic-lookup-relation-modal'],
exclude: [
['ul.nav-tabs'] // Tabs at top of model have several issues which seem to be caused by ng-bootstrap
],
});
// Close popup window
cy.get('ds-dynamic-lookup-relation-modal button.close').click();
// Back on the form, click the discard button to remove new submission
// Clicking it will display a confirmation, which we will confirm with another click
cy.get('button#discard').click();
cy.get('button#discard_submit').click();
});
});

View File

@@ -0,0 +1,16 @@
import { testA11y } from 'cypress/support/utils';
describe('System Wide Alert', () => {
beforeEach(() => {
// Must login as an Admin to see the page
cy.visit('/admin/system-wide-alert');
cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD'));
});
it('should pass accessibility tests', () => {
// Page must first be visible
cy.get('ds-system-wide-alert-form').should('be.visible');
// Analyze <ds-system-wide-alert-form> for accessibility issues
testA11y('ds-system-wide-alert-form');
});
});

View File

@@ -1,5 +1,11 @@
const fs = require('fs');
// These two global variables are used to store information about the REST API used
// by these e2e tests. They are filled out prior to running any tests in the before()
// method of e2e.ts. They can then be accessed by any tests via the getters below.
let REST_BASE_URL: string;
let REST_DOMAIN: string;
// Plugins enable you to tap into, modify, or extend the internal behavior of Cypress
// For more info, visit https://on.cypress.io/plugins-api
module.exports = (on, config) => {
@@ -30,6 +36,24 @@ module.exports = (on, config) => {
}
return null;
},
// Save value of REST Base URL, looked up before all tests.
// This allows other tests to use it easily via getRestBaseURL() below.
saveRestBaseURL(url: string) {
return (REST_BASE_URL = url);
},
// Retrieve currently saved value of REST Base URL
getRestBaseURL() {
return REST_BASE_URL ;
},
// Save value of REST Domain, looked up before all tests.
// This allows other tests to use it easily via getRestBaseDomain() below.
saveRestBaseDomain(domain: string) {
return (REST_DOMAIN = domain);
},
// Retrieve currently saved value of REST Domain
getRestBaseDomain() {
return REST_DOMAIN ;
}
});
};

View File

@@ -5,11 +5,7 @@
import { AuthTokenInfo, TOKENITEM } from 'src/app/core/auth/models/auth-token-info.model';
import { DSPACE_XSRF_COOKIE, XSRF_REQUEST_HEADER } from 'src/app/core/xsrf/xsrf.constants';
// NOTE: FALLBACK_TEST_REST_BASE_URL is only used if Cypress cannot read the REST API BaseURL
// from the Angular UI's config.json. See 'login()'.
export const FALLBACK_TEST_REST_BASE_URL = 'http://localhost:8080/server';
export const FALLBACK_TEST_REST_DOMAIN = 'localhost';
import { v4 as uuidv4 } from 'uuid';
// Declare Cypress namespace to help with Intellisense & code completion in IDEs
// ALL custom commands MUST be listed here for code completion to work
@@ -41,6 +37,13 @@ declare global {
* @param dsoType type of DSpace Object (e.g. "item", "collection", "community")
*/
generateViewEvent(uuid: string, dsoType: string): typeof generateViewEvent;
/**
* Create a new CSRF token and add to required Cookie. CSRF Token is returned
* in chainable in order to allow it to be sent also in required CSRF header.
* @returns Chainable reference to allow CSRF token to also be sent in header.
*/
createCSRFCookie(): Chainable<any>;
}
}
}
@@ -54,59 +57,32 @@ declare global {
* @param password password to login as
*/
function login(email: string, password: string): void {
// Cypress doesn't have access to the running application in Node.js.
// So, it's not possible to inject or load the AppConfig or environment of the Angular UI.
// Instead, we'll read our running application's config.json, which contains the configs &
// is regenerated at runtime each time the Angular UI application starts up.
cy.task('readUIConfig').then((str: string) => {
// Parse config into a JSON object
const config = JSON.parse(str);
// Create a fake CSRF cookie/token to use in POST
cy.createCSRFCookie().then((csrfToken: string) => {
// get our REST API's base URL, also needed for POST
cy.task('getRestBaseURL').then((baseRestUrl: string) => {
// Now, send login POST request including that CSRF token
cy.request({
method: 'POST',
url: baseRestUrl + '/api/authn/login',
headers: { [XSRF_REQUEST_HEADER]: csrfToken},
form: true, // indicates the body should be form urlencoded
body: { user: email, password: password }
}).then((resp) => {
// We expect a successful login
expect(resp.status).to.eq(200);
// We expect to have a valid authorization header returned (with our auth token)
expect(resp.headers).to.have.property('authorization');
// Find the URL of our REST API. Have a fallback ready, just in case 'rest.baseUrl' cannot be found.
let baseRestUrl = FALLBACK_TEST_REST_BASE_URL;
if (!config.rest.baseUrl) {
console.warn("Could not load 'rest.baseUrl' from config.json. Falling back to " + FALLBACK_TEST_REST_BASE_URL);
} else {
//console.log("Found 'rest.baseUrl' in config.json. Using this REST API for login: ".concat(config.rest.baseUrl));
baseRestUrl = config.rest.baseUrl;
}
// Initialize our AuthTokenInfo object from the authorization header.
const authheader = resp.headers.authorization as string;
const authinfo: AuthTokenInfo = new AuthTokenInfo(authheader);
// Now find domain of our REST API, again with a fallback.
let baseDomain = FALLBACK_TEST_REST_DOMAIN;
if (!config.rest.host) {
console.warn("Could not load 'rest.host' from config.json. Falling back to " + FALLBACK_TEST_REST_DOMAIN);
} else {
baseDomain = config.rest.host;
}
// Create a fake CSRF Token. Set it in the required server-side cookie
const csrfToken = 'fakeLoginCSRFToken';
cy.setCookie(DSPACE_XSRF_COOKIE, csrfToken, { 'domain': baseDomain });
// Now, send login POST request including that CSRF token
cy.request({
method: 'POST',
url: baseRestUrl + '/api/authn/login',
headers: { [XSRF_REQUEST_HEADER]: csrfToken},
form: true, // indicates the body should be form urlencoded
body: { user: email, password: password }
}).then((resp) => {
// We expect a successful login
expect(resp.status).to.eq(200);
// We expect to have a valid authorization header returned (with our auth token)
expect(resp.headers).to.have.property('authorization');
// Initialize our AuthTokenInfo object from the authorization header.
const authheader = resp.headers.authorization as string;
const authinfo: AuthTokenInfo = new AuthTokenInfo(authheader);
// Save our AuthTokenInfo object to our dsAuthInfo UI cookie
// This ensures the UI will recognize we are logged in on next "visit()"
cy.setCookie(TOKENITEM, JSON.stringify(authinfo));
// Save our AuthTokenInfo object to our dsAuthInfo UI cookie
// This ensures the UI will recognize we are logged in on next "visit()"
cy.setCookie(TOKENITEM, JSON.stringify(authinfo));
});
});
// Remove cookie with fake CSRF token, as it's no longer needed
cy.clearCookie(DSPACE_XSRF_COOKIE);
});
}
// Add as a Cypress command (i.e. assign to 'cy.login')
@@ -118,12 +94,12 @@ Cypress.Commands.add('login', login);
* @param password password to login as
*/
function loginViaForm(email: string, password: string): void {
// Enter email
cy.get('ds-log-in [data-test="email"]').type(email);
// Enter password
cy.get('ds-log-in [data-test="password"]').type(password);
// Click login button
cy.get('ds-log-in [data-test="login-button"]').click();
// Enter email
cy.get('[data-test="email"]').type(email);
// Enter password
cy.get('[data-test="password"]').type(password);
// Click login button
cy.get('[data-test="login-button"]').click();
}
// Add as a Cypress command (i.e. assign to 'cy.loginViaForm')
Cypress.Commands.add('loginViaForm', loginViaForm);
@@ -141,54 +117,53 @@ Cypress.Commands.add('loginViaForm', loginViaForm);
* @param dsoType type of DSpace Object (e.g. "item", "collection", "community")
*/
function generateViewEvent(uuid: string, dsoType: string): void {
// Cypress doesn't have access to the running application in Node.js.
// So, it's not possible to inject or load the AppConfig or environment of the Angular UI.
// Instead, we'll read our running application's config.json, which contains the configs &
// is regenerated at runtime each time the Angular UI application starts up.
cy.task('readUIConfig').then((str: string) => {
// Parse config into a JSON object
const config = JSON.parse(str);
// Find the URL of our REST API. Have a fallback ready, just in case 'rest.baseUrl' cannot be found.
let baseRestUrl = FALLBACK_TEST_REST_BASE_URL;
if (!config.rest.baseUrl) {
console.warn("Could not load 'rest.baseUrl' from config.json. Falling back to " + FALLBACK_TEST_REST_BASE_URL);
} else {
baseRestUrl = config.rest.baseUrl;
}
// Now find domain of our REST API, again with a fallback.
let baseDomain = FALLBACK_TEST_REST_DOMAIN;
if (!config.rest.host) {
console.warn("Could not load 'rest.host' from config.json. Falling back to " + FALLBACK_TEST_REST_DOMAIN);
} else {
baseDomain = config.rest.host;
}
// Create a fake CSRF Token. Set it in the required server-side cookie
const csrfToken = 'fakeGenerateViewEventCSRFToken';
cy.setCookie(DSPACE_XSRF_COOKIE, csrfToken, { 'domain': baseDomain });
// Now, send 'statistics/viewevents' POST request including that fake CSRF token in required header
cy.request({
method: 'POST',
url: baseRestUrl + '/api/statistics/viewevents',
headers: {
[XSRF_REQUEST_HEADER] : csrfToken,
// use a known public IP address to avoid being seen as a "bot"
'X-Forwarded-For': '1.1.1.1',
},
//form: true, // indicates the body should be form urlencoded
body: { targetId: uuid, targetType: dsoType },
}).then((resp) => {
// We expect a 201 (which means statistics event was created)
expect(resp.status).to.eq(201);
// Create a fake CSRF cookie/token to use in POST
cy.createCSRFCookie().then((csrfToken: string) => {
// get our REST API's base URL, also needed for POST
cy.task('getRestBaseURL').then((baseRestUrl: string) => {
// Now, send 'statistics/viewevents' POST request including that fake CSRF token in required header
cy.request({
method: 'POST',
url: baseRestUrl + '/api/statistics/viewevents',
headers: {
[XSRF_REQUEST_HEADER] : csrfToken,
// use a known public IP address to avoid being seen as a "bot"
'X-Forwarded-For': '1.1.1.1',
// Use a user-agent of a Firefox browser on Windows. This again avoids being seen as a "bot"
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0',
},
//form: true, // indicates the body should be form urlencoded
body: { targetId: uuid, targetType: dsoType },
}).then((resp) => {
// We expect a 201 (which means statistics event was created)
expect(resp.status).to.eq(201);
});
});
// Remove cookie with fake CSRF token, as it's no longer needed
cy.clearCookie(DSPACE_XSRF_COOKIE);
});
}
// Add as a Cypress command (i.e. assign to 'cy.generateViewEvent')
Cypress.Commands.add('generateViewEvent', generateViewEvent);
/**
* Can be used by tests to generate a random XSRF/CSRF token and save it to
* the required XSRF/CSRF cookie for usage when sending POST requests or similar.
* The generated CSRF token is returned in a Chainable to allow it to be also sent
* in the CSRF HTTP Header.
* @returns a Cypress Chainable which can be used to get the generated CSRF Token
*/
function createCSRFCookie(): Cypress.Chainable {
// Generate a new token which is a random UUID
const csrfToken: string = uuidv4();
// Save it to our required cookie
cy.task('getRestBaseDomain').then((baseDomain: string) => {
// Create a fake CSRF Token. Set it in the required server-side cookie
cy.setCookie(DSPACE_XSRF_COOKIE, csrfToken, { 'domain': baseDomain });
});
// return the generated token wrapped in a chainable
return cy.wrap(csrfToken);
}
// Add as a Cypress command (i.e. assign to 'cy.createCSRFCookie')
Cypress.Commands.add('createCSRFCookie', createCSRFCookie);

View File

@@ -19,45 +19,54 @@ import './commands';
// Import Cypress Axe tools for all tests
// https://github.com/component-driven/cypress-axe
import 'cypress-axe';
import { DSPACE_XSRF_COOKIE } from 'src/app/core/xsrf/xsrf.constants';
// Runs once before all tests
before(() => {
// Cypress doesn't have access to the running application in Node.js.
// So, it's not possible to inject or load the AppConfig or environment of the Angular UI.
// Instead, we'll read our running application's config.json, which contains the configs &
// is regenerated at runtime each time the Angular UI application starts up.
cy.task('readUIConfig').then((str: string) => {
// Parse config into a JSON object
const config = JSON.parse(str);
// Find URL of our REST API & save to global variable via task
let baseRestUrl = FALLBACK_TEST_REST_BASE_URL;
if (!config.rest.baseUrl) {
console.warn("Could not load 'rest.baseUrl' from config.json. Falling back to " + FALLBACK_TEST_REST_BASE_URL);
} else {
baseRestUrl = config.rest.baseUrl;
}
cy.task('saveRestBaseURL', baseRestUrl);
// Find domain of our REST API & save to global variable via task.
let baseDomain = FALLBACK_TEST_REST_DOMAIN;
if (!config.rest.host) {
console.warn("Could not load 'rest.host' from config.json. Falling back to " + FALLBACK_TEST_REST_DOMAIN);
} else {
baseDomain = config.rest.host;
}
cy.task('saveRestBaseDomain', baseDomain);
});
});
// Runs once before the first test in each "block"
beforeEach(() => {
// Pre-agree to all Klaro cookies by setting the klaro-anonymous cookie
// This just ensures it doesn't get in the way of matching other objects in the page.
cy.setCookie('klaro-anonymous', '{%22authentication%22:true%2C%22preferences%22:true%2C%22acknowledgement%22:true%2C%22google-analytics%22:true%2C%22google-recaptcha%22:true}');
// Remove any CSRF cookies saved from prior tests
cy.clearCookie(DSPACE_XSRF_COOKIE);
});
// For better stability between tests, we visit "about:blank" (i.e. blank page) after each test.
// This ensures any remaining/outstanding XHR requests are killed, so they don't affect the next test.
// Borrowed from: https://glebbahmutov.com/blog/visit-blank-page-between-tests/
/*afterEach(() => {
cy.window().then((win) => {
win.location.href = 'about:blank';
});
});*/
// Global constants used in tests
// May be overridden in our cypress.json config file using specified environment variables.
// Default values listed here are all valid for the Demo Entities Data set available at
// https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data
// (This is the data set used in our CI environment)
// Admin account used for administrative tests
export const TEST_ADMIN_USER = Cypress.env('DSPACE_TEST_ADMIN_USER') || 'dspacedemo+admin@gmail.com';
export const TEST_ADMIN_PASSWORD = Cypress.env('DSPACE_TEST_ADMIN_PASSWORD') || 'dspace';
// Community/collection/publication used for view/edit tests
export const TEST_COLLECTION = Cypress.env('DSPACE_TEST_COLLECTION') || '282164f5-d325-4740-8dd1-fa4d6d3e7200';
export const TEST_COMMUNITY = Cypress.env('DSPACE_TEST_COMMUNITY') || '0958c910-2037-42a9-81c7-dca80e3892b4';
export const TEST_ENTITY_PUBLICATION = Cypress.env('DSPACE_TEST_ENTITY_PUBLICATION') || 'e98b0f27-5c19-49a0-960d-eb6ad5287067';
// Search term (should return results) used in search tests
export const TEST_SEARCH_TERM = Cypress.env('DSPACE_TEST_SEARCH_TERM') || 'test';
// Collection used for submission tests
export const TEST_SUBMIT_COLLECTION_NAME = Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME') || 'Sample Collection';
export const TEST_SUBMIT_COLLECTION_UUID = Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID') || '9d8334e9-25d3-4a67-9cea-3dffdef80144';
export const TEST_SUBMIT_USER = Cypress.env('DSPACE_TEST_SUBMIT_USER') || 'dspacedemo+submit@gmail.com';
export const TEST_SUBMIT_USER_PASSWORD = Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD') || 'dspace';
// NOTE: FALLBACK_TEST_REST_BASE_URL is only used if Cypress cannot read the REST API BaseURL
// from the Angular UI's config.json. See 'before()' above.
const FALLBACK_TEST_REST_BASE_URL = 'http://localhost:8080/server';
const FALLBACK_TEST_REST_DOMAIN = 'localhost';
// USEFUL REGEX for testing

View File

@@ -101,8 +101,8 @@ and the backend at http://localhost:8080/server/
## Run DSpace Angular dist build with DSpace Demo site backend
This allows you to run the Angular UI in *production* mode, pointing it at the demo backend
(https://api7.dspace.org/server/).
This allows you to run the Angular UI in *production* mode, pointing it at the demo or sandbox backend
(https://demo.dspace.org/server/ or https://sandbox.dspace.org/server/).
```
docker-compose -f docker/docker-compose-dist.yml pull

View File

@@ -12,15 +12,8 @@
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/cli.assetstore.yml
#
# Therefore, it should be kept in sync with that file
version: "3.7"
networks:
dspacenet:
services:
dspace-cli:
networks:
dspacenet: {}
environment:
# This assetstore zip is available from https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data
- LOADASSETS=https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/assetstore.tar.gz

View File

@@ -12,8 +12,6 @@
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/cli.ingest.yml
#
# Therefore, it should be kept in sync with that file
version: "3.7"
services:
dspace-cli:
environment:

View File

@@ -12,11 +12,16 @@
# https://github.com/DSpace/DSpace/blob/main/docker-compose-cli.yml
#
# Therefore, it should be kept in sync with that file
version: "3.7"
networks:
# Default to using network named 'dspacenet' from docker-compose-rest.yml.
# Its full name will be prepended with the project name (e.g. "-p d7" means it will be named "d7_dspacenet")
# If COMPOSITE_PROJECT_NAME is missing, default value will be "docker" (name of folder this file is in)
default:
name: ${COMPOSE_PROJECT_NAME:-docker}_dspacenet
external: true
services:
dspace-cli:
image: "${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-dspace-7_x}"
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-dspace-7_x}"
container_name: dspace-cli
environment:
# Below syntax may look odd, but it is how to override dspace.cfg settings via env variables.
@@ -30,16 +35,12 @@ services:
# solr.server: Ensure we are using the 'dspacesolr' image for Solr
solr__P__server: http://dspacesolr:8983/solr
volumes:
- "assetstore:/dspace/assetstore"
# Keep DSpace assetstore directory between reboots
- assetstore:/dspace/assetstore
entrypoint: /dspace/bin/dspace
command: help
networks:
- dspacenet
tty: true
stdin_open: true
volumes:
assetstore:
networks:
dspacenet:

View File

@@ -12,11 +12,9 @@
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/db.entities.yml
#
# # Therefore, it should be kept in sync with that file
version: "3.7"
services:
dspacedb:
image: dspace/dspace-postgres-pgcrypto:loadsql
image: ${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-dspace-7_x}-loadsql
environment:
# This LOADSQL should be kept in sync with the URL in DSpace/DSpace
# This SQL is available from https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data

View File

@@ -10,7 +10,6 @@
# This is used by our GitHub CI at .github/workflows/build.yml
# It is based heavily on the Backend's Docker Compose:
# https://github.com/DSpace/DSpace/blob/main/docker-compose.yml
version: '3.7'
networks:
dspacenet:
services:
@@ -33,11 +32,12 @@ services:
# Tell Statistics to commit all views immediately instead of waiting on Solr's autocommit.
# This allows us to generate statistics in e2e tests so that statistics pages can be tested thoroughly.
solr__D__statistics__P__autoCommit: 'false'
LOGGING_CONFIG: /dspace/config/log4j2-container.xml
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}"
depends_on:
- dspacedb
image: dspace/dspace:dspace-7_x-test
networks:
dspacenet:
- dspacenet
ports:
- published: 8080
target: 8080
@@ -45,8 +45,6 @@ services:
tty: true
volumes:
- assetstore:/dspace/assetstore
# Mount DSpace's solr configs to a volume, so that we can share to 'dspacesolr' container (see below)
- solr_configs:/dspace/solr
# Ensure that the database is ready BEFORE starting tomcat
# 1. While a TCP connection to dspacedb port 5432 is not available, continue to sleep
# 2. Then, run database migration to init database tables (including any out-of-order ignored migrations, if any)
@@ -62,29 +60,30 @@ services:
# NOTE: This is customized to use our loadsql image, so that we are using a database with existing test data
dspacedb:
container_name: dspacedb
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-dspace-7_x}-loadsql"
environment:
# This LOADSQL should be kept in sync with the LOADSQL in
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/db.entities.yml
# This SQL is available from https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data
LOADSQL: https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/dspace7-entities-data.sql
PGDATA: /pgdata
image: dspace/dspace-postgres-pgcrypto:loadsql
POSTGRES_PASSWORD: dspace
networks:
dspacenet:
- dspacenet
ports:
- published: 5432
target: 5432
stdin_open: true
tty: true
volumes:
# Keep Postgres data directory between reboots
- pgdata:/pgdata
# DSpace Solr container
dspacesolr:
container_name: dspacesolr
# Uses official Solr image at https://hub.docker.com/_/solr/
image: solr:8.11-slim
# Needs main 'dspace' container to start first to guarantee access to solr_configs
depends_on:
- dspace
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}"
networks:
dspacenet:
- dspacenet
ports:
- published: 8983
target: 8983
@@ -92,9 +91,6 @@ services:
tty: true
working_dir: /var/solr/data
volumes:
# Mount our "solr_configs" volume available under the Solr's configsets folder (in a 'dspace' subfolder)
# This copies the Solr configs from main 'dspace' container into 'dspacesolr' via that volume
- solr_configs:/opt/solr/server/solr/configsets/dspace
# Keep Solr data directory between reboots
- solr_data:/var/solr/data
# Initialize all DSpace Solr cores using the mounted configsets (see above), then start Solr
@@ -103,14 +99,16 @@ services:
- '-c'
- |
init-var-solr
precreate-core authority /opt/solr/server/solr/configsets/dspace/authority
precreate-core oai /opt/solr/server/solr/configsets/dspace/oai
precreate-core search /opt/solr/server/solr/configsets/dspace/search
precreate-core statistics /opt/solr/server/solr/configsets/dspace/statistics
precreate-core authority /opt/solr/server/solr/configsets/authority
cp -r /opt/solr/server/solr/configsets/authority/* authority
precreate-core oai /opt/solr/server/solr/configsets/oai
cp -r /opt/solr/server/solr/configsets/oai/* oai
precreate-core search /opt/solr/server/solr/configsets/search
cp -r /opt/solr/server/solr/configsets/search/* search
precreate-core statistics /opt/solr/server/solr/configsets/statistics
cp -r /opt/solr/server/solr/configsets/statistics/* statistics
exec solr -f
volumes:
assetstore:
pgdata:
solr_data:
# Special volume used to share Solr configs from 'dspace' to 'dspacesolr' container (see above)
solr_configs:

View File

@@ -8,7 +8,6 @@
# Docker Compose for running the DSpace Angular UI dist build
# for previewing with the DSpace Demo site backend
version: '3.7'
networks:
dspacenet:
services:
@@ -24,10 +23,10 @@ services:
# This is because Server Side Rendering (SSR) currently requires a public URL,
# see this bug: https://github.com/DSpace/dspace-angular/issues/1485
DSPACE_REST_SSL: 'true'
DSPACE_REST_HOST: api7.dspace.org
DSPACE_REST_HOST: demo.dspace.org
DSPACE_REST_PORT: 443
DSPACE_REST_NAMESPACE: /server
image: dspace/dspace-angular:dspace-7_x-dist
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-angular:${DSPACE_VER:-dspace-7_x}-dist"
build:
context: ..
dockerfile: Dockerfile.dist

View File

@@ -10,7 +10,6 @@
# This is based heavily on the docker-compose.yml that is available in the DSpace/DSpace
# (Backend) at:
# https://github.com/DSpace/DSpace/blob/main/docker-compose.yml
version: '3.7'
networks:
dspacenet:
ipam:
@@ -29,8 +28,9 @@ services:
# __D__ => "-" (e.g. google__D__metadata => google-metadata)
# dspace.dir, dspace.server.url, dspace.ui.url and dspace.name
dspace__P__dir: /dspace
dspace__P__server__P__url: http://localhost:8080/server
dspace__P__ui__P__url: http://localhost:4000
# Uncomment to set a non-default value for dspace.server.url or dspace.ui.url
# dspace__P__server__P__url: http://localhost:8080/server
# dspace__P__ui__P__url: http://localhost:4000
dspace__P__name: 'DSpace Started with Docker Compose'
# db.url: Ensure we are using the 'dspacedb' image for our database
db__P__url: 'jdbc:postgresql://dspacedb:5432/dspace'
@@ -39,11 +39,12 @@ services:
# proxies.trusted.ipranges: This setting is required for a REST API running in Docker to trust requests
# from the host machine. This IP range MUST correspond to the 'dspacenet' subnet defined above.
proxies__P__trusted__P__ipranges: '172.23.0'
image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}"
LOGGING_CONFIG: /dspace/config/log4j2-container.xml
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}"
depends_on:
- dspacedb
networks:
dspacenet:
- dspacenet
ports:
- published: 8080
target: 8080
@@ -51,8 +52,6 @@ services:
tty: true
volumes:
- assetstore:/dspace/assetstore
# Mount DSpace's solr configs to a volume, so that we can share to 'dspacesolr' container (see below)
- solr_configs:/dspace/solr
# Ensure that the database is ready BEFORE starting tomcat
# 1. While a TCP connection to dspacedb port 5432 is not available, continue to sleep
# 2. Then, run database migration to init database tables
@@ -67,27 +66,27 @@ services:
# DSpace database container
dspacedb:
container_name: dspacedb
# Uses a custom Postgres image with pgcrypto installed
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-postgres-pgcrypto:${DSPACE_VER:-dspace-7_x}"
environment:
PGDATA: /pgdata
image: dspace/dspace-postgres-pgcrypto
POSTGRES_PASSWORD: dspace
networks:
dspacenet:
- dspacenet
ports:
- published: 5432
target: 5432
stdin_open: true
tty: true
volumes:
# Keep Postgres data directory between reboots
- pgdata:/pgdata
# DSpace Solr container
dspacesolr:
container_name: dspacesolr
image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}"
# Needs main 'dspace' container to start first to guarantee access to solr_configs
depends_on:
- dspace
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}"
networks:
dspacenet:
- dspacenet
ports:
- published: 8983
target: 8983
@@ -120,5 +119,3 @@ volumes:
assetstore:
pgdata:
solr_data:
# Special volume used to share Solr configs from 'dspace' to 'dspacesolr' container (see above)
solr_configs:

View File

@@ -9,7 +9,6 @@
# Docker Compose for running the DSpace Angular UI for testing/development
# Requires also running a REST API backend (either locally or remotely),
# for example via 'docker-compose-rest.yml'
version: '3.7'
networks:
dspacenet:
services:
@@ -24,7 +23,7 @@ services:
DSPACE_REST_HOST: localhost
DSPACE_REST_PORT: 8080
DSPACE_REST_NAMESPACE: /server
image: dspace/dspace-angular:dspace-7_x
image: "${DOCKER_REGISTRY:-docker.io}/${DOCKER_OWNER:-dspace}/dspace-angular:${DSPACE_VER:-dspace-7_x}"
build:
context: ..
dockerfile: Dockerfile

View File

@@ -48,7 +48,7 @@ dspace-angular connects to your DSpace installation by using its REST endpoint.
```yaml
rest:
ssl: true
host: api7.dspace.org
host: demo.dspace.org
port: 443
nameSpace: /server
}
@@ -57,7 +57,7 @@ rest:
Alternately you can set the following environment variables. If any of these are set, it will override all configuration files:
```
DSPACE_REST_SSL=true
DSPACE_REST_HOST=api7.dspace.org
DSPACE_REST_HOST=demo.dspace.org
DSPACE_REST_PORT=443
DSPACE_REST_NAMESPACE=/server
```

View File

@@ -1,6 +1,6 @@
{
"name": "dspace-angular",
"version": "7.6.0",
"version": "7.6.6-next",
"scripts": {
"ng": "ng",
"config:watch": "nodemon",
@@ -12,17 +12,16 @@
"preserve": "yarn base-href",
"serve": "ts-node --project ./tsconfig.ts-node.json scripts/serve.ts",
"serve:ssr": "node dist/server/main",
"analyze": "webpack-bundle-analyzer dist/browser/stats.json",
"build": "ng build --configuration development",
"build:stats": "ng build --stats-json",
"build:prod": "yarn run build:ssr",
"build:prod": "cross-env NODE_ENV=production yarn run build:ssr",
"build:ssr": "ng build --configuration production && ng run dspace-angular:server:production",
"test": "ng test --source-map=true --watch=false --configuration test",
"test:watch": "nodemon --exec \"ng test --source-map=true --watch=true --configuration test\"",
"test:headless": "ng test --source-map=true --watch=false --configuration test --browsers=ChromeHeadless --code-coverage",
"lint": "ng lint",
"lint-fix": "ng lint --fix=true",
"e2e": "ng e2e",
"e2e": "cross-env NODE_ENV=production ng e2e",
"clean:dev:config": "rimraf src/assets/config.json",
"clean:coverage": "rimraf coverage",
"clean:dist": "rimraf dist",
@@ -49,27 +48,20 @@
"https": false
},
"private": true,
"resolutions": {
"minimist": "^1.2.5",
"webdriver-manager": "^12.1.8",
"ts-node": "10.2.1"
},
"dependencies": {
"@angular/animations": "^15.2.8",
"@angular/cdk": "^15.2.8",
"@angular/common": "^15.2.8",
"@angular/compiler": "^15.2.8",
"@angular/core": "^15.2.8",
"@angular/forms": "^15.2.8",
"@angular/localize": "15.2.8",
"@angular/platform-browser": "^15.2.8",
"@angular/platform-browser-dynamic": "^15.2.8",
"@angular/platform-server": "^15.2.8",
"@angular/router": "^15.2.8",
"@babel/runtime": "7.21.0",
"@angular/animations": "^15.2.10",
"@angular/cdk": "^15.2.9",
"@angular/common": "^15.2.10",
"@angular/compiler": "^15.2.10",
"@angular/core": "^15.2.10",
"@angular/forms": "^15.2.10",
"@angular/localize": "15.2.10",
"@angular/platform-browser": "^15.2.10",
"@angular/platform-browser-dynamic": "^15.2.10",
"@angular/platform-server": "^15.2.10",
"@angular/router": "^15.2.10",
"@babel/runtime": "7.28.4",
"@kolkov/ngx-gallery": "^2.0.1",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.11.3",
"@ng-bootstrap/ng-bootstrap": "^11.0.0",
"@ng-dynamic-forms/core": "^15.0.0",
"@ng-dynamic-forms/ui-ng-bootstrap": "^15.0.0",
@@ -79,129 +71,129 @@
"@nguniversal/express-engine": "^15.2.1",
"@ngx-translate/core": "^14.0.0",
"@nicky-lenaers/ngx-scroll-to": "^14.0.0",
"@types/grecaptcha": "^3.0.4",
"angular-idle-preload": "3.0.0",
"angulartics2": "^12.2.0",
"axios": "^0.27.2",
"angulartics2": "^12.2.1",
"axios": "^1.11.0",
"bootstrap": "^4.6.1",
"cerialize": "0.1.18",
"cli-progress": "^3.12.0",
"colors": "^1.4.0",
"compression": "^1.7.4",
"cookie-parser": "1.4.6",
"core-js": "^3.30.1",
"date-fns": "^2.29.3",
"compression": "^1.8.1",
"cookie-parser": "1.4.7",
"core-js": "^3.45.1",
"date-fns": "^2.30.0",
"date-fns-tz": "^1.3.7",
"deepmerge": "^4.3.1",
"ejs": "^3.1.9",
"express": "^4.18.2",
"ejs": "^3.1.10",
"express": "^4.21.2",
"express-rate-limit": "^5.1.3",
"fast-json-patch": "^3.1.1",
"filesize": "^6.1.0",
"http-proxy-middleware": "^1.0.5",
"isbot": "^3.6.10",
"http-proxy-middleware": "^2.0.9",
"http-terminator": "^3.2.0",
"isbot": "^5.1.30",
"js-cookie": "2.2.1",
"js-yaml": "^4.1.0",
"json5": "^2.2.3",
"jsonschema": "1.4.1",
"jsonschema": "1.5.0",
"jwt-decode": "^3.1.2",
"klaro": "^0.7.18",
"klaro": "^0.7.21",
"lodash": "^4.17.21",
"lru-cache": "^7.14.1",
"markdown-it": "^13.0.1",
"markdown-it": "^13.0.2",
"markdown-it-mathjax3": "^4.3.2",
"mirador": "^3.3.0",
"mirador": "^3.4.3",
"mirador-dl-plugin": "^0.13.0",
"mirador-share-plugin": "^0.11.0",
"morgan": "^1.10.0",
"ng-mocks": "^14.10.0",
"mirador-share-plugin": "^0.16.0",
"morgan": "^1.10.1",
"ng2-file-upload": "1.4.0",
"ng2-nouislider": "^1.8.3",
"ng2-nouislider": "^2.0.0",
"ngx-infinite-scroll": "^15.0.0",
"ngx-pagination": "6.0.3",
"ngx-skeleton-loader": "^7.0.0",
"ngx-sortablejs": "^11.1.0",
"ngx-ui-switch": "^14.0.3",
"nouislider": "^14.6.3",
"pem": "1.14.7",
"prop-types": "^15.8.1",
"react-copy-to-clipboard": "^5.1.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.0",
"sanitize-html": "^2.10.0",
"sortablejs": "1.15.0",
"ngx-ui-switch": "^14.1.0",
"nouislider": "^15.8.1",
"pem": "1.14.8",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"sanitize-html": "^2.17.0",
"sortablejs": "1.15.6",
"uuid": "^8.3.2",
"webfontloader": "1.6.28",
"zone.js": "~0.11.5"
"zone.js": "~0.13.3"
},
"devDependencies": {
"@angular-builders/custom-webpack": "~15.0.0",
"@angular-devkit/build-angular": "^15.2.6",
"@angular-devkit/build-angular": "^15.2.11",
"@angular-eslint/builder": "15.2.1",
"@angular-eslint/eslint-plugin": "15.2.1",
"@angular-eslint/eslint-plugin-template": "15.2.1",
"@angular-eslint/schematics": "15.2.1",
"@angular-eslint/template-parser": "15.2.1",
"@angular/cli": "^15.2.6",
"@angular/compiler-cli": "^15.2.8",
"@angular/language-service": "^15.2.8",
"@angular/cli": "^16.2.16",
"@angular/compiler-cli": "^15.2.10",
"@angular/language-service": "^15.2.10",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^6.4.0",
"@fortawesome/fontawesome-free": "^6.7.2",
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.11.3",
"@ngrx/store-devtools": "^15.4.0",
"@ngtools/webpack": "^15.2.6",
"@nguniversal/builders": "^15.2.1",
"@types/deep-freeze": "0.1.2",
"@types/ejs": "^3.1.2",
"@types/express": "^4.17.17",
"@types/deep-freeze": "0.1.5",
"@types/ejs": "^3.1.5",
"@types/express": "^4.17.21",
"@types/grecaptcha": "^3.0.9",
"@types/jasmine": "~3.6.0",
"@types/js-cookie": "2.2.6",
"@types/lodash": "^4.14.194",
"@types/node": "^14.14.9",
"@types/sanitize-html": "^2.9.0",
"@typescript-eslint/eslint-plugin": "^5.59.1",
"@typescript-eslint/parser": "^5.59.1",
"axe-core": "^4.7.0",
"@types/lodash": "^4.17.20",
"@types/node": "^14.18.63",
"@types/sanitize-html": "^2.16.0",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"axe-core": "^4.10.3",
"compression-webpack-plugin": "^9.2.0",
"copy-webpack-plugin": "^6.4.1",
"cross-env": "^7.0.3",
"cypress": "12.10.0",
"cypress-axe": "^1.4.0",
"csstype": "^3.1.3",
"cypress": "^13.17.0",
"cypress-axe": "^1.7.0",
"deep-freeze": "0.0.1",
"eslint": "^8.39.0",
"eslint-plugin-deprecation": "^1.4.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsdoc": "^39.6.4",
"eslint-plugin-jsonc": "^2.6.0",
"eslint-plugin-deprecation": "^1.5.0",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsdoc": "^45.0.0",
"eslint-plugin-jsonc": "^2.20.1",
"eslint-plugin-lodash": "^7.4.0",
"eslint-plugin-unused-imports": "^2.0.0",
"express-static-gzip": "^2.1.7",
"express-static-gzip": "^2.2.0",
"jasmine-core": "^3.8.0",
"jasmine-marbles": "0.9.2",
"karma": "^6.4.2",
"karma": "^6.4.4",
"karma-chrome-launcher": "~3.2.0",
"karma-coverage-istanbul-reporter": "~3.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"karma-mocha-reporter": "2.2.5",
"ng-mocks": "^14.13.5",
"ngx-mask": "^13.1.7",
"nodemon": "^2.0.22",
"postcss": "^8.4",
"postcss-apply": "0.12.0",
"postcss": "^8.5",
"postcss-import": "^14.0.0",
"postcss-loader": "^4.0.3",
"postcss-preset-env": "^7.4.2",
"postcss-responsive-type": "1.0.0",
"prop-types": "^15.8.1",
"react": "^16.14.0",
"react-copy-to-clipboard": "^5.1.0",
"react-dom": "^16.14.0",
"rimraf": "^3.0.2",
"rxjs-spy": "^8.0.2",
"sass": "~1.62.0",
"sass": "~1.92.1",
"sass-loader": "^12.6.0",
"sass-resources-loader": "^2.2.5",
"ts-node": "^8.10.2",
"typescript": "~4.8.4",
"webpack": "5.76.1",
"webpack-bundle-analyzer": "^4.8.0",
"webpack-cli": "^4.2.0",
"webpack-dev-server": "^4.13.3"
"webpack-dev-server": "^5.2.2"
}
}

View File

@@ -1,8 +1,6 @@
module.exports = {
plugins: [
require('postcss-import')(),
require('postcss-preset-env')(),
require('postcss-apply')(),
require('postcss-responsive-type')()
require('postcss-preset-env')()
]
};

View File

@@ -28,10 +28,11 @@ import * as expressStaticGzip from 'express-static-gzip';
/* eslint-enable import/no-namespace */
import axios from 'axios';
import LRU from 'lru-cache';
import isbot from 'isbot';
import { isbot } from 'isbot';
import { createCertificate } from 'pem';
import { createServer } from 'https';
import { json } from 'body-parser';
import { createHttpTerminator } from 'http-terminator';
import { readFileSync } from 'fs';
import { join } from 'path';
@@ -54,6 +55,7 @@ import { APP_CONFIG, AppConfig } from './src/config/app-config.interface';
import { extendEnvironmentWithAppConfig } from './src/config/config.util';
import { logStartupMessage } from './startup-message';
import { TOKENITEM } from './src/app/core/auth/models/auth-token-info.model';
import { SsrExcludePatterns } from './src/config/universal-config.interface';
/*
@@ -78,6 +80,9 @@ let anonymousCache: LRU<string, any>;
// extend environment with app config for server
extendEnvironmentWithAppConfig(environment, appConfig);
// The REST server base URL
const REST_BASE_URL = environment.rest.ssrBaseUrl || environment.rest.baseUrl;
// The Express app is exported so that it can be used by serverless Functions.
export function app() {
@@ -130,6 +135,7 @@ export function app() {
server.engine('html', (_, options, callback) =>
ngExpressEngine({
bootstrap: ServerAppModule,
inlineCriticalCss: environment.universal.inlineCriticalCss,
providers: [
{
provide: REQUEST,
@@ -174,7 +180,7 @@ export function app() {
* Proxy the sitemaps
*/
router.use('/sitemap**', createProxyMiddleware({
target: `${environment.rest.baseUrl}/sitemaps`,
target: `${REST_BASE_URL}/sitemaps`,
pathRewrite: path => path.replace(environment.ui.nameSpace, '/'),
changeOrigin: true
}));
@@ -183,7 +189,7 @@ export function app() {
* Proxy the linksets
*/
router.use('/signposting**', createProxyMiddleware({
target: `${environment.rest.baseUrl}`,
target: `${REST_BASE_URL}`,
pathRewrite: path => path.replace(environment.ui.nameSpace, '/'),
changeOrigin: true
}));
@@ -236,7 +242,7 @@ export function app() {
* The callback function to serve server side angular
*/
function ngApp(req, res) {
if (environment.universal.preboot) {
if (environment.universal.preboot && req.method === 'GET' && (req.path === '/' || !isExcludedFromSsr(req.path, environment.universal.excludePathPatterns))) {
// Render the page to user via SSR (server side rendering)
serverSideRender(req, res);
} else {
@@ -267,6 +273,11 @@ function serverSideRender(req, res, sendToUser: boolean = true) {
requestUrl: req.originalUrl,
}, (err, data) => {
if (hasNoValue(err) && hasValue(data)) {
// Replace REST URL with UI URL
if (environment.universal.replaceRestUrl && REST_BASE_URL !== environment.rest.baseUrl) {
data = data.replace(new RegExp(REST_BASE_URL, 'g'), environment.rest.baseUrl);
}
// save server side rendered page to cache (if any are enabled)
saveToCache(req, data);
if (sendToUser) {
@@ -320,22 +331,23 @@ function initCache() {
if (botCacheEnabled()) {
// Initialize a new "least-recently-used" item cache (where least recently used pages are removed first)
// See https://www.npmjs.com/package/lru-cache
// When enabled, each page defaults to expiring after 1 day
// When enabled, each page defaults to expiring after 1 day (defined in default-app-config.ts)
botCache = new LRU( {
max: environment.cache.serverSide.botCache.max,
ttl: environment.cache.serverSide.botCache.timeToLive || 24 * 60 * 60 * 1000, // 1 day
allowStale: environment.cache.serverSide.botCache.allowStale ?? true // if object is stale, return stale value before deleting
ttl: environment.cache.serverSide.botCache.timeToLive,
allowStale: environment.cache.serverSide.botCache.allowStale
});
}
if (anonymousCacheEnabled()) {
// NOTE: While caches may share SSR pages, this cache must be kept separately because the timeToLive
// may expire pages more frequently.
// When enabled, each page defaults to expiring after 10 seconds (to minimize anonymous users seeing out-of-date content)
// When enabled, each page defaults to expiring after 10 seconds (defined in default-app-config.ts)
// to minimize anonymous users seeing out-of-date content
anonymousCache = new LRU( {
max: environment.cache.serverSide.anonymousCache.max,
ttl: environment.cache.serverSide.anonymousCache.timeToLive || 10 * 1000, // 10 seconds
allowStale: environment.cache.serverSide.anonymousCache.allowStale ?? true // if object is stale, return stale value before deleting
ttl: environment.cache.serverSide.anonymousCache.timeToLive,
allowStale: environment.cache.serverSide.anonymousCache.allowStale
});
}
}
@@ -487,7 +499,7 @@ function saveToCache(req, page: any) {
*/
function hasNotSucceeded(statusCode) {
const rgx = new RegExp(/^20+/);
return !rgx.test(statusCode)
return !rgx.test(statusCode);
}
function retrieveHeaders(response) {
@@ -525,23 +537,46 @@ function serverStarted() {
* @param keys SSL credentials
*/
function createHttpsServer(keys) {
createServer({
const listener = createServer({
key: keys.serviceKey,
cert: keys.certificate
}, app).listen(environment.ui.port, environment.ui.host, () => {
serverStarted();
});
// Graceful shutdown when signalled
const terminator = createHttpTerminator({server: listener});
process.on('SIGINT', () => {
void (async ()=> {
console.debug('Closing HTTPS server on signal');
await terminator.terminate().catch(e => { console.error(e); });
console.debug('HTTPS server closed');
})();
});
}
/**
* Create an HTTP server with the configured port and host.
*/
function run() {
const port = environment.ui.port || 4000;
const host = environment.ui.host || '/';
const port = environment.ui.port;
const host = environment.ui.host;
// Start up the Node server
const server = app();
server.listen(port, host, () => {
const listener = server.listen(port, host, () => {
serverStarted();
});
// Graceful shutdown when signalled
const terminator = createHttpTerminator({server: listener});
process.on('SIGINT', () => {
void (async () => {
console.debug('Closing HTTP server on signal');
await terminator.terminate().catch(e => { console.error(e); });
console.debug('HTTP server closed.');return undefined;
})();
});
}
function start() {
@@ -591,11 +626,26 @@ function start() {
}
}
/**
* Check if SSR should be skipped for path
*
* @param path
* @param excludePathPattern
*/
function isExcludedFromSsr(path: string, excludePathPattern: SsrExcludePatterns[]): boolean {
const patterns = excludePathPattern.map(p =>
new RegExp(p.pattern, p.flag || '')
);
return patterns.some((regex) => {
return regex.test(path)
});
}
/*
* The callback function to serve health check requests
*/
function healthCheck(req, res) {
const baseUrl = `${environment.rest.baseUrl}${environment.actuators.endpointPath}`;
const baseUrl = `${REST_BASE_URL}${environment.actuators.endpointPath}`;
axios.get(baseUrl)
.then((response) => {
res.status(response.status).send(response.data);

View File

@@ -1,12 +1,22 @@
import { URLCombiner } from '../core/url-combiner/url-combiner';
import { getAccessControlModuleRoute } from '../app-routing-paths';
export const GROUP_EDIT_PATH = 'groups';
export const EPERSON_PATH = 'epeople';
export function getEPersonsRoute(): string {
return new URLCombiner(getAccessControlModuleRoute(), EPERSON_PATH).toString();
}
export function getEPersonEditRoute(id: string): string {
return new URLCombiner(getEPersonsRoute(), id, 'edit').toString();
}
export const GROUP_PATH = 'groups';
export function getGroupsRoute() {
return new URLCombiner(getAccessControlModuleRoute(), GROUP_EDIT_PATH).toString();
return new URLCombiner(getAccessControlModuleRoute(), GROUP_PATH).toString();
}
export function getGroupEditRoute(id: string) {
return new URLCombiner(getAccessControlModuleRoute(), GROUP_EDIT_PATH, id).toString();
return new URLCombiner(getGroupsRoute(), id, 'edit').toString();
}

View File

@@ -3,7 +3,7 @@ import { RouterModule } from '@angular/router';
import { EPeopleRegistryComponent } from './epeople-registry/epeople-registry.component';
import { GroupFormComponent } from './group-registry/group-form/group-form.component';
import { GroupsRegistryComponent } from './group-registry/groups-registry.component';
import { GROUP_EDIT_PATH } from './access-control-routing-paths';
import { EPERSON_PATH, GROUP_PATH } from './access-control-routing-paths';
import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver';
import { GroupPageGuard } from './group-registry/group-page.guard';
import {
@@ -13,12 +13,14 @@ import {
SiteAdministratorGuard
} from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard';
import { BulkAccessComponent } from './bulk-access/bulk-access.component';
import { EPersonFormComponent } from './epeople-registry/eperson-form/eperson-form.component';
import { EPersonResolver } from './epeople-registry/eperson-resolver.service';
@NgModule({
imports: [
RouterModule.forChild([
{
path: 'epeople',
path: EPERSON_PATH,
component: EPeopleRegistryComponent,
resolve: {
breadcrumb: I18nBreadcrumbResolver
@@ -27,7 +29,26 @@ import { BulkAccessComponent } from './bulk-access/bulk-access.component';
canActivate: [SiteAdministratorGuard]
},
{
path: GROUP_EDIT_PATH,
path: `${EPERSON_PATH}/create`,
component: EPersonFormComponent,
resolve: {
breadcrumb: I18nBreadcrumbResolver,
},
data: { title: 'admin.access-control.epeople.add.title', breadcrumbKey: 'admin.access-control.epeople.add' },
canActivate: [SiteAdministratorGuard],
},
{
path: `${EPERSON_PATH}/:id/edit`,
component: EPersonFormComponent,
resolve: {
breadcrumb: I18nBreadcrumbResolver,
ePerson: EPersonResolver,
},
data: { title: 'admin.access-control.epeople.edit.title', breadcrumbKey: 'admin.access-control.epeople.edit' },
canActivate: [SiteAdministratorGuard],
},
{
path: GROUP_PATH,
component: GroupsRegistryComponent,
resolve: {
breadcrumb: I18nBreadcrumbResolver
@@ -36,7 +57,7 @@ import { BulkAccessComponent } from './bulk-access/bulk-access.component';
canActivate: [GroupAdministratorGuard]
},
{
path: `${GROUP_EDIT_PATH}/newGroup`,
path: `${GROUP_PATH}/create`,
component: GroupFormComponent,
resolve: {
breadcrumb: I18nBreadcrumbResolver
@@ -45,7 +66,7 @@ import { BulkAccessComponent } from './bulk-access/bulk-access.component';
canActivate: [GroupAdministratorGuard]
},
{
path: `${GROUP_EDIT_PATH}/:groupId`,
path: `${GROUP_PATH}/:groupId/edit`,
component: GroupFormComponent,
resolve: {
breadcrumb: I18nBreadcrumbResolver

View File

@@ -1,15 +1,15 @@
<ngb-accordion #acc="ngbAccordion" [activeIds]="'browse'">
<ngb-panel [id]="'browse'">
<ng-template ngbPanelHeader>
<div class="w-100 d-flex justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle('browse')"
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle('browse')"
data-test="browse">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()"
[attr.aria-expanded]="!acc.isExpanded('browse')"
aria-controls="collapsePanels">
[attr.aria-expanded]="acc.isExpanded('browse')"
aria-controls="bulk-access-browse-panel-content">
{{ 'admin.access-control.bulk-access-browse.header' | translate }}
</button>
<div class="text-right d-flex">
<div class="ml-3 d-inline-block">
<div class="text-right d-flex gap-2">
<div class="d-flex my-auto">
<span *ngIf="acc.isExpanded('browse')" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!acc.isExpanded('browse')" class="fas fa-chevron-down fa-fw"></span>
</div>
@@ -17,51 +17,52 @@
</div>
</ng-template>
<ng-template ngbPanelContent>
<ul ngbNav #nav="ngbNav" [(activeId)]="activateId" class="nav-pills">
<li [ngbNavItem]="'search'">
<a ngbNavLink>{{'admin.access-control.bulk-access-browse.search.header' | translate}}</a>
<ng-template ngbNavContent>
<div class="mx-n3">
<ds-themed-search [configuration]="'administrativeBulkAccess'"
[selectable]="true"
[selectionConfig]="{ repeatable: true, listId: listId }"
[showThumbnails]="false"></ds-themed-search>
</div>
</ng-template>
</li>
<li [ngbNavItem]="'selected'">
<a ngbNavLink>
{{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }}
</a>
<ng-template ngbNavContent>
<ds-pagination
[paginationOptions]="(paginationOptions$ | async)"
[pageInfoState]="(objectsSelected$|async)?.payload.pageInfo"
[collectionSize]="(objectsSelected$|async)?.payload?.totalElements"
[objects]="(objectsSelected$|async)"
[showPaginator]="false"
(prev)="pagePrev()"
(next)="pageNext()">
<ul *ngIf="(objectsSelected$|async)?.hasSucceeded" class="list-unstyled ml-4">
<li *ngFor='let object of (objectsSelected$|async)?.payload?.page | paginate: { itemsPerPage: (paginationOptions$ | async).pageSize,
currentPage: (paginationOptions$ | async).currentPage, totalItems: (objectsSelected$|async)?.payload?.page.length }; let i = index; let last = last '
class="mt-4 mb-4 d-flex"
[attr.data-test]="'list-object' | dsBrowserOnly">
<ds-selectable-list-item-control [index]="i"
[object]="object"
[selectionConfig]="{ repeatable: true, listId: listId }"></ds-selectable-list-item-control>
<ds-listable-object-component-loader [listID]="listId"
[index]="i"
[object]="object"
[showThumbnails]="false"
[viewMode]="'list'"></ds-listable-object-component-loader>
</li>
</ul>
</ds-pagination>
</ng-template>
</li>
</ul>
<div [ngbNavOutlet]="nav" class="mt-5"></div>
<div id="bulk-access-browse-panel-content">
<ul ngbNav #nav="ngbNav" [(activeId)]="activateId" class="nav-pills">
<li [ngbNavItem]="'search'" role="presentation">
<a ngbNavLink>{{'admin.access-control.bulk-access-browse.search.header' | translate}}</a>
<ng-template ngbNavContent>
<div class="mx-n3">
<ds-themed-search [configuration]="'administrativeBulkAccess'"
[selectable]="true"
[selectionConfig]="{ repeatable: true, listId: listId }"
[showThumbnails]="false"></ds-themed-search>
</div>
</ng-template>
</li>
<li [ngbNavItem]="'selected'" role="presentation">
<a ngbNavLink>
{{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }}
</a>
<ng-template ngbNavContent>
<ds-pagination
[paginationOptions]="(paginationOptions$ | async)"
[collectionSize]="(objectsSelected$|async)?.payload?.totalElements"
[objects]="(objectsSelected$|async)"
[showPaginator]="false"
(prev)="pagePrev()"
(next)="pageNext()">
<ul *ngIf="(objectsSelected$|async)?.hasSucceeded" class="list-unstyled ml-4">
<li *ngFor='let object of (objectsSelected$|async)?.payload?.page | paginate: { itemsPerPage: (paginationOptions$ | async).pageSize,
currentPage: (paginationOptions$ | async).currentPage, totalItems: (objectsSelected$|async)?.payload?.page.length }; let i = index; let last = last '
class="mt-4 mb-4 d-flex"
[attr.data-test]="'list-object' | dsBrowserOnly">
<ds-selectable-list-item-control [index]="i"
[object]="object"
[selectionConfig]="{ repeatable: true, listId: listId }"></ds-selectable-list-item-control>
<ds-listable-object-component-loader [listID]="listId"
[index]="i"
[object]="object"
[showThumbnails]="false"
[viewMode]="'list'"></ds-listable-object-component-loader>
</li>
</ul>
</ds-pagination>
</ng-template>
</li>
</ul>
<div [ngbNavOutlet]="nav" class="mt-5"></div>
</div>
</ng-template>
</ngb-panel>
</ngb-accordion>

View File

@@ -1,4 +1,5 @@
<div class="container">
<h1>{{ 'admin.access-control.bulk-access.title' | translate }}</h1>
<ds-bulk-access-browse [listId]="listId"></ds-bulk-access-browse>
<div class="clearfix mb-3"></div>
<ds-bulk-access-settings #dsBulkSettings ></ds-bulk-access-settings>
@@ -9,7 +10,7 @@
<button class="btn btn-outline-primary mr-3" (click)="reset()">
{{ 'access-control-cancel' | translate }}
</button>
<button class="btn btn-primary" [disabled]="!canExport()" (click)="submit()">
<button class="btn btn-primary" [dsBtnDisabled]="!canExport()" (click)="submit()">
{{ 'access-control-execute' | translate }}
</button>
</div>

View File

@@ -1,5 +1,5 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { NO_ERRORS_SCHEMA, Component } from '@angular/core';
import { TranslateModule } from '@ngx-translate/core';
import { of } from 'rxjs';
@@ -57,10 +57,15 @@ describe('BulkAccessComponent', () => {
'file': { }
};
const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', {
getValue: jasmine.createSpy('getValue'),
reset: jasmine.createSpy('reset')
});
@Component({
selector: 'ds-bulk-access-settings',
template: ''
})
class MockBulkAccessSettingsComponent {
isFormValid = jasmine.createSpy('isFormValid').and.returnValue(false);
getValue = jasmine.createSpy('getValue');
reset = jasmine.createSpy('reset');
}
const selection: any[] = [{ indexableObject: { uuid: '1234' } }, { indexableObject: { uuid: '5678' } }];
const selectableListState: SelectableListState = { id: 'test', selection };
const expectedIdList = ['1234', '5678'];
@@ -73,7 +78,10 @@ describe('BulkAccessComponent', () => {
RouterTestingModule,
TranslateModule.forRoot()
],
declarations: [ BulkAccessComponent ],
declarations: [
BulkAccessComponent,
MockBulkAccessSettingsComponent,
],
providers: [
{ provide: BulkAccessControlService, useValue: bulkAccessControlServiceMock },
{ provide: NotificationsService, useValue: NotificationsServiceStub },
@@ -102,7 +110,6 @@ describe('BulkAccessComponent', () => {
(component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListStateEmpty));
fixture.detectChanges();
component.settings = mockSettings;
});
it('should create', () => {
@@ -119,13 +126,12 @@ describe('BulkAccessComponent', () => {
});
describe('when there are elements selected', () => {
describe('when there are elements selected and step two form is invalid', () => {
beforeEach(() => {
(component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState));
fixture.detectChanges();
component.settings = mockSettings;
});
it('should create', () => {
@@ -136,9 +142,9 @@ describe('BulkAccessComponent', () => {
expect(component.objectsSelected$.value).toEqual(expectedIdList);
});
it('should enable the execute button when there are objects selected', () => {
it('should not enable the execute button when there are objects selected and step two form is invalid', () => {
component.objectsSelected$.next(['1234']);
expect(component.canExport()).toBe(true);
expect(component.canExport()).toBe(false);
});
it('should call the settings reset method when reset is called', () => {
@@ -146,6 +152,23 @@ describe('BulkAccessComponent', () => {
expect(component.settings.reset).toHaveBeenCalled();
});
});
describe('when there are elements selectedted and the step two form is valid', () => {
beforeEach(() => {
(component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState));
fixture.detectChanges();
(component as any).settings.isFormValid.and.returnValue(true);
});
it('should enable the execute button when there are objects selected and step two form is valid', () => {
component.objectsSelected$.next(['1234']);
expect(component.canExport()).toBe(true);
});
it('should call the bulkAccessControlService executeScript method when submit is called', () => {
(component.settings as any).getValue.and.returnValue(mockFormState);
bulkAccessControlService.createPayloadFile.and.returnValue(mockFile);

View File

@@ -37,7 +37,7 @@ export class BulkAccessComponent implements OnInit {
constructor(
private bulkAccessControlService: BulkAccessControlService,
private selectableListService: SelectableListService
private selectableListService: SelectableListService,
) {
}
@@ -51,7 +51,7 @@ export class BulkAccessComponent implements OnInit {
}
canExport(): boolean {
return this.objectsSelected$.value?.length > 0;
return this.objectsSelected$.value?.length > 0 && this.settings?.isFormValid();
}
/**

View File

@@ -1,13 +1,13 @@
<ngb-accordion #acc="ngbAccordion" [activeIds]="'settings'">
<ngb-panel [id]="'settings'">
<ng-template ngbPanelHeader>
<div class="w-100 d-flex justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle('settings')" data-test="settings">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()" [attr.aria-expanded]="!acc.isExpanded('browse')"
aria-controls="collapsePanels">
<div class="w-100 d-flex gap-3 justify-content-between collapse-toggle" ngbPanelToggle (click)="acc.toggle('settings')" data-test="settings">
<button type="button" class="btn btn-link p-0" (click)="$event.preventDefault()" [attr.aria-expanded]="acc.isExpanded('settings')"
aria-controls="bulk-access-settings-panel-content">
{{ 'admin.access-control.bulk-access-settings.header' | translate }}
</button>
<div class="text-right d-flex">
<div class="ml-3 d-inline-block">
<div class="text-right d-flex gap-2">
<div class="d-flex my-auto">
<span *ngIf="acc.isExpanded('settings')" class="fas fa-chevron-up fa-fw"></span>
<span *ngIf="!acc.isExpanded('settings')" class="fas fa-chevron-down fa-fw"></span>
</div>
@@ -15,7 +15,7 @@
</div>
</ng-template>
<ng-template ngbPanelContent>
<ds-access-control-form-container #dsAccessControlForm [showSubmit]="false"></ds-access-control-form-container>
<ds-access-control-form-container id="bulk-access-settings-panel-content" #dsAccessControlForm [showSubmit]="false"></ds-access-control-form-container>
</ng-template>
</ngb-panel>
</ngb-accordion>

View File

@@ -31,4 +31,8 @@ export class BulkAccessSettingsComponent {
this.controlForm.reset();
}
isFormValid() {
return this.controlForm.isValid();
}
}

View File

@@ -2,98 +2,92 @@
<div class="epeople-registry row">
<div class="col-12">
<div class="d-flex justify-content-between border-bottom mb-3">
<h2 id="header" class="pb-2">{{labelPrefix + 'head' | translate}}</h2>
<h1 id="header" class="pb-2">{{labelPrefix + 'head' | translate}}</h1>
<div *ngIf="!isEPersonFormShown">
<div>
<button class="mr-auto btn btn-success addEPerson-button"
(click)="isEPersonFormShown = true">
[routerLink]="'create'">
<i class="fas fa-plus"></i>
<span class="d-none d-sm-inline ml-1">{{labelPrefix + 'button.add' | translate}}</span>
</button>
</div>
</div>
<ds-eperson-form *ngIf="isEPersonFormShown" (submitForm)="reset()"
(cancelForm)="isEPersonFormShown = false"></ds-eperson-form>
<div *ngIf="!isEPersonFormShown">
<h3 id="search" class="border-bottom pb-2">{{labelPrefix + 'search.head' | translate}}
</h3>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div>
<select name="scope" id="scope" formControlName="scope" class="form-control" aria-label="Search scope">
<option value="metadata">{{labelPrefix + 'search.scope.metadata' | translate}}</option>
<option value="email">{{labelPrefix + 'search.scope.email' | translate}}</option>
</select>
</div>
<div class="flex-grow-1 mr-3 ml-3">
<div class="form-group input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" [attr.aria-label]="labelPrefix + 'search.placeholder' | translate"
[placeholder]="(labelPrefix + 'search.placeholder' | translate)">
<span class="input-group-append">
<h2 id="search" class="border-bottom pb-2">
{{labelPrefix + 'search.head' | translate}}
</h2>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div>
<select name="scope" id="scope" formControlName="scope" class="form-control" aria-label="Search scope">
<option value="metadata">{{labelPrefix + 'search.scope.metadata' | translate}}</option>
<option value="email">{{labelPrefix + 'search.scope.email' | translate}}</option>
</select>
</div>
<div class="flex-grow-1 mr-3 ml-3">
<div class="form-group input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" [attr.aria-label]="labelPrefix + 'search.placeholder' | translate"
[placeholder]="(labelPrefix + 'search.placeholder' | translate)">
<span class="input-group-append">
<button type="submit" class="search-button btn btn-primary">
<i class="fas fa-search"></i> {{ labelPrefix + 'search.button' | translate }}
</button>
</span>
</div>
</div>
<div>
<button (click)="clearFormAndResetResult();"
class="search-button btn btn-secondary">{{labelPrefix + 'button.see-all' | translate}}</button>
</div>
</form>
<ds-themed-loading *ngIf="searching$ | async"></ds-themed-loading>
<ds-pagination
*ngIf="(pageInfoState$ | async)?.totalElements > 0 && !(searching$ | async)"
[paginationOptions]="config"
[pageInfoState]="pageInfoState$"
[collectionSize]="(pageInfoState$ | async)?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
<div class="table-responsive">
<table id="epeople" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{labelPrefix + 'table.id' | translate}}</th>
<th scope="col">{{labelPrefix + 'table.name' | translate}}</th>
<th scope="col">{{labelPrefix + 'table.email' | translate}}</th>
<th>{{labelPrefix + 'table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let epersonDto of (ePeopleDto$ | async)?.page"
[ngClass]="{'table-primary' : isActive(epersonDto.eperson) | async}">
<td>{{epersonDto.eperson.id}}</td>
<td>{{ dsoNameService.getName(epersonDto.eperson) }}</td>
<td>{{epersonDto.eperson.email}}</td>
<td>
<div class="btn-group edit-field">
<button (click)="toggleEditEPerson(epersonDto.eperson)"
class="btn btn-outline-primary btn-sm access-control-editEPersonButton"
title="{{labelPrefix + 'table.edit.buttons.edit' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
<i class="fas fa-edit fa-fw"></i>
</button>
<button [disabled]="!epersonDto.ableToDelete" (click)="deleteEPerson(epersonDto.eperson)"
class="delete-button btn btn-outline-danger btn-sm access-control-deleteEPersonButton"
title="{{labelPrefix + 'table.edit.buttons.remove' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(pageInfoState$ | async)?.totalElements == 0" class="alert alert-info w-100 mb-2" role="alert">
{{labelPrefix + 'no-items' | translate}}
</div>
<div>
<button (click)="clearFormAndResetResult();"
class="search-button btn btn-secondary">{{labelPrefix + 'button.see-all' | translate}}</button>
</div>
</form>
<ds-themed-loading *ngIf="searching$ | async"></ds-themed-loading>
<ds-pagination
*ngIf="(pageInfoState$ | async)?.totalElements > 0 && !(searching$ | async)"
[paginationOptions]="config"
[collectionSize]="(pageInfoState$ | async)?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
<div class="table-responsive">
<table id="epeople" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{labelPrefix + 'table.id' | translate}}</th>
<th scope="col">{{labelPrefix + 'table.name' | translate}}</th>
<th scope="col">{{labelPrefix + 'table.email' | translate}}</th>
<th>{{labelPrefix + 'table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let epersonDto of (ePeopleDto$ | async)?.page"
[ngClass]="{'table-primary' : (activeEPerson$ | async) === epersonDto.eperson}">
<td>{{epersonDto.eperson.id}}</td>
<td>{{ dsoNameService.getName(epersonDto.eperson) }}</td>
<td>{{epersonDto.eperson.email}}</td>
<td>
<div class="btn-group edit-field">
<button [routerLink]="getEditEPeoplePage(epersonDto.eperson.id)"
class="btn btn-outline-primary btn-sm access-control-editEPersonButton"
title="{{labelPrefix + 'table.edit.buttons.edit' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
<i class="fas fa-edit fa-fw"></i>
</button>
<button *ngIf="epersonDto.ableToDelete" (click)="deleteEPerson(epersonDto.eperson)"
class="delete-button btn btn-outline-danger btn-sm access-control-deleteEPersonButton"
title="{{labelPrefix + 'table.edit.buttons.remove' | translate: { name: dsoNameService.getName(epersonDto.eperson) } }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(pageInfoState$ | async)?.totalElements == 0" class="alert alert-info w-100 mb-2" role="alert">
{{labelPrefix + 'no-items' | translate}}
</div>
</div>
</div>

View File

@@ -27,6 +27,7 @@ import { RequestService } from '../../core/data/request.service';
import { PaginationService } from '../../core/pagination/pagination.service';
import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub';
import { FindListOptions } from '../../core/data/find-list-options.model';
import {BtnDisabledDirective} from '../../shared/btn-disabled.directive';
describe('EPeopleRegistryComponent', () => {
let component: EPeopleRegistryComponent;
@@ -131,7 +132,7 @@ describe('EPeopleRegistryComponent', () => {
}
}),
],
declarations: [EPeopleRegistryComponent],
declarations: [EPeopleRegistryComponent, BtnDisabledDirective],
providers: [
{ provide: EPersonDataService, useValue: ePersonDataServiceStub },
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
@@ -203,36 +204,6 @@ describe('EPeopleRegistryComponent', () => {
});
});
describe('toggleEditEPerson', () => {
describe('when you click on first edit eperson button', () => {
beforeEach(fakeAsync(() => {
const editButtons = fixture.debugElement.queryAll(By.css('.access-control-editEPersonButton'));
editButtons[0].triggerEventHandler('click', {
preventDefault: () => {/**/
}
});
tick();
fixture.detectChanges();
}));
it('editEPerson form is toggled', () => {
const ePeopleIds = fixture.debugElement.queryAll(By.css('#epeople tr td:first-child'));
ePersonDataServiceStub.getActiveEPerson().subscribe((activeEPerson: EPerson) => {
if (ePeopleIds[0] && activeEPerson === ePeopleIds[0].nativeElement.textContent) {
expect(component.isEPersonFormShown).toEqual(false);
} else {
expect(component.isEPersonFormShown).toEqual(true);
}
});
});
it('EPerson search section is hidden', () => {
expect(fixture.debugElement.query(By.css('#search'))).toBeNull();
});
});
});
describe('deleteEPerson', () => {
describe('when you click on first delete eperson button', () => {
let ePeopleIdsFoundBeforeDelete;
@@ -269,7 +240,8 @@ describe('EPeopleRegistryComponent', () => {
it('should be disabled', () => {
ePeopleDeleteButton = fixture.debugElement.queryAll(By.css('#epeople tr td div button.delete-button'));
ePeopleDeleteButton.forEach((deleteButton: DebugElement) => {
expect(deleteButton.nativeElement.disabled).toBe(true);
expect(deleteButton.nativeElement.getAttribute('aria-disabled')).toBe('true');
expect(deleteButton.nativeElement.classList.contains('disabled')).toBeTrue();
});
});
});

View File

@@ -22,6 +22,7 @@ import { PageInfo } from '../../core/shared/page-info.model';
import { NoContent } from '../../core/shared/NoContent.model';
import { PaginationService } from '../../core/pagination/pagination.service';
import { DSONameService } from '../../core/breadcrumbs/dso-name.service';
import { getEPersonEditRoute, getEPersonsRoute } from '../access-control-routing-paths';
@Component({
selector: 'ds-epeople-registry',
@@ -45,6 +46,8 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
*/
ePeopleDto$: BehaviorSubject<PaginatedList<EpersonDtoModel>> = new BehaviorSubject<PaginatedList<EpersonDtoModel>>({} as any);
activeEPerson$: Observable<EPerson>;
/**
* An observable for the pageInfo, needed to pass to the pagination component
*/
@@ -64,11 +67,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
currentPage: 1
});
/**
* Whether or not to show the EPerson form
*/
isEPersonFormShown: boolean;
// The search form
searchForm;
@@ -114,17 +112,12 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
*/
initialisePage() {
this.searching$.next(true);
this.isEPersonFormShown = false;
this.search({scope: this.currentSearchScope, query: this.currentSearchQuery});
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
if (eperson != null && eperson.id) {
this.isEPersonFormShown = true;
}
}));
this.activeEPerson$ = this.epersonService.getActiveEPerson();
this.subs.push(this.ePeople$.pipe(
switchMap((epeople: PaginatedList<EPerson>) => {
if (epeople.pageInfo.totalElements > 0) {
return combineLatest([...epeople.page.map((eperson: EPerson) => {
return combineLatest(epeople.page.map((eperson: EPerson) => {
return this.authorizationService.isAuthorized(FeatureID.CanDelete, hasValue(eperson) ? eperson.self : undefined).pipe(
map((authorized) => {
const epersonDtoModel: EpersonDtoModel = new EpersonDtoModel();
@@ -133,7 +126,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
return epersonDtoModel;
})
);
})]).pipe(map((dtos: EpersonDtoModel[]) => {
})).pipe(map((dtos: EpersonDtoModel[]) => {
return buildPaginatedList(epeople.pageInfo, dtos);
}));
} else {
@@ -160,14 +153,14 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
const query: string = data.query;
const scope: string = data.scope;
if (query != null && this.currentSearchQuery !== query) {
this.router.navigate([this.epersonService.getEPeoplePageRouterLink()], {
void this.router.navigate([getEPersonsRoute()], {
queryParamsHandling: 'merge'
});
this.currentSearchQuery = query;
this.paginationService.resetPage(this.config.id);
}
if (scope != null && this.currentSearchScope !== scope) {
this.router.navigate([this.epersonService.getEPeoplePageRouterLink()], {
void this.router.navigate([getEPersonsRoute()], {
queryParamsHandling: 'merge'
});
this.currentSearchScope = scope;
@@ -188,40 +181,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
);
}
/**
* Checks whether the given EPerson is active (being edited)
* @param eperson
*/
isActive(eperson: EPerson): Observable<boolean> {
return this.getActiveEPerson().pipe(
map((activeEPerson) => eperson === activeEPerson)
);
}
/**
* Gets the active eperson (being edited)
*/
getActiveEPerson(): Observable<EPerson> {
return this.epersonService.getActiveEPerson();
}
/**
* Start editing the selected EPerson
* @param ePerson
*/
toggleEditEPerson(ePerson: EPerson) {
this.getActiveEPerson().pipe(take(1)).subscribe((activeEPerson: EPerson) => {
if (ePerson === activeEPerson) {
this.epersonService.cancelEditEPerson();
this.isEPersonFormShown = false;
} else {
this.epersonService.editEPerson(ePerson);
this.isEPersonFormShown = true;
}
});
this.scrollToTop();
}
/**
* Deletes EPerson, show notification on success/failure & updates EPeople list
*/
@@ -242,7 +201,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
if (restResponse.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', {name: this.dsoNameService.getName(ePerson)}));
} else {
this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + ePerson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage);
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { id: ePerson.id, statusCode: restResponse.statusCode, errorMessage: restResponse.errorMessage }));
}
});
}
@@ -264,16 +223,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
}
scrollToTop() {
(function smoothscroll() {
const currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
if (currentScroll > 0) {
window.requestAnimationFrame(smoothscroll);
window.scrollTo(0, currentScroll - (currentScroll / 8));
}
})();
}
/**
* Reset all input-fields to be empty and search all search
*/
@@ -284,20 +233,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
this.search({query: ''});
}
/**
* This method will set everything to stale, which will cause the lists on this page to update.
*/
reset(): void {
this.epersonService.getBrowseEndpoint().pipe(
take(1),
switchMap((href: string) => {
return this.requestService.setStaleByHrefSubstring(href).pipe(
take(1),
);
})
).subscribe(()=>{
this.epersonService.cancelEditEPerson();
this.isEPersonFormShown = false;
});
getEditEPeoplePage(id: string): string {
return getEPersonEditRoute(id);
}
}

View File

@@ -1,89 +1,98 @@
<div *ngIf="epersonService.getActiveEPerson() | async; then editheader; else createHeader"></div>
<div class="container">
<div class="group-form row">
<div class="col-12">
<ng-template #createHeader>
<h4>{{messagePrefix + '.create' | translate}}</h4>
</ng-template>
<div *ngIf="activeEPerson$ | async; then editHeader; else createHeader"></div>
<ng-template #editheader>
<h4>{{messagePrefix + '.edit' | translate}}</h4>
</ng-template>
<ng-template #createHeader>
<h1 class="border-bottom pb-2">{{messagePrefix + '.create' | translate}}</h1>
</ng-template>
<ds-form [formId]="formId"
[formModel]="formModel"
[formGroup]="formGroup"
[formLayout]="formLayout"
[displayCancel]="false"
[submitLabel]="submitLabel"
(submitForm)="onSubmit()">
<div before class="btn-group">
<button (click)="onCancel()"
class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}</button>
</div>
<div *ngIf="displayResetPassword" between class="btn-group">
<button class="btn btn-primary" [disabled]="!(canReset$ | async)" (click)="resetPassword()">
<i class="fa fa-key"></i> {{'admin.access-control.epeople.actions.reset' | translate}}
</button>
</div>
<div between class="btn-group ml-1">
<button *ngIf="!isImpersonated" class="btn btn-primary" [ngClass]="{'d-none' : !(canImpersonate$ | async)}" (click)="impersonate()">
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.impersonate' | translate}}
</button>
<button *ngIf="isImpersonated" class="btn btn-primary" (click)="stopImpersonating()">
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.stop-impersonating' | translate}}
</button>
</div>
<button after class="btn btn-danger delete-button" [disabled]="!(canDelete$ | async)" (click)="delete()">
<i class="fas fa-trash"></i> {{'admin.access-control.epeople.actions.delete' | translate}}
</button>
</ds-form>
<ng-template #editHeader>
<h1 class="border-bottom pb-2">{{messagePrefix + '.edit' | translate}}</h1>
</ng-template>
<ds-themed-loading [showMessage]="false" *ngIf="!formGroup"></ds-themed-loading>
<ds-form [formId]="formId"
[formModel]="formModel"
[formGroup]="formGroup"
[formLayout]="formLayout"
[displayCancel]="false"
[submitLabel]="submitLabel"
(submitForm)="onSubmit()">
<div before class="btn-group">
<button (click)="onCancel()" type="button" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}
</button>
</div>
<div *ngIf="displayResetPassword" between class="btn-group">
<button class="btn btn-primary" [dsBtnDisabled]="!(canReset$ | async)" type="button" (click)="resetPassword()">
<i class="fa fa-key"></i> {{'admin.access-control.epeople.actions.reset' | translate}}
</button>
</div>
<div *ngIf="canImpersonate$ | async" between class="btn-group">
<button *ngIf="!isImpersonated" class="btn btn-primary" type="button" (click)="impersonate()">
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.impersonate' | translate}}
</button>
<button *ngIf="isImpersonated" class="btn btn-primary" type="button" (click)="stopImpersonating()">
<i class="fa fa-user-secret"></i> {{'admin.access-control.epeople.actions.stop-impersonating' | translate}}
</button>
</div>
<button *ngIf="canDelete$ | async" after class="btn btn-danger delete-button" type="button" (click)="delete()">
<i class="fas fa-trash"></i> {{'admin.access-control.epeople.actions.delete' | translate}}
</button>
</ds-form>
<div *ngIf="epersonService.getActiveEPerson() | async">
<h5>{{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}</h5>
<ds-themed-loading [showMessage]="false" *ngIf="!formGroup"></ds-themed-loading>
<ds-themed-loading [showMessage]="false" *ngIf="!(groups | async)"></ds-themed-loading>
<div *ngIf="activeEPerson$ | async">
<h2>{{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}</h2>
<ds-pagination
*ngIf="(groups | async)?.payload?.totalElements > 0"
[paginationOptions]="config"
[pageInfoState]="(groups | async)?.payload"
[collectionSize]="(groups | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true"
(pageChange)="onPageChange($event)">
<ds-themed-loading [showMessage]="false" *ngIf="!(groups | async)"></ds-themed-loading>
<div class="table-responsive">
<table id="groups" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col" class="align-middle">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.name' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.collectionOrCommunity' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let group of (groups | async)?.payload?.page">
<td class="align-middle">{{group.id}}</td>
<td class="align-middle">
<a (click)="groupsDataService.startEditingNewGroup(group)"
[routerLink]="[groupsDataService.getGroupEditPageRouterLink(group)]">
{{ dsoNameService.getName(group) }}
</a>
</td>
<td class="align-middle">{{ dsoNameService.getName(undefined) }}</td>
</tr>
</tbody>
</table>
</div>
<ds-pagination
*ngIf="(groups | async)?.payload?.totalElements > 0"
[paginationOptions]="config"
[collectionSize]="(groups | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true"
(pageChange)="onPageChange($event)">
</ds-pagination>
<div class="table-responsive">
<table id="groups" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col" class="align-middle">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.name' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.collectionOrCommunity' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let group of (groups | async)?.payload?.page">
<td class="align-middle">{{group.id}}</td>
<td class="align-middle">
<a (click)="groupsDataService.startEditingNewGroup(group)"
[routerLink]="[groupsDataService.getGroupEditPageRouterLink(group)]">
{{ dsoNameService.getName(group) }}
</a>
</td>
<td class="align-middle">
{{ dsoNameService.getName((group.object | async)?.payload) }}
</td>
</tr>
</tbody>
</table>
</div>
<div *ngIf="(groups | async)?.payload?.totalElements == 0" class="alert alert-info w-100 mb-2" role="alert">
<div>{{messagePrefix + '.memberOfNoGroups' | translate}}</div>
<div>
<button [routerLink]="[groupsDataService.getGroupRegistryRouterLink()]"
class="btn btn-primary">{{messagePrefix + '.goToGroups' | translate}}</button>
</ds-pagination>
<div *ngIf="(groups | async)?.payload?.totalElements == 0" class="alert alert-info w-100 mb-2" role="alert">
<div>{{messagePrefix + '.memberOfNoGroups' | translate}}</div>
<div>
<button [routerLink]="[groupsDataService.getGroupRegistryRouterLink()]"
class="btn btn-primary">{{messagePrefix + '.goToGroups' | translate}}</button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,11 +1,11 @@
import { Observable, of as observableOf } from 'rxjs';
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
import { BrowserModule, By } from '@angular/platform-browser';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateModule } from '@ngx-translate/core';
import { buildPaginatedList, PaginatedList } from '../../../core/data/paginated-list.model';
import { RemoteData } from '../../../core/data/remote-data';
import { EPersonDataService } from '../../../core/eperson/eperson-data.service';
@@ -19,7 +19,6 @@ import { EPersonMock, EPersonMock2 } from '../../../shared/testing/eperson.mock'
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { getMockFormBuilderService } from '../../../shared/mocks/form-builder-service.mock';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { TranslateLoaderMock } from '../../../shared/mocks/translate-loader.mock';
import { AuthService } from '../../../core/auth/auth.service';
import { AuthServiceStub } from '../../../shared/testing/auth-service.stub';
import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service';
@@ -31,6 +30,12 @@ import { PaginationServiceStub } from '../../../shared/testing/pagination-servic
import { FindListOptions } from '../../../core/data/find-list-options.model';
import { ValidateEmailNotTaken } from './validators/email-taken.validator';
import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service';
import { FollowLinkConfig } from '../../../shared/utils/follow-link-config.model';
import { ActivatedRoute, Router } from '@angular/router';
import { RouterStub } from '../../../shared/testing/router.stub';
import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub';
import { RouterTestingModule } from '@angular/router/testing';
import {BtnDisabledDirective} from '../../../shared/btn-disabled.directive';
describe('EPersonFormComponent', () => {
let component: EPersonFormComponent;
@@ -43,6 +48,8 @@ describe('EPersonFormComponent', () => {
let authorizationService: AuthorizationDataService;
let groupsDataService: GroupDataService;
let epersonRegistrationService: EpersonRegistrationService;
let route: ActivatedRouteStub;
let router: RouterStub;
let paginationService;
@@ -53,9 +60,6 @@ describe('EPersonFormComponent', () => {
ePersonDataServiceStub = {
activeEPerson: null,
allEpeople: mockEPeople,
getEPeople(): Observable<RemoteData<PaginatedList<EPerson>>> {
return createSuccessfulRemoteDataObject$(buildPaginatedList(null, this.allEpeople));
},
getActiveEPerson(): Observable<EPerson> {
return observableOf(this.activeEPerson);
},
@@ -106,6 +110,9 @@ describe('EPersonFormComponent', () => {
},
getEPersonByEmail(email): Observable<RemoteData<EPerson>> {
return createSuccessfulRemoteDataObject$(null);
},
findById(_id: string, _useCachedVersionIfAvailable = true, _reRequestOnStale = true, ..._linksToFollow: FollowLinkConfig<EPerson>[]): Observable<RemoteData<EPerson>> {
return createSuccessfulRemoteDataObject$(null);
}
};
builderService = Object.assign(getMockFormBuilderService(),{
@@ -182,16 +189,14 @@ describe('EPersonFormComponent', () => {
});
paginationService = new PaginationServiceStub();
route = new ActivatedRouteStub();
router = new RouterStub();
TestBed.configureTestingModule({
imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock
}
}),
RouterTestingModule,
TranslateModule.forRoot(),
],
declarations: [EPersonFormComponent],
declarations: [EPersonFormComponent, BtnDisabledDirective],
providers: [
{ provide: EPersonDataService, useValue: ePersonDataServiceStub },
{ provide: GroupDataService, useValue: groupsDataService },
@@ -202,9 +207,11 @@ describe('EPersonFormComponent', () => {
{ provide: PaginationService, useValue: paginationService },
{ provide: RequestService, useValue: jasmine.createSpyObj('requestService', ['removeByHrefSubstring'])},
{ provide: EpersonRegistrationService, useValue: epersonRegistrationService },
{ provide: ActivatedRoute, useValue: route },
{ provide: Router, useValue: router },
EPeopleRegistryComponent
],
schemas: [NO_ERRORS_SCHEMA]
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}));
@@ -223,37 +230,13 @@ describe('EPersonFormComponent', () => {
});
describe('check form validation', () => {
let firstName;
let lastName;
let email;
let canLogIn;
let requireCertificate;
let canLogIn: boolean;
let requireCertificate: boolean;
let expected;
beforeEach(() => {
firstName = 'testName';
lastName = 'testLastName';
email = 'testEmail@test.com';
canLogIn = false;
requireCertificate = false;
expected = Object.assign(new EPerson(), {
metadata: {
'eperson.firstname': [
{
value: firstName
}
],
'eperson.lastname': [
{
value: lastName
},
],
},
email: email,
canLogIn: canLogIn,
requireCertificate: requireCertificate,
});
spyOn(component.submitForm, 'emit');
component.canLogIn.value = canLogIn;
component.requireCertificate.value = requireCertificate;
@@ -263,24 +246,18 @@ describe('EPersonFormComponent', () => {
fixture.detectChanges();
});
describe('firstName, lastName and email should be required', () => {
it('form should be invalid because the firstName is required', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.firstName.valid).toBeFalse();
expect(component.formGroup.controls.firstName.errors.required).toBeTrue();
});
}));
it('form should be invalid because the lastName is required', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.lastName.valid).toBeFalse();
expect(component.formGroup.controls.lastName.errors.required).toBeTrue();
});
}));
it('form should be invalid because the email is required', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.email.valid).toBeFalse();
expect(component.formGroup.controls.email.errors.required).toBeTrue();
});
}));
it('form should be invalid because the firstName is required', () => {
expect(component.formGroup.controls.firstName.valid).toBeFalse();
expect(component.formGroup.controls.firstName.errors.required).toBeTrue();
});
it('form should be invalid because the lastName is required', () => {
expect(component.formGroup.controls.lastName.valid).toBeFalse();
expect(component.formGroup.controls.lastName.errors.required).toBeTrue();
});
it('form should be invalid because the email is required', () => {
expect(component.formGroup.controls.email.valid).toBeFalse();
expect(component.formGroup.controls.email.errors.required).toBeTrue();
});
});
describe('after inserting information firstName,lastName and email not required', () => {
@@ -290,24 +267,18 @@ describe('EPersonFormComponent', () => {
component.formGroup.controls.email.setValue('test@test.com');
fixture.detectChanges();
});
it('firstName should be valid because the firstName is set', waitForAsync(() => {
fixture.whenStable().then(() => {
it('firstName should be valid because the firstName is set', () => {
expect(component.formGroup.controls.firstName.valid).toBeTrue();
expect(component.formGroup.controls.firstName.errors).toBeNull();
});
}));
it('lastName should be valid because the lastName is set', waitForAsync(() => {
fixture.whenStable().then(() => {
});
it('lastName should be valid because the lastName is set', () => {
expect(component.formGroup.controls.lastName.valid).toBeTrue();
expect(component.formGroup.controls.lastName.errors).toBeNull();
});
}));
it('email should be valid because the email is set', waitForAsync(() => {
fixture.whenStable().then(() => {
});
it('email should be valid because the email is set', () => {
expect(component.formGroup.controls.email.valid).toBeTrue();
expect(component.formGroup.controls.email.errors).toBeNull();
});
}));
});
});
@@ -316,12 +287,10 @@ describe('EPersonFormComponent', () => {
component.formGroup.controls.email.setValue('test@test');
fixture.detectChanges();
});
it('email should not be valid because the email pattern', waitForAsync(() => {
fixture.whenStable().then(() => {
it('email should not be valid because the email pattern', () => {
expect(component.formGroup.controls.email.valid).toBeFalse();
expect(component.formGroup.controls.email.errors.pattern).toBeTruthy();
});
}));
});
});
describe('after already utilized email', () => {
@@ -336,22 +305,18 @@ describe('EPersonFormComponent', () => {
fixture.detectChanges();
});
it('email should not be valid because email is already taken', waitForAsync(() => {
fixture.whenStable().then(() => {
it('email should not be valid because email is already taken', () => {
expect(component.formGroup.controls.email.valid).toBeFalse();
expect(component.formGroup.controls.email.errors.emailTaken).toBeTruthy();
});
}));
});
});
});
describe('when submitting the form', () => {
let firstName;
let lastName;
let email;
let canLogIn;
let canLogIn: boolean;
let requireCertificate;
let expected;
@@ -380,6 +345,7 @@ describe('EPersonFormComponent', () => {
requireCertificate: requireCertificate,
});
spyOn(component.submitForm, 'emit');
component.ngOnInit();
component.firstName.value = firstName;
component.lastName.value = lastName;
component.email.value = email;
@@ -393,11 +359,9 @@ describe('EPersonFormComponent', () => {
fixture.detectChanges();
});
it('should emit a new eperson using the correct values', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expected);
});
}));
it('should emit a new eperson using the correct values', () => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expected);
});
});
describe('with an active eperson', () => {
@@ -421,18 +385,24 @@ describe('EPersonFormComponent', () => {
email: email,
canLogIn: canLogIn,
requireCertificate: requireCertificate,
_links: undefined
_links: {
groups: {
href: '',
},
self: {
href: '',
},
},
});
spyOn(ePersonDataServiceStub, 'getActiveEPerson').and.returnValue(observableOf(expectedWithId));
component.ngOnInit();
component.onSubmit();
fixture.detectChanges();
});
it('should emit the existing eperson using the correct values', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId);
});
}));
it('should emit the existing eperson using the correct values', () => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId);
});
});
});
@@ -473,34 +443,31 @@ describe('EPersonFormComponent', () => {
});
describe('delete', () => {
let ePersonId;
let eperson: EPerson;
let modalService;
beforeEach(() => {
spyOn(authService, 'impersonate').and.callThrough();
ePersonId = 'testEPersonId';
eperson = EPersonMock;
component.epersonInitial = eperson;
component.canDelete$ = observableOf(true);
spyOn(component.epersonService, 'getActiveEPerson').and.returnValue(observableOf(eperson));
modalService = (component as any).modalService;
spyOn(modalService, 'open').and.returnValue(Object.assign({ componentInstance: Object.assign({ response: observableOf(true) }) }));
component.ngOnInit();
fixture.detectChanges();
});
it('the delete button should be active if the eperson can be deleted', () => {
it('the delete button should be visible if the ePerson can be deleted', () => {
const deleteButton = fixture.debugElement.query(By.css('.delete-button'));
expect(deleteButton.nativeElement.disabled).toBe(false);
expect(deleteButton).not.toBeNull();
});
it('the delete button should be disabled if the eperson cannot be deleted', () => {
it('the delete button should be hidden if the ePerson cannot be deleted', () => {
component.canDelete$ = observableOf(false);
fixture.detectChanges();
const deleteButton = fixture.debugElement.query(By.css('.delete-button'));
expect(deleteButton.nativeElement.disabled).toBe(true);
expect(deleteButton).toBeNull();
});
it('should call the epersonFormComponent delete when clicked on the button', () => {
@@ -515,7 +482,8 @@ describe('EPersonFormComponent', () => {
// ePersonDataServiceStub.activeEPerson = eperson;
spyOn(component.epersonService, 'deleteEPerson').and.returnValue(createSuccessfulRemoteDataObject$('No Content', 204));
const deleteButton = fixture.debugElement.query(By.css('.delete-button'));
expect(deleteButton.nativeElement.disabled).toBe(false);
expect(deleteButton.nativeElement.getAttribute('aria-disabled')).toBeNull();
expect(deleteButton.nativeElement.classList.contains('disabled')).toBeFalse();
deleteButton.triggerEventHandler('click', null);
fixture.detectChanges();
expect(component.epersonService.deleteEPerson).toHaveBeenCalledWith(eperson);

View File

@@ -38,6 +38,8 @@ import { Registration } from '../../../core/shared/registration.model';
import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service';
import { TYPE_REQUEST_FORGOT } from '../../../register-email-form/register-email-form.component';
import { DSONameService } from '../../../core/breadcrumbs/dso-name.service';
import { ActivatedRoute, Router } from '@angular/router';
import { getEPersonsRoute } from '../../access-control-routing-paths';
@Component({
selector: 'ds-eperson-form',
@@ -137,6 +139,11 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
*/
canImpersonate$: Observable<boolean>;
/**
* The current {@link EPerson}
*/
activeEPerson$: Observable<EPerson>;
/**
* List of subscriptions
*/
@@ -194,8 +201,14 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
public requestService: RequestService,
private epersonRegistrationService: EpersonRegistrationService,
public dsoNameService: DSONameService,
protected route: ActivatedRoute,
protected router: Router,
) {
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
}
ngOnInit() {
this.activeEPerson$ = this.epersonService.getActiveEPerson();
this.subs.push(this.activeEPerson$.subscribe((eperson: EPerson) => {
this.epersonInitial = eperson;
if (hasValue(eperson)) {
this.isImpersonated = this.authService.isImpersonatingUser(eperson.id);
@@ -203,9 +216,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
this.submitLabel = 'form.submit';
}
}));
}
ngOnInit() {
this.initialisePage();
}
@@ -213,124 +223,117 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
* This method will initialise the page
*/
initialisePage() {
observableCombineLatest([
this.translateService.get(`${this.messagePrefix}.firstName`),
this.translateService.get(`${this.messagePrefix}.lastName`),
this.translateService.get(`${this.messagePrefix}.email`),
this.translateService.get(`${this.messagePrefix}.canLogIn`),
this.translateService.get(`${this.messagePrefix}.requireCertificate`),
this.translateService.get(`${this.messagePrefix}.emailHint`),
]).subscribe(([firstName, lastName, email, canLogIn, requireCertificate, emailHint]) => {
this.firstName = new DynamicInputModel({
id: 'firstName',
label: firstName,
name: 'firstName',
validators: {
required: null,
},
required: true,
});
this.lastName = new DynamicInputModel({
id: 'lastName',
label: lastName,
name: 'lastName',
validators: {
required: null,
},
required: true,
});
this.email = new DynamicInputModel({
id: 'email',
label: email,
name: 'email',
validators: {
required: null,
pattern: '^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$',
},
required: true,
errorMessages: {
emailTaken: 'error.validation.emailTaken',
pattern: 'error.validation.NotValidEmail'
},
hint: emailHint
});
this.canLogIn = new DynamicCheckboxModel(
{
id: 'canLogIn',
label: canLogIn,
name: 'canLogIn',
value: (this.epersonInitial != null ? this.epersonInitial.canLogIn : true)
});
this.requireCertificate = new DynamicCheckboxModel(
{
id: 'requireCertificate',
label: requireCertificate,
name: 'requireCertificate',
value: (this.epersonInitial != null ? this.epersonInitial.requireCertificate : false)
});
this.formModel = [
this.firstName,
this.lastName,
this.email,
this.canLogIn,
this.requireCertificate,
];
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
if (eperson != null) {
this.groups = this.groupsDataService.findListByHref(eperson._links.groups.href, {
currentPage: 1,
elementsPerPage: this.config.pageSize
});
}
this.formGroup.patchValue({
firstName: eperson != null ? eperson.firstMetadataValue('eperson.firstname') : '',
lastName: eperson != null ? eperson.firstMetadataValue('eperson.lastname') : '',
email: eperson != null ? eperson.email : '',
canLogIn: eperson != null ? eperson.canLogIn : true,
requireCertificate: eperson != null ? eperson.requireCertificate : false
});
if (eperson === null && !!this.formGroup.controls.email) {
this.formGroup.controls.email.setAsyncValidators(ValidateEmailNotTaken.createValidator(this.epersonService));
this.emailValueChangeSubscribe = this.email.valueChanges.pipe(debounceTime(300)).subscribe(() => {
this.changeDetectorRef.detectChanges();
});
}
if (this.route.snapshot.params.id) {
this.subs.push(this.epersonService.findById(this.route.snapshot.params.id).subscribe((ePersonRD: RemoteData<EPerson>) => {
this.epersonService.editEPerson(ePersonRD.payload);
}));
const activeEPerson$ = this.epersonService.getActiveEPerson();
this.groups = activeEPerson$.pipe(
switchMap((eperson) => {
return observableCombineLatest([observableOf(eperson), this.paginationService.getFindListOptions(this.config.id, {
currentPage: 1,
elementsPerPage: this.config.pageSize
})]);
}),
switchMap(([eperson, findListOptions]) => {
if (eperson != null) {
return this.groupsDataService.findListByHref(eperson._links.groups.href, findListOptions, true, true, followLink('object'));
}
return observableOf(undefined);
})
);
this.canImpersonate$ = activeEPerson$.pipe(
switchMap((eperson) => {
if (hasValue(eperson)) {
return this.authorizationService.isAuthorized(FeatureID.LoginOnBehalfOf, eperson.self);
} else {
return observableOf(false);
}
})
);
this.canDelete$ = activeEPerson$.pipe(
switchMap((eperson) => this.authorizationService.isAuthorized(FeatureID.CanDelete, hasValue(eperson) ? eperson.self : undefined))
);
this.canReset$ = observableOf(true);
}
this.firstName = new DynamicInputModel({
id: 'firstName',
label: this.translateService.instant(`${this.messagePrefix}.firstName`),
name: 'firstName',
validators: {
required: null,
},
required: true,
});
this.lastName = new DynamicInputModel({
id: 'lastName',
label: this.translateService.instant(`${this.messagePrefix}.lastName`),
name: 'lastName',
validators: {
required: null,
},
required: true,
});
this.email = new DynamicInputModel({
id: 'email',
label: this.translateService.instant(`${this.messagePrefix}.email`),
name: 'email',
validators: {
required: null,
pattern: '^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$',
},
required: true,
errorMessages: {
emailTaken: 'error.validation.emailTaken',
pattern: 'error.validation.NotValidEmail'
},
hint: this.translateService.instant(`${this.messagePrefix}.emailHint`),
});
this.canLogIn = new DynamicCheckboxModel(
{
id: 'canLogIn',
label: this.translateService.instant(`${this.messagePrefix}.canLogIn`),
name: 'canLogIn',
value: (this.epersonInitial != null ? this.epersonInitial.canLogIn : true)
});
this.requireCertificate = new DynamicCheckboxModel(
{
id: 'requireCertificate',
label: this.translateService.instant(`${this.messagePrefix}.requireCertificate`),
name: 'requireCertificate',
value: (this.epersonInitial != null ? this.epersonInitial.requireCertificate : false)
});
this.formModel = [
this.firstName,
this.lastName,
this.email,
this.canLogIn,
this.requireCertificate,
];
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
this.subs.push(this.activeEPerson$.subscribe((eperson: EPerson) => {
if (eperson != null) {
this.groups = this.groupsDataService.findListByHref(eperson._links.groups.href, {
currentPage: 1,
elementsPerPage: this.config.pageSize
}, undefined, undefined, followLink('object'));
}
this.formGroup.patchValue({
firstName: eperson != null ? eperson.firstMetadataValue('eperson.firstname') : '',
lastName: eperson != null ? eperson.firstMetadataValue('eperson.lastname') : '',
email: eperson != null ? eperson.email : '',
canLogIn: eperson != null ? eperson.canLogIn : true,
requireCertificate: eperson != null ? eperson.requireCertificate : false
});
if (eperson === null && !!this.formGroup.controls.email) {
this.formGroup.controls.email.setAsyncValidators(ValidateEmailNotTaken.createValidator(this.epersonService));
this.emailValueChangeSubscribe = this.email.valueChanges.pipe(debounceTime(300)).subscribe(() => {
this.changeDetectorRef.detectChanges();
});
}
}));
this.groups = this.activeEPerson$.pipe(
switchMap((eperson) => {
return observableCombineLatest([observableOf(eperson), this.paginationService.getFindListOptions(this.config.id, {
currentPage: 1,
elementsPerPage: this.config.pageSize
})]);
}),
switchMap(([eperson, findListOptions]) => {
if (eperson != null) {
return this.groupsDataService.findListByHref(eperson._links.groups.href, findListOptions, true, true, followLink('object'));
}
return observableOf(undefined);
})
);
this.canImpersonate$ = this.activeEPerson$.pipe(
switchMap((eperson) => {
if (hasValue(eperson)) {
return this.authorizationService.isAuthorized(FeatureID.LoginOnBehalfOf, eperson.self);
} else {
return observableOf(false);
}
})
);
this.canDelete$ = this.activeEPerson$.pipe(
switchMap((eperson) => this.authorizationService.isAuthorized(FeatureID.CanDelete, hasValue(eperson) ? eperson.self : undefined))
);
this.canReset$ = observableOf(true);
}
/**
@@ -339,6 +342,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
onCancel() {
this.epersonService.cancelEditEPerson();
this.cancelForm.emit();
void this.router.navigate([getEPersonsRoute()]);
}
/**
@@ -348,7 +352,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
* Emit the updated/created eperson using the EventEmitter submitForm
*/
onSubmit() {
this.epersonService.getActiveEPerson().pipe(take(1)).subscribe(
this.activeEPerson$.pipe(take(1)).subscribe(
(ePerson: EPerson) => {
const values = {
metadata: {
@@ -390,6 +394,8 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.created.success', { name: this.dsoNameService.getName(ePersonToCreate) }));
this.submitForm.emit(ePersonToCreate);
this.epersonService.clearEPersonRequests();
void this.router.navigateByUrl(getEPersonsRoute());
} else {
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.created.failure', { name: this.dsoNameService.getName(ePersonToCreate) }));
this.cancelForm.emit();
@@ -429,6 +435,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.edited.success', { name: this.dsoNameService.getName(editedEperson) }));
this.submitForm.emit(editedEperson);
void this.router.navigateByUrl(getEPersonsRoute());
} else {
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.edited.failure', { name: this.dsoNameService.getName(editedEperson) }));
this.cancelForm.emit();
@@ -464,7 +471,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
* It'll either show a success or error message depending on whether the delete was successful or not.
*/
delete(): void {
this.epersonService.getActiveEPerson().pipe(
this.activeEPerson$.pipe(
take(1),
switchMap((eperson: EPerson) => {
const modalRef = this.modalService.open(ConfirmationModalComponent);
@@ -495,6 +502,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
).subscribe(({ restResponse, eperson }: { restResponse: RemoteData<NoContent> | null, eperson: EPerson }) => {
if (restResponse?.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) }));
void this.router.navigate([getEPersonsRoute()]);
} else {
this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${eperson?.id} with code: ${restResponse?.statusCode} and message: ${restResponse?.errorMessage}`);
}
@@ -541,16 +549,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
}
}
/**
* This method will ensure that the page gets reset and that the cache is cleared
*/
reset() {
this.epersonService.getActiveEPerson().pipe(take(1)).subscribe((eperson: EPerson) => {
this.requestService.removeByHrefSubstring(eperson.self);
});
this.initialisePage();
}
/**
* Checks for the given ePerson if there is already an ePerson in the system with that email
* and shows notification if this is the case
@@ -577,7 +575,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
* Update the list of groups by fetching it from the rest api or cache
*/
private updateGroups(options) {
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
this.subs.push(this.activeEPerson$.subscribe((eperson: EPerson) => {
this.groups = this.groupsDataService.findListByHref(eperson._links.groups.href, options);
}));
}

View File

@@ -0,0 +1,53 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { EPerson } from '../../core/eperson/models/eperson.model';
import { RemoteData } from '../../core/data/remote-data';
import { getFirstCompletedRemoteData } from '../../core/shared/operators';
import { ResolvedAction } from '../../core/resolving/resolver.actions';
import { EPersonDataService } from '../../core/eperson/eperson-data.service';
import { Store } from '@ngrx/store';
import { followLink, FollowLinkConfig } from '../../shared/utils/follow-link-config.model';
export const EPERSON_EDIT_FOLLOW_LINKS: FollowLinkConfig<EPerson>[] = [
followLink('groups'),
];
/**
* This class represents a resolver that requests a specific {@link EPerson} before the route is activated
*/
@Injectable({
providedIn: 'root',
})
export class EPersonResolver implements Resolve<RemoteData<EPerson>> {
constructor(
protected ePersonService: EPersonDataService,
protected store: Store<any>,
) {
}
/**
* Method for resolving a {@link EPerson} based on the parameters in the current route
* @param {ActivatedRouteSnapshot} route The current ActivatedRouteSnapshot
* @param {RouterStateSnapshot} state The current RouterStateSnapshot
* @returns `Observable<<RemoteData<EPerson>>` Emits the found {@link EPerson} based on the parameters in the current
* route, or an error if something went wrong
*/
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<RemoteData<EPerson>> {
const ePersonRD$: Observable<RemoteData<EPerson>> = this.ePersonService.findById(route.params.id,
true,
false,
...EPERSON_EDIT_FOLLOW_LINKS,
).pipe(
getFirstCompletedRemoteData(),
);
ePersonRD$.subscribe((ePersonRD: RemoteData<EPerson>) => {
this.store.dispatch(new ResolvedAction(state.url, ePersonRD.payload));
});
return ePersonRD$;
}
}

View File

@@ -2,14 +2,14 @@
<div class="group-form row">
<div class="col-12">
<div *ngIf="groupDataService.getActiveGroup() | async; then editheader; else createHeader"></div>
<div *ngIf="activeGroup$ | async; then editHeader; else createHeader"></div>
<ng-template #createHeader>
<h2 class="border-bottom pb-2">{{messagePrefix + '.head.create' | translate}}</h2>
<h1 class="border-bottom pb-2">{{messagePrefix + '.head.create' | translate}}</h1>
</ng-template>
<ng-template #editheader>
<h2 class="border-bottom pb-2">
<ng-template #editHeader>
<h1 class="border-bottom pb-2">
<span
*dsContextHelp="{
content: 'admin.access-control.groups.form.tooltip.editGroupPage',
@@ -20,14 +20,18 @@
>
{{messagePrefix + '.head.edit' | translate}}
</span>
</h2>
</h1>
</ng-template>
<ds-alert *ngIf="groupBeingEdited?.permanent" [type]="AlertTypeEnum.Warning"
[content]="messagePrefix + '.alert.permanent'"></ds-alert>
<ds-alert *ngIf="!(canEdit$ | async) && (groupDataService.getActiveGroup() | async)" [type]="AlertTypeEnum.Warning"
[content]="(messagePrefix + '.alert.workflowGroup' | translate:{ name: dsoNameService.getName((getLinkedDSO(groupBeingEdited) | async)?.payload), comcol: (getLinkedDSO(groupBeingEdited) | async)?.payload?.type, comcolEditRolesRoute: (getLinkedEditRolesRoute(groupBeingEdited) | async) })">
</ds-alert>
<ng-container *ngIf="(activeGroup$ | async) as groupBeingEdited">
<ds-alert *ngIf="groupBeingEdited?.permanent" [type]="AlertType.Warning"
[content]="messagePrefix + '.alert.permanent'"></ds-alert>
<ng-container *ngIf="(activeGroupLinkedDSO$ | async) as activeGroupLinkedDSO">
<ds-alert *ngIf="!(canEdit$ | async)" [type]="AlertType.Warning"
[content]="(messagePrefix + '.alert.workflowGroup' | translate:{ name: dsoNameService.getName(activeGroupLinkedDSO), comcol: activeGroupLinkedDSO.type, comcolEditRolesRoute: (linkedEditRolesRoute$ | async) })">
</ds-alert>
</ng-container>
</ng-container>
<ds-form [formId]="formId"
[formModel]="formModel"
@@ -36,26 +40,24 @@
[displayCancel]="false"
(submitForm)="onSubmit()">
<div before class="btn-group">
<button (click)="onCancel()"
<button (click)="onCancel()" type="button"
class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}</button>
</div>
<div after *ngIf="groupBeingEdited != null" class="btn-group">
<button class="btn btn-danger delete-button" [disabled]="!(canEdit$ | async) || groupBeingEdited.permanent"
(click)="delete()">
<div after *ngIf="(canEdit$ | async) && !(activeGroup$ | async)?.permanent" class="btn-group">
<button (click)="delete()" class="btn btn-danger delete-button" type="button">
<i class="fa fa-trash"></i> {{ messagePrefix + '.actions.delete' | translate}}
</button>
</div>
</ds-form>
<div class="mb-5">
<ds-members-list *ngIf="groupBeingEdited != null"
[messagePrefix]="messagePrefix + '.members-list'"></ds-members-list>
</div>
<ds-subgroups-list *ngIf="groupBeingEdited != null"
[messagePrefix]="messagePrefix + '.subgroups-list'"></ds-subgroups-list>
<ng-container *ngIf="(activeGroup$ | async) as groupBeingEdited">
<div class="mb-5">
<ds-members-list *ngIf="groupBeingEdited != null"
[messagePrefix]="messagePrefix + '.members-list'"></ds-members-list>
</div>
<ds-subgroups-list *ngIf="groupBeingEdited != null"
[messagePrefix]="messagePrefix + '.subgroups-list'"></ds-subgroups-list>
</ng-container>
</div>
</div>
</div>

View File

@@ -1,13 +1,13 @@
import { CommonModule } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
import { BrowserModule, By } from '@angular/platform-browser';
import { ActivatedRoute, Router } from '@angular/router';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { Store } from '@ngrx/store';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { TranslateModule } from '@ngx-translate/core';
import { Observable, of as observableOf } from 'rxjs';
import { RemoteDataBuildService } from '../../../core/cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../../core/cache/object-cache.service';
@@ -23,14 +23,13 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import { HALEndpointService } from '../../../core/shared/hal-endpoint.service';
import { PageInfo } from '../../../core/shared/page-info.model';
import { UUIDService } from '../../../core/shared/uuid.service';
import { XSRFService } from '../../../core/xsrf/xsrf.service';
import { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { GroupMock, GroupMock2 } from '../../../shared/testing/group-mock';
import { GroupFormComponent } from './group-form.component';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { getMockFormBuilderService } from '../../../shared/mocks/form-builder-service.mock';
import { getMockTranslateService } from '../../../shared/mocks/translate.service.mock';
import { TranslateLoaderMock } from '../../../shared/testing/translate-loader.mock';
import { RouterMock } from '../../../shared/mocks/router.mock';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { Operation } from 'fast-json-patch';
@@ -38,23 +37,26 @@ import { ValidateGroupExists } from './validators/group-exists.validator';
import { NoContent } from '../../../core/shared/NoContent.model';
import { DSONameService } from '../../../core/breadcrumbs/dso-name.service';
import { DSONameServiceMock } from '../../../shared/mocks/dso-name.service.mock';
import { ActivatedRouteStub } from '../../../shared/testing/active-router.stub';
import { routeServiceStub } from '../../../shared/testing/route-service.stub';
import { RouteService } from '../../../core/services/route.service';
describe('GroupFormComponent', () => {
let component: GroupFormComponent;
let fixture: ComponentFixture<GroupFormComponent>;
let translateService: TranslateService;
let builderService: FormBuilderService;
let ePersonDataServiceStub: any;
let groupsDataServiceStub: any;
let dsoDataServiceStub: any;
let authorizationService: AuthorizationDataService;
let notificationService: NotificationsServiceStub;
let router;
let router: RouterMock;
let route: ActivatedRouteStub;
let groups;
let groupName;
let groupDescription;
let expected;
let groups: Group[];
let groupName: string;
let groupDescription: string;
let expected: Group;
beforeEach(waitForAsync(() => {
groups = [GroupMock, GroupMock2];
@@ -69,6 +71,15 @@ describe('GroupFormComponent', () => {
}
],
},
object: createSuccessfulRemoteDataObject$(undefined),
_links: {
self: {
href: 'group-selflink',
},
object: {
href: 'group-objectlink',
}
},
});
ePersonDataServiceStub = {};
groupsDataServiceStub = {
@@ -105,7 +116,14 @@ describe('GroupFormComponent', () => {
create(group: Group): Observable<RemoteData<Group>> {
this.allGroups = [...this.allGroups, group];
this.createdGroup = Object.assign({}, group, {
_links: { self: { href: 'group-selflink' } }
_links: {
self: {
href: 'group-selflink',
},
object: {
href: 'group-objectlink',
},
},
});
return createSuccessfulRemoteDataObject$(this.createdGroup);
},
@@ -187,17 +205,13 @@ describe('GroupFormComponent', () => {
return typeof value === 'object' && value !== null;
}
});
translateService = getMockTranslateService();
router = new RouterMock();
route = new ActivatedRouteStub();
notificationService = new NotificationsServiceStub();
return TestBed.configureTestingModule({
imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock
}
}),
TranslateModule.forRoot(),
],
declarations: [GroupFormComponent],
providers: [
@@ -211,17 +225,16 @@ describe('GroupFormComponent', () => {
{ provide: HttpClient, useValue: {} },
{ provide: ObjectCacheService, useValue: {} },
{ provide: UUIDService, useValue: {} },
{ provide: XSRFService, useValue: {} },
{ provide: Store, useValue: {} },
{ provide: RemoteDataBuildService, useValue: {} },
{ provide: HALEndpointService, useValue: {} },
{
provide: ActivatedRoute,
useValue: { data: observableOf({ dso: { payload: {} } }), params: observableOf({}) }
},
{ provide: ActivatedRoute, useValue: route },
{ provide: Router, useValue: router },
{ provide: AuthorizationDataService, useValue: authorizationService },
{ provide: RouteService, useValue: routeServiceStub },
],
schemas: [NO_ERRORS_SCHEMA]
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();
}));
@@ -234,8 +247,8 @@ describe('GroupFormComponent', () => {
describe('when submitting the form', () => {
beforeEach(() => {
spyOn(component.submitForm, 'emit');
component.groupName.value = groupName;
component.groupDescription.value = groupDescription;
component.groupName.setValue(groupName);
component.groupDescription.setValue(groupDescription);
});
describe('without active Group', () => {
beforeEach(() => {
@@ -243,14 +256,22 @@ describe('GroupFormComponent', () => {
fixture.detectChanges();
});
it('should emit a new group using the correct values', (async () => {
await fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expected);
});
it('should emit a new group using the correct values', (() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(jasmine.objectContaining({
name: groupName,
metadata: {
'dc.description': [
{
value: groupDescription,
},
],
},
}));
}));
});
describe('with active Group', () => {
let expected2;
let expected2: Group;
beforeEach(() => {
expected2 = Object.assign(new Group(), {
name: 'newGroupName',
@@ -261,15 +282,24 @@ describe('GroupFormComponent', () => {
}
],
},
object: createSuccessfulRemoteDataObject$(undefined),
_links: {
self: {
href: 'group-selflink',
},
object: {
href: 'group-objectlink',
},
},
});
spyOn(groupsDataServiceStub, 'getActiveGroup').and.returnValue(observableOf(expected));
spyOn(groupsDataServiceStub, 'patch').and.returnValue(createSuccessfulRemoteDataObject$(expected2));
component.groupName.value = 'newGroupName';
component.onSubmit();
fixture.detectChanges();
component.ngOnInit();
});
it('should edit with name and description operations', () => {
component.groupName.setValue('newGroupName');
component.onSubmit();
const operations = [{
op: 'add',
path: '/metadata/dc.description',
@@ -283,9 +313,8 @@ describe('GroupFormComponent', () => {
});
it('should edit with description operations', () => {
component.groupName.value = null;
component.groupName.setValue(null);
component.onSubmit();
fixture.detectChanges();
const operations = [{
op: 'add',
path: '/metadata/dc.description',
@@ -295,9 +324,9 @@ describe('GroupFormComponent', () => {
});
it('should edit with name operations', () => {
component.groupDescription.value = null;
component.groupName.setValue('newGroupName');
component.groupDescription.setValue(null);
component.onSubmit();
fixture.detectChanges();
const operations = [{
op: 'replace',
path: '/name',
@@ -306,12 +335,13 @@ describe('GroupFormComponent', () => {
expect(groupsDataServiceStub.patch).toHaveBeenCalledWith(expected, operations);
});
it('should emit the existing group using the correct new values', (async () => {
await fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expected2);
});
}));
it('should emit the existing group using the correct new values', () => {
component.onSubmit();
expect(component.submitForm.emit).toHaveBeenCalledWith(expected2);
});
it('should emit success notification', () => {
component.onSubmit();
expect(notificationService.success).toHaveBeenCalled();
});
});
@@ -326,11 +356,8 @@ describe('GroupFormComponent', () => {
describe('check form validation', () => {
let groupCommunity;
beforeEach(() => {
groupName = 'testName';
groupCommunity = 'testgroupCommunity';
groupDescription = 'testgroupDescription';
expected = Object.assign(new Group(), {
@@ -342,8 +369,17 @@ describe('GroupFormComponent', () => {
}
],
},
_links: {
self: {
href: 'group-selflink',
},
object: {
href: 'group-objectlink',
},
},
});
spyOn(component.submitForm, 'emit');
spyOn(dsoDataServiceStub, 'findByHref').and.returnValue(observableOf(expected));
fixture.detectChanges();
component.initialisePage();
@@ -393,21 +429,20 @@ describe('GroupFormComponent', () => {
});
describe('delete', () => {
let deleteButton;
beforeEach(() => {
component.initialisePage();
let deleteButton: HTMLButtonElement;
beforeEach(async () => {
spyOn(groupsDataServiceStub, 'delete').and.callThrough();
component.activeGroup$ = observableOf({
id: 'active-group',
permanent: false,
} as Group);
component.canEdit$ = observableOf(true);
component.groupBeingEdited = {
permanent: false
} as Group;
component.initialisePage();
fixture.detectChanges();
deleteButton = fixture.debugElement.query(By.css('.delete-button')).nativeElement;
spyOn(groupsDataServiceStub, 'delete').and.callThrough();
spyOn(groupsDataServiceStub, 'getActiveGroup').and.returnValue(observableOf({ id: 'active-group' }));
});
describe('if confirmed via modal', () => {

View File

@@ -1,5 +1,5 @@
import { Component, EventEmitter, HostListener, OnDestroy, OnInit, Output, ChangeDetectorRef } from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { UntypedFormGroup, AbstractControl } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import {
@@ -10,13 +10,11 @@ import {
} from '@ng-dynamic-forms/core';
import { TranslateService } from '@ngx-translate/core';
import {
ObservedValueOf,
combineLatest as observableCombineLatest,
Observable,
of as observableOf,
Subscription,
} from 'rxjs';
import { catchError, map, switchMap, take, filter, debounceTime } from 'rxjs/operators';
import { map, switchMap, take, debounceTime } from 'rxjs/operators';
import { getCollectionEditRolesRoute } from '../../../collection-page/collection-page-routing-paths';
import { getCommunityEditRolesRoute } from '../../../community-page/community-page-routing-paths';
import { DSpaceObjectDataService } from '../../../core/data/dspace-object-data.service';
@@ -25,19 +23,18 @@ import { FeatureID } from '../../../core/data/feature-authorization/feature-id';
import { PaginatedList } from '../../../core/data/paginated-list.model';
import { RemoteData } from '../../../core/data/remote-data';
import { RequestService } from '../../../core/data/request.service';
import { EPersonDataService } from '../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../core/eperson/group-data.service';
import { Group } from '../../../core/eperson/models/group.model';
import { Collection } from '../../../core/shared/collection.model';
import { Community } from '../../../core/shared/community.model';
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import {
getAllCompletedRemoteData,
getRemoteDataPayload,
getFirstSucceededRemoteData,
getFirstCompletedRemoteData,
getFirstSucceededRemoteDataPayload
} from '../../../core/shared/operators';
import { AlertType } from '../../../shared/alert/aletr-type';
import { AlertType } from '../../../shared/alert/alert-type';
import { ConfirmationModalComponent } from '../../../shared/confirmation-modal/confirmation-modal.component';
import { hasValue, isNotEmpty, hasValueOperator } from '../../../shared/empty.util';
import { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
@@ -48,6 +45,8 @@ import { Operation } from 'fast-json-patch';
import { ValidateGroupExists } from './validators/group-exists.validator';
import { DSONameService } from '../../../core/breadcrumbs/dso-name.service';
import { environment } from '../../../../environments/environment';
import { getGroupEditRoute, getGroupsRoute } from '../../access-control-routing-paths';
import { RouteService } from '../../../core/services/route.service';
@Component({
selector: 'ds-group-form',
@@ -68,9 +67,9 @@ export class GroupFormComponent implements OnInit, OnDestroy {
/**
* Dynamic models for the inputs of form
*/
groupName: DynamicInputModel;
groupCommunity: DynamicInputModel;
groupDescription: DynamicTextAreaModel;
groupName: AbstractControl;
groupCommunity: AbstractControl;
groupDescription: AbstractControl;
/**
* A list of all dynamic input models
@@ -113,21 +112,30 @@ export class GroupFormComponent implements OnInit, OnDestroy {
*/
subs: Subscription[] = [];
/**
* Group currently being edited
*/
groupBeingEdited: Group;
/**
* Observable whether or not the logged in user is allowed to delete the Group & doesn't have a linked object (community / collection linked to workspace group
*/
canEdit$: Observable<boolean>;
/**
* The AlertType enumeration
* @type {AlertType}
* The current {@link Group}
*/
public AlertTypeEnum = AlertType;
activeGroup$: Observable<Group>;
/**
* The current {@link Group}'s linked {@link Community}/{@link Collection}
*/
activeGroupLinkedDSO$: Observable<DSpaceObject>;
/**
* Link to the current {@link Group}'s {@link Community}/{@link Collection} edit role tab
*/
linkedEditRolesRoute$: Observable<string>;
/**
* The AlertType enumeration
*/
public readonly AlertType = AlertType;
/**
* Subscription to email field value change
@@ -137,124 +145,122 @@ export class GroupFormComponent implements OnInit, OnDestroy {
constructor(
public groupDataService: GroupDataService,
private ePersonDataService: EPersonDataService,
private dSpaceObjectDataService: DSpaceObjectDataService,
private formBuilderService: FormBuilderService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private route: ActivatedRoute,
protected dSpaceObjectDataService: DSpaceObjectDataService,
protected formBuilderService: FormBuilderService,
protected translateService: TranslateService,
protected notificationsService: NotificationsService,
protected route: ActivatedRoute,
protected router: Router,
private authorizationService: AuthorizationDataService,
private modalService: NgbModal,
protected authorizationService: AuthorizationDataService,
protected modalService: NgbModal,
public requestService: RequestService,
protected changeDetectorRef: ChangeDetectorRef,
public dsoNameService: DSONameService,
protected routeService: RouteService,
) {
}
ngOnInit() {
ngOnInit(): void {
if (this.route.snapshot.params.groupId !== 'newGroup') {
this.setActiveGroup(this.route.snapshot.params.groupId);
}
this.activeGroup$ = this.groupDataService.getActiveGroup();
this.activeGroupLinkedDSO$ = this.getActiveGroupLinkedDSO();
this.linkedEditRolesRoute$ = this.getLinkedEditRolesRoute();
this.canEdit$ = this.activeGroupLinkedDSO$.pipe(
switchMap((dso: DSpaceObject) => {
if (hasValue(dso)) {
return [false];
} else {
return this.activeGroup$.pipe(
hasValueOperator(),
switchMap((group: Group) => this.authorizationService.isAuthorized(FeatureID.CanDelete, group.self)),
);
}
}),
);
this.initialisePage();
}
initialisePage() {
this.subs.push(this.route.params.subscribe((params) => {
if (params.groupId !== 'newGroup') {
this.setActiveGroup(params.groupId);
}
}));
this.canEdit$ = this.groupDataService.getActiveGroup().pipe(
hasValueOperator(),
switchMap((group: Group) => {
return observableCombineLatest(
this.authorizationService.isAuthorized(FeatureID.CanDelete, isNotEmpty(group) ? group.self : undefined),
this.hasLinkedDSO(group),
(isAuthorized: ObservedValueOf<Observable<boolean>>, hasLinkedDSO: ObservedValueOf<Observable<boolean>>) => {
return isAuthorized && !hasLinkedDSO;
});
const groupNameModel = new DynamicInputModel({
id: 'groupName',
label: this.translateService.instant(`${this.messagePrefix}.groupName`),
name: 'groupName',
validators: {
required: null,
},
required: true,
});
const groupCommunityModel = new DynamicInputModel({
id: 'groupCommunity',
label: this.translateService.instant(`${this.messagePrefix}.groupCommunity`),
name: 'groupCommunity',
required: false,
readOnly: true,
});
const groupDescriptionModel = new DynamicTextAreaModel({
id: 'groupDescription',
label: this.translateService.instant(`${this.messagePrefix}.groupDescription`),
name: 'groupDescription',
required: false,
spellCheck: environment.form.spellCheck,
});
this.formModel = [
groupNameModel,
groupDescriptionModel,
];
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
this.groupName = this.formGroup.get('groupName');
this.groupDescription = this.formGroup.get('groupDescription');
if (hasValue(this.groupName)) {
this.groupName.setAsyncValidators(ValidateGroupExists.createValidator(this.groupDataService));
this.groupNameValueChangeSubscribe = this.groupName.valueChanges.pipe(debounceTime(300)).subscribe(() => {
this.changeDetectorRef.detectChanges();
});
}
this.subs.push(
observableCombineLatest([
this.activeGroup$,
this.canEdit$,
this.activeGroupLinkedDSO$,
]).subscribe(([activeGroup, canEdit, linkedObject]) => {
if (activeGroup != null) {
// Disable group name exists validator
this.formGroup.controls.groupName.clearAsyncValidators();
if (isNotEmpty(linkedObject?.name)) {
if (!this.formGroup.controls.groupCommunity) {
this.formBuilderService.insertFormGroupControl(1, this.formGroup, this.formModel, groupCommunityModel);
this.groupDescription = this.formGroup.get('groupCommunity');
}
this.formGroup.patchValue({
groupName: activeGroup.name,
groupCommunity: linkedObject?.name ?? '',
groupDescription: activeGroup.firstMetadataValue('dc.description'),
});
} else {
this.formModel = [
groupNameModel,
groupDescriptionModel,
];
this.formGroup.patchValue({
groupName: activeGroup.name,
groupDescription: activeGroup.firstMetadataValue('dc.description'),
});
}
if (!canEdit || activeGroup.permanent) {
this.formGroup.disable();
} else {
this.formGroup.enable();
}
}
})
);
observableCombineLatest(
this.translateService.get(`${this.messagePrefix}.groupName`),
this.translateService.get(`${this.messagePrefix}.groupCommunity`),
this.translateService.get(`${this.messagePrefix}.groupDescription`)
).subscribe(([groupName, groupCommunity, groupDescription]) => {
this.groupName = new DynamicInputModel({
id: 'groupName',
label: groupName,
name: 'groupName',
validators: {
required: null,
},
required: true,
});
this.groupCommunity = new DynamicInputModel({
id: 'groupCommunity',
label: groupCommunity,
name: 'groupCommunity',
required: false,
readOnly: true,
});
this.groupDescription = new DynamicTextAreaModel({
id: 'groupDescription',
label: groupDescription,
name: 'groupDescription',
required: false,
spellCheck: environment.form.spellCheck,
});
this.formModel = [
this.groupName,
this.groupDescription,
];
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
if (!!this.formGroup.controls.groupName) {
this.formGroup.controls.groupName.setAsyncValidators(ValidateGroupExists.createValidator(this.groupDataService));
this.groupNameValueChangeSubscribe = this.groupName.valueChanges.pipe(debounceTime(300)).subscribe(() => {
this.changeDetectorRef.detectChanges();
});
}
this.subs.push(
observableCombineLatest(
this.groupDataService.getActiveGroup(),
this.canEdit$,
this.groupDataService.getActiveGroup()
.pipe(filter((activeGroup) => hasValue(activeGroup)),switchMap((activeGroup) => this.getLinkedDSO(activeGroup).pipe(getFirstSucceededRemoteDataPayload())))
).subscribe(([activeGroup, canEdit, linkedObject]) => {
if (activeGroup != null) {
// Disable group name exists validator
this.formGroup.controls.groupName.clearAsyncValidators();
this.groupBeingEdited = activeGroup;
if (linkedObject?.name) {
this.formBuilderService.insertFormGroupControl(1, this.formGroup, this.formModel, this.groupCommunity);
this.formGroup.patchValue({
groupName: activeGroup.name,
groupCommunity: linkedObject?.name ?? '',
groupDescription: activeGroup.firstMetadataValue('dc.description'),
});
} else {
this.formModel = [
this.groupName,
this.groupDescription,
];
this.formGroup.patchValue({
groupName: activeGroup.name,
groupDescription: activeGroup.firstMetadataValue('dc.description'),
});
}
setTimeout(() => {
if (!canEdit || activeGroup.permanent) {
this.formGroup.disable();
}
}, 200);
}
})
);
});
}
/**
@@ -263,7 +269,11 @@ export class GroupFormComponent implements OnInit, OnDestroy {
onCancel() {
this.groupDataService.cancelEditGroup();
this.cancelForm.emit();
this.router.navigate([this.groupDataService.getGroupRegistryRouterLink()]);
this.routeService.getPreviousUrl().pipe(
take(1),
).subscribe((previousURL) => {
void this.router.navigate([previousURL && previousURL.trim().length > 0 ? previousURL : getGroupsRoute()]);
});
}
/**
@@ -273,25 +283,22 @@ export class GroupFormComponent implements OnInit, OnDestroy {
* Emit the updated/created eperson using the EventEmitter submitForm
*/
onSubmit() {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe(
(group: Group) => {
const values = {
this.activeGroup$.pipe(take(1)).subscribe((group: Group) => {
if (group === null) {
this.createNewGroup({
name: this.groupName.value,
metadata: {
'dc.description': [
{
value: this.groupDescription.value
}
]
value: this.groupDescription.value,
},
],
},
};
if (group === null) {
this.createNewGroup(values);
} else {
this.editGroup(group);
}
});
} else {
this.editGroup(group);
}
);
});
}
/**
@@ -310,7 +317,7 @@ export class GroupFormComponent implements OnInit, OnDestroy {
const groupSelfLink = rd.payload._links.self.href;
this.setActiveGroupWithLink(groupSelfLink);
this.groupDataService.clearGroupsRequests();
this.router.navigateByUrl(this.groupDataService.getGroupEditPageRouterLinkWithID(rd.payload.uuid));
void this.router.navigateByUrl(getGroupEditRoute(rd.payload.uuid));
}
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.created.failure', { name: groupToCreate.name }));
@@ -397,7 +404,7 @@ export class GroupFormComponent implements OnInit, OnDestroy {
* @param groupSelfLink SelfLink of group to set as active
*/
setActiveGroupWithLink(groupSelfLink: string) {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => {
this.activeGroup$.pipe(take(1)).subscribe((activeGroup: Group) => {
if (activeGroup === null) {
this.groupDataService.cancelEditGroup();
this.groupDataService.findByHref(groupSelfLink, false, false, followLink('subgroups'), followLink('epersons'), followLink('object'))
@@ -416,7 +423,7 @@ export class GroupFormComponent implements OnInit, OnDestroy {
* It'll either show a success or error message depending on whether the delete was successful or not.
*/
delete() {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((group: Group) => {
this.activeGroup$.pipe(take(1)).subscribe((group: Group) => {
const modalRef = this.modalService.open(ConfirmationModalComponent);
modalRef.componentInstance.dso = group;
modalRef.componentInstance.headerLabel = this.messagePrefix + '.delete-group.modal.header';
@@ -460,52 +467,38 @@ export class GroupFormComponent implements OnInit, OnDestroy {
}
/**
* Check if group has a linked object (community or collection linked to a workflow group)
* @param group
* Get the active {@link Group}'s linked object if it has one ({@link Community} or {@link Collection} linked to a
* workflow group)
*/
hasLinkedDSO(group: Group): Observable<boolean> {
if (hasValue(group) && hasValue(group._links.object.href)) {
return this.getLinkedDSO(group).pipe(
map((rd: RemoteData<DSpaceObject>) => {
return hasValue(rd) && hasValue(rd.payload);
}),
catchError(() => observableOf(false)),
);
}
getActiveGroupLinkedDSO(): Observable<DSpaceObject> {
return this.activeGroup$.pipe(
hasValueOperator(),
switchMap((group: Group) => {
if (group.object === undefined) {
return this.dSpaceObjectDataService.findByHref(group._links.object.href);
}
return group.object;
}),
getAllCompletedRemoteData(),
getRemoteDataPayload(),
);
}
/**
* Get group's linked object if it has one (community or collection linked to a workflow group)
* @param group
* Get the route to the edit roles tab of the active {@link Group}'s linked object (community or collection linked
* to a workflow group) if it has one
*/
getLinkedDSO(group: Group): Observable<RemoteData<DSpaceObject>> {
if (hasValue(group) && hasValue(group._links.object.href)) {
if (group.object === undefined) {
return this.dSpaceObjectDataService.findByHref(group._links.object.href);
}
return group.object;
}
}
/**
* Get the route to the edit roles tab of the group's linked object (community or collection linked to a workflow group) if it has one
* @param group
*/
getLinkedEditRolesRoute(group: Group): Observable<string> {
if (hasValue(group) && hasValue(group._links.object.href)) {
return this.getLinkedDSO(group).pipe(
map((rd: RemoteData<DSpaceObject>) => {
if (hasValue(rd) && hasValue(rd.payload)) {
const dso = rd.payload;
switch ((dso as any).type) {
case Community.type.value:
return getCommunityEditRolesRoute(rd.payload.id);
case Collection.type.value:
return getCollectionEditRolesRoute(rd.payload.id);
}
}
})
);
}
getLinkedEditRolesRoute(): Observable<string> {
return this.activeGroupLinkedDSO$.pipe(
hasValueOperator(),
map((dso: DSpaceObject) => {
switch ((dso as any).type) {
case Community.type.value:
return getCommunityEditRolesRoute(dso.id);
case Collection.type.value:
return getCollectionEditRolesRoute(dso.id);
}
}),
);
}
}

View File

@@ -1,110 +1,11 @@
<ng-container>
<h3 class="border-bottom pb-2">{{messagePrefix + '.head' | translate}}</h3>
<h2 class="border-bottom pb-2">{{messagePrefix + '.head' | translate}}</h2>
<h4 id="search" class="border-bottom pb-2">
<span
*dsContextHelp="{
content: 'admin.access-control.groups.form.tooltip.editGroup.addEpeople',
id: 'edit-group-add-epeople',
iconPlacement: 'right',
tooltipPlacement: ['top', 'right', 'bottom']
}"
>
{{messagePrefix + '.search.head' | translate}}
</span>
</h4>
<h3>{{messagePrefix + '.headMembers' | translate}}</h3>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div>
<select name="scope" id="scope" formControlName="scope" class="form-control" aria-label="Search scope">
<option value="metadata">{{messagePrefix + '.search.scope.metadata' | translate}}</option>
<option value="email">{{messagePrefix + '.search.scope.email' | translate}}</option>
</select>
</div>
<div class="flex-grow-1 mr-3 ml-3">
<div class="form-group input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit" class="search-button btn btn-primary">
<i class="fas fa-search"></i> {{ messagePrefix + '.search.button' | translate }}</button>
</span>
</div>
</div>
<div>
<button (click)="clearFormAndResetResult();"
class="btn btn-secondary">{{messagePrefix + '.button.see-all' | translate}}</button>
</div>
</form>
<ds-pagination *ngIf="(ePeopleSearchDtos | async)?.totalElements > 0"
[paginationOptions]="configSearch"
[pageInfoState]="(ePeopleSearchDtos | async)"
[collectionSize]="(ePeopleSearchDtos | async)?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
<div class="table-responsive">
<table id="epersonsSearch" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col" class="align-middle">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.name' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.identity' | translate}}</th>
<th class="align-middle">{{messagePrefix + '.table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let ePerson of (ePeopleSearchDtos | async)?.page">
<td class="align-middle">{{ePerson.eperson.id}}</td>
<td class="align-middle">
<a (click)="ePersonDataService.startEditingNewEPerson(ePerson.eperson)"
[routerLink]="[ePersonDataService.getEPeoplePageRouterLink()]">
{{ dsoNameService.getName(ePerson.eperson) }}
</a>
</td>
<td class="align-middle">
{{messagePrefix + '.table.email' | translate}}: {{ ePerson.eperson.email ? ePerson.eperson.email : '-' }}<br/>
{{messagePrefix + '.table.netid' | translate}}: {{ ePerson.eperson.netid ? ePerson.eperson.netid : '-' }}
</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button *ngIf="ePerson.memberOfGroup"
(click)="deleteMemberFromGroup(ePerson)"
[disabled]="actionConfig.remove.disabled"
[ngClass]="['btn btn-sm', actionConfig.remove.css]"
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: { name: dsoNameService.getName(ePerson.eperson) } }}">
<i [ngClass]="actionConfig.remove.icon"></i>
</button>
<button *ngIf="!ePerson.memberOfGroup"
(click)="addMemberToGroup(ePerson)"
[disabled]="actionConfig.add.disabled"
[ngClass]="['btn btn-sm', actionConfig.add.css]"
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(ePerson.eperson) } }}">
<i [ngClass]="actionConfig.add.icon"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(ePeopleSearchDtos | async)?.totalElements == 0 && searchDone"
class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-items' | translate}}
</div>
<h4>{{messagePrefix + '.headMembers' | translate}}</h4>
<ds-pagination *ngIf="(ePeopleMembersOfGroupDtos | async)?.totalElements > 0"
<ds-pagination *ngIf="(ePeopleMembersOfGroup | async)?.totalElements > 0"
[paginationOptions]="config"
[pageInfoState]="(ePeopleMembersOfGroupDtos | async)"
[collectionSize]="(ePeopleMembersOfGroupDtos | async)?.totalElements"
[collectionSize]="(ePeopleMembersOfGroup | async)?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
@@ -119,32 +20,103 @@
</tr>
</thead>
<tbody>
<tr *ngFor="let ePerson of (ePeopleMembersOfGroupDtos | async)?.page">
<td class="align-middle">{{ePerson.eperson.id}}</td>
<tr *ngFor="let eperson of (ePeopleMembersOfGroup | async)?.page">
<td class="align-middle">{{eperson.id}}</td>
<td class="align-middle">
<a (click)="ePersonDataService.startEditingNewEPerson(ePerson.eperson)"
[routerLink]="[ePersonDataService.getEPeoplePageRouterLink()]">
{{ dsoNameService.getName(ePerson.eperson) }}
<a [routerLink]="getEPersonEditRoute(eperson.id)">
{{ dsoNameService.getName(eperson) }}
</a>
</td>
<td class="align-middle">
{{messagePrefix + '.table.email' | translate}}: {{ ePerson.eperson.email ? ePerson.eperson.email : '-' }}<br/>
{{messagePrefix + '.table.netid' | translate}}: {{ ePerson.eperson.netid ? ePerson.eperson.netid : '-' }}
{{messagePrefix + '.table.email' | translate}}: {{ eperson.email ? eperson.email : '-' }}<br/>
{{messagePrefix + '.table.netid' | translate}}: {{ eperson.netid ? eperson.netid : '-' }}
</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button *ngIf="ePerson.memberOfGroup"
(click)="deleteMemberFromGroup(ePerson)"
[disabled]="actionConfig.remove.disabled"
<button (click)="deleteMemberFromGroup(eperson)"
[dsBtnDisabled]="actionConfig.remove.disabled"
[ngClass]="['btn btn-sm', actionConfig.remove.css]"
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: { name: dsoNameService.getName(ePerson.eperson) } }}">
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: { name: dsoNameService.getName(eperson) } }}">
<i [ngClass]="actionConfig.remove.icon"></i>
</button>
<button *ngIf="!ePerson.memberOfGroup"
(click)="addMemberToGroup(ePerson)"
[disabled]="actionConfig.add.disabled"
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(ePeopleMembersOfGroup | async) == undefined || (ePeopleMembersOfGroup | async)?.totalElements == 0" class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-members-yet' | translate}}
</div>
<h3 id="search" class="border-bottom pb-2">
<span
*dsContextHelp="{
content: 'admin.access-control.groups.form.tooltip.editGroup.addEpeople',
id: 'edit-group-add-epeople',
iconPlacement: 'right',
tooltipPlacement: ['top', 'right', 'bottom']
}"
>
{{messagePrefix + '.search.head' | translate}}
</span>
</h3>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div class="flex-grow-1 mr-3">
<div class="form-group input-group mr-3">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit" class="search-button btn btn-primary">
<i class="fas fa-search"></i> {{ messagePrefix + '.search.button' | translate }}</button>
</span>
</div>
</div>
<div>
<button (click)="clearFormAndResetResult();"
class="btn btn-secondary">{{messagePrefix + '.button.see-all' | translate}}</button>
</div>
</form>
<ds-pagination *ngIf="(ePeopleSearch | async)?.totalElements > 0"
[paginationOptions]="configSearch"
[collectionSize]="(ePeopleSearch | async)?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
<div class="table-responsive">
<table id="epersonsSearch" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col" class="align-middle">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.name' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.identity' | translate}}</th>
<th class="align-middle">{{messagePrefix + '.table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let eperson of (ePeopleSearch | async)?.page">
<td class="align-middle">{{eperson.id}}</td>
<td class="align-middle">
<a [routerLink]="getEPersonEditRoute(eperson.id)">
{{ dsoNameService.getName(eperson) }}
</a>
</td>
<td class="align-middle">
{{messagePrefix + '.table.email' | translate}}: {{ eperson.email ? eperson.email : '-' }}<br/>
{{messagePrefix + '.table.netid' | translate}}: {{ eperson.netid ? eperson.netid : '-' }}
</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button (click)="addMemberToGroup(eperson)"
[dsBtnDisabled]="actionConfig.add.disabled"
[ngClass]="['btn btn-sm', actionConfig.add.css]"
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(ePerson.eperson) } }}">
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(eperson) } }}">
<i [ngClass]="actionConfig.add.icon"></i>
</button>
</div>
@@ -156,9 +128,10 @@
</ds-pagination>
<div *ngIf="(ePeopleMembersOfGroupDtos | async) == undefined || (ePeopleMembersOfGroupDtos | async)?.totalElements == 0" class="alert alert-info w-100 mb-2"
<div *ngIf="(ePeopleSearch | async)?.totalElements == 0 && searchDone"
class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-members-yet' | translate}}
{{messagePrefix + '.no-items' | translate}}
</div>
</ng-container>

View File

@@ -17,7 +17,7 @@ import { Group } from '../../../../core/eperson/models/group.model';
import { PageInfo } from '../../../../core/shared/page-info.model';
import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { GroupMock, GroupMock2 } from '../../../../shared/testing/group-mock';
import { GroupMock } from '../../../../shared/testing/group-mock';
import { MembersListComponent } from './members-list.component';
import { EPersonMock, EPersonMock2 } from '../../../../shared/testing/eperson.mock';
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils';
@@ -39,28 +39,26 @@ describe('MembersListComponent', () => {
let ePersonDataServiceStub: any;
let groupsDataServiceStub: any;
let activeGroup;
let allEPersons: EPerson[];
let allGroups: Group[];
let epersonMembers: EPerson[];
let subgroupMembers: Group[];
let epersonNonMembers: EPerson[];
let paginationService;
beforeEach(waitForAsync(() => {
activeGroup = GroupMock;
epersonMembers = [EPersonMock2];
subgroupMembers = [GroupMock2];
allEPersons = [EPersonMock, EPersonMock2];
allGroups = [GroupMock, GroupMock2];
epersonNonMembers = [EPersonMock];
ePersonDataServiceStub = {
activeGroup: activeGroup,
epersonMembers: epersonMembers,
subgroupMembers: subgroupMembers,
epersonNonMembers: epersonNonMembers,
// This method is used to get all the current members
findListByHref(_href: string): Observable<RemoteData<PaginatedList<EPerson>>> {
return createSuccessfulRemoteDataObject$(buildPaginatedList<EPerson>(new PageInfo(), groupsDataServiceStub.getEPersonMembers()));
},
searchByScope(scope: string, query: string): Observable<RemoteData<PaginatedList<EPerson>>> {
// This method is used to search across *non-members*
searchNonMembers(query: string, group: string): Observable<RemoteData<PaginatedList<EPerson>>> {
if (query === '') {
return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), allEPersons));
return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), epersonNonMembers));
}
return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), []));
},
@@ -70,29 +68,26 @@ describe('MembersListComponent', () => {
clearLinkRequests() {
// empty
},
getEPeoplePageRouterLink(): string {
return '/access-control/epeople';
}
};
groupsDataServiceStub = {
activeGroup: activeGroup,
epersonMembers: epersonMembers,
subgroupMembers: subgroupMembers,
allGroups: allGroups,
epersonNonMembers: epersonNonMembers,
getActiveGroup(): Observable<Group> {
return observableOf(activeGroup);
},
getEPersonMembers() {
return this.epersonMembers;
},
searchGroups(query: string): Observable<RemoteData<PaginatedList<Group>>> {
if (query === '') {
return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), this.allGroups));
}
return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), []));
},
addMemberToGroup(parentGroup, eperson: EPerson): Observable<RestResponse> {
this.epersonMembers = [...this.epersonMembers, eperson];
addMemberToGroup(parentGroup, epersonToAdd: EPerson): Observable<RestResponse> {
// Add eperson to list of members
this.epersonMembers = [...this.epersonMembers, epersonToAdd];
// Remove eperson from list of non-members
this.epersonNonMembers.forEach( (eperson: EPerson, index: number) => {
if (eperson.id === epersonToAdd.id) {
this.epersonNonMembers.splice(index, 1);
}
});
return observableOf(new RestResponse(true, 200, 'Success'));
},
clearGroupsRequests() {
@@ -105,14 +100,14 @@ describe('MembersListComponent', () => {
return '/access-control/groups/' + group.id;
},
deleteMemberFromGroup(parentGroup, epersonToDelete: EPerson): Observable<RestResponse> {
this.epersonMembers = this.epersonMembers.find((eperson: EPerson) => {
if (eperson.id !== epersonToDelete.id) {
return eperson;
// Remove eperson from list of members
this.epersonMembers.forEach( (eperson: EPerson, index: number) => {
if (eperson.id === epersonToDelete.id) {
this.epersonMembers.splice(index, 1);
}
});
if (this.epersonMembers === undefined) {
this.epersonMembers = [];
}
// Add eperson to list of non-members
this.epersonNonMembers = [...this.epersonNonMembers, epersonToDelete];
return observableOf(new RestResponse(true, 200, 'Success'));
}
};
@@ -160,13 +155,37 @@ describe('MembersListComponent', () => {
expect(comp).toBeDefined();
}));
it('should show list of eperson members of current active group', () => {
const epersonIdsFound = fixture.debugElement.queryAll(By.css('#ePeopleMembersOfGroup tr td:first-child'));
expect(epersonIdsFound.length).toEqual(1);
epersonMembers.map((eperson: EPerson) => {
expect(epersonIdsFound.find((foundEl) => {
return (foundEl.nativeElement.textContent.trim() === eperson.uuid);
})).toBeTruthy();
describe('current members list', () => {
it('should show list of eperson members of current active group', () => {
const epersonIdsFound = fixture.debugElement.queryAll(By.css('#ePeopleMembersOfGroup tr td:first-child'));
expect(epersonIdsFound.length).toEqual(1);
epersonMembers.map((eperson: EPerson) => {
expect(epersonIdsFound.find((foundEl) => {
return (foundEl.nativeElement.textContent.trim() === eperson.uuid);
})).toBeTruthy();
});
});
it('should show a delete button next to each member', () => {
const epersonsFound = fixture.debugElement.queryAll(By.css('#ePeopleMembersOfGroup tbody tr'));
epersonsFound.map((foundEPersonRowElement: DebugElement) => {
const addButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-plus'));
const deleteButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-trash-alt'));
expect(addButton).toBeNull();
expect(deleteButton).not.toBeNull();
});
});
describe('if first delete button is pressed', () => {
beforeEach(() => {
const deleteButton: DebugElement = fixture.debugElement.query(By.css('#ePeopleMembersOfGroup tbody .fa-trash-alt'));
deleteButton.nativeElement.click();
fixture.detectChanges();
});
it('then no ePerson remains as a member of the active group.', () => {
const epersonsFound = fixture.debugElement.queryAll(By.css('#ePeopleMembersOfGroup tbody tr'));
expect(epersonsFound.length).toEqual(0);
});
});
});
@@ -174,76 +193,40 @@ describe('MembersListComponent', () => {
describe('when searching without query', () => {
let epersonsFound: DebugElement[];
beforeEach(fakeAsync(() => {
spyOn(component, 'isMemberOfGroup').and.callFake((ePerson: EPerson) => {
return observableOf(activeGroup.epersons.includes(ePerson));
});
component.search({ scope: 'metadata', query: '' });
tick();
fixture.detectChanges();
epersonsFound = fixture.debugElement.queryAll(By.css('#epersonsSearch tbody tr'));
// Stop using the fake spy function (because otherwise the clicking on the buttons will not change anything
// because they don't change the value of activeGroup.epersons)
jasmine.getEnv().allowRespy(true);
spyOn(component, 'isMemberOfGroup').and.callThrough();
}));
it('should display all epersons', () => {
expect(epersonsFound.length).toEqual(2);
it('should display only non-members of the group', () => {
const epersonIdsFound = fixture.debugElement.queryAll(By.css('#epersonsSearch tbody tr td:first-child'));
expect(epersonIdsFound.length).toEqual(1);
epersonNonMembers.map((eperson: EPerson) => {
expect(epersonIdsFound.find((foundEl) => {
return (foundEl.nativeElement.textContent.trim() === eperson.uuid);
})).toBeTruthy();
});
});
describe('if eperson is already a eperson', () => {
it('should have delete button, else it should have add button', () => {
const memberIds: string[] = activeGroup.epersons.map((ePerson: EPerson) => ePerson.id);
epersonsFound.map((foundEPersonRowElement: DebugElement) => {
const epersonId: DebugElement = foundEPersonRowElement.query(By.css('td:first-child'));
const addButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-plus'));
const deleteButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-trash-alt'));
if (memberIds.includes(epersonId.nativeElement.textContent)) {
expect(addButton).toBeNull();
expect(deleteButton).not.toBeNull();
} else {
expect(deleteButton).toBeNull();
expect(addButton).not.toBeNull();
}
});
it('should display an add button next to non-members, not a delete button', () => {
epersonsFound.map((foundEPersonRowElement: DebugElement) => {
const addButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-plus'));
const deleteButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-trash-alt'));
expect(addButton).not.toBeNull();
expect(deleteButton).toBeNull();
});
});
describe('if first add button is pressed', () => {
beforeEach(fakeAsync(() => {
beforeEach(() => {
const addButton: DebugElement = fixture.debugElement.query(By.css('#epersonsSearch tbody .fa-plus'));
addButton.nativeElement.click();
tick();
fixture.detectChanges();
}));
it('then all the ePersons are member of the active group', () => {
epersonsFound = fixture.debugElement.queryAll(By.css('#epersonsSearch tbody tr'));
expect(epersonsFound.length).toEqual(2);
epersonsFound.map((foundEPersonRowElement: DebugElement) => {
const addButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-plus'));
const deleteButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-trash-alt'));
expect(addButton).toBeNull();
expect(deleteButton).not.toBeNull();
});
});
});
describe('if first delete button is pressed', () => {
beforeEach(fakeAsync(() => {
const deleteButton: DebugElement = fixture.debugElement.query(By.css('#epersonsSearch tbody .fa-trash-alt'));
deleteButton.nativeElement.click();
tick();
fixture.detectChanges();
}));
it('then no ePerson is member of the active group', () => {
it('then all (two) ePersons are member of the active group. No non-members left', () => {
epersonsFound = fixture.debugElement.queryAll(By.css('#epersonsSearch tbody tr'));
expect(epersonsFound.length).toEqual(2);
epersonsFound.map((foundEPersonRowElement: DebugElement) => {
const addButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-plus'));
const deleteButton: DebugElement = foundEPersonRowElement.query(By.css('td:last-child .fa-trash-alt'));
expect(deleteButton).toBeNull();
expect(addButton).not.toBeNull();
});
expect(epersonsFound.length).toEqual(0);
});
});
});

View File

@@ -4,38 +4,34 @@ import { Router } from '@angular/router';
import { TranslateService } from '@ngx-translate/core';
import {
Observable,
of as observableOf,
Subscription,
BehaviorSubject,
combineLatest as observableCombineLatest,
ObservedValueOf,
BehaviorSubject
} from 'rxjs';
import { defaultIfEmpty, map, mergeMap, switchMap, take } from 'rxjs/operators';
import { buildPaginatedList, PaginatedList } from '../../../../core/data/paginated-list.model';
import { map, switchMap, take } from 'rxjs/operators';
import { PaginatedList } from '../../../../core/data/paginated-list.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { EPersonDataService } from '../../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../../core/eperson/group-data.service';
import { EPerson } from '../../../../core/eperson/models/eperson.model';
import { Group } from '../../../../core/eperson/models/group.model';
import {
getFirstSucceededRemoteData,
getFirstCompletedRemoteData,
getAllCompletedRemoteData,
getRemoteDataPayload
} from '../../../../core/shared/operators';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { PaginationComponentOptions } from '../../../../shared/pagination/pagination-component-options.model';
import { EpersonDtoModel } from '../../../../core/eperson/models/eperson-dto.model';
import { PaginationService } from '../../../../core/pagination/pagination.service';
import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service';
import { getEPersonEditRoute } from '../../../access-control-routing-paths';
/**
* Keys to keep track of specific subscriptions
*/
enum SubKey {
ActiveGroup,
MembersDTO,
SearchResultsDTO,
Members,
SearchResults,
}
/**
@@ -96,11 +92,11 @@ export class MembersListComponent implements OnInit, OnDestroy {
/**
* EPeople being displayed in search result, initially all members, after search result of search
*/
ePeopleSearchDtos: BehaviorSubject<PaginatedList<EpersonDtoModel>> = new BehaviorSubject<PaginatedList<EpersonDtoModel>>(undefined);
ePeopleSearch: BehaviorSubject<PaginatedList<EPerson>> = new BehaviorSubject<PaginatedList<EPerson>>(undefined);
/**
* List of EPeople members of currently active group being edited
*/
ePeopleMembersOfGroupDtos: BehaviorSubject<PaginatedList<EpersonDtoModel>> = new BehaviorSubject<PaginatedList<EpersonDtoModel>>(undefined);
ePeopleMembersOfGroup: BehaviorSubject<PaginatedList<EPerson>> = new BehaviorSubject<PaginatedList<EPerson>>(undefined);
/**
* Pagination config used to display the list of EPeople that are result of EPeople search
@@ -129,7 +125,6 @@ export class MembersListComponent implements OnInit, OnDestroy {
// Current search in edit group - epeople search form
currentSearchQuery: string;
currentSearchScope: string;
// Whether or not user has done a EPeople search yet
searchDone: boolean;
@@ -137,6 +132,8 @@ export class MembersListComponent implements OnInit, OnDestroy {
// current active group being edited
groupBeingEdited: Group;
readonly getEPersonEditRoute = getEPersonEditRoute;
constructor(
protected groupDataService: GroupDataService,
public ePersonDataService: EPersonDataService,
@@ -148,18 +145,17 @@ export class MembersListComponent implements OnInit, OnDestroy {
public dsoNameService: DSONameService,
) {
this.currentSearchQuery = '';
this.currentSearchScope = 'metadata';
}
ngOnInit(): void {
this.searchForm = this.formBuilder.group(({
scope: 'metadata',
query: '',
}));
this.subs.set(SubKey.ActiveGroup, this.groupDataService.getActiveGroup().subscribe((activeGroup: Group) => {
if (activeGroup != null) {
this.groupBeingEdited = activeGroup;
this.retrieveMembers(this.config.currentPage);
this.search({query: ''});
}
}));
}
@@ -171,8 +167,8 @@ export class MembersListComponent implements OnInit, OnDestroy {
* @private
*/
retrieveMembers(page: number): void {
this.unsubFrom(SubKey.MembersDTO);
this.subs.set(SubKey.MembersDTO,
this.unsubFrom(SubKey.Members);
this.subs.set(SubKey.Members,
this.paginationService.getCurrentPagination(this.config.id, this.config).pipe(
switchMap((currentPagination) => {
return this.ePersonDataService.findListByHref(this.groupBeingEdited._links.epersons.href, {
@@ -189,49 +185,12 @@ export class MembersListComponent implements OnInit, OnDestroy {
return rd;
}
}),
switchMap((epersonListRD: RemoteData<PaginatedList<EPerson>>) => {
const dtos$ = observableCombineLatest([...epersonListRD.payload.page.map((member: EPerson) => {
const dto$: Observable<EpersonDtoModel> = observableCombineLatest(
this.isMemberOfGroup(member), (isMember: ObservedValueOf<Observable<boolean>>) => {
const epersonDtoModel: EpersonDtoModel = new EpersonDtoModel();
epersonDtoModel.eperson = member;
epersonDtoModel.memberOfGroup = isMember;
return epersonDtoModel;
});
return dto$;
})]);
return dtos$.pipe(defaultIfEmpty([]), map((dtos: EpersonDtoModel[]) => {
return buildPaginatedList(epersonListRD.payload.pageInfo, dtos);
}));
}))
.subscribe((paginatedListOfDTOs: PaginatedList<EpersonDtoModel>) => {
this.ePeopleMembersOfGroupDtos.next(paginatedListOfDTOs);
getRemoteDataPayload())
.subscribe((paginatedListOfEPersons: PaginatedList<EPerson>) => {
this.ePeopleMembersOfGroup.next(paginatedListOfEPersons);
}));
}
/**
* Whether the given ePerson is a member of the group currently being edited
* @param possibleMember EPerson that is a possible member (being tested) of the group currently being edited
*/
isMemberOfGroup(possibleMember: EPerson): Observable<boolean> {
return this.groupDataService.getActiveGroup().pipe(take(1),
mergeMap((group: Group) => {
if (group != null) {
return this.ePersonDataService.findListByHref(group._links.epersons.href, {
currentPage: 1,
elementsPerPage: 9999
})
.pipe(
getFirstSucceededRemoteData(),
getRemoteDataPayload(),
map((listEPeopleInGroup: PaginatedList<EPerson>) => listEPeopleInGroup.page.filter((ePersonInList: EPerson) => ePersonInList.id === possibleMember.id)),
map((epeople: EPerson[]) => epeople.length > 0));
} else {
return observableOf(false);
}
}));
}
/**
* Unsubscribe from a subscription if it's still subscribed, and remove it from the map of
* active subscriptions
@@ -248,14 +207,18 @@ export class MembersListComponent implements OnInit, OnDestroy {
/**
* Deletes a given EPerson from the members list of the group currently being edited
* @param ePerson EPerson we want to delete as member from group that is currently being edited
* @param eperson EPerson we want to delete as member from group that is currently being edited
*/
deleteMemberFromGroup(ePerson: EpersonDtoModel) {
ePerson.memberOfGroup = false;
deleteMemberFromGroup(eperson: EPerson) {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => {
if (activeGroup != null) {
const response = this.groupDataService.deleteMemberFromGroup(activeGroup, ePerson.eperson);
this.showNotifications('deleteMember', response, this.dsoNameService.getName(ePerson.eperson), activeGroup);
const response = this.groupDataService.deleteMemberFromGroup(activeGroup, eperson);
this.showNotifications('deleteMember', response, this.dsoNameService.getName(eperson), activeGroup);
// Reload search results (if there is an active query).
// This will potentially add this deleted subgroup into the list of search results.
if (this.currentSearchQuery != null) {
this.search({query: this.currentSearchQuery});
}
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.noActiveGroup'));
}
@@ -264,14 +227,18 @@ export class MembersListComponent implements OnInit, OnDestroy {
/**
* Adds a given EPerson to the members list of the group currently being edited
* @param ePerson EPerson we want to add as member to group that is currently being edited
* @param eperson EPerson we want to add as member to group that is currently being edited
*/
addMemberToGroup(ePerson: EpersonDtoModel) {
ePerson.memberOfGroup = true;
addMemberToGroup(eperson: EPerson) {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => {
if (activeGroup != null) {
const response = this.groupDataService.addMemberToGroup(activeGroup, ePerson.eperson);
this.showNotifications('addMember', response, this.dsoNameService.getName(ePerson.eperson), activeGroup);
const response = this.groupDataService.addMemberToGroup(activeGroup, eperson);
this.showNotifications('addMember', response, this.dsoNameService.getName(eperson), activeGroup);
// Reload search results (if there is an active query).
// This will potentially add this deleted subgroup into the list of search results.
if (this.currentSearchQuery != null) {
this.search({query: this.currentSearchQuery});
}
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.noActiveGroup'));
}
@@ -279,37 +246,25 @@ export class MembersListComponent implements OnInit, OnDestroy {
}
/**
* Search in the EPeople by name, email or metadata
* @param data Contains scope and query param
* Search all EPeople who are NOT a member of the current group by name, email or metadata
* @param data Contains query param
*/
search(data: any) {
this.unsubFrom(SubKey.SearchResultsDTO);
this.subs.set(SubKey.SearchResultsDTO,
this.unsubFrom(SubKey.SearchResults);
this.subs.set(SubKey.SearchResults,
this.paginationService.getCurrentPagination(this.configSearch.id, this.configSearch).pipe(
switchMap((paginationOptions) => {
const query: string = data.query;
const scope: string = data.scope;
if (query != null && this.currentSearchQuery !== query && this.groupBeingEdited) {
this.router.navigate([], {
queryParamsHandling: 'merge'
});
this.currentSearchQuery = query;
this.paginationService.resetPage(this.configSearch.id);
}
if (scope != null && this.currentSearchScope !== scope && this.groupBeingEdited) {
this.router.navigate([], {
queryParamsHandling: 'merge'
});
this.currentSearchScope = scope;
this.paginationService.resetPage(this.configSearch.id);
}
this.searchDone = true;
return this.ePersonDataService.searchByScope(this.currentSearchScope, this.currentSearchQuery, {
return this.ePersonDataService.searchNonMembers(this.currentSearchQuery, this.groupBeingEdited.id, {
currentPage: paginationOptions.currentPage,
elementsPerPage: paginationOptions.pageSize
});
}, false, true);
}),
getAllCompletedRemoteData(),
map((rd: RemoteData<any>) => {
@@ -319,23 +274,9 @@ export class MembersListComponent implements OnInit, OnDestroy {
return rd;
}
}),
switchMap((epersonListRD: RemoteData<PaginatedList<EPerson>>) => {
const dtos$ = observableCombineLatest([...epersonListRD.payload.page.map((member: EPerson) => {
const dto$: Observable<EpersonDtoModel> = observableCombineLatest(
this.isMemberOfGroup(member), (isMember: ObservedValueOf<Observable<boolean>>) => {
const epersonDtoModel: EpersonDtoModel = new EpersonDtoModel();
epersonDtoModel.eperson = member;
epersonDtoModel.memberOfGroup = isMember;
return epersonDtoModel;
});
return dto$;
})]);
return dtos$.pipe(defaultIfEmpty([]), map((dtos: EpersonDtoModel[]) => {
return buildPaginatedList(epersonListRD.payload.pageInfo, dtos);
}));
}))
.subscribe((paginatedListOfDTOs: PaginatedList<EpersonDtoModel>) => {
this.ePeopleSearchDtos.next(paginatedListOfDTOs);
getRemoteDataPayload())
.subscribe((paginatedListOfEPersons: PaginatedList<EPerson>) => {
this.ePeopleSearch.next(paginatedListOfEPersons);
}));
}

View File

@@ -1,100 +1,10 @@
<ng-container>
<h3 class="border-bottom pb-2">{{messagePrefix + '.head' | translate}}</h3>
<h4 id="search" class="border-bottom pb-2">
<span *dsContextHelp="{
content: 'admin.access-control.groups.form.tooltip.editGroup.addSubgroups',
id: 'edit-group-add-subgroups',
iconPlacement: 'right',
tooltipPlacement: ['top', 'right', 'bottom']
}"
>
{{messagePrefix + '.search.head' | translate}}
</span>
</h4>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div class="flex-grow-1 mr-3">
<div class="form-group input-group mr-3">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit" class="search-button btn btn-primary">
<i class="fas fa-search"></i> {{ messagePrefix + '.search.button' | translate }}
</button>
</span>
</div>
</div>
<div>
<button (click)="clearFormAndResetResult();" class="btn btn-secondary float-right">
{{messagePrefix + '.button.see-all' | translate}}
</button>
</div>
</form>
<ds-pagination *ngIf="(searchResults$ | async)?.payload?.totalElements > 0"
[paginationOptions]="configSearch"
[pageInfoState]="(searchResults$ | async)?.payload"
[collectionSize]="(searchResults$ | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
<div class="table-responsive">
<table id="groupsSearch" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col" class="align-middle">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.name' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.collectionOrCommunity' | translate}}</th>
<th class="align-middle">{{messagePrefix + '.table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let group of (searchResults$ | async)?.payload?.page">
<td class="align-middle">{{group.id}}</td>
<td class="align-middle">
<a (click)="groupDataService.startEditingNewGroup(group)"
[routerLink]="[groupDataService.getGroupEditPageRouterLink(group)]">
{{ dsoNameService.getName(group) }}
</a>
</td>
<td class="align-middle">{{ dsoNameService.getName((group.object | async)?.payload) }}</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button *ngIf="(isSubgroupOfGroup(group) | async) && !(isActiveGroup(group) | async)"
(click)="deleteSubgroupFromGroup(group)"
class="btn btn-outline-danger btn-sm deleteButton"
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: { name: dsoNameService.getName(group) } }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
<span *ngIf="(isActiveGroup(group) | async)">{{ messagePrefix + '.table.edit.currentGroup' | translate }}</span>
<button *ngIf="!(isSubgroupOfGroup(group) | async) && !(isActiveGroup(group) | async)"
(click)="addSubgroupToGroup(group)"
class="btn btn-outline-primary btn-sm addButton"
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(group) } }}">
<i class="fas fa-plus fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(searchResults$ | async)?.payload?.totalElements == 0 && searchDone" class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-items' | translate}}
</div>
<h4>{{messagePrefix + '.headSubgroups' | translate}}</h4>
<ds-pagination *ngIf="(subGroups$ | async)?.payload?.totalElements > 0"
[paginationOptions]="config"
[pageInfoState]="(subGroups$ | async)?.payload"
[collectionSize]="(subGroups$ | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
@@ -139,4 +49,82 @@
{{messagePrefix + '.no-subgroups-yet' | translate}}
</div>
<h4 id="search" class="border-bottom pb-2">
<span *dsContextHelp="{
content: 'admin.access-control.groups.form.tooltip.editGroup.addSubgroups',
id: 'edit-group-add-subgroups',
iconPlacement: 'right',
tooltipPlacement: ['top', 'right', 'bottom']
}"
>
{{messagePrefix + '.search.head' | translate}}
</span>
</h4>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="d-flex justify-content-between">
<div class="flex-grow-1 mr-3">
<div class="form-group input-group mr-3">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit" class="search-button btn btn-primary">
<i class="fas fa-search"></i> {{ messagePrefix + '.search.button' | translate }}
</button>
</span>
</div>
</div>
<div>
<button (click)="clearFormAndResetResult();" class="btn btn-secondary float-right">
{{messagePrefix + '.button.see-all' | translate}}
</button>
</div>
</form>
<ds-pagination *ngIf="(searchResults$ | async)?.payload?.totalElements > 0"
[paginationOptions]="configSearch"
[collectionSize]="(searchResults$ | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true">
<div class="table-responsive">
<table id="groupsSearch" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col" class="align-middle">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.name' | translate}}</th>
<th scope="col" class="align-middle">{{messagePrefix + '.table.collectionOrCommunity' | translate}}</th>
<th class="align-middle">{{messagePrefix + '.table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let group of (searchResults$ | async)?.payload?.page">
<td class="align-middle">{{group.id}}</td>
<td class="align-middle">
<a (click)="groupDataService.startEditingNewGroup(group)"
[routerLink]="[groupDataService.getGroupEditPageRouterLink(group)]">
{{ dsoNameService.getName(group) }}
</a>
</td>
<td class="align-middle">{{ dsoNameService.getName((group.object | async)?.payload) }}</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button (click)="addSubgroupToGroup(group)"
class="btn btn-outline-primary btn-sm addButton"
title="{{messagePrefix + '.table.edit.buttons.add' | translate: { name: dsoNameService.getName(group) } }}">
<i class="fas fa-plus fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(searchResults$ | async)?.payload?.totalElements == 0 && searchDone" class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-items' | translate}}
</div>
</ng-container>

Some files were not shown because too many files have changed in this diff Show More