Compare commits

...

1992 Commits

Author SHA1 Message Date
Tim Donohue
ca864379c8 Update version tag 2022-10-06 14:11:47 -05:00
Tim Donohue
a2cb60adeb Merge pull request #1888 from tdonohue/fix_examples
Sync config.example.yml with default-app-config for 7.4
2022-10-06 13:48:50 -05:00
Tim Donohue
cebf2df4d2 Sync config.example.yml with default-app-config for 7.4 2022-10-06 12:20:37 -05:00
Tim Donohue
5728f35f46 Merge pull request #1885 from mspalti/entity-thumbnail
Removed thumbnails from relationship modal
2022-10-06 08:56:05 -05:00
Tim Donohue
1d4f2edfdb Merge pull request #1886 from atmire/fix-1882
Fix dual notification when deleting bitstreamformats
2022-10-06 08:49:08 -05:00
Michael W Spalti
e572e4f41e Updated comment. 2022-10-06 02:27:24 -07:00
Art Lowel
f5deb88c5f fix an issue where deleting bitstreamformats would show both an error and a success notification 2022-10-06 10:29:20 +02:00
Michael W Spalti
8d30788f05 Updated test. 2022-10-05 15:08:42 -07:00
Michael W Spalti
acc32bf77d Hiding thumbnail in modal. 2022-10-05 14:50:25 -07:00
Tim Donohue
8ffc32540a Merge pull request #1884 from lucaszc/patch-1
Misspellings corrections in pt-BR
2022-10-05 14:06:20 -05:00
Tim Donohue
4c20ab8de3 Merge pull request #1881 from atmire/fix-1879
Fix issue when deleting a member from a group
2022-10-05 14:01:32 -05:00
lucaszc
8cc144cb73 Misspellings corrections in pt-BR
Misspellings  corrections in portuguese brazil
2022-10-05 14:54:51 -03:00
Art Lowel
c55c15b6f6 fix issue where deleting a member from a group would cause an infinite re-request loop 2022-10-05 18:27:09 +02:00
Tim Donohue
417c4dee12 Merge pull request #1869 from lucaszc/patch-1
Some translations for pt-BR
2022-10-04 15:06:33 -05:00
Tim Donohue
ba75051117 Merge pull request #1845 from 4Science/CST-6876
Search/MyDSpace fixes
2022-10-04 14:41:30 -05:00
Giuseppe Digilio
c47405cfe1 [CST-6876] Fix issue for which submitter disappear when workflow state were changed 2022-10-04 20:35:14 +02:00
Tim Donohue
8e5ef54f97 Merge pull request #1818 from 4Science/CST-6782-refactor
New users might be registered in a massive way by a robot
2022-10-04 09:53:15 -05:00
Davide Negretti
3b7a830ffe [CST-6782] Hide cookie settings when verification is disabled 2022-10-04 15:37:04 +02:00
Giuseppe Digilio
d8c8a43da4 [CST-6876] Refactoring workflow actions components in order to pass item and workflowitem objects down from paren search element component to children 2022-10-04 14:47:07 +02:00
lucaszc
f72f6a3166 Update pt-BR.json5
Add missing translations ..
2022-10-04 06:51:52 -03:00
lucaszc
a94877ad5a Correcting, missing comma in line 62
Correct missing comma in line 62
2022-10-03 19:45:27 -03:00
Tim Donohue
9305705ab6 Merge pull request #1828 from FelixNicol/Virtual-metadatas-visibility-workflow-not-updated
Fix for PR#1822 - Adjusted two equality checks for scope type which always return false.
2022-10-03 17:15:26 -05:00
lucaszc
7b8371dc87 Merge branch 'main' into patch-1 2022-10-03 16:26:09 -03:00
lucaszc
c2376b6fc7 Update pt-BR.json5
Merge changes from #1866 and add more translations to pt-BR
2022-10-03 14:58:42 -03:00
Tim Donohue
60c317c020 Merge pull request #1876 from atmire/fix-z-index-issue-in-item-list-selects
Fix z-index issue with thumbnails in item list checkboxes
2022-10-03 11:22:13 -05:00
Davide Negretti
2e4b96b2dd [CST-6782] Disable registration button if cookies haven't been accepted 2022-10-03 17:41:38 +02:00
Giuseppe Digilio
ec375fb910 [CST-6876] move delay in the search-facet-filter.component 2022-10-03 17:37:54 +02:00
Davide Negretti
8f66f1fe8f Merge branch 'main-gh4s' into CST-6782-refactor 2022-10-03 17:35:26 +02:00
Davide Negretti
89cdad42d2 [CST-6782] Hide missing cookie alert when verification is not enabled 2022-10-03 17:34:00 +02:00
Giuseppe Digilio
076fa3e1af Merge remote-tracking branch 'origin/main' into CST-6876
# Conflicts:
#	src/app/shared/search/search.component.ts
2022-10-03 17:29:39 +02:00
Tim Donohue
458df454eb Merge pull request #1812 from atmire/w2p-94301_Empty-required-name-input-not-displaying-error-message-after-saving
Fix error validation for required `name` fields in submission
2022-10-03 10:25:20 -05:00
Art Lowel
967f531eb5 fix issue where the padding of a thumbnail in list view would prevent the checkbox from being clickable 2022-10-03 17:08:58 +02:00
Tim Donohue
445255e92d Merge pull request #1858 from abhishekd2t/main
Hindi Translation
2022-10-03 10:06:10 -05:00
Tim Donohue
789a1471b0 Merge pull request #1825 from atmire/w2p-94060_Issue-1720_MyDSpace-support-entities
MyDSpace support for entity type specific list views
2022-10-03 09:58:35 -05:00
lotte
d064c26eec 94060: reverted e2e test changes 2022-10-03 14:45:24 +02:00
lotte
738aa9f098 Merge remote-tracking branch 'origin/main' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-10-03 14:43:24 +02:00
Giuseppe Digilio
f16dcc7942 [CST-6876] Refactoring in order to remove nested subscriptions 2022-10-03 14:07:59 +02:00
lotte
84bdfb8306 94060: Encoded embedded slash forward to prevent cypress glob issues 2022-10-03 11:26:02 +02:00
Giuseppe Digilio
ac36cc20dc [CST-6876] Refactoring in order to remove nested subscriptions 2022-10-03 10:58:51 +02:00
Giuseppe Digilio
bbdaa253aa [CST-6876] Fix missing page size 2022-10-03 10:48:28 +02:00
Abhishek Raval
3b0577be2f Merge branch 'main' into main 2022-10-01 14:53:54 +05:30
Abhishek Raval
b96502583a Update default-app-config.ts 2022-10-01 14:48:50 +05:30
Abhishek Raval
2bb4c71ddd Updated hi.json5 file
Removed all the next line in hindi translation for same key, I.E. 20, 21 lines.
2022-10-01 11:57:46 +05:30
Abhishek Raval
f3cf13a040 Update config.example.yml 2022-10-01 11:06:41 +05:30
Tim Donohue
b26da8991a Merge pull request #1864 from pilasou/main
Adding missing language parameters in french translations file (fr.json5)
2022-09-30 16:59:16 -05:00
Tim Donohue
0ef8dccac8 Merge pull request #1827 from 4Science/CST-6685
Create new batch export/import page to/from ZIP
2022-09-30 14:08:04 -05:00
Tim Donohue
e1b21e2dc6 Merge pull request #1866 from danilofjr/patch-1
pt-BR translation contribution
2022-09-30 11:52:15 -05:00
Tim Donohue
1779b1f9f3 Merge pull request #1872 from atmire/w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata
repair tests bis
2022-09-30 11:51:35 -05:00
lotte
fb9ed87f95 Merge remote-tracking branch 'atmire/w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-09-30 17:29:24 +02:00
Tim Donohue
e24f0e3fa5 Merge pull request #1873 from atmire/Fix-EPerson-delete-infinite-loop
Fix infinite loop when deleting an EPerson
2022-09-30 10:25:26 -05:00
lotte
3b653880b9 Merge branch 'w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata' of https://github.com/atmire/dspace-angular into w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata 2022-09-30 17:11:28 +02:00
lotte
e2e122b4ee 93963: Fixed tests in main 2022-09-30 17:08:47 +02:00
Samuel Cambien
8a6ff75560 repair tests bis 2022-09-30 17:06:11 +02:00
Tim Donohue
bf08244e93 Merge pull request #1838 from atmire/w2p-94474_clarify-process-state
Clarify that submission page may be closed while REST processes uploads
2022-09-30 09:44:18 -05:00
Danilo Felicio Jr
c20853d2fe Update pt-BR.json5 2022-09-30 11:21:37 -03:00
Samuel Cambien
80500e716d repair tests bis 2022-09-30 16:10:15 +02:00
Danilo Felicio Jr
fad23560b0 Update pt-BR.json5 2022-09-30 11:07:05 -03:00
Art Lowel
50cb219045 fix issue where the group overview page would throw an error after deleting a group 2022-09-30 15:53:27 +02:00
Yury Bondarenko
379d78eaa2 Fix infinite loop when deleting an EPerson
The reset() call is no longer needed in this case, since invalidation on delete is handled within the data service
We still need this method to properly update the page after creating a new EPerson
2022-09-30 14:38:31 +02:00
Giuseppe Digilio
c352ac440c [CST-6876] Fix LGTM alert 2022-09-30 14:35:47 +02:00
lotte
7a52b69573 94060: hopefully fix cypress tests 2022-09-30 13:38:30 +02:00
Giuseppe Digilio
a384a462eb [CST-6876] Fix issue with filter values request for which pagination was sent twice 2022-09-30 12:57:55 +02:00
Davide Negretti
88d5f02df2 Merge branch 'main-gh4s' into CST-6782-refactor
# Conflicts:
#	src/app/shared/cookies/browser-klaro.service.spec.ts
#	src/app/shared/shared.module.ts
2022-09-29 22:15:28 +02:00
Davide Negretti
c69934aab6 [CST-6782] Fix 2022-09-29 22:07:15 +02:00
Tim Donohue
6f9d31034c Merge pull request #1851 from atmire/w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata
Add support for line breaks markdown and mathjax in metadata
2022-09-29 14:28:20 -05:00
lucaszc
262fac3dd0 Some translations for pt-BR
Some translations for pt-BR language
2022-09-29 14:50:59 -03:00
Yury Bondarenko
a370f42996 94301: Rename hideRequiredHint to hideErrorMessages for clarity 2022-09-29 17:55:15 +02:00
Yury Bondarenko
d12aa01eec 94301: Limit error propagation to concat groups 2022-09-29 17:55:15 +02:00
Tim Donohue
1370363a54 Merge pull request #1826 from 4Science/CST-6753_GA4
Update Google Analytics to version 4
2022-09-29 09:47:52 -05:00
Tim Donohue
6fa9eb8d0a Merge pull request #1842 from the-library-code/PRs/AdditionalThemedComponents
additional themed components
2022-09-29 09:42:17 -05:00
Peter Wolfersberger
d73c163443 emptied non-empty browse-by-date-page.component.html in custom theme 2022-09-29 15:53:17 +02:00
Nikunj Sharma
0025567daf Merge remote-tracking branch 'origin/main' into CST-6685 2022-09-29 19:16:08 +05:30
Nikunj Sharma
fadcd2e0c6 [CST-6685] removed -a option 2022-09-29 19:13:39 +05:30
lotte
9f1749e1ee 94060: Fixed issue where thumbnails wouldn't be shown if linkType is linkType.None 2022-09-29 15:36:45 +02:00
Peter Wolfersberger
4371698a6e Created empty template files for browse-by-title-page.component and browse-by-date-page.component in custom theme 2022-09-29 15:24:26 +02:00
Tim Donohue
7b42446c11 Merge pull request #1861 from the-library-code/PRs/FixedHeader768px
Workaround missing navbar @768px for dspace and custom templates
2022-09-29 08:24:01 -05:00
Tim Donohue
6972a384a2 Merge pull request #1868 from tdonohue/fix_1867
Fixes Community "Assign Roles" page
2022-09-29 08:23:01 -05:00
lotte
7acc8c888e 94060: Added thumbnail embed for submission object search results and added offset to status badge for mydspace results 2022-09-29 15:16:28 +02:00
Giuseppe Digilio
a6d29f5a23 [CST-6876] Replace deprecated createComponent method and improve code 2022-09-29 15:06:30 +02:00
Giuseppe Digilio
7f30e92782 [CST-6876] Fix issue with invalid request done when the claimed/pool task changed its status due to a performed action 2022-09-29 15:05:18 +02:00
Samuel Cambien
e3351eb739 repair DefaultAppConfig 2022-09-29 12:58:20 +02:00
Samuel Cambien
2af9984ace repair tests 2022-09-29 12:58:07 +02:00
Peter Wolfersberger
81830bb797 Fixed comma in lazy-theme.module.ts 2022-09-29 11:48:59 +02:00
Peter Wolfersberger
5e54422daf fixed redundant / in pathname of themed component 2022-09-29 10:49:42 +02:00
Kim Shepherd
133f35cb42 [TLC-372] Wait for async before testing obj lists in some tests
Browse by, obj list and other related components were
themed in this PR and added to lazy theme module.
2022-09-29 10:49:42 +02:00
Peter Wolfersberger
8805ac33fc Fixed commented out references to html and scss component files 2022-09-29 10:49:42 +02:00
Peter Wolfersberger
7c194ff700 made search-navbar-component themeable 2022-09-29 10:49:42 +02:00
Peter Wolfersberger
3799ed28c1 Made browse-by-metadata-page.component, browse-by-title-page.component, browse-by-date-page.component themeable
and fixed a forgotten "implements OnDestroy" in browse-by-metadata-page.component.ts
2022-09-29 10:49:42 +02:00
Peter Wolfersberger
f5316b5805 Made community-list-element.component and collection-list-element.component themeable. 2022-09-29 10:49:42 +02:00
Peter Wolfersberger
48c3fd24ed Themed object-list.component. 2022-09-29 10:49:42 +02:00
Peter Wolfersberger
24943b9b09 Added already themed comcol-page-browse-by.component to custom theme. 2022-09-29 10:49:42 +02:00
Peter Wolfersberger
b0d1a74128 Made comcol-page-handle-component themeable 2022-09-29 10:49:02 +02:00
Tim Donohue
c7029ed8f6 Merge pull request #1847 from mspalti/iiif-multi-fix
Bug fix for multiple IIIF image property
2022-09-28 17:02:29 -05:00
Tim Donohue
fbe35e14dd Merge pull request #1863 from 4Science/CST-6932
Registration page password validation
2022-09-28 16:43:53 -05:00
Tim Donohue
0235cc2fe8 Update community-roles.component to align with collection-roles 2022-09-28 13:30:42 -05:00
Danilo Felicio Jr
30f0622810 pt-BR translation contribution
Fully translated til line 538 and other small corrections
2022-09-28 14:41:38 -03:00
Michael W Spalti
42bb39d097 Missing semicolon. 2022-09-28 09:18:03 -07:00
Michael W Spalti
60bcfe8cf5 Correction in the image count method. 2022-09-28 09:11:03 -07:00
Jens Vannerum
8bcbf02ed1 94474: Strings after merge 2022-09-28 18:06:52 +02:00
Jens Vannerum
63cedc0386 Merge branch 'main' into w2p-94474_clarify-process-state
# Conflicts:
#	src/assets/i18n/pt-BR.json5
#	src/assets/i18n/sv.json5
2022-09-28 18:05:02 +02:00
Tim Donohue
695ce3ab9e Merge pull request #1850 from atmire/use-x-forwarded-for-redirect
Use values from x-forwarded headers in getOrigin server side
2022-09-28 10:31:16 -05:00
Tim Donohue
77c38ad573 Merge pull request #1846 from atmire/w2p-94273_Track-dependencies-in-order-to-invalidate-them-when-an-object-is-invalidated
Track dependencies in order to invalidate them when an object is invalidated
2022-09-28 10:05:37 -05:00
Tim Donohue
7064014623 Merge pull request #1832 from atmire/w2p-89685_themed-search-settings-component
make search-settings.component themed
2022-09-28 10:04:47 -05:00
Tim Donohue
389ae85c55 Merge pull request #1823 from nibou230/dd-submission-1765
After drag & drop: Redirect the user and remove the notification
2022-09-28 08:31:15 -05:00
Yury Bondarenko
d98a261985 Add typedocs & fix copy/paste errors 2022-09-28 14:38:16 +02:00
Giuseppe Digilio
171ac62beb [CST-6753] Maintain compatibility with version 3 2022-09-28 13:30:22 +02:00
Art Lowel
941e71a75b add useProxies config to support x-forwarded headers in express 2022-09-28 13:10:46 +02:00
Art Lowel
241816e836 use location.replace to ensure the browser can track the redirect in its history 2022-09-28 11:58:27 +02:00
Giuseppe Digilio
750c6032bd [CST-6876] fix error when submitter is empty 2022-09-28 11:49:21 +02:00
Giuseppe Digilio
aa53e2fff6 [CST-6685] fix label 2022-09-28 09:54:25 +02:00
Jens Vannerum
27af7fad94 Merge branch 'main' into w2p-89685_themed-search-settings-component
# Conflicts:
#	src/themes/custom/lazy-theme.module.ts
2022-09-28 08:21:12 +02:00
Tim Donohue
1d13fd3f35 Merge pull request #1857 from joao-uefrom/main
Updated the Brazilian Portuguese translation.
2022-09-27 17:31:33 -05:00
Tim Donohue
ad13a396e6 Merge pull request #1860 from atmire/Fix-recent-submissions-list-thumbnails
Fix recent submissions list thumbnails
2022-09-27 16:53:29 -05:00
Giuseppe Digilio
f3f89b3dc1 [CST-6753] track Google Analytics statistic only if user accepts cookie consents 2022-09-27 21:47:15 +02:00
Pierre Lasou
f1888f718c Changes to 2 french translations
2 changes that override those of a previous commit fa20e9e5c0
2022-09-27 14:35:09 -04:00
Tim Donohue
0e23e850b7 Merge pull request #1804 from 4Science/CST-6153
Ask current password to user when setting a new password
2022-09-27 13:08:43 -05:00
Nicolas Boulay
9140fb6106 Remove unused translations 2022-09-27 13:40:12 -04:00
Nicolas Boulay
6cd01ec471 Add missing documentation 2022-09-27 13:40:12 -04:00
Nicolas Boulay
e9a8526b1b Redirect the user and remove the notification 2022-09-27 13:40:12 -04:00
Yury Bondarenko
7771cff5c8 93963: Use sanitize-html instead of isomorphic-dompurifier 2022-09-27 17:41:09 +02:00
Samuel Cambien
42608c6b09 Revert "93963: Use sanitize-html instead of isomorphic-dompurifier"
This reverts commit a789cb0960e966d19d86dfc67f274c6b1751ec32.
2022-09-27 17:41:09 +02:00
Samuel Cambien
8800b1e0e8 move configs, add extra documentation 2022-09-27 17:40:58 +02:00
Nikunj Sharma
98ee0751ec [CST-6685] added new batch export functionality 2022-09-27 20:19:50 +05:30
Giuseppe Digilio
e9a87a607a Merge remote-tracking branch 'origin/main' into CST-6753_GA4 2022-09-27 16:33:56 +02:00
Giuseppe Digilio
73c81ea924 Merge remote-tracking branch 'origin/main' into CST-6876
# Conflicts:
#	src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts
#	src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts
#	src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts
#	src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts
2022-09-27 16:24:24 +02:00
Peter Wolfersberger
fc624a406f Workaround missing navbar @768px for dspace and custom templates
The treatment of the breakpoints is inconsistent. md is defined as
768px<=md<992px.
The statement
@media screen and (max-width: map-get($grid-breakpoints, md)) {}
,which is in some instances used at the moment for referencing break intervals BELOW md includes the lower md border which should be excluded.
The sass mixin
@include media-breakpoint-down($name) {}
or function
breakpoint-max($name)
for some unknown reason don't work, so this is a workaround.
2022-09-27 15:19:00 +02:00
lotte
1355fb1d35 94060: fixed tests 2022-09-27 14:27:18 +02:00
lotte
d1ca092897 Merge remote-tracking branch 'origin/main' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-09-27 14:26:58 +02:00
Yury Bondarenko
396bbd4f31 Fix default image logic in ds-thumbnail 2022-09-27 13:00:44 +02:00
Yury Bondarenko
05d1554740 Ensure entity list objects are used on the home page 2022-09-27 13:00:44 +02:00
Yury Bondarenko
6b0513aba1 Fix thumbnail placeholder font scaling in ds-recent-item-list 2022-09-27 13:00:44 +02:00
Sufiyan Shaikh
a011c300aa [CST-6932] behavior on the registration page should be the same as the behavior on the change password page 2022-09-27 13:23:13 +05:30
Nikunj Sharma
b89640e4d2 [CST-6685] removed value param with --add 2022-09-26 23:58:03 +05:30
Nikunj Sharma
e9b83f3b0d Merge remote-tracking branch 'origin/main' into CST-6685 2022-09-26 22:01:55 +05:30
Samuel Cambien
0824fff6ef Merge branch 'main' into w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata
# Conflicts:
#	src/app/shared/shared.module.ts
2022-09-26 17:10:02 +02:00
Davide Negretti
614ce4aa83 Merge branch 'main-ghds' into CST-6782-refactor
# Conflicts:
#	src/app/shared/shared.module.ts
2022-09-26 15:46:08 +02:00
Davide Negretti
2f13beac7c [CST-6782] JSdoc fixed 2022-09-26 15:44:38 +02:00
Davide Negretti
ab3b05b950 [CST-6782] JSdoc fixed; buildCaptchaUrl refactored; import cleanup 2022-09-26 15:43:47 +02:00
Davide Negretti
7ad68530ea [CST-6782] JSdoc fixed; buildCaptchaUrl refactored; import cleanup 2022-09-26 15:40:24 +02:00
Abhishek Raval
9f43c1d0b9 Update hi.json5 2022-09-26 17:33:17 +05:30
João Fernandes
5e5e04cb1b Updated the Brazilian Portuguese translation. 2022-09-25 11:57:53 -03:00
reetagithub
064dae2581 Swedish translation file modified (#1837)
* Update en.json5

Corrected typos ("changed discarded/outdated" -> "changes...")

* Update fi.json5

Reformatted three keys with term 'views', previously it was translated to 'lataus', now 'katselu' which is a more accurate word.

* Update fi.json5

A better translation to key mydspace.title

* Update sv.json5

Removed lines starting "// TODO" to make it easier to detect possible  additions of new keys

* Update sv.json5

Removed unnecessary "// TODO..." lines, small typo corrections and harmonizing used terms (e.g. 'browse', 'mydspace')
2022-09-23 15:36:53 -05:00
Tim Donohue
a6ee2b8aa3 Merge pull request #1839 from atmire/issue-1833_entity-title-refactor-main
Full item page of entities missing title/name
2022-09-23 15:09:03 -05:00
Tim Donohue
994c9b3985 Merge pull request #1694 from atmire/w2p-92282_Fix-missing-auth-tokens-when-retrieving-Bitstreams
Support restricted thumbnails
2022-09-23 14:03:07 -05:00
Alexandre Vryghem
dc54990977 Merge branch 'main-upstream' into issue-1833_entity-title-refactor-main 2022-09-23 20:49:06 +02:00
Samuel Cambien
d46ab3b932 Merge branch 'main' into w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata 2022-09-23 18:33:13 +02:00
Yury Bondarenko
7a89f416f9 Merge remote-tracking branch 'origin/main' into w2p-92282_Fix-missing-auth-tokens-when-retrieving-Bitstreams 2022-09-23 17:57:39 +02:00
Tim Donohue
9c93a8ad86 Merge pull request #1844 from dsteelma-umd/1843_standard-bundles-config-fix
Issue 1843 - Fix default bundles example in config.example.yml
2022-09-23 10:31:57 -05:00
Tim Donohue
3834d170e9 Merge pull request #1780 from mspalti/collection-thumbnail-embed
Show thumbnails in result lists
2022-09-23 10:11:53 -05:00
Tim Donohue
37ac449cb3 Merge pull request #1848 from atmire/w2p-94485_Fix-regressions
Regression fixes
2022-09-23 09:39:09 -05:00
Samuel Cambien
f5ff72372c issue #1404, issue #1762, issue #1763 Add support for line breaks, markdown and mathjax in metadata - add sanitize-html types to devdependencies for documentation 2022-09-23 14:16:45 +02:00
Samuel Cambien
f57fb3923a issue #1404, issue #1762, issue #1763 Add support for line breaks, markdown and mathjax in metadata - fix lint issues 2022-09-23 13:53:53 +02:00
Samuel Cambien
b345b27c0f Merge branch 'main' into w2p-93963-Add_support_for_line_breaks_markdown_and_mathjax_in_metadata
# Conflicts:
#	package.json
#	src/app/shared/shared.module.ts
#	src/app/shared/truncatable/truncatable-part/truncatable-part.component.html
#	src/config/app-config.interface.ts
#	src/config/default-app-config.ts
#	src/environments/environment.test.ts
#	src/styles/_global-styles.scss
#	yarn.lock
2022-09-23 13:48:37 +02:00
Samuel Cambien
2f71dc358b issue #1404, issue #1762, issue #1763 Add support for line breaks, markdown and mathjax in metadata 2022-09-23 13:37:11 +02:00
Nikunj Sharma
5b1e0d3e0d CST-6685 updated changes 2022-09-23 16:16:22 +05:30
Davide Negretti
11eacc10f7 [CST-6782] Fix klaro configuration 2022-09-23 12:46:16 +02:00
Giuseppe Digilio
9de6f38ea6 [CST-6153] fix merge 2022-09-23 10:37:52 +02:00
Giuseppe Digilio
0222fb0061 Merge remote-tracking branch 'origin/main' into CST-6153
# Conflicts:
#	src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts
#	src/assets/i18n/en.json5
2022-09-23 10:35:28 +02:00
Davide Negretti
711982d423 [CST-6782] fixes after merge 2022-09-23 10:32:50 +02:00
Giuseppe Digilio
b022a93128 Merge remote-tracking branch 'origin/main' into CST-6685 2022-09-23 10:27:51 +02:00
Davide Negretti
5d37efdfc0 Merge branch 'main-ghds' into CST-6782-refactor
# Conflicts:
#	src/assets/i18n/en.json5
2022-09-23 10:22:00 +02:00
Michael Spalti
a269817fe3 Added platform detection for placeholder classes. 2022-09-22 16:57:28 -07:00
Tim Donohue
001d6dc20a Merge pull request #1748 from mspalti/new-themes
New theme-able components
2022-09-22 12:02:10 -05:00
Tim Donohue
edd193a51e Merge pull request #1813 from atmire/w2p-94207_Fix-resource-policy-cache-issues
Fix ResourcePolicy cache issues
2022-09-22 08:50:26 -05:00
Tim Donohue
f0fd196ba9 Merge pull request #1776 from 4Science/CST-6110
Make password minimum requirements stronger
2022-09-22 08:48:19 -05:00
Tim Donohue
e1b9368166 Merge pull request #1808 from atmire/PR-1548-fix-group-page-lists
Fix group page lists in PR #1548
2022-09-22 08:46:47 -05:00
Yury Bondarenko
3717c661ca Fix button layout in ds-resource-policies 2022-09-22 12:29:13 +02:00
Tim Donohue
f01db3e984 Merge pull request #1821 from atmire/SearchEvents-bugfix
Search events bug-fix
2022-09-21 16:52:22 -05:00
Michael Spalti
cc3f570da7 Updated comments. 2022-09-21 12:16:22 -07:00
Michael Spalti
d4107e3f9a Initial update for multiple bundle check. 2022-09-21 12:13:10 -07:00
Yury Bondarenko
68def61f20 Test invalidation of dependent requests 2022-09-21 19:20:49 +02:00
Yury Bondarenko
551365a0a8 Merge remote-tracking branch 'atmire/w2p-94207_Fix-resource-policy-cache-issues' into w2p-94273_Track-dependencies-in-order-to-invalidate-them-when-an-object-is-invalidated 2022-09-21 19:18:22 +02:00
Michael Spalti
fbcaaf5a10 Merge branch 'main' into collection-thumbnail-embed 2022-09-21 10:11:55 -07:00
Tim Donohue
c76bae78d4 Merge pull request #1771 from mwoodiupui/browse-pagesize
Make the size of a browse result page configurable.
2022-09-21 11:22:46 -05:00
Yury Bondarenko
891c9165d7 Improve thumbnail loading animation
- Minimize content shift by leaving space around the animation (same as the placeholder)
- Replace animation with more compact spinner to prevent wrapping when the thumbnail is very narrow
2022-09-21 18:20:30 +02:00
Tim Donohue
8d6222807e Merge pull request #1841 from 4Science/DS-4415
Add label for the citation page curation task
2022-09-21 11:19:03 -05:00
Giuseppe Digilio
2642ed35b7 [CST-6153] Use new params name 2022-09-21 17:47:58 +02:00
Tim Donohue
f599e80190 Merge pull request #1835 from toniprieto/cc-section-not-loading
Creative Commons selector is not loading
2022-09-21 10:25:56 -05:00
Giuseppe Digilio
ab77e66be7 [CST-6494] Fix issue for which sometimes claimed and pool task weren't shown when a filter is applied 2022-09-21 17:16:10 +02:00
Mark H. Wood
7f696b24d6 Add to example configuration. 2022-09-21 08:21:54 -04:00
David P. Steelman
dda15e998a Issue 1843 - Fix default bundles example in config.example.yml
Provides the correct YAML configuration for configuring
the default bundles configuration.
2022-09-21 07:54:51 -04:00
Nikunj Sharma
53b5d27eea CST-6110 removed key i18 not used 2022-09-21 16:39:58 +05:30
Nikunj Sharma
a1bab693e5 Merge remote-tracking branch 'origin/main' into CST-6110 2022-09-21 16:13:53 +05:30
Giuseppe Digilio
9e779cf235 Merge branch 'main' into CST-6876 2022-09-21 12:40:25 +02:00
Kristof De Langhe
85194c1487 Merge branch 'main' into w2p-94310_SearchEvents-bugfix-main 2022-09-21 10:17:04 +02:00
Giuseppe Digilio
f2a6b8208f remove console.log 2022-09-21 09:54:49 +02:00
Giuseppe Digilio
e072cdf75b [CST-6494] Update filter values when a workflow action is dispatched 2022-09-21 09:54:10 +02:00
Giuseppe Digilio
6d3f3cad2f [CST-6876] Retrieve filter list in parent search.component 2022-09-21 09:41:30 +02:00
Michael Spalti
5a815da5f2 Updated comments. 2022-09-20 17:17:15 -07:00
Michael Spalti
4d43a34cb3 Revised pageSize input to override the value provided via configuration. 2022-09-20 17:08:57 -07:00
Michael Spalti
1ebaa65161 Fixed path for collection list. 2022-09-20 16:22:31 -07:00
Michael Spalti
e752ef74fb Merge branch 'main' into new-themes 2022-09-20 15:19:54 -07:00
Andrea Bollini
4be09885a2 Add label for the citation page curation task 2022-09-21 00:02:30 +02:00
Michael Spalti
76416fffa3 Merge branch 'main' into collection-thumbnail-embed 2022-09-20 11:25:00 -07:00
Tim Donohue
0f1b9bb817 Merge pull request #1803 from mark-cooper/browse-comm-lists-configurable
Make no. of communities per pagination / expansion configurable
2022-09-20 13:11:03 -05:00
Yury Bondarenko
b9ac08eba3 94485: Fix selectors for themed error pages 2022-09-20 16:25:08 +02:00
Yury Bondarenko
594b6d61c3 94485: Use relative path for theme CSS
This bug was originally fixed in #1642 but reintroduced in #1805
2022-09-20 16:25:08 +02:00
Yury Bondarenko
c844423fc3 94485: Fix initialization deadlock when backend is unavailable
When the REST server can't be found, `getEndpoint` errors out, no request gets sent, which causes `fetchRequest` to never emit.

Because of this the `checkTokenCookie$` effect would get deadlocked and initialization would never complete.
2022-09-20 16:15:13 +02:00
Jens Vannerum
bf5a8daa78 string changes after merge 2022-09-20 12:48:27 +02:00
Jens Vannerum
9371c0b3b7 Merge branch 'main' into w2p-94474_clarify-process-state
# Conflicts:
#	src/assets/i18n/de.json5
#	src/assets/i18n/es.json5
#	src/assets/i18n/lv.json5
#	src/assets/i18n/tr.json5
2022-09-20 12:42:54 +02:00
Jens Vannerum
81d3b1708f 94474: Clarify processing message 2022-09-20 12:40:42 +02:00
Giuseppe Digilio
5099d0b18a [CST-6153] Show i18n message instead of server error response 2022-09-20 11:41:09 +02:00
Giuseppe Digilio
f787491af4 [CST-6153] Fix issue with forgot password page 2022-09-20 11:33:37 +02:00
Alexandre Vryghem
87d9c28acc Merge branch 'main-upstream' into issue-1833_entity-title-refactor-main 2022-09-20 09:51:09 +02:00
Toni Prieto
86364ad375 Add test for SubmissionCcLicenseDataService 2022-09-20 09:28:16 +02:00
Mark Cooper
086bd4723b Resolve feedback
Inject environment rather than importing it
Redo the configuration for better consistency across pages
2022-09-19 15:14:07 -07:00
Mark Cooper
3e803e8411 Make no. of communities per pagination / expansion configurable
Adds new config settings for no. of communities to display on the
home page & community-list page.

Resolves #1749, resolves #1750
2022-09-19 14:29:50 -07:00
Mark H. Wood
043b92fbc7 Make sure pagination is initialized in derived classes. 2022-09-19 13:17:04 -04:00
Alexandre Vryghem
20ff386c6e 94481: Fixed tests 2022-09-19 19:07:13 +02:00
Toni Prieto
ed611c5716 Implement findAll function of SubmissionCcLicenseDataService 2022-09-19 18:49:30 +02:00
Mark H. Wood
5bdf911fc7 Specs must provide APP_CONFIG now. 2022-09-19 12:25:22 -04:00
Alexandre Vryghem
a4b9a6da1d 94481: Use DSONameService in all other remaining place where dc.title, person.familyName, person.givenName or organization.legalName is used 2022-09-19 18:24:34 +02:00
Alexandre Vryghem
80a1eed63c 94481: Replaced title on all single item pages 2022-09-19 18:24:34 +02:00
Giuseppe Digilio
4ca5571a2b [CST-6110] Remove check for password length 2022-09-19 18:09:05 +02:00
Mark H. Wood
bc1e49c783 Fix @Injectable/@Component conflict 2022-09-19 11:36:52 -04:00
Alexandre Vryghem
e4229e3993 94481: Use DSONameService to determine the title for the Item page 2022-09-19 17:14:57 +02:00
Tim Donohue
31167a3ce4 Merge pull request #1819 from kostisalex/feature/greek_support_in_frontend
Greek support for frontend
2022-09-19 10:05:40 -05:00
Giuseppe Digilio
ee46594b5b Merge remote-tracking branch 'origin/main' into CST-6110 2022-09-19 16:26:37 +02:00
Vincenzo Mecca
4484c3ebbc [CST-6782] Fixed failing tests 2022-09-19 16:26:31 +02:00
Giuseppe Digilio
ab745983aa Merge branch 'main' into CST-6153 2022-09-19 15:43:16 +02:00
Giuseppe Digilio
79f65f1d99 Merge branch 'main' into CST-6753_GA4 2022-09-19 15:39:59 +02:00
Giuseppe Digilio
34beb7d8da Merge branch 'main' into CST-6685 2022-09-19 15:33:02 +02:00
Kostis Alexandris
cd83ba4275 Merge pull request #1 from kstamatis/feature/greek_support_in_frontend
fix greek translations
2022-09-19 16:14:32 +03:00
Kostas Stamatis
4a30295df8 fix greek translations 2022-09-19 16:09:25 +03:00
Jens Vannerum
f84e4d6146 89685: Resolve wrong directory 2022-09-19 12:37:46 +02:00
Davide Negretti
36b8b8b61b Merge branch 'main-gh4s' into CST-6782-refactor
# Conflicts:
#	src/app/shared/cookies/browser-klaro.service.spec.ts
#	src/app/shared/cookies/browser-klaro.service.ts
2022-09-19 12:21:57 +02:00
Jens Vannerum
a17ee028df make search-settings.component themed 2022-09-19 11:56:04 +02:00
Jens Vannerum
898f23a997 Merge branch 'main' into w2p-89685_themed-search-settings-component
# Conflicts:
#	src/app/shared/search/search.module.ts
#	src/themes/custom/lazy-theme.module.ts
2022-09-19 11:20:51 +02:00
Jens Vannerum
dd2317699a make search-settings.component themed 2022-09-19 10:11:40 +02:00
Abhishek Raval
f87b83ad82 Add files via upload 2022-09-18 20:12:35 +05:30
Michael Spalti
d2d6554e26 Second-level browse thumbnails fixed. 2022-09-17 10:51:45 -07:00
Michael Spalti
eb48b1b204 Bug fix for browse. 2022-09-17 10:18:10 -07:00
Michael Spalti
41d1f5383f Added thumbnail property to browse entry model. 2022-09-16 17:33:20 -07:00
Tim Donohue
5e9bbbe06a Merge branch 'main' into feature/greek_support_in_frontend 2022-09-16 16:05:32 -05:00
Tim Donohue
927dfdad1c Merge pull request #1831 from tdonohue/enable_kazakh
Enable Kazakh translation by default
2022-09-16 16:04:01 -05:00
Kostis Alexandris
e1d3832d64 Remove double quotes 2022-09-16 23:38:17 +03:00
Tim Donohue
44c4f993f7 Enable Kazakh translation by default 2022-09-16 14:52:47 -05:00
Tim Donohue
f3d43b5745 Merge pull request #1297 from myrza1/patch-1
Kazakh Translation
2022-09-16 14:51:49 -05:00
Michael Spalti
cfff05b1da Minor style tweak 2022-09-16 12:43:05 -07:00
Tim Donohue
2a35329efa Merge pull request #1816 from 4Science/CST-6565
Cookie consent shows analytics usage also when GA is disabled
2022-09-16 14:33:20 -05:00
Michael Spalti
231b7e2c2e Added thumbnail followLinks for ds-edit-relationship-list 2022-09-16 12:27:16 -07:00
Yury Bondarenko
8d36de27d1 94207: Update DeleteDate to use buildFromRequestUUIDAndAwait 2022-09-16 20:56:42 +02:00
Yury Bondarenko
faaaad6bfb Merge remote-tracking branch 'atmire/PR-1548-fix-group-page-lists' into w2p-94207_Fix-resource-policy-cache-issues 2022-09-16 20:56:26 +02:00
Michael Spalti
4b62fb2db4 Added display:block for ds-listable-component-loader back into related-items scss; fixes veritcal spacing issue. 2022-09-16 10:26:15 -07:00
Michael Spalti
ccfa1410c2 Added embedThumbnail to FindListOptions. 2022-09-16 10:07:00 -07:00
Tim Donohue
06f3f8d31c Merge pull request #1814 from atmire/issue_1795_issue_1778_fix_config_issues
Repair config issues
2022-09-16 09:15:34 -05:00
Michael Spalti
7b47c22531 Minor css change 2022-09-16 02:18:47 -07:00
Yury Bondarenko
7de56a4f14 Fix unused import, remove resurrected data.service.ts 2022-09-16 10:44:43 +02:00
Yury Bondarenko
87a7baa2e8 Merge remote-tracking branch 'origin/main' into PR-1548-fix-group-page-lists 2022-09-16 10:33:58 +02:00
Vincenzo Mecca
16523c3c90 [#1816][CST-6565] Clearified expectation of test 2022-09-16 10:27:40 +02:00
Vincenzo Mecca
3cc4b96ff4 [#1816][CST-6565] Cleaned and Refactored specs 2022-09-16 10:08:13 +02:00
Tim Donohue
a2f8a5ccfa Merge pull request #1824 from atmire/w2p-94242_Add-optional-NavigationExtras-argument-to-PaginationService-methods
Add an optional `NavigationExtras` argument to `PaginationService.updateRoute`
2022-09-15 16:48:16 -05:00
myrza1
7c5887654a Іздеу нәтижелері қосылды 2022-09-16 03:08:45 +06:00
myrza1
85d44ad3d4 Update kk.json5
synced from last english
2022-09-16 02:58:25 +06:00
myrza1
4a573eb981 Delete kz.json5
deleted
2022-09-16 02:47:51 +06:00
Mark H. Wood
900dd31351 Get the environment by injection, as suggested. 2022-09-15 16:46:25 -04:00
myrza1
16b3cb8008 renamed to kk and added some translates 2022-09-16 02:21:01 +06:00
Michael Spalti
75da8ca10d Fixed tests after merge. 2022-09-15 13:20:33 -07:00
Michael Spalti
7047f9ccef Fixed merge issue. 2022-09-15 12:40:35 -07:00
Michael Spalti
c2da87e617 Merge branch 'main' into collection-thumbnail-embed 2022-09-15 12:31:46 -07:00
myrza1
3d5951eeb9 Merge branch 'DSpace:main' into patch-1 2022-09-16 00:56:53 +06:00
Michael Spalti
516300f3e5 Fixed a couple lint errors. 2022-09-15 11:52:13 -07:00
Félix Jolin-Nicol
fcae738db6 Fix for PR#1822 - Fix is in section-form-component.ts. Adjusted two equality checks for scope type which always returned false. 2022-09-15 14:48:57 -04:00
Tim Donohue
a13f4ee3b9 Merge pull request #1791 from atmire/w2p-93803_Refactor-DataServices-to-use-Composition
Refactor data services to use composition
2022-09-15 13:40:07 -05:00
Michael Spalti
46ecf287a4 Thumbnails fixed for relationships and added styling. 2022-09-15 11:40:00 -07:00
Tim Donohue
3665071dea Merge pull request #1820 from tdonohue/fix_test_to_read_all_data
Ensure `yarn test:rest` reads all JSON data, not just first chunk
2022-09-15 13:30:16 -05:00
Tim Donohue
bb31e1d25c Merge pull request #1801 from GauravD2t/main
Displaying Recent Submissions on the homepage
2022-09-15 13:27:12 -05:00
Davide Negretti
04c0690e8d Merge branch 'main-gh4s' into CST-6782-refactor 2022-09-15 15:41:30 +02:00
Yury Bondarenko
b2d34f0dad Merge remote-tracking branch 'atmire/PR-1548-fix-group-page-lists' into w2p-94207_Fix-resource-policy-cache-issues 2022-09-15 14:58:14 +02:00
Giuseppe Digilio
1df41deb8f [CST-6753] Remove unused occurrences of GoogleAnalytics 2022-09-15 14:36:09 +02:00
Giuseppe Digilio
70c6eac88d [CST-6753] Change google-analytics.service in order to use GoogleTagManager instead of GoogleAnalytics 2022-09-15 14:30:59 +02:00
Kostis Alexandris
1677349fbb More messages 2022-09-15 15:10:06 +03:00
Davide Negretti
70f2625d15 [UXP-10] e2e test fix 2022-09-15 13:57:06 +02:00
lotte
7cbac04072 Merge branch 'main' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-09-15 13:39:49 +02:00
Kostis Alexandris
aae3c217c5 More messages 2022-09-15 14:00:15 +03:00
Yury Bondarenko
6e5fe96696 94242: Add optional NavigationExtras to PaginationService.updateRoute 2022-09-15 11:50:50 +02:00
Kristof De Langhe
0f6fdceb45 Merge branch 'main' into w2p-93889_Invalidate-EPerson-when-their-group-change 2022-09-15 11:48:12 +02:00
Davide Negretti
183653112e [UXP-10] e2e test fixed 2022-09-15 10:40:59 +02:00
Michael Spalti
abe19b12bb Related entity thumbnails. 2022-09-14 16:33:25 -07:00
Kostis Alexandris
6360f89aac Refine messages 2022-09-15 00:08:43 +03:00
Michael Spalti
84ad250de6 New and updated tests.
Unused import.
2022-09-14 11:25:01 -07:00
Kostis Alexandris
c49d2f17a8 Refine messages 2022-09-14 21:20:22 +03:00
Kostis Alexandris
8953a3c50b Accepting @kstamatis comments 2022-09-14 20:41:34 +03:00
Vincenzo Mecca
59ce1a9950 [#1816][CST-6565] Refactored methods & Tests
Test:
    - New tests for the use case of filtering analytics configuration;
    - Enhanced initialization of service with new google analytics service mock.
2022-09-14 16:03:02 +02:00
Kostis Alexandris
a46098112e More changes 2022-09-14 15:17:49 +03:00
Kostis Alexandris
e7447071b1 More changes 2022-09-14 15:10:47 +03:00
Kostis Alexandris
cad4d1f101 More changes 2022-09-14 14:54:04 +03:00
Yury Bondarenko
c517ed0dfa 93803: Fix broken SearchDataImpl
I'd originally removed this `...linksToFollow` but it's actually required here because it's used when constructing the RemoteData

Added cypress/downloads to .gitignore because I'd accidentally committed a downloads.html file after running e2e tests locally
2022-09-14 10:48:15 +02:00
Art Lowel
7ca434b7bb change version to 7.4.0-next 2022-09-14 09:30:15 +02:00
Yury Bondarenko
919b406260 93803: Make ProcessDataService implement DeleteData 2022-09-14 09:00:08 +02:00
gaurav
ac2922e59d no recent submissions should be displayed if pageSize is 0 and changing the configuration structure 2022-09-14 11:35:29 +05:30
Michael Spalti
4fff311fe4 Ah those sneaky unused imports. 2022-09-13 14:59:55 -07:00
Michael Spalti
78358a4067 Multiple updates. 2022-09-13 14:26:37 -07:00
Tim Donohue
6d361beb88 Merge pull request #1815 from atmire/w2p-94322_fix-theme-matching-using-handles
94322: Fix theme matching using handles
2022-09-13 09:48:30 -05:00
Art Lowel
c94e5d0709 add startup message with version number 2022-09-13 16:39:58 +02:00
Samuel Cambien
59f9534418 issue #1778 repair yarn start:dev and yarn run serve 2022-09-13 16:39:31 +02:00
Samuel Cambien
44489fa4e0 repair #1795 Default settings in config/config.yml are ignored 2022-09-13 16:38:52 +02:00
Tim Donohue
916d7fc13d Merge pull request #1805 from atmire/w2p-92900_Admin_options_dont_appear_after_Shibboleth_authentication_PR
Admin options don't appear after Shibboleth authentication
2022-09-13 09:24:10 -05:00
Yury Bondarenko
cc697041eb Remove unused variable 2022-09-13 14:23:14 +02:00
Nikunj Sharma
c1498424f3 CST-6685 changes for import batch 2022-09-13 16:18:32 +05:30
Michael Spalti
db79d46a76 Unused import. 2022-09-12 13:13:56 -07:00
Tim Donohue
335d613df7 Ensure all data is read, not just first chunk 2022-09-12 12:53:03 -05:00
Yury Bondarenko
147c7180d0 93219: Add (more) reusable functions to test DataService composition
Data services that implement *Data interfaces should include the appropriate test functions in their specs.
These go over all methods in the interface & check that they're "wired up" correctly.

See e.g. the change in ExternalSourceDataService for an issue that is easy to miss but was highlighted by these new tests
2022-09-12 17:37:54 +02:00
Yury Bondarenko
8b4dbbad55 93219: Simplify DataService feature interfaces
Get rid of optional methods
- createPatchFromCache is useful -> make required
- leave getFindAllHref and getSearchByHref out & use implementation directly or refactor usages
2022-09-12 17:34:25 +02:00
Kostis Alexandris
6907e6a517 Changes in view and item buttons 2022-09-12 15:36:31 +03:00
Yury Bondarenko
c32e4ad7c7 93803: Add tests for create, search & put 2022-09-12 14:15:28 +02:00
Kostis Alexandris
a29a7f5883 Greek support for frontend 2022-09-12 15:02:03 +03:00
Yury Bondarenko
abc9bbeae3 Revert "93803: Update DataService constructor signatures"
This reverts commit a6fb4a6303.
2022-09-12 12:29:04 +02:00
Michael Spalti
7f9c34f08e A bit of padding for the placeholder. 2022-09-11 16:09:39 -07:00
Michael Spalti
989d243c8e Pooled task thumb and unused imports. 2022-09-11 14:49:02 -07:00
Michael Spalti
b692fa5924 Added thumbs to mydspace and enviroment component injection. 2022-09-11 13:27:20 -07:00
Michael Spalti
06a68ece9d Added anchors for entity-type thumbs. 2022-09-09 14:53:56 -07:00
Michael Spalti
8ff9f81247 Minor comment update to configs. 2022-09-09 14:28:52 -07:00
Michael Spalti
aad0085d61 Fixed wayward css class. 2022-09-09 14:20:50 -07:00
Michael Spalti
9218c0545f Added specs. 2022-09-09 13:44:25 -07:00
Michael Spalti
ccb4c0794c Updated configuration. 2022-09-09 10:34:17 -07:00
Michael Spalti
580986adae Updates to thumbnail and placeholder fonts 2022-09-09 10:14:43 -07:00
Davide Negretti
b02826d24d [UXP-10] Removed unused import 2022-09-09 18:51:58 +02:00
Davide Negretti
ac34a7893b Merge branch 'main-ghds' into CST-6782-refactor 2022-09-09 18:36:08 +02:00
Davide Negretti
e57970349d [UXP-10] Test fixed 2022-09-09 18:22:54 +02:00
Davide Negretti
89a7320823 [UXP-10] Refactoring - Disable button fix 2022-09-09 17:45:46 +02:00
Davide Negretti
6dfc5ef2f5 [UXP-10] Handle captcha expiration 2022-09-09 17:04:01 +02:00
Yury Bondarenko
13d33d802f Fix admin search grid element specs 2022-09-09 17:03:02 +02:00
Davide Negretti
8af725e76f [UXP-10] Refactoring WIP 2022-09-09 16:32:23 +02:00
Yana De Pauw
06e34355c3 Merge remote-tracking branch 'upstream/main' into w2p-94322_fix-theme-matching-using-handles 2022-09-09 14:44:48 +02:00
Davide Negretti
895e44a25f [UXP-10] Disable button - Error handling - Notifications 2022-09-09 13:19:07 +02:00
Davide Negretti
97a12cae47 [UXP-10] Notify unaccepted cookies - Fixes 2022-09-08 20:06:36 +02:00
Yury Bondarenko
293ba8408e 94273: Make isAuthorized depend on the target object
This ensures that a successful ItemDataService.setWithdrawn call invalidates all related authorizations
2022-09-08 19:54:00 +02:00
Yury Bondarenko
7c13db2f89 94273: Invalidate object on successful patch 2022-09-08 19:54:00 +02:00
Yury Bondarenko
d40f163c49 94273: Implement dependencies between requests
When an object is invalidated, its dependent requests are invalidated as well
2022-09-08 19:54:00 +02:00
Giuseppe Digilio
acfd01e774 Merge branch 'main' into CST-6153 2022-09-08 18:02:03 +02:00
Yury Bondarenko
2ac0bcdc98 Merge remote-tracking branch 'origin/main' into w2p-92900_Admin_options_dont_appear_after_Shibboleth_authentication_PR 2022-09-08 17:53:04 +02:00
Giuseppe Digilio
18dda8c44e Merge branch 'CST-6565' of bitbucket.org:4Science/dspace-angular into CST-6565
 Conflicts:
	src/app/shared/cookies/browser-klaro.service.ts
2022-09-08 17:24:45 +02:00
Giuseppe Digilio
606663dd76 [CST-6565] fix lint 2022-09-08 17:21:57 +02:00
Vincenzo Mecca
4f2f70f851 [CST-6565] Fixed linting 2022-09-08 17:20:45 +02:00
Davide Negretti
05784bfec6 [UXP-10] Fix remove Recaptcha from klaro config 2022-09-08 17:14:14 +02:00
Davide Negretti
0b7cf23e3f [UXP-10] Fix onInit script 2022-09-08 16:52:43 +02:00
Vincenzo Mecca
032a276494 [CST-6565] Fixed configuration loading
ref:
    - refactored property loading and mapping
    - refactored klaro initialisation
fix:
    - now initialisation waits for google-analytics api keys.
2022-09-08 16:42:10 +02:00
Kristof De Langhe
4ddc4b7541 Merge branch 'main' into w2p-94310_SearchEvents-bugfix-main 2022-09-08 15:41:54 +02:00
Tim Donohue
e7dc5f8d14 Merge pull request #1797 from tdonohue/fix_line_endings
Force all code to use LF line endings in .gitattibutes
2022-09-08 08:35:59 -05:00
Kristof De Langhe
24189c4ce0 94310: Track search with service method instead of tracking component 2022-09-08 14:53:22 +02:00
Yury Bondarenko
8622e4c059 Fix LGTM alerts 2022-09-08 13:07:36 +02:00
Giuseppe Digilio
877659a7c8 Merge branch 'main' into CST-6565
# Conflicts:
#	src/app/shared/cookies/browser-klaro.service.ts
2022-09-08 12:12:31 +02:00
Yury Bondarenko
f8404c540e 94207: Extract 'wait for invalidation' pattern into a new method 2022-09-08 12:10:44 +02:00
Michael Spalti
9e14985fc5 Work on columns 2022-09-07 10:47:37 -07:00
Michael Spalti
2c63245050 Unused import. 2022-09-07 10:47:37 -07:00
Michael Spalti
37e79ddc69 Updated example config. 2022-09-07 10:47:37 -07:00
Michael Spalti
d01bfe2cb1 Added global config for list thumbnails 2022-09-07 10:47:37 -07:00
Michael Spalti
56c8c8c370 Initial work on browse with thumbs. 2022-09-07 10:47:37 -07:00
Tim Donohue
aafe3543d8 Merge pull request #1759 from 4Science/CST-6035_external-provider-query-error
External provider query error
2022-09-07 12:13:56 -05:00
Davide Negretti
db6c8f00a8 [UXP-10] Fix headers 2022-09-07 19:01:54 +02:00
Tim Donohue
cd1d409577 Merge pull request #1792 from atmire/w2p-93914_delete-process
Add delete process functionality
2022-09-07 11:29:55 -05:00
Yura Bondarenko
744bcae3f2 94031: Hide error messages of concat field inputs
Hint/error is shown at the group level, shouldn't be repeated in the inner inputs
2022-09-07 18:20:13 +02:00
Yura Bondarenko
5a0ad41bfd 94301: Trickle down errors to concat field inputs
When a concat group is marked as invalid ~ server error, its fields should also be marked as invalid
2022-09-07 18:19:35 +02:00
Yura Bondarenko
d88352f513 94031: Fix findById for concat fields
As far as I can tell the suffix is never used with a numeric part, causing this branch to always miss concat group fields
2022-09-07 18:18:34 +02:00
Davide Negretti
05ec096ec9 Merge branch 'main-gh4s' into CST-6782-refactor
# Conflicts:
#	src/app/app.component.ts
2022-09-07 18:09:35 +02:00
Davide Negretti
b6d6091c87 [UXP-10] Code refactoring 2022-09-07 18:02:23 +02:00
Tim Donohue
e523583f1f Merge pull request #1779 from mwoodiupui/themeable-dialogs
Make create, edit community/collection/item dialogs theme-able.
2022-09-07 10:36:47 -05:00
Tim Donohue
e5165c151c Merge pull request #1741 from atmire/w2p-93219_Consolidate-all-initialization-in-a-single-Service_PR
Consolidate all initialization in a single Service
2022-09-07 09:25:51 -05:00
Yana De Pauw
28fff891d2 94322: Fix theme matching using handles 2022-09-07 15:34:16 +02:00
Yura Bondarenko
527fb134b9 Merge branch 'main' into w2p-92282_Fix-missing-auth-tokens-when-retrieving-Bitstreams 2022-09-07 09:48:19 +02:00
Mark H. Wood
ba2f173199 Address review: add missing templates, commented references to them, reference original templates by default. 2022-09-06 13:56:04 -04:00
lotte
8ca4da47da Merge branch 'w2p-94060_Issue-1720_MyDSpace-support-entities_7.2' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-09-06 15:34:54 +02:00
lotte
d89020a712 Merge branch 'w2p-94060_Issue-1720_MyDSpace-support-entities_7.0' into w2p-94060_Issue-1720_MyDSpace-support-entities_7.2 2022-09-06 15:34:14 +02:00
lotte
f15440ca5a 94060: Fixed test issues 2022-09-06 15:33:56 +02:00
lotte
d463ea5893 Merge branch 'w2p-94060_Issue-1720_MyDSpace-support-entities_7.2' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-09-06 14:17:33 +02:00
Nikunj Sharma
66380857c9 CST-6153 updated lint error 2022-09-06 17:02:25 +05:30
Nikunj Sharma
77d0600453 Merge remote-tracking branch 'origin/main' into CST-6153 2022-09-06 16:50:43 +05:30
lotte
66b5398d91 Merge branch 'w2p-94060_Issue-1720_MyDSpace-support-entities_7.0' into w2p-94060_Issue-1720_MyDSpace-support-entities_7.2 2022-09-06 10:11:49 +02:00
lotte
3c5fe8e098 94060: added fallback titles for person and orgunit list elements 2022-09-06 10:11:23 +02:00
Yura Bondarenko
a6fb4a6303 93803: Update DataService constructor signatures
Override linkPath/responseMsToLive/constructIdEndpoint
  - in class body for inheritable classes (for clarity: it's the first thing you'd read, variable name is right there)
  - in constructor for composable classes
    * wrapped services must be 'synchronized' with their wrapper
    * moved these overrides up in the argument list for emphasis (implementing a new composable feature? first thing is to use the same endpoint!)
2022-09-05 12:30:41 +02:00
Yura Bondarenko
38203490c7 93803: Add missing docstrings 2022-09-05 11:37:57 +02:00
Mark H. Wood
236216b556 Document that setting will be rounded to one of the settings options. 2022-09-02 16:20:51 -04:00
Mark H. Wood
e6f363a0f6 Merge remote-tracking branch 'upstream/main' into browse-pagesize 2022-09-02 15:23:50 -04:00
Mark H. Wood
1f1b04e88f Fix lint issues, incorrect selector copied from local code. 2022-09-02 12:04:01 -04:00
Mark H. Wood
9f609a2966 Add themed components to shared module and 'custom' theme. 2022-09-02 11:53:10 -04:00
Nikunj Sharma
458a721c08 CST-6110 updated password messages 2022-09-02 18:00:14 +05:30
Yura Bondarenko
030b1c33db 94207: Extract RP entries into a separate component 2022-09-02 13:49:32 +02:00
Yura Bondarenko
47b9b09139 94207: Fix ResourcePolicyService.updateTarget
Follow "await invalidation" pattern ~ DataService.deleteByHref
2022-09-02 13:49:32 +02:00
Yura Bondarenko
a8cf6df03f Merge branch 'w2p-93889_Invalidate-EPerson-when-their-group-change' into w2p-94207_Fix-resource-policy-cache-issues 2022-09-02 11:36:49 +02:00
Sufiyan Shaikh
b72b37a647 [UXP-10] remove configuration fixed 2022-09-02 14:43:59 +05:30
Sufiyan Shaikh
6d1d7c3611 [UXP-10] property check fixed 2022-09-02 14:43:43 +05:30
Sufiyan Shaikh
bcc747dc3e [UXP-10] klaro cookies permission and test cases 2022-09-02 14:42:28 +05:30
Sufiyan Shaikh
e295dccc8a [UXP-10] dynamic recaptcha versions and modes 2022-09-02 14:41:40 +05:30
Sufiyan Shaikh
fcad492a25 [UXP-10] token passing in header 2022-09-02 14:39:08 +05:30
Sufiyan Shaikh
2ef701a231 remove site key from environment 2022-09-02 14:38:27 +05:30
Sufiyan Shaikh
0953806865 script insert and test cases with dynamic site key 2022-09-02 14:38:08 +05:30
Sufiyan Shaikh
4906516359 [UXP-10] typdocs and tests 2022-09-02 14:34:28 +05:30
Sufiyan Shaikh
0783cd5cb6 [UXP-10] compacting code 2022-09-02 14:34:20 +05:30
Sufiyan Shaikh
a3eb544422 [UXP-10] Review fixes 2022-09-02 14:34:12 +05:30
Sufiyan Shaikh
2532e37010 [UXP-10] Test cases 2022-09-02 14:34:03 +05:30
Sufiyan Shaikh
50e849dd44 [UXP-10] reCAPTCHA angular component 2022-09-02 14:33:17 +05:30
Yura Bondarenko
77eb6c1807 Remove unused imports 2022-09-02 10:11:05 +02:00
Nikunj Sharma
38c1214117 Merge remote-tracking branch 'origin/main' into CST-6110 2022-09-02 13:17:59 +05:30
Tim Donohue
342a712513 Merge pull request #1790 from arvoConsultores/main
Spanish translation updated
2022-09-01 13:47:35 -05:00
lotte
1c3c275209 Merge branch 'w2p-94060_Issue-1720_MyDSpace-support-entities_7.2' into w2p-94060_Issue-1720_MyDSpace-support-entities 2022-09-01 19:19:10 +02:00
lotte
9ba2807b43 Merge branch 'w2p-94060_Issue-1720_MyDSpace-support-entities_7.0' into w2p-94060_Issue-1720_MyDSpace-support-entities_7.2 2022-09-01 19:06:42 +02:00
lotte
72e5909b71 94060: MyDSpace Workflow/Workspace item display as correct entity types 2022-09-01 19:02:19 +02:00
Art Lowel
95e8346228 Merge remote-tracking branch 'atmire-github/w2p-93219_Consolidate-all-initialization-in-a-single-Service_PR' into w2p-93889_Invalidate-EPerson-when-their-group-change 2022-09-01 15:03:21 +02:00
Kristof De Langhe
ac8688ea79 94072: test cases 2022-09-01 12:02:20 +02:00
Tim Donohue
eee0d72345 Merge pull request #1786 from hardyoyo/enable-responsive-font-sizes
Enable responsive font sizes
2022-08-31 16:34:54 -05:00
Kristof De Langhe
18c208f6a4 94072: Group page list issue fixes 2022-08-31 18:02:36 +02:00
gaurav
0840bfd8ce bug resolve 2022-08-31 17:20:17 +05:30
gaurav
bcc71ce2e1 Trailing spaces remove 2022-08-31 12:44:47 +05:30
gaurav
01daf93d01 Displaying Recent Submissions on the homepage 2022-08-31 11:14:43 +05:30
corrad82
310237d30f [CST-6035] updated test description and used example.com domain in test urls 2022-08-30 12:00:27 +02:00
corrad82
e9894c91aa Merge remote-tracking branch 'origin/main' into CST-6035_external-provider-query-error 2022-08-30 11:41:04 +02:00
Nikunj Sharma
c4a163e169 Merge remote-tracking branch 'origin/main' into CST-6153 2022-08-30 14:15:55 +05:30
Pierre Lasou
fa20e9e5c0 Adding missing language parameters 2022-08-26 13:34:27 -04:00
Tim Donohue
b891ae0237 End-of-line normalization for some files 2022-08-26 11:36:51 -05:00
Tim Donohue
795870d712 Update gitattributes to force LF line endings for code 2022-08-26 11:35:44 -05:00
Art Lowel
154d66f1e8 remove unused imports 2022-08-26 11:25:07 +02:00
Yura Bondarenko
ed9570e7cc Merge remote-tracking branch 'origin/main' into w2p-92900_Admin_options_dont_appear_after_Shibboleth_authentication_PR 2022-08-25 18:32:59 +02:00
Yura Bondarenko
f154318855 Merge remote-tracking branch 'atmire/w2p-93219_Consolidate-all-initialization-in-a-single-Service_PR' into w2p-92900_Admin_options_dont_appear_after_Shibboleth_authentication_PR 2022-08-25 18:32:47 +02:00
Tim Donohue
c1f6993144 Merge pull request #1777 from atmire/w2p-93665_fix-pagintion-in-metadata-browse-links
Fix pagination in metadata browse links
2022-08-25 11:22:04 -05:00
Yura Bondarenko
c5d3776df7 93492: Fix SSR dodging pinned admin sidebar
On the server, @slideSidebarPadding always resolved to 'expanded' because slideSidebarOver did not emit true
This resulted in the SSR HTML leaving space for the expanded sidebar.

Also got rid of the sliding animation as it would always play, even when replacing SSR HTML where the sidebar was already visible.
2022-08-25 18:05:13 +02:00
lotte
317c615b30 Fixed lgtm issue 2022-08-25 17:12:57 +02:00
Yana De Pauw
72852dd031 Fix test 2022-08-25 17:05:34 +02:00
Yura Bondarenko
ee26084d6a Fix unused imports 2022-08-25 15:53:13 +02:00
Yura Bondarenko
a77b1da804 92900: Patch start:dev CLI arguments through to ng serve 2022-08-25 15:44:27 +02:00
Yana De Pauw
d5605e43d4 Merge remote-tracking branch 'upstream/main' into w2p-93914_delete-process 2022-08-25 15:34:00 +02:00
Yana De Pauw
ca341e53b4 Close modal on process delete success 2022-08-25 15:33:23 +02:00
Yura Bondarenko
db169251df 92900: Update docs & specs for AuthRequestService 2022-08-25 14:03:59 +02:00
Yura Bondarenko
e464c0f8c7 92900: Move duplicate code to new InitService method 2022-08-25 14:03:58 +02:00
Sergio Fernández Celorio
528c4c31ea Spanish translation updated 2022-08-25 11:41:24 +00:00
Yura Bondarenko
fbaab69121 93803: Ensure data services are called *DataService 2022-08-25 10:28:45 +02:00
Yura Bondarenko
05b131edb9 93803: Rename findAllByHref to findListByHref
To avoid confusion with FindAllData:
- findAll is a "feature" to retrieve all resources from the endpoint itself ~ a plain GET
- findAllByHref is retrieves lists of resources in general
2022-08-25 10:28:45 +02:00
Yura Bondarenko
ad316f7316 93803: Resolve circular dependency
src/app/core/cache/builders/build-decorators.ts > src/app/core/data/base/hal-data-service.interface.ts > src/app/core/data/paginated-list.model.ts
2022-08-25 10:28:44 +02:00
Yura Bondarenko
a76555c518 93803: Stricter typing for dataService decorator & LinkService
The initial idea was to type dataService decorator strictly to BaseDataService.
However, HrefOnlyDataService should not expose methods other than findByHref & findAllByHref, but must still work with LinkService.

To address this we introduce HALDataService: an interface with the minimal requirements for a data service to work with HAL links
- dataService decorator can only decorate a class that implements HALDataService
- services retrieved from DATA_SERVICE_FACTORY should therefore work in LinkService
2022-08-24 19:03:19 +02:00
Yura Bondarenko
cd4ed018dd 93803: Remove legacy DataService class 2022-08-24 19:03:19 +02:00
Yura Bondarenko
42a2c3c7e2 93803: Refactor existing data services 2022-08-24 19:03:19 +02:00
Yura Bondarenko
8f4b3b58fb 93803: Make data services composable
Data services should extend BaseDataService (or IdentifiableDataService) for low-level functionality and optionally wrap "data service feature" classes for
- create
- findAll
- patch / update
- put
- delete
2022-08-24 19:03:18 +02:00
Tim Donohue
9a5a7c1306 Merge pull request #1788 from tdonohue/enable_swedish
Enable Swedish language
2022-08-24 11:37:48 -05:00
Tim Donohue
cb4620e536 Enable Swedish language 2022-08-24 10:42:37 -05:00
Urban Andersson
bd4190d4fc Swedish language file for DSpace 7 (#1673)
* Added Swedish language file

* Small fix

* Added translations

* Added translations

* More translations

* Translations

* Translations

* Translations

* Translations

* Translations

* Translations

* More Swedish translations

* Corrections to Swedish translations

* Corrections to Swedish translations

* Minor language fixes

* Minor changes to Swedish translation

* Restored tr.json5
2022-08-24 10:39:06 -05:00
Tim Donohue
282d0a770d Merge pull request #1768 from atmire/w2p-93882_Moved-3rd-party-css-imports-to-seperate-file
Moved 3rd party css imports to separate file
2022-08-24 10:21:03 -05:00
Hardy Pottinger
50828e9c06 Enable responsive font sizes
- adds enable-responsive-font-sizes toggle to the main bootstrap
  variables scss file
- [docs available](https://getbootstrap.com/docs/4.4/content/typography/#responsive-font-sizes)
2022-08-23 15:17:40 -05:00
Art Lowel
4b20b0cb81 force initservices to wait until authentication is no longer blocking 2022-08-23 17:50:46 +02:00
Sufiyan Shaikh
cacce82b0a [CST-6565] check fixed 2022-08-22 17:03:55 +05:30
Sufiyan Shaikh
53dcd48e98 [CST-6565] path and check fixes 2022-08-22 15:28:55 +05:30
Mark H. Wood
b2feadc290 Satisfy lint. 2022-08-19 16:47:10 -04:00
Mark H. Wood
5ed369d097 Make create, edit community/collection/item dialogs theme-able. 2022-08-19 16:23:20 -04:00
Tim Donohue
ca4f2cc5c0 Merge pull request #1756 from atmire/Admin-export-all-fields
Add admin option to export all fields in the metadata export
2022-08-19 13:10:48 -05:00
lotte
78598dc1b5 93665: Fixed lint issue 2022-08-19 11:15:37 +02:00
lotte
606995881f 93665: fixes for post 7.2 and updated back button for browse by pages 2022-08-19 11:05:08 +02:00
Yana De Pauw
f8e1db4987 93914: Add the ability to delete processes 2022-08-18 14:04:59 +02:00
corrado lombardi
8c40ed42da [CST-6110] fix lint error 2022-08-18 09:33:39 +02:00
Tim Donohue
d9facf5fb7 Merge pull request #1773 from tdonohue/fix_gendered_lang
Remove/replace gendered language in code comments
2022-08-17 14:55:18 -05:00
Tim Donohue
35614d1473 Replace gendered language with generic equivalent 2022-08-17 14:12:33 -05:00
Alexandre Vryghem
d7fc14aba3 93889: Fixed issue with DataService.deleteByHref where the success response would not be emitted if it were set to stale first 2022-08-17 16:09:14 +02:00
Alexandre Vryghem
762f8930b7 93889: Invalidate EPerson when their Groups change and groups when a subgroup is added 2022-08-17 16:04:51 +02:00
Nikunj Sharma
904c6168a8 CST-6110 changes for robust error message changed and clear message on paasword update 2022-08-17 13:39:09 +05:30
Mark H. Wood
7a3284f6bc Make the size of a browse result page configurable. 2022-08-16 16:32:38 -04:00
Nikunj Sharma
14dfba8118 Merge remote-tracking branch 'origin/main' into CST-6110 2022-08-16 17:53:08 +05:30
Alexandre Vryghem
c602a22f6c 93882: Move 3rd party css imports to separate file 2022-08-16 10:42:57 +02:00
lotte
27bb45b1bd Merge branch 'w2p-93665_fix-pagintion-in-metadata-browse-links-7.2' into w2p-93665_fix-pagintion-in-metadata-browse-links 2022-08-12 11:55:04 +02:00
lotte
092b3d862a 93665: fixed pagination in metadata browse links 2022-08-12 11:35:30 +02:00
Yana De Pauw
17ab269e25 Remove console log 2022-08-11 09:43:19 +02:00
corrado lombardi
a2e8b2a61c CST-6035 updated test 2022-08-10 18:49:01 +02:00
nikunj59
967f4a99b9 CST-6035 handled import query error 2022-08-10 17:18:08 +02:00
Tim Donohue
f6d2014bf4 Merge pull request #1751 from DSpace/dependabot/npm_and_yarn/moment-2.29.4
Bump moment from 2.29.2 to 2.29.4
2022-08-09 13:18:47 -05:00
Tim Donohue
5342d0921d Merge pull request #1715 from atmire/w2p-92701_issue-1506-gdpr-privacy-config
Option to disable gdpr / privacy statements
2022-08-09 09:40:59 -05:00
Yura Bondarenko
ba7ecf432b Add TypeDocs to ThemeService 2022-08-09 16:04:29 +02:00
Yura Bondarenko
4870d818f6 Fix license header 2022-08-09 15:47:19 +02:00
Sufiyan Shaikh
8dc356a658 Merge branch 'main' of bitbucket.org:4Science/dspace-angular into CST-6565 2022-08-09 15:20:00 +05:30
Sufiyan Shaikh
bf48971047 [CST-6565] LYRASIS7: Cookie consent shows analytics usage also when GA is disabled 2022-08-09 15:10:59 +05:30
Yana De Pauw
9e67b7f7a5 93657: Add admin option to export all fields in the metadata export 2022-08-09 11:25:32 +02:00
Nikunj Sharma
2d7b5768bf CST-6153 changes for challange sign update 2022-08-09 13:25:03 +05:30
Tim Donohue
2e59e1e775 Merge pull request #1742 from yingjin/DS-1730
fix missing space between author names MyDspace our submissions #1730
2022-08-08 16:05:59 -05:00
dependabot[bot]
ed0204ab9c Bump moment from 2.29.2 to 2.29.4
Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-08 15:56:19 +00:00
Tim Donohue
0bc31fc48e Merge pull request #1734 from DSpace/dependabot/npm_and_yarn/terser-4.8.1
Bump terser from 4.8.0 to 4.8.1
2022-08-08 10:55:46 -05:00
Nikunj Sharma
f203f27e53 Merge remote-tracking branch 'origin/main' into CST-6153 2022-08-08 14:03:32 +05:30
Jens Vannerum
4dcf6a345a 92701: Fix privacy string for klaro and add documentation 2022-08-05 13:12:52 +02:00
Michael Spalti
f4c0f79288 Lint errors. 2022-08-04 12:10:45 -07:00
Michael Spalti
2ac8d4140f Html template updated. 2022-08-04 11:24:15 -07:00
Michael Spalti
7afa4dcd8d New themable components 2022-08-04 11:21:14 -07:00
Jens Vannerum
f2e977c402 92701: Redirect / dead link fixes 2022-08-03 15:15:45 +02:00
Ying Jin
3d5f7bb061 fix missing space between author names MyDspace our submissions #1730 2022-07-31 17:25:53 -05:00
Yura Bondarenko
250043fde8 Fix LGTM issues 2022-07-29 16:58:11 +02:00
Yura Bondarenko
4403555c29 Merge remote-tracking branch 'origin/main' into w2p-93219_Consolidate-all-initialization-in-a-single-Service 2022-07-29 16:42:21 +02:00
Yura Bondarenko
ca87f09625 Update specs 2022-07-29 15:51:23 +02:00
Tim Donohue
bfbe38974b Merge pull request #1724 from atmire/w2p-93011_Fix-researcher-profile-cache-issue
Fix researcher profile cache issue
2022-07-28 10:03:31 -05:00
Tim Donohue
f80e72df9a Merge pull request #1708 from toniprieto/translate-accept-license-step
Make label and error messages for license-step accept-checkbox translatable
2022-07-27 15:54:53 -05:00
Tim Donohue
6b36412f6c Merge pull request #1674 from atmire/w2p-91272_Add-themed-components-to-upstream-branch
Add more themed components
2022-07-27 13:53:29 -05:00
Yura Bondarenko
67b4cce25d 92319: Move Klaro & GA steps to BrowserInitService 2022-07-26 09:51:59 +02:00
Alexandre Vryghem
c7a88f99d6 Center expandable navbar section in header 2022-07-26 00:34:19 +02:00
Tim Donohue
4da017a0ee Merge pull request #1735 from saschaszott/german-translations
fixed minor typo in German translation
2022-07-22 09:45:42 -05:00
Yura Bondarenko
5ff80a8a02 93219: Fold DSpaceTransferState into InitService 2022-07-22 14:25:22 +02:00
Yura Bondarenko
bdc004f64d 93219: Move theme/route subscriptions from AppComponent to ThemeService 2022-07-22 14:25:22 +02:00
Yura Bondarenko
5cb737c7f2 93219: Move general initialization from AppComponent to InitService 2022-07-22 14:25:22 +02:00
Yura Bondarenko
372cddfd5e 93219: Support Router in InitService
For Router to work properly, APP_BASE_HREF must be resolved _before_ the APP_INITIALIZER factory is called (otherwise Angular will attempt to initialize APP_BASE_HREF too soon)
To fix this we add a pre-initialization hook to APP_CONFIG so BrowserInitService can resolve it before APP_INITIALIZER
2022-07-22 14:25:22 +02:00
Sascha Szott
7b48e7c91f fixed typo 2022-07-21 12:02:07 +02:00
dependabot[bot]
577a92bc6b Bump terser from 4.8.0 to 4.8.1
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-21 02:25:52 +00:00
Yura Bondarenko
39c2aa85ec 93219: Move APP_INITIALIZER logic into InitService 2022-07-18 15:58:07 +02:00
lotte
0ef2be6693 Merge branch 'make-collections-item-page-input_contribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-07-15 11:42:00 +02:00
lotte
e9372395f4 make collections on item page into an input 2022-07-15 11:41:38 +02:00
Tim Donohue
ea67a15784 Merge pull request #1709 from ybnd/Filter-webpack-warnings
Filter webpack warnings
2022-07-13 16:21:56 -05:00
Tim Donohue
13266ecf42 Merge pull request #1718 from Ianvdl/main
Rewrite English wording for the "Forgot password" page
2022-07-13 16:15:29 -05:00
Tim Donohue
0d582e5160 Merge pull request #1689 from pilasou/main
New french translations for some parameters.
2022-07-13 16:14:59 -05:00
Yura Bondarenko
517aee0e8c 93011: Make sure invalidateByHref doesn't track cache state 2022-07-11 18:41:53 +02:00
Yura Bondarenko
5013890b35 93011: Add test for invalidateByHref cache state tracking
This test is expected to fail and is be fixed in the next commit.

Currently, invalidateByHref calls keep tracking the cache and may cause objects to be invalidated a second time as soon as the cache is updated.

Practical example:
  1. DELETE request
      → object is invalidated
  2. POST request related to the same object
      → UUID of pending request is added to the object's cache entry
      → gets picked up by the previous invalidateByHref call
      → the request is set to stale even before it's completed
2022-07-11 18:40:41 +02:00
myrza1
2d9e5b43ac Update kz.json5
added title prefix
2022-07-11 15:07:43 +06:00
myrza1
612f8f25da Update kz.json5
changed paginations
2022-07-08 01:46:52 +06:00
Pierre Lasou
02f309756d Remove parameter from en.json5
Remove parameter "bitstream-request-a-copy.legal.warning" suggested in previous commit (72832e5e12) as development to include it on the request a copy page has not been made.
2022-07-04 13:33:24 -04:00
Pierre Lasou
e0e9450f93 Removing parameter in fr.json5
Remove parameter bitstream-request-a-copy.legal.warning suggested in previous commit (977dbb38ef) as development to include it on the request a copy page has not been made.
2022-07-04 13:30:55 -04:00
Pierre Lasou
4a4578474a Update of fr.json5 after review comments
Following conversation with @mhvezina (https://github.com/DSpace/dspace-angular/pull/1689#issuecomment-1167372663), I removed all initially suggested french translation of "MyDSpace".
2022-07-04 12:20:50 -04:00
Alexandre Vryghem
0c1015dd58 Merge branch 'main' into w2p-91272_Add-themed-components-to-upstream-branch 2022-07-04 14:25:57 +02:00
Tim Donohue
fae355a713 Merge pull request #1717 from tdonohue/fix_1714
Cleanup descriptions in comments of example config to clarify "ui" and "rest" sections
2022-07-01 16:07:15 -05:00
ivdl
7ab5354ab8 Rewrite English wording for the "Forgot password" page 2022-07-01 22:23:49 +02:00
Tim Donohue
df00137c55 Cleanup descriptions in comments of example config 2022-07-01 11:55:10 -05:00
Pierre Lasou
72832e5e12 New parameter for request a copy
Addition of a new language parameter to be used in the request a copy page to warm the user that he/she is about to ask for a restricted document and its use is for private use only.
2022-06-30 13:40:40 -04:00
Pierre Lasou
977dbb38ef Update fr.json5 2022-06-30 13:35:28 -04:00
Pierre Lasou
4290e54b02 Merge branch 'DSpace:main' into main 2022-06-30 13:24:17 -04:00
nikunj59
10bbb01a44 CST-6153 added error msg for required field of security form 2022-06-30 16:36:34 +05:30
nikunj59
993bb54cfd Merge remote-tracking branch 'origin/main' into CST-6153 2022-06-29 16:55:43 +05:30
Tim Donohue
fd356d4ca7 Copying updates from DSpace/DSpace#8382 2022-06-28 09:48:35 -05:00
Yura Bondarenko
222a12bbba Make RegisterEmailComponent themeable 2022-06-28 11:19:04 +02:00
Yura Bondarenko
7b4716c439 Filter Webpack warnings 2022-06-28 10:55:12 +02:00
nikunj59
36560e0e65 CST-6153 added test case 2022-06-27 20:24:46 +05:30
Jens Vannerum
1b5c801d06 92701: Disable user agreement feature 2022-06-27 16:24:16 +02:00
Jens Vannerum
900354112a Merge branch 'main' into w2p-92701_issue-1506-gdpr-privacy-config
# Conflicts:
#	src/app/info/info-routing.module.ts
#	src/config/app-config.interface.ts
#	src/config/default-app-config.ts
#	src/environments/environment.test.ts
2022-06-27 14:58:25 +02:00
Jens Vannerum
4de5ab0f56 92701: Disable user agreement feature 2022-06-27 13:47:19 +02:00
Toni Prieto
5ee4c6b61b Make label and error messages for license-step accept-checkbox translatable 2022-06-26 17:00:08 +02:00
nikunj59
bde52ba4b4 Merge remote-tracking branch 'origin/main' into CST-6153 2022-06-24 20:25:47 +05:30
Tim Donohue
b9d3855c74 Merge pull request #1703 from tdonohue/comcol_handle_display
Add spacing before handle on comcol pages
2022-06-24 09:51:21 -05:00
Tim Donohue
9bf0320b16 Merge pull request #1707 from atmire/fix-1705
Fix curation tasks started from the edit community or collection page
2022-06-24 09:48:38 -05:00
Art Lowel
b55e4327a8 fix issue where curation tasks wouldn't work for collections and communities because the handle was in the wrong format 2022-06-24 16:03:54 +02:00
nikunj59
9e2a682a51 CST-6153 changes for current password field introduce 2022-06-24 19:26:30 +05:30
Tim Donohue
377ac3ab84 Add spacing before handle on comcol pages 2022-06-23 14:54:12 -05:00
Tim Donohue
e0109b947c Merge pull request #1701 from saschaszott/german-translations
added missing German translations; fixed typos
2022-06-23 11:31:14 -05:00
Tim Donohue
f4c6284c23 Merge pull request #1698 from 4Science/CST-6174-access-conditions-fix
Submission item/bitstream access conditions fixes
2022-06-23 11:24:20 -05:00
Sascha Szott
79c97c94a2 fixed submission.workflow.generic.delete-help 2022-06-23 17:05:32 +02:00
Sascha Szott
cfca5c8ca1 fixed admin.registries.schema.fields.table.delete 2022-06-23 16:56:43 +02:00
Sascha Szott
5a7ba93e50 added browse.title.page 2022-06-23 14:46:40 +02:00
Sascha Szott
78f4096ab4 removed prefix "DSpace Angular ::" in various translation keys; use repository.title.* instead 2022-06-23 14:25:50 +02:00
Sascha Szott
f2b1d11fb2 added translation key communityList.breadcrumbs 2022-06-23 14:15:41 +02:00
Giuseppe Digilio
0aa14bcddd [CST-6174] Set maxStartDate/maxEndDate when building form models 2022-06-23 12:24:16 +02:00
Giuseppe Digilio
2a20b0c989 [CST-6174] Add test to check maxStartDate and maxEndDate 2022-06-23 12:04:33 +02:00
Sascha Szott
1168616f80 fixed typo in german translation 2022-06-23 11:43:57 +02:00
Sascha Szott
f9c6f5f5b6 added translation keys submission.general.info.* 2022-06-23 11:36:21 +02:00
Sascha Szott
146bbd8042 translation harmonization 2022-06-23 10:49:26 +02:00
Sascha Szott
395b2762b5 added submission.edit.breadcrumbs 2022-06-23 10:47:32 +02:00
Sascha Szott
5e15eb07f7 fixed typo in community.create.sub-head 2022-06-23 10:40:33 +02:00
Sascha Szott
9b93e9c2a4 Merge branch 'DSpace:main' into german-translations 2022-06-23 10:37:51 +02:00
Tim Donohue
f589b2f8de Merge pull request #1646 from tdonohue/update_node_in_ci
Update CI process to use Node 14 & 16
2022-06-22 15:45:42 -05:00
Tim Donohue
f37f32b4ab Drop Node 12 which is EOL. CI Build on 14 and 16 2022-06-22 15:13:35 -05:00
Tim Donohue
f649a82c3c Merge pull request #1691 from 4Science/CST-6056
fix for filter suggestion issue and bitstream description issue
2022-06-22 10:46:05 -05:00
Tim Donohue
815788bc4c Merge pull request #1699 from atmire/add-default-basehref-to-angular-json
Add the default baseHref value to angular.json
2022-06-22 10:29:13 -05:00
Art Lowel
f2f8f0929c Add the default baseHref value to angular.json 2022-06-22 16:05:03 +02:00
Giuseppe Digilio
8c14822eef [CST-6174] Fix issue with item access condition which doesn't consider the maxStartDate/maxEndDate 2022-06-22 15:46:30 +02:00
Giuseppe Digilio
5d130156e8 [CST-6174] Fix issue with bitstream access condition edit form when maxStartDate/maxEndDate are missing 2022-06-22 15:43:23 +02:00
Tim Donohue
12000d7b97 Merge pull request #1676 from tdonohue/fix_1675
Fixes Collection Mapper by ensuring UI sends a valid sort option
2022-06-22 08:37:53 -05:00
Tim Donohue
0475a9e22a Merge pull request #1626 from 4Science/CST-5339
Orcid queue
2022-06-22 08:34:45 -05:00
nikunj59
17a89387f2 CST-6110 changes for robust password error 2022-06-22 13:26:08 +05:30
nikunj59
20975a2274 Merge remote-tracking branch 'origin/main' into CST-6110 2022-06-22 12:17:46 +05:30
Tim Donohue
f3e4fb9901 Fix defaults in Pagination Service 2022-06-21 16:24:04 -05:00
Tim Donohue
f942eced3a Ensure a valid sort is specified 2022-06-21 14:45:56 -05:00
Tim Donohue
eb662fc156 Merge pull request #1630 from mspalti/mirador-search-passthrough
Fixes search passthrough to Mirador
2022-06-21 14:35:48 -05:00
nikunj59
0a73875d17 CST-6110 changes for robust password error 2022-06-21 21:42:33 +05:30
Giuseppe Digilio
20314d4620 [CST-6056] Fix issue with authority suggestion by adding the filter query in the input suggestion object 2022-06-21 13:37:42 +02:00
Luca Giamminonni
7724db530b [CST-5339] Added ORCID label 2022-06-21 11:32:09 +02:00
Luca Giamminonni
555d98f700 [CST-5339] Improved project synchronization 2022-06-20 19:05:57 +02:00
Giuseppe Digilio
ac41e7b3d6 [CST-6056] use onClick method on clickSuggestion for authority filter 2022-06-20 18:32:28 +02:00
Giuseppe Digilio
6abef91094 [CST-6056] use authority operator for authority facet 2022-06-20 18:21:55 +02:00
Luca Giamminonni
ac677d52d7 [CST-5339] Various improvements 2022-06-20 15:27:32 +02:00
Michael Spalti
c56cded549 Merge branch 'main' into mirador-search-passthrough 2022-06-17 15:04:02 -07:00
Yura Bondarenko
922e57c90f Merge remote-tracking branch 'origin/main' into w2p-92282_Fix-missing-auth-tokens-when-retrieving-Bitstreams 2022-06-17 15:47:23 +02:00
Yura Bondarenko
e15da9b76b 92282: Support restricted thumbnails 2022-06-17 15:45:02 +02:00
Luca Giamminonni
c62f72789d Merge remote-tracking branch '4Science-bitbucket/main' into CST-5339 2022-06-17 13:29:30 +02:00
benbosman
26ed23d1b6 Merge pull request #1624 from atmire/feature-relationship-versioning
Feature: Entity / relationship versioning
2022-06-17 11:48:09 +02:00
Bruno Roemers
84f362fe21 Merge branch 'main' into feature-relationship-versioning 2022-06-17 10:17:56 +02:00
Tim Donohue
f13401266e Merge pull request #1443 from atmire/w2p-85451_export-search-results-as-csv
Add a button to export search results as CSV
2022-06-16 13:33:30 -05:00
Giuseppe Digilio
fe85a596ff [CST-5339] include OrcidAuthService in core.module 2022-06-16 19:06:30 +02:00
Giuseppe Digilio
b1683e1424 [CST-5339] revert unintentional commit 2022-06-16 19:04:20 +02:00
Giuseppe Digilio
144451ea26 Merge branch 'CST-5339' of github.com:4Science/dspace-angular into CST-5339 2022-06-16 19:01:04 +02:00
Giuseppe Digilio
2bf5e70b87 Merge remote-tracking branch 'origin/main' into CST-5339 2022-06-16 19:00:38 +02:00
Tim Donohue
baa55b2595 Merge pull request #1618 from 4Science/CST-5668
Orcid settings page
2022-06-16 11:35:03 -05:00
Tim Donohue
0e9dff41ad Merge pull request #1688 from ybnd/Fix-show-more-collapse-icon-label-spacing
Truncatable toggle: spacing between icon & label as margin instead of whitespace
2022-06-16 10:06:15 -05:00
Luca Giamminonni
edcbdabd52 [CST-5339] Added invalid country label for orcid synchronization 2022-06-16 16:02:24 +02:00
Giuseppe Digilio
5eb6355858 [CST-5339] Make action color as primary 2022-06-16 15:44:18 +02:00
Giuseppe Digilio
63356aa127 [CST-5339] Refactoring orcid services by adding OrcidAuthService 2022-06-16 15:02:26 +02:00
Yana De Pauw
aa7da8608a Merge remote-tracking branch 'upstream/main' into w2p-85451_export-search-results-as-csv 2022-06-16 09:51:50 +02:00
Giuseppe Digilio
83ded46e83 Merge remote-tracking branch 'origin/main' into CST-6056 2022-06-16 09:14:51 +02:00
Giuseppe Digilio
4755b15db1 Merge remote-tracking branch 'origin/CST-5668' into CST-5339 2022-06-16 09:13:57 +02:00
Giuseppe Digilio
9a9010f146 Merge remote-tracking branch 'origin/main' into CST-5668 2022-06-16 09:13:01 +02:00
Giuseppe Digilio
793169dd31 [CST-5339] Fix queue refresh after preferences are changed 2022-06-15 18:54:30 +02:00
Giuseppe Digilio
d1c012407a Merge remote-tracking branch 'origin/CST-5668' into CST-5339
# Conflicts:
#	src/app/item-page/orcid-page/orcid-page.component.html
2022-06-15 18:25:32 +02:00
Tim Donohue
ab6e2b87f8 Merge pull request #1692 from tdonohue/fix_e2e_docker_backend
Fix continuous integration e2e backend failures
2022-06-15 11:01:18 -05:00
Tim Donohue
da45ff2d83 Ensure CI docker backend always runs DB migrations, even when out of order. 2022-06-15 10:26:13 -05:00
Giuseppe Digilio
9bcd92efae [CST-6056] optimize fix to issue with filter suggestion 2022-06-15 15:08:16 +02:00
Davide Negretti
d3ba1d2926 [CST-5339] Rename ORCID service; add findById and findAllByHref 2022-06-15 12:42:02 +02:00
Davide Negretti
2c82893e72 Merge branch 'CST-5668' into CST-5339
# Conflicts:
#	src/app/item-page/orcid-page/orcid-page.component.html
2022-06-15 11:18:46 +02:00
Giuseppe Digilio
82748c5ac9 [CST-5668] fix cache issue when settings are updated 2022-06-15 09:28:12 +02:00
Pierre Lasou
3979c51e61 New french translations for some parameters.
Proposition for new translations of the following terms: Workspace, Workflow, Workflow task and MyDSpace.
2022-06-14 17:43:56 -04:00
Davide Negretti
8eca0d93e4 [CST-5339] fdescribe removed 2022-06-14 23:14:10 +02:00
Davide Negretti
781fa08d1e Merge branch 'main-gh' into CST-5339 2022-06-14 19:00:52 +02:00
Davide Negretti
3adf846786 [CST-5339] Pass item as input - Tests 2022-06-14 19:00:02 +02:00
Giuseppe Digilio
94281fd60e [CST-5668] fix issue with cards margin with small window 2022-06-14 18:21:33 +02:00
Davide Negretti
adcef89c29 [CST-5339] Tests (WIP) 2022-06-14 18:21:06 +02:00
Giuseppe Digilio
09be33582b [CST-5668] Remove outer box 2022-06-14 18:01:22 +02:00
Giuseppe Digilio
eda4797034 [CST-5668] Implement orcid linking by redirect on front-end 2022-06-14 17:51:37 +02:00
Giuseppe Digilio
a0ea69aafa [CST-5668] use orcid icon as button 2022-06-14 17:48:53 +02:00
Davide Negretti
851855fc2a [CST-5339] Tests (WIP) 2022-06-14 17:44:57 +02:00
Davide Negretti
d779521dc9 [CST-5339] Lint errors 2022-06-14 12:31:20 +02:00
Davide Negretti
383703a4d6 [CST-5339] Lint errors 2022-06-14 12:29:38 +02:00
Davide Negretti
9850174fa2 [CST-5339] ORCID registry queue table reformatted 2022-06-14 12:15:15 +02:00
nikunj59
f39283cae5 CST-6051 changes description tool tip and truncate text 2022-06-14 14:56:41 +05:30
Bruno Roemers
d063c42f6d Merge branch 'feature-relationship-versioning-7.2' into feature-relationship-versioning 2022-06-14 11:14:35 +02:00
Bruno Roemers
2750931e92 92187: Fix linting errors 2022-06-14 10:22:29 +02:00
Giuseppe Digilio
3a4d7708a9 [CST-5668] Fix layout 2022-06-14 10:05:50 +02:00
Giuseppe Digilio
03af265ac4 [CST-5668] Fix issue with notification css that override min-width for all alert boxes 2022-06-14 10:05:29 +02:00
Giuseppe Digilio
d94e6ad8d7 [CST-5668] Add description messages 2022-06-14 09:47:02 +02:00
nikunj59
5aa569c5f2 Merge remote-tracking branch 'origin/main' into CST-6056 2022-06-14 11:49:44 +05:30
Tim Donohue
50f96884de Merge pull request #1685 from reetagithub/main
update fi.json
2022-06-13 16:58:41 -05:00
ybnd
0f94bbb874 Truncatable toggle icon-label spacing as margin instead of whitespace 2022-06-13 19:57:53 +02:00
Bruno Roemers
a43137e847 Merge branch 'main' into feature-relationship-versioning 2022-06-13 18:50:09 +02:00
Bruno Roemers
fd4d541de3 Merge branch 'feature-relationship-versioning-7.2' into feature-relationship-versioning 2022-06-13 18:46:42 +02:00
Bruno Roemers
35708ae3a8 92187: Keep version creation modal opened till POST request finishes 2022-06-13 18:45:32 +02:00
Tim Donohue
9db9441afc Merge pull request #1619 from 4Science/DSC-516-Style-New
TruncatableComponent usability improvement
2022-06-13 11:16:04 -05:00
Giuseppe Digilio
06d07dc1df [DSC-516] Fix issue with sidebar search list element 2022-06-13 17:41:51 +02:00
Giuseppe Digilio
e04404bdd6 [CST-5339] use ds-alert for info box 2022-06-13 17:05:41 +02:00
Tim Donohue
41bdd625dc Merge pull request #1664 from 4Science/CST-5677
[CST-5677] Improve item authorization page
2022-06-13 09:28:28 -05:00
Giuseppe Digilio
529384ab7f Merge branch 'CST-5668' into CST-5339
# Conflicts:
#	src/app/core/core.module.ts
#	src/app/item-page/item-page.module.ts
#	src/app/item-page/orcid-page/orcid-page.component.html
#	src/app/shared/shared.module.ts
#	src/styles/_global-styles.scss
2022-06-13 15:08:44 +02:00
nikunj59
02b124f7dd CST-6056 changes for filter result not working while lookup from text input 2022-06-13 18:28:56 +05:30
Giuseppe Digilio
9b6aa9f324 [CST-5668] Improve synchronization description 2022-06-13 14:55:17 +02:00
Giuseppe Digilio
a915659cc9 [CST-5668] Add test 2022-06-13 10:39:44 +02:00
Giuseppe Digilio
98f1baea2f [CST-5668] Rename component 2022-06-13 09:32:24 +02:00
Giuseppe Digilio
0b0fae45fa [CST-5668] Fix layout and add typedoc 2022-06-13 09:27:47 +02:00
reetagithub
fe4568a573 Merge branch 'DSpace:main' into main 2022-06-13 07:58:58 +03:00
Giuseppe Digilio
10f4f80f0d [CST-5668] Create and abstract component for authentication with external providers 2022-06-10 19:28:56 +02:00
Giuseppe Digilio
03369b8e10 [CST-5668] Address feedback and add test for orcid-auth.component 2022-06-10 19:03:31 +02:00
Sascha Szott
68d162432b added two missing keys 2022-06-10 14:22:52 +02:00
Sascha Szott
afe798942b harmonized german translations ("Ihre Veröffentlichungen") 2022-06-10 13:15:53 +02:00
Sascha Szott
5bf34b868c added missing keys workspace.search.results.head and workflow.search.results.head 2022-06-10 13:08:36 +02:00
Giuseppe Digilio
b372a27513 [CST-5668] Add test for orcid-page.component 2022-06-10 12:30:15 +02:00
Giuseppe Digilio
3cb5e0c226 [CST-5668] Fix button style and tooltip messages 2022-06-10 11:32:48 +02:00
Tim Donohue
859172717a Merge pull request #1684 from saschaszott/german-translations
added missing German translations
2022-06-09 16:10:35 -05:00
Sascha Szott
fa5dc5ccf0 added several missing dso-selector.set-scope.* keys 2022-06-09 19:35:46 +02:00
Sascha Szott
a4699d0faf added missing key search.form.scope.all 2022-06-09 19:32:39 +02:00
Sascha Szott
eca0526cce added missing sort order related translation keys 2022-06-09 19:27:26 +02:00
Giuseppe Digilio
17cc3078df [CST-5668] Fix after merge 2022-06-09 19:23:19 +02:00
Giuseppe Digilio
c3ececdde7 [CST-5668] Retrieve item from route data 2022-06-09 19:22:23 +02:00
Sascha Szott
0fbe9731cb added browse.back.all-results 2022-06-09 19:19:02 +02:00
Davide Negretti
4c19d3a027 [CST-5677] @types/node-sass removed 2022-06-09 18:50:59 +02:00
Davide Negretti
fca8c223e7 [CST-5677] Empty subscription fixed 2022-06-09 18:49:44 +02:00
Davide Negretti
3c3a679ef7 [CST-5677] Label fixed 2022-06-09 18:08:24 +02:00
Davide Negretti
df1324af90 [CST-5677] Spelling error fixed 2022-06-09 18:05:30 +02:00
Giuseppe Digilio
b03c73e0c5 Merge remote-tracking branch 'origin/main' into CST-5668
# Conflicts:
#	src/app/core/core.module.ts
#	src/app/core/profile/researcher-profile.service.ts
#	src/app/item-page/simple/item-page.component.ts
#	src/app/profile-page/profile-page.component.spec.ts
#	src/app/profile-page/profile-page.component.ts
#	src/app/shared/shared.module.ts
2022-06-09 17:39:43 +02:00
Tim Donohue
19bc9df5a1 Merge pull request #1617 from 4Science/CST-5307
Researcher profile
2022-06-09 10:08:10 -05:00
Sascha Szott
a1570128ea added thumbnail.* translation keys 2022-06-09 16:31:31 +02:00
Sascha Szott
4d73a3f2bf added search.filters.filter.author.label 2022-06-09 16:24:09 +02:00
Giuseppe Digilio
ce9e811526 [CST-5307] fix use of wrong param 2022-06-09 09:40:48 +02:00
Giuseppe Digilio
bd02278f80 Merge branch 'main' into CST-5307
# Conflicts:
#	src/assets/i18n/en.json5
2022-06-08 16:53:11 +02:00
Tim Donohue
cf6e58d194 Merge pull request #1669 from atmire/w2p-91770_Fix-route-matching-themes-on-first-load
Fix route-matching themes not resolving on first load/refresh
2022-06-08 09:25:46 -05:00
Tim Donohue
9db342606b Merge pull request #1633 from 4Science/CST-5270-sherpa-romeo-integration
Sherpa romeo integration (Angular)
2022-06-08 09:19:12 -05:00
Tim Donohue
a1598f9f8a Merge pull request #1637 from 4Science/CST-5535
Add admin panel for actuator information
2022-06-08 09:11:58 -05:00
Yura Bondarenko
485cc2bd31 Document AppComponent.updateTheme 2022-06-08 15:34:58 +02:00
Giuseppe Digilio
8bdb4b7be3 [CST-5307] disable cache when checking CanClaimItem authorization feature 2022-06-08 12:58:19 +02:00
Giuseppe Digilio
e2abea7373 [CST-5307] Add useCachedVersionIfAvailable and reRequestOnStale param to isAuthorized method 2022-06-08 12:56:57 +02:00
Giuseppe Digilio
e68bfd2eb6 [CST-5535] Add component typedoc and optimize code 2022-06-08 11:52:01 +02:00
Giuseppe Digilio
12f073bdbe [CST-5307] Fix issue with person-search-result-list-element.component that sometimes shown undefined name 2022-06-08 11:20:32 +02:00
Luca Giamminonni
7ea208e314 [CST-5668] Fixed lint warnings 2022-06-07 17:47:20 +02:00
Luca Giamminonni
b0625342b7 Merge remote-tracking branch '4Science-github/main' into CST-5668 2022-06-07 17:27:00 +02:00
nikunj59
1e9e4d5b12 CST-5309 added test cases 2022-06-07 17:26:35 +02:00
nikunj59
a9fcdce960 CST-5309 changes for error page component 2022-06-07 17:26:21 +02:00
Sufiyan Shaikh
b6f83461ab [DSC-516] show more button position at the bottom 2022-06-07 20:36:07 +05:30
Davide Negretti
9ff075b23e [CST-5535] TypeDoc added 2022-06-07 16:19:52 +02:00
Giuseppe
9d5aba7499 Update alert.component.ts
remove union type
2022-06-07 16:02:01 +02:00
Davide Negretti
83fce87792 [CST-5535] commented code removed 2022-06-07 15:17:29 +02:00
Luca Giamminonni
43f4ff7cde [CST-5668] Fixed DsoPageOrcidButtonComponent test 2022-06-07 15:15:51 +02:00
Luca Giamminonni
7320d1cc66 [CST-5668] Removed unused imports 2022-06-07 14:59:04 +02:00
Giuseppe Digilio
24b8c6b606 Merge branch 'main' into CST-5307 2022-06-07 13:17:08 +02:00
Giuseppe Digilio
73c60e3eef [CST-5307] disable cache when lookup for profile to claim 2022-06-07 13:05:52 +02:00
Sufiyan Shaikh
1d33d1537b [DSC-516] Card faded affect fix 2022-06-07 15:43:21 +05:30
Tim Donohue
245b86c68a Merge pull request #1677 from DSpace/dependabot/npm_and_yarn/ejs-3.1.8
Bump ejs from 3.1.6 to 3.1.8
2022-06-06 17:36:15 -05:00
Giuseppe Digilio
318d0ead61 [DSC-516] remove unused test provider 2022-06-06 18:27:06 +02:00
Davide Negretti
8ac9425db3 [CST-5677] restored empty panels; show message if panel is empty 2022-06-06 16:50:44 +02:00
Giuseppe Digilio
09b7d2e52f [CST-5270] fix test 2022-06-06 16:48:31 +02:00
Davide Negretti
39cba0414a Revert "[CST-5535] hide empty panels"
This reverts commit 692ab040dc.
2022-06-06 16:18:22 +02:00
Davide Negretti
eca9f79924 Revert "[CST-5677] code formatted"
This reverts commit 37492f2f82.
2022-06-06 16:18:09 +02:00
Giuseppe Digilio
dd049270a7 [CST-5270] add info alert for section info message 2022-06-06 15:58:06 +02:00
Davide Negretti
37492f2f82 [CST-5677] code formatted 2022-06-06 15:39:44 +02:00
Davide Negretti
692ab040dc [CST-5535] hide empty panels 2022-06-06 15:25:58 +02:00
Rezart Vata
377214c996 [CST-5270] Finished improvements 2022-06-06 13:20:16 +02:00
Tim Donohue
02e089a51b Merge pull request #1666 from atmire/w2p-91400_Fix-for-missing-comma-in-json-files
Fix for missing comma in json files
2022-06-03 16:53:38 -05:00
dependabot[bot]
68a36c4635 Bump ejs from 3.1.6 to 3.1.8
Bumps [ejs](https://github.com/mde/ejs) from 3.1.6 to 3.1.8.
- [Release notes](https://github.com/mde/ejs/releases)
- [Changelog](https://github.com/mde/ejs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mde/ejs/compare/v3.1.6...v3.1.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-03 21:50:02 +00:00
Tim Donohue
c6e591402f Merge pull request #1604 from DSpace/dependabot/npm_and_yarn/node-forge-1.3.1
Bump node-forge from 1.2.1 to 1.3.1
2022-06-03 15:54:18 -05:00
Tim Donohue
e2488b9848 Merge pull request #1593 from DSpace/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-06-03 15:21:50 -05:00
Tim Donohue
f1191c5428 Merge pull request #1592 from DSpace/dependabot/npm_and_yarn/moment-2.29.2
Bump moment from 2.29.1 to 2.29.2
2022-06-03 11:01:11 -05:00
Rezart Vata
6db5cff426 [CST-5270] fix testing 2022-06-03 17:55:13 +02:00
Rezart Vata
3c6a41f82a [CST-5270] Improvement requested from pull-1633 2022-06-03 17:49:15 +02:00
Alexandre Vryghem
fc1e6b6b85 Removed comments for how to theme li[Component] 2022-06-03 11:50:07 +02:00
Tim Donohue
c4f2e8ce11 Merge pull request #1642 from harvard-lts/145-base-path-support
[Issue 145] Support base path
2022-06-02 13:01:51 -05:00
William Welling
cfb4a627be use router for static assets 2022-06-02 10:16:49 -05:00
Alexandre Vryghem
541968fdd9 Merge remote-tracking branch 'templates/w2p-89721_Add-themeable-components_contribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-06-02 17:14:44 +02:00
Alexandre Vryghem
dc5d46993e 89721: Themed AdminSidebarComponent 2022-06-02 16:40:47 +02:00
Alexandre Vryghem
bca332a23a 89721: Themed JournalComponent 2022-06-02 16:40:47 +02:00
Alexandre Vryghem
2264067240 89721: Themed JournalVolumeComponent 2022-06-02 16:40:47 +02:00
Alexandre Vryghem
2441db16e9 89721: Themed JournalIssueComponent 2022-06-02 16:40:47 +02:00
Rezart Vata
d75136408b [CST-5270] small fix for unit selection 2022-06-02 12:49:53 +02:00
Alexandre Vryghem
9e8071727d Merge branch 'main-upstream' into w2p-91272_Add-themed-components-to-upstream-branch 2022-06-02 12:09:51 +02:00
Alexandre Vryghem
533e4c982f 91272: Small fixes 2022-06-02 12:05:33 +02:00
Giuseppe Digilio
f40907ea9f Merge branch 'DSC-516-Style-New' of bitbucket.org:4Science/dspace-angular into DSC-516-Style-New 2022-05-30 17:25:59 +02:00
Yura Bondarenko
03e1e468bd 91770: Fix route-matching themes not resolving on first load/refresh 2022-05-30 11:28:57 +02:00
Alexandre Vryghem
3a483c393d 89721: Themed UntypedItemComponent 2022-05-30 10:12:40 +02:00
William Welling
5996efec1a Merge branch 'main' of github.com:harvard-lts/dspace-angular into 145-base-path-support 2022-05-29 15:01:46 -05:00
Tim Donohue
3a9783d031 Merge pull request #1667 from tdonohue/disable_multiarch_for_prs
Docker Fixes: Ensure multiple architecture build is disabled for PRs
2022-05-27 11:44:25 -05:00
Sufiyan Shaikh
ea7a40a75a [DSC-516] Removed faded effect 2022-05-27 20:57:38 +05:30
Tim Donohue
d719a02597 Only build PRs in AMD64, as a simple sanity check. 2022-05-27 09:08:52 -05:00
Alexandre Vryghem
d6e181d0b2 89721: Fixed lv.json5 syntax error 2022-05-27 15:35:54 +02:00
Alexandre Vryghem
358e7c6d54 Merge branch 'main-upstream' into w2p-91400_Fix-for-missing-comma-in-json-files 2022-05-27 09:48:05 +02:00
Giuseppe Digilio
091494750b Merge remote-tracking branch 'origin/main' into DSC-516-Style-New 2022-05-26 19:01:56 +02:00
Giuseppe Digilio
dfd759e2fb Merge remote-tracking branch 'origin/main' into CST-5270-sherpa-romeo-integration 2022-05-26 17:08:37 +02:00
Giuseppe Digilio
a830c99f90 [CST-5307] Remove setStaleByHrefSubstring 2022-05-26 16:58:08 +02:00
Giuseppe Digilio
2622f374b0 Merge remote-tracking branch 'origin/main' into CST-5307
# Conflicts:
#	src/app/core/data/data.service.ts
2022-05-26 16:37:24 +02:00
Giuseppe Digilio
2c5da265e1 [CST-5307] fix LGTM alerts 2022-05-26 16:36:21 +02:00
Giuseppe Digilio
87064761b5 [CST-5307] fix issue with unsubscribed subscription 2022-05-26 16:36:03 +02:00
Davide Negretti
99b12cdd0f [CST-5677] yarn.lock updated 2022-05-26 16:27:32 +02:00
Davide Negretti
2c53b4ae2e Merge branch 'main-gh' into CST-5677 2022-05-26 16:02:06 +02:00
Tim Donohue
c834f8a075 Merge pull request #1608 from atmire/w2p-90252_Cache-redesign-part-3_Simplify-the-invalidation-of-cached-objects
Cache redesign part 3: simplify the invalidation of cached objects
2022-05-26 08:52:49 -05:00
Giuseppe Digilio
bc37372f05 [CST-5307] add confirmation modal when deleting the profile 2022-05-26 15:47:57 +02:00
Giuseppe Digilio
e6f6bc96f3 [CST-5307] use followlink for retrieving profile item on create and find 2022-05-26 15:32:18 +02:00
Alisa Ismailati
0b7782d230 [CST-5677] Fixed failing test 2022-05-26 14:42:22 +02:00
Sufiyan Shaikh
21a6540a36 Merge branch 'main' of bitbucket.org:4Science/dspace-angular into DSC-516-Style-New 2022-05-26 17:27:25 +05:30
Sufiyan Shaikh
d2ee2cd29e [DSC-516] Performance improvement 2022-05-26 17:07:24 +05:30
Giuseppe Digilio
be3fceb185 [CST-5307] Address feedback 2022-05-26 12:48:27 +02:00
Sufiyan Shaikh
76046ded84 [DSC-516] Performance improvement 2022-05-26 14:52:35 +05:30
Sufiyan Shaikh
5810309ff8 [DSC-516] Performance improvement 2022-05-26 14:43:41 +05:30
Giuseppe Digilio
ebbae79854 Merge remote-tracking branch 'origin/main' into CST-5307
# Conflicts:
#	src/app/core/core.module.ts
#	src/app/profile-page/profile-page.component.spec.ts
#	src/app/profile-page/profile-page.component.ts
#	src/app/shared/shared.module.ts
2022-05-26 10:40:48 +02:00
Alexandre Vryghem
d44253ea86 91400: Fix for line indentation on empty lines 2022-05-26 09:58:36 +02:00
Tim Donohue
7a84ea483d Merge pull request #1641 from 4Science/CST-5674
[CST-5674] Edit resource policy
2022-05-25 14:33:36 -05:00
Tim Donohue
5153308c46 Merge pull request #1652 from 4Science/CST-5303-LiveImportProviders
[CST-5303] Live Import providers i18n keys
2022-05-25 13:43:12 -05:00
Rezart Vata
d297eb708d [CST-5270] fix issue when no info 2022-05-25 18:20:13 +02:00
Tim Donohue
cfeef5f2d9 Merge pull request #1663 from atmire/test-multiplatform-docker-build
Add support for linux/arm64 platform to docker build
2022-05-25 08:45:23 -05:00
Art Lowel
7f6c17df75 add support for multiple platforms to docker build 2022-05-25 15:02:38 +02:00
Sufiyan Shaikh
d54f959613 [DSC-516] Author show more button fixed 2022-05-25 17:02:11 +05:30
Sufiyan Shaikh
fc83facf1e Merge 2022-05-25 14:37:14 +05:30
Giuseppe Digilio
ab9df8ac98 Merge remote-tracking branch 'origin/main' into DSC-516-Style-New
# 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.spec.ts
2022-05-25 09:30:14 +02:00
Giuseppe Digilio
98b1667ca7 [CST-5270] Fix LGTM alerts 2022-05-25 09:24:14 +02:00
Tim Donohue
a38172c035 Merge pull request #1640 from atmire/w2p-90948_More-informative-error-for-Workflow-group-delete
Show notifications when failing to create/delete role Groups
2022-05-24 16:46:30 -05:00
Giuseppe Digilio
d1f8bb6d7b [CST-5270] use data-test as css selector for unit test 2022-05-24 16:05:21 +02:00
Marie Verdonck
bb898022e3 91400: Fix for missing comma in json5 label files by sync script 2022-05-24 13:38:53 +02:00
Rezart Vata
5842d83e91 [CST-5270] add class needed for unit testing 2022-05-24 12:34:44 +02:00
Rezart Vata
ec6bc20010 Merge branch 'CST-5270-sherpa-romeo-integration' of https://bitbucket.org/4Science/dspace-angular into CST-5270-sherpa-romeo-integration 2022-05-24 12:28:43 +02:00
Rezart Vata
53851ba18e [CST-5270] Fix unit testing 2022-05-24 12:28:21 +02:00
Yana De Pauw
24e641e024 Merge remote-tracking branch 'upstream/main' into w2p-85451_export-search-results-as-csv 2022-05-24 10:37:33 +02:00
Giuseppe Digilio
87d015371c [CST-5270] use bootstrap classes 2022-05-24 09:19:02 +02:00
Rezart Vata
268ee04d1e [CST-5270] Fixes requested as improvements 2022-05-23 19:05:03 +02:00
Michael W Spalti
5ec460d236 Url parsing
Lint fix
2022-05-23 08:54:49 -07:00
Rezart Vata
166f4c3b25 [CST-5270] Finished functionalities 2022-05-23 17:39:36 +02:00
Mykhaylo
3e2cd387df added missing configs 2022-05-23 12:30:23 +02:00
Tim Donohue
436c6dd084 Merge pull request #1658 from atmire/fix-enitytype-redirect-encoding-issue
Fix entitytype redirect encoding issue
2022-05-20 10:55:50 -05:00
Davide Negretti
c206005d42 [CST-5674] code cleanup 2022-05-20 17:41:20 +02:00
Davide Negretti
9d577c5317 [CST-5674] fix test (lint) 2022-05-20 17:35:22 +02:00
Luca Giamminonni
857a3c56b7 [CST-5668] Fixed lint warnings 2022-05-20 17:31:54 +02:00
Davide Negretti
d2e881eba3 [CST-5674] fix test 2022-05-20 17:24:05 +02:00
Luca Giamminonni
bdc8c5d41e Merge branch 'main' into CST-5668 2022-05-20 17:18:44 +02:00
Luca Giamminonni
06091e39ca [CST-5668] Improved orcid page adding back button and fixing synchronization mode setting 2022-05-20 17:16:28 +02:00
Davide Negretti
51bbbb697e [CST-5674] add test case for updateTarget 2022-05-20 16:45:10 +02:00
Yura Bondarenko
383485b16d Modal outputs as EventEmitters instead of Subjects 2022-05-20 13:18:26 +02:00
Tim Donohue
9889a9d1a6 Merge pull request #1634 from 4Science/CST-5738
Add special groups list to the profile page
2022-05-19 15:24:49 -05:00
Giuseppe Digilio
305203dba7 [CST-5738] hide special group heading when are not present 2022-05-19 19:08:08 +02:00
Giuseppe Digilio
9124f06e4c Merge remote-tracking branch 'origin/main' into CST-5738 2022-05-19 18:47:47 +02:00
Giuseppe Digilio
7b6ccb780f [CST-5535] fix menu entry after merge 2022-05-19 18:41:54 +02:00
Giuseppe Digilio
d751de0aa6 Merge remote-tracking branch 'origin/main' into CST-5535
# Conflicts:
#	src/app/admin/admin-sidebar/admin-sidebar.component.ts
2022-05-19 16:59:45 +02:00
William Welling
2db80022b5 Merge branch 'main' of github.com:harvard-lts/dspace-angular into 145-base-path-support 2022-05-19 09:03:11 -05:00
Tim Donohue
bb5cdfc1a3 Merge pull request #1627 from atmire/w2p-90978_Improve-initial-page-load_PR
Improve initial page load
2022-05-19 08:55:28 -05:00
Rezart Vata
cba7a60476 [CST-5270] fixing module accordion 2022-05-19 15:55:05 +02:00
Luca Giamminonni
de2202799d [CST-5307] Search claimable profiles by email 2022-05-19 13:41:54 +02:00
Giuseppe Digilio
50184c8784 [CST-5738] fix LGTM alert 2022-05-18 19:27:23 +02:00
Rezart Vata
a03557fcad [CST-5270] fixed accordion issue and changed it to collapsable 2022-05-18 16:44:20 +02:00
Giuseppe Digilio
9aff792cac [CST-5535] Decrease status size 2022-05-18 14:54:59 +02:00
Giuseppe Digilio
bc63e14512 [CST-5535] Fix labels 2022-05-18 14:54:37 +02:00
Giuseppe Digilio
c43e25296d [CST-5535] Add title to the page and change health tab name 2022-05-18 14:45:21 +02:00
Yura Bondarenko
b05125dd16 Fix import menu to align with export menu code 2022-05-18 13:51:44 +02:00
Giuseppe Digilio
ef332af17e [CST-5535] Fix issue with error notice message on health page loading 2022-05-18 13:31:09 +02:00
Luca Giamminonni
733688bd7e Merge remote-tracking branch '4Science-bitbucket/main' into CST-5668 2022-05-18 13:25:36 +02:00
Luca Giamminonni
983db9c050 Merge branch 'CST-5668' into CST-5339 2022-05-18 13:16:15 +02:00
Giuseppe Digilio
d4dc176870 [CST-5535] Add Possibility to have translation also for properties 2022-05-18 13:04:04 +02:00
Luca Giamminonni
b6277f1e96 Merge remote-tracking branch '4Science-bitbucket/main' into CST-5339 2022-05-18 12:30:31 +02:00
Mykhaylo
a732f1534d [CST-5303] fix wrong format 2022-05-18 09:33:08 +02:00
Mykhaylo
618ff0ce19 [CST-5303] added missing labels 2022-05-17 17:45:27 +02:00
Davide Negretti
881af64495 [CST-5674] POST replaced with PUT 2022-05-17 16:36:40 +02:00
Art Lowel
1f9b8ba92a Fix issue where you'd get stuck in an infinite redirect loop when going to the page of an item with an entity type containing certain special characters 2022-05-17 16:07:42 +02:00
Sufiyan Shaikh
ba6011bd89 [DSC-516] main merge 2022-05-17 12:30:31 +05:30
Giuseppe Digilio
74b68a5e15 [CST-5535] Add fallback message on rest request error 2022-05-16 19:19:00 +02:00
Giuseppe Digilio
b906a65385 Merge remote-tracking branch 'origin/main' into CST-5535
# Conflicts:
#	package.json
2022-05-16 18:59:46 +02:00
Giuseppe Digilio
73573793a0 [CST-5535] Add i18n keys for section's headers 2022-05-16 18:50:07 +02:00
Giuseppe Digilio
c508e0035e [CST-5535] Add tooltip for status icons 2022-05-16 18:49:11 +02:00
Giuseppe Digilio
4f7e37d348 [CST-5535] Use accordion for health status components 2022-05-16 18:44:04 +02:00
Giuseppe Digilio
80ff8a517c [CST-5535] Rename health-data.service 2022-05-16 16:46:33 +02:00
Giuseppe Digilio
0de3c2ed48 [CST-5535] Replace icons 2022-05-16 16:45:45 +02:00
Giuseppe Digilio
4c5c99d05d [CST-5535] Add missing i18n label 2022-05-16 16:44:35 +02:00
Alexandre Vryghem
c9885c13ec Merge branch 'w2p-89676_feature-selective-export_contribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-05-15 19:14:27 +02:00
William Welling
771f92eaab Merge branch 'main' of github.com:harvard-lts/dspace-angular into 145-base-path-support 2022-05-14 14:07:53 -05:00
Tim Donohue
dd6ff7f48f Merge pull request #1653 from tdonohue/fix_rss_accessibility
Fix RSS accessibility issue: link has no discernible text
2022-05-13 17:34:18 -05:00
Tim Donohue
913d128e16 Fix accessibility issue: link has no discernible text 2022-05-13 16:57:28 -05:00
Tim Donohue
20850033df Merge pull request #1444 from atmire/shared-feature-rss-viewer
Add RSS buttons if the feature is enabled on the rest side
2022-05-13 14:25:29 -05:00
Alexandre Vryghem
743513cf84 89676: Added empty SearchResultsComponent files 2022-05-13 20:35:08 +02:00
Nathan Buckingham
3a6112532e for rss sort id should be date.accessioned so defaulted to that when its the case 2022-05-13 13:38:02 -04:00
Alexandre Vryghem
460efa42c7 91272: Fix merge request 2022-05-13 19:33:40 +02:00
Alexandre Vryghem
e741573348 Merge branch 'w2p-89984_feature-rtl-theme_contribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-05-13 18:46:03 +02:00
Alexandre Vryghem
e197e496b5 91272: Fixed accessibility violation 2022-05-13 17:19:42 +02:00
Alexandre Vryghem
8980ae4a50 Merge branch 'w2p-89720_Add-themable-components_contribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-05-13 14:41:34 +02:00
Alexandre Vryghem
5682c81217 91272: Fixed import statements and position of expandable navbar button 2022-05-13 14:18:01 +02:00
Alexandre Vryghem
7904cead76 Merge branch 'w2p-89741_Add-themeable-components_conntribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-05-13 13:43:09 +02:00
Yura Bondarenko
21579d1525 Merge remote-tracking branch 'origin/main' into w2p-90978_Improve-initial-page-load_PR 2022-05-13 09:32:34 +02:00
Tim Donohue
5c8ef44070 Merge pull request #1636 from 4Science/feature/CST-5329
Add validate only check in the Import Metadata page
2022-05-12 13:20:22 -05:00
Giuseppe Digilio
c1f64ff1ef [CST-5329] Add help text to validate only checkbox 2022-05-12 18:50:25 +02:00
Giuseppe Digilio
b788579457 Merge remote-tracking branch 'origin/main' into feature/CST-5329 2022-05-12 18:35:18 +02:00
Alexandre Vryghem
8288559c63 Merge remote-tracking branch 'templates/w2p-86526_Add-themeable-components_contribute-7.2' into w2p-91272_Add-themed-components-to-upstream-branch 2022-05-12 17:56:23 +02:00
Tim Donohue
095ddd2ebd Merge pull request #1639 from atmire/issue-1635_search-bar-with-input-scope
Fix search bar with input scope
2022-05-12 10:10:56 -05:00
Mykhaylo
42c459a51d [CST-5303] added labels into i18n 2022-05-12 16:13:43 +02:00
Nathan Buckingham
0791287cf9 lint fixes 2022-05-12 10:02:15 -04:00
Nathan Buckingham
79bf27c659 Revert to getFirstCompletedRemoteData but check if payload has completed 2022-05-12 09:56:26 -04:00
Nathan Buckingham
cb1b7ceb0a remove rss feed from search 2022-05-12 09:56:26 -04:00
Nathan Buckingham
eacbcfd15d Change to withNotEmptyPayload to pass through if its empty 2022-05-12 09:56:26 -04:00
Nathan Buckingham
6cd22fa004 w2p-86403 prevent from displaying on pages where rss feed doesn't make sense 2022-05-12 09:56:26 -04:00
Nathan Buckingham
8785270363 w2p-86403 Changed to subscribe and unsubscribe on destory 2022-05-12 09:56:26 -04:00
Nathan Buckingham
90f1fc186c Link fixes 2022-05-12 09:56:26 -04:00
Nathan Buckingham
be8a8f5f6b Add typedocs and websvc.opensearch.svccontext 2022-05-12 09:56:26 -04:00
Nathan Buckingham
0bf0e1f274 add providers to browseby 2022-05-12 09:56:26 -04:00
Nathan Buckingham
2b9383d2d5 remove unused import from rebase 2022-05-12 09:56:26 -04:00
Nathan Buckingham
ffb34da3e7 Create link head spec file 2022-05-12 09:56:26 -04:00
Nathan Buckingham
efb76ea883 Fix tests now that router is apart of the rss component 2022-05-12 09:56:26 -04:00
Nathan Buckingham
b5943b48b4 w2p-86403 fix opensearch is disabled, router issues and links 2022-05-12 09:56:26 -04:00
Nathan Buckingham
b8a96e48a7 Fix test files to pass down necessary providers 2022-05-12 09:56:26 -04:00
Nathan Buckingham
99e5b9c898 w2p-85140 ds-rss component now adds a button to all search pages and community and collection, link-head service adds the rss to the head element 2022-05-12 09:56:22 -04:00
Yura Bondarenko
f0d98c9b6f Implement feedback 2022-05-12 15:34:31 +02:00
Alexandre Vryghem
db375b8f47 91131: Added parent constructor to ThemedLoadingComponent 2022-05-12 12:05:17 +02:00
Ben Bosman
924f53204f Merge remote-tracking branch 'atmire-hub/feature-relationship-versioning__discovery' into feature-relationship-versioning 2022-05-12 11:46:34 +02:00
Tim Donohue
c705fc42d6 Merge pull request #1631 from 4Science/CST-5253-change-approach-workflow-approval
Add view item button for mydspace objects
2022-05-11 17:14:56 -05:00
Bruno Roemers
3abf83a5e9 90945: Add missing translations for new discovery configs 2022-05-11 17:54:41 +02:00
Tim Donohue
659a9a69ca Merge pull request #1615 from atmire/w2p-90918_Upgrade-ng-dynamic-forms-and-rxjs
Upgrade ng-dynamic-forms to v15 and RxJs to v7
2022-05-11 10:05:38 -05:00
Alexandre Vryghem
c79e83fdd3 Merge branch 'w2p-84367_Various-small-changes' into w2p-89720_Add-themable-components_contribute-7.2 2022-05-11 14:47:02 +02:00
Alexandre Vryghem
f8ad0306b0 Merge branch 'w2p-84367_Various-small-changes' into w2p-86526_Add-themeable-components_contribute-7.2 2022-05-11 14:36:42 +02:00
Alexandre Vryghem
a89375f67b 89720: Themed EditItemTemplatePageComponent 2022-05-11 14:28:16 +02:00
Alexandre Vryghem
5b4ecb9fc2 89720: Themed ItemMetadataComponent 2022-05-11 14:17:50 +02:00
Yana De Pauw
67ffa89c47 Remove console.log 2022-05-11 13:30:11 +02:00
Yana De Pauw
166a163c24 Fix custom loading components template url 2022-05-11 12:34:44 +02:00
Giuseppe Digilio
98d75798a4 [CST-5307] Import ui-switch css classes properly 2022-05-11 12:28:57 +02:00
Giuseppe Digilio
aec7d9f25b Merge remote-tracking branch 'origin/main' into CST-5307
# Conflicts:
#	src/app/core/core.module.ts
#	src/app/shared/shared.module.ts
2022-05-11 12:09:00 +02:00
Giuseppe Digilio
36208d1303 [CST-5307] Fix visibility toggle and address review feedback 2022-05-11 12:01:35 +02:00
Bruno Roemers
0ce709ee68 90945: Use *-relationships discovery configs on single-item pages 2022-05-11 12:00:49 +02:00
Giuseppe Digilio
1e9d393edf [CST-5307] Move profile-claim-item-modal.component to profile page module and add unit tests 2022-05-11 11:59:38 +02:00
Yana De Pauw
cbf0db5342 Add themed loading component in custom theme and fix issues 2022-05-11 11:30:25 +02:00
Alexandre Vryghem
c1ef672943 Merge branch 'dspace_7.2' into w2p-86526_Add-themeable-components_contribute-7.2 2022-05-11 09:51:02 +02:00
Alexandre Vryghem
55005d3fa4 86526: Themed AuthNavMenuComponent 2022-05-11 09:48:58 +02:00
Alexandre Vryghem
5c9510993c 91202: Themed ExpandableNavbarSectionComponent 2022-05-10 20:59:04 +02:00
William Welling
b8109edd62 Merge branch 'main' of github.com:harvard-lts/dspace-angular into 145-base-path-support 2022-05-10 11:50:58 -05:00
Giuseppe Digilio
853dcecfb8 [CST-5307] Refactoring and adding missing unit tests 2022-05-10 18:14:00 +02:00
Giuseppe Digilio
0b664431af [CST-5307] Create a standalone component for person claim button 2022-05-10 18:12:44 +02:00
Kristof De Langhe
f2e4a005a2 89676: themed custom search-results 2022-05-10 17:31:43 +02:00
Tim Donohue
5282377350 Merge pull request #1529 from the-library-code/TLC-254_type-bind-dspace-angular
Type-bind for submission input (port from DSpace-CRIS 7 angular)
2022-05-10 10:07:08 -05:00
Tim Donohue
42ef35b2bc Merge pull request #1601 from nibou230/access-status
Display the access status badges
2022-05-10 10:02:08 -05:00
Yana De Pauw
aac41a76cf Potential test fix 2022-05-10 16:45:43 +02:00
Yana De Pauw
d8b6e65f6f Fix tests 2022-05-10 16:45:38 +02:00
Yana De Pauw
c63a25b18e 89984: Fix getComponentForMenu themed method 2022-05-10 16:45:33 +02:00
Yana De Pauw
d6be2e8651 89984: Add themable menu section 2022-05-10 16:45:20 +02:00
Yana De Pauw
870a36180c 89984: Add ThemedLoadingComponent 2022-05-10 16:44:50 +02:00
Kim Shepherd
51058daf27 [TLC-254] tidy imports in type bind service 2022-05-10 09:25:59 +12:00
Alisa Ismailati
32d7fca27a [CST-5677] Changed bunblesPageSize value 2022-05-09 12:02:50 +02:00
Alisa Ismailati
6cd41be3b8 [CST-5677] Changed bunblesPerPage value 2022-05-09 12:01:46 +02:00
Alisa Ismailati
e79c045ac0 [CST-5677] Added translation 2022-05-09 11:55:58 +02:00
Giuseppe Digilio
7fcbeb20e8 Merge remote-tracking branch 'origin/main' into CST-5307 2022-05-09 09:31:45 +02:00
Michael Spalti
724fc3c6f0 [CST-5738] Revert unintentional change on config.yml 2022-05-09 09:24:17 +02:00
Kim Shepherd
b6cdc90d57 [TLC-254] If configService present, set typeField in constructor 2022-05-08 12:17:38 +12:00
Alisa Ismailati
d15277849b [CST-5677] Item authorization page 2022-05-07 16:21:08 +02:00
William Welling
9a433b50ff support base path 2022-05-06 14:32:44 -05:00
Luca Giamminonni
da1fb5506b [CST-5668] Fixed orcid page 2022-05-06 16:50:22 +02:00
Luca Giamminonni
bdad05b36f Merge branch 'CST-5307' into CST-5668 2022-05-06 16:23:05 +02:00
Luca Giamminonni
d51dcca87c [CST-5307] Added missing javadocs, removed showClaimItem feature 2022-05-05 17:46:30 +02:00
nibou230
7f1d1ed7de Fixes for lint and tests 2022-05-05 11:46:00 -04:00
Davide Negretti
eb2d9b2fde [CST-5674] Lint fixes 2022-05-05 17:00:49 +02:00
nibou230
e77821eef0 Use the item's HALLink to get the access status 2022-05-05 10:21:55 -04:00
Davide Negretti
8c937a55c0 [CST-5674] Error handling; fixes 2022-05-05 15:33:53 +02:00
Yura Bondarenko
c0f8dd078b 90978: Explain dsBrowserPipe more thoroughly 2022-05-05 11:33:51 +02:00
Alexandre Vryghem
2ff79d93b9 89741: Added Tests for the scope @Input() in SearchFormComponent 2022-05-04 18:16:11 +02:00
nibou230
8e03b28151 Use component vars in AccessStatusBadgeComponent 2022-05-04 11:49:33 -04:00
nibou230
6c8d12394c Moved showAccessStatus to be self-contained 2022-05-04 11:45:36 -04:00
nibou230
2b77e4a90d Moved showAccessStatus from UI to item config
Renamed item-page to item to make it generic
2022-05-04 11:17:25 -04:00
Yura Bondarenko
d69a02e6cc 90978: Fix e2e tests failing due to interactions before page fully loaded
Now that we use initialNavigation: 'enabledBlocking', pages can appear to be loaded before some functionality is fully active.
In some cases this trips up Cypress, and it tries to interact with the app too soon.

We address this by introducing a new dsBrowserOnly pipe in order to defer the data-test attributes Cypress relies on to CSR.
2022-05-04 15:25:46 +02:00
Alexandre Vryghem
b9f239e3a9 Merge branch 'main-upstream' into issue-1635_search-bar-with-input-scope 2022-05-04 14:50:34 +02:00
Yana De Pauw
a24587d101 Merge remote-tracking branch 'upstream/main' into w2p-85451_export-search-results-as-csv 2022-05-04 14:01:57 +02:00
Davide Negretti
39c11c6986 Merge branch 'main-bb' into CST-5674 2022-05-04 11:42:56 +02:00
Davide Negretti
9173b9db60 [CST-5674] Fix; enable policy and action type editing; test 2022-05-04 11:35:54 +02:00
Kim Shepherd
ba3069215a [TLC-254] Lint fixes 2022-05-04 15:09:59 +12:00
Kim Shepherd
bf9208169e [TLC-254] Lint fixes 2022-05-04 15:04:49 +12:00
Kim Shepherd
2fbf33b641 [TLC-254] Take config data service out of constructor, make optional 2022-05-04 14:53:47 +12:00
Kim Shepherd
5363ae1ac1 [TLC-254] mock config data service, get type in form builder service+test 2022-05-04 13:52:06 +12:00
Luca Giamminonni
49e2a5b1a8 Merge branch 'CST-5307' into CST-5339 2022-05-03 16:39:34 +02:00
Luca Giamminonni
3b550b591b Merge branch 'CST-5307' into CST-5668 2022-05-03 16:38:56 +02:00
Luca Giamminonni
804930fbe2 [CST-5307] Improved researcher profile component 2022-05-03 15:35:51 +02:00
Giuseppe Digilio
675f3910cc [CST-5535] Refactoring health check server side request 2022-05-03 15:32:02 +02:00
Giuseppe Digilio
3c2f26f6c1 [CST-5535] Add environment configuration for Actuators 2022-05-03 15:30:20 +02:00
Giuseppe Digilio
32a91f64d9 [CST-5535] Refactoring health page 2022-05-03 12:06:48 +02:00
Yura Bondarenko
22d5643d8b 90978: Set klaro cookie before each test 2022-05-03 09:32:31 +02:00
Alexandre Vryghem
b9b5b50999 89741: Added ThemedExpandableNavbarSectionComponent 2022-05-03 09:04:58 +02:00
Kim Shepherd
fd0c8f409e [TLC-254] Tests for isObjectEmpty() 2022-05-03 14:11:02 +12:00
Kim Shepherd
833637c215 [TLC-254] Get Type Bind config from backend 2022-05-03 14:10:33 +12:00
Davide Negretti
bb3cc1c619 [CST-5674] Edit policy target; modal content; test 2022-05-02 17:02:04 +02:00
Giuseppe Digilio
26d496d55c Merge remote-tracking branch 'origin/main' into CST-5535
# Conflicts:
#	package.json
#	yarn.lock
2022-05-02 16:13:52 +02:00
Giuseppe Digilio
f3a40a5ef9 [CST-5239] Fix button visualization 2022-05-02 16:08:58 +02:00
Giuseppe Digilio
c8c8d1e1ff Merge remote-tracking branch 'origin/main' into feature/CST-5329 2022-05-02 15:01:59 +02:00
Marie Verdonck
917e5fe5bc Issue 1635: Fix for @input not working on search bar ds-search-form 2022-05-02 14:55:23 +02:00
myrza1
5fd692ce1b Update kz.json5
translated all
2022-05-01 02:07:01 +06:00
Tim Donohue
37ebe259f3 Merge pull request #1628 from 4Science/CST-5676
Bitstream edit page fixes
2022-04-29 16:54:00 -05:00
Tim Donohue
1e341aa789 Merge pull request #1629 from mspalti/mirador-fix
Mirador webpack build fix.
2022-04-29 14:46:16 -05:00
Tim Donohue
c0ed90368c Merge pull request #1625 from atmire/radio-buttons-in-submission
Radio buttons in submission
2022-04-29 14:24:57 -05:00
Giuseppe Digilio
aa7ceec15a [CST-5738] Fix retrieving of embed from auth status model 2022-04-29 19:15:40 +02:00
Tim Donohue
662f119434 Merge pull request #1623 from atmire/Issue#1381-DSO-sub-route-titles-fix
Issue #1381 - DSO sub route titles fix
2022-04-29 11:16:56 -05:00
Giuseppe Digilio
8498504b93 [CST-5270] Add target blank for links 2022-04-29 16:14:47 +02:00
Luca Giamminonni
788a326592 [CST-5307] Fixed test 2022-04-29 15:51:35 +02:00
Giuseppe Digilio
23e8e03185 Merge branch 'CST-5270-sherpa-romeo-integration' of bitbucket.org:4Science/dspace-angular into CST-5270-sherpa-romeo-integration 2022-04-29 15:37:20 +02:00
Luca Giamminonni
6b3c6c2dda [CST-5307] Fixed lint 2022-04-29 15:34:57 +02:00
Davide Negretti
d5e5a4a550 [CST-5674] Informative modal (WIP) 2022-04-29 13:02:22 +02:00
Giuseppe Digilio
0f80b6533b [CST-5738] Add method to retrieve embedded special groups 2022-04-29 12:49:07 +02:00
Davide Negretti
342a62081c [CST-5674] Enable ePerson/Group editing; prevent switching between ePerson and Group 2022-04-29 12:17:48 +02:00
Davide Negretti
e94454be97 [CST-5674] Update selected ePerson/Group 2022-04-29 12:11:06 +02:00
Yura Bondarenko
2e979afd22 90948: Show notifications when failing to create/delete role Groups 2022-04-29 10:46:28 +02:00
Alexandre Vryghem
2f84d0294b 89720: Added ThemedEditItemTemplatePageComponent 2022-04-29 10:27:26 +02:00
Giuseppe Digilio
1e651c2d47 Merge remote-tracking branch 'origin/main' into CST-5738 2022-04-29 09:56:23 +02:00
Giuseppe Digilio
34ca590fa5 [CST-5253] Fix view item button for pool tasks in the mydspace results list 2022-04-29 09:20:27 +02:00
Giuseppe Digilio
bfb84c86df [CST-5253] Fix view item button for claim task in the mydspace results list 2022-04-29 09:19:56 +02:00
Giuseppe Digilio
55e77d1edb [CST-5253] Fix view item button for workspace items in the mydspace results list 2022-04-29 09:19:14 +02:00
Giuseppe Digilio
d3ef3d3079 [CST-5253] Change full-item-page.component in order to display also workspace items 2022-04-29 09:17:17 +02:00
Giuseppe Digilio
9e2928f653 [CST-5253] Fix detail visualization for archived item in the mydspace result list 2022-04-29 09:16:03 +02:00
Giuseppe Digilio
2b7ed5c258 [CST-5253] Add view item button for workflow items 2022-04-29 09:15:20 +02:00
Michael Spalti
58b8ba3aa7 Lint errors. 2022-04-28 17:01:59 -07:00
Tim Donohue
618a7f4dcd Merge pull request #1620 from 4Science/CST-5662-search-scope-selector
Enabled search scope selector
2022-04-28 17:06:59 -05:00
Tim Donohue
de1cd8619f Merge pull request #1561 from atmire/w2p-88300_issue-1379
Browse clarify filter functionality
2022-04-28 16:49:17 -05:00
Michael Spalti
7bbce89b40 Fixes search passthrough to Mirador and adds tests. 2022-04-28 14:26:35 -07:00
Michael Spalti
d32566beda Mirador webpack build fix. 2022-04-28 12:38:35 -07:00
Rezart Vata
d435d8eeb1 [CST-5270] Fixed graphical changes requested 2022-04-28 19:07:38 +02:00
Giuseppe Digilio
b023a5a03c [CST-5270] Fix submission-objects.effects sherpa romeo customization 2022-04-28 18:58:35 +02:00
Rezart Vata
64f3af7a1b [CST-5253] Added unit testing 2022-04-28 18:35:04 +02:00
Rezart Vata
a754a20ec6 [CST-5270] Fixing ISSN removal and unit testing 2022-04-28 18:12:15 +02:00
Giuseppe Digilio
3d206165b2 [CST-5676] Fix bitstream's follow links 2022-04-28 15:53:48 +02:00
Giuseppe Digilio
edb77b4a09 Merge remote-tracking branch 'origin/main' into CST-5676 2022-04-28 15:41:44 +02:00
Giuseppe Digilio
393a4a3d40 [CST-5676] Implemented bitstream-breadcrumbs.service 2022-04-28 15:41:25 +02:00
Bruno Roemers
a75387602b Merge branch 'main' into feature-relationship-versioning 2022-04-28 15:05:19 +02:00
Yura Bondarenko
34be1179ab Fix unused import 2022-04-28 14:49:34 +02:00
Yura Bondarenko
63de6139a3 90978: Upgrade compression-webpack-plugin 2022-04-28 14:06:38 +02:00
Alexandre Vryghem
7480a19a65 89720: Added ThemedItemMetadataComponent 2022-04-28 14:02:15 +02:00
Yura Bondarenko
1522c36ed0 Merge remote-tracking branch 'origin/main' into w2p-90978_Improve-initial-page-load_PR 2022-04-28 13:49:39 +02:00
Luca Giamminonni
95b704f889 Merge commit 'a9162eb9205c920f1d64857851117514a8c2beca' into CST-5339 2022-04-28 13:20:37 +02:00
Sufiyan Shaikh
b8904f5fe1 [CST-5676] Resolver Changes Item Undefined 2022-04-28 16:35:42 +05:30
Bruno Roemers
bcbd8dbd93 91070: Fix tests (add missing dependencies to testbed) 2022-04-28 12:28:44 +02:00
Yura Bondarenko
572a10db6b 90978: Responsive banner background image 2022-04-28 12:16:46 +02:00
Yura Bondarenko
7e391f0411 90978: Serve pre-compressed static files 2022-04-28 12:16:46 +02:00
Yura Bondarenko
e65b5e2f1c 90978: Update theme modules 2022-04-28 12:16:46 +02:00
Yura Bondarenko
8a4f811575 90978: Move admin menu to MenuResolver, clean up & add tests 2022-04-28 12:01:02 +02:00
Yura Bondarenko
cc745b4225 90978: Minor fixes 2022-04-28 12:01:02 +02:00
Davide Negretti
44f393d65a [CST-5674] Fixed link in TODO 2022-04-28 11:44:53 +02:00
Sufiyan Shaikh
b83e87dd4e [CST-5676] Bitstream Breadcrumb Resolver 2022-04-28 10:38:45 +05:30
Tim Donohue
7278b1515c Merge pull request #1622 from tdonohue/enable_tr_lang
Enable Turkish lang pack in dropdown list
2022-04-27 16:01:39 -05:00
Tim Donohue
5448f2c2af Enable tr lang pack in dropdown list 2022-04-27 14:51:40 -05:00
Tim Donohue
400ef9a433 Merge pull request #1519 from ITUBIDB/turkish-translation
Turkish Translation
2022-04-27 14:49:27 -05:00
Tim Donohue
83471ecd50 Merge pull request #1605 from atmire/w2p-90873_issue-1380_Standard-bundles-in-upload-bitstream
Add standard bundles in upload bitstream
2022-04-27 14:21:13 -05:00
Rezart Vata
aa78a2991c CST-5253] Finished functionalities 2022-04-27 20:18:33 +02:00
Giuseppe Digilio
aaa166593e [DSC-516] Fix accessibility issues 2022-04-27 18:59:29 +02:00
Giuseppe Digilio
9bb8fc1d1c [CST-5662] Enabled search scope selector 2022-04-27 18:22:32 +02:00
Giuseppe Digilio
e307c5de9f [CST-5270] add string type to attribute declaration 2022-04-27 17:20:26 +02:00
Giuseppe Digilio
f9d55dc3e8 [CST-5270] Refactoring implementation and remove mock response 2022-04-27 17:19:38 +02:00
Yana De Pauw
1f4248ccd5 Merge remote-tracking branch 'upstream/main' into w2p-88300_issue-1379 2022-04-27 16:45:56 +02:00
Giuseppe Digilio
63366e6ca2 Merge remote-tracking branch 'origin/main' into CST-5270-sherpa-romeo-integration
# Conflicts:
#	src/app/submission/objects/submission-objects.effects.ts
2022-04-27 15:56:36 +02:00
Pratik Rajkotiya
a34e7428c3 [CST-5738] remove unused variable. 2022-04-27 19:11:49 +05:30
Pratik Rajkotiya
da5d540668 [CST-5738] add special group with mock & test cases. 2022-04-27 19:10:44 +05:30
Alexandre Vryghem
2ad87c50d1 90873: issue 1380 - Added tests 2022-04-27 13:52:58 +02:00
Luca Giamminonni
ad39ad323e Merge remote-tracking branch '4Science-bitbucket/CST-5338' into CST-5307 2022-04-27 13:52:42 +02:00
Rezart Vata
107199eb8e [CST-5270] Finished unit testing 2022-04-27 13:40:33 +02:00
Luca Giamminonni
fd00b55465 Merge branch 'CST-5309' into CST-5307 2022-04-27 13:35:05 +02:00
Luca Giamminonni
0d09dbd498 Merge remote-tracking branch '4Science-bitbucket/CST-5668' into CST-5307 2022-04-27 13:33:27 +02:00
Art Lowel
3bc5ee0253 pages loading twice poc
Cherry-picked from original branch started from Angular 13 PR
2022-04-27 11:58:43 +02:00
Luca Giamminonni
7a193cc9a2 [CST-5307] Fixed compilation 2022-04-27 11:14:47 +02:00
Luca Giamminonni
5c0222747e Merge remote-tracking branch '4Science-bitbucket/main' into CST-5307 2022-04-27 10:11:45 +02:00
Luca Giamminonni
21241571f7 Merge remote-tracking branch '4Science-bitbucket/CST-5307' into CST-5307 2022-04-27 10:04:36 +02:00
Sufiyan Shaikh
0812377b58 [DSC-516] Test cases changes 2022-04-27 11:50:53 +05:30
Kim Shepherd
8cd07de4fc [TLC-254] Remove chaff from test 2022-04-27 14:58:52 +12:00
Kim Shepherd
c2f57b448d [TLC-254] Ensure matchers injected in testbed providers 2022-04-27 14:28:35 +12:00
kshepherd
13dac1af0e Merge pull request #1613 from tdonohue/fix_docker_build
Fix Dockerfile for Angular 13 updates
2022-04-27 13:29:36 +12:00
Tim Donohue
533b1f5e40 Merge pull request #1606 from 4Science/CST-5733-router-loading
Fix router-outlet destroy issue
2022-04-26 15:11:03 -05:00
Tim Donohue
afbd31a138 Merge pull request #1607 from 4Science/CST-5418-improve-cannot-deposit-notification
[CST-5418] Improve notification when cannot deposit
2022-04-26 14:28:08 -05:00
Tim Donohue
9cc20c7417 Fix Dockerfile to specify listening on 0.0.0.0 2022-04-26 12:17:49 -05:00
Rezart Vata
e7e67c779e [CST-5270] Fixed conflict and merged with main branch 2022-04-26 18:13:38 +02:00
Rezart Vata
cb84bc758e [CST-5270] Implemented new refresh button & code refactoring 2022-04-26 17:52:28 +02:00
Pratik Rajkotiya
1507bbf733 [CST-5307] claim item added. 2022-04-26 21:07:12 +05:30
lotte
21c26897bc Merge branch 'radio-buttons-in-submission-7.2' 2022-04-26 17:09:43 +02:00
lotte
4c68280108 radio buttons in submission fixed 2022-04-26 17:09:07 +02:00
Giuseppe Digilio
56d0522f89 Merge remote-tracking branch 'origin/main' into CST-5733-router-loading
# Conflicts:
#	src/app/admin/admin-sidebar/admin-sidebar.component.ts
2022-04-26 17:04:09 +02:00
Sufiyan Shaikh
abe1d5c6c7 [DSC-516] Change truncable components in order to show more/less button 2022-04-26 17:28:54 +05:30
Sufiyan Shaikh
78a3a93f24 [CST-5676] Resolve 2022-04-26 17:11:50 +05:30
Kristof De Langhe
307d3f2e53 Merge remote-tracking branch 'dspace/main' into w2p-90951_Fix-Issue#1381-DSO-sub-route-titles 2022-04-26 13:11:07 +02:00
Kristof De Langhe
ccac67d238 Merge branch 'w2p-90951_Fix-Issue#1381-DSO-sub-route-titles-contribute-7.0' into w2p-90951_Fix-Issue#1381-DSO-sub-route-titles-contribute-7.2 2022-04-26 13:10:01 +02:00
Kristof De Langhe
291f2997ed 90951: Fix issue #1381 - route titles priority over DSO titles 2022-04-26 13:06:29 +02:00
Giuseppe Digilio
91dc50a0a3 [CST-5733] Create admin sidebar menu entries on authentication 2022-04-26 11:04:48 +02:00
Yura Bondarenko
809072e86a 90918: Fix RxJs issues 2022-04-26 10:50:10 +02:00
Giuseppe Digilio
eb57b28b52 [CST-5418] Fix warning message 2022-04-26 10:43:53 +02:00
SDGBot
15e4200f7e ITU BIDB türkçe dil desteği güncellemesi
Ek düzeltmeler.
2022-04-26 10:18:56 +03:00
SDGBot
6f9e5b8c50 ITU BIDB türkçe dil desteği güncellemesi
Ek düzeltmeler.
2022-04-26 10:14:33 +03:00
SDGBot
c0907c1987 ITU BIDB türkçe dil desteği güncellemesi
Hatalı dosyanın değiştirilmesi!
2022-04-26 10:08:54 +03:00
Kim Shepherd
f9e402b69f [TLC-254] Tidy up some unhelpful comments in typeBind service 2022-04-26 10:25:53 +12:00
Kim Shepherd
2ca7b72ac2 [TLC-254] Tidy up some unhelpful comments in typeBind service 2022-04-26 10:22:06 +12:00
Yura Bondarenko
8d6f156db1 90918: Upgrade ng-dynamic-forms and RxJs
Copied over isNumeric from RxJs 6.x as it was removed from 7.x
Build & tests are broken, fixed in subsequent commit
2022-04-25 15:32:34 +02:00
Kim Shepherd
2c0afaabec [TLC-254] lint and test fixes 2022-04-24 16:29:15 +12:00
Kim Shepherd
5b607ccb86 [TLC-254] lint and test fixes 2022-04-24 16:14:40 +12:00
myrza1
0146a11953 Update kz.json5
update ed commas
2022-04-23 19:33:25 +06:00
myrza1
3757a414bc Update kz.json5 2022-04-23 19:14:59 +06:00
myrza1
6a91a9c3e1 Update kz.json5
transalte without admin section. Is it needs?
2022-04-23 17:59:49 +06:00
Kim Shepherd
be6ea812bb [TLC-254] tidy up imports, regexes, mock data 2022-04-23 16:54:52 +12:00
Kim Shepherd
e182378572 [TLC-254] Remove inappropriate tests from form builder, component 2022-04-23 16:05:46 +12:00
Kim Shepherd
d3a78b8ad5 [TLC-254] Add getTypeBindRelations helper method to bind service 2022-04-23 16:05:20 +12:00
Kim Shepherd
7fd7eb31cb [TLC-254] Remove some unwanted (ported) methods from form builder 2022-04-23 16:04:48 +12:00
Tim Donohue
c538bbbe46 Merge pull request #1469 from ybnd/pr_external-links-in-menus
Support external links in menus
2022-04-22 17:02:33 -05:00
Rezart Vata
d390920cca [CST-5270] Code refactoring, made changes from the rest contract and implemented i18n 2022-04-22 19:09:40 +02:00
Pratik Rajkotiya
fbcb6f7d78 [CST-5307] method releted to orcid is removed. 2022-04-22 18:10:26 +05:30
SDGBot
bc9f02f49e ITU BIDB türkçe dil desteği güncellemesi
Metaveri -> Metadata düzeltmesi
2022-04-22 14:10:40 +03:00
SDGBot
aefc4e1310 ITU BIDB türkçe dil desteği güncellemesi
İstek üzerine gerekli güncellemeler gerçekleştirilmiştir.
2022-04-22 13:39:21 +03:00
Luca Giamminonni
9509d6d901 Merge remote-tracking branch '4Science-bitbucket/main' into CST-5307 2022-04-22 11:25:12 +02:00
Yura Bondarenko
f3e2a7a6f1 Fix missing imports (conflict resolution error) 2022-04-22 09:54:12 +02:00
Yura Bondarenko
192b9aa29f Support external links in menus 2022-04-22 09:36:29 +02:00
Yura Bondarenko
e7c56dbb12 Remove unused imports 2022-04-22 09:08:15 +02:00
Yura Bondarenko
a041368019 90252: Fix invalidateByHref not emitting 2022-04-22 09:07:10 +02:00
Yura Bondarenko
be488c04bb 90252: Fix flaky tests 2022-04-22 09:07:10 +02:00
Yura Bondarenko
c628d4320b 90252: Ensure calls come through if no subscribers 2022-04-22 09:07:08 +02:00
Yura Bondarenko
4e38d2b145 90252: Ensure modals are dismissed between tests 2022-04-22 09:05:00 +02:00
Yura Bondarenko
9699491269 90252: Remove old cleanup code
& add tests to confirm that DataService.delete is called
2022-04-22 09:04:58 +02:00
Yura Bondarenko
c19d12c5c0 90252: Invalidate requests containing DSO on DataService.delete
Keep track of a list of request UUIDs in the object cache (most recent in front)
When deleting a DSO, mark all of these as stale
2022-04-22 09:04:15 +02:00
Kim Shepherd
02ee1eca87 [TLC-254] Quotes fixed for Lint, import cleanup 2022-04-22 16:14:02 +12:00
Kim Shepherd
bc62764345 [TLC-254] Service tests - small fixes 2022-04-22 16:05:47 +12:00
Kim Shepherd
d7afaf9cb8 [TLC-254] Service tests 2022-04-22 16:05:47 +12:00
Kim Shepherd
fc037d79ca [TLC-254] WIP tests 2022-04-22 16:05:47 +12:00
Kim Shepherd
c414b8cebc [TLC-254] Replace some undef/null tests with hasValue, hasNoValue 2022-04-22 16:05:47 +12:00
Kim Shepherd
617717069b [TLC-254] Remove unnecessary (and never destroyed) subscriber
Date picker was hiding parent though subscription but this
can be handled async with a simple setTimeout instead
2022-04-22 16:05:47 +12:00
Kim Shepherd
9ceb358080 [TLC-254] Fix Lint errors , unused imports 2022-04-22 16:05:47 +12:00
Kim Shepherd
ce0194108f [TLC-254] ITs, mocking type bind relation service 2022-04-22 16:05:47 +12:00
Kim Shepherd
96774971de [TLC-254] ITs, mocking type bind relation service 2022-04-22 16:05:47 +12:00
Kim Shepherd
93d2f5d8ac [TLC-254] Strip out irrelevant metadata security lvl (as per review) 2022-04-22 16:05:47 +12:00
Kim Shepherd
f97a87702c [TLC-254] Hidden fields can collapse in row, revert drag-handle problem
apply d-none class to form-control container when model is hidden
css rule for ds-form-control-container.d-none forces collapse
drag-handle fix from 9019b809 was recent and is applied manually here too
2022-04-22 16:05:42 +12:00
Kim Shepherd
61d64d5e5e [TLC-254] Updating references in tests to reflect row array model changes 2022-04-22 16:02:53 +12:00
Kim Shepherd
be7f21eb32 [TLC-254] Make the item type field configurable (default dc.type) 2022-04-22 16:02:53 +12:00
Kim Shepherd
361bb7f7dc [TLC-254] Port submission field type binding from DSpace-CRIS 7 2022-04-22 16:02:53 +12:00
Tim Donohue
19fa36f243 Merge pull request #1598 from atmire/w2p-90768_Fix-search-field-on-SearchHierarchyFilterComponent
Fix search field on search hierarchy filter component
2022-04-21 16:48:01 -05:00
nibou230
9f50b4997c Changed the import for CacheableObject 2022-04-21 14:30:23 -04:00
nibou230
a2a241b906 Added the badge to some components for coherence 2022-04-21 14:08:35 -04:00
nibou230
550eb6c7ab Adapt the service to a LinkedRepository result 2022-04-21 14:08:01 -04:00
nibou230
459da211be Display the access status badges 2022-04-21 13:59:29 -04:00
Rezart Vata
da2cba5827 [CST-5270] Added some information from mock json to the layout 2022-04-21 18:48:19 +02:00
Tim Donohue
9b56911c43 Merge pull request #1587 from atmire/Removing-unnecessary-circular-dependencies
Removing unnecessary circular dependencies
2022-04-21 08:39:49 -05:00
Yana De Pauw
f228a93889 Merge remote-tracking branch 'upstream/main' into w2p-88300_issue-1379 2022-04-21 15:29:25 +02:00
Rezart Vata
5add939a1d [CST-5270] Insertion of submission section with mock & section layout 2022-04-21 12:33:38 +02:00
Giuseppe Digilio
fa1b7d11ad [CST-5418] Check success notification is not present on depositing when there are errors 2022-04-21 11:31:07 +02:00
Giuseppe Digilio
0506c5596a [CST-5418] Use different param for notifications and errors in the parseSaveResponse method 2022-04-21 11:30:15 +02:00
lotte
d806f4da95 Merge branch 'main' into Removing-unnecessary-circular-dependencies 2022-04-21 10:36:45 +02:00
Sufiyan Shaikh
ffe5922990 [CST-5676] resolver overwrite 2022-04-21 12:50:18 +05:30
Tim Donohue
e314a70957 Merge pull request #1600 from atmire/w2p-90155_fix-menu-issues
Fix for menu issues
2022-04-20 12:20:16 -05:00
Jens Vannerum
f49793ec04 90155: Unnused import and comments 2022-04-20 17:35:51 +02:00
Giuseppe Digilio
c250408382 [CST-5418] Improve notification when cannot deposit 2022-04-20 16:10:18 +02:00
Tim Donohue
2671a4cb83 Merge pull request #1599 from atmire/w2p-90797_issue-1430_redux-devtools-disable-support-in-prod-mode
Disable redux devtools support in prod mode
2022-04-20 09:06:15 -05:00
lotte
d364804c42 Removed circ dependency after merge with main 2022-04-20 15:34:32 +02:00
Marie Verdonck
d51af2739e 90873: issue 1380 - Fix to make default bundle config work without yml changes 2022-04-20 15:10:26 +02:00
lotte
014fe1b733 fixes after merge with master 2022-04-20 14:48:18 +02:00
lotte
6784ac39f6 Merge branch 'main' into Removing-unnecessary-circular-dependencies 2022-04-20 14:47:55 +02:00
Sufiyan Shaikh
01f3cbcaea [CST-5676] Breadcrumbs changes 2022-04-20 15:44:01 +05:30
Giuseppe Digilio
7a14488a42 Merge remote-tracking branch 'origin/main' into CST-5733-router-loading 2022-04-20 09:53:50 +02:00
Giuseppe Digilio
0fa44f4b74 [CST-5733] Apply changes in order to not destroy router-outlet on loading 2022-04-20 09:53:44 +02:00
Alexandre Vryghem
beae47ef19 90873: Add default bundle suggestions on upload bundle 2022-04-20 09:10:45 +02:00
Tim Donohue
3a9d4fad95 Merge pull request #1597 from atmire/w2p-90263_issue-8205_no-embargoed-files-on-google-scholar-meta-tag
Fix for embargoed file links on Google Scholar Meta Tag "citation_pdf_url"
2022-04-19 17:12:40 -05:00
Alexandre Vryghem
743bbb6afe Merge branch 'main-atmire-github' into w2p-90797_issue-1430_redux-devtools-disable-support-in-prod-mode 2022-04-19 21:49:55 +02:00
Alexandre Vryghem
ffa61438f9 90797: Disable redux devtools in production mode 2022-04-19 21:35:16 +02:00
Giuseppe Digilio
404886e247 [CST-5733] Fix issue with group search within the resource policy page 2022-04-19 18:35:23 +02:00
Alexandre Vryghem
99aee55efa 90873: Add environment.standardBundles.bundle 2022-04-19 18:31:23 +02:00
dependabot[bot]
728bce56a4 Bump node-forge from 1.2.1 to 1.3.1
Bumps [node-forge](https://github.com/digitalbazaar/forge) from 1.2.1 to 1.3.1.
- [Release notes](https://github.com/digitalbazaar/forge/releases)
- [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md)
- [Commits](https://github.com/digitalbazaar/forge/compare/v1.2.1...v1.3.1)

---
updated-dependencies:
- dependency-name: node-forge
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-19 14:18:00 +00:00
dependabot[bot]
5dd7efcbab Bump moment from 2.29.1 to 2.29.2
Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.2.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.1...2.29.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-19 14:17:06 +00:00
dependabot[bot]
004f95b6dc Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-19 14:16:56 +00:00
Tim Donohue
88ffc37894 Merge pull request #1567 from atmire/w2p-87968_Upgrade-to-Angular-13
Upgrade to Angular 13
2022-04-19 09:15:45 -05:00
Yana De Pauw
f828215f48 88300: Implement feedback 2022-04-19 14:57:42 +02:00
Sufiyan Shaikh
6480b75aed [CST-5676] Bitstream edit page is broken if no policies are set 2022-04-18 16:27:36 +05:30
Sufiyan Shaikh
4fe82112d6 [CST-5676] Bitstream edit page is broken if no policies are set 2022-04-18 13:39:36 +05:30
Sufiyan Shaikh
71ffeac80e [CST-5676] Bitstream edit page is broken if no policies are set 2022-04-18 13:18:40 +05:30
lotte
7830d1c632 replaced package.json script shorthand to build.yml 2022-04-14 16:14:09 +02:00
lotte
ef7f6d1306 Added package.json short cut to check circular dependencies 2022-04-14 16:00:24 +02:00
Alexandre Vryghem
8e5bfc023e 90768: Already selected filters were still displayed in the clickable suggestions 2022-04-14 10:28:18 +02:00
Marie Verdonck
b80334f3f1 Merge branch 'w2p-90263_issue-8205_no-embargoed-files-on-google-scholar-meta-tag-7.0' into w2p-90263_issue-8205_no-embargoed-files-on-google-scholar-meta-tag 2022-04-13 15:50:57 +02:00
Marie Verdonck
32676fc500 90263: issue 8205 - check if downloadable before citation_pdf_url to source 2022-04-13 15:50:08 +02:00
Pratik Rajkotiya
a9162eb920 [CST-5339] ORCID queue added. 2022-04-13 18:20:16 +05:30
Pratik Rajkotiya
dd4ff5e40c [CST-5338] ORCID Settings added. 2022-04-13 17:54:29 +05:30
Pratik Rajkotiya
cc08a2829e [CST-5668] ORCID Authorizations added. 2022-04-13 17:48:26 +05:30
Alexandre Vryghem
e3172fd6e8 90768: Updated tests for search.util and created test for SearchHierarchyFilterComponent 2022-04-13 10:01:50 +02:00
Alexandre Vryghem
8924b2c92c 90768: Prevent empty filters from being added 2022-04-13 09:46:14 +02:00
Alexandre Vryghem
b3f010974d 90768: Removing and adding filter could break filter 2022-04-12 21:54:22 +02:00
myrza1
5379b14c2c Update kz.json5 2022-04-12 19:44:00 +06:00
Pratik Rajkotiya
88c324cb5a [CST-5307] Migrate Researcher Profile (Angular). 2022-04-12 17:04:32 +05:30
Alexandre Vryghem
155db64c63 86526: Added themable AuthNavMenuComponent 2022-04-12 09:36:18 +02:00
Alexandre Vryghem
2ef9c1db18 90768: Appended query operator to the filter 2022-04-11 09:48:07 +02:00
Alexandre Vryghem
61650df492 90768: Fixed dropdown position bug 2022-04-11 09:41:55 +02:00
myrza1
1e47da0a51 Update kz.json5 2022-04-10 02:35:15 +06:00
myrza1
ef7bd1df57 Update kz.json5
Екінші аударым
2022-04-10 02:24:28 +06:00
Yura Bondarenko
f8297218ad 87968: Fix unstyled link issue 2022-04-08 17:58:25 +02:00
Yura Bondarenko
3f340c18f2 87968: Fix spacing issues via custom CSS 2022-04-08 17:58:23 +02:00
Yura Bondarenko
042a0dd389 87968: Revert previous spacing fixes 2022-04-08 17:57:16 +02:00
Yura Bondarenko
c736ebaebf Revert "87968: Increase Node --max_old_space_size"
This reverts commit 62e7615f1fa9b680120e7ab7dbef173a5e4679dc.
2022-04-08 17:57:16 +02:00
Art Lowel
708375593d add margin to compensate for the switch to preserveWhiteSpaces = false 2022-04-08 17:57:16 +02:00
Yura Bondarenko
0115c5217b 87968: Turn off preserveWhitespaces by default
And set to true explicitly for MyDSpace action components to preserve look
(see https://github.com/DSpace/dspace-angular/issues/903#issuecomment-713013310)
2022-04-08 17:57:16 +02:00
Yura Bondarenko
a14cc6fde2 87968: Run CI ESLint in --quiet mode 2022-04-08 17:57:16 +02:00
Yura Bondarenko
22ac66787a 87968: Kill app if still up after e2e tests 2022-04-08 17:57:16 +02:00
Yura Bondarenko
99c41b9e80 87968: Minor code changes to pass lint 2022-04-08 17:57:16 +02:00
Yura Bondarenko
bb51609af9 87968: Update ESLint disable/enable comments
eslint-disable max-classes-per-file only works at the top of the file now
2022-04-08 17:57:16 +02:00
Yura Bondarenko
b5911b8536 87968: Manual ESLint configuration
Extend recommended ESLint rulesets, disable rules that are too noisy or would require major code changes to resolve errors
Restore TSLint configuration as closely as possible
2022-04-08 17:57:16 +02:00
Yura Bondarenko
245977a432 87968: Automatic migration from TSLint to ESLint
Via `ng g @angular-eslint/schematics:convert-tslint-to-eslint`
2022-04-08 17:57:16 +02:00
Yura Bondarenko
ec6327edc2 87968: Automatic ESLint install
Via CLI suggestion when running `ng lint` w/o ESLint on Angular 13
2022-04-08 17:57:16 +02:00
Yura Bondarenko
cad76ff378 87968: Increase Node --max_old_space_size 2022-04-08 17:57:16 +02:00
Yura Bondarenko
59d46ffbdf 87968: Upgrade ng-bootstrap to v11
Some tests involving NgbModal now fail if setup with mock Injector without `get` method
2022-04-08 17:57:16 +02:00
Yura Bondarenko
5488d0f83a 87968: Remove unused import 2022-04-08 17:57:16 +02:00
Yura Bondarenko
48efccb53b 87968: Upgrade ngx-gallery 2022-04-08 17:57:16 +02:00
Yura Bondarenko
bfdda43a48 87968: Update devServer configuration 2022-04-08 17:57:16 +02:00
Yura Bondarenko
d78019cd39 87968: Fix unit tests 2022-04-08 17:57:15 +02:00
Yura Bondarenko
563956c5df 87968: Manual fixes after NgRx migration
Selector typing

Restored pre-13 behaviour where mock stores were reset after every test.
The upgrade caused multiple tests to start failing; we could solve this
by adjusting all of these one by one but that would take some time.
(see https://ngrx.io/guide/migration/v13#testing-reset-mock-store)
2022-04-08 17:57:15 +02:00
Yura Bondarenko
8e4f1993bf 87968: Automatic upgrade to NgRx 13 2022-04-08 17:57:15 +02:00
Yura Bondarenko
8f7389c83a 87968: Fix JSON5 parsing in Universal loader
Failed ~
  Error: export 'parse' (imported as 'JSON5') was not found in 'json5' (possible exports: default)

Only affected SSR: once CSR kicked in translations were loaded properly
2022-04-08 17:57:15 +02:00
Yura Bondarenko
49f470c07b 87968: Various dependency changes
Upgraded:
  zone.js
  ng-mocks
  @angular/cdk
  @ngtools/webpack
  @angular-builders/custom-webpack
  @nguniversal

Added:
 postcss-preset-env: fix spurious CSS warnings
 sass-loader: fix "can't resolve 'sass-loader'" & "the loader didn't return a string" errors
2022-04-08 17:57:15 +02:00
Yura Bondarenko
c1d870c32d 87968: Clean up after automatic upgrade
- Get rid of missed empty routerLinks
- Fix abstract property initializers
- Specify coverage reporter
2022-04-08 17:57:15 +02:00
Yura Bondarenko
1b460fe1d3 87968: Automatic upgrade to Angular 13 2022-04-08 17:57:15 +02:00
Yura Bondarenko
47c8ca7342 87968: Lift readyState complete check from Universal 12 2022-04-08 17:57:15 +02:00
Yura Bondarenko
ae89571519 87968: Fix unit tests 2022-04-08 17:57:15 +02:00
Yura Bondarenko
26d45fd5e7 87968: Remove angular2-text-mask dependency 2022-04-08 17:57:15 +02:00
Yura Bondarenko
3eb3afcc96 87968: Fix rxjs/internal imports 2022-04-08 17:57:15 +02:00
Yura Bondarenko
5476062648 87968: Add unmet peer dependencies 2022-04-08 17:57:15 +02:00
Yura Bondarenko
0e178ce1bc 87968: Fix missing theme assets
Adapt to changes in https://github.com/webpack-contrib/copy-webpack-plugin
2022-04-08 17:57:15 +02:00
Art Lowel
808d4e925a Enable source maps in dev mode 2022-04-08 17:57:15 +02:00
Art Lowel
a47d7dd846 Upgrade ng-dynamic forms 2022-04-08 17:57:15 +02:00
Yura Bondarenko
621a874b29 87968: Include theme modules in tsconfig.spec.ts
Without this, Webpack errors out when building tests due to theme components missing from the TS compilation
2022-04-08 17:57:15 +02:00
Yura Bondarenko
9093ef4ae9 87968: Karma needs ts-node 10.2.1
Otherwise tests error out with
  Uncaught ReferenceError: sourceMapSupport is not defined

Check just-jeb/angular-builders issue 1046 for more info
2022-04-08 17:57:15 +02:00
Yura Bondarenko
29d8dd68f4 87968: Remove html-webpack-plugin
After updating to Angular 12, it causes ng serve to fail with
  Conflict: Multiple assets emit different content to the same filename index.html

Confirmed that the application still builds and runs properly without it.

This plugin isn't used by @angular-builders/custom-webpack since Angular 8 (see https://www.justjeb.com/post/customizing-angular-cli-build#viewer-51npg), this is just the first time it's actually causing problems for us.

Removed script-ext-html-webpack-plugin as well since that's an extension to html-webpack-plugin & can't run without it.
2022-04-08 17:57:15 +02:00
Yura Bondarenko
22c5976095 87968: Upgrade to Angular 12 2022-04-08 17:57:15 +02:00
Luca Giamminonni
e68e605211 [CST-5309] Added LoginOrcid component 2022-04-08 17:37:21 +02:00
Kristof De Langhe
0ed7f2e0aa 89676: Test fixes 2022-04-08 11:12:26 +02:00
Yana De Pauw
712aac911c Remove faulty config.json file 2022-04-08 11:06:31 +03:00
Yana De Pauw
bf6c4f401e Fix LGTM issues 2022-04-07 15:18:56 +03:00
Yana De Pauw
6740e379f1 Merge branch 'w2p-88300_issue-1379-7.0' into w2p-88300_issue-1379 2022-04-07 15:03:27 +03:00
Yana De Pauw
ddca6701ac Update messages for different browse options 2022-04-07 15:02:41 +03:00
Yana De Pauw
06f1cc2d82 88300: Fix wrong message key 2022-04-07 13:59:40 +03:00
Kristof De Langhe
2b17bb8f1e 89676: Themeable browse-by-page decorator & search-results component 2022-04-07 11:43:39 +02:00
Tim Donohue
45887154b6 Merge pull request #1582 from louiserumpf/translation-de
Updated German translation
2022-04-06 12:08:28 -05:00
Tim Donohue
8a6fd925b4 Merge pull request #1580 from BibNumUMontreal/main
French translation reviewed and updated
2022-04-05 13:51:18 -05:00
lotte
6d3ef58ecc Removed unused imports 2022-04-05 17:27:45 +02:00
lotte
bcf2560ee7 Merge branch 'main' into Removing-unnecessary-circular-dependencies 2022-04-05 16:40:02 +02:00
lotte
53c67ac878 fixed after merge 2022-04-05 16:35:24 +02:00
lotte
30b7e8eb39 Merge branch 'main' into w2p-87382_circular-dependency-fixes 2022-04-05 16:35:00 +02:00
Jens Vannerum
8fad82c549 90155: Added queryParams to link menu options
- Made it possible to add queryParams to a link in the menu
2022-04-05 16:00:10 +02:00
Jens Vannerum
27986f8c24 Merge branch 'main' into w2p-90155_fix-menu-issues
# Conflicts:
#	src/app/admin/admin-sidebar/admin-sidebar.component.ts
#	src/app/shared/menu/menu-item/link-menu-item.component.html
#	src/app/shared/menu/menu-item/link-menu-item.component.spec.ts
2022-04-05 15:43:52 +02:00
Jens Vannerum
c8235ddb6b 90155: Added queryParams to link menu options
- Made it possible to add queryParams to a link in the menu
2022-04-05 15:24:32 +02:00
Pratik Rajkotiya
d7c3a20f2a [CST-5535] remove fdescibe. 2022-04-05 18:52:40 +05:30
Pratik Rajkotiya
392d0e366d [CST-5535] test cases added. 2022-04-05 18:46:58 +05:30
Yana De Pauw
249fa8e7f4 Merge remote-tracking branch 'upstream/main' into w2p-88300_issue-1379 2022-04-05 15:02:08 +03:00
Jens Vannerum
28622a82dd 90155: Hide imports and exports menus for regular users
- In the admin sidebar Import and Export menus are no longer visible for users who should not see them
2022-04-05 12:47:31 +02:00
Marie-Hélène Vézina
41eebbe661 quick changes to fr.json5
changes according to review : https://github.com/DSpace/dspace-angular/pull/1580#pullrequestreview-930932091
2022-04-04 17:38:20 -04:00
Tim Donohue
9c0fce3a7a Merge pull request #1552 from 4Science/CST-5449
[CST-5449] "Browse by" pages are missing "Now showing" contextual information
2022-04-04 10:07:35 -05:00
Tim Donohue
c1e6976502 Merge pull request #1574 from ybnd/Fix-search-filter-date-range-slider-collapse-animation
Pad date range sliders to fix search facet animation issues
2022-04-01 16:47:28 -05:00
Yura Bondarenko
dac852481e Pad date range sliders
So handles don't jut out when set to the min/max
2022-03-31 21:39:56 +02:00
Giuseppe Digilio
2ce744280b [CST-5449] Fix issue with double result list in the browse page 2022-03-31 19:00:44 +02:00
Giuseppe Digilio
2830f208ce Merge remote-tracking branch 'origin/main' into CST-5449 2022-03-31 16:46:06 +02:00
Tim Donohue
eb7713a702 Merge pull request #1577 from atmire/w2p-88820_Private-Public-Terminology
Changed the public/private terminology
2022-03-30 12:27:23 -05:00
louiserumpf
72885d896f Updated German translation
also corrected comment search.search-form.placeholder --> home.search-form.placeholder
2022-03-27 17:38:47 +02:00
Tim Donohue
e75cb5f64a Merge pull request #1581 from tdonohue/enable_bengali
Enable Bengali by default
2022-03-25 16:33:42 -05:00
Tim Donohue
c4a0bbdf1f Enable Bengali by default 2022-03-25 15:04:57 -05:00
Tim Donohue
bb57992d63 Merge pull request #1573 from raihantopu/main
Adding bn.json5 for 'Bengali Language Transalation'
2022-03-25 15:04:01 -05:00
Tim Donohue
50accfffb0 Merge pull request #1564 from atmire/w2p-88507_Fix-Download-Link-Edit-Bitstream-Page
Fix embargoed files download link not working on edit item page
2022-03-25 14:15:02 -05:00
Marie-Hélène Vézina
75bdf3de79 French translation reviewed and updated
French translation reviewed and updated

These are the main changes:

I have :

- added missing translations (more than ~300 variables)
- corrected the content of a few variables (partial translation and/or wrong translation or translation that deviated from the original); fixed a few typos (e.g. connexion instead of connection for "login")
- standardized the use of « some text » instead of "some text"
- standardized the spacing (among others : one blank before "?", ":", "!" (better yet would be to use a non-breaking space)
- removed the erroneous use of capital letters (e.g. "La Collections et la Communauté" => "La collection et la communauté")
- standardized the verb tenses for some variables (infinitive instead of imperative)
- added articles where they were missing (e.g. "Supprimer groupe" => "Supprimer le groupe")
- removed/corrected tupples : item.page.edit and sorting.lastModified.ASC

For information : I have kept the terms "Item", "Bundle", "Bitstream", "Eperson", "Workflow" (but I made sure that those words were capitalized to show they represent specific concepts) [In our local instance however, we localised the first three ones to, respectively, "document", "groupement", "fichier" in this order]

Still to do:

- gender-inclusive writing (e.g. : "utilisateur.trice", "auteur.e" or more generic forms)
2022-03-25 14:30:58 -04:00
Tim Donohue
adbad6907d Merge pull request #1556 from atmire/w2p-88248_Withdrawn-item-tombstone
Withdrawn item tombstone
2022-03-25 10:03:53 -05:00
Pratik Rajkotiya
108f6e60f9 [CST-5535] WIP 2022-03-25 18:37:25 +05:30
Pratik Rajkotiya
46a0ea10f4 [CST-5535] WIP 2022-03-25 18:28:26 +05:30
Tim Donohue
25133935ef Merge pull request #1572 from louiserumpf/main
updated German translation
2022-03-24 16:58:42 -05:00
Jens Vannerum
ceec5661fe 88820: Changed the public/private terminology
- Changed the terminology to use discoverable / non-discoverable as this is more clear and is suitable in every context
2022-03-24 15:43:04 +01:00
Marie Verdonck
c1f109b5ce Merge branch 'w2p-88248_Withdrawn-item-tombstone-7.0' into w2p-88248_Withdrawn-item-tombstone 2022-03-24 11:42:56 +01:00
Marie Verdonck
521e4ddb8d 88248: Theming alert 2022-03-24 11:42:04 +01:00
reetagithub
c5110f89bc Update fi.json5
Modified some keys to harmonize the translations of term 'administrative'. Also, translated "Administer Workflow" to a verb instead of a noun.
2022-03-24 11:18:18 +02:00
Tim Donohue
59104c4fbe Merge pull request #1513 from tdonohue/more_e2e_tests
Enhance e2e test infrastructure. Add initial tests for authenticated actions like submission, mydspace, etc.
2022-03-23 09:36:21 -05:00
Art Lowel
41ad172796 add github actions check for circular dependencies 2022-03-22 14:00:55 +01:00
Art Lowel
716cea376d fix circular dependency issues relating to request models 2022-03-22 13:29:23 +01:00
raihantopu
9600bacf46 adding bn.json5 for 'Bengali Language Transalation' and language code, label, active (all commented) to environment.test.ts file 2022-03-22 16:29:42 +06:00
louiserumpf
304b6226ab typo 2022-03-22 11:23:39 +01:00
louiserumpf
26f821e865 updated German translation 2022-03-22 11:18:44 +01:00
Bruno Roemers
1697d1396e 88599: Support versioning of entities 2022-03-21 10:23:44 +01:00
Yana De Pauw
55431f1e06 85451: Fix config example issue and author filters 2022-03-18 12:04:48 +01:00
Jens Vannerum
075cd578a7 Merge branch 'w2p-88507_Fix-Download-Link-Edit-Bitstream-Page' into w2p-88507_Fix-Download-Link-Edit-Bitstream-Page_GitHub 2022-03-18 09:06:29 +01:00
Jens Vannerum
8d7d65958d 88507 Added a second test
- This test checks that the downloadUrl prop is not set to `bitstream._links.content.href` (the bug that's fixed)
- And checks that it's set to the correct download route of the bitstream
2022-03-18 09:01:52 +01:00
Tim Donohue
15acb47afa Rename data-e2e to data-test 2022-03-17 11:51:18 -05:00
Jens Vannerum
e84589a5bc Merge remote-tracking branch 'upstream/main' into w2p-88507_Fix-Download-Link-Edit-Bitstream-Page 2022-03-17 17:10:12 +01:00
Marie Verdonck
e19d0a0334 88300: LGTM remove unused import 2022-03-17 15:25:28 +01:00
Jens Vannerum
f00664b281 88507 Improved test
- Refactored the test for the download button
- This way we're checking the actual href on the button, not the component's property
2022-03-17 14:54:21 +01:00
Jens Vannerum
4a8f6c357f 88507 Fixed bitstreams not downloadable on edit item page
- Created a new property bitstreamDownloadUrl where the url is saved in
- Added a test for this
- Alter the component to href to this link and not show the button when the property would be null
2022-03-17 14:54:13 +01:00
Marie Verdonck
a79b4d1bdb Merge branch 'w2p-88300_issue-1379-7.0' into w2p-88300_issue-1379 2022-03-17 14:35:40 +01:00
Marie Verdonck
c50e6c224d 88300: Fix next button tooltip 2022-03-17 14:35:28 +01:00
Yana De Pauw
f4364c2d04 Merge remote-tracking branch 'upstream/main' into w2p-88300_issue-1379 2022-03-17 13:31:08 +01:00
Yana De Pauw
97dc241c52 88300: Issue 1379 - Angular: Browse-by Subject does not allow to proceed to next pages once filtered 2022-03-17 13:00:00 +01:00
Yana De Pauw
90e469ee16 Fix LGTM issue 2022-03-14 17:21:34 +01:00
Yana De Pauw
0016348c47 Merge remote-tracking branch 'upstream/main' into w2p-88248_Withdrawn-item-tombstone 2022-03-14 16:37:13 +01:00
Yana De Pauw
b21f76456d 88248: #346: Withdrawn item tombstone page 2022-03-14 16:33:10 +01:00
Tim Donohue
3ecb3c2209 Merge pull request #1553 from reetagithub/main
Update fi.json5
2022-03-14 09:23:12 -05:00
Tim Donohue
577a83d2c4 Merge pull request #1555 from harvard-lts/1527-dev-env
[Issue 1527] Set default env preboot to false
2022-03-14 08:59:40 -05:00
William Welling
3a4a10e453 set default env preboot to false
leaving production env to true
2022-03-14 08:26:22 -05:00
reetagithub
d4ed4ca883 Corrected a typo 2022-03-14 09:05:48 +02:00
Giuseppe Digilio
4affbd8d57 [CST-5449] Fix failed test 2022-03-11 12:18:14 +01:00
Davide Negretti
29a870b13f Merge branch 'main-gh' into DSC-389 2022-03-11 10:53:35 +01:00
Tim Donohue
d8b498bd02 Merge pull request #1521 from 4Science/fix-notifications-issue
Fixed notifications duplicate issue
2022-03-10 14:52:57 -06:00
Tim Donohue
b439c3bfcc Merge pull request #1546 from atmire/Issue-1136-Password-Registration-link-fixes
Redirect to 404 page for forgot password or registration link with used tokens
2022-03-10 11:02:55 -06:00
Tim Donohue
0768bfbac1 Merge pull request #1527 from wwelling/1522-preboot-config
[Issue 1522] Afford disable preboot for production
2022-03-10 10:08:27 -06:00
Giuseppe Digilio
9335c4ebea Merge remote-tracking branch 'origin/main' into fix-notifications-issue
# Conflicts:
#	src/app/root/root.component.html
2022-03-10 17:01:56 +01:00
Sufiyan Shaikh
8cc7cd1e99 Merge branch 'main' of bitbucket.org:4Science/dspace-angular into feature/CST-5329 2022-03-10 14:48:44 +05:30
Sufiyan Shaikh
027b281d7a [CST-5329] Add validate only check in the Import > Metadata page 2022-03-10 14:45:53 +05:30
Sufiyan Shaikh
2ffb723202 [CST-5329] Add validate only check in the Import > Metadata page 2022-03-10 13:04:22 +05:30
Tim Donohue
1f26ca9566 Merge pull request #1534 from mspalti/shib-authorization-fix
Invalidate the authorization cache before retrieving token for auth cookie.
2022-03-09 11:26:28 -06:00
Tim Donohue
7046e0ec48 Merge pull request #1549 from the-library-code/german-translation-2
German translation
2022-03-09 10:53:21 -06:00
Pascal-Nicolas Becker
0700029718 Working on inclusivness of the German translation 2022-03-09 16:28:38 +01:00
YPaulsen-TLC
3bbd2d9d64 message key translations
Final German message keys translations for DSpace 7,
2022-03-09 16:10:22 +01:00
YPaulsen-TLC
8b0c0348b2 New message key translations
German translations of DSpace 7 message keys.
2022-03-09 16:09:26 +01:00
YPaulsen-TLC
59f03817b3 DSpace translation
German translations of DSpace 7 message keys.
2022-03-09 16:08:48 +01:00
Yana De Pauw
503cfd92f6 Merge branch 'main' into w2p-85451_export-search-results-as-csv 2022-03-07 15:06:29 +01:00
Tim Donohue
bc705df144 Check two locations for config.json, as it's in a different location in CI 2022-03-04 17:10:02 -06:00
Tim Donohue
a0e2ac3d12 Update README with clearer instructions on running 'ng e2e' 2022-03-04 15:53:14 -06:00
Tim Donohue
852da27c2c Update Cypress to read REST API URL dynamically from config.json 2022-03-04 15:53:14 -06:00
Tim Donohue
ccf6c8f36e Update submission tests to use Demo Submitter. Switch Docker scripts to use updated dspace7-entities-data.sql which now includes demo in-progress submissions 2022-03-04 14:42:47 -06:00
Tim Donohue
8c865b758e Fix bugs / stability issues with search e2e tests 2022-03-04 14:42:47 -06:00
Tim Donohue
53042179f0 Add Submission e2e tests, enhance MyDSpace tests. Minor cleanup to support tests 2022-03-04 14:42:47 -06:00
Tim Donohue
fe0e414343 Upgrade Cypress 2022-03-04 14:42:47 -06:00
Tim Donohue
22d2c9ed66 Merge pull request #1524 from atmire/w2p-87242_Fix-form-reset-on-deposit-with-out-of-scope-fields
Fix forced re-init due to out-of-scope fields
2022-03-04 08:18:02 -06:00
Yura Bondarenko
1f808f0096 87242: Fix workspace/workflow confusion in spec names 2022-03-04 10:19:09 +01:00
Tim Donohue
fb2d22d7a2 Merge pull request #1535 from 4Science/CST-5316-browse-by-issue-date
[CST-5316] "Browsing by issue date" is stuck on loading
2022-03-03 15:28:31 -06:00
Tim Donohue
3cbebdb785 Merge pull request #1536 from pilasou/main
Adding missing parameters to fr.json5
2022-03-03 15:03:57 -06:00
Kristof De Langhe
b1bd5c7c85 Merge branch 'main' into w2p-88082_password-registration-link-fixes-main 2022-03-03 12:36:30 +01:00
Kristof De Langhe
fffc81389b Merge branch 'w2p-88082_password-registration-link-fixes' into w2p-88082_password-registration-link-fixes-main 2022-03-03 11:10:58 +01:00
Kristof De Langhe
9906d5fec0 88082: Revert navigateAction on redirectOn4xx 2022-03-03 11:10:35 +01:00
Tim Donohue
8663ded836 Merge pull request #1533 from atmire/w2p-87624_Issue-1532_Issue-resource-policy-edit-patches
Fix so newly added value on resource policy result in ADD patch, not REPLACE
2022-03-02 17:08:34 -06:00
Tim Donohue
106a73f0d3 Improve stability/consistency of e2e tests by visiting blank page between each test 2022-03-02 14:42:33 -06:00
Tim Donohue
ba40cfe75a Enhance Search results tests (stabilize). Add more MyDSpace tests, including starting a submission 2022-03-02 14:42:33 -06:00
Tim Donohue
ad32dbb864 Fix minor accessibility issue in Search results grid view. No accessible test found for link. Moved text to i18n as well. 2022-03-02 14:42:33 -06:00
Tim Donohue
d1399f106e Basic MyDSpace tests. Fix basic accessibility issues found 2022-03-02 14:42:33 -06:00
Tim Donohue
6b8eaa4b75 Refactor to ensure cy.login() custom command logs in programmatically (which is faster). Move UI login tests to login-modal.spec.ts 2022-03-02 14:42:33 -06:00
Tim Donohue
794aa33c8f Refactor to use "data-e2e" attributes in code to make selecting fields/buttons easier in e2e tests 2022-03-02 14:42:33 -06:00
Tim Donohue
cb91ccbc33 Refactor to use custom commands for login/logout & make admin user configurable 2022-03-02 14:42:33 -06:00
Tim Donohue
1f1c55d9dc Add login e2e tests. Tweak cypress retries so they don't apply to running e2e locally via GUI 2022-03-02 14:42:33 -06:00
Tim Donohue
34c33d7cf9 Make it easier to override default test UUIDS in cypress.json 2022-03-02 14:42:33 -06:00
Tim Donohue
0b543ac4de After adding .gitattributes, normalize end-of-lines 2022-03-02 14:42:04 -06:00
Tim Donohue
aeba6cb222 Add .gitattributes
Added to avoid unnecessary line ending changes
2022-03-02 14:31:09 -06:00
Kristof De Langhe
e583ce2a91 Merge branch 'main' into w2p-88082_password-registration-link-fixes-main 2022-03-01 15:18:18 +01:00
Kristof De Langhe
7924db512b 88082: Issue #1136 - Forgot/Register links loading fix 2022-03-01 15:11:25 +01:00
William Welling
b149cf2d77 afford production disable preboot 2022-02-25 09:51:04 -06:00
Tim Donohue
8d953f8488 Merge pull request #1538 from DSpace/dependabot/npm_and_yarn/nanoid-3.3.1
Bump nanoid from 3.1.30 to 3.3.1
2022-02-24 14:56:04 -06:00
Tim Donohue
40881cf550 Merge pull request #1531 from DSpace/dependabot/npm_and_yarn/url-parse-1.5.6
Bump url-parse from 1.5.3 to 1.5.6
2022-02-24 14:34:08 -06:00
Tim Donohue
bcbd64ad77 Merge pull request #1539 from DSpace/dependabot/npm_and_yarn/follow-redirects-1.14.9
Bump follow-redirects from 1.14.5 to 1.14.9
2022-02-24 14:22:02 -06:00
Tim Donohue
395c4aa69d Merge pull request #1540 from DSpace/dependabot/npm_and_yarn/node-fetch-2.6.7
Bump node-fetch from 2.6.6 to 2.6.7
2022-02-24 14:03:53 -06:00
dependabot[bot]
3cfde7bf66 Bump url-parse from 1.5.3 to 1.5.6
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.3 to 1.5.6.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.3...1.5.6)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-24 18:42:16 +00:00
dependabot[bot]
00d77175c8 Bump node-fetch from 2.6.6 to 2.6.7
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.6 to 2.6.7.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.6...v2.6.7)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-24 18:42:11 +00:00
dependabot[bot]
951e1d98ae Bump follow-redirects from 1.14.5 to 1.14.9
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.5 to 1.14.9.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.5...v1.14.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-24 18:42:10 +00:00
dependabot[bot]
2a74326f80 Bump nanoid from 3.1.30 to 3.3.1
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.3.1.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-24 18:42:06 +00:00
Tim Donohue
0aa83f7644 Merge pull request #1517 from DSpace/dependabot/npm_and_yarn/karma-6.3.14
Bump karma from 5.2.3 to 6.3.14
2022-02-24 12:41:26 -06:00
Davide Negretti
52ab145f46 Merge remote-tracking branch 'bb/main' into DSC-389 2022-02-24 16:46:00 +01:00
Davide Negretti
23573fb2e8 Merge remote-tracking branch 'bb/main' into DSC-389 2022-02-24 16:26:07 +01:00
Davide Negretti
3a3ebd4c4c [DSC-389] Fixed default value of showPaginator 2022-02-24 16:25:47 +01:00
Tim Donohue
cba0ad6403 Merge pull request #1530 from 4Science/CST-5341-back-button
[CST-5341] Link back to the item page in the now downloading page
2022-02-23 17:06:42 -06:00
Tim Donohue
27c247d46c Merge pull request #1512 from atmire/w2p-84367_Various-small-changes
Various small changes to improve customizability
2022-02-23 16:32:53 -06:00
Pierre Lasou
d7c155508f Adding dso-selector.* parameters translation
Adding missing parameter and their French translation.
2022-02-22 16:05:18 -05:00
Pierre Lasou
3f4d67e932 Adding sorting paramaters
Adding all missing sorting parameters and their translation in french.
2022-02-22 12:19:32 -05:00
Davide Negretti
0b13ea1a72 [CST-5316] Wrong 'dc.date.issue' format causes loader to be shown indefinitely in "Browsing by issue date" page 2022-02-22 13:07:44 +01:00
Davide Negretti
0bbd505083 [CST-5316] Wrong 'dc.date.issue' format causes loader to be shown indefinitely in "Browsing by issue date" page 2022-02-22 13:07:44 +01:00
Davide Negretti
e22d06376f [CST-5316] Wrong 'dc.date.issue' format causes loader to be shown indefinitely in "Browsing by issue date" page 2022-02-22 12:57:21 +01:00
Art Lowel
b308ee1b56 Merge branch 'add-themed-community-list-component' into w2p-84367_Various-small-changes 2022-02-22 12:29:51 +01:00
Art Lowel
b66c5030f4 remove test contents 2022-02-22 12:29:40 +01:00
Art Lowel
79a69e6b31 Merge branch 'add-themed-community-list-component' into w2p-84367_Various-small-changes 2022-02-22 12:26:11 +01:00
Art Lowel
dc00fd4c75 add themed community list component 2022-02-22 12:20:19 +01:00
Michael Spalti
7fa87c3418 Invalid the authorization cache before retrieving token for auth cookie. 2022-02-19 14:25:32 -08:00
Davide Negretti
4a6c896eea [CST-5341] Back button moved below the page title 2022-02-18 16:56:06 +01:00
Marie Verdonck
63d98e5f9f 87624: Issue #1532 - Remove null fields from serialised objects so null=>value fields become ADD patches 2022-02-18 11:52:29 +01:00
Yura Bondarenko
2830da9557 Fix undefined injector issue 2022-02-18 08:23:41 +01:00
Yura Bondarenko
fba1dfb689 Add missing provider to custom ds-search-page 2022-02-17 23:28:46 +01:00
Tim Donohue
736802cdbd Merge pull request #1526 from wwelling/patch-1
[Issue 1525] Unwrap environment during conversion to YAML
2022-02-17 15:16:29 -06:00
Davide Negretti
b2586d31ec [CST-5341] Link back to the item page in the now downloading page 2022-02-17 13:39:29 +01:00
William Welling
2e7fb7dda6 unwrap environment during conversion to yaml 2022-02-16 12:10:59 -06:00
lotte
143b7c3e0d 87382: fixing circular dependencies 2022-02-16 13:52:32 +01:00
Yura Bondarenko
a698610043 87242: Refactor workspaceItem to submissionObject 2022-02-15 13:21:27 +01:00
Yura Bondarenko
f4b8d4fe41 87242: Fix forced re-init due to out-of-scope fields 2022-02-15 11:53:21 +01:00
Tim Donohue
78c8c38ad4 Merge pull request #1461 from WolfgangT71/main
Update de.json5
2022-02-14 16:54:22 -06:00
Tim Donohue
5bf1d870c2 Copy/move translated text to appropriate sections 2022-02-14 14:58:01 -06:00
Rezart Vata
797e1882b8 [DSC-466] Fixed notification reload issue 2022-02-14 11:52:49 +01:00
SDGBot
90fb99be9a Turkish Translation
Hi everyone. As İstanbul Technical University IT Office, we have translated ui to Turkish.
2022-02-14 13:30:49 +03:00
dependabot[bot]
0abb53928d Bump karma from 5.2.3 to 6.3.14
Bumps [karma](https://github.com/karma-runner/karma) from 5.2.3 to 6.3.14.
- [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/v5.2.3...v6.3.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 05:50:23 +00:00
Pratik Rajkotiya
079b2a772a [DSC-389] comment and import fixed. 2022-02-10 18:46:38 +05:30
Yura Bondarenko
1919f251a1 87370: Update SearchFormComponent specs 2022-02-09 18:56:48 +01:00
Yura Bondarenko
28cc54e3f8 Merge remote-tracking branch 'upstream/main' into w2p-84367_Various-small-changes 2022-02-09 16:43:14 +01:00
Pratik Rajkotiya
15ab8216ec [DSC-389] test cases added for pagination component. 2022-02-08 11:47:02 +05:30
Pratik Rajkotiya
8c23c47645 [DSC-389] pagination data shown 2022-02-04 17:37:34 +05:30
Tim Donohue
e4f483c308 Minor updates to README for 7.2 2022-02-03 14:04:49 -06:00
Pratik Rajkotiya
57ff37ec7f [DSC-389] merged with main branch 2022-02-02 19:11:06 +05:30
Pratik Rajkotiya
e4d099df43 [DSC-389] pagination added. 2022-02-02 14:05:10 +05:30
Tim Donohue
d7f64d6139 Merge pull request #1438 from mspalti/iiif-bitstream-edit
Edit IIIF bitstream metadata
2022-02-01 11:21:04 -06:00
Tim Donohue
7777fa6229 Merge pull request #1509 from tdonohue/enable_scottish
Enable Scottish Gaelic
2022-02-01 10:48:09 -06:00
Tim Donohue
5290ca8756 Enable Scottish Gaelic 2022-02-01 10:00:03 -06:00
Tim Donohue
e6299030f0 Merge pull request #1508 from donaldi/main
Full Scottish Gaelic translation.
2022-02-01 09:41:50 -06:00
Donald I Macdonald
ffec5b7f74 Full Scottish Gaelic translation.
Translated and proofed by Stòrlann Nàiseanta na Gàidhlig.
2022-02-01 11:05:39 +00:00
Michael Spalti
ac716c4b99 Single form initialization. 2022-01-31 10:38:59 -08:00
Tim Donohue
0fbd48ede9 Merge pull request #1475 from 4Science/CST-4506_item_embargo
Add submission section for item embargo
2022-01-31 11:13:43 -06:00
Michael Spalti
94b2f53220 Removed unnecessary logging. 2022-01-31 07:40:52 -08:00
Tim Donohue
3d7fcef079 Merge pull request #1470 from hardyoyo/port-oidc-auth-plugin-from-dspace-cris
Port OIDC (OpenID Connect) auth plugin from DSpace-CRIS
2022-01-31 08:50:20 -06:00
Tim Donohue
ccdba9b307 Merge pull request #1507 from 4Science/fix_submission_upload
Fix submission upload
2022-01-28 10:06:24 -06:00
Tim Donohue
c98ffd21ea Merge pull request #1503 from atmire/fix-delete-item-with-empty-entity-type
Fix deleting an item with an empty or invalid entity type
2022-01-28 09:47:05 -06:00
Giuseppe Digilio
67d6c6fcbb [CST-4506] use default cursor when drag and drop is disabled 2022-01-28 14:13:21 +01:00
Giuseppe Digilio
4e5bf6e73d [CST-4506] Clean date fields when switching through access conditions 2022-01-28 11:11:34 +01:00
Giuseppe Digilio
f991b4edb2 [CST-4506] Fix item access condition form layout 2022-01-28 11:10:49 +01:00
Giuseppe Digilio
6c720b8031 [CST-4506] Fix item access condition remove operation 2022-01-28 11:09:48 +01:00
Giuseppe Digilio
232baf5973 [CST-4506] Fix bitstream access condition form layout 2022-01-28 11:08:32 +01:00
Giuseppe Digilio
4ca2e9a4b1 [CST-4506] Add i18n labels for item access conditions form 2022-01-28 11:07:29 +01:00
Giuseppe Digilio
9019b80993 [CST-4506] Disable drag and drop for access conditions form group 2022-01-28 09:02:04 +01:00
Michael Spalti
8bfd6ca031 Form re-initialization limited to iiif enabled item. 2022-01-27 18:56:34 -08:00
Michael Spalti
7c5d31fbbd Removed the unused imports. 2022-01-27 15:21:48 -08:00
Michael Spalti
47581db60a Updated test. 2022-01-27 15:08:20 -08:00
Michael Spalti
d91d12ed0d Updated dynamic form. 2022-01-27 14:46:00 -08:00
Tim Donohue
5f90b29d96 Merge pull request #1472 from 4Science/CST-4875-Feedback-form
Feedback form
2022-01-27 15:12:50 -06:00
Giuseppe Digilio
8a668a5073 [CST-4506] fix issue with delete button alignment 2022-01-27 18:58:28 +01:00
Art Lowel
16884682d8 track subscriptions and remove nested subscribe 2022-01-27 18:16:43 +01:00
Giuseppe Digilio
eca9088337 [CST-5198] fix issue with uploaded file that disappear on deposit 2022-01-27 17:59:31 +01:00
Giuseppe Digilio
2f4a667119 [CST-5197] fix issue with uploading file during workflow 2022-01-27 17:55:56 +01:00
Art Lowel
74a6e3ce6a Fix issue where an item with an empty or invalid entity type couldn't be deleted 2022-01-27 17:31:28 +01:00
Giuseppe Digilio
6bbc7f96c2 [CST-4875] remove unused imports 2022-01-27 16:35:32 +01:00
Giuseppe Digilio
42cc68f8b7 [CST-4506] remove unused mock event properties 2022-01-27 15:47:25 +01:00
Rezart Vata
3fa72ebcaa [CST-4875] Fix url redirect 2022-01-27 13:43:41 +01:00
Hardy Pottinger
56e7d4b8c6 Removed unneeded export in shared.module.ts 2022-01-26 14:45:50 -06:00
Hardy Pottinger
d98d3fe0de Removing un-used imports from DSpace-CRIS, and un-implemented ORCID auth 2022-01-26 09:47:26 -06:00
Luca Giamminonni
8c14193f32 [DSC-196] Added components to log in with OIDC 2022-01-26 09:45:01 -06:00
Giuseppe Digilio
d156e01517 [CST-4875] Fix related page using the complete url 2022-01-26 16:41:24 +01:00
Rezart Vata
ed6cb04de4 [CST-4875] Fix unit testing 2022-01-26 15:32:02 +01:00
Rezart Vata
2ac493cb19 [CST-4875] Fixes requested by Tim Gitlab 2022-01-26 14:31:16 +01:00
Corrado Lombardi
1de409d6a4 Merge branch 'main' into DSC-389 2022-01-26 12:27:50 +01:00
Tim Donohue
acb842edf0 Merge pull request #1500 from 4Science/search-grid-bug
Fix issue with grid view mode
2022-01-25 16:18:50 -06:00
Giuseppe Digilio
2ceaba742f [CST-5182 Fix issue with grid view mode 2022-01-25 19:28:03 +01:00
Tim Donohue
239888dc9e Merge pull request #1498 from 4Science/CST-4880_Show-an-error-page-if-the-REST-API-is-not-available
[CST-4880] Add ServerCheckGuard in order to show internal server error page when rest server is not available
2022-01-25 11:52:37 -06:00
Giuseppe Digilio
d9df7336df [CST-4880] Fix invalidateRootCache method 2022-01-25 10:57:08 +01:00
Giuseppe Digilio
db3d760f2b [CST-4506] Fix LGTM issues 2022-01-25 10:40:53 +01:00
Giuseppe Digilio
04c8cb7590 [CST-4506] Fix issue with submission bitstream edit 2022-01-25 10:40:11 +01:00
Michael Spalti
8a30748b41 Fixed spacing issue. 2022-01-24 15:28:05 -08:00
Michael Spalti
1ec61e4aec Merge branch 'main' into iiif-bitstream-edit 2022-01-24 14:10:12 -08:00
Giuseppe Digilio
944f605671 [CST-4875] Fix imports path 2022-01-24 22:42:27 +01:00
Giuseppe Digilio
4cfff33301 [CST-4880] Add ServerCheckGuard in order to show internal server error page when rest server is not available 2022-01-24 22:04:02 +01:00
Corrado Lombardi
6a78c1bcf8 [CST-4875] removed comment and redundant import 2022-01-24 21:48:00 +01:00
Corrado Lombardi
36e5a75325 [CST-4875] added spacing and updated validation messages 2022-01-24 21:47:17 +01:00
Corrado Lombardi
78ce20ab8f [CST-4875] feedback created using DataService 2022-01-24 21:46:32 +01:00
Giuseppe Digilio
89c9e9aba3 Merge remote-tracking branch 'origin/main' into CST-4506_item_embargo
# Conflicts:
#	src/app/core/core.module.ts
#	src/app/submission/objects/submission-objects.effects.ts
#	src/app/submission/submission.module.ts
2022-01-24 19:58:50 +01:00
Giuseppe Digilio
973ceb3b4b [CST-4506] Address feedback 2022-01-24 19:54:21 +01:00
Corrado Lombardi
fedb2fce12 Merge branch 'main' into CST-4875-Feedback-form
# Conflicts:
#	src/app/app.module.ts
#	src/app/core/core.module.ts
#	src/app/core/data/feature-authorization/feature-id.ts
#	src/app/footer/footer.component.html
#	src/themes/custom/theme.module.ts
2022-01-24 19:21:52 +01:00
Tim Donohue
4fdd3b84cb Merge pull request #1497 from atmire/replace-href-hash-with-void
Replace href="#" with href="javascript:void(0);" everywhere
2022-01-24 09:50:41 -06:00
Tim Donohue
f94820d70e Merge pull request #1496 from atmire/fix-profile-group-link-bug
Fix user profile page
2022-01-24 09:02:56 -06:00
Art Lowel
132e68a9f4 Provide the GroupDataservice in its module to ensure its @dataservice annotation gets registered in time 2022-01-24 09:54:28 +01:00
Art Lowel
c34f75b443 replace href="#" with href="javascript:void(0);" everywhere 2022-01-24 09:27:19 +01:00
Michael W Spalti
9649b5fb68 More layout changes. 2022-01-22 15:44:50 -08:00
Michael W Spalti
32b2e181bd Removed unused import. 2022-01-21 16:42:49 -08:00
Michael W Spalti
0e6dae2b61 Added semis. 2022-01-21 15:05:52 -08:00
Michael W Spalti
8d3b265038 Using DsDynamicInputModel* and updating scss for ds-dynamic-form-control-container. 2022-01-21 14:43:39 -08:00
Tim Donohue
70b456dbfc Merge pull request #1493 from DSpace/revert-1407-DSC-287-Show-an-error-page-if-the-REST-API-is-not-available
Revert "Show an error page if the rest api is not available"
2022-01-21 13:11:58 -06:00
Tim Donohue
e61de0682f Revert "Show an error page if the rest api is not available" 2022-01-21 11:50:08 -06:00
Yana De Pauw
0903ca5286 Merge remote-tracking branch 'upstream/main' into w2p-85451_export-search-results-as-csv 2022-01-21 16:51:49 +01:00
Tim Donohue
001ba43404 Merge pull request #1490 from tdonohue/fix_docker_compose
Docker-Compose Environment variables must be strings or numbers, not booleans
2022-01-20 15:55:21 -06:00
Tim Donohue
bcb96c522c Environment variables must be strings or numbers, not booleans 2022-01-20 14:08:22 -06:00
Tim Donohue
d75ab378ac Merge pull request #1407 from 4Science/DSC-287-Show-an-error-page-if-the-REST-API-is-not-available
Show an error page if the rest api is not available
2022-01-20 11:41:34 -06:00
Tim Donohue
9310d6e649 Merge pull request #1478 from 4Science/CST-4633-search-refactoring
MyDSpace Search component refactoring
2022-01-20 11:41:06 -06:00
Giuseppe Digilio
532d8fb9a3 [CST-4506] fix SubmissionSectionFormComponent name 2022-01-20 18:30:29 +01:00
Giuseppe Digilio
b81cc103ff [CST-4506] Optimize submission sections components declarations in the submission.module 2022-01-20 18:29:31 +01:00
Giuseppe Digilio
a95bf63ad0 [CST-4633] Fix issue with already selected relationship in the dynamic-lookup-relation-search-tab.component 2022-01-20 18:15:30 +01:00
Giuseppe Digilio
016bf4b368 [CST-4633] Add flag to hide view mode switcher 2022-01-20 18:08:57 +01:00
Tim Donohue
f65930276e Merge pull request #1479 from 4Science/CST-4981-statistics-are-always-accessible-even-if-are-restricted-to-administrator
Fix statistics page in order to show them only when user has authorizations
2022-01-20 10:20:21 -06:00
Giuseppe Digilio
98bdc59c28 [CST-4880] use getPageInternalServerErrorRoute function to determinate 500 page route 2022-01-20 14:26:04 +01:00
Giuseppe Digilio
fd610dbf4d [CST-4880] Set 500 response status to internal server error page 2022-01-20 14:24:54 +01:00
Tim Donohue
710d893187 Merge pull request #1465 from atmire/move-correlation-id-to-store
Move correlation ID to store
2022-01-14 10:14:46 -06:00
Giuseppe Digilio
1abcc027a5 Merge branch 'CST-4875-Feedback-form' of github.com:4Science/dspace-angular into CST-4875-Feedback-form 2022-01-14 16:40:47 +01:00
Giuseppe Digilio
746d0201e8 Merge remote-tracking branch 'origin/main' into CST-4633-search-refactoring 2022-01-14 15:21:19 +01:00
Giuseppe Digilio
b7c46ffe29 [CST-4633] Fix e2e test 2022-01-14 12:37:29 +01:00
Giuseppe Digilio
d7388bcfd8 [CST-4633] Change dynamic-lookup-relation-search-tab.component in order to use search-component 2022-01-14 12:24:44 +01:00
Giuseppe Digilio
1f01cbaa93 [CST-4633] Improve search.component in order to use selectable functionality 2022-01-14 12:21:36 +01:00
Giuseppe Digilio
0d73b6d164 [CST-4633] Fix issue with detail view mode 2022-01-14 12:18:42 +01:00
Tim Donohue
6a7691000b Merge pull request #1489 from atmire/Process-empty-parameters-fix
Scripts & Processes without parameters fix
2022-01-13 16:15:49 -06:00
Rezart Vata
aab544e723 [CST-4875] Fixed commenting, service test & compoent from issue 1472 2022-01-13 17:14:56 +01:00
Tim Donohue
9196610170 Merge pull request #1427 from atmire/Always-enable-deposit-button
Always enable deposit button
2022-01-13 09:45:24 -06:00
Tim Donohue
e321bbf9ab Merge pull request #1434 from atmire/shared-feature-authority-control
Allow facets to be authority controlled
2022-01-13 08:24:56 -06:00
Giuseppe Digilio
6b2efd2b16 [CST-4633] Change view mode labels 2022-01-13 15:17:06 +01:00
Giuseppe Digilio
539ae50214 [CST-4633] Change label translations 2022-01-13 15:16:40 +01:00
Rezart Vata
768c7f8b28 [CST-4505] Fixed canChangeDiscoverable managment and unit testing 2022-01-13 13:45:25 +01:00
Kristof De Langhe
8666ae74f6 86367: Process empty parameters fix 2022-01-13 10:48:46 +01:00
Giuseppe Digilio
6eca73bdec Merge remote-tracking branch 'origin/main' into CST-4633-search-refactoring 2022-01-13 09:42:44 +01:00
Giuseppe Digilio
0c9dc4286c [CST-4981] Fix error with yarn clean command 2022-01-12 20:09:48 +01:00
Giuseppe Digilio
6d1674cc8a [CST-4981] Fix issue with missing statistics menu 2022-01-12 20:09:21 +01:00
Giuseppe Digilio
7e7ad9a4f3 [CST-4880] Add fallback strategy for hanging server check cached requests 2022-01-12 18:32:33 +01:00
Michael Spalti
4f6b579204 Remove metatada field when no data is provided in form.
Updated comments.
2022-01-10 11:22:53 -08:00
Tim Donohue
2835597073 Merge pull request #1476 from 4Science/CST-5064
Show submitter in version history table
2022-01-10 10:03:25 -06:00
Davide Negretti
216eb40ab5 [CST-5064] console.log removed 2022-01-10 10:30:11 +01:00
Tim Donohue
3b618ff66f Merge pull request #1467 from 4Science/CST-5065
Admin is unable to reset other users' password
2022-01-05 14:10:11 -06:00
Tim Donohue
c7663dc311 Merge pull request #1454 from atmire/w2p-85979_canChangePassword-ui-change
Disallow Shibboleth users to change password
2022-01-04 10:09:04 -06:00
Tim Donohue
e7f6321f01 Merge pull request #1474 from tdonohue/docker_runtime_config
Update docker-compose scripts to use environment variables (to align with runtime configs)
2022-01-04 09:34:55 -06:00
Giuseppe Digilio
3b00d01466 [CST-4633] fix issue with view mode when not in params 2022-01-04 12:59:52 +01:00
Pratik Rajkotiya
565c4106f9 [DSC-389] add pagination. 2021-12-31 10:26:28 +05:30
Rezart Vata
99aef98443 [CST-4981] structure improvement,removed unecessary informations 2021-12-24 19:34:10 +01:00
Rezart Vata
f154fb60e0 [CST-4981] Fixed unit testing 2021-12-24 17:49:55 +01:00
Giuseppe Digilio
504604cfc7 Merge remote-tracking branch 'origin/main' into CST-4981-statistics-are-always-accessible-even-if-are-restricted-to-administrator
# Conflicts:
#	src/app/community-page/edit-community-page/community-authorizations/community-authorizations.component.ts
#	src/app/navbar/navbar.component.spec.ts
#	src/app/navbar/navbar.component.ts
#	src/app/shared/resource-policies/form/resource-policy-form.component.spec.ts
2021-12-24 12:25:03 +01:00
Giuseppe Digilio
522816c29c Merge remote-tracking branch 'origin/main' into CST-4633-search-refactoring
# Conflicts:
#	src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts
2021-12-24 11:54:10 +01:00
Giuseppe Digilio
e76514ca39 [CST-4633] fix issue with view mode 2021-12-24 11:51:06 +01:00
Giuseppe Digilio
cff29539fb [CST-4633] fix issue with view mode list 2021-12-24 11:41:23 +01:00
Giuseppe Digilio
6f86824f23 [CST-4633] restored ds-my-dspace-new-submission from mydspace page 2021-12-24 11:16:16 +01:00
Davide Negretti
9fd34034b9 [CST-5064] Tests 2021-12-24 10:13:50 +01:00
Davide Negretti
ffaebabd3b [CST-5064] Tests WIP 2021-12-24 00:47:31 +01:00
Giuseppe Digilio
d2a4a55507 [CST-4633] fix issue with filter scope and configuration 2021-12-23 23:41:56 +01:00
Rezart Vata
12ab877ae4 [CST-4981] fixed and finished unit testing 2021-12-23 21:59:24 +01:00
Davide Negretti
0550cd55d1 [CST-5064] Show submitter in version history table 2021-12-23 20:12:25 +01:00
Giuseppe Digilio
bb64058f63 [CST-4506] fix test 2021-12-23 19:07:07 +01:00
Tim Donohue
13db7c8c19 Update docker-compose for runtime configs. Remove all config files & replace with env variables 2021-12-23 10:27:49 -06:00
Yura Bondarenko
fc059520a0 Fix LGTM issues 2021-12-23 17:09:44 +01:00
Yura Bondarenko
c1e8bbbeae 86016: Add typedocs 2021-12-23 16:55:48 +01:00
Yura Bondarenko
a2515c11e1 86016: Update log.interceptor.spec.ts 2021-12-23 16:55:48 +01:00
Yura Bondarenko
50d8719c41 Remove stray fdescribe 2021-12-23 16:55:48 +01:00
Yura Bondarenko
3c8c425843 86016: Add unit tests for correlationId reducer & service 2021-12-23 16:55:47 +01:00
Art Lowel
2fe5587e02 move the correlation id to the ngrx store 2021-12-23 16:55:46 +01:00
Giuseppe Digilio
db25e27bff [CST-4506] fix absolute paths 2021-12-23 16:31:59 +01:00
Corrado Lombardi
3452680b47 [CST-4875] removed comments, unused imports and variables 2021-12-23 09:11:00 +01:00
Tim Donohue
ba268d4f28 Merge pull request #1471 from wwelling/readme-corrections
Minor readme configuration corrections
2021-12-22 14:31:56 -06:00
William Welling
9646088931 minor readme configuration corrections 2021-12-22 14:29:37 -06:00
Tim Donohue
72aeeff5ca Merge pull request #1437 from wwelling/1422-deploy-time-config
Runtime configuration via YAML (Ensure UI config changes don't require a rebuild)
2021-12-22 14:18:10 -06:00
Rezart Vata
e594cabe4a [CST4981] finished task, working on unit testing 2021-12-22 18:01:37 +01:00
William Welling
f055d1676e add NODE_ENV development for yarn start:dev 2021-12-22 10:51:26 -06:00
William Welling
c43fdb9754 add missing break in switch 2021-12-22 10:50:06 -06:00
William Welling
3476fe3f0f remove browse by types from config example 2021-12-22 09:20:15 -06:00
William Welling
15fb55ccb5 Merge branch 'main' of github.com:DSpace/dspace-angular; branch '1422-deploy-time-config' of github.com:wwelling/dspace-angular into 1422-deploy-time-config 2021-12-22 09:18:14 -06:00
Tim Donohue
a34eb4682b Merge pull request #1468 from atmire/w2p-85993_browseby-from-rest
Use browse configuration from REST
2021-12-22 08:37:01 -06:00
Giuseppe Digilio
ebbae16fb3 Merge remote-tracking branch 'origin/main' into CST-4506_item_embargo 2021-12-22 15:28:58 +01:00
lotte
39e0f1a65b Added test and fixed lgtm errors 2021-12-22 07:58:13 +01:00
William Welling
f52dd92fbc Update config.server.ts 2021-12-21 23:57:38 -06:00
William Welling
e2c1319011 Update Configuration.md 2021-12-21 23:53:01 -06:00
Tim Donohue
1c63fb2b49 Merge pull request #1417 from 4Science/CST-4878
Upload files - Edit bitstream (improvements and bug fixes)
2021-12-21 14:33:22 -06:00
lotte
0e6c3a3a9d 85993: small changes and lint fixes 2021-12-21 16:48:31 +01:00
lotte
15dfa3cd82 85993: comcol/switcher/guard browse by changes + test updates 2021-12-21 15:38:50 +01:00
Davide Negretti
8f2ef71e3c [CST-5065] Fix 2021-12-21 13:53:17 +01:00
Rezart Vata
f04f4b4f34 [CST-4878] Finished working on embargo add part of form and unit testing 2021-12-21 13:35:29 +01:00
Davide Negretti
f46767be89 [CST-5065] Tests fixed 2021-12-21 13:06:16 +01:00
Davide Negretti
6a1bbc8afc [CST-5065] Admin is unable to reset other user password (function implementation) 2021-12-21 12:43:13 +01:00
Luca Giamminonni
21e78e33e5 [CST-5065] Admin is unable to reset other user password (cherry pick from DSC-215) 2021-12-21 11:50:55 +01:00
Davide Negretti
d246965cfb [CST-4879] TypeError fixed 2021-12-21 11:17:12 +01:00
William Welling
66555c9fc1 move NODE_ENV production to start:prod 2021-12-20 15:36:36 -06:00
William Welling
f9328da826 add theme head tags to example 2021-12-20 15:29:21 -06:00
William Welling
f75854b77b default to production 2021-12-20 15:29:04 -06:00
William Welling
d59e8becc3 specify NODE_ENV for production scripts 2021-12-20 15:28:19 -06:00
William Welling
f652490c1c Merge branch 'main' of github.com:DSpace/dspace-angular into 1422-deploy-time-config 2021-12-20 12:30:53 -06:00
William Welling
0fe6d4536c update readme 2021-12-20 12:22:52 -06:00
Tim Donohue
e86afacff1 Add e2e test notes 2021-12-20 12:17:50 -06:00
Tim Donohue
c43970ffd4 Merge pull request #1428 from atmire/w2p-85123_add-support-for-themeable-favicons
Add support for themeable favicons
2021-12-20 11:53:07 -06:00
Tim Donohue
1c2dcab82d Merge pull request #1459 from CICBA/fix-collection-load
Fix to collection selection window not loading successfully.
2021-12-20 11:15:13 -06:00
Giuseppe Digilio
c9b48ccb65 [CST-4633] fix tests 2021-12-19 17:36:03 +01:00
Tim Donohue
099582ee96 Merge pull request #1462 from tdonohue/e2e-retries
Tell Cypress to retry twice if an e2e test failure occurs
2021-12-17 13:30:01 -06:00
Giuseppe Digilio
f43317c2ee [CST-4633] fix build 2021-12-17 19:51:50 +01:00
Giuseppe Digilio
9722164705 [CST-4633] use search.component.ts for the mydspace page 2021-12-17 19:51:37 +01:00
Michael Spalti
b3808ba6a1 Minor update to setIIIFStatus method. 2021-12-17 10:38:35 -08:00
Tim Donohue
a818727ed7 Tell Cypress to retry twice if an e2e test failure occurs 2021-12-17 12:36:22 -06:00
Giuseppe Digilio
ef18308893 [CST-4633] Refactoring of search.component in order to have all functionality used during the different search components 2021-12-17 19:35:28 +01:00
Michael Spalti
4fbf99a451 Added change detection to assure the form updates. 2021-12-17 10:14:39 -08:00
WolfgangT71
7a5381aa0f Update de.json5 2021-12-17 17:53:47 +01:00
Tim Donohue
7d88897afb Merge pull request #1458 from atmire/w2p-85862-handling-very-long-strings
Handling very long strings for metadata and file names
2021-12-17 10:05:45 -06:00
William Welling
4c46d9db2b refactor environment.prod.ts to environment.production.ts 2021-12-17 08:18:56 -06:00
Michael Spalti
e02bb75075 Unused import. 2021-12-16 16:14:02 -08:00
Michael Spalti
c1a0b21e2a Added additional conditions to check before adding iiif form elements. 2021-12-16 15:57:38 -08:00
Tim Donohue
982f7bcd17 Merge pull request #1457 from atmire/fix-legacy-links
Update legacy relative links to angular 11 format
2021-12-16 16:47:22 -06:00
Bruno Roemers
9f44cecdad 85123: Document head tags in environment.common.ts 2021-12-16 17:29:08 +01:00
lotte
0592e9a32d 85862: fixed test 2021-12-16 17:28:34 +01:00
Santiago Tettamanti
ff6cde76df Fix to collection selection window not loading successfully.
In collection dropdown component, moved the return statement that returned the collection list outside the condition that checks if it's the final page
2021-12-16 10:32:04 -03:00
lotte
c2b5ce191a 85862: Added .dont-break-out to truncatable part, item list titles and fixed breadcrumb overflow 2021-12-16 14:11:34 +01:00
lotte
e7f0921e6e 85862: Handling very long strings for metadata/files on item page, edit metadata/bitstreams page 2021-12-16 14:11:32 +01:00
Art Lowel
9801ae3414 update legacy relative links to angular 11 format 2021-12-16 10:56:29 +01:00
Giuseppe Digilio
b6ae15fbd2 [CST-4633] move search.component to search module and create search models folder 2021-12-16 10:00:08 +01:00
William Welling
21fcc9dde8 prefix dspace environment variables 2021-12-16 00:25:59 -06:00
Michael Spalti
c112a036df Clean up test. 2021-12-15 18:30:13 -08:00
Michael Spalti
b4b17136a6 Updated regex and condition for iiif.enabled metadata check. 2021-12-15 18:30:13 -08:00
Michael Spalti
fe5b7663e9 All edit component tests are running and passing 2021-12-15 18:30:12 -08:00
Michael Spalti
e521f2d579 Added tests for iiif form field content at startup 2021-12-15 18:30:12 -08:00
Michael Spalti
9ae38f4a6c Completed edit page and tests. 2021-12-15 18:30:12 -08:00
Michael Spalti
5865b83697 Added iiif form fields to the bitstream edit component. 2021-12-15 18:30:12 -08:00
Giuseppe Digilio
a4d91c37a7 [CST-4633] Create search.module and resolve dependencies issues 2021-12-15 22:38:08 +01:00
Tim Donohue
b8016d7fae Merge pull request #1448 from mspalti/update-mirador-deps
Updated Mirador dependencies.
2021-12-15 15:37:51 -06:00
Tim Donohue
7abdceb095 Merge pull request #1455 from tdonohue/fix_de_lang
German language syntax fix, add trailing quote
2021-12-15 15:04:27 -06:00
Tim Donohue
32ae686e36 Syntax fix, add trailing quote 2021-12-15 14:24:23 -06:00
Art Lowel
7529fcde35 remove fdescribe 2021-12-15 16:46:40 +01:00
lotte
b7d01127a5 Removed unnecessary import 2021-12-15 16:21:55 +01:00
lotte
dd69bc65ab Fixes to tests 2021-12-15 16:21:09 +01:00
lotte
a1578303fa 85993: Browse by from rest for menu and comcol page browse by 2021-12-15 16:15:06 +01:00
lotte
6594a3877f fixed lint/lgtm issues 2021-12-15 15:13:27 +01:00
Giuseppe Digilio
b4693b9bc4 Merge remote-tracking branch 'origin/main' into CST-4633-search-refactoring 2021-12-15 15:09:06 +01:00
Giuseppe Digilio
8f4379f3b4 Merge remote-tracking branch 'origin/main' into DSC-287-Show-an-error-page-if-the-REST-API-is-not-available
# Conflicts:
#	src/app/app-routing.module.ts
2021-12-15 15:00:47 +01:00
lotte
2f022f505d 85979: tests for canChangePassword UI changes 2021-12-15 14:41:10 +01:00
lotte
71e40fdb6e 85979: only show security tab on profile page when canChangePassword FeatureID is true 2021-12-15 14:04:38 +01:00
William Welling
b820794790 comment env-to-yaml script 2021-12-14 18:11:37 -06:00
William Welling
c7321f9a22 update script comment 2021-12-14 18:02:27 -06:00
William Welling
0afa7c5bab update readme examples to yaml 2021-12-14 18:01:34 -06:00
Tim Donohue
4ace07156f Merge pull request #1452 from tdonohue/minor_cleanup
Remove second unnecessary "relativeLinkResolution: 'legacy'" setting after Angular 11 upgrade
2021-12-14 10:52:02 -06:00
Tim Donohue
d407397775 Merge pull request #1419 from 4Science/CST-4882
[CST-4882] The search loads indefinitely if the written query is invalid
2021-12-14 10:39:01 -06:00
Tim Donohue
df46bcd16f Merge pull request #1449 from tdonohue/update_docker_deps
Update Docker to use latest Solr 8
2021-12-14 09:47:22 -06:00
William Welling
bbb8d708b9 Merge branch 'main' of github.com:wwelling/dspace-angular into 1422-deploy-time-config 2021-12-14 09:45:27 -06:00
Tim Donohue
f672e12433 Remove unnecessary relativeLinkResolution: 'legacy' 2021-12-14 09:40:00 -06:00
Tim Donohue
3e11162d0e Merge pull request #1451 from 4Science/CST-5033-submission-ssr-issue
Fix SSR issue with submission after migrate to angular 11
2021-12-14 09:29:17 -06:00
Giuseppe Digilio
d426f5f179 [DSC-287] fix test 2021-12-14 15:47:30 +01:00
Giuseppe Digilio
a952438247 [CST-5033] fix comments 2021-12-14 15:44:43 +01:00
Giuseppe Digilio
662f846caa [CST-5033] fix issue with cherry-pick 2021-12-14 15:37:44 +01:00
Giuseppe Digilio
7d0b9ec8a2 Merge remote-tracking branch 'origin/main' into CST-4633-search-refactoring 2021-12-14 15:32:05 +01:00
Giuseppe Digilio
34b73cc4f7 [DSC-370] Fix SSR issue with submission after migrate to angular 11 2021-12-14 15:26:23 +01:00
Giuseppe Digilio
44fc86c9fe [DSC-287] use CanActivateChild in order to check every time the rest server availability 2021-12-14 15:22:55 +01:00
Giuseppe Digilio
ddcb1ecdf2 [DSC-287] invalidate root endpoint cache when redirected to 500 page in order to check every time the rest server availability 2021-12-14 12:42:24 +01:00
Giuseppe Digilio
b6904a4df9 [DSC-287] add link button to home page 2021-12-14 12:40:51 +01:00
Tim Donohue
13cfd71686 Update Docker to use latest Solr 8 2021-12-13 16:41:34 -06:00
Michael Spalti
b1c3967a5b Added lockfile. 2021-12-13 11:32:37 -08:00
Michael Spalti
5acc29e498 Updated Mirador dependencies. 2021-12-13 11:08:10 -08:00
Nathan Buckingham
e2614b9dad w2p-85847 Add Authority to browse indexes 2021-12-13 13:48:09 -05:00
Davide Negretti
4c27a11747 [CST-4882] Tests improved 2021-12-11 01:59:38 +01:00
Davide Negretti
64231683b3 [CST-4882] Error 422 is now handled in home page too 2021-12-10 18:28:30 +01:00
Kristof De Langhe
549529c889 85262: Get submission object instead of sending empty patch + revert empty patch code 2021-12-10 14:18:51 +01:00
Rezart Vata
31fd89a9fc [CST-4878] Created component 2021-12-09 18:22:35 +01:00
Giuseppe Digilio
d3b5e09e2a [DSC-287] remove unused imports 2021-12-09 17:48:59 +01:00
Giuseppe Digilio
9be1733bc8 Merge remote-tracking branch 'origin/main' into DSC-287-Show-an-error-page-if-the-REST-API-is-not-available
# Conflicts:
#	src/app/app-routing.module.ts
2021-12-09 15:23:16 +01:00
Rezart Vata
a3892dc7e7 [CST-4875] Fixed response handling 2021-12-09 15:19:20 +01:00
Yana De Pauw
d8ec0fe9f7 85451: Fixed filter syntax 2021-12-09 15:09:46 +01:00
Rezart Vata
01b200279b [CST-4875] improvements 2021-12-09 12:46:50 +01:00
Rezart Vata
f74716a459 [CST-4875] Created feedback route, created feedback form, created service & guard, utilzed when user is logged in, unit testing and lint check 2021-12-09 12:33:53 +01:00
Davide Negretti
b64b7c2607 [CST-4882] Error fixed - Tests improved 2021-12-09 12:17:20 +01:00
William Welling
2bf880b216 correct typo in comment 2021-12-08 19:31:05 -06:00
Tim Donohue
efe51aa340 Merge pull request #1442 from tdonohue/cleanup_license
Cleanup our LICENSE file so GitHub can detect our BSD license
2021-12-08 16:58:24 -06:00
Tim Donohue
ed806dc3bf Minor license formatting cleanup to allow GitHub to recognize our BSD 3-Clause License. Copy over NOTICE file from DSpace/DSpace 2021-12-08 16:55:38 -06:00
Tim Donohue
5b1c9286ed Merge pull request #1441 from tdonohue/disable_docker_action_on_forks
Disable Docker image build action on forked repos & on non-maintenance branches
2021-12-08 15:54:46 -06:00
Tim Donohue
a6eeceeb67 Ensure Docker GitHub action only runs for maintenance branches, official tags. Never run for forked repos 2021-12-08 15:08:44 -06:00
William Welling
10622008c4 refactor config filename and convert to yaml 2021-12-08 14:56:52 -06:00
Tim Donohue
d955fe7ca3 Merge pull request #1440 from tdonohue/docker_github_action
Add GitHub action to build Docker images and push to DockerHub
2021-12-08 10:22:04 -06:00
Tim Donohue
35584d44aa Minor cleanup. Disable 'latest' tag in Docker. 2021-12-08 09:42:48 -06:00
Tim Donohue
86c2f389d5 Create a Docker GitHub action to autobuild on each commit. Update Dockerfile and docker-compose.yml to support. 2021-12-08 09:10:43 -06:00
William Welling
bc999d0b5f minor refactoring and more config util assertions 2021-12-07 21:33:43 -06:00
Tim Donohue
0dba48be13 Update to latest version of all GitHub actions 2021-12-07 16:50:43 -06:00
William Welling
18dd2ad884 add simple config util test 2021-12-07 14:45:46 -06:00
William Welling
46bb3e109c cleanup and readme updates 2021-12-07 12:15:58 -06:00
William Welling
33488ccf40 extend environment and use injected app config 2021-12-07 10:12:27 -06:00
Yana De Pauw
fffc43f443 85451: Add a button to export search results as CSV 2021-12-07 10:14:22 +01:00
Tim Donohue
eb9d72ad72 Merge pull request #1425 from atmire/w2p-85192_pr-bugfix-specify-view-mode-in-ds-browse-by
BUGFIX: Load themed browse entry components
2021-12-06 14:14:10 -06:00
William Welling
71f5b46639 use standard environments 2021-12-06 12:25:37 -06:00
William Welling
c1555326fa build app config 2021-12-03 21:17:36 -06:00
Tim Donohue
46d340a5ce Merge pull request #1424 from ybnd/Fix-modal-open-issues
Fix minor modal UX issues
2021-12-03 14:20:04 -06:00
Nathan Buckingham
768de1a1e7 w2p-85346 Allow facets to be authority controlled and add test to verify 2021-12-03 11:49:39 -05:00
Tim Donohue
77f9b27fcf Merge pull request #1403 from tdonohue/angular_11
Upgrade to Angular 11
2021-12-03 09:34:47 -06:00
Giuseppe Digilio
11ecfd370c Merge remote-tracking branch 'origin/main' into DSC-287-Show-an-error-page-if-the-REST-API-is-not-available 2021-12-03 14:35:11 +01:00
Tim Donohue
ad5a76aedc Remove "relativeLinkResoluton: legacy" and use default instead 2021-12-02 10:36:06 -06:00
Bruno Roemers
03fd57e426 85194: Fix favicon switching in production mode 2021-12-02 14:25:16 +01:00
Bruno Roemers
47ed6bedb4 85123: BUGFIX: Use this.document instead of document
Typo caused ReferenceError in SSR
2021-12-02 12:47:38 +01:00
Kristof De Langhe
ed2c774d86 85262: Allow empty patch requests 2021-12-02 12:39:07 +01:00
Rezart Vata
b7b949b415 Merge branch 'DSC-287-Show-an-error-page-if-the-REST-API-is-not-available' of https://bitbucket.org/4Science/dspace-angular into DSC-287-Show-an-error-page-if-the-REST-API-is-not-available 2021-12-01 18:51:01 +01:00
Rezart Vata
c8de6ccb4c [DSC-287] Fixed for yarn start error 500 loading 2021-12-01 18:50:42 +01:00
Bruno Roemers
e99086c228 Fix bad merge 2021-12-01 17:16:21 +01:00
bruno-atmire
ddccae60b5 Merge branch 'main' into w2p-85192_pr-bugfix-specify-view-mode-in-ds-browse-by 2021-12-01 16:19:21 +01:00
Bruno Roemers
dcb80b7c9c 85192: Write test for themed browse entries 2021-12-01 15:56:49 +01:00
Bruno Roemers
ab3d53c19f 85192: BUGFIX: Ensure themed browse entries are picked up 2021-11-30 20:10:28 +01:00
Yura Bondarenko
8d8b24f00a Fix scrolling background when auto-focusing in modal 2021-11-30 15:51:52 +01:00
Yura
dbbb19e37f Fix modal backdrop animation 2021-11-30 15:51:41 +01:00
Kristof De Langhe
99af22b621 85262: Re-disable deposit button during save/deposit 2021-11-30 13:44:08 +01:00
Kristof De Langhe
5e17a4e958 85262: Always enable deposit button 2021-11-30 13:27:16 +01:00
Yura Bondarenko
714624147c 85042: Make ds-item-list-preview themeable 2021-11-29 12:17:38 +01:00
Davide Negretti
7a567a47b9 [CST-4882] Show error message if the search query fails - Handle error 422 (invalid query) separately 2021-11-26 11:20:35 +01:00
Giuseppe Digilio
6df1ee64f2 [DSC-184] Fix issue with mydpsace page that hangs forever on error response 2021-11-25 11:22:15 +01:00
Davide Negretti
7218c450e6 [CST-4884] Code cleanup and test improvement 2021-11-24 23:39:59 +01:00
Davide Negretti
27bce0e5bb [CST-4879] After changing options in access-conditions.xml, "grant access" fields are displayed incorrectly 2021-11-24 20:17:16 +01:00
Davide Negretti
6752acbf12 [CST-4884] Test 2021-11-24 20:00:21 +01:00
Yura Bondarenko
e6040303df 85036: Propagate ngOnChanges calls down to wrapped component 2021-11-24 16:55:13 +01:00
Bruno Roemers
787358d1b0 85123: Fix tests - 3 2021-11-24 16:09:01 +01:00
Bruno Roemers
b6dc7af13e 85123: Fix tests #2 2021-11-24 15:13:50 +01:00
Bruno Roemers
7c23e2ef82 85123: Fix tests 2021-11-24 14:44:38 +01:00
Davide Negretti
5e8813f5b6 [CST-4884] Bitstream edit form moved inside modal (test WIP) 2021-11-24 13:12:01 +01:00
Bruno Roemers
893a306da0 85123: Fallback to favicon of default theme and src/assets/images/favicon.ico 2021-11-24 12:23:19 +01:00
Yura Bondarenko
7990510099 83394: Make grid view thumbnail CSS more specific 2021-11-24 11:33:06 +01:00
Bruno Roemers
99a2cf926a 85123: WIP: Support for theme-specific head tags 2021-11-24 10:54:59 +01:00
Yura Bondarenko
ef720170cd 85042: Make SearchComponent themeable 2021-11-24 09:30:43 +01:00
Tim Donohue
75c0bf7b61 Merge pull request #1413 from 4Science/CST-4918
[CST-4918] Process status remains Running in detail page
2021-11-23 14:32:42 -06:00
Tim Donohue
55216ad5ed Merge pull request #1408 from 4Science/CST-4903
[CST-4903] The start time and end time of the export process are different
2021-11-23 14:15:49 -06:00
Bruno Roemers
a5a91d5139 85123: Add new favicon files 2021-11-23 19:27:33 +01:00
Yura Bondarenko
d982fe59b4 85042: Make AdminSidebarComponent themeable 2021-11-23 17:29:27 +01:00
Bruno Roemers
ffff337aba 85123: Remove favicon 2021-11-23 16:43:53 +01:00
Davide Negretti
31442f36a3 [CST-4884] Bitstream edit form moved inside modal (test WIP) 2021-11-22 19:11:58 +01:00
Tim Donohue
597e5396f9 Update ngx-sortablejs to latest version 2021-11-22 11:30:25 -06:00
Tim Donohue
d2cc184763 Fix broken tests by fixing imports and providers 2021-11-22 11:27:10 -06:00
Tim Donohue
466aaaa0d5 Tell Visual Studio Code to use version of Typescript in project 2021-11-22 11:26:58 -06:00
Tim Donohue
d926a24088 Autoupdate to @ng-dynamic-forms/core@13 and @ng-dynamic-forms/ui-ng-bootstrap@13 2021-11-22 11:26:27 -06:00
Tim Donohue
10c342483a Required migration from old ngbTabSet to new ngbNav after ng-bootstrap update 2021-11-22 11:23:40 -06:00
Tim Donohue
ab3fa88913 Automated upgrade to @ng-bootstrap/ng-bootstrap@9 2021-11-22 11:22:13 -06:00
Davide Negretti
624f39df1e [CST-4884] Bitstream edit form moved inside modal (test TBD) 2021-11-22 18:20:41 +01:00
Tim Donohue
be289617e1 Automated upgrade to ng-mocks@11 2021-11-22 11:15:41 -06:00
Tim Donohue
2d633d79dc Automated upgrade to @nguniversal/express-engine@11 2021-11-22 11:13:04 -06:00
Tim Donohue
8fedb2c177 Automated upgrade to @ngrx/store@11 2021-11-22 11:10:35 -06:00
Tim Donohue
0d031d0b25 Automated upgrade to @angular/cdk@11 2021-11-22 11:07:53 -06:00
Tim Donohue
9f1a017b56 Automated upgrade to Angular 11.0 2021-11-22 11:01:54 -06:00
Tim Donohue
890731e3e2 Merge pull request #1412 from wwelling/1410-prod-build
[Issue 1410] Production build
2021-11-22 09:57:26 -06:00
Davide Negretti
5df2f6f8d5 [CST-4947] File description on bitstream can now be deleted 2021-11-22 11:16:17 +01:00
Davide Negretti
cefb73c11e Merge remote-tracking branch 'gh/CST-4878' into CST-4878 2021-11-22 10:56:44 +01:00
Davide Negretti
2579577225 [CST-4947] Test WIP 2021-11-22 10:56:27 +01:00
Tim Donohue
23586810b3 Merge pull request #1406 from 4Science/CSTPER-869_group_creation_validation
group creation validator
2021-11-19 14:51:57 -06:00
Davide Negretti
9363b0fb35 [CST-4947] File description on bitstream can now be deleted (test TBD) 2021-11-19 19:58:07 +01:00
Davide Negretti
df957fc31b [CST-4878] Remove start and end date when embargo policy is changed to 'open access' 2021-11-19 16:22:52 +01:00
William Welling
49a3a9a0f2 remove docker changes 2021-11-19 09:00:38 -06:00
Tim Donohue
8ce6a043bb Merge pull request #1411 from tdonohue/fix_1409
Add a config:dev:check:rest option for checking dev environment settings
2021-11-18 10:51:26 -06:00
Tim Donohue
3befdb9f48 Merge pull request #1400 from tdonohue/disable_cli_analytics
Disable CLI analytics by default
2021-11-18 10:29:10 -06:00
William Welling
f7bea3eaa9 update rxjs imports 2021-11-18 09:09:00 -06:00
William Welling
d049caa8c0 remove webpack node externals 2021-11-18 05:03:02 -06:00
William Welling
0b99ce3211 update uuid import in specs 2021-11-17 22:29:14 -06:00
William Welling
b0ee227918 update dockerfile 2021-11-17 22:26:21 -06:00
William Welling
8d66f68dfa remove bundle workaround, update dependencies and build 2021-11-17 22:11:06 -06:00
William Welling
600fbc6df7 update json5 import 2021-11-17 21:59:34 -06:00
William Welling
ebf900686b update uuid imports 2021-11-17 21:58:47 -06:00
William Welling
dc9e93a907 upgrade rxjs imports 2021-11-17 21:57:54 -06:00
Tim Donohue
4ed748381a Add a config:dev:check:rest option for checking dev environment settings 2021-11-17 11:36:38 -06:00
Davide Negretti
08b1025eb3 [CST-4903] Fix 2021-11-17 10:46:36 +01:00
Giuseppe Digilio
92e9f79f09 [DSC-287] optimize code and add typedoc 2021-11-17 09:37:49 +01:00
Corrado Lombardi
f9c8ac6568 [CSTPER-869] removed unused elements 2021-11-16 22:28:43 +01:00
Giuseppe Digilio
a323aefc22 [DSC-287] change app-routing.module.ts inn order to have ServerCheckGuard configured once 2021-11-16 19:13:57 +01:00
Rezart Vata
ce7a5b1499 [CSTPER-869] Fix on edit remove validator, unit testing , lint fixes & report 2021-11-16 18:14:53 +01:00
Rezart Vata
9aea3e0bbf [CSTPER-869] validator to check if a group already exists 2021-11-16 18:08:06 +01:00
Giuseppe Digilio
76ddce7239 [DSC-287] fix test 2021-11-16 17:38:20 +01:00
Davide Negretti
8e0fd14b4e [CST-4918] process-page.resolver.ts - don't use cached version 2021-11-16 17:33:11 +01:00
Davide Negretti
d3c3624816 [CST-4903] Test fixed 2021-11-16 12:53:51 +01:00
Davide Negretti
7d5493fcf4 [CST-4903] Button style fixed 2021-11-16 11:58:10 +01:00
Davide Negretti
cb88885870 [CST-4903] Timezone fixed in process detail page 2021-11-15 19:29:39 +01:00
Giuseppe Digilio
81c4403ee6 [DSC-287] reformat app-routing.module code 2021-11-15 19:02:10 +01:00
Giuseppe Digilio
25a51c9764 [DSC-287] Add test to guard 2021-11-15 18:52:33 +01:00
Giuseppe Digilio
2151d1af58 [DSC-287] Fix error message 2021-11-15 18:49:13 +01:00
Giuseppe Digilio
826875e207 Merge remote-tracking branch 'origin/main' into DSC-287-Show-an-error-page-if-the-REST-API-is-not-available 2021-11-15 17:02:50 +01:00
Tim Donohue
29f342380d Merge pull request #1401 from tdonohue/fixup_docker
Sync with DSpace/DSpace docker-compose setup
2021-11-12 08:20:37 -06:00
myrza1
df87c892f0 Update kz.json5
1755 m
2021-11-12 16:57:37 +06:00
myrza1
c332db4a32 Update kz.json5
1000 el
2021-11-12 16:51:35 +06:00
myrza1
5dfa82322e Update kz.json5
Collection, cookies, beatstream, 404, browse - transated
2021-11-12 16:16:33 +06:00
Tim Donohue
2503b39897 Sync with DSpace/DSpace docker-compose setup 2021-11-11 16:25:19 -06:00
Tim Donohue
d5c841253c Merge pull request #1397 from 4Science/CST-4873-request-copy-bug
Fix issue with request a copy functionality route
2021-11-11 16:11:17 -06:00
Tim Donohue
1e2f51ef3e Disable CLI analytics by default 2021-11-11 15:46:39 -06:00
Tim Donohue
9b2e533038 Merge pull request #1398 from atmire/fix-menu-icon-i18n-messages
Fix menu icon i18n messages
2021-11-11 15:42:02 -06:00
Art Lowel
dd6ec04801 Fix menu icon i18n messages 2021-11-10 11:47:39 +01:00
Giuseppe Digilio
9ea67b1b36 [CST-4873] Fix issue with request a copy functionality route 2021-11-10 09:37:11 +01:00
Rezart Vata
04548237fd [DSC-287] Fixes UI and changed the texts in i18n 2021-11-04 14:50:26 +01:00
Rezart Vata
fc6678515a [DSC-287] Created new page error 500, added guard to check for initial api request, redirect to page 500 2021-11-04 14:21:12 +01:00
Tim Donohue
2fe9fbd584 Merge pull request #1376 from atmire/remove-authorization-mocks
remove authorization mocks left over from PR #1105
2021-10-26 11:34:29 -05:00
Art Lowel
26a3ea4178 remove authorization mocks left over from PR #1105 2021-10-26 17:27:39 +02:00
Tim Donohue
30b9eae872 Merge pull request #1375 from 4Science/CST-4767
[CST-4767] Password are not properly url encoded at login
2021-10-26 08:41:20 -05:00
Davide Negretti
035a7826ba [CST-4767] encode-decode.util.ts removed 2021-10-26 11:11:21 +02:00
Tim Donohue
e8bebea543 Merge pull request #1368 from tdonohue/initial_rest_test_script
Add script to test connection to REST API (yarn config:check:rest)
2021-10-25 12:13:15 -05:00
Tim Donohue
f926b53848 Merge pull request #1374 from the-library-code/german-message-keys
Contribution to the German translation of DSpace 7
2021-10-25 11:44:34 -05:00
Davide Negretti
6ff065cd27 [CST-4767] Password are not properly url encoded at login 2021-10-25 18:34:28 +02:00
Tim Donohue
d0e4055bf0 Address feedback 2021-10-25 11:27:33 -05:00
Pascal-Nicolas Becker
b12bc4adc6 Small additional changes to the German message catalog 2021-10-25 18:13:38 +02:00
Tim Donohue
45933ba3d0 Add initial yarn test:rest-api script 2021-10-25 10:38:08 -05:00
Tim Donohue
3065720817 Merge pull request #1329 from 4Science/CST-4504-Adding-new-relationships-in-edit-item-is-difficult-for-entities-with-many-relationships
Fix issue with new relationships for entities with many relationships
2021-10-25 10:09:16 -05:00
YPaulsen-TLC
f58e0cd0c4 Contribution to the German translation of DSpace 7 2021-10-25 16:59:42 +02:00
myrza1
72a5e4b0c7 Update kz.json5 2021-10-25 03:45:39 +06:00
Tim Donohue
043decf7e4 Merge pull request #1079 from mspalti/iiif-mirador
Angular support for IIIF and Mirador
2021-10-22 12:17:42 -05:00
Giuseppe Digilio
9382b16171 Merge remote-tracking branch 'origin/main' into CST-4504-Adding-new-relationships-in-edit-item-is-difficult-for-entities-with-many-relationships
# Conflicts:
#	src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.ts
2021-10-21 17:20:04 +02:00
Rezart Vata
fe1c3417c7 [CST-4504] Bug fixing 2021-10-21 17:09:11 +02:00
Tim Donohue
936c5cabd3 Merge pull request #1332 from 4Science/CST-4510-entity-selection-porting
Assign an entity type to a collection and map external providers
2021-10-21 10:05:52 -05:00
Giuseppe Digilio
d1f16cdee3 Merge remote-tracking branch 'origin/main' into CST-4510-entity-selection-porting
# Conflicts:
#	src/app/my-dspace-page/my-dspace-new-submission/my-dspace-new-submission.component.ts
2021-10-21 15:23:02 +02:00
Yura
816af086a4 84367: Fix ds-truncatable-part Safari gradient issue 2021-10-21 10:50:42 +02:00
Yura
0ac2fc2168 84367: Support light background in ds-truncatable-part 2021-10-21 10:50:42 +02:00
Yura
119af38d6a 84367: Ignore HTML whitespace in ds-thumbnail 2021-10-21 10:50:42 +02:00
Yura
859ff4a2f5 84367: Use DSONameService for ds-dso-selector names 2021-10-21 10:50:42 +02:00
Yura
931560ee26 84367: Make ComcolPageBrowseByComponent themeable 2021-10-21 10:22:29 +02:00
Michael W Spalti
2c60cc4ca2 Updated versioned-item to provide route service in super constructor call. 2021-10-20 15:09:32 -07:00
Tim Donohue
07f20b1ad7 Merge pull request #1366 from atmire/w2p-84385_tabbed-view-breaks-on-tab-change
84385: Tabbed search view breaks if switch away/back between tabs
2021-10-20 17:09:31 -05:00
Tim Donohue
551404c08f Merge pull request #1363 from atmire/Search-results-LinkType-fix
linkType search-results bug fix
2021-10-20 16:31:34 -05:00
Michael W Spalti
2b19b1659c Merge branch 'main' into iiif-mirador 2021-10-20 14:24:59 -07:00
Tim Donohue
2568daedb4 Merge pull request #1318 from 4Science/CST-4499
Create new Item Version (basic Items only)
2021-10-20 11:17:57 -05:00
Marie Verdonck
cf0a526187 84385: Tabbed search view breaks if switch away/back between tabs 2021-10-20 16:50:02 +02:00
Yura
14b1fd463d 84367: SearchForm/SearchComponent: add option to hide scope selection dropdown 2021-10-20 11:27:55 +02:00
Davide Negretti
fd61ac0c41 [CST-4499] Version history - Test item-versions.component 2021-10-20 02:29:00 +02:00
Davide Negretti
3b0e1dbcc4 [CST-4499] Version history - Test item-versions.component 2021-10-20 02:28:02 +02:00
Tim Donohue
2650e1eb36 Merge pull request #1362 from atmire/issue-1294-fix-required-dropdown-initial-click-not-working
#1294 [Submission] - Fix for required dropdown initial select click not working
2021-10-19 16:37:33 -05:00
Davide Negretti
52baa819cf [CST-4499] Version history - Test versioned-item.component 2021-10-19 21:12:34 +02:00
Tim Donohue
238b47b2f9 Merge pull request #1364 from atmire/search-scope-small-fixes
Fixes to scope select in search
2021-10-19 14:12:12 -05:00
Davide Negretti
d12f932351 [CST-4499] Version history - Test version-history-data.service 2021-10-19 19:16:39 +02:00
Davide Negretti
75fffe2f15 [CST-4499] Version history - Test version-history-data.service 2021-10-19 17:54:11 +02:00
Davide Negretti
82f6a78511 Merge branch 'main' into CST-4499
# Conflicts:
#	src/app/item-page/item-page-routing.module.ts
2021-10-19 16:58:39 +02:00
Davide Negretti
3cc302bc42 [CST-4499] Version history - Test version-history-data.service 2021-10-19 16:49:13 +02:00
lotte
a4c957b8ef changed scope with to css variable and removed the search label alignment 2021-10-19 16:19:07 +02:00
Davide Negretti
6dac82989b Merge branch 'main' of github.com:4science/dspace-angular into CST-4499 2021-10-19 16:18:12 +02:00
Tim Donohue
a8900f7278 Merge pull request #1327 from atmire/w2p-83635_Request-a-copy
Request a copy
2021-10-19 09:09:45 -05:00
Kristof De Langhe
d7a5502d30 linkType search results bugfix 2021-10-19 16:03:38 +02:00
Giuseppe Digilio
9a30b8a9ae [CST-4504] fix issue with name variants 2021-10-19 15:16:10 +02:00
Marie Verdonck
0557750987 #1294 [Submission] - Fix for required dropdowns initial select click not working 2021-10-19 15:13:51 +02:00
Rezart Vata
5f05c1d7c0 [CST-4504] lint fixes 2021-10-19 14:12:59 +02:00
Rezart Vata
78403d9696 [CST-4504] Fixed discard issue and submit issue 2021-10-19 14:04:39 +02:00
Davide Negretti
376d803b96 [CST-4499] Version history - Test item-data.service and item-versions-shared.service 2021-10-19 13:34:58 +02:00
Kristof De Langhe
898548d399 Merge branch 'main' into w2p-83635_Request-a-copy 2021-10-19 10:04:24 +02:00
Giuseppe Digilio
e142a49479 [CST-4499] Add tests to version-data.service 2021-10-18 20:15:20 +02:00
Michael W Spalti
b0fcdf628f Updated test. 2021-10-18 11:15:06 -07:00
Michael W Spalti
8ac122b151 Updated viewport size check.
Updated test.

Mobile test added.

Fixed lint error.
2021-10-18 11:15:01 -07:00
Giuseppe Digilio
8f541c37a7 [CST-4499] Add tests to workspaceitem-data.service and workflowitem-data.service 2021-10-18 19:04:16 +02:00
Tim Donohue
03d9996dcc Merge pull request #1346 from 4Science/CST-4659
[Deque Re-Analysis] Submission "critical" accessibility issues
2021-10-18 11:01:21 -05:00
Michael W Spalti
a3511ab234 Merge branch 'iiif-mirador' of https://github.com/mspalti/dspace-angular into iiif-mirador 2021-10-18 08:54:07 -07:00
Davide Negretti
bee628921a [CST-4499] Version history - Test 2021-10-18 17:37:02 +02:00
Tim Donohue
7cc5bd0280 Merge pull request #1360 from tdonohue/enable_spanish
Add 'es' to languages. Order alphabetically by label
2021-10-18 09:54:28 -05:00
Kristof De Langhe
492a31dd10 83635: Remove f from fdescribe 2021-10-18 16:43:13 +02:00
Kristof De Langhe
0f7fc4907a Merge branch 'main' into w2p-83635_Request-a-copy 2021-10-18 16:01:19 +02:00
Davide Negretti
7c40c3ba68 [CST-4499] Version history - Pagination fixed 2021-10-18 13:20:03 +02:00
Davide Negretti
d264576a07 [CST-4659] Deque accessibility issues - fix 470001 2021-10-18 10:40:02 +02:00
Michael Spalti
6a2d856ecf Removed unused import. 2021-10-16 16:28:56 -07:00
Michael Spalti
073296eb07 Mirador component update and spec. 2021-10-16 14:28:34 -07:00
Tim Donohue
f4cdd6a9ab Merge pull request #1314 from tdonohue/add_a11y_tests
Add automated Accessibility testing for all public pages
2021-10-15 16:36:45 -05:00
Tim Donohue
8a1ff1ef70 Update to latest Cypress 2021-10-15 16:03:43 -05:00
Tim Donohue
305571bc25 Add accessibility tests for search/browse 2021-10-15 15:43:01 -05:00
Tim Donohue
4faa850fba Add logging for violations & testA11y() in utils.ts. Use that method everywhere else 2021-10-15 15:41:33 -05:00
Tim Donohue
fad74a4ca2 Upgrade Cypress 2021-10-15 15:41:33 -05:00
Tim Donohue
3c35c6c8ae Add basic accessibility scan for most public pages. Disable any a11y tests with known issues 2021-10-15 15:41:32 -05:00
Davide Negretti
dfeee7894a Merge branch 'main' into CST-4499
# Conflicts:
#	src/app/item-page/item-page.module.ts
#	src/app/shared/shared.module.ts
2021-10-15 22:35:27 +02:00
Tim Donohue
c3dbe00f0b Add 'es' to languages. Order alphabetically by label 2021-10-15 15:34:47 -05:00
Tim Donohue
ee70baafd9 Merge pull request #1351 from gsferreyro/spanish-translation
Complete Spanish translation
2021-10-15 15:24:10 -05:00
Tim Donohue
66b55bf910 Merge pull request #1336 from 4Science/CST-4634-Many-notifications-when-trying-to-create-an-eperson-with-already-existing-email
Added custom validator and mail check during eperson registration
2021-10-15 12:22:14 -05:00
Davide Negretti
e4d468b17c [CST-4499] Version history - Changes to version history table 2021-10-15 19:13:15 +02:00
Giuseppe Digilio
7b24e3bc8e [CST-4510] Fix issue with multiple selection in the collection-dropdown.component 2021-10-15 19:04:14 +02:00
Giuseppe Digilio
096a1d8427 [CST-4510] Close collection modal once entity is imported 2021-10-15 17:34:04 +02:00
Giuseppe Digilio
ded8a415cf Merge remote-tracking branch 'origin/main' into CST-4510-entity-selection-porting
# Conflicts:
#	src/assets/i18n/en.json5
2021-10-15 17:04:34 +02:00
Tim Donohue
d778f98b0d Merge pull request #1348 from atmire/search-scope-lookup
Replace search scope dropdown by modal
2021-10-15 09:52:37 -05:00
Giuseppe Digilio
05b288c8d0 [CST-4504] Fix LGTM issues 2021-10-15 14:58:34 +02:00
Davide Negretti
850970e204 [CST-4499] Version history - Code refactoring (WIP) and "Edit workspace item" button 2021-10-15 13:05:24 +02:00
Giuseppe Digilio
4d277991ef [CST-4510] Address feedback 2021-10-15 10:25:30 +02:00
Michael Spalti
80a9770936 More neutral primary color in mirador viewer configuration. 2021-10-14 16:13:36 -07:00
Michael Spalti
24a6a4c25a Checking for dev mode to prevent viewer embed. 2021-10-14 15:57:46 -07:00
Michael Spalti
3a1abe82a1 Removed unused import. 2021-10-14 09:29:02 -07:00
Michael Spalti
8c05c6d4df Merge branch 'main' into iiif-mirador 2021-10-14 08:38:13 -07:00
Tim Donohue
802a212b9b Merge pull request #1355 from the-library-code/PRs/dspace-angular/1354
Make 'FileSectionComponent' themeable
2021-10-14 10:17:17 -05:00
Giuseppe Digilio
bd02bcd0de [CST-4634] Remove impersonate button from eperson creation form 2021-10-14 16:02:20 +02:00
Rezart Vata
4c72fa7da1 [CST-4504] Fixes regarding code improvement & save spinner only 2021-10-14 15:55:20 +02:00
Kristof De Langhe
13dd4dfc05 83635: Remove fdescribe and unused imports 2021-10-14 15:48:50 +02:00
Kristof De Langhe
478c95f6d4 83635: Item request - processed message 2021-10-14 15:45:05 +02:00
Giuseppe Digilio
d08807544f [CST-4510] Fix LGTM issue 2021-10-14 15:44:59 +02:00
Giuseppe Digilio
f20776fb8f [CST-4510] Remove unused label 2021-10-14 15:44:42 +02:00
Rezart Vata
05261a91ea [CST-4504] Fixed multiple delete & multiple add in modal and changed unit testing 2021-10-14 13:06:55 +02:00
Kristof De Langhe
a745468b0c 83635: Keep bitstream param on link 2021-10-14 11:25:03 +02:00
Michael Spalti
b738065d88 Updated service mock for tests. 2021-10-13 17:58:34 -07:00
Giuseppe Digilio
9c47583a0a [CST-4634] Change email validator in order to show error also on focus 2021-10-13 23:13:39 +02:00
Tim Donohue
6356979994 Merge pull request #1323 from 4Science/DSC-227-myDspaceReloadIssue
Reload of My Dspace results is broken
2021-10-13 14:31:45 -05:00
Giuseppe Digilio
0fccf4c16a Merge remote-tracking branch 'origin/main' into CST-4510-entity-selection-porting
# Conflicts:
#	src/app/core/data/collection-data.service.ts
2021-10-13 19:24:25 +02:00
Vasilii Fedorov
7505a5a208 Make 'FileSectionComponent' themeable 2021-10-13 15:41:32 +02:00
Giuseppe Digilio
36be741eb3 [CST-4510] Remove check for entity type param in the import from external source page 2021-10-13 09:25:23 +02:00
Giuseppe Digilio
363e9b2dcb [CST-4510] Fix i18n labels 2021-10-13 09:25:09 +02:00
Giuseppe Digilio
b4a249245a [CST-4510] make entity type not mandatory in the collection form 2021-10-13 09:24:57 +02:00
Tim Donohue
ab9aed0143 Merge pull request #1328 from atmire/w2p-83707_Control-collection-harvest-from-the-UI
Control collection harvest from the UI
2021-10-12 16:18:34 -05:00
Michael W Spalti
a875f681a7 Merge branch 'iiif-mirador' of https://github.com/mspalti/dspace-angular into iiif-mirador 2021-10-12 14:00:27 -07:00
Michael Spalti
538e3cbd0f Mirador component update. 2021-10-12 07:56:23 -07:00
Giuseppe Digilio
93e0828135 [CST-4591] Hide none item type entry from available entities in the collection form 2021-10-12 16:23:47 +02:00
Yana De Pauw
72d1235b2c 83707: Add spinners to in progress buttons 2021-10-12 09:50:56 +02:00
Michael Spalti
2d1113626a Viewer updates. 2021-10-11 17:50:15 -07:00
Gustavo S. Ferreyro
82b88c85c2 Full Spanish translation
Full Spanish translation based on the English en.json5 file at 09 Oct, 2021.
2021-10-09 13:40:53 -03:00
Michael Spalti
681b10e070 Removed unused import. 2021-10-08 15:53:02 -07:00
Michael Spalti
baa94ca1cb Fixed proble with mirador iframe url for a single image. 2021-10-08 15:29:51 -07:00
Tim Donohue
bc89692acb Merge pull request #1344 from ybnd/Pause-notification-countdown-on-hover
Pause notification countdown on hover
2021-10-08 14:33:45 -05:00
lotte
b651f4e18f lgtm fixes 2021-10-08 14:37:57 +02:00
lotte
13bce1df60 Added missing typedoc 2021-10-08 14:08:04 +02:00
lotte
c28221623c Added search scope lookup to replace dropdown 2021-10-08 10:22:43 +02:00
Tim Donohue
a48074e5f1 Merge pull request #1341 from atmire/w2p-83783_show-all-collections-on-item-page-rebased
Show owning and mapped collections on item page
2021-10-07 11:38:33 -05:00
Tim Donohue
46c3ea2a7c Merge pull request #1326 from atmire/dynamic-theme-fixes
Dynamic theme improvements
2021-10-07 11:38:04 -05:00
Yura
1cc1674254 Add unit tests for notification countdown 2021-10-07 15:23:54 +02:00
Yura
26cfe7d9ea Remove old commented out code 2021-10-07 13:53:06 +02:00
Kristof De Langhe
881eb92fa1 83635: Feedback and test cases 2021-10-07 13:53:02 +02:00
Rezart Vata
ce2790a89b [CST-4504] Adding and removing in modal checkboxes, working on deleting paginated relationships 2021-10-06 18:35:52 +02:00
Corrado Lombardi
91218bb534 removed unnecessary new lines and commented out code 2021-10-06 18:00:19 +02:00
Davide Negretti
eaa3d96bc7 [CST-4659] Deque accessibility issues - 470010 and tests 2021-10-06 15:26:55 +02:00
Kristof De Langhe
03ddde9a97 83635: Button layout changes + LGTM fixes 2021-10-05 18:17:40 +02:00
Kristof De Langhe
120b9f5ce9 83635: Grant/Deny item requests 2021-10-05 18:17:40 +02:00
Kristof De Langhe
11bf10cbde 83635: Intermediate commit 2021-10-05 18:17:40 +02:00
Yana De Pauw
4feccb9989 intermittent commit 2021-10-05 18:17:40 +02:00
Yana De Pauw
90b706239e Fix page reload when requesting a copy 2021-10-05 18:17:40 +02:00
Yana De Pauw
416aa7adaf 83635: Update request a copy page and tests 2021-10-05 18:17:40 +02:00
Yana De Pauw
506883c960 83635: Request a copy - Request page 2021-10-05 18:17:40 +02:00
Davide Negretti
8173d7d805 [CST-4659] Deque accessibility issues - 470010 2021-10-05 17:51:31 +02:00
Davide Negretti
5c8448c36e [CST-4659] Deque accessibility issues - 469993 2021-10-05 16:22:46 +02:00
Davide Negretti
ad15c07a18 [CST-4659] Deque accessibility issues - 469984 2021-10-05 12:54:09 +02:00
Yura
08b79f0595 Fix undefined isPaused$ test failure (afterAll) 2021-10-05 10:51:37 +02:00
Yura
f4c50bc7a2 Pause all notifications when hovering over board 2021-10-05 10:06:30 +02:00
Yura
25ea75cf54 Pause notification countdown on hover 2021-10-05 09:52:31 +02:00
Giuseppe Digilio
e9bca1b51d [CST-4510] use alert component for info message 2021-10-05 09:19:10 +02:00
Tim Donohue
b29b87d0f6 Merge pull request #1315 from tdonohue/header_keyboard_fix
Header Accessibility Fix: Allow enter key or spacebar to expand or contract menu based on current active status
2021-10-04 10:59:34 -05:00
Tim Donohue
b4732f3c31 Move actions to keyup while having preventDefault on keydown 2021-10-04 10:18:01 -05:00
Davide Negretti
b7d6c8e557 [CST-4499] Version history - SSR bug fixed 2021-10-04 13:29:55 +02:00
Tim Donohue
1d0a5c0e87 Switch from keyup to keydown to fix spacebar scrolling issue. 2021-10-01 16:45:59 -05:00
Rezart Vata
74eac1f72c [CST-4504] code improvement and report fixes 2021-10-01 18:57:24 +02:00
Rezart Vata
78c88f212f [CST-4504] Merged conflicts 2021-10-01 18:16:46 +02:00
Rezart Vata
af09479203 [CST-4504] Added discard,reinstate & submit buttons , unit testing & lint fixes 2021-10-01 18:13:18 +02:00
Davide Negretti
69bd118001 [CST-4659] Deque accessibility issues - 469700 2021-10-01 17:22:03 +02:00
Davide Negretti
d59e6c630d [CST-4659] Deque accessibility issues - 470062 2021-10-01 17:10:54 +02:00
Yura
ed3bcaa574 83631: Reword & explain theme extension tests 2021-10-01 13:32:56 +02:00
Tim Donohue
7747a8c4e2 Attempt to stop scroll to bottom of page when clicking spacebar 2021-09-30 17:11:34 -05:00
Davide Negretti
a80d9694d8 [CST-4659] Deque accessibility issues - 470001 2021-09-30 18:11:24 +02:00
Davide Negretti
a2eb16d328 [CST-4659] Deque accessibility issues - 470065 2021-09-30 15:31:52 +02:00
Davide Negretti
ee9d54245c [CST-4659] Deque accessibility issues - 469979 2021-09-30 13:19:52 +02:00
Yana De Pauw
e434bb8952 83707: Implement feedback 2021-09-30 10:22:48 +02:00
Michael Spalti
d4a6ed6d08 Mirador component multi-view based on count of image files in the default bundle. 2021-09-29 22:03:23 -07:00
Michael Spalti
670a0b8a26 Completed work on angular tests. 2021-09-29 14:12:48 -07:00
Davide Negretti
e111f7c70b [CST-4499] Version history - Minor fixes 2021-09-29 20:21:42 +02:00
Bruno Roemers
578b5afa06 83783: Show owning and mapped collections on item page 2021-09-29 18:52:07 +02:00
Davide Negretti
8a38d06318 [CST-4499] Version history - Fixes and tests 2021-09-29 18:28:26 +02:00
Davide Negretti
ca9ca0105e [CST-4499] Version history - Redirect to Edit Item 2021-09-29 16:33:23 +02:00
Michael Spalti
ec0e8c7804 Completed the initial embed of mirador viewer. 2021-09-28 16:47:58 -07:00
Michael Spalti
abb733b9df Merge branch 'main' into iiif-mirador 2021-09-28 13:24:31 -07:00
Michael Spalti
3bf9c5f21c Starting update for iiif using non-entity metadata. 2021-09-28 13:22:09 -07:00
Tim Donohue
53cd1cfcb2 Merge pull request #1319 from 4Science/DSC-192
edit item metadata fix
2021-09-28 13:41:40 -05:00
Tim Donohue
e5e6e9c07a Also support using spacebar to open/close menu 2021-09-28 12:20:53 -05:00
Rezart Vata
7543af2a38 [CST-4634] Worked on unit testing formgroup input validation and custom validations 2021-09-27 16:06:29 +02:00
Davide Negretti
4f2697bf52 [CST-4499] Version history - New version refactored (with tests) 2021-09-27 12:26:20 +02:00
Yana De Pauw
4e9bd86012 83707: Implement tests 2021-09-27 11:11:54 +02:00
Davide Negretti
f60755b2b0 [CST-4499] Version history - New version refactored - Test TBD 2021-09-25 00:59:19 +02:00
Corrado Lombardi
eb14b6c5ad [DSC-192] lint fixes 2021-09-24 18:49:13 +02:00
Giuseppe Digilio
df8ff19550 Merge remote-tracking branch 'origin/main' into CST-4510-entity-selection-porting 2021-09-24 18:15:13 +02:00
Rezart Vata
d9237acb70 [CST-4634] Added custom validator and messages and show error message for not valid email, lint fixes & unit testing 2021-09-24 17:16:53 +02:00
Alba Aliu
010dee7a16 Merge branch 'DSC-192' of https://bitbucket.org/4Science/dspace-angular into DSC-192 2021-09-24 17:08:55 +02:00
Alba Aliu
b22d8358fb [DSC-112] unit testing 2021-09-24 17:07:38 +02:00
Giuseppe Digilio
93f2274c5d [CST-4591] add missing label 2021-09-24 14:33:30 +02:00
Giuseppe Digilio
d29c27b400 [CST-4591] Use search collection dropdown when importing from external source with lookup modal 2021-09-24 13:20:36 +02:00
Giuseppe Digilio
c6a73f2dcb [CST-4591] Fix issue with showing empty collection results 2021-09-24 13:18:50 +02:00
Giuseppe Digilio
a170f1f8a9 [CST-4591] Fix issue with navigate when entity type is empty 2021-09-24 13:17:35 +02:00
Tim Donohue
2b1e3c6b02 Merge pull request #1324 from atmire/upload-bitstream-bugfix
Fixed edit item bitstreams
2021-09-23 16:10:25 -05:00
lotte
50c2d918b0 fixed lgtm issue 2021-09-23 15:48:58 +02:00
Yana De Pauw
100166023a 83707: Control collection harvest from the UI 2021-09-23 15:47:43 +02:00
Giuseppe Digilio
2894045134 [CST-4504] fix lint error 2021-09-23 15:30:23 +02:00
Art Lowel
ac13b8b282 Merge branch 'w2p-83631_Add-the-ability-to-extend-a-theme' into w2p-83628_Dynamic-theme-fixes 2021-09-23 13:42:16 +02:00
Art Lowel
573a133815 fix ciruclar dependency 2021-09-23 13:30:40 +02:00
lotte
e41c66cdda 83681: fixed bundles issue on update bitstreams edit item page 2021-09-23 12:50:58 +02:00
Kristof De Langhe
e2c2423e53 83628: Dynamic theme fixes - test cases and JSDocs 2021-09-23 11:27:38 +02:00
Tim Donohue
4dd3b57539 Merge pull request #1298 from 4Science/CST-4058
Cannot easily tell similar named EPeople or Groups apart (usability issue)
2021-09-22 17:18:44 -05:00
Giuseppe Digilio
d10d0b039f [CST-4504] fix duplicated code 2021-09-22 18:16:32 +02:00
Giuseppe Digilio
6bf3b8e7cd [CST-4591] Change import from external source page in order to work with entity type 2021-09-22 18:02:52 +02:00
Kristof De Langhe
d9db65685b 83628: Dynamic theme fixes 2021-09-22 17:46:55 +02:00
Giuseppe Digilio
afdbf3541b [CST-4591] Add dropdown for selecting entity type when creating a new submission or importing from external source 2021-09-22 17:43:47 +02:00
Giuseppe Digilio
2e0095a587 [CST-4591] Create entity scrollable dropdown 2021-09-22 17:36:18 +02:00
Giuseppe Digilio
51ada1c933 [CST-4591] Change collection dropdown in order to accept entity type as input 2021-09-22 17:34:54 +02:00
Giuseppe Digilio
1f941acda4 [CST-4591] Add entity selection field to collection create/edit form 2021-09-22 17:32:41 +02:00
Giuseppe Digilio
b20b6d003f [CST-4591] Add methods to retrieve entity type related to collections 2021-09-22 17:29:47 +02:00
Davide Negretti
eaca1ac228 [CST-4058] Improvements applied in all places 2021-09-22 17:24:28 +02:00
Giuseppe Digilio
225a5640e5 [CST-4591] Add methods to retrieve collections by entity type 2021-09-22 17:20:04 +02:00
Rezart Vata
681ab1ff88 [CST-4504] Fixed issue for submission, removed tab when editing relationships, removed unused code & improved checking for remote data completed 2021-09-22 17:01:24 +02:00
Rezart Vata
f1135d8a96 [CST-4504] Finished Unit testing, ts lint, report changes and some fixes 2021-09-22 13:44:12 +02:00
Kristof De Langhe
2d638a738e 83628: Dynamic theme fixes 2021-09-22 11:51:05 +02:00
Alessandro Martelli
5a136f8865 [DSC-227] Reload of My Dspace results is broken 2021-09-22 11:35:59 +02:00
Davide Negretti
c816b97525 [CST-4499] Version history - Old tests fixed 2021-09-21 19:42:43 +02:00
Davide Negretti
468ad70751 [CST-4499] Version history - Old tests fixed 2021-09-21 18:21:38 +02:00
Davide Negretti
aee612e06d [CST-4499] Version history - Old tests fixed 2021-09-21 16:47:42 +02:00
Corrado Lombardi
8633b5207d Merge remote-tracking branch 'bb-cris/DSC-192' into DSC-192 2021-09-21 14:50:38 +02:00
Alba Aliu
7214f3fe6d [DSC-192] fix 2021-09-21 14:50:08 +02:00
Alba Aliu
a97f55c32d [DSC-192] disable edit metadata field name in edit mode 2021-09-21 14:50:08 +02:00
Davide Negretti
62fea1fa78 [CST-4499] Version history - Tests WIP 2021-09-21 12:11:23 +02:00
Davide Negretti
3255a29b30 [CST-4499] Version history - Tests WIP 2021-09-20 20:34:34 +02:00
Rezart Vata
3c26ecdcdf [CST-5404] Code refactoring, fixing issues , lint fixes and started unit testing 2021-09-20 19:43:11 +02:00
Davide Negretti
fbc69832d8 [CST-4499] Version history - Tests WIP 2021-09-20 17:38:32 +02:00
Yura
0b62144d97 83631: Add the ability to extend a theme 2021-09-20 17:03:34 +02:00
Alba Aliu
af12fc1a51 [DSC-192] fix 2021-09-20 11:12:45 +02:00
Alba Aliu
cbab3484e7 [DSC-94] reload tabs box after claim made 2021-09-17 23:07:48 +02:00
Michael Spalti
ded5e29f10 Merge branch 'main' into iiif-mirador 2021-09-17 10:38:57 -07:00
Davide Negretti
a547030ce0 [CST-4499] Version history - LGTM fixes - Test TBD 2021-09-17 18:22:48 +02:00
Tim Donohue
523fca2177 Minor updates to README to provide more helpful info on unit tests 2021-09-17 11:19:14 -05:00
Tim Donohue
8e2ab83d92 Fix existing tests. Add new specs for enter key presses 2021-09-17 11:19:14 -05:00
Davide Negretti
97ed08e5c8 [CST-4499] Version history - Test TBD 2021-09-17 18:04:33 +02:00
Davide Negretti
55a1a1c0eb [CST-4499] Version history (WIP) - Refactoring 2021-09-17 13:37:57 +02:00
Davide Negretti
025e7f5c38 [CST-4499] Version history (WIP) - Cache issue fixed 2021-09-17 12:19:18 +02:00
Davide Negretti
b1b2bd4562 [CST-4499] Version history (WIP) - Authorization features - Cache issue fixed 2021-09-16 18:53:45 +02:00
Davide Negretti
cf1c73bd32 [CST-4499] Version history (WIP) - Authorization features - Deleting 2021-09-16 15:49:11 +02:00
Davide Negretti
f858eeef46 [CST-4499] Version history (WIP) - Authorization features - Deleting not working 2021-09-16 00:28:45 +02:00
Tim Donohue
b86ae8dd14 Allow enter key to expand or contract menu based on current active status 2021-09-14 14:16:04 -05:00
Rezart Vata
a2605cdddd [CST-4504] Changed init api, disabled selected tab only for relationship edit page, fixed the related items checked, fixed the issue regarding the updated item control 2021-09-14 19:24:22 +02:00
Davide Negretti
77ff774c97 [CST-4499] Version history (WIP) - Minor fixes and code cleanup 2021-09-14 18:48:13 +02:00
Davide Negretti
60bbb9ace4 [CST-4499] Version history (WIP) - Redirect after deleting a version 2021-09-14 18:20:58 +02:00
Davide Negretti
5d8f625d01 [CST-4499] Version history (WIP) - Refactoring 2021-09-14 01:39:00 +02:00
Davide Negretti
f10f25d129 Merge remote-tracking branch 'bb/CST-4499' into CST-4499 2021-09-13 18:04:22 +02:00
Davide Negretti
b4111fe4b1 [CST-4499] Version history (WIP) - Version page added (redirecting to item's page) 2021-09-13 17:56:55 +02:00
Rezart Vata
ffee36607d [CST-5404] Started working on new feature,added services and started working on selection 2021-09-10 18:49:23 +02:00
Alessandro Martelli
ce399cb764 [CST-4499] Version history (WIP) - Missing tests and auth features 2021-09-10 18:22:55 +02:00
Davide Negretti
44d3558e87 [CST-4499] Version history (WIP) - 'Create version' button in item page and other fixes 2021-09-10 18:16:35 +02:00
Davide Negretti
5526cde869 [CST-4058] LGTM issues solved 2021-09-10 11:06:25 +02:00
Davide Negretti
8df8b1c574 [CST-4058] LGTM issues solved 2021-09-10 10:50:35 +02:00
Davide Negretti
ad5ace79fb Changes by alex 2021-09-10 10:36:37 +02:00
Davide Negretti
dd2df9106c [CST-4499] Version history (WIP) - Fixes to API calls 2021-09-10 10:36:33 +02:00
Davide Negretti
05385f3568 [CST-4499] Version history (WIP) - Fixes to API calls 2021-09-10 10:19:33 +02:00
Tim Donohue
706cc47197 Merge pull request #1300 from bbranan/issue-1299
Adds support for capturing i18n translation updates within a theme
2021-09-09 16:26:33 -05:00
Davide Negretti
d402ab7dcf [CST-4499] Version history (WIP) - New version modal and other changes 2021-09-09 00:57:44 +02:00
Tim Donohue
2f251a3a61 Merge pull request #1310 from DSpace/dependabot/npm_and_yarn/url-parse-1.5.3
Bump url-parse from 1.4.7 to 1.5.3
2021-09-08 16:39:39 -05:00
Tim Donohue
49773140c6 Merge pull request #1293 from DSpace/dependabot/npm_and_yarn/path-parse-1.0.7
Bump path-parse from 1.0.6 to 1.0.7
2021-09-08 16:23:48 -05:00
Tim Donohue
1c3dcefcec Merge pull request #1165 from DSpace/dependabot/npm_and_yarn/lodash-4.17.21
Bump lodash from 4.17.20 to 4.17.21
2021-09-08 15:49:13 -05:00
Bill Branan
3be2e6f08b Merge branch 'main' into issue-1299 2021-09-08 15:28:02 -04:00
Tim Donohue
879c23e002 Merge pull request #1166 from DSpace/dependabot/npm_and_yarn/hosted-git-info-2.8.9
Bump hosted-git-info from 2.8.8 to 2.8.9
2021-09-08 13:33:04 -05:00
dependabot[bot]
c40958f450 Bump path-parse from 1.0.6 to 1.0.7
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 17:37:21 +00:00
dependabot[bot]
285551674d Bump url-parse from 1.4.7 to 1.5.3
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.4.7 to 1.5.3.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.4.7...1.5.3)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 17:11:31 +00:00
dependabot[bot]
c9ac591dc3 Bump hosted-git-info from 2.8.8 to 2.8.9
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 17:11:13 +00:00
dependabot[bot]
17ed492a5f Bump lodash from 4.17.20 to 4.17.21
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 17:11:04 +00:00
Tim Donohue
5a82e1b60c Merge pull request #1307 from DSpace/dependabot/npm_and_yarn/tar-4.4.19
Bump tar from 4.4.13 to 4.4.19
2021-09-08 12:09:44 -05:00
Tim Donohue
fab1e3dbb0 Merge pull request #1311 from tdonohue/disable_a11y_checks
Temporarily disable a11y check until random failure for color contrast can be fixed
2021-09-08 12:09:30 -05:00
Tim Donohue
432fb4e3cc Temporarily disable a11y check until random failure for color contrast can be fixed 2021-09-08 11:14:24 -05:00
dependabot[bot]
173bf5460c Bump tar from 4.4.13 to 4.4.19
Bumps [tar](https://github.com/npm/node-tar) from 4.4.13 to 4.4.19.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v4.4.13...v4.4.19)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-08 14:51:55 +00:00
Tim Donohue
15e7f75e39 Merge pull request #1301 from tdonohue/switch_to_cypress
Switch to Cypress.io for all e2e tests
2021-09-08 09:50:46 -05:00
Davide Negretti
72bfab16df [CST-4499] Version history (WIP) - Changes to in-row editing, code cleanup, added modal for new versions 2021-09-08 12:08:54 +02:00
Davide Negretti
95ffc7a016 [CST-4499] Version history (WIP) - Added in-row editing in version history (call to REST service TBD) and other fixes 2021-09-07 20:33:47 +02:00
Tim Donohue
4d4aadd83f Merge pull request #1309 from atmire/fix-themed-profile-page-component
fix the profile page component in the custom theme
2021-09-07 11:40:25 -05:00
Davide Negretti
6f24b31b39 [CST-4499] Version history (WIP) - Removed summary page (with routing) and modal 2021-09-07 14:47:36 +02:00
Davide Negretti
a1e312440f [CST-4499] Version history (WIP) - Buttons added to history, form replaced with modal, minor fixes 2021-09-06 20:51:34 +02:00
Art Lowel
f35f671dc3 fix the profile page component in the custom theme 2021-09-06 11:23:46 +02:00
Alessandro Martelli
5b036e84e1 [CST-4499] Version history module (WIP) 2021-09-02 16:20:43 +02:00
Davide Negretti
d66cf881fb [CST-4058] 'colspan' removed from table header; code cleanup 2021-09-02 16:05:22 +02:00
Bill Branan
edb814c49a Updates formatting to follow code style rules 2021-08-31 15:59:09 -04:00
Bill Branan
81988179e9 Adds setting to maintain the use of double quotes 2021-08-31 15:47:46 -04:00
Tim Donohue
098779a82d Fix to Cypress tsconfig.json, don't override sourceMap settings 2021-08-27 13:09:33 -05:00
Tim Donohue
13d8d75cfa Upgrade to latest Cypress 2021-08-27 12:24:35 -05:00
Tim Donohue
fec71ebf99 Add link to Cypress docs on creating first test in our README 2021-08-27 12:02:23 -05:00
Tim Donohue
03a11aeda1 Minor cleanup to GitHub CI. No longer need chromedriver. Use latest version of Chrome. 2021-08-27 11:33:06 -05:00
Tim Donohue
9d118dc2fd Add docs on writing e2e tests. Minor cleanup to README elsewhere 2021-08-27 11:08:30 -05:00
Tim Donohue
3c3f2251bb Minor test cleanup. Ensure artifacts are available based on e2e search results 2021-08-27 10:07:07 -05:00
Tim Donohue
fbfd4a2769 Fixes to e2e CI process 2021-08-27 09:11:23 -05:00
Tim Donohue
c86b68a6e0 Replace Protrator e2e tests with Cypress. Move all existing tests to Cypress & add basic Deque Axe integration. 2021-08-26 17:14:08 -05:00
Bill Branan
95a2da6410 Adds script to merge in i18n translation files from themes
See: https://github.com/DSpace/dspace-angular/issues/1299
2021-08-26 09:37:53 -04:00
Michael Spalti
668a08be45 Updated the iiif endpoint that is passed to the viewer. 2021-08-25 11:09:47 -07:00
Davide Negretti
4b3e0e8d09 [CST-4058] lint errors fixed 2021-08-24 17:53:43 +02:00
Davide Negretti
cbbac01313 [CST-4058] bug fixed 2021-08-24 17:06:00 +02:00
Davide Negretti
dfae46d92e [DSC-198] commented lines removed 2021-08-24 15:16:02 +02:00
Davide Negretti
befc0d4c9e [CST-4058] lint errors fixed 2021-08-24 13:41:04 +02:00
Tim Donohue
adb40d8712 Merge pull request #1295 from atmire/w2p-81901_Fix-sidebar-a11y-issues
Fix sidebar a11y issues
2021-08-23 16:01:33 -05:00
Davide Negretti
2cb9345ed5 [CST-4058] tests 2021-08-23 18:09:03 +02:00
Yura Bondarenko
714ea5d8f9 81901: Add in forgotten translate pipe 2021-08-23 15:45:22 +02:00
Yura Bondarenko
9cb8a77bf8 81901: Fix OnClickMenuItemComponent unit test 2021-08-20 18:24:38 +02:00
Davide Negretti
8134e6bc17 [CST-4058] tests (WIP) 2021-08-20 15:13:10 +02:00
Yura Bondarenko
3c4f3e9104 81901: Fix navigation/onclick function ~ enter key 2021-08-20 10:53:01 +02:00
Yura Bondarenko
9d66bc5167 81901: Use sidebar section text for tooltip 2021-08-20 09:43:36 +02:00
Michael Spalti
fb0d51c574 Improved performance of mirador component by avoiding IIIF bundle bitstream lookup. 2021-08-19 13:00:58 -07:00
myrza1
2bc1217dff Create Kazakh Translation
Create Kazakh Translation
2021-08-19 13:16:54 +06:00
Davide Negretti
9e710f7093 [CST-4058] tests (WIP) 2021-08-18 18:58:16 +02:00
Davide Negretti
3d894d02d3 [CST-4058] Show EPerson's email address and netid; tests fixed 2021-08-17 18:38:35 +02:00
Davide Negretti
5c070428d3 [CST-4058] Show the name of the community/collection in "Edit group" page 2021-08-17 17:10:32 +02:00
Davide Negretti
1bb98119f5 [CST-4058] Show the name of the community/collection next to the name of the group 2021-08-17 09:33:54 +02:00
Yura Bondarenko
ab6e8be6b1 Remove unused import 2021-08-16 17:53:17 +02:00
Yura Bondarenko
2a10f6bf9e 81901: AdminSidebarSectionComponent navigate on spacebar 2021-08-16 17:36:04 +02:00
Yura Bondarenko
7ae26d3ebb 81901: Fix expandable section submenu spacing
* Selection outlines were cut off by the icon (which needs to be full height for the animation-
2021-08-16 17:36:04 +02:00
Yura Bondarenko
2fa06d28e3 81901: Make expandable section not a link 2021-08-16 17:36:04 +02:00
Davide Negretti
ed12770494 [CST-4058] Show EPerson's email address - Show netid as fallback value 2021-08-16 17:23:45 +02:00
Davide Negretti
8274594848 [CST-4058] Show EPerson's email address 2021-08-16 17:03:07 +02:00
Yura Bondarenko
214833af68 81901: Add aria-expanded attribute to expandable items 2021-08-16 16:50:36 +02:00
Yura Bondarenko
c63d049d55 81901: Make expanded submenu items slide in from under collapsed sidebar 2021-08-16 16:39:56 +02:00
Yura Bondarenko
303e69a6b9 81901: Make admin sidebar header not a link 2021-08-16 09:50:04 +02:00
Yura Bondarenko
129ea726e8 81901: Enable spacebar toggling for admin sidebar items 2021-08-16 09:50:04 +02:00
Yura Bondarenko
b32226c5ed 81901: Fix keyboard/hover expand/collapse interactions 2021-08-13 17:14:54 +02:00
Yura Bondarenko
b84e003f27 81901: Update unit tests 2021-08-06 19:03:31 +02:00
Yura Bondarenko
4ae526d6b2 81901: Expand/collapse admin sidebar preview on focusin/focusout 2021-08-06 18:32:14 +02:00
Yura Bondarenko
1bad7fae3f 81901: Set aria-disabled for menu links and sidebar sections 2021-08-06 18:14:44 +02:00
Yura Bondarenko
2265de8d44 81901: Single link in sidebar menu entries
+ improved focus ring styling
2021-08-06 18:14:44 +02:00
Yura Bondarenko
d095c98b13 81901: Menu item components as ul > li 2021-08-06 18:14:43 +02:00
Tim Donohue
5a12f34593 Merge pull request #1287 from atmire/language-attribute-html-tag
Language attribute on HTML tag
2021-08-05 16:53:33 -05:00
Tim Donohue
a45780566f Merge pull request #1283 from josekarvalho/patch-2
Update en.json5
2021-08-05 15:55:12 -05:00
lotte
43c03de0ad Language attribute on HTML tag 2021-08-04 17:38:27 +02:00
Michael Spalti
6019a21ebd Removed unused import. 2021-07-31 09:02:10 -07:00
Michael Spalti
9cc3351fcf Fixed item page component paths. 2021-07-30 16:52:33 -07:00
Michael Spalti
20477f0aaa Merge branch 'main' into iiif-mirador 2021-07-30 16:27:18 -07:00
José Carvalho
85ae3da0c0 Update en.json5
removed strings not used
2021-07-29 18:46:28 +01:00
José Carvalho
14f026f8c4 Update en.json5
Updated with missing strings (found by revising the portuguese translation), and added new strings to support relations between entities and the import of external funding from the OpenAIRE API. Removed one duplicate string.
2021-07-29 15:47:31 +01:00
Michael Spalti
de352a839e Retrieve thumbnail from remote data object. 2021-07-12 09:53:17 -07:00
Michael Spalti
9c41cd7f8f Merge branch 'main' into iiif-mirador 2021-07-11 07:37:03 -07:00
Michael Spalti
da2bbcee09 Merge branch 'main' into iiif-mirador 2021-05-18 15:45:23 -07:00
Michael Spalti
3bd8e355f6 Added description field to iiif item view. 2021-05-18 15:42:46 -07:00
Michael Spalti
3dacbe51a1 Merge branch 'main' into iiif-mirador 2021-05-16 16:30:34 -07:00
Michael W Spalti
98571a496c Merge remote-tracking branch 'origin/iiif-mirador' into iiif-mirador 2021-04-20 14:46:44 -07:00
Michael Spalti
4791cce928 Merge branch 'main' into iiif-mirador 2021-04-16 08:47:01 -07:00
Michael Spalti
2561d54b2d Added comments 2021-04-16 08:46:20 -07:00
Michael Spalti
c37b31599c Merge remote-tracking branch 'upstream/main' into iiif-mirador 2021-04-02 16:35:54 -07:00
Michael Spalti
6f55225aee Removed unused variable. 2021-04-02 15:59:36 -07:00
Michael Spalti
247ae73c64 Merge branch 'main' into iiif-mirador 2021-04-02 14:41:50 -07:00
Michael Spalti
3bc7739098 Minor fix in module. 2021-04-01 16:02:28 -07:00
Michael Spalti
ce11ae2480 Merge branch 'main' into iiif-mirador 2021-04-01 16:01:08 -07:00
Michael Spalti
3744abb26f Allow canvas side panel on all views. 2021-04-01 15:04:40 -07:00
Michael Spalti
97e8c9b955 Added title to the mirador iframe. 2021-03-30 16:03:02 -07:00
Michael Spalti
0250b182b6 Changed property name 2021-03-30 15:42:51 -07:00
Michael Spalti
e4a51af46e Merge branch 'iiif-mirador' of https://github.com/mspalti/dspace-angular into iiif-mirador 2021-03-30 14:02:11 -07:00
Michael Spalti
c0aac8a5e9 Added mobile breakpoint for mirador viewer configuration. 2021-03-30 13:46:28 -07:00
Michael Spalti
f52ed2a218 Updated iiif component tests. 2021-03-30 13:41:11 -07:00
Michael Spalti
0330b3ea4c yarn.lock 2021-03-30 10:54:03 -07:00
Michael Spalti
5a8f38abdc Updates to iiif list elements. 2021-03-30 10:54:03 -07:00
Michael Spalti
45c6f4eb84 Added iiif labels to en.json5 2021-03-30 10:54:03 -07:00
Michael Spalti
187ae50d29 Added iiif entity module to parent item module. 2021-03-30 10:54:03 -07:00
Michael Spalti
2d694a864e Added mirador files for webpack build 2021-03-30 10:54:03 -07:00
Michael Spalti
71851fe141 Added FileSectionComponent to shared module. 2021-03-30 10:54:03 -07:00
Michael Spalti
23e7675171 Added iiif entity group. 2021-03-30 10:54:03 -07:00
Michael Spalti
42802bd543 Added mirador route to express server. 2021-03-30 10:54:03 -07:00
Michael Spalti
c02983c889 Added webpack configuration for mirador. 2021-03-30 10:54:03 -07:00
Michael Spalti
3b5df5d432 Added mirador deps and scripts to package.json 2021-03-30 10:54:03 -07:00
Michael Spalti
aa27ddad02 yarn.lock 2021-03-27 13:44:01 -07:00
Michael Spalti
f377347dcc Updates to iiif list elements. 2021-03-27 13:37:07 -07:00
Michael Spalti
2ec1096e21 Added iiif labels to en.json5 2021-03-27 13:35:11 -07:00
Michael Spalti
30ff10ea90 Added iiif entity module to parent item module. 2021-03-27 13:34:26 -07:00
Michael Spalti
6081dabe48 Added mirador files for webpack build 2021-03-27 10:18:15 -07:00
Michael Spalti
27afd4192f Added FileSectionComponent to shared module. 2021-03-27 10:12:18 -07:00
Michael Spalti
c6bc21f9db Added iiif entity group. 2021-03-27 10:09:22 -07:00
Michael Spalti
7e1c441ee8 Added mirador route to express server. 2021-03-27 10:03:20 -07:00
Michael Spalti
a56ebad133 Added webpack configuration for mirador. 2021-03-27 10:01:50 -07:00
Michael Spalti
156e9a08b0 Added mirador deps and scripts to package.json 2021-03-27 09:57:45 -07:00
2013 changed files with 118064 additions and 38854 deletions

View File

@@ -2,10 +2,16 @@
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# For the full list of supported browsers by the Angular framework, please see:
# https://angular.io/guide/browser-support
# You can see what browsers were selected by your queries by running:
# npx browserslist
> 0.5%
last 2 versions
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major versions
last 2 iOS major versions
Firefox ESR
not IE 9-11 # For IE 9-11 support, remove 'not'.
not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.

222
.eslintrc.json Normal file
View File

@@ -0,0 +1,222 @@
{
"root": true,
"plugins": [
"@typescript-eslint",
"@angular-eslint/eslint-plugin",
"eslint-plugin-import",
"eslint-plugin-jsdoc",
"eslint-plugin-deprecation",
"eslint-plugin-unused-imports"
],
"overrides": [
{
"files": [
"*.ts"
],
"parserOptions": {
"project": [
"./tsconfig.json",
"./cypress/tsconfig.json"
],
"createDefaultProgram": true
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:@angular-eslint/recommended",
"plugin:@angular-eslint/template/process-inline-templates"
],
"rules": {
"max-classes-per-file": [
"error",
1
],
"comma-dangle": [
"off",
"always-multiline"
],
"eol-last": [
"error",
"always"
],
"no-console": [
"error",
{
"allow": [
"log",
"warn",
"dir",
"timeLog",
"assert",
"clear",
"count",
"countReset",
"group",
"groupEnd",
"table",
"debug",
"info",
"dirxml",
"error",
"groupCollapsed",
"Console",
"profile",
"profileEnd",
"timeStamp",
"context"
]
}
],
"curly": "error",
"brace-style": [
"error",
"1tbs",
{
"allowSingleLine": true
}
],
"eqeqeq": [
"error",
"always",
{
"null": "ignore"
}
],
"radix": "error",
"guard-for-in": "error",
"no-bitwise": "error",
"no-restricted-imports": "error",
"no-caller": "error",
"no-debugger": "error",
"no-redeclare": "error",
"no-eval": "error",
"no-fallthrough": "error",
"no-trailing-spaces": "error",
"space-infix-ops": "error",
"keyword-spacing": "error",
"no-var": "error",
"no-unused-expressions": [
"error",
{
"allowTernary": true
}
],
"prefer-const": "off", // todo: re-enable & fix errors (more strict than it used to be in TSLint)
"prefer-spread": "off",
"no-underscore-dangle": "off",
// todo: disabled rules from eslint:recommended, consider re-enabling & fixing
"no-prototype-builtins": "off",
"no-useless-escape": "off",
"no-case-declarations": "off",
"no-extra-boolean-cast": "off",
"@angular-eslint/directive-selector": [
"error",
{
"type": "attribute",
"prefix": "ds",
"style": "camelCase"
}
],
"@angular-eslint/component-selector": [
"error",
{
"type": "element",
"prefix": "ds",
"style": "kebab-case"
}
],
"@angular-eslint/pipe-prefix": [
"error",
{
"prefixes": [
"ds"
]
}
],
"@angular-eslint/no-attribute-decorator": "error",
"@angular-eslint/no-forward-ref": "error",
"@angular-eslint/no-output-native": "warn",
"@angular-eslint/no-output-on-prefix": "warn",
"@angular-eslint/no-conflicting-lifecycle": "warn",
"@typescript-eslint/no-inferrable-types":[
"error",
{
"ignoreParameters": true
}
],
"@typescript-eslint/quotes": [
"error",
"single",
{
"avoidEscape": true,
"allowTemplateLiterals": true
}
],
"@typescript-eslint/semi": "error",
"@typescript-eslint/no-shadow": "error",
"@typescript-eslint/dot-notation": "error",
"@typescript-eslint/consistent-type-definitions": "error",
"@typescript-eslint/prefer-function-type": "error",
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "property",
"format": null
}
],
"@typescript-eslint/member-ordering": [
"error",
{
"default": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"@typescript-eslint/type-annotation-spacing": "error",
"@typescript-eslint/unified-signatures": "error",
"@typescript-eslint/ban-types": "warn", // todo: deal with {} type issues & re-enable
"@typescript-eslint/no-floating-promises": "warn",
"@typescript-eslint/no-misused-promises": "warn",
"@typescript-eslint/restrict-plus-operands": "warn",
"@typescript-eslint/unbound-method": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-unnecessary-type-assertion": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-return": "off",
"@typescript-eslint/restrict-template-expressions": "off",
"@typescript-eslint/require-await": "off",
"deprecation/deprecation": "warn",
"import/order": "off",
"import/no-deprecated": "warn"
}
},
{
"files": [
"*.html"
],
"extends": [
"plugin:@angular-eslint/template/recommended"
],
"rules": {
// todo: re-enable & fix errors
"@angular-eslint/template/no-negated-async": "off",
"@angular-eslint/template/eqeqeq": "off"
}
}
]
}

16
.gitattributes vendored Normal file
View File

@@ -0,0 +1,16 @@
# By default, auto detect text files and perform LF normalization
# This ensures code is always checked in with LF line endings
* text=auto
# JS and TS files must always use LF for Angular tools to work
# Some Angular tools expect LF line endings, even on Windows.
# This ensures Windows always checks out these files with LF line endings
# We've copied many of these rules from https://github.com/angular/angular-cli/
*.js eol=lf
*.ts eol=lf
*.json eol=lf
*.json5 eol=lf
*.css eol=lf
*.scss eol=lf
*.html eol=lf
*.svg eol=lf

View File

@@ -16,24 +16,24 @@ jobs:
DSPACE_REST_PORT: 8080
DSPACE_REST_NAMESPACE: '/server'
DSPACE_REST_SSL: false
# When Chrome version is specified, we pin to a specific version of Chrome & ChromeDriver
# Comment this out to use the latest release of both.
CHROME_VERSION: "90.0.4430.212-1"
# 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"
strategy:
# Create a matrix of Node versions to test against (in parallel)
matrix:
node-version: [12.x, 14.x]
node-version: [14.x, 16.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@v1
uses: actions/checkout@v2
# https://github.com/actions/setup-node
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
@@ -66,17 +66,14 @@ jobs:
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-
- name: Install latest ChromeDriver compatible with installed Chrome
# needs to be npm, the --detect_chromedriver_version flag doesn't work with yarn global
run: |
npm install -g chromedriver --detect_chromedriver_version
chromedriver -v
- name: Install Yarn dependencies
run: yarn install --frozen-lockfile
- name: Run lint
run: yarn run lint
run: yarn run lint --quiet
- name: Check for circular dependencies
run: yarn run check-circ-deps
- name: Run build
run: yarn run build:prod
@@ -85,11 +82,11 @@ jobs:
run: yarn run test:headless
# NOTE: Angular CLI only supports code coverage for specs. See https://github.com/angular/angular-cli/issues/6286
# Upload coverage reports to Codecov (for Node v12 only)
# Upload coverage reports to Codecov (for one version of Node only)
# https://github.com/codecov/codecov-action
- name: Upload coverage to Codecov.io
uses: codecov/codecov-action@v1
if: matrix.node-version == '12.x'
uses: codecov/codecov-action@v2
if: matrix.node-version == '16.x'
# Using docker-compose start backend using CI configuration
# and load assetstore from a cached copy
@@ -99,23 +96,48 @@ jobs:
docker-compose -f ./docker/cli.yml -f ./docker/cli.assetstore.yml run --rm dspace-cli
docker container ls
# Wait until the REST API returns a 200 response (or for a max of 30 seconds)
# https://github.com/nev7n/wait_for_response
- name: Wait for DSpace REST Backend to be ready (for e2e tests)
uses: nev7n/wait_for_response@v1
with:
# We use the 'sites' endpoint to also ensure the database is ready
url: 'http://localhost:8080/server/api/core/sites'
responseCode: 200
timeout: 30000
- name: Get DSpace REST Backend info/properties
run: curl http://localhost:8080/server/api
# 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@v2
with:
# Run tests in Chrome, headless mode
browser: chrome
headless: true
# Start app before running tests (will be stopped automatically after tests finish)
start: yarn run serve:ssr
# Wait for backend & frontend to be available
# NOTE: We use the 'sites' REST endpoint to also ensure the database is ready
wait-on: http://localhost:8080/server/api/core/sites, http://localhost:4000
# Wait for 2 mins max for everything to respond
wait-on-timeout: 120
# 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@v2
if: always()
with:
name: e2e-test-videos
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@v2
if: failure()
with:
name: e2e-test-screenshots
path: cypress/screenshots
- name: Stop app (in case it stays up after e2e tests)
run: |
chromedriver --url-base='/wd/hub' --port=4444 &
yarn run e2e:ci
app_pid=$(lsof -t -i:4000)
if [[ ! -z $app_pid ]]; then
echo "App was still up! (PID: $app_pid)"
kill -9 $app_pid
fi
# Start up the app with SSR enabled (run in background)
- name: Start app in SSR (server-side rendering) mode

87
.github/workflows/docker.yml vendored Normal file
View File

@@ -0,0 +1,87 @@
# DSpace Docker image build for hub.docker.com
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
on:
push:
branches:
- main
- 'dspace-**'
tags:
- 'dspace-**'
pull_request:
jobs:
docker:
# 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' || '' }}
steps:
# https://github.com/actions/checkout
- name: Checkout codebase
uses: actions/checkout@v2
# https://github.com/docker/setup-buildx-action
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v1
# 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@v1
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@v3
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@v2
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 }}

7
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/.angular/cache
/__build__
/__server_build__
/node_modules
@@ -7,10 +8,6 @@ npm-debug.log
/build/
/src/environments/environment.ts
/src/environments/environment.dev.ts
/src/environments/environment.prod.ts
/coverage
/dist/
@@ -40,3 +37,5 @@ package-lock.json
.env
/nbproject/
junit.xml

View File

@@ -3,5 +3,6 @@
"i18n-ally.localesPaths": [
"src/assets/i18n",
"src/app/core/locale"
]
],
"typescript.tsdk": "node_modules\\typescript\\lib"
}

View File

@@ -1,7 +1,7 @@
# This image will be published as dspace/dspace-angular
# See https://dspace-labs.github.io/DSpace-Docker-Images/ for usage details
# See https://github.com/DSpace/dspace-angular/tree/main/docker for usage details
FROM node:12-alpine
FROM node:14-alpine
WORKDIR /app
ADD . /app/
EXPOSE 4000
@@ -9,4 +9,9 @@ EXPOSE 4000
# We run yarn install with an increased network timeout (5min) to avoid "ESOCKETTIMEDOUT" errors from hub.docker.com
# See, for example https://github.com/yarnpkg/yarn/issues/5540
RUN yarn install --network-timeout 300000
CMD yarn run start:dev
# On startup, run in DEVELOPMENT mode (this defaults to live reloading enabled, etc).
# 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 IP. See https://github.com/DSpace/dspace-angular/issues/1485
CMD yarn serve --host 0.0.0.0

20
LICENSE
View File

@@ -1,4 +1,4 @@
DSpace source code BSD License:
BSD 3-Clause License
Copyright (c) 2002-2021, LYRASIS. All rights reserved.
@@ -13,13 +13,12 @@ notice, this list of conditions and the following disclaimer.
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name DuraSpace nor the name of the DSpace Foundation
nor the names of its contributors may be used to endorse or promote
products derived from this software without specific prior written
permission.
- Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
@@ -29,11 +28,4 @@ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
DSpace uses third-party libraries which may be distributed under
different licenses to the above. Information about these licenses
is detailed in the LICENSES_THIRD_PARTY file at the root of the source
tree. You must agree to the terms of these licenses, in addition to
the above DSpace source code license, in order to use this software.
DAMAGE.

28
NOTICE Normal file
View File

@@ -0,0 +1,28 @@
Licenses of Third-Party Libraries
=================================
DSpace uses third-party libraries which may be distributed under
different licenses than specified in our LICENSE file. Information
about these licenses is detailed in the LICENSES_THIRD_PARTY file at
the root of the source tree. You must agree to the terms of these
licenses, in addition to the DSpace source code license, in order to
use this software.
Licensing Notices
=================
[July 2019] DuraSpace joined with LYRASIS (another 501(c)3 organization) in July 2019.
LYRASIS holds the copyrights of DuraSpace.
[July 2009] Fedora Commons joined with the DSpace Foundation and began operating under
the new name DuraSpace in July 2009. DuraSpace holds the copyrights of
the DSpace Foundation, Inc.
[July 2007] The DSpace Foundation, Inc. is a 501(c)3 corporation established in July 2007
with a mission to promote and advance the dspace platform enabling management,
access and preservation of digital works. The Foundation was able to transfer
the legal copyright from Hewlett-Packard Company (HP) and Massachusetts
Institute of Technology (MIT) to the DSpace Foundation in October 2007. Many
of the files in the source code may contain a copyright statement stating HP
and MIT possess the copyright, in these instances please note that the copy
right has transferred to the DSpace foundation, and subsequently to DuraSpace.

351
README.md
View File

@@ -35,7 +35,7 @@ https://wiki.lyrasis.org/display/DSDOC7x/Installing+DSpace
Quick start
-----------
**Ensure you're running [Node](https://nodejs.org) `v12.x` or `v14.x`, [npm](https://www.npmjs.com/) >= `v5.x` and [yarn](https://yarnpkg.com) >= `v1.x`**
**Ensure you're running [Node](https://nodejs.org) `v14.x` or `v16.x`, [npm](https://www.npmjs.com/) >= `v5.x` and [yarn](https://yarnpkg.com) == `v1.x`**
```bash
# clone the repo
@@ -61,14 +61,17 @@ Table of Contents
- [Introduction to the technology](#introduction-to-the-technology)
- [Requirements](#requirements)
- [Installing](#installing)
- [Configuring](#configuring)
- [Configuring](#configuring)
- [Running the app](#running-the-app)
- [Running in production mode](#running-in-production-mode)
- [Running in production mode](#running-in-production-mode)
- [Deploy](#deploy)
- [Running the application with Docker](#running-the-application-with-docker)
- [Cleaning](#cleaning)
- [Testing](#testing)
- [Test a Pull Request](#test-a-pull-request)
- [Unit Tests](#unit-tests)
- [E2E Tests](#e2e-tests)
- [Writing E2E Tests](#writing-e2e-tests)
- [Documentation](#documentation)
- [Other commands](#other-commands)
- [Recommended Editors/IDEs](#recommended-editorsides)
@@ -87,61 +90,114 @@ Requirements
------------
- [Node.js](https://nodejs.org) and [yarn](https://yarnpkg.com)
- Ensure you're running node `v12.x` or `v14.x` and yarn >= `v1.x`
- Ensure you're running node `v14.x` or `v16.x` and yarn == `v1.x`
If you have [`nvm`](https://github.com/creationix/nvm#install-script) or [`nvm-windows`](https://github.com/coreybutler/nvm-windows) installed, which is highly recommended, you can run `nvm install --lts && nvm use` to install and start using the latest Node LTS.
Installing
----------
- `yarn run global` to install the required global dependencies
- `yarn install` to install the local dependencies
### Configuring
Default configuration file is located in `src/environments/` folder.
Default runtime configuration file is located in `config/` folder. These configurations can be changed without rebuilding the distribution.
To change the default configuration values, create local files that override the parameters you need to change. You can use `environment.template.ts` as a starting point.
To override the default configuration values, create local files that override the parameters you need to change. You can use `config.example.yml` as a starting point.
- Create a new `environment.dev.ts` file in `src/environments/` for a `development` environment;
- Create a new `environment.prod.ts` file in `src/environments/` for a `production` environment;
- Create a new `config.(dev or development).yml` file in `config/` for a `development` environment;
- Create a new `config.(prod or production).yml` file in `config/` for a `production` environment;
The server settings can also be overwritten using an environment file.
The settings can also be overwritten using an environment file or environment variables.
This file should be called `.env` and be placed in the project root.
The following settings can be overwritten in this file:
The following non-convention settings:
```bash
DSPACE_HOST # The host name of the angular application
DSPACE_PORT # The port number of the angular application
DSPACE_NAMESPACE # The namespace of the angular application
DSPACE_SSL # Whether the angular application uses SSL [true/false]
```
DSPACE_REST_HOST # The host name of the REST application
DSPACE_REST_PORT # The port number of the REST application
DSPACE_REST_NAMESPACE # The namespace of the REST application
DSPACE_REST_SSL # Whether the angular REST uses SSL [true/false]
All other settings can be set using the following convention for naming the environment variables:
1. replace all `.` with `_`
2. convert all characters to upper case
3. prefix with `DSPACE_`
e.g.
```bash
# The host name of the REST application
rest.host => DSPACE_REST_HOST
# The port number of the REST application
rest.port => DSPACE_REST_PORT
# The namespace of the REST application
rest.nameSpace => DSPACE_REST_NAMESPACE
# Whether the angular REST uses SSL [true/false]
rest.ssl => DSPACE_REST_SSL
cache.msToLive.default => DSPACE_CACHE_MSTOLIVE_DEFAULT
auth.ui.timeUntilIdle => DSPACE_AUTH_UI_TIMEUNTILIDLE
```
The equavelant to the non-conventional legacy settings:
```bash
DSPACE_UI_HOST => DSPACE_HOST
DSPACE_UI_PORT => DSPACE_PORT
DSPACE_UI_NAMESPACE => DSPACE_NAMESPACE
DSPACE_UI_SSL => DSPACE_SSL
```
The same settings can also be overwritten by setting system environment variables instead, E.g.:
```bash
```bash
export DSPACE_HOST=api7.dspace.org
export DSPACE_UI_PORT=4200
```
The priority works as follows: **environment variable** overrides **variable in `.env` file** overrides **`environment.(prod, dev or test).ts`** overrides **`environment.common.ts`**
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`**
These configuration sources are collected **at build time**, and written to `src/environments/environment.ts`. At runtime the configuration is fixed, and neither `.env` nor the process' environment will be consulted.
These configuration sources are collected **at run time**, and written to `dist/browser/assets/config.json` for production and `src/app/assets/config.json` for development.
The configuration file can be externalized by using environment variable `DSPACE_APP_CONFIG_PATH`.
#### Buildtime Configuring
Buildtime configuration must defined before build in order to include in transpiled JavaScript. This is primarily for the server. These settings can be found under `src/environment/` folder.
To override the default configuration values for development, create local file that override the build time parameters you need to change.
- Create a new `environment.(dev or development).ts` file in `src/environment/` for a `development` environment;
If needing to update default configurations values for production, update local file that override the build time parameters you need to change.
- Update `environment.production.ts` file in `src/environment/` for a `production` environment;
The environment object is provided for use as import in code and is extended with the runtime configuration on bootstrap of the application.
> Take caution moving runtime configs into the buildtime configuration. They will be overwritten by what is defined in the runtime config on bootstrap.
#### Using environment variables in code
To use environment variables in a UI component, use:
```typescript
import { environment } from '../environment.ts';
import { AppConfig, APP_CONFIG } from 'src/config/app-config.interface';
...
constructor(@Inject(APP_CONFIG) private appConfig: AppConfig) {}
...
```
This file is generated by the script located in `scripts/set-env.ts`. This script will run automatically before every build, or can be manually triggered using the appropriate `config` script in `package.json`
or
```typescript
import { environment } from '../environment.ts';
```
Running the app
---------------
@@ -152,7 +208,7 @@ After you have installed all dependencies you can now run the app. Run `yarn run
When building for production we're using Ahead of Time (AoT) compilation. With AoT, the browser downloads a pre-compiled version of the application, so it can render the application immediately, without waiting to compile the app first. The compiler is roughly half the size of Angular itself, so omitting it dramatically reduces the application payload.
To build the app for production and start the server run:
To build the app for production and start the server (in one command) run:
```bash
yarn start
@@ -166,6 +222,10 @@ yarn run build:prod
```
This will build the application and put the result in the `dist` folder. You can copy this folder to wherever you need it for your application server. If you will be using the built-in Express server, you'll also need a copy of the `node_modules` folder tucked inside your copy of `dist`.
After building the app for production, it can be started by running:
```bash
yarn run serve:ssr
```
### Running the application with Docker
NOTE: At this time, we do not have production-ready Docker images for DSpace.
@@ -209,34 +269,89 @@ Once you have tested the Pull Request, please add a comment and/or approval to t
### Unit Tests
Unit tests use Karma. You can find the configuration file at the same level of this README file:`./karma.conf.js` If you are going to use a remote test environment you need to edit the `./karma.conf.js`. Follow the instructions you will find inside it. To executing tests whenever any file changes you can modify the 'autoWatch' option to 'true' and 'singleRun' option to 'false'. A coverage report is also available at: http://localhost:9876/ after you run: `yarn run coverage`.
Unit tests use the [Jasmine test framework](https://jasmine.github.io/), and are run via [Karma](https://karma-runner.github.io/).
You can find the Karma configuration file at the same level of this README file:`./karma.conf.js` If you are going to use a remote test environment you need to edit the `./karma.conf.js`. Follow the instructions you will find inside it. To executing tests whenever any file changes you can modify the 'autoWatch' option to 'true' and 'singleRun' option to 'false'. A coverage report is also available at: http://localhost:9876/ after you run: `yarn run coverage`.
The default browser is Google Chrome.
Place your tests in the same location of the application source code files that they test.
Place your tests in the same location of the application source code files that they test, e.g. ending with `*.component.spec.ts`
and run: `yarn run test`
and run: `yarn test`
### E2E test
If you run into odd test errors, see the Angular guide to debugging tests: https://angular.io/guide/test-debugging
E2E tests use Protractor + Selenium server + browsers. You can find the configuration file at the same level of this README file:`./protractor.conf.js` Protractor is installed as 'local' as a dev dependency.
### E2E Tests
If you are going to use a remote test enviroment you need to edit the './e2e//protractor.conf.js'. Follow the instructions you will find inside it.
E2E tests (aka integration tests) use [Cypress.io](https://www.cypress.io/). Configuration for cypress can be found in the `cypress.json` file in the root directory.
The default browser is Google Chrome.
The test files can be found in the `./cypress/integration/` folder.
Place your tests at the following path: `./e2e`
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.
* 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:
```
DSPACE_REST_SSL = false
DSPACE_REST_HOST = localhost
DSPACE_REST_PORT = 8080
```
2. Your backend MUST include our [Entities Test Data set](https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data). Some tests run against a specific Community/Collection/Item UUID. These UUIDs are all valid for our Entities Test Data set.
* (Recommended) The Entities Test Data set may be installed easily via Docker, see https://github.com/DSpace/DSpace/tree/main/dspace/src/main/docker-compose#ingest-option-2-ingest-entities-test-data
* Alternatively, the Entities Test Data set may be installed via a simple SQL import (e. g. `psql -U dspace < dspace7-entities-data.sql`). See instructions in link above.
and run: `ng e2e`
After performing the above setup, you can run the e2e tests using
```
ng e2e
````
NOTE: By default these tests will run against the REST API backend configured via environment variables or in `config.prod.yml`. If you'd rather it use `config.dev.yml`, just set the NODE_ENV environment variable like this:
```
NODE_ENV=development ng e2e
```
### Continuous Integration (CI) Test
The `ng e2e` command will start Cypress and allow you to select the browser you wish to use, as well as whether you wish to run all tests or an individual test file. Once you click run on test(s), this opens the [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner) to run your test(s) and show you the results.
To run all the tests (e.g.: to run tests with Continuous Integration software) you can execute:`yarn run ci` Keep in mind that this command prerequisites are the sum of unit test and E2E tests.
#### Writing E2E Tests
All E2E tests must be created under the `./cypress/integration/` folder, and must end in `.spec.ts`. Subfolders are allowed.
* The easiest way to start creating new tests is by running `ng e2e`. This builds the app and brings up Cypress.
* From here, if you are editing an existing test file, you can either open it in your IDE or run it first to see what it already does.
* To create a new test file, click `+ New Spec File`. Choose a meaningful name ending in `spec.ts` (Please make sure it ends in `.ts` so that it's a Typescript file, and not plain Javascript)
* Start small. Add a basic `describe` and `it` which just [cy.visit](https://docs.cypress.io/api/commands/visit) the page you want to test. For example:
```
describe('Community/Collection Browse Page', () => {
it('should exist as a page', () => {
cy.visit('/community-list');
});
});
```
* Run your test file from the Cypress window. This starts the [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner) in a new browser window.
* In the [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner), you'll Cypress automatically visit the page. This first test will succeed, as all you are doing is making sure the _page exists_.
* From here, you can use the [Selector Playground](https://docs.cypress.io/guides/core-concepts/test-runner#Selector-Playground) in the Cypress Test Runner window to determine how to tell Cypress to interact with a specific HTML element on that page.
* Most commands start by telling Cypress to [get()](https://docs.cypress.io/api/commands/get) a specific element, using a CSS or jQuery style selector
* It's generally best not to rely on attributes like `class` and `id` in tests, as those are likely to change later on. Instead, you can add a `data-test` attribute to makes it clear that it's required for a test.
* Cypress can then do actions like [click()](https://docs.cypress.io/api/commands/click) an element, or [type()](https://docs.cypress.io/api/commands/type) text in an input field, etc.
* When running with server-side rendering enabled, the client first receives HTML without the JS; only once the page is rendered client-side do some elements (e.g. a button that toggles a Bootstrap dropdown) become fully interactive. This can trip up Cypress in some cases as it may try to `click` or `type` in an element that's not fully loaded yet, causing tests to fail.
* To work around this issue, define the attributes you use for Cypress selectors as `[attr.data-test]="'button' | ngBrowserOnly"`. This will only show the attribute in CSR HTML, forcing Cypress to wait until CSR is complete before interacting with the element.
* Cypress can also validate that something occurs, using [should()](https://docs.cypress.io/api/commands/should) assertions.
* Any time you save your test file, the Cypress Test Runner will reload & rerun it. This allows you can see your results quickly as you write the tests & correct any broken tests rapidly.
* Cypress also has a great guide on [writing your first test](https://on.cypress.io/writing-first-test) with much more info. Keep in mind, while the examples in the Cypress docs often involve Javascript files (.js), the same examples will work in our Typescript (.ts) e2e tests.
_Hint: Creating e2e tests is easiest in an IDE (like Visual Studio), as it can help prompt/autocomplete your Cypress commands._
More Information: [docs.cypress.io](https://docs.cypress.io/) has great guides & documentation helping you learn more about writing/debugging e2e tests in Cypress.
### Learning how to build tests
See our [DSpace Code Testing Guide](https://wiki.lyrasis.org/display/DSPACE/Code+Testing+Guide) for more hints/tips.
Documentation
--------------
See [`./docs`](docs) for further documentation.
Official DSpace documentation is available in the DSpace wiki at https://wiki.lyrasis.org/display/DSDOC7x/
Some UI specific configuration documentation is also found in the [`./docs`](docs) folder of htis codebase.
### Building code documentation
@@ -259,8 +374,6 @@ To get the most out of TypeScript, you'll need a TypeScript-aware editor. We've
- Free
- [Visual Studio Code](https://code.visualstudio.com/)
- [Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome)
- [Atom](https://atom.io/)
- [TypeScript plugin](https://atom.io/packages/atom-typescript)
- Paid
- [Webstorm](https://www.jetbrains.com/webstorm/download/) or [IntelliJ IDEA Ultimate](https://www.jetbrains.com/idea/)
- [Sublime Text](http://www.sublimetext.com/3)
@@ -276,101 +389,85 @@ File Structure
```
dspace-angular
├── README.md * This document
├── app.yaml * Application manifest file
├── config * Folder for configuration files
   ├── environment.default.js * Default configuration files
   └── environment.test.js * Test configuration files
├── config *
│ └── config.yml * Default app config
├── cypress * Folder for Cypress (https://cypress.io/) / e2e tests
├── downloads *
├── fixtures * Folder for e2e/integration test files
│ ├── integration * Folder for any fixtures needed by e2e tests
│ ├── plugins * Folder for Cypress plugins (if any)
│ ├── support * Folder for global e2e test actions/commands (run for all tests)
│ └── tsconfig.json * TypeScript configuration file for e2e tests
├── docker * See docker/README.md for details
│ ├── cli.assetstore.yml *
│ ├── cli.ingest.yml *
│ ├── cli.yml *
│ ├── db.entities.yml *
│ ├── docker-compose-ci.yml *
│ ├── docker-compose-rest.yml *
│ ├── docker-compose.yml *
│ └── README.md *
├── docs * Folder for documentation
├── e2e * Folder for e2e test files
│   ├── app.e2e-spec.ts *
   ├── app.po.ts *
   ├── pagenotfound *
   │   ├── pagenotfound.e2e-spec.ts *
   │   └── pagenotfound.po.ts *
   └── tsconfig.json * TypeScript configuration file for e2e tests
│ └── Configuration.md * Configuration documentation
├── scripts *
├── merge-i18n-files.ts *
├── serve.ts *
├── sync-i18n-files.ts *
├── test-rest.ts *
└── webpack.js *
├── src * The source of the application
│ ├── app * The source code of the application, subdivided by module/page.
│ ├── assets * Folder for static resources
│ │ ├── fonts * Folder for fonts
│ │ ├── i18n * Folder for i18n translations
│ │ └── images * Folder for images
│ ├── backend * Folder containing a mock of the REST API, hosted by the express server
│ ├── config *
│ ├── environments *
│ │ ├── environment.production.ts * Production configuration files
│ │ ├── environment.test.ts * Test configuration files
│ │ └── environment.ts * Default (development) configuration files
│ ├── mirador-viewer *
│ ├── modules *
│ ├── ngx-translate-loaders *
│ ├── styles * Folder containing global styles
│ ├── themes * Folder containing available themes
│ │ ├── custom * Template folder for creating a custom theme
│ │ └── dspace * Default 'dspace' theme
│ ├── index.csr.html * The index file for client side rendering fallback
│ ├── index.html * The index file
│ ├── main.browser.ts * The bootstrap file for the client
│ ├── main.server.ts * The express (http://expressjs.com/) config and bootstrap file for the server
│ ├── polyfills.ts *
│ ├── robots.txt * The robots.txt file
│ ├── test.ts *
│ └── typings.d.ts *
├── webpack *
│ ├── helpers.ts * Webpack helpers
│ ├── webpack.browser.ts * Webpack (https://webpack.github.io/) config for browser build
│ ├── webpack.common.ts * Webpack (https://webpack.github.io/) common build config
│ ├── webpack.mirador.config.ts * Webpack (https://webpack.github.io/) config for mirador config build
│ ├── webpack.prod.ts * Webpack (https://webpack.github.io/) config for prod build
│ └── webpack.test.ts * Webpack (https://webpack.github.io/) config for test build
├── angular.json * Angular CLI (https://angular.io/cli) configuration
├── cypress.json * Cypress Test (https://www.cypress.io/) configuration
├── Dockerfile *
├── karma.conf.js * Karma configuration file for Unit Test
├── LICENSE *
├── LICENSES_THIRD_PARTY *
├── nodemon.json * Nodemon (https://nodemon.io/) configuration
├── package.json * This file describes the npm package for this project, its dependencies, scripts, etc.
├── postcss.config.js * PostCSS (http://postcss.org/) configuration file
├── protractor.conf.js *
├── resources * Folder for static resources
│   ├── data * Folder for static data
│   │   └── en * Folder for i18n English data
│   ├── i18n * Folder for i18n translations
│   │   └── en.json * i18n translations for English
│   └── images * Folder for images
│   ├── dspace-logo-old.png *
│   ├── dspace-logo.png *
│   └── favicon.ico *
├── rollup.config.js * Rollup (http://rollupjs.org/) configuration
├── spec-bundle.js *
├── src * The source of the application
│   ├── app *
│   │   ├── app-routing.module.ts *
│   │   ├── app.component.html *
│   │   ├── app.component.scss *
│   │   ├── app.component.spec.ts *
│   │   ├── app.component.ts *
│   │   ├── app.effects.ts *
│   │   ├── app.module.ts *
│   │   ├── app.reducer.ts *
│   │   ├── browser-app.module.ts * The root module for the client
│   │   ├── +collection-page * Lazily loaded route for collection module
│   │   ├── +community-page * Lazily loaded route for community module
│   │   ├── core *
│   │   ├── header *
│   │   ├── +home * Lazily loaded route for home module
│   │   ├── +item-page * Lazily loaded route for item module
│   │   ├── object-list *
│   │   ├── pagenotfound *
│   │   ├── server-app.module.ts * The root module for the server
│   │   ├── shared *
│   │   ├── store.actions.ts *
│   │   ├── store.effects.ts *
│   │   ├── thumbnail *
│   │   └── typings.d.ts * File that allows you to add custom typings for libraries without TypeScript support
│   ├── backend * Folder containing a mock of the REST API, hosted by the express server
│   │   ├── api.ts *
│   │   ├── cache.ts *
│   │   ├── data *
│   │   └── db.ts *
│   ├── config *
│   │   ├── cache-config.interface.ts *
│   │   ├── config.interface.ts *
│   │   ├── global-config.interface.ts *
│   │   ├── server-config.interface.ts *
│   │   └── universal-config.interface.ts *
│   ├── config.ts * File that loads environmental and shareable settings and makes them available to app components
│   ├── index.csr.html * The index file for client side rendering fallback
│   ├── index.html * The index file
│   ├── main.browser.ts * The bootstrap file for the client
│   ├── main.server.ts * The express (http://expressjs.com/) config and bootstrap file for the server
│   ├── modules *
│   │   ├── cookies *
│   │   ├── data-loader *
│   │   ├── transfer-http *
│   │   ├── transfer-state *
│   │   ├── transfer-store *
│   │   └── translate-universal-loader.ts *
│   ├── routes.ts * The routes file for the server
│   ├── styles * Folder containing global styles
│   │   ├── _mixins.scss *
│   │   └── variables.scss * Global sass variables file
│   ├── tsconfig.browser.json * TypeScript config for the client build
│   ├── tsconfig.server.json * TypeScript config for the server build
│   └── tsconfig.test.json * TypeScript config for the test build
├── tsconfig.json * TypeScript config
├── postcss.config.js * PostCSS (http://postcss.org/) configuration
├── README.md * This document
├── SECURITY.md *
├── server.ts * Angular Universal Node.js Express server
├── tsconfig.app.json * TypeScript config for browser (app)
├── tsconfig.json * TypeScript common config
├── tsconfig.server.json * TypeScript config for server
├── tsconfig.spec.json * TypeScript config for tests
├── tsconfig.ts-node.json * TypeScript config for using ts-node directly
├── tslint.json * TSLint (https://palantir.github.io/tslint/) configuration
├── typedoc.json * TYPEDOC configuration
├── webpack * Webpack (https://webpack.github.io/) config directory
│   ├── webpack.aot.js * Webpack (https://webpack.github.io/) config for AoT build
│   ├── webpack.client.js * Webpack (https://webpack.github.io/) config for client build
│   ├── webpack.common.js *
│   ├── webpack.prod.js * Webpack (https://webpack.github.io/) config for production build
│   ├── webpack.server.js * Webpack (https://webpack.github.io/) config for server build
│   └── webpack.test.js * Webpack (https://webpack.github.io/) config for test build
├── webpack.config.ts *
└── yarn.lock * Yarn lockfile (https://yarnpkg.com/en/docs/yarn-lock)
```
@@ -468,4 +565,8 @@ DSpace uses GitHub to track issues:
License
-------
This project's source code is made available under the DSpace BSD License: http://www.dspace.org/license
DSpace source code is freely available under a standard [BSD 3-Clause license](https://opensource.org/licenses/BSD-3-Clause).
The full license is available in the [LICENSE](LICENSE) file or online at http://www.dspace.org/license/
DSpace uses third-party libraries which may be distributed under different licenses. Those licenses are listed
in the [LICENSES_THIRD_PARTY](LICENSES_THIRD_PARTY) file.

View File

@@ -17,7 +17,6 @@
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"extractCss": true,
"preserveSymlinks": true,
"customWebpackConfig": {
"path": "./webpack/webpack.browser.ts",
@@ -64,13 +63,31 @@
"bundleName": "dspace-theme"
}
],
"scripts": []
"scripts": [],
"baseHref": "/"
},
"configurations": {
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
},
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.production.ts"
},
{
"replace": "src/config/store/devtools.ts",
"with": "src/config/store/devtools.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
@@ -98,6 +115,9 @@
"port": 4000
},
"configurations": {
"development": {
"browserTarget": "dspace-angular:build:development"
},
"production": {
"browserTarget": "dspace-angular:build:production"
}
@@ -139,26 +159,24 @@
}
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
},
"configurations": {
"test": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.test.ts"
}
]
}
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"builder": "@cypress/schematic:cypress",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "dspace-angular:serve"
"devServerTarget": "dspace-angular:serve",
"watch": true,
"headless": false
},
"configurations": {
"production": {
@@ -176,16 +194,27 @@
}
},
"outputPath": "dist/server",
"main": "src/main.server.ts",
"main": "server.ts",
"tsConfig": "tsconfig.server.json"
},
"configurations": {
"development": {
"sourceMap": true,
"optimization": false
},
"production": {
"sourceMap": false,
"optimization": {
"scripts": false,
"styles": true
}
"optimization": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.production.ts"
},
{
"replace": "src/config/store/devtools.ts",
"with": "src/config/store/devtools.prod.ts"
}
]
}
}
},
@@ -215,9 +244,40 @@
"configurations": {
"production": {}
}
},
"cypress-run": {
"builder": "@cypress/schematic:cypress",
"options": {
"devServerTarget": "dspace-angular:serve"
},
"configurations": {
"production": {
"devServerTarget": "dspace-angular:serve:production"
}
}
},
"cypress-open": {
"builder": "@cypress/schematic:cypress",
"options": {
"watch": true,
"headless": false
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": {
"lintFilePatterns": [
"src/**/*.ts",
"src/**/*.html"
]
}
}
}
}
},
"defaultProject": "dspace-angular"
"defaultProject": "dspace-angular",
"cli": {
"analytics": false,
"defaultCollection": "@angular-eslint/schematics"
}
}

2
config/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
config.*.yml
!config.example.yml

298
config/config.example.yml Normal file
View File

@@ -0,0 +1,298 @@
# NOTE: will log all redux actions and transfers in console
debug: false
# Angular Universal server 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:
ssl: false
host: localhost
port: 4000
# NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: /
# The rateLimiter settings limit each IP to a 'max' of 500 requests per 'windowMs' (1 minute).
rateLimiter:
windowMs: 60000 # 1 minute
max: 500 # limit each IP to 500 requests per windowMs
# Trust X-FORWARDED-* headers from proxies (default = true)
useProxies: 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
port: 443
# NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: /server
# Caching settings
cache:
# NOTE: how long should objects be cached for by default
msToLive:
default: 900000 # 15 minutes
control: max-age=60 # revalidate browser
autoSync:
defaultTime: 0
maxBufferSize: 100
timePerMethod:
PATCH: 3 # time in seconds
# Authentication settings
auth:
# Authentication UI settings
ui:
# the amount of time before the idle warning is shown
timeUntilIdle: 900000 # 15 minutes
# the amount of time the user has to react after the idle warning is shown before they are logged out.
idleGracePeriod: 300000 # 5 minutes
# Authentication REST settings
rest:
# If the rest token expires in less than this amount of time, it will be refreshed automatically.
# This is independent from the idle warning.
timeLeftBeforeTokenRefresh: 120000 # 2 minutes
# Form settings
form:
# NOTE: Map server-side validators to comparative Angular form validators
validatorMap:
required: required
regex: pattern
# Notification settings
notifications:
rtl: false
position:
- top
- right
maxStack: 8
# NOTE: after how many seconds notification is closed automatically. If set to zero notifications are not closed automatically
timeOut: 5000 # 5 second
clickToClose: true
# NOTE: 'fade' | 'fromTop' | 'fromRight' | 'fromBottom' | 'fromLeft' | 'rotate' | 'scale'
animate: scale
# Submission settings
submission:
autosave:
# NOTE: which metadata trigger an autosave
metadata: []
# NOTE: after how many time (milliseconds) submission is saved automatically
# eg. timer: 5 * (1000 * 60); // 5 minutes
timer: 0
icons:
metadata:
# NOTE: example of configuration
# # NOTE: metadata name
# - name: dc.author
# # NOTE: fontawesome (v5.x) icon classes and bootstrap utility classes can be used
# style: fas fa-user
- name: dc.author
style: fas fa-user
# default configuration
- name: default
style: ''
authority:
confidence:
# NOTE: example of configuration
# # NOTE: confidence value
# - name: dc.author
# # NOTE: fontawesome (v5.x) icon classes and bootstrap utility classes can be used
# style: fa-user
- value: 600
style: text-success
- value: 500
style: text-info
- value: 400
style: text-warning
# default configuration
- value: default
style: text-muted
# Default Language in which the UI will be rendered if the user's browser language is not an active language
defaultLanguage: en
# Languages. DSpace Angular holds a message catalog for each of the following languages.
# When set to active, users will be able to switch to the use of this language in the user interface.
languages:
- code: en
label: English
active: true
- code: cs
label: Čeština
active: true
- code: de
label: Deutsch
active: true
- code: es
label: Español
active: true
- code: fr
label: Français
active: true
- code: gd
label: Gàidhlig
active: true
- code: lv
label: Latviešu
active: true
- code: hu
label: Magyar
active: true
- code: nl
label: Nederlands
active: true
- code: pt-PT
label: Português
active: true
- code: pt-BR
label: Português do Brasil
active: true
- code: fi
label: Suomi
active: true
- code: sv
label: Svenska
active: true
- code: tr
label: Türkçe
active: true
- code: kk
label: Қазақ
active: true
- code: bn
label: বাংলা
active: true
- code: hi
label: हिंदी
active: true
- code: el
label: Ελληνικά
active: true
# Browse-By Pages
browseBy:
# Amount of years to display using jumps of one year (current year - oneYearLimit)
oneYearLimit: 10
# Limit for years to display using jumps of five years (current year - fiveYearLimit)
fiveYearLimit: 30
# The absolute lowest year to display in the dropdown (only used when no lowest date can be found for all items)
defaultLowerLimit: 1900
# If true, thumbnail images for items will be added to BOTH search and browse result lists.
showThumbnails: true
# The number of entries in a paginated browse results list.
# Rounded to the nearest size in the list of selectable sizes on the
# settings menu.
pageSize: 20
communityList:
# No. of communities to list per expansion (show more)
pageSize: 20
homePage:
recentSubmissions:
# The number of item showing in recent submission components
pageSize: 5
# Sort record of recent submission
sortField: 'dc.date.accessioned'
topLevelCommunityList:
# No. of communities to list per page on the home page
# This will always round to the nearest number from the list of page sizes. e.g. if you set it to 7 it'll use 10
pageSize: 5
# Item Config
item:
edit:
undoTimeout: 10000 # 10 seconds
# Show the item access status label in items lists
showAccessStatuses: false
# Collection Page Config
collection:
edit:
undoTimeout: 10000 # 10 seconds
# Theme Config
themes:
# Add additional themes here. In the case where multiple themes match a route, the first one
# in this list will get priority. It is advisable to always have a theme that matches
# every route as the last one
#
# # 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'
#
# # 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.*'
#
# # 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'
#
# # 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',
# # Any of the matching properties above can be used
# handle: '10673/34'
#
# - name: 'custom-B',
# extends: 'custom',
# handle: '10673/12'
#
# # A theme with only a name will match every route
# name: 'custom'
#
# # This theme will use the default bootstrap styling for DSpace components
# - name: BASE_THEME_NAME
#
- name: dspace
headTags:
- tagName: link
attributes:
rel: icon
href: assets/dspace/images/favicons/favicon.ico
sizes: any
- tagName: link
attributes:
rel: icon
href: assets/dspace/images/favicons/favicon.svg
type: image/svg+xml
- tagName: link
attributes:
rel: apple-touch-icon
href: assets/dspace/images/favicons/apple-touch-icon.png
- tagName: link
attributes:
rel: manifest
href: assets/dspace/images/favicons/manifest.webmanifest
# The default bundles that should always be displayed as suggestions when you upload a new bundle
bundle:
standardBundles: [ ORIGINAL, THUMBNAIL, LICENSE ]
# Whether to enable media viewer for image and/or video Bitstreams (i.e. Bitstreams whose MIME type starts with 'image' or 'video').
# For images, this enables a gallery viewer where you can zoom or page through images.
# For videos, this enables embedded video streaming
mediaViewer:
image: false
video: false
# Whether the end user agreement is required before users use the repository.
# If enabled, the user will be required to accept the agreement before they can use the repository.
# And whether the privacy statement should exist or not.
info:
enableEndUserAgreement: true
enablePrivacyStatement: true
# Whether to enable Markdown (https://commonmark.org/) and MathJax (https://www.mathjax.org/)
# display in supported metadata fields. By default, only dc.description.abstract is supported.
markdown:
enabled: false
mathjax: false

5
config/config.yml Normal file
View File

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

25
cypress.json Normal file
View File

@@ -0,0 +1,25 @@
{
"integrationFolder": "cypress/integration",
"supportFile": "cypress/support/index.ts",
"videosFolder": "cypress/videos",
"screenshotsFolder": "cypress/screenshots",
"pluginsFile": "cypress/plugins/index.ts",
"fixturesFolder": "cypress/fixtures",
"baseUrl": "http://localhost:4000",
"retries": {
"runMode": 2,
"openMode": 0
},
"env": {
"DSPACE_TEST_ADMIN_USER": "dspacedemo+admin@gmail.com",
"DSPACE_TEST_ADMIN_PASSWORD": "dspace",
"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_SEARCH_TERM": "test",
"DSPACE_TEST_SUBMIT_COLLECTION_NAME": "Sample Collection",
"DSPACE_TEST_SUBMIT_COLLECTION_UUID": "9d8334e9-25d3-4a67-9cea-3dffdef80144",
"DSPACE_TEST_SUBMIT_USER": "dspacedemo+submit@gmail.com",
"DSPACE_TEST_SUBMIT_USER_PASSWORD": "dspace"
}
}

3
cypress/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
screenshots/
videos/
downloads/

View File

@@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View File

@@ -0,0 +1,15 @@
import { TEST_ENTITY_PUBLICATION } from 'cypress/support';
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/' + TEST_ENTITY_PUBLICATION);
// Wait for breadcrumbs to be visible
cy.get('ds-breadcrumbs').should('be.visible');
// Analyze <ds-breadcrumbs> for accessibility
testA11y('ds-breadcrumbs');
});
});

View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('Browse By Author', () => {
it('should pass accessibility tests', () => {
cy.visit('/browse/author');
// Wait for <ds-browse-by-metadata-page> to be visible
cy.get('ds-browse-by-metadata-page').should('be.visible');
// Analyze <ds-browse-by-metadata-page> for accessibility
testA11y('ds-browse-by-metadata-page');
});
});

View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('Browse By Date Issued', () => {
it('should pass accessibility tests', () => {
cy.visit('/browse/dateissued');
// Wait for <ds-browse-by-date-page> to be visible
cy.get('ds-browse-by-date-page').should('be.visible');
// Analyze <ds-browse-by-date-page> for accessibility
testA11y('ds-browse-by-date-page');
});
});

View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('Browse By Subject', () => {
it('should pass accessibility tests', () => {
cy.visit('/browse/subject');
// Wait for <ds-browse-by-metadata-page> to be visible
cy.get('ds-browse-by-metadata-page').should('be.visible');
// Analyze <ds-browse-by-metadata-page> for accessibility
testA11y('ds-browse-by-metadata-page');
});
});

View File

@@ -0,0 +1,13 @@
import { testA11y } from 'cypress/support/utils';
describe('Browse By Title', () => {
it('should pass accessibility tests', () => {
cy.visit('/browse/title');
// Wait for <ds-browse-by-title-page> to be visible
cy.get('ds-browse-by-title-page').should('be.visible');
// Analyze <ds-browse-by-title-page> for accessibility
testA11y('ds-browse-by-title-page');
});
});

View File

@@ -0,0 +1,15 @@
import { TEST_COLLECTION } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('Collection Page', () => {
it('should pass accessibility tests', () => {
cy.visit('/collections/' + TEST_COLLECTION);
// <ds-collection-page> tag must be loaded
cy.get('ds-collection-page').should('exist');
// Analyze <ds-collection-page> for accessibility issues
testA11y('ds-collection-page');
});
});

View File

@@ -0,0 +1,32 @@
import { TEST_COLLECTION } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('Collection Statistics Page', () => {
const COLLECTIONSTATISTICSPAGE = '/statistics/collections/' + TEST_COLLECTION;
it('should load if you click on "Statistics" from a Collection page', () => {
cy.visit('/collections/' + TEST_COLLECTION);
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.location('pathname').should('eq', COLLECTIONSTATISTICSPAGE);
});
it('should contain a "Total visits" section', () => {
cy.visit(COLLECTIONSTATISTICSPAGE);
cy.get('.' + TEST_COLLECTION + '_TotalVisits').should('exist');
});
it('should contain a "Total visits per month" section', () => {
cy.visit(COLLECTIONSTATISTICSPAGE);
cy.get('.' + TEST_COLLECTION + '_TotalVisitsPerMonth').should('exist');
});
it('should pass accessibility tests', () => {
cy.visit(COLLECTIONSTATISTICSPAGE);
// <ds-collection-statistics-page> tag must be loaded
cy.get('ds-collection-statistics-page').should('exist');
// Analyze <ds-collection-statistics-page> for accessibility issues
testA11y('ds-collection-statistics-page');
});
});

View File

@@ -0,0 +1,25 @@
import { Options } from 'cypress-axe';
import { testA11y } from 'cypress/support/utils';
describe('Community List Page', () => {
it('should pass accessibility tests', () => {
cy.visit('/community-list');
// <ds-community-list-page> tag must be loaded
cy.get('ds-community-list-page').should('exist');
// Open first Community (to show Collections)...that way we scan sub-elements as well
cy.get('ds-community-list :nth-child(1) > .btn-group > .btn').click();
// 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
);
});
});

View File

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

View File

@@ -0,0 +1,32 @@
import { TEST_COMMUNITY } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('Community Statistics Page', () => {
const COMMUNITYSTATISTICSPAGE = '/statistics/communities/' + TEST_COMMUNITY;
it('should load if you click on "Statistics" from a Community page', () => {
cy.visit('/communities/' + TEST_COMMUNITY);
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.location('pathname').should('eq', COMMUNITYSTATISTICSPAGE);
});
it('should contain a "Total visits" section', () => {
cy.visit(COMMUNITYSTATISTICSPAGE);
cy.get('.' + TEST_COMMUNITY + '_TotalVisits').should('exist');
});
it('should contain a "Total visits per month" section', () => {
cy.visit(COMMUNITYSTATISTICSPAGE);
cy.get('.' + TEST_COMMUNITY + '_TotalVisitsPerMonth').should('exist');
});
it('should pass accessibility tests', () => {
cy.visit(COMMUNITYSTATISTICSPAGE);
// <ds-community-statistics-page> tag must be loaded
cy.get('ds-community-statistics-page').should('exist');
// Analyze <ds-community-statistics-page> for accessibility issues
testA11y('ds-community-statistics-page');
});
});

View File

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

View File

@@ -0,0 +1,19 @@
import { testA11y } from 'cypress/support/utils';
describe('Header', () => {
it('should pass accessibility tests', () => {
cy.visit('/');
// Header must first be visible
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
],
});
});
});

View File

@@ -0,0 +1,19 @@
import { testA11y } from 'cypress/support/utils';
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.location('pathname').should('eq', '/statistics');
});
it('should pass accessibility tests', () => {
cy.visit('/statistics');
// <ds-site-statistics-page> tag must be loaded
cy.get('ds-site-statistics-page').should('exist');
// Analyze <ds-site-statistics-page> for accessibility issues
testA11y('ds-site-statistics-page');
});
});

View File

@@ -0,0 +1,32 @@
import { testA11y } from 'cypress/support/utils';
describe('Homepage', () => {
beforeEach(() => {
// All tests start with visiting homepage
cy.visit('/');
});
it('should display translated title "DSpace Angular :: Home"', () => {
cy.title().should('eq', 'DSpace Angular :: Home');
});
it('should contain a news section', () => {
cy.get('ds-home-news').should('be.visible');
});
it('should have a working search box', () => {
const queryString = 'test';
cy.get('[data-test="search-box"]').type(queryString);
cy.get('[data-test="search-button"]').click();
cy.url().should('include', '/search');
cy.url().should('include', 'query=' + encodeURI(queryString));
});
it('should pass accessibility tests', () => {
// Wait for homepage tag to appear
cy.get('ds-home-page').should('be.visible');
// Analyze <ds-home-page> for accessibility issues
testA11y('ds-home-page');
});
});

View File

@@ -0,0 +1,31 @@
import { Options } from 'cypress-axe';
import { TEST_ENTITY_PUBLICATION } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('Item Page', () => {
const ITEMPAGE = '/items/' + TEST_ENTITY_PUBLICATION;
const ENTITYPAGE = '/entities/publication/' + 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.location('pathname').should('eq', ENTITYPAGE);
});
it('should pass accessibility tests', () => {
cy.visit(ENTITYPAGE);
// <ds-item-page> tag must be loaded
cy.get('ds-item-page').should('exist');
// 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
);
});
});

View File

@@ -0,0 +1,38 @@
import { TEST_ENTITY_PUBLICATION } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('Item Statistics Page', () => {
const ITEMSTATISTICSPAGE = '/statistics/items/' + TEST_ENTITY_PUBLICATION;
it('should load if you click on "Statistics" from an Item/Entity page', () => {
cy.visit('/entities/publication/' + TEST_ENTITY_PUBLICATION);
cy.get('ds-navbar ds-link-menu-item a[title="Statistics"]').click();
cy.location('pathname').should('eq', ITEMSTATISTICSPAGE);
});
it('should contain element ds-item-statistics-page when navigating to an item statistics page', () => {
cy.visit(ITEMSTATISTICSPAGE);
cy.get('ds-item-statistics-page').should('exist');
cy.get('ds-item-page').should('not.exist');
});
it('should contain a "Total visits" section', () => {
cy.visit(ITEMSTATISTICSPAGE);
cy.get('.' + TEST_ENTITY_PUBLICATION + '_TotalVisits').should('exist');
});
it('should contain a "Total visits per month" section', () => {
cy.visit(ITEMSTATISTICSPAGE);
cy.get('.' + TEST_ENTITY_PUBLICATION + '_TotalVisitsPerMonth').should('exist');
});
it('should pass accessibility tests', () => {
cy.visit(ITEMSTATISTICSPAGE);
// <ds-item-statistics-page> tag must be loaded
cy.get('ds-item-statistics-page').should('exist');
// Analyze <ds-item-statistics-page> for accessibility issues
testA11y('ds-item-statistics-page');
});
});

View File

@@ -0,0 +1,126 @@
import { TEST_ADMIN_PASSWORD, TEST_ADMIN_USER, TEST_ENTITY_PUBLICATION } from 'cypress/support';
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');
}
};
describe('Login Modal', () => {
it('should login when clicking button & stay on same page', () => {
const ENTITYPAGE = '/entities/publication/' + TEST_ENTITY_PUBLICATION;
cy.visit(ENTITYPAGE);
// Login menu should exist
cy.get('ds-log-in').should('exist');
// Login, and the <ds-log-in> tag should no longer exist
page.openLoginMenu();
cy.get('.form-login').should('be.visible');
page.submitLoginAndPasswordByPressingButton(TEST_ADMIN_USER, TEST_ADMIN_PASSWORD);
cy.get('ds-log-in').should('not.exist');
// Verify we are still on the same page
cy.url().should('include', ENTITYPAGE);
// Open user menu, verify user menu & logout button now available
page.openUserMenu();
cy.get('ds-user-menu').should('be.visible');
cy.get('ds-log-out').should('be.visible');
});
it('should login when clicking enter key & stay on same page', () => {
cy.visit('/home');
// Open login menu in header & verify <ds-log-in> tag is visible
page.openLoginMenu();
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');
// Verify we are still on homepage
cy.url().should('include', '/home');
// Open user menu, verify user menu & logout button now available
page.openUserMenu();
cy.get('ds-user-menu').should('be.visible');
cy.get('ds-log-out').should('be.visible');
});
it('should support logout', () => {
// First authenticate & access homepage
cy.login(TEST_ADMIN_USER, TEST_ADMIN_PASSWORD);
cy.visit('/');
// Verify ds-log-in tag doesn't exist, but ds-log-out tag does exist
cy.get('ds-log-in').should('not.exist');
cy.get('ds-log-out').should('exist');
// Click logout button
page.openUserMenu();
page.submitLogoutByPressingButton();
// Verify ds-log-in tag now exists
cy.get('ds-log-in').should('exist');
cy.get('ds-log-out').should('not.exist');
});
it('should allow new user registration', () => {
cy.visit('/');
page.openLoginMenu();
// Registration link should be visible
cy.get('ds-themed-navbar [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.location('pathname').should('eq', '/register');
cy.get('ds-register-email').should('exist');
});
it('should allow forgot password', () => {
cy.visit('/');
page.openLoginMenu();
// Forgot password link should be visible
cy.get('ds-themed-navbar [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.location('pathname').should('eq', '/forgot');
cy.get('ds-forgot-email').should('exist');
});
});

View File

@@ -0,0 +1,149 @@
import { Options } from 'cypress-axe';
import { TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD, TEST_SUBMIT_COLLECTION_NAME } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('My DSpace page', () => {
it('should display recent submissions and pass accessibility tests', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.visit('/mydspace');
cy.get('ds-my-dspace-page').should('exist');
// At least one recent submission 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('.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
);
});
it('should have a working detailed view that passes accessibility tests', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.visit('/mydspace');
cy.get('ds-my-dspace-page').should('exist');
// Click button in sidebar to display detailed view
cy.get('ds-search-sidebar [data-test="detail-view"]').click();
cy.get('ds-object-detail').should('exist');
// 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
);
});
// NOTE: Deleting existing submissions is exercised by submission.spec.ts
it('should let you start a new submission & edit in-progress submissions', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.visit('/mydspace');
// Open the New Submission dropdown
cy.get('button[data-test="submission-dropdown"]').click();
// Click on the "Item" type in that dropdown
cy.get('#entityControlsDropdownMenu button[title="none"]').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(TEST_SUBMIT_COLLECTION_NAME);
// Click on the button matching that known Collection name
cy.get('ds-authorized-collection-selector button[title="' + TEST_SUBMIT_COLLECTION_NAME + '"]').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', 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
cy.location().then(fullUrl => {
// This will be the full path (/workspaceitems/[id]/edit)
const path = fullUrl.pathname;
// Split on the slashes
const subpaths = path.split('/');
// Part 2 will be the [id] of the submission
const id = subpaths[2];
// Click the "Save for Later" button to save this submission
cy.get('ds-submission-form-footer [data-test="save-for-later"]').click();
// "Save for Later" should send us to MyDSpace
cy.url().should('include', '/mydspace');
// Close any open notifications, to make sure they don't get in the way of next steps
cy.get('[data-dismiss="alert"]').click({multiple: true});
// This is the GET command that will actually run the search
cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
// On MyDSpace, find the submission we just created via its ID
cy.get('[data-test="search-box"]').type(id);
cy.get('[data-test="search-button"]').click();
// Wait for search results to come back from the above GET command
cy.wait('@search-results');
// Click the Edit button for this in-progress submission
cy.get('#edit_' + id).click();
// Should send us back to the submission form
cy.url().should('include', '/workspaceitems/' + id + '/edit');
// Discard our new submission by clicking Discard in Submission form & confirming
cy.get('ds-submission-form-footer [data-test="discard"]').click();
cy.get('button#discard_submit').click();
// Discarding should send us back to MyDSpace
cy.url().should('include', '/mydspace');
});
});
it('should let you import from external sources', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
cy.visit('/mydspace');
// Open the New Import dropdown
cy.get('button[data-test="import-dropdown"]').click();
// Click on the "Item" type in that dropdown
cy.get('#importControlsDropdownMenu button[title="none"]').click();
// New URL should include /import-external, as we've moved to the import page
cy.url().should('include', '/import-external');
// The external import searchbox should be visible
cy.get('ds-submission-import-external-searchbar').should('be.visible');
});
});

View File

@@ -0,0 +1,13 @@
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('exist');
});
it('should not contain element ds-pagenotfound when navigating to existing page', () => {
cy.visit('/home');
cy.get('ds-pagenotfound').should('not.exist');
});
});

View File

@@ -0,0 +1,66 @@
import { TEST_SEARCH_TERM } from 'cypress/support';
const page = {
fillOutQueryInNavBar(query) {
// Click the magnifying glass
cy.get('ds-themed-navbar [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);
},
submitQueryByPressingEnter() {
cy.get('ds-themed-navbar [data-test="header-search-box"]').type('{enter}');
},
submitQueryByPressingIcon() {
cy.get('ds-themed-navbar [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;
it('should go to search page with correct query if submitted (from home)', () => {
cy.visit('/');
// This is the GET command that will actually run the search
cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
// Run the search
page.fillOutQueryInNavBar(query);
page.submitQueryByPressingEnter();
// New URL should include query param
cy.url().should('include', 'query=' + query);
// Wait for search results to come back from the above GET command
cy.wait('@search-results');
// At least one search result should be displayed
cy.get('[data-test="list-object"]').should('be.visible');
});
it('should go to search page with correct query if submitted (from search)', () => {
cy.visit('/search');
// This is the GET command that will actually run the search
cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
// Run the search
page.fillOutQueryInNavBar(query);
page.submitQueryByPressingEnter();
// New URL should include query param
cy.url().should('include', 'query=' + query);
// Wait for search results to come back from the above GET command
cy.wait('@search-results');
// At least one search result should be displayed
cy.get('[data-test="list-object"]').should('be.visible');
});
it('should allow user to also submit query by clicking icon', () => {
cy.visit('/');
// This is the GET command that will actually run the search
cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
// Run the search
page.fillOutQueryInNavBar(query);
page.submitQueryByPressingIcon();
// New URL should include query param
cy.url().should('include', 'query=' + query);
// Wait for search results to come back from the above GET command
cy.wait('@search-results');
// At least one search result should be displayed
cy.get('[data-test="list-object"]').should('be.visible');
});
});

View File

@@ -0,0 +1,70 @@
import { Options } from 'cypress-axe';
import { TEST_SEARCH_TERM } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('Search Page', () => {
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');
// Type query in searchbox & click search button
cy.get('[data-test="search-box"]').type(queryString);
cy.get('[data-test="search-button"]').click();
cy.url().should('include', 'query=' + encodeURI(queryString));
});
it('should load results and pass accessibility tests', () => {
cy.visit('/search?query=' + TEST_SEARCH_TERM);
cy.get('[data-test="search-box"]').should('have.value', TEST_SEARCH_TERM);
// <ds-search-page> tag must be loaded
cy.get('ds-search-page').should('exist');
// 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-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
);
});
it('should have a working grid view that passes accessibility tests', () => {
cy.visit('/search?query=' + TEST_SEARCH_TERM);
// Click button in sidebar to display grid view
cy.get('ds-search-sidebar [data-test="grid-view"]').click();
// <ds-search-page> tag must be loaded
cy.get('ds-search-page').should('exist');
// At least one grid object (card) should be displayed
cy.get('[data-test="grid-object"]').should('be.visible');
// Analyze <ds-search-page> for accessibility issues
testA11y('ds-search-page',
{
rules: {
// Search filters fail these two "moderate" impact rules
'heading-order': { enabled: false },
'landmark-unique': { enabled: false }
}
} as Options
);
});
});

View File

@@ -0,0 +1,135 @@
import { Options } from 'cypress-axe';
import { TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD, TEST_SUBMIT_COLLECTION_NAME, TEST_SUBMIT_COLLECTION_UUID } from 'cypress/support';
import { testA11y } from 'cypress/support/utils';
describe('New Submission page', () => {
// NOTE: We already test that new submissions can be started from MyDSpace in my-dspace.spec.ts
it('should create a new submission when using /submit path & pass accessibility', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
// Test that calling /submit with collection & entityType will create a new submission
cy.visit('/submit?collection=' + TEST_SUBMIT_COLLECTION_UUID + '&entityType=none');
// Should redirect to /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 & it's value should be the selected collection
cy.get('#collectionControlsMenuButton span').should('have.text', TEST_SUBMIT_COLLECTION_NAME);
// 4 sections should be visible by default
cy.get('div#section_traditionalpageone').should('be.visible');
cy.get('div#section_traditionalpagetwo').should('be.visible');
cy.get('div#section_upload').should('be.visible');
cy.get('div#section_license').should('be.visible');
// Discard button should work
// Clicking it will display a confirmation, which we will confirm with another click
cy.get('button#discard').click();
cy.get('button#discard_submit').click();
});
it('should block submission & show errors if required fields are missing', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
// Create a new submission
cy.visit('/submit?collection=' + TEST_SUBMIT_COLLECTION_UUID + '&entityType=none');
// Attempt an immediate deposit without filling out any fields
cy.get('button#deposit').click();
// A warning alert should display.
cy.get('ds-notification div.alert-success').should('not.exist');
cy.get('ds-notification div.alert-warning').should('be.visible');
// First section should have an exclamation error in the header
// (as it has required fields)
cy.get('div#traditionalpageone-header i.fa-exclamation-circle').should('be.visible');
// Title field should have class "is-invalid" applied, as it's required
cy.get('input#dc_title').should('have.class', 'is-invalid');
// Date Year field should also have "is-valid" class
cy.get('input#dc_date_issued_year').should('have.class', 'is-invalid');
// FINALLY, cleanup after ourselves. This also exercises the MyDSpace delete button.
// Get our Submission URL, to parse out the ID of this submission
cy.location().then(fullUrl => {
// This will be the full path (/workspaceitems/[id]/edit)
const path = fullUrl.pathname;
// Split on the slashes
const subpaths = path.split('/');
// Part 2 will be the [id] of the submission
const id = subpaths[2];
// Even though form is incomplete, the "Save for Later" button should still work
cy.get('button#saveForLater').click();
// "Save for Later" should send us to MyDSpace
cy.url().should('include', '/mydspace');
// A success alert should be visible
cy.get('ds-notification div.alert-success').should('be.visible');
// Now, dismiss any open alert boxes (may be multiple, as tests run quickly)
cy.get('[data-dismiss="alert"]').click({multiple: true});
// This is the GET command that will actually run the search
cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
// On MyDSpace, find the submission we just saved via its ID
cy.get('[data-test="search-box"]').type(id);
cy.get('[data-test="search-button"]').click();
// Wait for search results to come back from the above GET command
cy.wait('@search-results');
// Delete our created submission & confirm deletion
cy.get('button#delete_' + id).click();
cy.get('button#delete_confirm').click();
});
});
it('should allow for deposit if all required fields completed & file uploaded', () => {
cy.login(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD);
// Create a new submission
cy.visit('/submit?collection=' + TEST_SUBMIT_COLLECTION_UUID + '&entityType=none');
// Fill out all required fields (Title, Date)
cy.get('input#dc_title').type('DSpace logo uploaded via e2e tests');
cy.get('input#dc_date_issued_year').type('2022');
// Confirm the required license by checking checkbox
// (NOTE: requires "force:true" cause Cypress claims this checkbox is covered by its own <span>)
cy.get('input#granted').check( {force: true} );
// Before using Cypress drag & drop, we have to manually trigger the "dragover" event.
// This ensures our UI displays the dropzone that covers the entire submission page.
// (For some reason Cypress drag & drop doesn't trigger this even itself & upload won't work without this trigger)
cy.get('ds-uploader').trigger('dragover');
// This is the POST command that will upload the file
cy.intercept('POST', '/server/api/submission/workspaceitems/*').as('upload');
// 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', {
action: 'drag-drop'
});
// Wait for upload to complete before proceeding
cy.wait('@upload');
// Close the upload success notice
cy.get('[data-dismiss="alert"]').click({multiple: true});
// Wait for deposit button to not be disabled & click it.
cy.get('button#deposit').should('not.be.disabled').click();
// No warnings should exist. Instead, just successful deposit alert is displayed
cy.get('ds-notification div.alert-warning').should('not.exist');
cy.get('ds-notification div.alert-success').should('be.visible');
});
});

35
cypress/plugins/index.ts Normal file
View File

@@ -0,0 +1,35 @@
const fs = require('fs');
// 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) => {
on('task', {
// Define "log" and "table" tasks, used for logging accessibility errors during CI
// Borrowed from https://github.com/component-driven/cypress-axe#in-cypress-plugins-file
log(message: string) {
console.log(message);
return null;
},
table(message: string) {
console.table(message);
return null;
},
// 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.
readUIConfig() {
// Check if we have a config.json in the src/assets. If so, use that.
// This is where it's written when running "ng e2e" or "yarn serve"
if (fs.existsSync('./src/assets/config.json')) {
return fs.readFileSync('./src/assets/config.json', 'utf8');
// Otherwise, check the dist/browser/assets
// This is where it's written when running "serve:ssr", which is what CI uses to start the frontend
} else if (fs.existsSync('./dist/browser/assets/config.json')) {
return fs.readFileSync('./dist/browser/assets/config.json', 'utf8');
}
return null;
}
});
};

View File

@@ -0,0 +1,83 @@
// ***********************************************
// This File is for Custom Cypress commands.
// See docs at https://docs.cypress.io/api/cypress-api/custom-commands
// ***********************************************
import { AuthTokenInfo, TOKENITEM } from 'src/app/core/auth/models/auth-token-info.model';
import { FALLBACK_TEST_REST_BASE_URL } from '.';
// Declare Cypress namespace to help with Intellisense & code completion in IDEs
// ALL custom commands MUST be listed here for code completion to work
// tslint:disable-next-line:no-namespace
declare global {
namespace Cypress {
interface Chainable<Subject = any> {
/**
* Login to backend before accessing the next page. Ensures that the next
* call to "cy.visit()" will be authenticated as this user.
* @param email email to login as
* @param password password to login as
*/
login(email: string, password: string): typeof login;
}
}
}
/**
* Login user via REST API directly, and pass authentication token to UI via
* the UI's dsAuthInfo cookie.
* @param email email to login as
* @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);
// 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: " + config.rest.baseUrl);
baseRestUrl = config.rest.baseUrl;
}
// To login via REST, first we have to do a GET to obtain a valid CSRF token
cy.request( baseRestUrl + '/api/authn/status' )
.then((response) => {
// We should receive a CSRF token returned in a response header
expect(response.headers).to.have.property('dspace-xsrf-token');
const csrfToken = response.headers['dspace-xsrf-token'];
// Now, send login POST request including that CSRF token
cy.request({
method: 'POST',
url: baseRestUrl + '/api/authn/login',
headers: { 'X-XSRF-TOKEN' : 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));
});
});
});
}
// Add as a Cypress command (i.e. assign to 'cy.login')
Cypress.Commands.add('login', login);

63
cypress/support/index.ts Normal file
View File

@@ -0,0 +1,63 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import all custom Commands (from commands.ts) for all tests
import './commands';
// Import Cypress Axe tools for all tests
// https://github.com/component-driven/cypress-axe
import 'cypress-axe';
// 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}');
});
// 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)
// 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 'getBaseRESTUrl()' in commands.ts
export const FALLBACK_TEST_REST_BASE_URL = 'http://localhost:8080/server';
// 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';

44
cypress/support/utils.ts Normal file
View File

@@ -0,0 +1,44 @@
import { Result } from 'axe-core';
import { Options } from 'cypress-axe';
// Log violations to terminal/commandline in a table format.
// Uses 'log' and 'table' tasks defined in ../plugins/index.ts
// Borrowed from https://github.com/component-driven/cypress-axe#in-your-spec-file
function terminalLog(violations: Result[]) {
cy.task(
'log',
`${violations.length} accessibility violation${violations.length === 1 ? '' : 's'} ${violations.length === 1 ? 'was' : 'were'} detected`
);
// pluck specific keys to keep the table readable
const violationData = violations.map(
({ id, impact, description, helpUrl, nodes }) => ({
id,
impact,
description,
helpUrl,
nodes: nodes.length,
html: nodes.map(node => node.html)
})
);
// Print violations as an array, since 'node.html' above often breaks table alignment
cy.task('log', violationData);
// Optionally, uncomment to print as a table
// cy.task('table', violationData);
}
// Custom "testA11y()" method which checks accessibility using cypress-axe
// while also ensuring any violations are logged to the terminal (see terminalLog above)
// This method MUST be called after cy.visit(), as cy.injectAxe() must be called after page load
export const testA11y = (context?: any, options?: Options) => {
cy.injectAxe();
cy.configureAxe({
rules: [
// Disable color contrast checks as they are inaccurate / result in a lot of false positives
// See also open issues in axe-core: https://github.com/dequelabs/axe-core/labels/color%20contrast
{ id: 'color-contrast', enabled: false },
]
});
cy.checkA11y(context, options, terminalLog);
};

13
cypress/tsconfig.json Normal file
View File

@@ -0,0 +1,13 @@
{
"extends": "../tsconfig.json",
"include": [
"**/*.ts"
],
"compilerOptions": {
"types": [
"cypress",
"cypress-axe",
"node"
]
}
}

View File

@@ -1,83 +1,95 @@
# Docker Compose files
***
:warning: **NOT PRODUCTION READY** The below Docker Compose resources are not guaranteed "production ready" at this time. They have been built for development/testing only. Therefore, DSpace Docker images may not be fully secured or up-to-date. While you are welcome to base your own images on these DSpace images/resources, these should not be used "as is" in any production scenario.
***
## docker directory
- docker-compose.yml
- Starts DSpace Angular with Docker Compose from the current branch. This file assumes that a DSpace 7 REST instance will also be started in Docker.
- docker-compose-rest.yml
- Runs a published instance of the DSpace 7 REST API - persists data in Docker volumes
- docker-compose-ci.yml
- Runs a published instance of the DSpace 7 REST API for CI testing. The database is re-populated from a SQL dump on each startup.
- cli.yml
- Docker compose file that provides a DSpace CLI container to work with a running DSpace REST container.
- cli.assetstore.yml
- Docker compose file that will download and install data into a DSpace REST assetstore. This script points to a default dataset that will be utilized for CI testing.
- environment.dev.ts
- Environment file for running DSpace Angular in Docker
- local.cfg
- Environment file for running the DSpace 7 REST API in Docker.
## To refresh / pull DSpace images from Dockerhub
```
docker-compose -f docker/docker-compose.yml pull
```
## To build DSpace images using code in your branch
```
docker-compose -f docker/docker-compose.yml build
```
## To start DSpace (REST and Angular) from your branch
```
docker-compose -p d7 -f docker/docker-compose.yml -f docker/docker-compose-rest.yml up -d
```
## Run DSpace REST and DSpace Angular from local branches.
_The system will be started in 2 steps. Each step shares the same docker network._
From DSpace/DSpace (build as needed)
```
docker-compose -p d7 up -d
```
From DSpace/DSpace-angular
```
docker-compose -p d7 -f docker/docker-compose.yml up -d
```
## Ingest test data from AIPDIR
Create an administrator
```
docker-compose -p d7 -f docker/cli.yml run --rm dspace-cli create-administrator -e test@test.edu -f admin -l user -p admin -c en
```
Load content from AIP files
```
docker-compose -p d7 -f docker/cli.yml -f ./docker/cli.ingest.yml run --rm dspace-cli
```
## Alternative Ingest - Use Entities dataset
_Delete your docker volumes or use a unique project (-p) name_
Start DSpace with Database Content from a database dump
```
docker-compose -p d7 -f docker/docker-compose.yml -f docker/docker-compose-rest.yml -f docker/db.entities.yml up -d
```
Load assetstore content and trigger a re-index of the repository
```
docker-compose -p d7 -f docker/cli.yml -f docker/cli.assetstore.yml run --rm dspace-cli
```
## End to end testing of the rest api (runs in travis).
_In this instance, only the REST api runs in Docker using the Entities dataset. Travis will perform CI testing of Angular using Node to drive the tests._
```
docker-compose -p d7ci -f docker/docker-compose-travis.yml up -d
```
# Docker Compose files
***
:warning: **THESE IMAGES ARE NOT PRODUCTION READY** The below Docker Compose images/resources were built for development/testing only. Therefore, they may not be fully secured or up-to-date, and should not be used in production.
If you wish to run DSpace on Docker in production, we recommend building your own Docker images. You are welcome to borrow ideas/concepts from the below images in doing so. But, the below images should not be used "as is" in any production scenario.
***
## 'Dockerfile' in root directory
This Dockerfile is used to build a *development* DSpace 7 Angular UI image, published as 'dspace/dspace-angular'
```
docker build -t dspace/dspace-angular:dspace-7_x .
```
This image is built *automatically* after each commit is made to the `main` branch.
Admins to our DockerHub repo can manually publish with the following command.
```
docker push dspace/dspace-angular:dspace-7_x
```
## docker directory
- docker-compose.yml
- Starts DSpace Angular with Docker Compose from the current branch. This file assumes that a DSpace 7 REST instance will also be started in Docker.
- docker-compose-rest.yml
- Runs a published instance of the DSpace 7 REST API - persists data in Docker volumes
- docker-compose-ci.yml
- Runs a published instance of the DSpace 7 REST API for CI testing. The database is re-populated from a SQL dump on each startup.
- cli.yml
- Docker compose file that provides a DSpace CLI container to work with a running DSpace REST container.
- cli.assetstore.yml
- Docker compose file that will download and install data into a DSpace REST assetstore. This script points to a default dataset that will be utilized for CI testing.
## To refresh / pull DSpace images from Dockerhub
```
docker-compose -f docker/docker-compose.yml pull
```
## To build DSpace images using code in your branch
```
docker-compose -f docker/docker-compose.yml build
```
## To start DSpace (REST and Angular) from your branch
```
docker-compose -p d7 -f docker/docker-compose.yml -f docker/docker-compose-rest.yml up -d
```
## Run DSpace REST and DSpace Angular from local branches.
_The system will be started in 2 steps. Each step shares the same docker network._
From DSpace/DSpace (build as needed)
```
docker-compose -p d7 up -d
```
From DSpace/DSpace-angular
```
docker-compose -p d7 -f docker/docker-compose.yml up -d
```
## Ingest test data from AIPDIR
Create an administrator
```
docker-compose -p d7 -f docker/cli.yml run --rm dspace-cli create-administrator -e test@test.edu -f admin -l user -p admin -c en
```
Load content from AIP files
```
docker-compose -p d7 -f docker/cli.yml -f ./docker/cli.ingest.yml run --rm dspace-cli
```
## Alternative Ingest - Use Entities dataset
_Delete your docker volumes or use a unique project (-p) name_
Start DSpace with Database Content from a database dump
```
docker-compose -p d7 -f docker/docker-compose.yml -f docker/docker-compose-rest.yml -f docker/db.entities.yml up -d
```
Load assetstore content and trigger a re-index of the repository
```
docker-compose -p d7 -f docker/cli.yml -f docker/cli.assetstore.yml run --rm dspace-cli
```
## End to end testing of the rest api (runs in travis).
_In this instance, only the REST api runs in Docker using the Entities dataset. Travis will perform CI testing of Angular using Node to drive the tests._
```
docker-compose -p d7ci -f docker/docker-compose-travis.yml up -d
```

View File

@@ -35,6 +35,6 @@ services:
tar xvfz /tmp/assetstore.tar.gz
fi
/dspace/bin/dspace index-discovery
/dspace/bin/dspace index-discovery -b
/dspace/bin/dspace oai import
/dspace/bin/dspace oai clean-cache

View File

@@ -18,10 +18,19 @@ services:
dspace-cli:
image: "${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-dspace-7_x}"
container_name: dspace-cli
#environment:
environment:
# Below syntax may look odd, but it is how to override dspace.cfg settings via env variables.
# See https://github.com/DSpace/DSpace/blob/main/dspace/config/config-definition.xml
# __P__ => "." (e.g. dspace__P__dir => dspace.dir)
# __D__ => "-" (e.g. google__D__metadata => google-metadata)
# dspace.dir
dspace__P__dir: /dspace
# db.url: Ensure we are using the 'dspacedb' image for our database
db__P__url: 'jdbc:postgresql://dspacedb:5432/dspace'
# solr.server: Ensure we are using the 'dspacesolr' image for Solr
solr__P__server: http://dspacesolr:8983/solr
volumes:
- "assetstore:/dspace/assetstore"
- "./local.cfg:/dspace/config/local.cfg"
entrypoint: /dspace/bin/dspace
command: help
networks:

View File

@@ -20,12 +20,12 @@ services:
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
- LOADSQL=https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/dspace7-entities-2021-04-14.sql
- LOADSQL=https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/dspace7-entities-data.sql
dspace:
### OVERRIDE default 'entrypoint' in 'docker-compose-rest.yml' ####
# 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
# 2. Then, run database migration to init database tables (including any out-of-order ignored migrations, if any)
# 3. (Custom for Entities) enable Entity-specific collection submission mappings in item-submission.xml
# This 'sed' command inserts the sample configurations specific to the Entities data set, see:
# https://github.com/DSpace/DSpace/blob/main/dspace/config/item-submission.xml#L36-L49
@@ -35,7 +35,7 @@ services:
- '-c'
- |
while (!</dev/tcp/dspacedb/5432) > /dev/null 2>&1; do sleep 1; done;
/dspace/bin/dspace database migrate
/dspace/bin/dspace database migrate ignored
sed -i '/name-map collection-handle="default".*/a \\n <name-map collection-handle="123456789/3" submission-name="Publication"/> \
<name-map collection-handle="123456789/4" submission-name="Publication"/> \
<name-map collection-handle="123456789/281" submission-name="Publication"/> \

View File

@@ -17,6 +17,19 @@ services:
# DSpace (backend) webapp container
dspace:
container_name: dspace
environment:
# Below syntax may look odd, but it is how to override dspace.cfg settings via env variables.
# See https://github.com/DSpace/DSpace/blob/main/dspace/config/config-definition.xml
# __P__ => "." (e.g. dspace__P__dir => dspace.dir)
# __D__ => "-" (e.g. google__D__metadata => google-metadata)
# dspace.dir, dspace.server.url and dspace.ui.url
dspace__P__dir: /dspace
dspace__P__server__P__url: http://localhost:8080/server
dspace__P__ui__P__url: http://localhost:4000
# db.url: Ensure we are using the 'dspacedb' image for our database
db__P__url: 'jdbc:postgresql://dspacedb:5432/dspace'
# solr.server: Ensure we are using the 'dspacesolr' image for Solr
solr__P__server: http://dspacesolr:8983/solr
depends_on:
- dspacedb
image: dspace/dspace:dspace-7_x-test
@@ -29,19 +42,18 @@ services:
tty: true
volumes:
- assetstore:/dspace/assetstore
- "./local.cfg:/dspace/config/local.cfg"
# 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
# 2. Then, run database migration to init database tables (including any out-of-order ignored migrations, if any)
# 3. Finally, start Tomcat
entrypoint:
- /bin/bash
- '-c'
- |
while (!</dev/tcp/dspacedb/5432) > /dev/null 2>&1; do sleep 1; done;
/dspace/bin/dspace database migrate
/dspace/bin/dspace database migrate ignored
catalina.sh run
# DSpace database container
# NOTE: This is customized to use our loadsql image, so that we are using a database with existing test data
@@ -51,7 +63,7 @@ services:
# 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-2021-04-14.sql
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
networks:
@@ -64,7 +76,7 @@ services:
dspacesolr:
container_name: dspacesolr
# Uses official Solr image at https://hub.docker.com/_/solr/
image: solr:8.8
image: solr:8.11-slim
# Needs main 'dspace' container to start first to guarantee access to solr_configs
depends_on:
- dspace

View File

@@ -13,10 +13,32 @@
version: '3.7'
networks:
dspacenet:
ipam:
config:
# Define a custom subnet for our DSpace network, so that we can easily trust requests from host to container.
# If you customize this value, be sure to customize the 'proxies.trusted.ipranges' env variable below.
- subnet: 172.23.0.0/16
services:
# DSpace (backend) webapp container
dspace:
container_name: dspace
environment:
# Below syntax may look odd, but it is how to override dspace.cfg settings via env variables.
# See https://github.com/DSpace/DSpace/blob/main/dspace/config/config-definition.xml
# __P__ => "." (e.g. dspace__P__dir => dspace.dir)
# __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
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'
# solr.server: Ensure we are using the 'dspacesolr' image for Solr
solr__P__server: http://dspacesolr:8983/solr
# 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: dspace/dspace:dspace-7_x-test
depends_on:
- dspacedb
@@ -29,7 +51,6 @@ services:
tty: true
volumes:
- assetstore:/dspace/assetstore
- "./local.cfg:/dspace/config/local.cfg"
# 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
@@ -62,7 +83,7 @@ services:
dspacesolr:
container_name: dspacesolr
# Uses official Solr image at https://hub.docker.com/_/solr/
image: solr:8.8
image: solr:8.11-slim
# Needs main 'dspace' container to start first to guarantee access to solr_configs
depends_on:
- dspace
@@ -81,15 +102,22 @@ services:
# Keep Solr data directory between reboots
- solr_data:/var/solr/data
# Initialize all DSpace Solr cores using the mounted local configsets (see above), then start Solr
# * First, run precreate-core to create the core (if it doesn't yet exist). If exists already, this is a no-op
# * Second, copy updated configs from mounted configsets to this core. If it already existed, this updates core
# to the latest configs. If it's a newly created core, this is a no-op.
entrypoint:
- /bin/bash
- '-c'
- |
init-var-solr
precreate-core authority /opt/solr/server/solr/configsets/dspace/authority
cp -r -u /opt/solr/server/solr/configsets/dspace/authority/* authority
precreate-core oai /opt/solr/server/solr/configsets/dspace/oai
cp -r -u /opt/solr/server/solr/configsets/dspace/oai/* oai
precreate-core search /opt/solr/server/solr/configsets/dspace/search
cp -r -u /opt/solr/server/solr/configsets/dspace/search/* search
precreate-core statistics /opt/solr/server/solr/configsets/dspace/statistics
cp -r -u /opt/solr/server/solr/configsets/dspace/statistics/* statistics
exec solr -f
volumes:
assetstore:

View File

@@ -16,11 +16,15 @@ services:
dspace-angular:
container_name: dspace-angular
environment:
DSPACE_HOST: dspace-angular
DSPACE_NAMESPACE: /
DSPACE_PORT: '4000'
DSPACE_SSL: "false"
image: dspace/dspace-angular:latest
DSPACE_UI_SSL: 'false'
DSPACE_UI_HOST: dspace-angular
DSPACE_UI_PORT: '4000'
DSPACE_UI_NAMESPACE: /
DSPACE_REST_SSL: 'false'
DSPACE_REST_HOST: localhost
DSPACE_REST_PORT: 8080
DSPACE_REST_NAMESPACE: /server
image: dspace/dspace-angular:dspace-7_x
build:
context: ..
dockerfile: Dockerfile
@@ -33,5 +37,3 @@ services:
target: 9876
stdin_open: true
tty: true
volumes:
- ./environment.dev.ts:/app/src/environments/environment.dev.ts

View File

@@ -1,18 +0,0 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
// This file is based on environment.template.ts provided by Angular UI
export const environment = {
// Default to using the local REST API (running in Docker)
rest: {
ssl: false,
host: 'localhost',
port: 8080,
// NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: '/server'
}
};

View File

@@ -1,6 +0,0 @@
dspace.dir=/dspace
db.url=jdbc:postgresql://dspacedb:5432/dspace
dspace.server.url=http://localhost:8080/server
dspace.ui.url=http://localhost:4000
dspace.name=DSpace Started with Docker Compose
solr.server=http://dspacesolr:8983/solr

View File

@@ -1,26 +1,30 @@
# Configuration
Default configuration file is located in `src/environments/` folder. All configuration options should be listed in the default configuration file `src/environments/environment.common.ts`. Please do not change this file directly! To change the default configuration values, create local files that override the parameters you need to change. You can use `environment.template.ts` as a starting point.
Default configuration file is located at `config/config.yml`. All configuration options should be listed in the default typescript file `src/config/default-app-config.ts`. Please do not change this file directly! To override the default configuration values, create local files that override the parameters you need to change. You can use `config.example.yml` as a starting point.
- Create a new `environment.dev.ts` file in `src/environments/` for `development` environment;
- Create a new `environment.prod.ts` file in `src/environments/` for `production` environment;
- Create a new `config.(dev or development).yml` file in `config/` for `development` environment;
- Create a new `config.(prod or production).yml` file in `config/` for `production` environment;
Some few configuration options can be overridden by setting environment variables. These and the variable names are listed below.
Alternatively, create a desired app config file at an external location and set the path as environment variable `DSPACE_APP_CONFIG_PATH`.
e.g.
```
DSPACE_APP_CONFIG_PATH=/usr/local/dspace/config/config.yml
```
Configuration options can be overridden by setting environment variables.
## Nodejs server
When you start dspace-angular on node, it spins up an http server on which it listens for incoming connections. You can define the ip address and port the server should bind itsself to, and if ssl should be enabled not. By default it listens on `localhost:4000`. If you want it to listen on all your network connections, configure it to bind itself to `0.0.0.0`.
To change this configuration, change the options `ui.host`, `ui.port` and `ui.ssl` in the appropriate configuration file (see above):
```
export const environment = {
// Angular UI settings.
ui: {
ssl: false,
host: 'localhost',
port: 4000,
nameSpace: '/'
}
};
```yaml
ui:
ssl: false
host: localhost
port: 4000
nameSpace: /
```
Alternately you can set the following environment variables. If any of these are set, it will override all configuration files:
@@ -30,21 +34,24 @@ Alternately you can set the following environment variables. If any of these are
DSPACE_PORT=4000
DSPACE_NAMESPACE=/
```
or
```
DSPACE_UI_SSL=true
DSPACE_UI_HOST=localhost
DSPACE_UI_PORT=4000
DSPACE_UI_NAMESPACE=/
```
## DSpace's REST endpoint
dspace-angular connects to your DSpace installation by using its REST endpoint. To do so, you have to define the ip address, port and if ssl should be enabled. You can do this in a configuration file (see above) by adding the following options:
```
export const environment = {
// The REST API server settings.
rest: {
ssl: true,
host: 'api7.dspace.org',
port: 443,
// NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: '/server'
}
};
```yaml
rest:
ssl: true
host: api7.dspace.org
port: 443
nameSpace: /server
}
```
Alternately you can set the following environment variables. If any of these are set, it will override all configuration files:
@@ -55,6 +62,21 @@ Alternately you can set the following environment variables. If any of these are
DSPACE_REST_NAMESPACE=/server
```
## Environment variable naming convention
Settings can be set using the following convention for naming the environment variables:
1. replace all `.` with `_`
2. convert all characters to upper case
3. prefix with `DSPACE_`
e.g.
```
cache.msToLive.default => DSPACE_CACHE_MSTOLIVE_DEFAULT
auth.ui.timeUntilIdle => DSPACE_AUTH_UI_TIMEUNTILIDLE
```
## Supporting analytics services other than Google Analytics
This project makes use of [Angulartics](https://angulartics.github.io/angulartics2/) to track usage events and send them to Google Analytics.

View File

@@ -1,14 +0,0 @@
const config = require('./protractor.conf').config;
config.capabilities = {
browserName: 'chrome',
chromeOptions: {
args: ['--headless', '--no-sandbox', '--disable-gpu']
}
};
// don't use protractor's webdriver, as it may be incompatible with the installed chrome version
config.directConnect = false;
config.seleniumAddress = 'http://localhost:4444/wd/hub';
exports.config = config;

View File

@@ -1,91 +0,0 @@
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/docs/referenceConf.js
/*global jasmine */
var SpecReporter = require('jasmine-spec-reporter').SpecReporter;
exports.config = {
allScriptsTimeout: 600000,
// -----------------------------------------------------------------
// Uncomment to run tests using a remote Selenium server
//seleniumAddress: 'http://selenium.address:4444/wd/hub',
// Change to 'false' to run tests using a remote Selenium server
directConnect: true,
// Change if the website to test is not on the localhost
baseUrl: 'http://localhost:4000/',
// -----------------------------------------------------------------
specs: [
'./src/**/*.e2e-spec.ts'
],
// -----------------------------------------------------------------
// Browser and Capabilities: PhantomJS
// -----------------------------------------------------------------
// capabilities: {
// 'browserName': 'phantomjs',
// 'version': '',
// 'platform': 'ANY'
// },
// -----------------------------------------------------------------
// Browser and Capabilities: Chrome
// -----------------------------------------------------------------
capabilities: {
'browserName': 'chrome',
'version': '',
'platform': 'ANY',
'chromeOptions': {
'args': [ '--headless', '--disable-gpu' ]
}
},
// -----------------------------------------------------------------
// Browser and Capabilities: Firefox
// -----------------------------------------------------------------
// capabilities: {
// 'browserName': 'firefox',
// 'version': '',
// 'platform': 'ANY'
// },
// -----------------------------------------------------------------
// Browser and Capabilities: MultiCapabilities
// -----------------------------------------------------------------
//multiCapabilities: [
// {
// 'browserName': 'phantomjs',
// 'version': '',
// 'platform': 'ANY'
// },
// {
// 'browserName': 'chrome',
// 'version': '',
// 'platform': 'ANY'
// }
// {
// 'browserName': 'firefox',
// 'version': '',
// 'platform': 'ANY'
// }
//],
plugins: [{
path: '../node_modules/protractor-istanbul-plugin'
}],
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 600000,
print: function () {}
},
useAllAngular2AppRoots: true,
beforeLaunch: function () {
require('ts-node').register({
project: './e2e/tsconfig.json'
});
},
onPrepare: function () {
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: 'pretty'
}
}));
}
};

View File

@@ -1,22 +0,0 @@
import { ProtractorPage } from './app.po';
describe('protractor App', () => {
let page: ProtractorPage;
beforeEach(() => {
page = new ProtractorPage();
});
it('should display translated title "DSpace Angular :: Home"', () => {
page.navigateTo();
page.waitUntilNotLoading();
expect<any>(page.getPageTitleText()).toEqual('DSpace Angular :: Home');
});
it('should contain a news section', () => {
page.navigateTo();
page.waitUntilNotLoading();
const text = page.getHomePageNewsText();
expect<any>(text).toBeDefined();
});
});

View File

@@ -1,23 +0,0 @@
import { browser, element, by, protractor, promise } from 'protractor';
export class ProtractorPage {
navigateTo() {
return browser.get('/')
.then(() => browser.waitForAngular());
}
getPageTitleText() {
return browser.getTitle();
}
getHomePageNewsText() {
return element(by.css('ds-home-news')).getText();
}
waitUntilNotLoading(): promise.Promise<unknown> {
const loading = element(by.css('.loader'));
const EC = protractor.ExpectedConditions;
const notLoading = EC.not(EC.presenceOf(loading));
return browser.wait(notLoading, 10000);
}
}

View File

@@ -1,36 +0,0 @@
import { ProtractorPage } from './item-statistics.po';
import { browser } from 'protractor';
import { UIURLCombiner } from '../../../src/app/core/url-combiner/ui-url-combiner';
describe('protractor Item statics', () => {
let page: ProtractorPage;
beforeEach(() => {
page = new ProtractorPage();
});
it('should contain element ds-item-page when navigating when navigating to an item page', () => {
page.navigateToItemPage();
expect<any>(page.elementTagExists('ds-item-page')).toEqual(true);
expect<any>(page.elementTagExists('ds-item-statistics-page')).toEqual(false);
});
it('should redirect to the entity page when navigating to an item page', () => {
page.navigateToItemPage();
expect(browser.getCurrentUrl()).toEqual(new UIURLCombiner(page.ENTITYPAGE).toString());
expect(browser.getCurrentUrl()).not.toEqual(new UIURLCombiner(page.ITEMSTATISTICSPAGE).toString());
expect(browser.getCurrentUrl()).not.toEqual(new UIURLCombiner(page.ITEMPAGE).toString());
});
it('should contain element ds-item-statistics-page when navigating when navigating to an item statistics page', () => {
page.navigateToItemStatisticsPage();
expect<any>(page.elementTagExists('ds-item-statistics-page')).toEqual(true);
expect<any>(page.elementTagExists('ds-item-page')).toEqual(false);
});
it('should contain the item statistics page url when navigating to an item statistics page', () => {
page.navigateToItemStatisticsPage();
expect(browser.getCurrentUrl()).toEqual(new UIURLCombiner(page.ITEMSTATISTICSPAGE).toString());
expect(browser.getCurrentUrl()).not.toEqual(new UIURLCombiner(page.ENTITYPAGE).toString());
expect(browser.getCurrentUrl()).not.toEqual(new UIURLCombiner(page.ITEMPAGE).toString());
});
});

View File

@@ -1,18 +0,0 @@
import { browser, element, by } from 'protractor';
export class ProtractorPage {
ITEMPAGE = '/items/e98b0f27-5c19-49a0-960d-eb6ad5287067';
ENTITYPAGE = '/entities/publication/e98b0f27-5c19-49a0-960d-eb6ad5287067';
ITEMSTATISTICSPAGE = '/statistics/items/e98b0f27-5c19-49a0-960d-eb6ad5287067';
navigateToItemPage() {
return browser.get(this.ITEMPAGE);
}
navigateToItemStatisticsPage() {
return browser.get(this.ITEMSTATISTICSPAGE);
}
elementTagExists(tag: string) {
return element(by.tagName(tag)).isPresent();
}
}

View File

@@ -1,19 +0,0 @@
import { ProtractorPage } from './pagenotfound.po';
describe('protractor PageNotFound', () => {
let page: ProtractorPage;
beforeEach(() => {
page = new ProtractorPage();
});
it('should contain element ds-pagenotfound when navigating to page that doesnt exist', () => {
page.navigateToNonExistingPage();
expect<any>(page.elementTagExists('ds-pagenotfound')).toEqual(true);
});
it('should not contain element ds-pagenotfound when navigating to existing page', () => {
page.navigateToExistingPage();
expect<any>(page.elementTagExists('ds-pagenotfound')).toEqual(false);
});
});

View File

@@ -1,18 +0,0 @@
import { browser, element, by } from 'protractor';
export class ProtractorPage {
HOMEPAGE = '/home';
NONEXISTINGPAGE = '/e9019a69-d4f1-4773-b6a3-bd362caa46f2';
navigateToNonExistingPage() {
return browser.get(this.NONEXISTINGPAGE);
}
navigateToExistingPage() {
return browser.get(this.HOMEPAGE);
}
elementTagExists(tag: string) {
return element(by.tagName(tag)).isPresent();
}
}

View File

@@ -1,46 +0,0 @@
import { ProtractorPage } from './search-navbar.po';
import { browser } from 'protractor';
describe('protractor SearchNavbar', () => {
let page: ProtractorPage;
let queryString: string;
beforeEach(() => {
page = new ProtractorPage();
queryString = 'the test query';
});
it('should go to search page with correct query if submitted (from home)', () => {
page.navigateToHome();
return checkIfSearchWorks();
});
it('should go to search page with correct query if submitted (from search)', () => {
page.navigateToSearch();
return checkIfSearchWorks();
});
it('check if can submit search box with pressing button', () => {
page.navigateToHome();
page.expandAndFocusSearchBox();
page.setCurrentQuery(queryString);
page.submitNavbarSearchForm();
browser.wait(() => {
return browser.getCurrentUrl().then((url: string) => {
return url.indexOf('query=' + encodeURI(queryString)) !== -1;
});
});
});
function checkIfSearchWorks(): boolean {
page.setCurrentQuery(queryString);
page.submitByPressingEnter();
browser.wait(() => {
return browser.getCurrentUrl().then((url: string) => {
return url.indexOf('query=' + encodeURI(queryString)) !== -1;
});
});
return false;
}
});

View File

@@ -1,35 +0,0 @@
import { browser, by, element, protractor } from 'protractor';
import { promise } from 'selenium-webdriver';
export class ProtractorPage {
HOME = '/home';
SEARCH = '/search';
navigateToHome() {
return browser.get(this.HOME);
}
navigateToSearch() {
return browser.get(this.SEARCH);
}
getCurrentQuery(): promise.Promise<string> {
return element(by.css('.navbar-container #search-navbar-container form input')).getAttribute('value');
}
expandAndFocusSearchBox() {
element(by.css('.navbar-container #search-navbar-container form a')).click();
}
setCurrentQuery(query: string) {
element(by.css('.navbar-container #search-navbar-container form input[name="query"]')).sendKeys(query);
}
submitNavbarSearchForm() {
element(by.css('.navbar-container #search-navbar-container form .submit-icon')).click();
}
submitByPressingEnter() {
element(by.css('.navbar-container #search-navbar-container form input[name="query"]')).sendKeys(protractor.Key.ENTER);
}
}

View File

@@ -1,60 +0,0 @@
import { ProtractorPage } from './search-page.po';
import { browser } from 'protractor';
describe('protractor SearchPage', () => {
let page: ProtractorPage;
beforeEach(() => {
page = new ProtractorPage();
});
it('should contain query value when navigating to page with query parameter', () => {
const queryString = 'Interesting query string';
page.navigateToSearchWithQueryParameter(queryString)
.then(() => page.getCurrentQuery())
.then((query: string) => {
expect<string>(query).toEqual(queryString);
});
});
it('should have right scope selected when navigating to page with scope parameter', () => {
page.navigateToSearch()
.then(() => page.getRandomScopeOption())
.then((scopeString: string) => {
page.navigateToSearchWithScopeParameter(scopeString);
page.waitUntilNotLoading();
page.getCurrentScope()
.then((s: string) => {
expect<string>(s).toEqual(scopeString);
});
});
});
it('should redirect to the correct url when scope was set and submit button was triggered', () => {
page.navigateToSearch()
.then(() => page.getRandomScopeOption())
.then((scopeString: string) => {
page.setCurrentScope(scopeString)
.then(() => page.submitSearchForm())
.then(() => page.waitUntilNotLoading())
.then(() => () => {
browser.wait(() => {
return browser.getCurrentUrl().then((url: string) => {
return url.indexOf('scope=' + encodeURI(scopeString)) !== -1;
});
});
});
});
});
it('should redirect to the correct url when query was set and submit button was triggered', () => {
const queryString = 'Another interesting query string';
page.setCurrentQuery(queryString);
page.submitSearchForm();
browser.wait(() => {
return browser.getCurrentUrl().then((url: string) => {
return url.indexOf('query=' + encodeURI(queryString)) !== -1;
});
});
});
});

View File

@@ -1,55 +0,0 @@
import { browser, by, element, protractor } from 'protractor';
import { promise } from 'selenium-webdriver';
export class ProtractorPage {
SEARCH = '/search';
navigateToSearch() {
return browser.get(this.SEARCH);
}
navigateToSearchWithQueryParameter(query: string) {
return browser.get(this.SEARCH + '?query=' + query);
}
navigateToSearchWithScopeParameter(scope: string) {
return browser.get(this.SEARCH + '?scope=' + scope);
}
getCurrentScope(): promise.Promise<string> {
const scopeSelect = element(by.css('#search-form select'));
browser.wait(protractor.ExpectedConditions.presenceOf(scopeSelect), 10000);
return scopeSelect.getAttribute('value');
}
getCurrentQuery(): promise.Promise<string> {
return element(by.css('#search-form input')).getAttribute('value');
}
setCurrentScope(scope: string) {
return element(by.css('#search-form option[value="' + scope + '"]')).click();
}
setCurrentQuery(query: string) {
element(by.css('#search-form input[name="query"]')).sendKeys(query);
}
submitSearchForm() {
return element(by.css('#search-form button.search-button')).click();
}
getRandomScopeOption(): promise.Promise<string> {
const options = element(by.css('select[name="scope"]')).all(by.tagName('option'));
return options.count().then((c: number) => {
const index: number = Math.floor(Math.random() * (c - 1));
return options.get(index + 1).getAttribute('value');
});
}
waitUntilNotLoading(): promise.Promise<unknown> {
const loading = element(by.css('.loader'));
const EC = protractor.ExpectedConditions;
const notLoading = EC.not(EC.presenceOf(loading));
return browser.wait(notLoading, 10000);
}
}

View File

@@ -1,16 +0,0 @@
{
"compileOnSave": false,
"compilerOptions": {
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"moduleResolution": "node",
"outDir": "../dist/out-tsc-e2e",
"sourceMap": true,
"target": "es2018",
"typeRoots": [
"../node_modules/@types"
]
}
}

View File

@@ -22,7 +22,7 @@ module.exports = function (config) {
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['mocha', 'kjhtml'],
reporters: ['mocha', 'kjhtml', 'coverage-istanbul'],
mochaReporter: {
ignoreSkipped: true,
output: 'autowatch'

View File

@@ -1,5 +0,0 @@
{
"watch": ["src/environments/mock-environment.ts"],
"ext": "ts",
"exec": "ts-node --project ./tsconfig.ts-node.json scripts/set-mock-env.ts"
}

View File

@@ -1,6 +1,6 @@
{
"watch": ["src/environments"],
"ext": "ts",
"ignore": ["src/environments/environment.ts", "src/environments/mock-environment.ts"],
"exec": "ts-node --project ./tsconfig.ts-node.json scripts/set-env.ts --dev"
"watch": [
"config"
],
"ext": "json"
}

View File

@@ -1,52 +1,45 @@
{
"name": "dspace-angular",
"version": "0.0.0",
"version": "7.4.0",
"scripts": {
"ng": "ng",
"config:dev": "ts-node --project ./tsconfig.ts-node.json scripts/set-env.ts --dev",
"config:prod": "ts-node --project ./tsconfig.ts-node.json scripts/set-env.ts --prod",
"config:test": "ts-node --project ./tsconfig.ts-node.json scripts/set-mock-env.ts",
"config:test:watch": "nodemon --config mock-nodemon.json",
"config:dev:watch": "nodemon",
"prestart:dev": "yarn run config:dev",
"prebuild": "yarn run config:dev",
"pretest": "yarn run config:test",
"pretest:watch": "yarn run config:test",
"pretest:headless": "yarn run config:test",
"prebuild:prod": "yarn run config:prod",
"pree2e": "yarn run config:prod",
"pree2e:ci": "yarn run config:prod",
"config:watch": "nodemon",
"test:rest": "ts-node --project ./tsconfig.ts-node.json scripts/test-rest.ts",
"start": "yarn run start:prod",
"start:dev": "nodemon --exec \"cross-env NODE_ENV=development yarn run serve\"",
"start:prod": "yarn run build:prod && cross-env NODE_ENV=production yarn run serve:ssr",
"start:mirador:prod": "yarn run build:mirador && yarn run start:prod",
"preserve": "yarn base-href",
"serve": "ts-node --project ./tsconfig.ts-node.json scripts/serve.ts",
"start:dev": "npm-run-all --parallel config:dev:watch serve",
"start:prod": "yarn run build:prod && yarn run serve:ssr",
"serve:ssr": "node dist/server/main",
"analyze": "webpack-bundle-analyzer dist/browser/stats.json",
"build": "ng build",
"build": "ng build --configuration development",
"build:stats": "ng build --stats-json",
"build:prod": "yarn run build:ssr",
"build:ssr": "yarn run build:client-and-server-bundles && yarn run compile:server",
"build:client-and-server-bundles": "ng build --prod && ng run dspace-angular:server:production --bundleDependencies true",
"test:watch": "npm-run-all --parallel config:test:watch test",
"test": "ng test --sourceMap=true --watch=true",
"test:headless": "ng test --watch=false --sourceMap=true --browsers=ChromeHeadless --code-coverage",
"build:ssr": "ng build --configuration production && ng run dspace-angular:server:production",
"test": "ng test --sourceMap=true --watch=false --configuration test",
"test:watch": "nodemon --exec \"ng test --sourceMap=true --watch=true --configuration test\"",
"test:headless": "ng test --sourceMap=true --watch=false --configuration test --browsers=ChromeHeadless --code-coverage",
"lint": "ng lint",
"lint-fix": "ng lint --fix=true",
"e2e": "ng e2e",
"e2e:ci": "ng e2e --webdriver-update=false --protractor-config=./e2e/protractor-ci.conf.js",
"compile:server": "webpack --config webpack.server.config.js --progress --color",
"serve:ssr": "node dist/server",
"clean:dev:config": "rimraf src/assets/config.json",
"clean:coverage": "rimraf coverage",
"clean:dist": "rimraf dist",
"clean:doc": "rimraf doc",
"clean:log": "rimraf *.log*",
"clean:json": "rimraf *.records.json",
"clean:bld": "rimraf build",
"clean:node": "rimraf node_modules",
"clean:prod": "yarn run clean:coverage && yarn run clean:doc && yarn run clean:dist && yarn run clean:log && yarn run clean:json && yarn run clean:bld",
"clean": "yarn run clean:prod && yarn run clean:env && yarn run clean:node",
"clean:env": "rimraf src/environments/environment.ts",
"sync-i18n": "yarn run config:dev && ts-node --project ./tsconfig.ts-node.json scripts/sync-i18n-files.ts",
"postinstall": "ngcc"
"clean:prod": "yarn run clean:dist && yarn run clean:log && yarn run clean:doc && yarn run clean:coverage && yarn run clean:json",
"clean": "yarn run clean:prod && yarn run clean:dev:config && yarn run clean:node",
"sync-i18n": "ts-node --project ./tsconfig.ts-node.json scripts/sync-i18n-files.ts",
"build:mirador": "webpack --config webpack/webpack.mirador.config.ts",
"merge-i18n": "ts-node --project ./tsconfig.ts-node.json scripts/merge-i18n-files.ts",
"cypress:open": "cypress open",
"cypress:run": "cypress run",
"env:yaml": "ts-node --project ./tsconfig.ts-node.json scripts/env-to-yaml.ts",
"base-href": "ts-node --project ./tsconfig.ts-node.json scripts/base-href.ts",
"check-circ-deps": "npx madge --exclude '(bitstream|bundle|collection|config-submission-form|eperson|item|version)\\.model\\.ts$' --circular --extensions ts ./"
},
"browser": {
"fs": false,
@@ -57,40 +50,45 @@
"private": true,
"resolutions": {
"minimist": "^1.2.5",
"webdriver-manager": "^12.1.8"
"webdriver-manager": "^12.1.8",
"ts-node": "10.2.1"
},
"dependencies": {
"@angular/animations": "~10.2.3",
"@angular/cdk": "^10.2.6",
"@angular/common": "~10.2.3",
"@angular/compiler": "~10.2.3",
"@angular/core": "~10.2.3",
"@angular/forms": "~10.2.3",
"@angular/localize": "10.2.3",
"@angular/platform-browser": "~10.2.3",
"@angular/platform-browser-dynamic": "~10.2.3",
"@angular/platform-server": "~10.2.3",
"@angular/router": "~10.2.3",
"@angularclass/bootloader": "1.0.1",
"@ng-bootstrap/ng-bootstrap": "7.0.0",
"@ng-dynamic-forms/core": "^12.0.0",
"@ng-dynamic-forms/ui-ng-bootstrap": "^12.0.0",
"@ngrx/effects": "^10.0.1",
"@ngrx/router-store": "^10.0.1",
"@ngrx/store": "^10.0.1",
"@nguniversal/express-engine": "10.1.0",
"@angular/animations": "~13.2.6",
"@angular/cdk": "^13.2.6",
"@angular/common": "~13.2.6",
"@angular/compiler": "~13.2.6",
"@angular/core": "~13.2.6",
"@angular/forms": "~13.2.6",
"@angular/localize": "13.2.6",
"@angular/platform-browser": "~13.2.6",
"@angular/platform-browser-dynamic": "~13.2.6",
"@angular/platform-server": "~13.2.6",
"@angular/router": "~13.2.6",
"@babel/runtime": "^7.17.2",
"@kolkov/ngx-gallery": "^2.0.1",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@ng-bootstrap/ng-bootstrap": "^11.0.0",
"@ng-dynamic-forms/core": "^15.0.0",
"@ng-dynamic-forms/ui-ng-bootstrap": "^15.0.0",
"@ngrx/effects": "^13.0.2",
"@ngrx/router-store": "^13.0.2",
"@ngrx/store": "^13.0.2",
"@nguniversal/express-engine": "^13.0.2",
"@ngx-translate/core": "^13.0.0",
"@nicky-lenaers/ngx-scroll-to": "^9.0.0",
"@types/grecaptcha": "^3.0.4",
"angular-idle-preload": "3.0.0",
"angular2-text-mask": "9.0.0",
"angulartics2": "^10.0.0",
"angulartics2": "^12.0.0",
"axios": "^0.27.2",
"bootstrap": "4.3.1",
"caniuse-lite": "^1.0.30001165",
"cerialize": "0.1.18",
"cli-progress": "^3.8.0",
"compression": "^1.7.4",
"cookie-parser": "1.4.5",
"core-js": "^3.7.0",
"debug-loader": "^0.0.1",
"deepmerge": "^4.2.2",
"express": "^4.17.1",
"express-rate-limit": "^5.1.3",
@@ -98,93 +96,127 @@
"file-saver": "^2.0.5",
"filesize": "^6.1.0",
"font-awesome": "4.7.0",
"http-proxy-middleware": "^1.0.5",
"https": "1.0.0",
"js-cookie": "2.2.1",
"js-yaml": "^4.1.0",
"json5": "^2.1.3",
"jsonschema": "1.4.0",
"jwt-decode": "^3.1.2",
"klaro": "^0.7.10",
"moment": "^2.29.1",
"lodash": "^4.17.21",
"markdown-it": "^13.0.1",
"markdown-it-mathjax3": "^4.3.1",
"mirador": "^3.3.0",
"mirador-dl-plugin": "^0.13.0",
"mirador-share-plugin": "^0.11.0",
"moment": "^2.29.4",
"morgan": "^1.10.0",
"ng-mocks": "10.5.4",
"ng-mocks": "^13.1.1",
"ng2-file-upload": "1.4.0",
"ng2-nouislider": "^1.8.2",
"ng2-nouislider": "^1.8.3",
"ngx-infinite-scroll": "^10.0.1",
"ngx-moment": "^5.0.0",
"ngx-pagination": "5.0.0",
"ngx-sortablejs": "^10.0.0",
"ngx-sortablejs": "^11.1.0",
"ngx-ui-switch": "^11.0.1",
"nouislider": "^14.6.3",
"pem": "1.14.4",
"postcss-cli": "^8.3.0",
"postcss-cli": "^9.1.0",
"prop-types": "^15.7.2",
"react-copy-to-clipboard": "^5.0.1",
"reflect-metadata": "^0.1.13",
"rxjs": "^6.6.3",
"rxjs-spy": "^7.5.3",
"sass-resources-loader": "^2.1.1",
"rxjs": "^7.5.5",
"sanitize-html": "^2.7.2",
"sortablejs": "1.13.0",
"tslib": "^2.0.0",
"url-parse": "^1.5.6",
"uuid": "^8.3.2",
"webfontloader": "1.6.28",
"zone.js": "^0.10.3",
"@kolkov/ngx-gallery": "^1.2.3"
"zone.js": "~0.11.5"
},
"devDependencies": {
"@angular-builders/custom-webpack": "10.0.1",
"@angular-devkit/build-angular": "~0.1002.0",
"@angular/cli": "~10.2.0",
"@angular/compiler-cli": "~10.2.3",
"@angular/language-service": "~10.2.3",
"@angular-builders/custom-webpack": "~13.1.0",
"@angular-devkit/build-angular": "~13.2.6",
"@angular-eslint/builder": "13.1.0",
"@angular-eslint/eslint-plugin": "13.1.0",
"@angular-eslint/eslint-plugin-template": "13.1.0",
"@angular-eslint/schematics": "13.1.0",
"@angular-eslint/template-parser": "13.1.0",
"@angular/cli": "~13.2.6",
"@angular/compiler-cli": "~13.2.6",
"@angular/language-service": "~13.2.6",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^5.5.0",
"@ngrx/store-devtools": "^10.0.1",
"@ngtools/webpack": "10.2.0",
"@nguniversal/builders": "~10.1.0",
"@ngrx/store-devtools": "^13.0.2",
"@ngtools/webpack": "^13.2.6",
"@nguniversal/builders": "^13.0.2",
"@types/deep-freeze": "0.1.2",
"@types/express": "^4.17.9",
"@types/file-saver": "^2.0.1",
"@types/jasmine": "^3.6.2",
"@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.8",
"@types/js-cookie": "2.2.6",
"@types/lodash": "^4.14.165",
"@types/node": "^14.14.9",
"codelyzer": "^6.0.1",
"compression-webpack-plugin": "^3.0.1",
"@types/sanitize-html": "^2.6.2",
"@typescript-eslint/eslint-plugin": "5.11.0",
"@typescript-eslint/parser": "5.11.0",
"axe-core": "^4.3.3",
"compression-webpack-plugin": "^9.2.0",
"copy-webpack-plugin": "^6.4.1",
"css-loader": "3.4.0",
"cssnano": "^4.1.10",
"cross-env": "^7.0.3",
"css-loader": "^6.2.0",
"css-minimizer-webpack-plugin": "^3.4.1",
"cssnano": "^5.0.6",
"cypress": "9.5.1",
"cypress-axe": "^0.14.0",
"debug-loader": "^0.0.1",
"deep-freeze": "0.0.1",
"dotenv": "^8.2.0",
"eslint": "^8.2.0",
"eslint-plugin-deprecation": "^1.3.2",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jsdoc": "^38.0.6",
"eslint-plugin-unused-imports": "^2.0.0",
"express-static-gzip": "^2.1.5",
"fork-ts-checker-webpack-plugin": "^6.0.3",
"html-webpack-plugin": "^4.5.0",
"http-proxy-middleware": "^1.0.5",
"jasmine-core": "^3.6.0",
"jasmine-marbles": "0.6.0",
"jasmine-spec-reporter": "^6.0.0",
"karma": "^5.2.3",
"karma-chrome-launcher": "^3.1.0",
"html-loader": "^1.3.2",
"jasmine-core": "^3.8.0",
"jasmine-marbles": "0.9.2",
"jasmine-spec-reporter": "~5.0.0",
"karma": "^6.3.14",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "^4.0.1",
"karma-jasmine-html-reporter": "^1.5.4",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"karma-mocha-reporter": "2.2.5",
"nodemon": "^2.0.2",
"npm-run-all": "^4.1.5",
"optimize-css-assets-webpack-plugin": "^5.0.4",
"postcss-apply": "0.11.0",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "6.7.0",
"ngx-mask": "^13.1.7",
"nodemon": "^2.0.15",
"postcss": "^8.1",
"postcss-apply": "0.12.0",
"postcss-import": "^14.0.0",
"postcss-loader": "^4.0.3",
"postcss-preset-env": "^7.4.2",
"postcss-responsive-type": "1.0.0",
"protractor": "^7.0.0",
"protractor-istanbul-plugin": "2.0.0",
"raw-loader": "0.5.1",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"rimraf": "^3.0.2",
"script-ext-html-webpack-plugin": "2.1.5",
"string-replace-loader": "^2.3.0",
"rxjs-spy": "^8.0.2",
"sass": "~1.32.6",
"sass-loader": "^12.6.0",
"sass-resources-loader": "^2.1.1",
"string-replace-loader": "^3.1.0",
"terser-webpack-plugin": "^2.3.1",
"ts-loader": "^5.2.0",
"ts-node": "^8.8.1",
"tslint": "^6.1.3",
"typescript": "~4.0.5",
"webpack": "^4.44.2",
"ts-node": "^8.10.2",
"typescript": "~4.5.5",
"webpack": "^5.69.1",
"webpack-bundle-analyzer": "^4.4.0",
"webpack-cli": "^4.2.0",
"webpack-node-externals": "1.7.2"
"webpack-dev-server": "^4.5.0"
}
}

36
scripts/base-href.ts Normal file
View File

@@ -0,0 +1,36 @@
import * as fs from 'fs';
import { join } from 'path';
import { AppConfig } from '../src/config/app-config.interface';
import { buildAppConfig } from '../src/config/config.server';
/**
* Script to set baseHref as `ui.nameSpace` for development mode. Adds `baseHref` to angular.json build options.
*
* Usage (see package.json):
*
* yarn base-href
*/
const appConfig: AppConfig = buildAppConfig();
const angularJsonPath = join(process.cwd(), 'angular.json');
if (!fs.existsSync(angularJsonPath)) {
console.error(`Error:\n${angularJsonPath} does not exist\n`);
process.exit(1);
}
try {
const angularJson = require(angularJsonPath);
const baseHref = `${appConfig.ui.nameSpace}${appConfig.ui.nameSpace.endsWith('/') ? '' : '/'}`;
console.log(`Setting baseHref to ${baseHref} in angular.json`);
angularJson.projects['dspace-angular'].architect.build.options.baseHref = baseHref;
fs.writeFileSync(angularJsonPath, JSON.stringify(angularJson, null, 2) + '\n');
} catch (e) {
console.error(e);
}

39
scripts/env-to-yaml.ts Normal file
View File

@@ -0,0 +1,39 @@
import * as fs from 'fs';
import * as yaml from 'js-yaml';
import { join } from 'path';
/**
* Script to help convert previous version environment.*.ts to yaml.
*
* Usage (see package.json):
*
* yarn env:yaml [relative path to environment.ts file] (optional relative path to write yaml file) *
*/
const args = process.argv.slice(2);
if (args[0] === undefined) {
console.log(`Usage:\n\tyarn env:yaml [relative path to environment.ts file] (optional relative path to write yaml file)\n`);
process.exit(0);
}
const envFullPath = join(process.cwd(), args[0]);
if (!fs.existsSync(envFullPath)) {
console.error(`Error:\n${envFullPath} does not exist\n`);
process.exit(1);
}
try {
const env = require(envFullPath).environment;
const config = yaml.dump(env);
if (args[1]) {
const ymlFullPath = join(process.cwd(), args[1]);
fs.writeFileSync(ymlFullPath, config);
} else {
console.log(config);
}
} catch (e) {
console.error(e);
}

View File

@@ -0,0 +1,99 @@
import { projectRoot} from '../webpack/helpers';
const commander = require('commander');
const fs = require('fs');
const JSON5 = require('json5');
const _cliProgress = require('cli-progress');
const _ = require('lodash');
const program = new commander.Command();
program.version('1.0.0', '-v, --version');
const LANGUAGE_FILES_LOCATION = 'src/assets/i18n';
parseCliInput();
/**
* Purpose: Allows customization of i18n labels from within themes
* e.g. Customize the label "menu.section.browse_global" to display "Browse DSpace" rather than "All of DSpace"
*
* This script uses the i18n files found in a source directory to override settings in files with the same
* name in a destination directory. Only the i18n labels to be overridden need be in the source files.
*
* Execution (using custom theme):
* ```
* yarn merge-i18n -s src/themes/custom/assets/i18n
* ```
*
* Input parameters:
* * Output directory: The directory in which the original i18n files are stored
* - Defaults to src/assets/i18n (the default i18n file location)
* - This is where the final output files will be written
* * Source directory: The directory with override files
* - Required
* - Recommended to place override files in the theme directory under assets/i18n (but this is not required)
* - Files must have matching names in both source and destination directories, for example:
* en.json5 in the source directory will be merged with en.json5 in the destination directory
* fr.json5 in the source directory will be merged with fr.json5 in the destination directory
*/
function parseCliInput() {
program
.option('-d, --output-dir <output-dir>', 'output dir when running script on all language files', projectRoot(LANGUAGE_FILES_LOCATION))
.option('-s, --source-dir <source-dir>', 'source dir of transalations to be merged')
.usage('(-s <source-dir> [-d <output-dir>])')
.parse(process.argv);
if (program.outputDir && program.sourceDir) {
if (!fs.existsSync(program.outputDir) && !fs.lstatSync(program.outputDir).isDirectory() ) {
console.error('Output does not exist or is not a directory.');
console.log(program.outputHelp());
process.exit(1);
}
if (!fs.existsSync(program.sourceDir) && !fs.lstatSync(program.sourceDir).isDirectory() ) {
console.error('Source does not exist or is not a directory.');
console.log(program.outputHelp());
process.exit(1);
}
fs.readdirSync(projectRoot(program.sourceDir)).forEach(file => {
if (fs.existsSync(program.outputDir + '/' + file) ) {
console.log('Merging: ' + program.outputDir + '/' + file + ' with ' + program.sourceDir + '/' + file);
mergeFileWithSource(program.sourceDir + '/' + file, program.outputDir + '/' + file);
}
});
} else {
console.error('Source or Output parameter is missing.');
console.log(program.outputHelp());
process.exit(1);
}
}
/**
* Reads source file and output file to merge the contents
* > Iterates over the source file keys
* > Updates values for each key and adds new keys as needed
* > Updates the output file with the new merged json
* @param pathToSourceFile Valid path to source file to merge from
* @param pathToOutputFile Valid path to merge and write output
*/
function mergeFileWithSource(pathToSourceFile, pathToOutputFile) {
const progressBar = new _cliProgress.SingleBar({}, _cliProgress.Presets.shades_classic);
progressBar.start(100, 0);
const sourceFile = fs.readFileSync(pathToSourceFile, 'utf8');
progressBar.update(10);
const outputFile = fs.readFileSync(pathToOutputFile, 'utf8');
progressBar.update(20);
const parsedSource = JSON5.parse(sourceFile);
progressBar.update(30);
const parsedOutput = JSON5.parse(outputFile);
progressBar.update(40);
for (const key of Object.keys(parsedSource)) {
parsedOutput[key] = parsedSource[key];
}
progressBar.update(80);
fs.writeFileSync(pathToOutputFile,JSON5.stringify(parsedOutput,{ space:'\n ', quote: '"' }), { encoding:'utf8' });
progressBar.update(100);
progressBar.stop();
}

View File

@@ -1,11 +1,15 @@
import { environment } from '../src/environments/environment';
import * as child from 'child_process';
import { AppConfig } from '../src/config/app-config.interface';
import { buildAppConfig } from '../src/config/config.server';
const appConfig: AppConfig = buildAppConfig();
/**
* Calls `ng serve` with the following arguments configured for the UI in the environment file: host, port, nameSpace, ssl
* Calls `ng serve` with the following arguments configured for the UI in the app config: host, port, nameSpace, ssl
* Any CLI arguments given to this script are patched through to `ng serve` as well.
*/
child.spawn(
`ng serve --host ${environment.ui.host} --port ${environment.ui.port} --servePath ${environment.ui.nameSpace} --ssl ${environment.ui.ssl}`,
{ stdio:'inherit', shell: true }
`ng serve --host ${appConfig.ui.host} --port ${appConfig.ui.port} --serve-path ${appConfig.ui.nameSpace} --ssl ${appConfig.ui.ssl} ${process.argv.slice(2).join(' ')} --configuration development`,
{ stdio: 'inherit', shell: true }
);

View File

@@ -1,116 +0,0 @@
import { writeFile } from 'fs';
import { environment as commonEnv } from '../src/environments/environment.common';
import { GlobalConfig } from '../src/config/global-config.interface';
import { ServerConfig } from '../src/config/server-config.interface';
import { hasValue } from '../src/app/shared/empty.util';
// Configure Angular `environment.ts` file path
const targetPath = './src/environments/environment.ts';
// Load node modules
const colors = require('colors');
require('dotenv').config();
const merge = require('deepmerge');
const mergeOptions = { arrayMerge: (destinationArray, sourceArray, options) => sourceArray };
const environment = process.argv[2];
let environmentFilePath;
let production = false;
switch (environment) {
case '--prod':
case '--production':
production = true;
console.log(`Building ${colors.red.bold(`production`)} environment`);
environmentFilePath = '../src/environments/environment.prod.ts';
break;
case '--test':
console.log(`Building ${colors.blue.bold(`test`)} environment`);
environmentFilePath = '../src/environments/environment.test.ts';
break;
default:
console.log(`Building ${colors.green.bold(`development`)} environment`);
environmentFilePath = '../src/environments/environment.dev.ts';
}
const processEnv = {
ui: createServerConfig(
process.env.DSPACE_HOST,
process.env.DSPACE_PORT,
process.env.DSPACE_NAMESPACE,
process.env.DSPACE_SSL),
rest: createServerConfig(
process.env.DSPACE_REST_HOST,
process.env.DSPACE_REST_PORT,
process.env.DSPACE_REST_NAMESPACE,
process.env.DSPACE_REST_SSL)
} as GlobalConfig;
import(environmentFilePath)
.then((file) => generateEnvironmentFile(merge.all([commonEnv, file.environment, processEnv], mergeOptions)))
.catch(() => {
console.log(colors.yellow.bold(`No specific environment file found for ` + environment));
generateEnvironmentFile(merge(commonEnv, processEnv, mergeOptions))
});
function generateEnvironmentFile(file: GlobalConfig): void {
file.production = production;
buildBaseUrls(file);
const contents = `export const environment = ` + JSON.stringify(file);
writeFile(targetPath, contents, (err) => {
if (err) {
throw console.error(err);
} else {
console.log(`Angular ${colors.bold('environment.ts')} file generated correctly at ${colors.bold(targetPath)} \n`);
}
});
}
// allow to override a few important options by environment variables
function createServerConfig(host?: string, port?: string, nameSpace?: string, ssl?: string): ServerConfig {
const result = {} as any;
if (hasValue(host)) {
result.host = host;
}
if (hasValue(nameSpace)) {
result.nameSpace = nameSpace;
}
if (hasValue(port)) {
result.port = Number(port);
}
if (hasValue(ssl)) {
result.ssl = ssl.trim().match(/^(true|1|yes)$/i) ? true : false;
}
return result;
}
function buildBaseUrls(config: GlobalConfig): void {
for (const key in config) {
if (config.hasOwnProperty(key) && config[key].host) {
config[key].baseUrl = [
getProtocol(config[key].ssl),
getHost(config[key].host),
getPort(config[key].port),
getNameSpace(config[key].nameSpace)
].join('');
}
}
}
function getProtocol(ssl: boolean): string {
return ssl ? 'https://' : 'http://';
}
function getHost(host: string): string {
return host;
}
function getPort(port: number): string {
return port ? (port !== 80 && port !== 443) ? ':' + port : '' : '';
}
function getNameSpace(nameSpace: string): string {
return nameSpace ? nameSpace.charAt(0) === '/' ? nameSpace : '/' + nameSpace : '';
}

View File

@@ -1,11 +0,0 @@
import { copyFile } from 'fs';
// Configure Angular `environment.ts` file path
const sourcePath = './src/environments/mock-environment.ts';
const targetPath = './src/environments/environment.ts';
// destination.txt will be created or overwritten by default.
copyFile(sourcePath, targetPath, (err) => {
if (err) throw err;
console.log(sourcePath + ' was copied to ' + targetPath);
});

10
scripts/sync-i18n-files.ts Executable file → Normal file
View File

@@ -1,4 +1,5 @@
import { projectRoot} from '../webpack/helpers';
import { projectRoot } from '../webpack/helpers';
const commander = require('commander');
const fs = require('fs');
const JSON5 = require('json5');
@@ -119,7 +120,7 @@ function syncFileWithSource(pathToTargetFile, pathToOutputFile) {
outputChunks.forEach(function (chunk) {
progressBar.increment();
chunk.split("\n").forEach(function (line) {
file.write(" " + line + "\n");
file.write((line === '' ? '' : ` ${line}`) + "\n");
});
});
file.write("\n}");
@@ -192,7 +193,10 @@ function createNewChunkComparingSourceAndTarget(correspondingTargetChunk, source
const targetList = correspondingTargetChunk.split("\n");
const oldKeyValueInTargetComments = getSubStringWithRegex(correspondingTargetChunk, "\\s*\\/\\/\\s*\".*");
const keyValueTarget = targetList[targetList.length - 1];
let keyValueTarget = targetList[targetList.length - 1];
if (!keyValueTarget.endsWith(",")) {
keyValueTarget = keyValueTarget + ",";
}
if (oldKeyValueInTargetComments != null) {
const oldKeyValueUncommented = getSubStringWithRegex(oldKeyValueInTargetComments[0], "\".*")[0];

82
scripts/test-rest.ts Normal file
View File

@@ -0,0 +1,82 @@
import * as http from 'http';
import * as https from 'https';
import { AppConfig } from '../src/config/app-config.interface';
import { buildAppConfig } from '../src/config/config.server';
const appConfig: AppConfig = buildAppConfig();
/**
* Script to test the connection with the configured REST API (in the 'rest' settings of your config.*.yaml)
*
* This script is useful to test for any Node.js connection issues with your REST API.
*
* Usage (see package.json): yarn test:rest
*/
// Get root URL of configured REST API
const restUrl = appConfig.rest.baseUrl + '/api';
console.log(`...Testing connection to REST API at ${restUrl}...\n`);
// If SSL enabled, test via HTTPS, else via HTTP
if (appConfig.rest.ssl) {
const req = https.request(restUrl, (res) => {
console.log(`RESPONSE: ${res.statusCode} ${res.statusMessage} \n`);
// We will keep reading data until the 'end' event fires.
// This ensures we don't just read the first chunk.
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
checkJSONResponse(data);
});
});
req.on('error', error => {
console.error('ERROR connecting to REST API\n' + error);
});
req.end();
} else {
const req = http.request(restUrl, (res) => {
console.log(`RESPONSE: ${res.statusCode} ${res.statusMessage} \n`);
// We will keep reading data until the 'end' event fires.
// This ensures we don't just read the first chunk.
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
checkJSONResponse(data);
});
});
req.on('error', error => {
console.error('ERROR connecting to REST API\n' + error);
});
req.end();
}
/**
* Check JSON response from REST API to see if it looks valid. Log useful information
* @param responseData response data
*/
function checkJSONResponse(responseData: any): any {
let parsedData;
try {
parsedData = JSON.parse(responseData);
console.log('Checking JSON returned for validity...');
console.log(`\t"dspaceVersion" = ${parsedData.dspaceVersion}`);
console.log(`\t"dspaceUI" = ${parsedData.dspaceUI}`);
console.log(`\t"dspaceServer" = ${parsedData.dspaceServer}`);
console.log(`\t"dspaceServer" property matches UI's "rest" config? ${(parsedData.dspaceServer === appConfig.rest.baseUrl)}`);
// Check for "authn" and "sites" in "_links" section as they should always exist (even if no data)!
const linksFound: string[] = Object.keys(parsedData._links);
console.log(`\tDoes "/api" endpoint have HAL links ("_links" section)? ${linksFound.includes('authn') && linksFound.includes('sites')}`);
} catch (err) {
console.error('ERROR: INVALID DSPACE REST API! Response is not valid JSON!');
console.error(`Response returned:\n${responseData}`);
}
}

199
server.ts
View File

@@ -15,57 +15,83 @@
* import for `ngExpressEngine`.
*/
import 'zone.js/dist/zone-node';
import 'zone.js/node';
import 'reflect-metadata';
import 'rxjs';
import * as fs from 'fs';
import axios from 'axios';
import * as pem from 'pem';
import * as https from 'https';
import * as morgan from 'morgan';
import * as express from 'express';
import * as bodyParser from 'body-parser';
import * as compression from 'compression';
import * as expressStaticGzip from 'express-static-gzip';
import { existsSync, readFileSync } from 'fs';
import { join } from 'path';
import { APP_BASE_HREF } from '@angular/common';
import { enableProdMode } from '@angular/core';
import { existsSync } from 'fs';
import { ngExpressEngine } from '@nguniversal/express-engine';
import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens';
import { environment } from './src/environments/environment';
import { createProxyMiddleware } from 'http-proxy-middleware';
import { hasValue, hasNoValue } from './src/app/shared/empty.util';
import { APP_BASE_HREF } from '@angular/common';
import { hasNoValue, hasValue } from './src/app/shared/empty.util';
import { UIServerConfig } from './src/config/ui-server-config.interface';
import { ServerAppModule } from './src/main.server';
import { buildAppConfig } from './src/config/config.server';
import { APP_CONFIG, AppConfig } from './src/config/app-config.interface';
import { extendEnvironmentWithAppConfig } from './src/config/config.util';
import { logStartupMessage } from './startup-message';
/*
* Set path for the browser application's dist folder
*/
const DIST_FOLDER = join(process.cwd(), 'dist/browser');
// Set path fir IIIF viewer.
const IIIF_VIEWER = join(process.cwd(), 'dist/iiif');
const indexHtml = existsSync(join(DIST_FOLDER, 'index.html')) ? 'index.html' : 'index';
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const { ServerAppModule, ngExpressEngine } = require('./dist/server/main');
const cookieParser = require('cookie-parser');
const appConfig: AppConfig = buildAppConfig(join(DIST_FOLDER, 'assets/config.json'));
// extend environment with app config for server
extendEnvironmentWithAppConfig(environment, appConfig);
// The Express app is exported so that it can be used by serverless Functions.
export function app() {
const router = express.Router();
/*
* Create a new express application
*/
const server = express();
// Tell Express to trust X-FORWARDED-* headers from proxies
// See https://expressjs.com/en/guide/behind-proxies.html
server.set('trust proxy', environment.ui.useProxies);
/*
* If production mode is enabled in the environment file:
* - Enable Angular's production mode
* - Enable compression for response bodies. See [compression](https://github.com/expressjs/compression)
* - Enable compression for SSR reponses. See [compression](https://github.com/expressjs/compression)
*/
if (environment.production) {
enableProdMode();
server.use(compression());
server.use(compression({
// only compress responses we've marked as SSR
// otherwise, this middleware may compress files we've chosen not to compress via compression-webpack-plugin
filter: (_, res) => res.locals.ssr,
}));
}
/*
@@ -99,7 +125,11 @@ export function app() {
provide: RESPONSE,
useValue: (options as any).req.res,
},
],
{
provide: APP_CONFIG,
useValue: environment
}
]
})(_, (options as any), callback)
);
@@ -116,7 +146,11 @@ export function app() {
/**
* Proxy the sitemaps
*/
server.use('/sitemap**', createProxyMiddleware({ target: `${environment.rest.baseUrl}/sitemaps`, changeOrigin: true }));
router.use('/sitemap**', createProxyMiddleware({
target: `${environment.rest.baseUrl}/sitemaps`,
pathRewrite: path => path.replace(environment.ui.nameSpace, '/'),
changeOrigin: true
}));
/**
* Checks if the rateLimiter property is present
@@ -133,11 +167,28 @@ export function app() {
/*
* Serve static resources (images, i18n messages, …)
* Handle pre-compressed files with [express-static-gzip](https://github.com/tkoenig89/express-static-gzip)
*/
server.get('*.*', cacheControl, express.static(DIST_FOLDER, { index: false }));
router.get('*.*', cacheControl, expressStaticGzip(DIST_FOLDER, {
index: false,
enableBrotli: true,
orderPreference: ['br', 'gzip'],
}));
/*
* Fallthrough to the IIIF viewer (must be included in the build).
*/
router.use('/iiif', express.static(IIIF_VIEWER, { index: false }));
/**
* Checking server status
*/
server.get('/app/health', healthCheck);
// Register the ngApp callback function to handle incoming requests
server.get('*', ngApp);
router.get('*', ngApp);
server.use(environment.ui.nameSpace, router);
return server;
}
@@ -159,6 +210,7 @@ function ngApp(req, res) {
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }]
}, (err, data) => {
if (hasNoValue(err) && hasValue(data)) {
res.locals.ssr = true; // mark response as SSR
res.send(data);
} else if (hasValue(err) && err.code === 'ERR_HTTP_HEADERS_SENT') {
// When this error occurs we can't fall back to CSR because the response has already been
@@ -170,13 +222,25 @@ function ngApp(req, res) {
if (hasValue(err)) {
console.warn('Error details : ', err);
}
res.sendFile(DIST_FOLDER + '/index.html');
res.render(indexHtml, {
req,
providers: [{
provide: APP_BASE_HREF,
useValue: req.baseUrl
}]
});
}
});
} else {
// If preboot is disabled, just serve the client
console.log('Universal off, serving for direct CSR');
res.sendFile(DIST_FOLDER + '/index.html');
res.render(indexHtml, {
req,
providers: [{
provide: APP_BASE_HREF,
useValue: req.baseUrl
}]
});
}
}
@@ -221,47 +285,76 @@ function run() {
});
}
/*
* If SSL is enabled
* - Read credentials from configuration files
* - Call script to start an HTTPS server with these credentials
* When SSL is disabled
* - Start an HTTP server on the configured port and host
*/
if (environment.ui.ssl) {
let serviceKey;
try {
serviceKey = fs.readFileSync('./config/ssl/key.pem');
} catch (e) {
console.warn('Service key not found at ./config/ssl/key.pem');
}
function start() {
logStartupMessage(environment);
let certificate;
try {
certificate = fs.readFileSync('./config/ssl/cert.pem');
} catch (e) {
console.warn('Certificate not found at ./config/ssl/key.pem');
}
/*
* If SSL is enabled
* - Read credentials from configuration files
* - Call script to start an HTTPS server with these credentials
* When SSL is disabled
* - Start an HTTP server on the configured port and host
*/
if (environment.ui.ssl) {
let serviceKey;
try {
serviceKey = readFileSync('./config/ssl/key.pem');
} catch (e) {
console.warn('Service key not found at ./config/ssl/key.pem');
}
if (serviceKey && certificate) {
createHttpsServer({
serviceKey: serviceKey,
certificate: certificate
});
let certificate;
try {
certificate = readFileSync('./config/ssl/cert.pem');
} catch (e) {
console.warn('Certificate not found at ./config/ssl/key.pem');
}
if (serviceKey && certificate) {
createHttpsServer({
serviceKey: serviceKey,
certificate: certificate
});
} else {
console.warn('Disabling certificate validation and proceeding with a self-signed certificate. If this is a production server, it is recommended that you configure a valid certificate instead.');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // lgtm[js/disabling-certificate-validation]
pem.createCertificate({
days: 1,
selfSigned: true
}, (error, keys) => {
createHttpsServer(keys);
});
}
} else {
console.warn('Disabling certificate validation and proceeding with a self-signed certificate. If this is a production server, it is recommended that you configure a valid certificate instead.');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // lgtm[js/disabling-certificate-validation]
pem.createCertificate({
days: 1,
selfSigned: true
}, (error, keys) => {
createHttpsServer(keys);
});
run();
}
} else {
run();
}
/*
* The callback function to serve health check requests
*/
function healthCheck(req, res) {
const baseUrl = `${environment.rest.baseUrl}${environment.actuators.endpointPath}`;
axios.get(baseUrl)
.then((response) => {
res.status(response.status).send(response.data);
})
.catch((error) => {
res.status(error.response.status).send({
error: error.message
});
});
}
// Webpack will replace 'require' with '__webpack_require__'
// '__non_webpack_require__' is a proxy to Node 'require'
// The below code is to ensure that the server is run only when not requiring the bundle.
declare const __non_webpack_require__: NodeRequire;
const mainModule = __non_webpack_require__.main;
const moduleFilename = (mainModule && mainModule.filename) || '';
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
start();
}
export * from './src/main.server';

View File

@@ -9,13 +9,15 @@ import { GroupFormComponent } from './group-registry/group-form/group-form.compo
import { MembersListComponent } from './group-registry/group-form/members-list/members-list.component';
import { SubgroupsListComponent } from './group-registry/group-form/subgroup-list/subgroups-list.component';
import { GroupsRegistryComponent } from './group-registry/groups-registry.component';
import { FormModule } from '../shared/form/form.module';
@NgModule({
imports: [
CommonModule,
SharedModule,
RouterModule,
AccessControlRoutingModule
AccessControlRoutingModule,
FormModule
],
declarations: [
EPeopleRegistryComponent,

View File

@@ -1,3 +1,4 @@
/* eslint-disable max-classes-per-file */
import { Action } from '@ngrx/store';
import { EPerson } from '../../core/eperson/models/eperson.model';
import { type } from '../../shared/ngrx/type';
@@ -16,7 +17,6 @@ export const EPeopleRegistryActionTypes = {
CANCEL_EDIT_EPERSON: type('dspace/epeople-registry/CANCEL_EDIT_EPERSON'),
};
/* tslint:disable:max-classes-per-file */
/**
* Used to edit an EPerson in the EPeople registry
*/
@@ -37,7 +37,6 @@ export class EPeopleRegistryCancelEPersonAction implements Action {
type = EPeopleRegistryActionTypes.CANCEL_EDIT_EPERSON;
}
/* tslint:enable:max-classes-per-file */
/**
* Export a type alias of all actions in this action group

View File

@@ -45,7 +45,7 @@
</div>
</form>
<ds-loading *ngIf="searching$ | async"></ds-loading>
<ds-themed-loading *ngIf="searching$ | async"></ds-themed-loading>
<ds-pagination
*ngIf="(pageInfoState$ | async)?.totalElements > 0 && !(searching$ | async)"
[paginationOptions]="config"

View File

@@ -9,7 +9,6 @@ import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { buildPaginatedList, PaginatedList } from '../../core/data/paginated-list.model';
import { RemoteData } from '../../core/data/remote-data';
import { FindListOptions } from '../../core/data/request.models';
import { EPersonDataService } from '../../core/eperson/eperson-data.service';
import { EPerson } from '../../core/eperson/models/eperson.model';
import { PageInfo } from '../../core/shared/page-info.model';
@@ -27,6 +26,7 @@ import { AuthorizationDataService } from '../../core/data/feature-authorization/
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';
describe('EPeopleRegistryComponent', () => {
let component: EPeopleRegistryComponent;

View File

@@ -238,7 +238,6 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy {
this.epersonService.deleteEPerson(ePerson).pipe(getFirstCompletedRemoteData()).subscribe((restResponse: RemoteData<NoContent>) => {
if (restResponse.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', {name: ePerson.name}));
this.reset();
} else {
this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + ePerson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage);
}

View File

@@ -19,7 +19,7 @@
class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> {{messagePrefix + '.return' | translate}}</button>
</div>
<div between class="btn-group">
<button class="btn btn-primary" [disabled]="!(canReset$ | async)">
<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>
@@ -36,9 +36,13 @@
</button>
</ds-form>
<ds-themed-loading [showMessage]="false" *ngIf="!formGroup"></ds-themed-loading>
<div *ngIf="epersonService.getActiveEPerson() | async">
<h5>{{messagePrefix + '.groupsEPersonIsMemberOf' | translate}}</h5>
<ds-themed-loading [showMessage]="false" *ngIf="!(groups | async)"></ds-themed-loading>
<ds-pagination
*ngIf="(groups | async)?.payload?.totalElements > 0"
[paginationOptions]="config"
@@ -52,15 +56,17 @@
<table id="groups" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col">{{messagePrefix + '.table.name' | translate}}</th>
<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>{{group.id}}</td>
<td><a (click)="groupsDataService.startEditingNewGroup(group)"
<td class="align-middle">{{group.id}}</td>
<td class="align-middle"><a (click)="groupsDataService.startEditingNewGroup(group)"
[routerLink]="[groupsDataService.getGroupEditPageRouterLink(group)]">{{group.name}}</a></td>
<td class="align-middle">{{(group.object | async)?.payload?.name}}</td>
</tr>
</tbody>
</table>

View File

@@ -2,18 +2,18 @@ import { Observable, of as observableOf } from 'rxjs';
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { FormControl, FormGroup, 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 { buildPaginatedList, PaginatedList } from '../../../core/data/paginated-list.model';
import { RemoteData } from '../../../core/data/remote-data';
import { FindListOptions } from '../../../core/data/request.models';
import { EPersonDataService } from '../../../core/eperson/eperson-data.service';
import { EPerson } from '../../../core/eperson/models/eperson.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 { EPeopleRegistryComponent } from '../epeople-registry.component';
import { EPersonFormComponent } from './eperson-form.component';
import { EPersonMock, EPersonMock2 } from '../../../shared/testing/eperson.mock';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
@@ -28,6 +28,9 @@ import { createPaginatedList } from '../../../shared/testing/utils.test';
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 { ValidateEmailNotTaken } from './validators/email-taken.validator';
import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service';
describe('EPersonFormComponent', () => {
let component: EPersonFormComponent;
@@ -39,6 +42,7 @@ describe('EPersonFormComponent', () => {
let authService: AuthServiceStub;
let authorizationService: AuthorizationDataService;
let groupsDataService: GroupDataService;
let epersonRegistrationService: EpersonRegistrationService;
let paginationService;
@@ -99,15 +103,81 @@ describe('EPersonFormComponent', () => {
}
});
return createSuccessfulRemoteDataObject$(ePerson);
},
getEPersonByEmail(email): Observable<RemoteData<EPerson>> {
return createSuccessfulRemoteDataObject$(null);
}
};
builderService = getMockFormBuilderService();
builderService = Object.assign(getMockFormBuilderService(),{
createFormGroup(formModel, options = null) {
const controls = {};
formModel.forEach( model => {
model.parent = parent;
const controlModel = model;
const controlState = { value: controlModel.value, disabled: controlModel.disabled };
const controlOptions = this.createAbstractControlOptions(controlModel.validators, controlModel.asyncValidators, controlModel.updateOn);
controls[model.id] = new FormControl(controlState, controlOptions);
});
return new FormGroup(controls, options);
},
createAbstractControlOptions(validatorsConfig = null, asyncValidatorsConfig = null, updateOn = null) {
return {
validators: validatorsConfig !== null ? this.getValidators(validatorsConfig) : null,
};
},
getValidators(validatorsConfig) {
return this.getValidatorFns(validatorsConfig);
},
getValidatorFns(validatorsConfig, validatorsToken = this._NG_VALIDATORS) {
let validatorFns = [];
if (this.isObject(validatorsConfig)) {
validatorFns = Object.keys(validatorsConfig).map(validatorConfigKey => {
const validatorConfigValue = validatorsConfig[validatorConfigKey];
if (this.isValidatorDescriptor(validatorConfigValue)) {
const descriptor = validatorConfigValue;
return this.getValidatorFn(descriptor.name, descriptor.args, validatorsToken);
}
return this.getValidatorFn(validatorConfigKey, validatorConfigValue, validatorsToken);
});
}
return validatorFns;
},
getValidatorFn(validatorName, validatorArgs = null, validatorsToken = this._NG_VALIDATORS) {
let validatorFn;
if (Validators.hasOwnProperty(validatorName)) { // Built-in Angular Validators
validatorFn = Validators[validatorName];
} else { // Custom Validators
if (this._DYNAMIC_VALIDATORS && this._DYNAMIC_VALIDATORS.has(validatorName)) {
validatorFn = this._DYNAMIC_VALIDATORS.get(validatorName);
} else if (validatorsToken) {
validatorFn = validatorsToken.find(validator => validator.name === validatorName);
}
}
if (validatorFn === undefined) { // throw when no validator could be resolved
throw new Error(`validator '${validatorName}' is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`);
}
if (validatorArgs !== null) {
return validatorFn(validatorArgs);
}
return validatorFn;
},
isValidatorDescriptor(value) {
if (this.isObject(value)) {
return value.hasOwnProperty('name') && value.hasOwnProperty('args');
}
return false;
},
isObject(value) {
return typeof value === 'object' && value !== null;
}
});
authService = new AuthServiceStub();
authorizationService = jasmine.createSpyObj('authorizationService', {
isAuthorized: observableOf(true)
isAuthorized: observableOf(true),
});
groupsDataService = jasmine.createSpyObj('groupsDataService', {
findAllByHref: createSuccessfulRemoteDataObject$(createPaginatedList([])),
findListByHref: createSuccessfulRemoteDataObject$(createPaginatedList([])),
getGroupRegistryRouterLink: ''
});
@@ -130,12 +200,18 @@ describe('EPersonFormComponent', () => {
{ provide: AuthService, useValue: authService },
{ provide: AuthorizationDataService, useValue: authorizationService },
{ provide: PaginationService, useValue: paginationService },
{ provide: RequestService, useValue: jasmine.createSpyObj('requestService', ['removeByHrefSubstring']) }
{ provide: RequestService, useValue: jasmine.createSpyObj('requestService', ['removeByHrefSubstring'])},
{ provide: EpersonRegistrationService, useValue: epersonRegistrationService },
EPeopleRegistryComponent
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
}));
epersonRegistrationService = jasmine.createSpyObj('epersonRegistrationService', {
registerEmail: createSuccessfulRemoteDataObject$(null)
});
beforeEach(() => {
fixture = TestBed.createComponent(EPersonFormComponent);
component = fixture.componentInstance;
@@ -146,6 +222,131 @@ describe('EPersonFormComponent', () => {
expect(component).toBeDefined();
});
describe('check form validation', () => {
let firstName;
let lastName;
let email;
let canLogIn;
let requireCertificate;
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;
fixture.detectChanges();
component.initialisePage();
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();
});
}));
});
describe('after inserting information firstName,lastName and email not required', () => {
beforeEach(() => {
component.formGroup.controls.firstName.setValue('test');
component.formGroup.controls.lastName.setValue('test');
component.formGroup.controls.email.setValue('test@test.com');
fixture.detectChanges();
});
it('firstName should be valid because the firstName is set', waitForAsync(() => {
fixture.whenStable().then(() => {
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(() => {
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(() => {
expect(component.formGroup.controls.email.valid).toBeTrue();
expect(component.formGroup.controls.email.errors).toBeNull();
});
}));
});
describe('after inserting email wrong should show pattern validation error', () => {
beforeEach(() => {
component.formGroup.controls.email.setValue('test@test');
fixture.detectChanges();
});
it('email should not be valid because the email pattern', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.email.valid).toBeFalse();
expect(component.formGroup.controls.email.errors.pattern).toBeTruthy();
});
}));
});
describe('after already utilized email', () => {
beforeEach(() => {
const ePersonServiceWithEperson = Object.assign(ePersonDataServiceStub,{
getEPersonByEmail(): Observable<RemoteData<EPerson>> {
return createSuccessfulRemoteDataObject$(EPersonMock);
}
});
component.formGroup.controls.email.setValue('test@test.com');
component.formGroup.controls.email.setAsyncValidators(ValidateEmailNotTaken.createValidator(ePersonServiceWithEperson));
fixture.detectChanges();
});
it('email should not be valid because email is already taken', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.email.valid).toBeFalse();
expect(component.formGroup.controls.email.errors.emailTaken).toBeTruthy();
});
}));
});
});
describe('when submitting the form', () => {
let firstName;
let lastName;
@@ -320,4 +521,23 @@ describe('EPersonFormComponent', () => {
expect(component.epersonService.deleteEPerson).toHaveBeenCalledWith(eperson);
});
});
describe('Reset Password', () => {
let ePersonId;
let ePersonEmail;
beforeEach(() => {
ePersonId = 'testEPersonId';
ePersonEmail = 'person.email@4science.it';
component.epersonInitial = Object.assign(new EPerson(), {
id: ePersonId,
email: ePersonEmail
});
component.resetPassword();
});
it('should call epersonRegistrationService.registerEmail', () => {
expect(epersonRegistrationService.registerEmail).toHaveBeenCalledWith(ePersonEmail);
});
});
});

View File

@@ -1,4 +1,4 @@
import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';
import { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';
import { FormGroup } from '@angular/forms';
import {
DynamicCheckboxModel,
@@ -8,7 +8,7 @@ import {
} from '@ng-dynamic-forms/core';
import { TranslateService } from '@ngx-translate/core';
import { combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs';
import { switchMap, take } from 'rxjs/operators';
import { debounceTime, 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';
@@ -32,10 +32,14 @@ import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { RequestService } from '../../../core/data/request.service';
import { NoContent } from '../../../core/shared/NoContent.model';
import { PaginationService } from '../../../core/pagination/pagination.service';
import { followLink } from '../../../shared/utils/follow-link-config.model';
import { ValidateEmailNotTaken } from './validators/email-taken.validator';
import { Registration } from '../../../core/shared/registration.model';
import { EpersonRegistrationService } from '../../../core/data/eperson-registration.service';
@Component({
selector: 'ds-eperson-form',
templateUrl: './eperson-form.component.html'
templateUrl: './eperson-form.component.html',
})
/**
* A form used for creating and editing EPeople
@@ -119,7 +123,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
* Observable whether or not the admin is allowed to reset the EPerson's password
* TODO: Initialize the observable once the REST API supports this (currently hardcoded to return false)
*/
canReset$: Observable<boolean> = observableOf(false);
canReset$: Observable<boolean>;
/**
* Observable whether or not the admin is allowed to delete the EPerson
@@ -160,16 +164,25 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
*/
isImpersonated = false;
constructor(public epersonService: EPersonDataService,
public groupsDataService: GroupDataService,
private formBuilderService: FormBuilderService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private authService: AuthService,
private authorizationService: AuthorizationDataService,
private modalService: NgbModal,
private paginationService: PaginationService,
public requestService: RequestService) {
/**
* Subscription to email field value change
*/
emailValueChangeSubscribe: Subscription;
constructor(
protected changeDetectorRef: ChangeDetectorRef,
public epersonService: EPersonDataService,
public groupsDataService: GroupDataService,
private formBuilderService: FormBuilderService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private authService: AuthService,
private authorizationService: AuthorizationDataService,
private modalService: NgbModal,
private paginationService: PaginationService,
public requestService: RequestService,
private epersonRegistrationService: EpersonRegistrationService,
) {
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
this.epersonInitial = eperson;
if (hasValue(eperson)) {
@@ -186,6 +199,7 @@ 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`),
@@ -218,9 +232,13 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
name: 'email',
validators: {
required: null,
pattern: '^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$'
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(
@@ -247,7 +265,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
if (eperson != null) {
this.groups = this.groupsDataService.findAllByHref(eperson._links.groups.href, {
this.groups = this.groupsDataService.findListByHref(eperson._links.groups.href, {
currentPage: 1,
elementsPerPage: this.config.pageSize
});
@@ -259,11 +277,18 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
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();
});
}
}));
const activeEPerson$ = this.epersonService.getActiveEPerson();
this.groups = activeEPerson$.pipe(
this.groups = activeEPerson$.pipe(
switchMap((eperson) => {
return observableCombineLatest([observableOf(eperson), this.paginationService.getFindListOptions(this.config.id, {
currentPage: 1,
@@ -272,18 +297,25 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
}),
switchMap(([eperson, findListOptions]) => {
if (eperson != null) {
return this.groupsDataService.findAllByHref(eperson._links.groups.href, findListOptions);
return this.groupsDataService.findListByHref(eperson._links.groups.href, findListOptions, true, true, followLink('object'));
}
return observableOf(undefined);
})
);
this.canImpersonate$ = activeEPerson$.pipe(
switchMap((eperson) => this.authorizationService.isAuthorized(FeatureID.LoginOnBehalfOf, hasValue(eperson) ? eperson.self : undefined))
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);
});
}
@@ -342,10 +374,10 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
getFirstCompletedRemoteData()
).subscribe((rd: RemoteData<EPerson>) => {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.created.success', {name: ePersonToCreate.name}));
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.created.success', { name: ePersonToCreate.name }));
this.submitForm.emit(ePersonToCreate);
} else {
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.created.failure', {name: ePersonToCreate.name}));
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.created.failure', { name: ePersonToCreate.name }));
this.cancelForm.emit();
}
});
@@ -381,10 +413,10 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
const response = this.epersonService.updateEPerson(editedEperson);
response.pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData<EPerson>) => {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.edited.success', {name: editedEperson.name}));
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.edited.success', { name: editedEperson.name }));
this.submitForm.emit(editedEperson);
} else {
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.edited.failure', {name: editedEperson.name}));
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.edited.failure', { name: editedEperson.name }));
this.cancelForm.emit();
}
});
@@ -394,6 +426,107 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
}
}
/**
* Event triggered when the user changes page
* @param event
*/
onPageChange(event) {
this.updateGroups({
currentPage: event,
elementsPerPage: this.config.pageSize
});
}
/**
* Start impersonating the EPerson
*/
impersonate() {
this.authService.impersonate(this.epersonInitial.id);
this.isImpersonated = true;
}
/**
* Deletes the EPerson from the Repository. The EPerson will be the only that this form is showing.
* It'll either show a success or error message depending on whether the delete was successful or not.
*/
delete() {
this.epersonService.getActiveEPerson().pipe(take(1)).subscribe((eperson: EPerson) => {
const modalRef = this.modalService.open(ConfirmationModalComponent);
modalRef.componentInstance.dso = eperson;
modalRef.componentInstance.headerLabel = 'confirmation-modal.delete-eperson.header';
modalRef.componentInstance.infoLabel = 'confirmation-modal.delete-eperson.info';
modalRef.componentInstance.cancelLabel = 'confirmation-modal.delete-eperson.cancel';
modalRef.componentInstance.confirmLabel = 'confirmation-modal.delete-eperson.confirm';
modalRef.componentInstance.brandColor = 'danger';
modalRef.componentInstance.confirmIcon = 'fas fa-trash';
modalRef.componentInstance.response.pipe(take(1)).subscribe((confirm: boolean) => {
if (confirm) {
if (hasValue(eperson.id)) {
this.epersonService.deleteEPerson(eperson).pipe(getFirstCompletedRemoteData()).subscribe((restResponse: RemoteData<NoContent>) => {
if (restResponse.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: eperson.name }));
this.submitForm.emit();
} else {
this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + eperson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage);
}
this.cancelForm.emit();
});
}
}
});
});
}
/**
* Stop impersonating the EPerson
*/
stopImpersonating() {
this.authService.stopImpersonatingAndRefresh();
this.isImpersonated = false;
}
/**
* Sends an email to current eperson address with the information
* to reset password
*/
resetPassword() {
if (hasValue(this.epersonInitial.email)) {
this.epersonRegistrationService.registerEmail(this.epersonInitial.email).pipe(getFirstCompletedRemoteData())
.subscribe((response: RemoteData<Registration>) => {
if (response.hasSucceeded) {
this.notificationsService.success(this.translateService.get('admin.access-control.epeople.actions.reset'),
this.translateService.get('forgot-email.form.success.content', {email: this.epersonInitial.email}));
} else {
this.notificationsService.error(this.translateService.get('forgot-email.form.error.head'),
this.translateService.get('forgot-email.form.error.content', {email: this.epersonInitial.email}));
}
}
);
}
}
/**
* Cancel the current edit when component is destroyed & unsub all subscriptions
*/
ngOnDestroy(): void {
this.onCancel();
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
this.paginationService.clearPagination(this.config.id);
if (hasValue(this.emailValueChangeSubscribe)) {
this.emailValueChangeSubscribe.unsubscribe();
}
}
/**
* 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
@@ -416,90 +549,12 @@ export class EPersonFormComponent implements OnInit, OnDestroy {
}));
}
/**
* Event triggered when the user changes page
* @param event
*/
onPageChange(event) {
this.updateGroups({
currentPage: event,
elementsPerPage: this.config.pageSize
});
}
/**
* 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.groups = this.groupsDataService.findAllByHref(eperson._links.groups.href, options);
this.groups = this.groupsDataService.findListByHref(eperson._links.groups.href, options);
}));
}
/**
* Start impersonating the EPerson
*/
impersonate() {
this.authService.impersonate(this.epersonInitial.id);
this.isImpersonated = true;
}
/**
* Deletes the EPerson from the Repository. The EPerson will be the only that this form is showing.
* It'll either show a success or error message depending on whether the delete was successful or not.
*/
delete() {
this.epersonService.getActiveEPerson().pipe(take(1)).subscribe((eperson: EPerson) => {
const modalRef = this.modalService.open(ConfirmationModalComponent);
modalRef.componentInstance.dso = eperson;
modalRef.componentInstance.headerLabel = 'confirmation-modal.delete-eperson.header';
modalRef.componentInstance.infoLabel = 'confirmation-modal.delete-eperson.info';
modalRef.componentInstance.cancelLabel = 'confirmation-modal.delete-eperson.cancel';
modalRef.componentInstance.confirmLabel = 'confirmation-modal.delete-eperson.confirm';
modalRef.componentInstance.brandColor = 'danger';
modalRef.componentInstance.confirmIcon = 'fas fa-trash';
modalRef.componentInstance.response.pipe(take(1)).subscribe((confirm: boolean) => {
if (confirm) {
if (hasValue(eperson.id)) {
this.epersonService.deleteEPerson(eperson).pipe(getFirstCompletedRemoteData()).subscribe((restResponse: RemoteData<NoContent>) => {
if (restResponse.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: eperson.name }));
this.submitForm.emit();
} else {
this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + eperson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage);
}
this.cancelForm.emit();
});
}}
});
});
}
/**
* Stop impersonating the EPerson
*/
stopImpersonating() {
this.authService.stopImpersonatingAndRefresh();
this.isImpersonated = false;
}
/**
* Cancel the current edit when component is destroyed & unsub all subscriptions
*/
ngOnDestroy(): void {
this.onCancel();
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
this.paginationService.clearPagination(this.config.id);
}
/**
* 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();
}
}

View File

@@ -0,0 +1,25 @@
import { AbstractControl, ValidationErrors } from '@angular/forms';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { EPersonDataService } from '../../../../core/eperson/eperson-data.service';
import { getFirstSucceededRemoteData, } from '../../../../core/shared/operators';
export class ValidateEmailNotTaken {
/**
* This method will create the validator with the ePersonDataService requested from component
* @param ePersonDataService the service with DI in the component that this validator is being utilized.
*/
static createValidator(ePersonDataService: EPersonDataService) {
return (control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> => {
return ePersonDataService.getEPersonByEmail(control.value)
.pipe(
getFirstSucceededRemoteData(),
map(res => {
return !!res.payload ? { emailTaken: true } : null;
})
);
};
}
}

View File

@@ -2,8 +2,8 @@ import { CommonModule } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { FormControl, FormGroup, 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';
@@ -34,6 +34,8 @@ import { TranslateLoaderMock } from '../../../shared/testing/translate-loader.mo
import { RouterMock } from '../../../shared/mocks/router.mock';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { Operation } from 'fast-json-patch';
import { ValidateGroupExists } from './validators/group-exists.validator';
import { NoContent } from '../../../core/shared/NoContent.model';
describe('GroupFormComponent', () => {
let component: GroupFormComponent;
@@ -86,6 +88,9 @@ describe('GroupFormComponent', () => {
patch(group: Group, operations: Operation[]) {
return null;
},
delete(objectId: string, copyVirtualMetadata?: string[]): Observable<RemoteData<NoContent>> {
return createSuccessfulRemoteDataObject$({});
},
cancelEditGroup(): void {
this.activeGroup = null;
},
@@ -117,7 +122,69 @@ describe('GroupFormComponent', () => {
return null;
}
};
builderService = getMockFormBuilderService();
builderService = Object.assign(getMockFormBuilderService(),{
createFormGroup(formModel, options = null) {
const controls = {};
formModel.forEach( model => {
model.parent = parent;
const controlModel = model;
const controlState = { value: controlModel.value, disabled: controlModel.disabled };
const controlOptions = this.createAbstractControlOptions(controlModel.validators, controlModel.asyncValidators, controlModel.updateOn);
controls[model.id] = new FormControl(controlState, controlOptions);
});
return new FormGroup(controls, options);
},
createAbstractControlOptions(validatorsConfig = null, asyncValidatorsConfig = null, updateOn = null) {
return {
validators: validatorsConfig !== null ? this.getValidators(validatorsConfig) : null,
};
},
getValidators(validatorsConfig) {
return this.getValidatorFns(validatorsConfig);
},
getValidatorFns(validatorsConfig, validatorsToken = this._NG_VALIDATORS) {
let validatorFns = [];
if (this.isObject(validatorsConfig)) {
validatorFns = Object.keys(validatorsConfig).map(validatorConfigKey => {
const validatorConfigValue = validatorsConfig[validatorConfigKey];
if (this.isValidatorDescriptor(validatorConfigValue)) {
const descriptor = validatorConfigValue;
return this.getValidatorFn(descriptor.name, descriptor.args, validatorsToken);
}
return this.getValidatorFn(validatorConfigKey, validatorConfigValue, validatorsToken);
});
}
return validatorFns;
},
getValidatorFn(validatorName, validatorArgs = null, validatorsToken = this._NG_VALIDATORS) {
let validatorFn;
if (Validators.hasOwnProperty(validatorName)) { // Built-in Angular Validators
validatorFn = Validators[validatorName];
} else { // Custom Validators
if (this._DYNAMIC_VALIDATORS && this._DYNAMIC_VALIDATORS.has(validatorName)) {
validatorFn = this._DYNAMIC_VALIDATORS.get(validatorName);
} else if (validatorsToken) {
validatorFn = validatorsToken.find(validator => validator.name === validatorName);
}
}
if (validatorFn === undefined) { // throw when no validator could be resolved
throw new Error(`validator '${validatorName}' is not provided via NG_VALIDATORS, NG_ASYNC_VALIDATORS or DYNAMIC_FORM_VALIDATORS`);
}
if (validatorArgs !== null) {
return validatorFn(validatorArgs);
}
return validatorFn;
},
isValidatorDescriptor(value) {
if (this.isObject(value)) {
return value.hasOwnProperty('name') && value.hasOwnProperty('args');
}
return false;
},
isObject(value) {
return typeof value === 'object' && value !== null;
}
});
translateService = getMockTranslateService();
router = new RouterMock();
notificationService = new NotificationsServiceStub();
@@ -217,4 +284,114 @@ describe('GroupFormComponent', () => {
});
});
describe('check form validation', () => {
let groupCommunity;
beforeEach(() => {
groupName = 'testName';
groupCommunity = 'testgroupCommunity';
groupDescription = 'testgroupDescription';
expected = Object.assign(new Group(), {
name: groupName,
metadata: {
'dc.description': [
{
value: groupDescription
}
],
},
});
spyOn(component.submitForm, 'emit');
fixture.detectChanges();
component.initialisePage();
fixture.detectChanges();
});
describe('groupName, groupCommunity and groupDescription should be required', () => {
it('form should be invalid because the groupName is required', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.groupName.valid).toBeFalse();
expect(component.formGroup.controls.groupName.errors.required).toBeTrue();
});
}));
});
describe('after inserting information groupName,groupCommunity and groupDescription not required', () => {
beforeEach(() => {
component.formGroup.controls.groupName.setValue('test');
fixture.detectChanges();
});
it('groupName should be valid because the groupName is set', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.groupName.valid).toBeTrue();
expect(component.formGroup.controls.groupName.errors).toBeNull();
});
}));
});
describe('after already utilized groupName', () => {
beforeEach(() => {
const groupsDataServiceStubWithGroup = Object.assign(groupsDataServiceStub,{
searchGroups(query: string): Observable<RemoteData<PaginatedList<Group>>> {
return createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [expected]));
}
});
component.formGroup.controls.groupName.setValue('testName');
component.formGroup.controls.groupName.setAsyncValidators(ValidateGroupExists.createValidator(groupsDataServiceStubWithGroup));
fixture.detectChanges();
});
it('groupName should not be valid because groupName is already taken', waitForAsync(() => {
fixture.whenStable().then(() => {
expect(component.formGroup.controls.groupName.valid).toBeFalse();
expect(component.formGroup.controls.groupName.errors.groupExists).toBeTruthy();
});
}));
});
});
describe('delete', () => {
let deleteButton;
beforeEach(() => {
component.initialisePage();
component.canEdit$ = observableOf(true);
component.groupBeingEdited = {
permanent: false
} as Group;
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', () => {
beforeEach(waitForAsync(() => {
deleteButton.click();
fixture.detectChanges();
(document as any).querySelector('.modal-footer .confirm').click();
}));
it('should call GroupDataService.delete', () => {
expect(groupsDataServiceStub.delete).toHaveBeenCalledWith('active-group');
});
});
describe('if canceled via modal', () => {
beforeEach(waitForAsync(() => {
deleteButton.click();
fixture.detectChanges();
(document as any).querySelector('.modal-footer .cancel').click();
}));
it('should not call GroupDataService.delete', () => {
expect(groupsDataServiceStub.delete).not.toHaveBeenCalled();
});
});
});
});

View File

@@ -1,4 +1,4 @@
import { Component, EventEmitter, HostListener, OnDestroy, OnInit, Output } from '@angular/core';
import { Component, EventEmitter, HostListener, OnDestroy, OnInit, Output, ChangeDetectorRef } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
@@ -14,9 +14,9 @@ import {
combineLatest as observableCombineLatest,
Observable,
of as observableOf,
Subscription
Subscription,
} from 'rxjs';
import { catchError, map, switchMap, take } from 'rxjs/operators';
import { catchError, map, switchMap, take, filter, 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';
@@ -34,7 +34,8 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model';
import {
getRemoteDataPayload,
getFirstSucceededRemoteData,
getFirstCompletedRemoteData
getFirstCompletedRemoteData,
getFirstSucceededRemoteDataPayload
} from '../../../core/shared/operators';
import { AlertType } from '../../../shared/alert/aletr-type';
import { ConfirmationModalComponent } from '../../../shared/confirmation-modal/confirmation-modal.component';
@@ -44,6 +45,7 @@ import { NotificationsService } from '../../../shared/notifications/notification
import { followLink } from '../../../shared/utils/follow-link-config.model';
import { NoContent } from '../../../core/shared/NoContent.model';
import { Operation } from 'fast-json-patch';
import { ValidateGroupExists } from './validators/group-exists.validator';
@Component({
selector: 'ds-group-form',
@@ -65,6 +67,7 @@ export class GroupFormComponent implements OnInit, OnDestroy {
* Dynamic models for the inputs of form
*/
groupName: DynamicInputModel;
groupCommunity: DynamicInputModel;
groupDescription: DynamicTextAreaModel;
/**
@@ -124,17 +127,24 @@ export class GroupFormComponent implements OnInit, OnDestroy {
*/
public AlertTypeEnum = AlertType;
/**
* Subscription to email field value change
*/
groupNameValueChangeSubscribe: Subscription;
constructor(public groupDataService: GroupDataService,
private ePersonDataService: EPersonDataService,
private dSpaceObjectDataService: DSpaceObjectDataService,
private formBuilderService: FormBuilderService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private route: ActivatedRoute,
protected router: Router,
private authorizationService: AuthorizationDataService,
private modalService: NgbModal,
public requestService: RequestService) {
private ePersonDataService: EPersonDataService,
private dSpaceObjectDataService: DSpaceObjectDataService,
private formBuilderService: FormBuilderService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private route: ActivatedRoute,
protected router: Router,
private authorizationService: AuthorizationDataService,
private modalService: NgbModal,
public requestService: RequestService,
protected changeDetectorRef: ChangeDetectorRef) {
}
ngOnInit() {
@@ -160,8 +170,9 @@ export class GroupFormComponent implements OnInit, OnDestroy {
);
observableCombineLatest(
this.translateService.get(`${this.messagePrefix}.groupName`),
this.translateService.get(`${this.messagePrefix}.groupCommunity`),
this.translateService.get(`${this.messagePrefix}.groupDescription`)
).subscribe(([groupName, groupDescription]) => {
).subscribe(([groupName, groupCommunity, groupDescription]) => {
this.groupName = new DynamicInputModel({
id: 'groupName',
label: groupName,
@@ -171,6 +182,13 @@ export class GroupFormComponent implements OnInit, OnDestroy {
},
required: true,
});
this.groupCommunity = new DynamicInputModel({
id: 'groupCommunity',
label: groupCommunity,
name: 'groupCommunity',
required: false,
readOnly: true,
});
this.groupDescription = new DynamicTextAreaModel({
id: 'groupDescription',
label: groupDescription,
@@ -182,20 +200,51 @@ export class GroupFormComponent implements OnInit, OnDestroy {
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$
).subscribe(([activeGroup, canEdit]) => {
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;
this.formGroup.patchValue({
groupName: activeGroup != null ? activeGroup.name : '',
groupDescription: activeGroup != null ? activeGroup.firstMetadataValue('dc.description') : '',
});
if (!canEdit || activeGroup.permanent) {
this.formGroup.disable();
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);
}
})
);
@@ -377,7 +426,7 @@ export class GroupFormComponent implements OnInit, OnDestroy {
.subscribe((rd: RemoteData<NoContent>) => {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.messagePrefix + '.notification.deleted.success', { name: group.name }));
this.reset();
this.onCancel();
} else {
this.notificationsService.error(
this.translateService.get(this.messagePrefix + '.notification.deleted.failure.title', { name: group.name }),
@@ -390,16 +439,6 @@ export class GroupFormComponent implements OnInit, OnDestroy {
});
}
/**
* This method will ensure that the page gets reset and that the cache is cleared
*/
reset() {
this.groupDataService.getBrowseEndpoint().pipe(take(1)).subscribe((href: string) => {
this.requestService.removeByHrefSubstring(href);
});
this.onCancel();
}
/**
* Cancel the current edit when component is destroyed & unsub all subscriptions
*/
@@ -407,6 +446,11 @@ export class GroupFormComponent implements OnInit, OnDestroy {
ngOnDestroy(): void {
this.groupDataService.cancelEditGroup();
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
if ( hasValue(this.groupNameValueChangeSubscribe) ) {
this.groupNameValueChangeSubscribe.unsubscribe();
}
}
/**
@@ -417,11 +461,7 @@ export class GroupFormComponent implements OnInit, OnDestroy {
if (hasValue(group) && hasValue(group._links.object.href)) {
return this.getLinkedDSO(group).pipe(
map((rd: RemoteData<DSpaceObject>) => {
if (hasValue(rd) && hasValue(rd.payload)) {
return true;
} else {
return false;
}
return hasValue(rd) && hasValue(rd.payload);
}),
catchError(() => observableOf(false)),
);

View File

@@ -38,17 +38,22 @@
<table id="epersonsSearch" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col">{{messagePrefix + '.table.name' | translate}}</th>
<th>{{messagePrefix + '.table.edit' | translate}}</th>
<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>{{ePerson.eperson.id}}</td>
<td><a (click)="ePersonDataService.startEditingNewEPerson(ePerson.eperson)"
<td class="align-middle">{{ePerson.eperson.id}}</td>
<td class="align-middle"><a (click)="ePersonDataService.startEditingNewEPerson(ePerson.eperson)"
[routerLink]="[ePersonDataService.getEPeoplePageRouterLink()]">{{ePerson.eperson.name}}</a></td>
<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)"
@@ -91,17 +96,22 @@
<table id="ePeopleMembersOfGroup" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col">{{messagePrefix + '.table.name' | translate}}</th>
<th>{{messagePrefix + '.table.edit' | translate}}</th>
<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 (ePeopleMembersOfGroupDtos | async)?.page">
<td>{{ePerson.eperson.id}}</td>
<td><a (click)="ePersonDataService.startEditingNewEPerson(ePerson.eperson)"
<td class="align-middle">{{ePerson.eperson.id}}</td>
<td class="align-middle"><a (click)="ePersonDataService.startEditingNewEPerson(ePerson.eperson)"
[routerLink]="[ePersonDataService.getEPeoplePageRouterLink()]">{{ePerson.eperson.name}}</a></td>
<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 (click)="deleteMemberFromGroup(ePerson)"
class="btn btn-outline-danger btn-sm"

View File

@@ -53,7 +53,7 @@ describe('MembersListComponent', () => {
activeGroup: activeGroup,
epersonMembers: epersonMembers,
subgroupMembers: subgroupMembers,
findAllByHref(href: string): Observable<RemoteData<PaginatedList<EPerson>>> {
findListByHref(href: string): Observable<RemoteData<PaginatedList<EPerson>>> {
return createSuccessfulRemoteDataObject$(buildPaginatedList<EPerson>(new PageInfo(), groupsDataServiceStub.getEPersonMembers()));
},
searchByScope(scope: string, query: string): Observable<RemoteData<PaginatedList<EPerson>>> {

View File

@@ -10,7 +10,7 @@ import {
combineLatest as observableCombineLatest,
ObservedValueOf,
} from 'rxjs';
import { map, mergeMap, switchMap, take } from 'rxjs/operators';
import { defaultIfEmpty, map, mergeMap, switchMap, take } from 'rxjs/operators';
import {buildPaginatedList, PaginatedList} from '../../../../core/data/paginated-list.model';
import { RemoteData } from '../../../../core/data/remote-data';
import { EPersonDataService } from '../../../../core/eperson/eperson-data.service';
@@ -129,7 +129,7 @@ export class MembersListComponent implements OnInit, OnDestroy {
this.subs.set(SubKey.MembersDTO,
this.paginationService.getCurrentPagination(this.config.id, this.config).pipe(
switchMap((currentPagination) => {
return this.ePersonDataService.findAllByHref(this.groupBeingEdited._links.epersons.href, {
return this.ePersonDataService.findListByHref(this.groupBeingEdited._links.epersons.href, {
currentPage: currentPagination.currentPage,
elementsPerPage: currentPagination.pageSize
}
@@ -144,7 +144,7 @@ export class MembersListComponent implements OnInit, OnDestroy {
}
}),
switchMap((epersonListRD: RemoteData<PaginatedList<EPerson>>) => {
const dtos$ = observableCombineLatest(...epersonListRD.payload.page.map((member: 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();
@@ -153,8 +153,8 @@ export class MembersListComponent implements OnInit, OnDestroy {
return epersonDtoModel;
});
return dto$;
}));
return dtos$.pipe(map((dtos: EpersonDtoModel[]) => {
})]);
return dtos$.pipe(defaultIfEmpty([]), map((dtos: EpersonDtoModel[]) => {
return buildPaginatedList(epersonListRD.payload.pageInfo, dtos);
}));
}))
@@ -171,10 +171,10 @@ export class MembersListComponent implements OnInit, OnDestroy {
return this.groupDataService.getActiveGroup().pipe(take(1),
mergeMap((group: Group) => {
if (group != null) {
return this.ePersonDataService.findAllByHref(group._links.epersons.href, {
return this.ePersonDataService.findListByHref(group._links.epersons.href, {
currentPage: 1,
elementsPerPage: 9999
}, false)
})
.pipe(
getFirstSucceededRemoteData(),
getRemoteDataPayload(),
@@ -209,7 +209,6 @@ export class MembersListComponent implements OnInit, OnDestroy {
if (activeGroup != null) {
const response = this.groupDataService.deleteMemberFromGroup(activeGroup, ePerson.eperson);
this.showNotifications('deleteMember', response, ePerson.eperson.name, activeGroup);
this.search({ scope: this.currentSearchScope, query: this.currentSearchQuery });
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.noActiveGroup'));
}
@@ -274,7 +273,7 @@ export class MembersListComponent implements OnInit, OnDestroy {
}
}),
switchMap((epersonListRD: RemoteData<PaginatedList<EPerson>>) => {
const dtos$ = observableCombineLatest(...epersonListRD.payload.page.map((member: 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();
@@ -283,8 +282,8 @@ export class MembersListComponent implements OnInit, OnDestroy {
return epersonDtoModel;
});
return dto$;
}));
return dtos$.pipe(map((dtos: EpersonDtoModel[]) => {
})]);
return dtos$.pipe(defaultIfEmpty([]), map((dtos: EpersonDtoModel[]) => {
return buildPaginatedList(epersonListRD.payload.pageInfo, dtos);
}));
}))
@@ -315,7 +314,6 @@ export class MembersListComponent implements OnInit, OnDestroy {
response.pipe(getFirstCompletedRemoteData()).subscribe((rd: RemoteData<any>) => {
if (rd.hasSucceeded) {
this.notificationsService.success(this.translateService.get(this.messagePrefix + '.notification.success.' + messageSuffix, { name: nameObject }));
this.ePersonDataService.clearLinkRequests(activeGroup._links.epersons.href);
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.' + messageSuffix, { name: nameObject }));
}

View File

@@ -35,17 +35,19 @@
<table id="groupsSearch" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col">{{messagePrefix + '.table.name' | translate}}</th>
<th>{{messagePrefix + '.table.edit' | translate}}</th>
<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>{{group.id}}</td>
<td><a (click)="groupDataService.startEditingNewGroup(group)"
<td class="align-middle">{{group.id}}</td>
<td class="align-middle"><a (click)="groupDataService.startEditingNewGroup(group)"
[routerLink]="[groupDataService.getGroupEditPageRouterLink(group)]">{{group.name}}</a></td>
<td>
<td class="align-middle">{{(group.object | async)?.payload?.name}}</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button *ngIf="(isSubgroupOfGroup(group) | async) && !(isActiveGroup(group) | async)"
(click)="deleteSubgroupFromGroup(group)"
@@ -88,17 +90,19 @@
<table id="subgroupsOfGroup" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{messagePrefix + '.table.id' | translate}}</th>
<th scope="col">{{messagePrefix + '.table.name' | translate}}</th>
<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>{{messagePrefix + '.table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let group of (subGroups$ | async)?.payload?.page">
<td>{{group.id}}</td>
<td><a (click)="groupDataService.startEditingNewGroup(group)"
<td class="align-middle">{{group.id}}</td>
<td class="align-middle"><a (click)="groupDataService.startEditingNewGroup(group)"
[routerLink]="[groupDataService.getGroupEditPageRouterLink(group)]">{{group.name}}</a></td>
<td>
<td class="align-middle">{{(group.object | async)?.payload?.name}}</td>
<td class="align-middle">
<div class="btn-group edit-field">
<button (click)="deleteSubgroupFromGroup(group)"
class="btn btn-outline-danger btn-sm deleteButton"

View File

@@ -65,7 +65,7 @@ describe('SubgroupsListComponent', () => {
getSubgroups(): Group {
return this.activeGroup;
},
findAllByHref(href: string): Observable<RemoteData<PaginatedList<Group>>> {
findListByHref(href: string): Observable<RemoteData<PaginatedList<Group>>> {
return this.subgroups$.pipe(
map((currentGroups: Group[]) => {
return createSuccessfulRemoteDataObject(buildPaginatedList<Group>(new PageInfo(), currentGroups));

View File

@@ -17,6 +17,7 @@ import { NotificationsService } from '../../../../shared/notifications/notificat
import { PaginationComponentOptions } from '../../../../shared/pagination/pagination-component-options.model';
import { NoContent } from '../../../../core/shared/NoContent.model';
import { PaginationService } from '../../../../core/pagination/pagination.service';
import { followLink } from '../../../../shared/utils/follow-link-config.model';
/**
* Keys to keep track of specific subscriptions
@@ -114,10 +115,13 @@ export class SubgroupsListComponent implements OnInit, OnDestroy {
this.subs.set(
SubKey.Members,
this.paginationService.getCurrentPagination(this.config.id, this.config).pipe(
switchMap((config) => this.groupDataService.findAllByHref(this.groupBeingEdited._links.subgroups.href, {
switchMap((config) => this.groupDataService.findListByHref(this.groupBeingEdited._links.subgroups.href, {
currentPage: config.currentPage,
elementsPerPage: config.pageSize
}
},
true,
true,
followLink('object')
))
).subscribe((rd: RemoteData<PaginatedList<Group>>) => {
this.subGroups$.next(rd);
@@ -135,7 +139,7 @@ export class SubgroupsListComponent implements OnInit, OnDestroy {
if (activeGroup.uuid === possibleSubgroup.uuid) {
return observableOf(false);
} else {
return this.groupDataService.findAllByHref(activeGroup._links.subgroups.href, {
return this.groupDataService.findListByHref(activeGroup._links.subgroups.href, {
currentPage: 1,
elementsPerPage: 9999
})
@@ -217,7 +221,8 @@ export class SubgroupsListComponent implements OnInit, OnDestroy {
switchMap((config) => this.groupDataService.searchGroups(this.currentSearchQuery, {
currentPage: config.currentPage,
elementsPerPage: config.pageSize
}))
}, true, true, followLink('object')
))
).subscribe((rd: RemoteData<PaginatedList<Group>>) => {
this.searchResults$.next(rd);
}));

View File

@@ -0,0 +1,33 @@
import { AbstractControl, ValidationErrors } from '@angular/forms';
import { Observable } from 'rxjs';
import { map} from 'rxjs/operators';
import { GroupDataService } from '../../../../core/eperson/group-data.service';
import { getFirstSucceededRemoteListPayload } from '../../../../core/shared/operators';
import { Group } from '../../../../core/eperson/models/group.model';
export class ValidateGroupExists {
/**
* This method will create the validator with the groupDataService requested from component
* @param groupDataService the service with DI in the component that this validator is being utilized.
* @return Observable<ValidationErrors | null>
*/
static createValidator(groupDataService: GroupDataService) {
return (control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> => {
return groupDataService.searchGroups(control.value, {
currentPage: 1,
elementsPerPage: 100
})
.pipe(
getFirstSucceededRemoteListPayload(),
map( (groups: Group[]) => {
return groups.filter(group => group.name === control.value);
}),
map( (groups: Group[]) => {
return groups.length > 0 ? { groupExists: true } : null;
}),
);
};
}
}

View File

@@ -1,3 +1,4 @@
/* eslint-disable max-classes-per-file */
import { Action } from '@ngrx/store';
import { Group } from '../../core/eperson/models/group.model';
import { type } from '../../shared/ngrx/type';
@@ -16,7 +17,6 @@ export const GroupRegistryActionTypes = {
CANCEL_EDIT_GROUP: type('dspace/epeople-registry/CANCEL_EDIT_GROUP'),
};
/* tslint:disable:max-classes-per-file */
/**
* Used to edit a Group in the Group registry
*/
@@ -37,7 +37,6 @@ export class GroupRegistryCancelGroupAction implements Action {
type = GroupRegistryActionTypes.CANCEL_EDIT_GROUP;
}
/* tslint:enable:max-classes-per-file */
/**
* Export a type alias of all actions in this action group

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