Compare commits

...

1934 Commits

Author SHA1 Message Date
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
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
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
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
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
Tim Donohue
9fc7b57157 Correct year in LICENSE 2021-07-29 12:55:59 -05:00
Tim Donohue
f0474ce2f2 Merge branch 'main' of github.com:DSpace/dspace-angular 2021-07-29 12:50:42 -05:00
Tim Donohue
3664a06d8b Update README for 7.0. Sync some sections with DSpace/DSpace 2021-07-29 12:50:15 -05:00
José Carvalho
85ae3da0c0 Update en.json5
removed strings not used
2021-07-29 18:46:28 +01:00
Tim Donohue
232b457eff Merge pull request #1264 from josekarvalho/patch-1
Update pt-PT.json5
2021-07-29 12:37:04 -05: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
José Carvalho
681fa3cbe9 Update pt-PT.json5
Update additional strings
2021-07-29 15:16:11 +01:00
Tim Donohue
47302acf66 Merge pull request #1282 from tdonohue/test_ssr_working
SEO + SSR fixes: Fix <meta> tag syntax and add a basic test that SSR is working
2021-07-26 15:49:47 -05:00
Tim Donohue
91bb5e2fd4 Add a basic SSR test to GitHub CI 2021-07-26 15:15:03 -05:00
Tim Donohue
7fcd055458 Meta tags should use "name" not "property" attribute, as "name" is HTML5 2021-07-26 15:14:36 -05:00
Tim Donohue
4292af4294 Merge pull request #1280 from atmire/fix-first-request-issue
Fix issue where the app wouldn't load for the first request in prod mode
2021-07-26 10:03:08 -05:00
Art Lowel
8ee12868aa deal with errors that aren't error responses 2021-07-26 13:38:40 +02:00
Art Lowel
8f43fbd399 check if correlationid exists before adding it as a header 2021-07-26 11:54:25 +02:00
Tim Donohue
e9a03994e2 Merge pull request #1278 from atmire/remove-plus-from-folders
Update folder structure based on style guide
2021-07-23 11:28:38 -05:00
Art Lowel
acf2b0ee57 switch scss imports back to relative paths 2021-07-23 17:59:57 +02:00
Art Lowel
1c5bfbac24 remove a missed plus sign 2021-07-23 17:41:42 +02:00
Tim Donohue
9483e3ff2c Merge pull request #1277 from atmire/test-date-timezone-issue
Fix timezone issue with test dates
2021-07-23 10:19:46 -05:00
Art Lowel
124845bee1 update folder structure based on style guide 2021-07-23 17:18:51 +02:00
Art Lowel
3c1263ada6 fix timezone issue with test dates 2021-07-23 16:30:25 +02:00
Tim Donohue
fa02d1efe6 Merge pull request #1276 from atmire/remove-unused-config-params
Remove unused config params
2021-07-22 14:57:01 -05:00
Art Lowel
d0771715b6 add prototcol to origin in ServerHardRedirectService 2021-07-22 18:48:06 +02:00
Art Lowel
03f6f75e49 remove unused config params and related methods 2021-07-22 17:59:10 +02:00
Art Lowel
146ec49a32 Merge pull request #1275 from 4Science/#1273_no_js_issue
#1273 no js issue
2021-07-22 10:14:46 +02:00
Tim Donohue
2f6501f1af Merge pull request #1242 from atmire/w2p-80141_Support-for-legacy-bitstream-download-urls
Add support for legacy bitstream download URLs
2021-07-21 09:10:15 -05:00
Giuseppe Digilio
85fa1c5a9c move effect for cleaning cache to auth.effects 2021-07-21 09:46:15 +02:00
Tim Donohue
b33c859d67 Merge pull request #1254 from 4Science/#1206
Improve error handling during submission
2021-07-20 13:39:17 -05:00
Tim Donohue
83d61a5929 Merge pull request #1255 from 4Science/#1248
Improve logging Angular implementation
2021-07-20 11:03:30 -05:00
Giuseppe Digilio
d3fe33a837 Address feedback 2021-07-20 11:54:25 +02:00
José Carvalho
580a67a18d Update pt-PT.json5
Update some strings and add new ones to support OpenAIRE 4.0 guidelines compatibility (by naming relationships)
2021-07-20 10:33:03 +01:00
Giuseppe Digilio
f7ebffec45 Merge remote-tracking branch 'origin/main' into #1206
# Conflicts:
#	src/app/submission/form/submission-upload-files/submission-upload-files.component.spec.ts
#	src/app/submission/form/submission-upload-files/submission-upload-files.component.ts
2021-07-20 11:26:06 +02:00
Giuseppe Digilio
b04c33a5fb Invalidate authorization requests cache on REHYDRATE 2021-07-20 11:02:02 +02:00
Tim Donohue
8b88e7f4cd Merge pull request #1252 from 4Science/#1171
Fix accessibility issues #1172 #1167  #1171
2021-07-19 14:13:35 -05:00
Giuseppe Digilio
6cadae4e7f Fix missing button title 2021-07-19 19:19:50 +02:00
Giuseppe Digilio
aaae62de5f remove unnecessary aria-label 2021-07-19 19:19:25 +02:00
Giuseppe Digilio
fbde0cbad9 Revert "[CSTPER-144] Fixed issue with authorization request encountered while logging-in with external idp"
This reverts commit 73a9fe16
2021-07-19 17:54:02 +02:00
Tim Donohue
88c591054f Merge pull request #1250 from 4Science/CST-4319
Cannot map new items with Collection Admin
2021-07-15 15:14:18 -05:00
Giuseppe Digilio
d6990b3cd1 Add keyup event for selecting a new language from lang dropdown 2021-07-15 11:02:33 +02:00
Tim Donohue
73e70e6546 Merge pull request #1269 from 4Science/submission-footer-improvement
improve positioning of buttons in the submission form
2021-07-13 11:18:06 -05:00
Tim Donohue
6fc8ef6b50 Merge pull request #1262 from tdonohue/date_fixes
Ensure we are always using UTC dates in the UI, as the backend expects/uses UTC-based dates
2021-07-13 09:06:08 -05:00
Michael Spalti
de352a839e Retrieve thumbnail from remote data object. 2021-07-12 09:53:17 -07:00
Tim Donohue
008e0cb66c Another small fix from @atarix83 2021-07-12 11:47:53 -05:00
Tim Donohue
9ee733ea80 Stop using localized Dates. Ensure we always use UTC dates, as the backend expects/uses UTC. 2021-07-12 10:11:55 -05:00
Tim Donohue
6d13ba42c6 Fix saving of dates to UTC 2021-07-12 10:11:54 -05:00
Giuseppe Digilio
9ef4a11771 fix test 2021-07-12 16:19:03 +02:00
Giuseppe Digilio
aac9f02447 fix test 2021-07-12 15:04:06 +02:00
Giuseppe Digilio
5185c90ad6 improve positioning of buttons in the submission form 2021-07-12 14:31:24 +02:00
Giuseppe Digilio
ff6f6fea33 fix issue with Hierarchical vocabulary onebox toggle 2021-07-12 11:54:36 +02:00
José Carvalho
ae1d462bec Update pt-PT.json5
Added additional corrections. The strings until line 44 where not in the file to be translated.  After checking our DSpace 7 instance they where missing so we added. It's fine by now to be included in DSpace 7.0.
2021-07-12 09:56:14 +01:00
Michael Spalti
9c41cd7f8f Merge branch 'main' into iiif-mirador 2021-07-11 07:37:03 -07:00
Art Lowel
98cecd3e84 Merge pull request #1249 from 4Science/CST-4320
No way to view an Item when in simple "Approve/Reject" workflow stage
2021-07-09 09:34:41 +02:00
Giuseppe Digilio
28707f9a4c fix issue with misaligned loading icon on tag field 2021-07-08 20:33:43 +02:00
Giuseppe Digilio
9875b61082 fix issue with wrong fontawesome icon that show odd char on firefox 2021-07-08 20:22:51 +02:00
Giuseppe Digilio
d30fdb1db7 fix issue with aria-expanded attribute that is invalid on input 2021-07-08 20:19:07 +02:00
Giuseppe Digilio
eae89e1be0 fix issue with missing aria label 2021-07-08 19:37:39 +02:00
Giuseppe Digilio
ab73bf87b0 fix issue with dropdowns key accessibility 2021-07-08 18:10:43 +02:00
Giuseppe Digilio
186e420db5 fix issue with not unique ids 2021-07-08 17:46:04 +02:00
Alessandro Martelli
de2ba413a1 [CSTPER-4320] fixed back button for accessibility 2021-07-08 17:16:13 +02:00
Giuseppe Digilio
3b264015cb Merge remote-tracking branch 'origin/main' into #1171
# Conflicts:
#	src/app/submission/sections/upload/file/section-upload-file.component.html
2021-07-08 17:09:01 +02:00
Giuseppe Digilio
2bd68b0585 fix issue with ssr 2021-07-08 17:06:02 +02:00
Alessandro Martelli
cf7d1ed108 Merge branch 'main' into CST-4320
# Conflicts:
#	src/assets/i18n/en.json5
2021-07-08 16:02:52 +02:00
Giuseppe Digilio
9607a5248b Merge remote-tracking branch 'origin/main' into #1248 2021-07-08 15:30:34 +02:00
Art Lowel
d55ae48e4a Merge pull request #1239 from atmire/Fix-hardcoded-submission-section-IDs
Fix hardcoded submission section IDs
2021-07-08 15:14:47 +02:00
Art Lowel
2c8d72b971 Merge pull request #1240 from atmire/w2p-79700_Improve-session-timeout-UX
Improve session timeout UX
2021-07-08 13:27:41 +02:00
Yura Bondarenko
bfcff12499 Fix hardcoded reference to 'upload' section 2021-07-07 18:05:26 +02:00
Alessandro Martelli
dbb4d08ca0 [CST-4320] back button standardized style 2021-07-07 16:28:27 +02:00
Alessandro Martelli
3d6cacadff [CST-4320] fixed item version component initialization 2021-07-07 16:09:19 +02:00
Alessandro Martelli
f5cd878096 [CST-4320] resolved merge conflicts 2021-07-05 16:01:32 +02:00
Alessandro Martelli
0212df5bd1 Merge branch 'main' into CST-4320
# Conflicts:
#	src/app/+item-page/full/full-item-page.component.ts
2021-07-05 15:56:40 +02:00
Alessandro Martelli
111170e7d4 [CST-4320] workflow item view resolved as full item page 2021-07-05 15:47:58 +02:00
Tim Donohue
873feb9cfe Merge pull request #1266 from 4Science/submission-bitstream-download
fix bitstream download during submission
2021-07-02 14:19:36 -05:00
Yura Bondarenko
8736c0b572 Add unit tests for SectionsService#isSectionType 2021-07-02 18:12:18 +02:00
Tim Donohue
1dba4c55f5 Merge pull request #1228 from atmire/w2p-79768_fix-issues-with-meta-tags
Fix issues with meta tags
2021-07-02 10:00:50 -05:00
Yura Bondarenko
7670ba8a43 Fix duplicate notifications 2021-07-02 14:26:58 +02:00
Yura Bondarenko
a3ba4e59b3 Fix lint issues 2021-07-02 14:26:58 +02:00
Yura Bondarenko
72e97ca6b4 Update unit tests 2021-07-02 14:26:58 +02:00
Yura Bondarenko
32003a72fd Fix hardcoded submission section IDs 2021-07-02 14:26:57 +02:00
Yana De Pauw
5b869cce46 80141: Add support for legacy bitstream download URLs 2021-07-02 14:12:07 +02:00
Giuseppe Digilio
c190cdc9bd fix comment 2021-07-02 13:53:11 +02:00
Giuseppe Digilio
badf901361 Use ds-file-download-link component to allow bitstream download during submission 2021-07-02 13:46:17 +02:00
José Carvalho
97144f74da Update pt-PT.json5
Big update of the translation to Portuguese
2021-07-02 12:14:17 +01:00
Giuseppe Digilio
193de508cd Merge remote-tracking branch 'origin/main' into #1206
# Conflicts:
#	src/app/submission/edit/submission-edit.component.ts
2021-07-02 13:12:04 +02:00
Giuseppe Digilio
5fd30e1be9 Merge remote-tracking branch 'origin/main' into #1171 2021-07-02 13:10:50 +02:00
Yura Bondarenko
a91f16ed62 79768: Fix followLink syntax 2021-07-01 23:11:57 +02:00
Yura Bondarenko
711abfca35 Merge branch 'main' into w2p-79768_fix-issues-with-meta-tags 2021-07-01 22:55:29 +02:00
Yura Bondarenko
5ed41b3f9b 79768: Fix unused imports & lint issue 2021-07-01 22:47:26 +02:00
Yura Bondarenko
8caa916316 79768: Fix typo 2021-07-01 22:37:55 +02:00
Yura Bondarenko
fb8f28f17d 79768: Update & add MetadataService unit tests 2021-07-01 22:37:07 +02:00
Yura Bondarenko
50400895de 79768: Add unit tests for metaTagReducer 2021-07-01 22:36:08 +02:00
Tim Donohue
0ee451f3d3 Merge pull request #1247 from atmire/w2p-80195_Fix-move-item-page
Fix move item page
2021-07-01 10:13:00 -05:00
Tim Donohue
8ad8824e3a Merge pull request #1233 from 4Science/#1129
Add possibility to edit embargo on bitstream of archived Item
2021-07-01 10:11:44 -05:00
Marie Verdonck
1721ba5ddf Icon changes & fix after rebase 2021-07-01 16:19:31 +02:00
Marie Verdonck
6c219e72d5 79700: Doc fixes, Spec tests authService & ariaLabelledBy for idle-modal 2021-07-01 15:52:12 +02:00
Marie Verdonck
829ce12710 lgtm alerts 2021-07-01 15:52:12 +02:00
Marie Verdonck
ddcb27da3f 79700: logout via store, automatic redirect 2021-07-01 15:52:12 +02:00
Marie Verdonck
c696b78393 79700: idle time and grace period testing times removed 2021-07-01 15:52:12 +02:00
Marie Verdonck
4b1f086469 79700: Feedback 2021-06-15 applied 2021-07-01 15:52:12 +02:00
Art Lowel
91b4c81986 run idle timer outside of angular zone 2021-07-01 15:52:12 +02:00
Marie Verdonck
e88baa1995 79700: specs for modal, auth check for idleness tracking & stop blocking at token success 2021-07-01 15:52:12 +02:00
Marie Verdonck
38387d1a0f 79700: Tracking idleness & idle modal 2021-07-01 15:52:12 +02:00
Marie Verdonck
b23522d39f 79700: Auto-refreshing the token & Needed config 2021-07-01 15:51:23 +02:00
Art Lowel
c86f163cb7 move tagstore to ngrx 2021-07-01 11:36:12 +02:00
Tim Donohue
de8e306d9f Merge pull request #1244 from 4Science/#1179
[CSTPER-144] Fixed issue with authorization request encountered while logging-in with shibboleth
2021-06-30 16:05:19 -05:00
Tim Donohue
c46abae264 Merge pull request #1261 from atmire/w2p-80369_Use-thumbnail-links-for-Items-and-Bitstreams
Use thumbnail links for items and bitstreams
2021-06-30 14:30:32 -05:00
Tim Donohue
a14230afcc Merge pull request #1251 from 4Science/1217
Delete pending json patch operations
2021-06-30 09:02:31 -05:00
Art Lowel
03e2e30510 fix issue where meta tags wouldn't be updated properly based on the route 2021-06-30 14:21:43 +02:00
Yura Bondarenko
fedf6aa847 80369: Fix unused imports 2021-06-29 21:18:06 +02:00
Yura Bondarenko
7bb32f31de Merge remote-tracking branch 'upstream/main' into w2p-80369_Use-thumbnail-links-for-Items-and-Bitstreams 2021-06-29 18:03:57 +02:00
Yura Bondarenko
abf6d26641 80369: Remove unneeded bundles followLink 2021-06-29 17:34:00 +02:00
Yura Bondarenko
b0599fa27c 80195: Fix ItemMoveComponent unit tests 2021-06-29 09:56:29 +02:00
Yura Bondarenko
72a6754245 80195: Fix breadcrumbs not updating 2021-06-29 09:14:17 +02:00
Tim Donohue
e6c2680d2f Merge pull request #1253 from 4Science/#1234
Fix issue when switching submission's collection between those with different submission definition
2021-06-28 16:28:23 -05:00
Tim Donohue
87e458bc0f Merge pull request #1246 from atmire/w2p-80233_add-pagination-to-edit-relationships-tab
Add pagination to edit relationships tab
2021-06-28 13:46:28 -05:00
Yura Bondarenko
eb0b3ae5f4 80369: Add optional thumbnail followLink in SearchComponent 2021-06-28 12:51:57 +02:00
Yura Bondarenko
c1b1cb2a27 80369: Remove deprecated front-end thumbnail methods 2021-06-28 12:42:53 +02:00
Yura Bondarenko
d21d0eae55 80369: Add followLinks for thumbnail 2021-06-28 12:42:51 +02:00
Yura Bondarenko
acff2186b4 80369: Add thumbnail link to Item & Bitstream models 2021-06-28 12:40:39 +02:00
Art Lowel
0d5fc8a1c0 refactor followlinks to use a single object for all params and add an isOptional param. Also add support for embedding links to search service 2021-06-28 12:28:59 +02:00
Tim Donohue
7714ef47c8 Merge pull request #1245 from 4Science/#1122
Disable community/collection delete button while the delete operation is being processed
2021-06-25 17:14:09 -05:00
Tim Donohue
ff0291d346 Merge pull request #1222 from atmire/w2p-79730_Fix-search-sidebar-a11y-issues
Fix search sidebar a11y issues
2021-06-25 16:56:09 -05:00
Tim Donohue
c33e3909b9 Merge pull request #1201 from 4Science/#1110
Fixes for submission forms bugs
2021-06-25 14:44:13 -05:00
Giuseppe Digilio
75d641dc82 Create a new log interceptor with the scope to attach new X-CORRELATION-ID and X-REFERRER headers 2021-06-25 16:06:07 +02:00
Giuseppe Digilio
ac7c038703 Fix tests 2021-06-25 15:31:23 +02:00
Giuseppe Digilio
4d12236930 Fix visualization of error in date field 2021-06-25 15:24:31 +02:00
Giuseppe Digilio
44d2310cdb Changes in order to keep server side validation errors into the submission form state 2021-06-25 15:23:56 +02:00
Giuseppe Digilio
0724692d40 Merge remote-tracking branch 'origin/main' into #1206 2021-06-25 14:18:26 +02:00
Giuseppe Digilio
a089e662fb fix issue with date picker that didn't save the date entered manually 2021-06-25 14:08:21 +02:00
Yura Bondarenko
98b2c75a3c 79730: Add unit tests for sequence service & ds-search-filter IDs 2021-06-25 10:00:21 +02:00
Yura Bondarenko
24ffa6c63a 79730: Replace component ID with unique number 2021-06-25 09:32:45 +02:00
Tim Donohue
980d6a6154 Merge pull request #1237 from atmire/w2p-bugfix-issue-1124-access-control-section-visible-to-non-admin-users
Access Control - Groups only editable by Com/Col admin if group related to com/col & Only site admin access to access control epeople
2021-06-24 13:47:20 -05:00
Bruno Roemers
511a2e18ab 80113: Display loading indicator after using pagination nav 2021-06-24 19:50:39 +02:00
Bruno Roemers
fc398c15f4 80113: Rename searching$ into loading$ 2021-06-24 19:44:06 +02:00
Giuseppe Digilio
434ef5628f [DSC-130] Fix issue when switching submission's collection between those with different submission definition 2021-06-24 18:52:00 +02:00
Giuseppe Digilio
714b713134 fix failed tests 2021-06-24 18:47:27 +02:00
Giuseppe Digilio
f8e4b770e8 fix a11y issue with drag and drop 2021-06-24 18:35:30 +02:00
Tim Donohue
1187edb486 Merge pull request #1219 from atmire/w2p-79597_Fix-thumbnail-a11y-issues
Fix thumbnail a11y issues
2021-06-24 10:24:44 -05:00
Giuseppe Digilio
b03c7fbe4d fix a11y issue with delete community/collection logo 2021-06-24 17:20:35 +02:00
Giuseppe Digilio
3bc5737f6d fix a11y issue with item edit metadata 2021-06-24 17:20:12 +02:00
Alessandro Martelli
da4be7b57f [DSC-76] Delete pending json patch operations 2021-06-24 17:13:58 +02:00
Tim Donohue
0dee03e0bc Merge pull request #1243 from DSpace/missing-i18n-key
Add missing i18n key for Sherpa Journals by ISSN
2021-06-24 09:58:53 -05:00
Alessandro Martelli
8be77017e9 [CST-4319] Corrected test assertion 2021-06-24 16:57:41 +02:00
Alessandro Martelli
4b11a2f1c1 [CST-4320] Added missing translations 2021-06-24 16:38:59 +02:00
Alessandro Martelli
3795ab0495 [CST-4319] Cannot map new items with Collection Admin 2021-06-24 16:24:18 +02:00
Giuseppe Digilio
71c36f59af fix issue with navbar issues 2021-06-24 15:38:27 +02:00
Alessandro Martelli
67ce3e6741 [CST-4320] No way to view an Item when in simple "Approve/Reject" workflow stage 2021-06-24 15:34:11 +02:00
Alessandro Martelli
a572b0acea [CST-4320] No way to view an Item when in simple "Approve/Reject" workflow stage 2021-06-24 15:28:26 +02:00
Giuseppe Digilio
dccf04d4c0 fix issue with wrong aria-labels 2021-06-24 14:53:06 +02:00
Giuseppe Digilio
b4cd7bdf26 fix issue with submission section missing elements 2021-06-24 14:47:35 +02:00
Giuseppe Digilio
2681a31e87 fix issue with comboboxes 2021-06-24 14:30:46 +02:00
Giuseppe Digilio
601bd5e922 fix issue with elements with missing/wrong role 2021-06-24 14:23:06 +02:00
Giuseppe Digilio
606915f39a fix issue with elements with missing name/label 2021-06-24 13:04:41 +02:00
Giuseppe Digilio
56487a44f3 fix issue with elements not accessible with Keyboard navigation 2021-06-24 12:49:41 +02:00
Giuseppe Digilio
4b6a0d8aa2 fix issue with missing labels in the mydspace page 2021-06-24 12:05:00 +02:00
Yura Bondarenko
a48e77810d 80195: Fix unused import 2021-06-24 12:01:05 +02:00
Giuseppe Digilio
3ca1e61a8c fix issue with missing labels in the submission form 2021-06-24 11:58:41 +02:00
Art Lowel
7dc4609a83 add getFirstCompletedRemoteData, remove force redownload of owningcollection 2021-06-24 11:16:38 +02:00
Giuseppe Digilio
396393e9b7 fix issue with multiple elements in the submission form that use the same ID 2021-06-24 11:09:25 +02:00
Giuseppe Digilio
217f7b5b21 fix issue with the aria-multiline attribute that is invalid on combobox role 2021-06-24 10:56:13 +02:00
Giuseppe Digilio
ea2030666c fix issue with aria-expanded attribute that is invalid on input 2021-06-24 10:55:46 +02:00
Tim Donohue
f6c48494b9 Merge pull request #1241 from atmire/w2p-80154_Fix-contrast-issues-with-grays
Fix contrast issues with grays
2021-06-23 14:05:31 -05:00
Yura Bondarenko
290abf7c43 80195: Fix unit tests 2021-06-23 18:39:15 +02:00
Yura Bondarenko
84274c3911 80195: Fix ItemMoveComponent#moveToCollection 2021-06-23 18:08:52 +02:00
Tim Donohue
c1ddf7f667 Add production warning 2021-06-23 10:55:22 -05:00
Art Lowel
04f4a25870 fix an issue where the results of a dso-selector wouldn't update until you clicked anywhere on the page 2021-06-23 17:28:36 +02:00
Art Lowel
2599068ccd add a focus style for truncatable parts 2021-06-23 17:27:23 +02:00
Art Lowel
b586a264ca ensure dynamic components are updated when their inputs change 2021-06-23 17:27:01 +02:00
Bruno Roemers
4c1a72fdb2 80233: Apply Art's feedback 2021-06-23 15:39:53 +02:00
Yura Bondarenko
c825f911f5 80195: Mimic back/save/discard buttons of other edit pages 2021-06-23 15:31:13 +02:00
Yura Bondarenko
86cd7ba03f 80195: Select original owningCollection on load 2021-06-23 15:29:24 +02:00
Art Lowel
f683d1219e make truncatable css global to ensure it adapts to the theme 2021-06-23 13:43:10 +02:00
Giuseppe Digilio
10aa2e14f1 Merge remote-tracking branch 'origin/#1110' into #1129 2021-06-23 12:54:44 +02:00
Giuseppe Digilio
fba5504dd9 fix issue while editing bitstream with an existing access condition 2021-06-23 12:42:32 +02:00
Yura Bondarenko
2c19d80a16 80195: Refresh moved Item's owningCollection before redirecting 2021-06-23 12:06:11 +02:00
Giuseppe Digilio
421c37f010 Disable community/collection delete button while the delete operation is being processed 2021-06-23 11:46:32 +02:00
Yura Bondarenko
0ac9d58194 80195: Update ItemMoveComponent unit tests 2021-06-23 11:35:37 +02:00
Yura Bondarenko
1407ea85d7 80195: Fix move request handling 2021-06-23 11:29:11 +02:00
Yura Bondarenko
b2c002057e 80195: Replace input suggestions with collection selector 2021-06-23 11:07:51 +02:00
Giuseppe Digilio
73a9fe16c5 [CSTPER-144] Fixed issue with authorization request encountered while logging-in with external idp 2021-06-23 10:41:54 +02:00
Tim Donohue
ddb7d5181f Merge pull request #1210 from DSpace/dependabot/npm_and_yarn/dns-packet-1.3.4
Bump dns-packet from 1.3.1 to 1.3.4
2021-06-22 14:46:29 -05:00
Tim Donohue
720126647c Add missing i18n key 2021-06-22 14:42:57 -05:00
Bruno Roemers
627b271d3b 80233: Write tests for pagination 2021-06-22 18:53:28 +02:00
Tim Donohue
3d4f493f9f Merge pull request #1221 from atmire/move-header-changes-to-dspace-theme
Move header changes to dspace theme
2021-06-22 09:15:22 -05:00
Bruno Roemers
c5689df73d 80233: Add required providers to test 2021-06-22 16:08:02 +02:00
Bruno Roemers
45ad6b6f0b 80233: Use correct relationship direction 2021-06-22 16:06:49 +02:00
Yura Bondarenko
a617e04290 80154: Change badge-light to badge-info 2021-06-22 09:09:39 +02:00
Art Lowel
d9a8b8f3fd add pagination to edit relationships tab 2021-06-21 16:18:12 +02:00
Yura Bondarenko
7c609820b1 80154: Fix semicolon placement 2021-06-18 15:42:07 +02:00
Yura Bondarenko
3a8e658d54 80154: Keep using Bootstrap variables 2021-06-18 15:24:16 +02:00
Tim Donohue
e546a4f0b5 Merge pull request #1225 from atmire/issue-1224-workflow-rejection-reason-not-properly-encoded
Workflow rejection reasons are not properly encoded
2021-06-17 15:58:04 -05:00
Tim Donohue
cfd6512856 Merge pull request #1230 from atmire/w2p-80103_Fix-admin-sidebar-link-a11y-issues
Fix admin sidebar link a11y issues
2021-06-17 15:48:54 -05:00
Tim Donohue
4b541a166f Merge pull request #1204 from DSpace/dependabot/npm_and_yarn/browserslist-4.16.6
Bump browserslist from 4.16.0 to 4.16.6
2021-06-17 15:02:38 -05:00
Yura Bondarenko
f3faa0df2c 80154: Revert to default Bootstrap grays 2021-06-17 16:58:00 +02:00
Yura Bondarenko
8085885da4 79730: Move aria-label from span to button 2021-06-17 14:05:57 +02:00
dependabot[bot]
aa5a395d91 Bump browserslist from 4.16.0 to 4.16.6
Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.16.0 to 4.16.6.
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.16.0...4.16.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-16 20:57:10 +00:00
dependabot[bot]
f20b139841 Bump dns-packet from 1.3.1 to 1.3.4
Bumps [dns-packet](https://github.com/mafintosh/dns-packet) from 1.3.1 to 1.3.4.
- [Release notes](https://github.com/mafintosh/dns-packet/releases)
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v1.3.1...v1.3.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-16 20:56:35 +00:00
Tim Donohue
700afc2709 Create a SECURITY.md to document security policies 2021-06-16 12:03:30 -05:00
Marie Verdonck
cf515fe6f0 80113: Prevent anyone but site admin from accessing /access-control/epeople 2021-06-16 16:49:57 +02:00
Tim Donohue
166784b7f2 Merge pull request #1235 from tdonohue/fix_1231
Fix incorrect i18n tags in Collection Delete page
2021-06-16 09:15:40 -05:00
Art Lowel
b556234207 add aria and alt attributes to base header as well 2021-06-16 13:05:03 +02:00
Tim Donohue
98598a53d9 Fix incorrect i18n tags 2021-06-15 14:30:18 -05:00
Tim Donohue
f0ae00e7df Merge pull request #1211 from 4Science/CST-4223
Creating a new submission should redirect to workspaceitem edit page
2021-06-15 14:28:38 -05:00
Bruno Roemers
3fc44f6fc1 80113: Write tests for GroupsRegistryComponent 2021-06-15 19:38:33 +02:00
Bruno Roemers
3b07738d4d 80113: Write tests for GroupPageGuard 2021-06-15 18:43:50 +02:00
Bruno Roemers
3bc031ff00 80113: Create Group Page guard 2021-06-15 17:17:44 +02:00
Bruno Roemers
a69a4e9696 80113: Set ableToEdit on GroupDTOModel 2021-06-15 15:40:35 +02:00
Giuseppe Digilio
b85ebb2791 Merge remote-tracking branch 'origin/main' into #1129 2021-06-15 11:32:21 +02:00
Giuseppe Digilio
28c0c38d0d Merge remote-tracking branch 'origin/main' into #1110 2021-06-14 17:27:07 +02:00
Yana De Pauw
15e45c3dec 80103: Fix admin sidebar link a11y issues 2021-06-14 16:14:39 +02:00
Yura Bondarenko
34b117efe3 80084: Fix unit test & LGTM issues 2021-06-14 10:53:53 +02:00
Art Lowel
04b4f1cf58 Fix comment punctuation 2021-06-14 10:30:17 +02:00
Yura Bondarenko
64049fdcf7 79768: Make relative URLs absolute 2021-06-14 10:08:15 +02:00
Yura Bondarenko
2ed16aa66e 79768: Update typedocs 2021-06-14 10:08:15 +02:00
Yura Bondarenko
6a4e56322f 79768: Rename method 2021-06-14 10:08:15 +02:00
Yura Bondarenko
81b76dd327 79768: Fix tag: citation_publisher / citation_*_institution 2021-06-14 10:08:15 +02:00
Yura Bondarenko
304d8f7386 79768: Fix tag: citation_abstract_html_url 2021-06-14 10:08:15 +02:00
Yura Bondarenko
67f8ce7849 79768: Rename citation_date to citation_publication_date 2021-06-14 10:08:15 +02:00
Yura Bondarenko
6f7b76ec39 79768: Remove og:title & og:description 2021-06-14 10:08:15 +02:00
Yura Bondarenko
cb4446b79d 79768: Update & add unit tests 2021-06-14 10:08:15 +02:00
Yura Bondarenko
1caba78b4d 79768: Check against list of allowed mimetypes 2021-06-14 10:08:15 +02:00
Yura Bondarenko
9fe5a91bc2 79768: Extract download route method for Bundles with multiple Bitstreams 2021-06-14 10:08:15 +02:00
Art Lowel
dde57b9387 update citation_pdf_url logic 2021-06-14 10:06:18 +02:00
Yura Bondarenko
737728f603 79730: Remove label margins 2021-06-14 08:06:15 +02:00
Yura Bondarenko
d37d043531 79730: Show input labels when available 2021-06-14 08:06:15 +02:00
Yura Bondarenko
08878941ab 79730: Fix tslint issues 2021-06-14 08:06:15 +02:00
Yura Bondarenko
c60fa2c441 79730: Don't submit date slider changes until keyup 2021-06-14 08:06:15 +02:00
Yura Bondarenko
6e95990431 79730: Improve slider handles keyboard control 2021-06-14 08:06:15 +02:00
Yura Bondarenko
cb3f5ad259 79730: Add null href to more/collapse toggle links 2021-06-14 08:06:15 +02:00
Yura Bondarenko
abe26ce9f8 79730: Keyboard navigation for expandable filter facets 2021-06-14 08:06:15 +02:00
Yura Bondarenko
3e86efc66a 79730: Add labels around date range inputs 2021-06-14 08:06:15 +02:00
Yura Bondarenko
5b490203b2 79730: Add labels around FilterInputSuggestionsComponent inputs 2021-06-14 08:06:15 +02:00
Yura Bondarenko
ffb320373d 79730: Add labels around facet checkbox inputs 2021-06-14 08:06:15 +02:00
Yura Bondarenko
4683df431c 79730: Exclude search facet link from tablist 2021-06-14 08:06:15 +02:00
David Cavrenne [Atmire]
d253790c7d Updated version of the FR wordings (#1223)
Completed French message catalog.
2021-06-12 08:35:31 +02:00
Tim Donohue
22548c1e9d Merge pull request #1215 from atmire/remove-duplicate-author-field
Remove duplicate author field
2021-06-11 15:45:54 -05:00
Tim Donohue
79d5645f81 Merge pull request #1227 from tdonohue/demo_homepage
Remove references to Testathon & Beta 5 from Demo / Default theme
2021-06-11 14:59:15 -05:00
Tim Donohue
4c6d355376 Merge pull request #1212 from atmire/separate-startup-css
Fix theme switching issues
2021-06-11 14:57:55 -05:00
Tim Donohue
5edef6f942 Merge pull request #1209 from 4Science/issue-1208
Fix the rel name for the submissioncclicenseUrls-search link
2021-06-11 12:22:35 -05:00
Tim Donohue
9b80173b87 Merge pull request #1216 from atmire/w2p-79698_fix-browse-by-author-name-special-chars
Escape browse by author data requests
2021-06-11 11:21:46 -05:00
Tim Donohue
015f3b9607 Remove references to Testathon & Beta 5 2021-06-11 11:01:31 -05:00
Bruno Roemers
586de36835 Merge branch 'main' into issue-1224-workflow-rejection-reason-not-properly-encoded 2021-06-11 17:09:23 +02:00
Art Lowel
eead947352 put more useful example sass variable overrides in custom theme 2021-06-11 17:08:29 +02:00
Art Lowel
f2a29a6425 improve structure double footer 2021-06-11 17:08:29 +02:00
Art Lowel
2ddda1c766 enable e2e stacktrace 2021-06-11 17:08:29 +02:00
Art Lowel
74a17da5b8 fix issue where home page background image would wrap around on certain screen widths 2021-06-11 17:08:29 +02:00
Art Lowel
c756c68f28 move header changes to dspace theme 2021-06-11 17:08:29 +02:00
Bruno Roemers
412822db7c Merge branch 'main' into w2p-79698_fix-browse-by-author-name-special-chars 2021-06-11 17:06:24 +02:00
Tim Donohue
2cd78470ce Merge pull request #1226 from tdonohue/fix_ci_issues
Add option to pin to a specific version of Chrome/ChromeDriver in our CI process
2021-06-11 09:46:30 -05:00
Tim Donohue
e7282bdbd7 Minor cleanup, print chromedriver version after installation 2021-06-11 08:46:17 -05:00
Art Lowel
326bffae7f switch chromedriver to npm 2021-06-11 08:42:43 -05:00
Tim Donohue
b104958473 Add option to pin to a specific version of Chrome/ChromeDriver. Pin to v90 until v91 bugs are fixed 2021-06-10 12:56:40 -05:00
Bruno Roemers
a27a7a4083 Test requestService.uriEncodeBody 2021-06-10 15:00:03 +02:00
Bruno Roemers
bb2892edd8 BUGFIX: Encode special characters when sending workflow action 2021-06-10 14:45:30 +02:00
Giuseppe Digilio
4862a399c9 Merge remote-tracking branch 'origin/main' into #1110 2021-06-01 14:14:47 +02:00
Giuseppe Digilio
eaaad88443 [CST-4248] Remove embargo form field and add link to bitstream authorization page 2021-06-01 14:13:19 +02:00
Giuseppe Digilio
c150fb881e [CST-4248] bitstream authorizations page 2021-06-01 14:12:12 +02:00
Giuseppe Digilio
3e53b7c7b1 [CST-4248] Add possibility to add additional content to form.component 2021-06-01 14:09:17 +02:00
Giuseppe Digilio
2dfed863ed [DSC-75] Fix issue while deleting multiple qualdrop value 2021-05-31 12:20:42 +02:00
Yura Bondarenko
95b98d3f79 79597: Remove unused imports 2021-05-31 10:20:28 +02:00
Bruno Roemers
4ad089ef54 79698: Escape browse by author data requests 2021-05-28 15:40:20 +02:00
Samuel
bcfecc53a1 add support for multiple metadata fields to the MetadataRepresentationListComponent - fix bug when unauthorized for related item 2021-05-28 11:53:59 +02:00
Yura Bondarenko
4b238e1842 79597: Update ds-metadata-field-wrapper unit tests 2021-05-27 18:03:53 +02:00
Yura Bondarenko
120ecc6988 79597: Fix ds-metadata-field-wrapper for thumbnails 2021-05-27 17:10:42 +02:00
Yura Bondarenko
bcfb890e1a 79597: Update unit tests 2021-05-27 16:34:52 +02:00
Yura Bondarenko
c717fc5ec8 79597: Fix thumbnails ~ item page direct request 2021-05-27 16:00:06 +02:00
Art Lowel
899b30213e show full screen loader when switching themes 2021-05-27 15:06:26 +02:00
Art Lowel
772ac12329 create separate startup css to load before the theme is chosen 2021-05-27 11:51:59 +02:00
Yura Bondarenko
9b95fc5de9 79597: Add space between rows in FullFileSectionComponent 2021-05-27 11:18:40 +02:00
Yura Bondarenko
6cbd9dc920 79597: Remove GridThumbnailComponent 2021-05-27 11:06:08 +02:00
Yura Bondarenko
4f38821bb3 79597: Replace ds-grid-thumbnail with ds-thumbnail 2021-05-27 11:06:08 +02:00
Yura Bondarenko
41c07e74ca 79597: Add input to toggle thumbnail max-width 2021-05-27 11:05:48 +02:00
Alessandro Martelli
060d0dd556 [CST-4223] Creating a new submission should redirect to workspaceitem edit page 2021-05-27 09:43:29 +02:00
Andrea Bollini
fce77104d4 Fix the rel name for the submissioncclicenseUrls-search link 2021-05-26 22:39:06 +02:00
Samuel
21686c86df add support for multiple metadata fields to the MetadataRepresentationListComponent 2021-05-25 11:51:19 +02:00
Yura Bondarenko
ca7d45ff0c 79597: Fix tslint issue 2021-05-25 11:18:16 +02:00
Yura Bondarenko
363d1d74df 79597: Update unit tests 2021-05-25 11:03:51 +02:00
Yura Bondarenko
4567f8cc2c 79597: Limit thumbnail width & set to portrait 2021-05-25 10:20:46 +02:00
Yura Bondarenko
c9ff89a143 79597: Thumbnail placeholder style ~ CSS variables 2021-05-25 10:08:33 +02:00
Yura Bondarenko
4b6e02f773 79597: Specify i18n text for person, project & orgunit 2021-05-25 09:55:19 +02:00
Yura Bondarenko
7a69a23f0c 79597: Improve placeholder contrast 2021-05-25 09:46:54 +02:00
Yura Bondarenko
d80da3bbfe 79597: Add HTML placeholder for missing thumbnails 2021-05-25 09:44:39 +02:00
Yura Bondarenko
55affdebce 79597: Add alt text to ds-thumbnail 2021-05-25 09:28:02 +02:00
Tim Donohue
f85a5e65ad Merge pull request #1182 from atmire/w2p-79327_Fix-item-level-statistics
Fix item-level statistics pages
2021-05-24 11:47:22 -05:00
Tim Donohue
8daf52e8c2 Merge pull request #1200 from atmire/w2p-79219_update-metadata-import-export-script-params
Update metadata import export script params
2021-05-24 11:22:40 -05:00
Tim Donohue
fab567400d Merge pull request #1180 from atmire/w2p-79325_Fix-pagination-in-lookup
Fix pagination in author lookup window
2021-05-24 10:20:42 -05:00
Yana De Pauw
579f98d027 79327: Follow up fixes to test 2021-05-20 10:45:14 +02:00
Yana De Pauw
926dd46627 79327: Fix LGTM issues and add e2e tests 2021-05-20 09:45:48 +02:00
Giuseppe Digilio
3c0cb33bc7 fix failed build 2021-05-19 18:16:31 +02:00
Giuseppe Digilio
98dde58f9d [D4CRIS-1080] Fix issue where a replace patch operation was dispatched instead of an add one when field's previous value is empty 2021-05-19 16:28:49 +02:00
Giuseppe Digilio
d6dbbd1f1f Add tests for handleArrayGroupPatch method 2021-05-19 15:36:46 +02:00
Giuseppe Digilio
e18c66d688 Fix issue with patch operations related to repeatable fields 2021-05-19 15:36:43 +02:00
Giuseppe Digilio
e0edcd64d2 Fix wrong visualization of bitstream access condition form within submission form 2021-05-19 15:35:37 +02:00
Giuseppe Digilio
91137a216f Merge remote-tracking branch 'origin/main' into #1110 2021-05-19 15:08:02 +02:00
Giuseppe Digilio
d06b76af3f Fix issue with patching value with a date 2021-05-19 15:04:12 +02:00
Art Lowel
7e129f282f remove extra author field from item pages 2021-05-19 13:05:15 +02: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
Tim Donohue
68bd8d40e8 Merge pull request #1181 from atmire/Fix-dso-selector-issues
Fix dso-selector issues
2021-05-17 12:33:36 -05:00
Michael Spalti
3dacbe51a1 Merge branch 'main' into iiif-mirador 2021-05-16 16:30:34 -07:00
Tim Donohue
5f87d69e9b Merge pull request #1145 from atmire/w2p-79218_remove-menu-options-for-disabled-features
Remove menu options for disabled features
2021-05-12 14:43:16 -05:00
Giuseppe Digilio
d3466c3e82 Fix issue where uploaded files disappear 2021-05-12 17:59:11 +02:00
Kristof De Langhe
43b8f45eee 79252: Remove unused import 2021-05-12 16:50:18 +02:00
Yana De Pauw
6631980ee6 79327: Fix item-level statistics pages 2021-05-12 16:31:48 +02:00
Yana De Pauw
4a8becf662 Fix ORCID tab loading 2021-05-12 14:47:16 +02:00
Yana De Pauw
a77ca2f126 79325: Fix pagination in the external metadata lookup 2021-05-11 11:39:46 +02:00
Tim Donohue
a87bf009ef Merge pull request #1146 from atmire/w2p-79220_fix-edit-group-navigation-bug
Fix edit group navigation bug
2021-05-07 09:42:35 -05:00
Kristof De Langhe
86bf7ff4f2 79252: Fix dso-selector issues 2021-05-06 18:03:46 +02:00
Tim Donohue
a69033917d Merge pull request #1086 from 4Science/CST-4009
[CST-4009] Discovery result sort options not reflecting what is configured
2021-05-05 10:52:07 -05:00
Tim Donohue
9dc9b5accf Merge pull request #1138 from atmire/w2p-78991_Issue-1112_Fix-date-filter-bugs
Fix date filter bugs
2021-05-04 14:19:04 -05:00
Tim Donohue
7dd2683fc3 Merge pull request #1139 from atmire/w2p-78994_Issue-1103_Fix-relationship-modal-on-item-page
Fix relationship modal on item page
2021-05-04 12:41:19 -05:00
Tim Donohue
abca095b9e Merge pull request #1105 from atmire/Edit-item-page-permission-checks
Edit item page permission checks
2021-05-04 09:24:16 -05:00
Bruno Roemers
f0fb8c1005 79219: Improve tests and wording 2021-05-04 13:43:51 +02:00
Bruno Roemers
042afd9bb8 79220: Fix edit group navigation bug 2021-05-04 11:46:04 +02:00
Yura Bondarenko
15ad31bd84 78991: Clean up SearchOptions.toRestUrl
* Extract "selective encoding" ops into separate methods
* Add comments to clarify regex
* Use hasValue() instead of just checking on 'match'
* Leave only the last comma of filter values unencoded
2021-05-04 11:26:19 +02:00
Bruno Roemers
f49a7746fb 79219: Remove -f from ExportMetadataSelectorComponent and pass uuid to -i 2021-05-04 11:19:01 +02:00
Bruno Roemers
93450e1dcf 79219: Remove -e option from MetadataImportPageComponent 2021-05-04 11:08:55 +02:00
Yura Bondarenko
b9a8bfb2bd 78991: Also test SearchOptions.fixedFilter 2021-05-04 10:44:06 +02:00
Yura Bondarenko
e682997195 78991: URI-encode SearchOptions query values 2021-05-04 10:34:37 +02:00
Yura Bondarenko
340f9518cd 78991: Fix SearchOptions typing 2021-05-04 10:34:37 +02:00
Bruno Roemers
fe4fe9e8d3 79218: Comment out all disabled menu options 2021-05-03 19:07:02 +02:00
Bruno Roemers
b5342e0fab 79218: Remove duplicate menu item 2021-05-03 18:41:56 +02:00
Tim Donohue
eb3cd85680 Merge pull request #1137 from atmire/w2p-78849_Issue-1113_Fix-forgot-password-page
Fix forgot password page
2021-04-30 16:57:49 -05:00
Tim Donohue
09a7685a3f Merge pull request #1109 from DSpace/dependabot/npm_and_yarn/ssri-6.0.2
Bump ssri from 6.0.1 to 6.0.2
2021-04-30 12:13:04 -05:00
Tim Donohue
6d00cad749 Merge pull request #1045 from DSpace/dependabot/npm_and_yarn/elliptic-6.5.4
Bump elliptic from 6.5.3 to 6.5.4
2021-04-29 17:19:46 -05:00
Yura Bondarenko
60009144a1 78994: Remove unused import 2021-04-29 14:28:37 +02:00
Yura Bondarenko
b2b077868e 78994: Disable no-shadowed-variable 2021-04-29 14:26:33 +02:00
Kristof De Langhe
a24cfe4cc7 78243: Feedback 2021-04-29 2021-04-29 14:15:03 +02:00
Yura Bondarenko
032231f10e 78849: Fix lint issues 2021-04-29 13:57:31 +02:00
Yura Bondarenko
781a88bc4c 78849: Fix double notification on submit 2021-04-29 13:42:57 +02:00
dependabot[bot]
d2b44318fa Bump elliptic from 6.5.3 to 6.5.4
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-28 21:57:44 +00:00
Alessandro Martelli
ad7824460b [CST-4009] update en.json5 2021-04-28 15:28:02 +02:00
Tim Donohue
8cade4fbf5 Merge pull request #1104 from atmire/Angular-10-upgrade-test-fixes
Angular 10 upgrade test fixes
2021-04-27 14:23:52 -05:00
Tim Donohue
fecf59e433 Merge pull request #1118 from 4Science/#1111
Fix visibility issue with collapsed navbar menu
2021-04-27 13:27:31 -05:00
Alessandro Martelli
bdc2dd5f9c [CST-4009] fixed search configuration stream 2021-04-27 09:53:38 +02:00
Yura Bondarenko
0fe199a97c 78849: Fix unit test 2021-04-26 16:49:42 +02:00
Yura Bondarenko
aca1c86455 78994: Provide Item's owning collection to relation modal 2021-04-26 15:13:41 +02:00
Yura Bondarenko
d62d9b0f48 78994: Update unit tests 2021-04-26 15:13:41 +02:00
Yura Bondarenko
5f45e93d12 78994: Remove setItem method 2021-04-26 13:24:26 +02:00
Yura Bondarenko
4634d2a4a8 78991: Don't initialize SearchFilterComponent with closed=true 2021-04-26 11:48:15 +02:00
Yura Bondarenko
6c2a3431c1 78991: Fix range handle lines
& remove duplicate CSS variable
2021-04-26 11:48:15 +02:00
Yura Bondarenko
4fa6a3e976 78991: Set fallback max date to the current year 2021-04-26 10:53:37 +02:00
Yura Bondarenko
eb9a7a15d6 78991: Specify filter operator for (date) ranges 2021-04-26 10:18:40 +02:00
Yura Bondarenko
8433f49ed9 78991: Initialize slider handle width 2021-04-26 09:09:51 +02:00
Alessandro Martelli
7c0d9acbf1 [CST-4009] default sort option configured with default sort order 2021-04-23 16:46:44 +02:00
Yura Bondarenko
7d0ea04b3e 78849: Add unit tests for EPerson registration caching 2021-04-23 15:45:46 +02:00
Yura Bondarenko
1aa659e6b7 78849: Fix cache/re-request issue & other improvements 2021-04-23 13:28:41 +02:00
Giuseppe Digilio
b6ab3d2067 [CST-4087] fix issue with mydspace result default order 2021-04-23 12:51:27 +02:00
Giuseppe Digilio
a205aa02b3 [CST-4009] Retrieve configuration by search config service 2021-04-23 12:47:53 +02:00
Alessandro Martelli
cba089081b Merge branch 'main' into CST-4009 2021-04-23 12:47:30 +02:00
Michael W Spalti
98571a496c Merge remote-tracking branch 'origin/iiif-mirador' into iiif-mirador 2021-04-20 14:46:44 -07:00
Giuseppe Digilio
ed7454ffc9 Fix visibility issue with collapsed navbar menu 2021-04-20 09:37:28 +02:00
dependabot[bot]
add2aac934 Bump ssri from 6.0.1 to 6.0.2
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-19 15:41:33 +00: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
reetagithub
a86f9444ce update fi.json5 (#1088)
* Update fi.json5

Part of the keys translated to Finnish

* Update fi.json5

The rest of the Finnish translations.

* Update fi.json5

Parent organization unit -> Ylemmän tason organisaatioyksikkö (was 'Ylätason')

* Update fi.json5
2021-04-16 17:28:21 +02:00
Kristof De Langhe
37be3530e6 Merge branch 'main' into w2p-78243_edit-item-page-permission-checks
Conflicts:
	src/app/core/data/feature-authorization/feature-id.ts
2021-04-16 12:35:30 +02:00
Kristof De Langhe
25f02b99d3 78243: message change 2021-04-16 12:31:22 +02:00
Kristof De Langhe
fd437eb7ee 78243: edit-item-page mocks, item-status operation refactoring 2021-04-16 11:36:33 +02:00
Tim Donohue
686a402d40 Merge pull request #1090 from tdonohue/update_docker
Update Docker Compose scripts to resync with DSpace/DSpace
2021-04-15 14:17:20 -05:00
Tim Donohue
8dd8b06409 Ensure Entities submission config is setup & ensure Solr image starts after main one 2021-04-15 12:37:09 -05:00
Kristof De Langhe
5fca681222 78001: RelationshipEffects test fixes 2021-04-15 13:19:27 +02:00
Tim Donohue
b998f82b8d Bug fix: 'dspacesolr' container must have a copy of the Solr configs from 'dspace' container as they aren't in the dspace-angular codebase 2021-04-14 17:03:38 -05:00
Tim Donohue
1741678807 Update Docker Compose scripts to resync with DSpace/DSpace 2021-04-14 15:43:16 -05:00
Tim Donohue
f81acb575d Merge pull request #1099 from atmire/w2p-78407_allow-html-in-license-section
Quick win: Allow html in license section of submission form
2021-04-14 12:48:42 -05:00
Bruno Roemers
c074d6827f Merge remote-tracking branch 'upstream/main' into w2p-78407_allow-html-in-license-section 2021-04-14 19:06:44 +02:00
Tim Donohue
485a35eb1a Merge pull request #1098 from tdonohue/minor_theme_updates
Minor updates to base and dspace theme for Testathon.
2021-04-14 11:46:18 -05:00
Tim Donohue
9920aaba97 Merge pull request #1096 from atmire/fix-1094
Fix support for adding and removing relationships in relationship-only fields in the submission
2021-04-14 11:45:50 -05:00
Art Lowel
6d612c39c0 hide hint for relationship fields that aren't repeatable but do have a value 2021-04-14 17:51:25 +02:00
Kristof De Langhe
43e9b145b9 78406: Test fixes 2021-04-14 17:51:25 +02:00
Art Lowel
56a54ae1c9 don't hide the lookup button for virtual relationship fields 2021-04-14 17:51:25 +02:00
Art Lowel
a4a747e922 fix issue where the submission form wouldn't update after a relationship was added 2021-04-14 17:51:25 +02:00
Tim Donohue
ef8e66546b Minor updates to default and dspace theme for Testathon. Also updating DuraSpace to LYRASIS in several places. 2021-04-14 10:50:21 -05:00
Tim Donohue
9c0c1b408c Merge pull request #1100 from atmire/link-webdriver-version-to-chrome-version
Sync webdriver and chrome versions
2021-04-14 10:40:50 -05:00
Art Lowel
6e7fe85b47 use the chromedriver npm package to download the webdriver version compatible with the installed chrome version 2021-04-14 17:13:26 +02:00
Bruno Roemers
59560b993c 78407: Allow html in submission license section 2021-04-14 10:45:43 +02:00
Tim Donohue
edc4753efc Merge pull request #1092 from 4Science/CST-3782-final-adjustments
Repeatable fields with look up still broken in some cases
2021-04-13 11:42:49 -05:00
Alessandro Martelli
31e4aa788e [CST-3782] lookup click doesn't clear the plain value 2021-04-13 13:37:04 +02:00
Alessandro Martelli
b537f70d7b [CST-3782] possibility to remove the only relationship 2021-04-12 10:04:49 +02:00
Tim Donohue
3bd5f3fa09 Merge pull request #1063 from atmire/simple-dspace-theme
Minimal 'dspace' theme
2021-04-09 09:16:58 -05:00
Kristof De Langhe
3504feedf3 78243: edit item page fine-grained permission checks - mocks + tests 2021-04-09 13:34:04 +02:00
Alessandro Martelli
4e21bdaf1f [CST-3782] repeatable with lookup fixes 2021-04-09 10:16:56 +02:00
Tim Donohue
e74c8f4daf Merge pull request #1004 from atmire/w2p-76150_Add-a-bitstream-download-page
Bitstream download page
2021-04-08 12:23:43 -05:00
Kristof De Langhe
a2e00bbd9f 78243: edit item page fine-grained permission checks 2021-04-08 17:54:27 +02:00
Alessandro Martelli
23fe338c5d [CST-4009] fix sort options on pagination change 2021-04-08 16:18:31 +02:00
Alessandro Martelli
1cbd41ef38 Merge branch 'main' into CST-4009
# Conflicts:
#	src/app/core/shared/search/search-configuration.service.ts
#	src/app/core/shared/search/search.service.ts
#	src/app/shared/search/search-settings/search-settings.component.ts
2021-04-08 15:51:05 +02:00
Alessandro Martelli
d54b7d9f7c [CST-4009] fix sort options on pagination change 2021-04-08 15:43:07 +02:00
Art Lowel
9bf2465ee8 change the font and overlay color on the home-page background image to improve readability 2021-04-08 14:18:13 +02:00
Kristof De Langhe
9c85328b17 77998: xdescribe fixes 2021-04-07 15:45:22 +02:00
Tim Donohue
3d51110217 Merge pull request #1048 from atmire/w2p-76654_PaginationService
PaginationService
2021-04-06 12:12:51 -05:00
Tim Donohue
88f5a3d256 Merge pull request #1087 from atmire/w2p-77631_dropzone-issues
Submission dropzone issues [Fixed]
2021-04-06 11:22:03 -05:00
Giuseppe Digilio
b4686deb63 [CST-4009] Retrieve sort options also for search page 2021-04-06 17:49:06 +02:00
Art Lowel
7cbce550e2 remove commented out line 2021-04-06 17:28:19 +02:00
Art Lowel
6b7da66c81 update link href 2021-04-06 17:26:17 +02:00
Art Lowel
b8cb8f90b0 increase contrast to improve accessibility 2021-04-06 17:26:00 +02:00
Art Lowel
425f530f08 fix LGTM warnings 2021-04-06 16:58:37 +02:00
Art Lowel
3c93777e84 don't use CSR fallback when the headers are changed after the response is sent 2021-04-06 16:46:21 +02:00
Art Lowel
ff4bd59de0 use GET for shortlivedtoken requests on the server, POST on the client 2021-04-06 16:46:21 +02:00
Yana De Pauw
72ca74bdf3 Fix checkstyle issue 2021-04-06 16:46:21 +02:00
Yana De Pauw
99a96451b1 Update metadataservice citation tag to refer to new download page 2021-04-06 16:46:21 +02:00
Yana De Pauw
69c29407a2 Remove comment 2021-04-06 16:46:21 +02:00
Yana De Pauw
a1abface13 Fix lint issues 2021-04-06 16:46:21 +02:00
Yana De Pauw
3137f3e6c1 76150: Implement feedback 2021-04-06 16:46:21 +02:00
Yana De Pauw
868b7ad37b 76150: Add a bitstream download page 2021-04-06 16:46:21 +02:00
Yana De Pauw
73319533d1 Implement feedback 2021-04-06 16:36:01 +02:00
lotte
3482db0686 Unreverted changes from #1053 2021-04-06 13:27:33 +02:00
lotte
b16a565f7c fixed dropzone layover issue 2021-04-06 13:20:21 +02:00
Yana De Pauw
acafae77bd Merge remote-tracking branch 'upstream/main' into w2p-76654_PaginationService 2021-04-06 10:43:20 +02:00
Alessandro Martelli
4d85c0270f [CST-4009] sorting options translations 2021-04-06 10:30:26 +02:00
Alessandro Martelli
9b8ada0326 [CST-4009] Discovery result sort options not reflecting what is configured 2021-04-06 10:06:15 +02: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
Tim Donohue
9586428b12 Merge pull request #1083 from DSpace/revert-1053-w2p-77631_dropzone-issues
Revert "Submission dropzone issues"
2021-04-02 16:53:20 -05:00
Michael Spalti
247ae73c64 Merge branch 'main' into iiif-mirador 2021-04-02 14:41:50 -07:00
Tim Donohue
d7bd3f6f54 Revert "Submission dropzone issues" 2021-04-02 16:28:40 -05:00
Tim Donohue
335d6fb339 Merge pull request #1053 from atmire/w2p-77631_dropzone-issues
Submission dropzone issues
2021-04-02 10:19:16 -05:00
Art Lowel
cbee776fa4 fix issues with path separators in windows 2021-04-02 16:58:37 +02:00
Art Lowel
60d917bb8a style home-page-news 2021-04-02 16:58:29 +02:00
Art Lowel
619f4d74c2 make dspace the default theme 2021-04-02 16:29:38 +02:00
Art Lowel
fb90bf64d9 create simple dspace theme based on mantis 2021-04-02 16:29:38 +02:00
Tim Donohue
0f7a32d0df Merge pull request #1055 from tdonohue/entity_type_storage
(Angular UI) Rename / move 'relationship.type' metadata field to 'dspace.entity.type'
2021-04-02 09:22:53 -05:00
Art Lowel
77a85793b6 delete mantis theme 2021-04-02 16:21:36 +02:00
Giuseppe
7402286954 #728 accessibility theming (#1057)
* [CST-3763] Change base theme colors

* [CST-3763] added new custom variables

* [CST-3763] applied changes to the header in order to have two different navbar

* [CST-3763] applied changes to breadcrumbs navbar

* [CST-3763] fix sidebar colors

* [CST-3763] applied changes footer in order to have two different sections

* [CST-3763] change home news jumbotron background color

* [CST-3763] fix issue with search-navbar.component z-index

* [CST-3763] fix issue with search-form.component that didn't use the brand colo parameter

* [CST-3763] fix issue with menu navbar on small window view

* [CST-3763] changed position for browse all button in the access control pages

* [CST-3763] Change form.component in order to have possibilities to display better additional form buttons

* [CST-3763] Change confirmation-modal.component in order to allow different colors and icons for confirm button

* [CST-3763] added confirmation icon

* [CST-3763] fixed accessibility for admin access control components

* [CST-3763] Added placeholder for search boxes

* [CST-3763] Added repository logo alt label

* [CST-3763] Adjust notification icons

* [CST-3763] Fix issue with hideReturnButton param in edit-comcol-page.component that was not initialized on page refresh

* Accessibility fix

* [CST-3763] Adjust usability for community/collection edit

* [CST-3763] fix error while running test

* [CST-3763] Added dynamically a title prefix to all dspace page

* [CST-3763] add breadcrumbs to the page where are missing

* [CST-3763] fixed failed tests

* [CST-3763] fixed failed e2e test

* [CST-3763] fixed failed e2e test

* Buttons fixes for accessibility

* [CST-3973] fixed issue with redirect after changing language

* Buttons and sections fixes for accessibility

* Buttons and sections fixes for accessibility

* [CST-3763] fixed colors for chips component

* [CST-3977] fixed issue with selecting a tag submission field

* [CST-3763] add breadcrumbs to the page where are missing

* [CST-3763] fixed edit workflowitem buttons color

* [CST-3977] removed unintentional committed log

* [CST-3763] Fix issue with tab selection in item edit page

* [CST-3763] Fix position of back button in the item edit page

* [CST-3763] icon and colors for search and browse all buttons

* [CST-3763] added atkinson font

* [CST-3763] remove dspace logo from home news

* [CST-3763] fix buttons colors for administrative search

* [CST-3763] Change background color for user menu

* [CST-3763] remove gradient from home page news component

* [CST-3763] fix issue with edit dso button

* [CST-3763] revert color schema

* [CST-3763] remove Atkinson-Hyperlegible font

* [CST-3763] fix use of header-logo-height variable

* [CST-3763] fix homepage link color

* [CST-3763] fix contrast color issue for navbar menu entries

* [CST-3763] add variable to show/hide top footer container

* [CST-3763] change dso edit button style

* [CST-3763] ensure to use "back" and "save" labels

* [CST-3763] Remove border from header

* [CST-3763] Change header in order to have only navigation bar in a single row

* Update src/app/root/root.component.html

Co-authored-by: Art Lowel <art.lowel@gmail.com>

* [CST-3763] Fix issue with wrong grid-breakpoints that cause issue on navbar collapsing

* [CST-3763] Fix issue with language dropdown when navbar is collapsed

* [CST-3763] Fix issue after merging

Co-authored-by: Matteo Perelli <matteo.perelli@4science.it>
Co-authored-by: Art Lowel <art.lowel@gmail.com>
2021-04-02 09:14:56 -05:00
Giuseppe Digilio
13c239cbc3 Add isSectionTypeAvailable method and use it to check if upload section is available 2021-04-02 15:58:02 +02: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
Tim Donohue
63edb7b7d0 Merge pull request #1066 from 4Science/CSTPER-321-deleteitem
Error deleting an item when its entity type has no relations
2021-04-01 14:07:35 -05:00
Tim Donohue
1dd1c98846 Merge pull request #1025 from 4Science/CST-3782-fix-repeatable-fields
Cst 3782 fix repeatable fields
2021-04-01 13:53:36 -05:00
Tim Donohue
3815bdbd8c Merge pull request #1041 from atmire/w2p-77205_issue-927-Non-site-admin-edit-authorization-group
Getting 401 when Community or Collection Administrator tries to edit Collection Authorization Group
2021-04-01 13:47:08 -05:00
Giuseppe Digilio
44b37f673a Merge remote-tracking branch 'origin/main' into CST-3782-fix-repeatable-fields
# Conflicts:
#	src/styles/_global-styles.scss
2021-04-01 20:07:06 +02:00
Giuseppe Digilio
94c0af5d86 [CST-3620] Remove drag and drop placeholder 2021-04-01 20:03:54 +02:00
Yana De Pauw
824ee029b3 Change p. to page and reverse id and pagination info 2021-04-01 16:28:20 +02:00
lotte
d3763ea642 cleaned up debugging remnants 2021-04-01 14:23:02 +02:00
lotte
7c5dbae549 removed unnecessary import 2021-04-01 12:38:43 +02:00
lotte
41e1d06594 applied feedback for submission upload section 2021-04-01 12:23:26 +02:00
Tim Donohue
ae240ff36b After rebase, replace new references to relationship.type with dspace.entity.type 2021-03-31 15:33:01 -05:00
Tim Donohue
c308e5fd4d Other minor corrections of "relationship type" to "entity type" 2021-03-31 15:23:51 -05:00
Tim Donohue
d36ac7e6fa Rename / move 'relationship.type' metadata field to 'dspace.entity.type' 2021-03-31 15:23:51 -05:00
Tim Donohue
cfbf587184 Merge pull request #1076 from atmire/1067-blank-qualifier
UI sends wrong request when creating new metadata field without qualifier
2021-03-31 12:42:29 -05:00
Tim Donohue
1b1421bc79 Merge pull request #1060 from atmire/w2p-77215_lgtm-issues-and-sanitization
Fix or address string escaping / replacement issues reported by LGTM
2021-03-31 12:17:30 -05:00
Tim Donohue
4475d59bbf Merge pull request #888 from qultoltd/#885-media-viewer
#885 media viewer
2021-03-31 12:17:15 -05:00
Alessandro Martelli
08afa4723b [CST-3782] patch add entire array on item remove 2021-03-31 15:21:32 +02:00
Raf Ponsaerts
947d792f27 Fixed * replace all 2021-03-31 14:49:32 +02:00
lotte
7afcebfd11 changed replace to global replace 2021-03-31 13:51:40 +02:00
Dániel Péter Sipos
ff8ff7f496 #885 fix media image viewer 2021-03-31 13:21:33 +02:00
Alessandro Martelli
f9e80ea288 [CST-3782] restored correct drag styles after merge 2021-03-31 12:28:14 +02:00
Alessandro Martelli
052dbdaf1e [CST-3782] patch add full array in case of DynamicRowArrayModel 2021-03-31 12:26:45 +02:00
Alessandro Martelli
8c60bd4280 [CST-3782] restored submission save after openLookup 2021-03-31 12:26:41 +02:00
Alessandro Martelli
d47660b5c2 [CST-3782] possibility to configure the isDraggable feature to DynamicRowArrayModel 2021-03-31 12:25:47 +02:00
Alessandro Martelli
d224333a1c [CST-3782] added hint to the last entity value 2021-03-31 12:25:42 +02:00
Alessandro Martelli
88556c40f6 Merge remote-tracking branch 'origin/main' into CST-3782-fix-repeatable-fields 2021-03-31 12:23:16 +02: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
Tim Donohue
ea3886bbfa Merge pull request #1065 from atmire/w2p-77583_Issue-3113_Fix-item-handle-redirect
Handle redirect for items not working fix
2021-03-30 09:50:05 -05:00
Dániel Péter Sipos
3577335399 #885 revert and fix width 2021-03-30 13:48:03 +02:00
Dániel Péter Sipos
861192ea25 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2021-03-30 10:29:20 +02:00
Yura Bondarenko
e5d52ce96a Merge remote-tracking branch 'upstream/main' into w2p-77205_issue-927-Non-site-admin-edit-authorization-group 2021-03-30 09:25:11 +02:00
Tim Donohue
e4400acfd7 Merge pull request #1075 from atmire/Edit-item-page-permissions-fixes
Edit item page permissions fixes
2021-03-29 12:01:18 -05:00
Tim Donohue
3e0daefc9b Merge pull request #1064 from atmire/w2p-77742_Collection-item-template-bugfixes
Bugs on Collection Item Template fix
2021-03-29 11:27:58 -05:00
Tim Donohue
436b95222b Merge pull request #1077 from atmire/fix-themed-submission
Fix issue where the themed submission page would crash
2021-03-29 11:05:13 -05:00
Art Lowel
05545f703b fix issue where the themed submission page would crash because the component couldn't be found 2021-03-29 17:09:26 +02:00
Yana De Pauw
a4076ed1fd Fix lgtm issue 2021-03-29 16:13:20 +02:00
Yana De Pauw
afe345ebac 76654: Implement feedback 2021-03-29 15:31:27 +02:00
Yura Bondarenko
61767c196c 77205: Additional authorization checks for sidebar menu items 2021-03-29 14:01:36 +02: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
Dániel Péter Sipos
064c43a763 #885 fix merge conflict 2021-03-26 18:01:12 +01:00
Dániel Péter Sipos
97e1b1dee1 Merge branch 'main' into #885-media-viewer
# Conflicts:
#	src/app/+item-page/item-page.module.ts
#	src/app/+item-page/simple/item-types/shared/item.component.ts
#	src/app/app.component.scss
#	src/environments/mock-environment.ts
2021-03-26 16:57:07 +01:00
Tim Donohue
d7daaf4188 Merge pull request #1042 from atmire/add-themeable-components
Make all non-admin page-level components themeable
2021-03-25 15:20:18 -05:00
Tim Donohue
a2450b678e Merge pull request #1056 from atmire/stale-issue
Fix issue where stale RemoteData is emitted first
2021-03-25 14:44:24 -05:00
lotte
6cc56176b2 fixed path for custom theme item-page 2021-03-25 17:27:34 +01:00
Art Lowel
d7a0f27f08 remove workaround 2021-03-25 17:23:27 +01:00
Art Lowel
4a15720b4b rewrite all comcoldataservice tests in hopes of catching the one that sometimes fails at random 2021-03-25 17:22:02 +01:00
Art Lowel
9964f07ff6 rewrite community scope test that sometimes failed at random 2021-03-25 17:22:02 +01:00
Art Lowel
2f7060a752 fix issue where stale remotedata objects could be returned first from findBy methods on dataservices 2021-03-25 17:22:02 +01:00
Samuel
0c99557010 fix #1067 UI sends wrong request when creating new metadata field without qualifier 2021-03-24 17:39:03 +01:00
lotte
623688304d removed unused import 2021-03-24 15:30:54 +01:00
lotte
029308b52f Added missing typedoc 2021-03-24 15:06:27 +01:00
lotte
650f7106c2 removed unused imports 2021-03-24 14:36:23 +01:00
lotte
11f3962326 added tests 2021-03-24 14:33:32 +01:00
lotte
8d6156df37 77818: edit page permission fixes 2021-03-23 16:30:38 +01:00
Tim Donohue
a5bc6c1bf7 Merge pull request #1062 from atmire/w2p-77643_fix-trail-not-showing-on-item-pages
Fix trail not showing on item pages
2021-03-22 14:44:36 -05:00
Tim Donohue
a9f553a8bb Merge pull request #1061 from atmire/w2p-77472_unclickable-title-in-search-list
Unclickable title in search list fix
2021-03-22 12:36:58 -05:00
Yura Bondarenko
5018d36377 Fix lint error 2021-03-19 14:22:59 +01:00
lotte
ff1014779e fix lgtm issue 2021-03-18 18:02:37 +01:00
lotte
df5666e52f sticky progress bar for uploads in submission 2021-03-18 18:02:37 +01:00
lotte
7d774d43e8 fixed dropzone issues 2021-03-18 18:02:37 +01:00
Raf Ponsaerts
3a0dc277e4 fix lgtm issues 2021-03-18 18:02:07 +01:00
Raf Ponsaerts
01def4e8e4 Fixed other item types title 2021-03-18 18:02:07 +01:00
lotte
b833407dd1 77472: Fix unclickable titles in search lists 2021-03-18 18:02:07 +01:00
lotte
0488cd6b45 Solved lgtm and regex sanitization issues 2021-03-18 18:01:42 +01:00
Raf Ponsaerts
06cac3203c fixed compiling issue 2021-03-18 16:08:43 +01:00
Raf Ponsaerts
1a9a6cf03c Merge remote-tracking branch 'dspace/main' into w2p-77205_issue-927-Non-site-admin-edit-authorization-group 2021-03-18 15:55:02 +01:00
lotte
c19ee0d49e Updated TypeDoc for themed components 2021-03-18 15:46:53 +01:00
lotte
b12e616ff6 Added themable breadcrumbs 2021-03-18 15:46:53 +01:00
lotte
d50bef9c8a Fixed LGTM import issues 2021-03-18 15:46:53 +01:00
lotte
1d4c77e485 Added themable header, footer and navbar 2021-03-18 15:46:53 +01:00
lotte
f5a34bb14e fixed lgtm issues 2021-03-18 15:46:53 +01:00
Art Lowel
05aaa5400d fix lint issues 2021-03-18 15:46:53 +01:00
lotte
d3dd8fb565 Finished themeable components 2021-03-18 15:46:53 +01:00
lotte
cddbdbfed7 77350: wip 2021-03-18 15:46:53 +01:00
Yana De Pauw
1c4763b409 77349: Add additional properties and update comment 2021-03-18 15:46:53 +01:00
Art Lowel
2a354c87e1 fix issue with themed ConfigurationSearchPageComponent 2021-03-18 15:46:53 +01:00
Yana De Pauw
8b7a33bff2 77349: Add themeable components - pt. 1 2021-03-18 15:46:53 +01:00
Art Lowel
66463cfc04 Merge pull request #1068 from tdonohue/github_actions_fixes
Ensure REST API is up/available for e2e tests
2021-03-18 15:41:25 +01:00
Tim Donohue
e43955903f Merge pull request #1040 from atmire/wZp-77237-overwriteMerge-config
Environment files merging with overwriteMerge
2021-03-18 09:32:35 -05:00
Tim Donohue
43d2351ada Wait on /api/core/sites to also ensure database is up 2021-03-18 09:01:44 -05:00
Yana De Pauw
659117dfbd Fix import itssue 2021-03-18 14:55:39 +01:00
Yana De Pauw
c584415e8a Merge remote-tracking branch 'upstream/main' into w2p-76654_PaginationService 2021-03-18 14:55:23 +01:00
Raf Ponsaerts
b228ae5bb6 Merge remote-tracking branch 'dspace/main' into w2p-77205_issue-927-Non-site-admin-edit-authorization-group
Conflicts:
	src/app/+collection-page/collection-page.component.html
	src/app/+collection-page/collection-page.component.ts
	src/app/+community-page/community-page.component.html
	src/app/+community-page/community-page.component.ts
	src/app/access-control/group-registry/group-form/members-list/members-list.component.ts
2021-03-18 10:37:06 +01:00
Tim Donohue
ba4c7a8e88 Add a step to wait until REST API is ready (returns 200) 2021-03-17 15:52:32 -05:00
Tim Donohue
12f8e82aa2 Add step to verify REST API is up/available for e2e tests 2021-03-17 15:02:59 -05:00
Alessandro Martelli
34990c6f13 [CSTPER-321] Delete an item is not working 2021-03-17 17:11:04 +01:00
Tim Donohue
1115c58537 Merge pull request #1049 from atmire/w2p-77178_Support-embed-sizes-and-use-in-ComCol-tree
Use of embed sizes in the ComCol tree
2021-03-16 09:47:24 -05:00
Yura Bondarenko
6fabf436e3 77583: Specify id type ~ /api/pid/find?id=hdl:... 2021-03-16 15:01:35 +01:00
Kristof De Langhe
fd6605cc27 77742: Collection template-item loading indicator and error alert 2021-03-16 13:18:11 +01:00
Kristof De Langhe
0465ce0bc8 77742: Collection item-template bugfixes 2021-03-16 13:03:34 +01:00
Marie Verdonck
e033cdf0f4 PR #1049: Reduced number of communities/collections in comcol tree retrieved per page to 20 2021-03-15 20:57:51 +01:00
Bruno Roemers
2e7e041f3a 77643: Update tests 2021-03-15 16:37:45 +01:00
Bruno Roemers
37d46f7b18 77643: BUGFIX: Remove unnecassary dependencies 2021-03-15 15:07:55 +01:00
Bruno Roemers
51e1ac09e7 77643: BUGFIX: Init BreadcrumbsService before routing 2021-03-15 11:40:24 +01:00
Tim Donohue
d1ab193f5d Merge pull request #1001 from atmire/Item-page-redirects
DS-4283: (Google Scholar) Provide Entity Type Label/Name as part of URL path
2021-03-12 13:13:46 -06:00
Art Lowel
4280475364 Merge branch 'main' into Item-page-redirects 2021-03-12 18:19:11 +01:00
Bruno Roemers
c2ca35c522 77643: WIP: Refactor BreadcrumbsComponent into service 2021-03-12 15:36:00 +01:00
Bruno Roemers
7b455c47c8 77643: Rename BreadcrumbsService to BreadcrumbsProviderService 2021-03-12 11:06:42 +01:00
Bram Luyten
b5c1b8cb14 Merge pull request #1052 from bram-atmire/PR1052-i18n-catalogs-update
Sync up translations with latest changes to en.json5
2021-03-11 19:00:38 +01:00
Bram Luyten
b7dbfb9745 Sync up translations with latest changes to en.json5 2021-03-11 18:51:32 +01:00
Bram Luyten
c5d7826a72 Merge pull request #1051 from bram-atmire/PR1050-PT
Addressing Issue 570 - Split of Portuguese translation catalogs
2021-03-11 17:59:34 +01:00
Bram Luyten
2d95d58c3c Addressing Issue 570 - Split of Portuguese translation catalogs 2021-03-11 17:56:50 +01:00
Bram Luyten
28c38972b0 Merge pull request #828 from marciofoz/marciofoz-patch-1
Update pt.json5
2021-03-11 17:36:34 +01:00
marciofoz
42519fc7a0 Update pt.json5 2021-03-11 17:29:19 +01:00
Bram Luyten
bff92f1bc9 Merge pull request #1012 from akoscomp/main
Translate new lines to Hungarian
2021-03-11 17:19:09 +01:00
Bram Luyten
6bbb2aab6f Merge pull request #1018 from reetagithub/main
Update fi.json5
2021-03-11 16:57:57 +01:00
Marie Verdonck
5ecab7de12 77178: Tests for getEmbedSizeParams selector 2021-03-11 16:41:22 +01:00
Yana De Pauw
1172869549 Fix LGTM issues 2021-03-11 15:45:04 +01:00
Yana De Pauw
b4e40c820f Fix issue with clear pagination test 2021-03-11 12:47:44 +01:00
Yana De Pauw
e73f4ca57a 76654: Remove console.logs, fix some issues 2021-03-11 12:09:55 +01:00
Art Lowel
da43a56a0b fix error when state is undefined 2021-03-11 12:09:55 +01:00
Yana De Pauw
b18f9c7c9f Add tests and fix tests 2021-03-11 12:09:54 +01:00
Yana De Pauw
d07f44ac41 76654: Feedback to pagination 2021-03-11 12:08:04 +01:00
Yana De Pauw
fab226912f 76654: PaginationService 2021-03-11 12:08:04 +01:00
Giuseppe Digilio
b3afaa55c7 Merge remote-tracking branch 'origin/main' into CST-3782-fix-repeatable-fields
# Conflicts:
#	src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.scss
2021-03-11 09:29:40 +01:00
Tim Donohue
11b6b3c929 Merge pull request #1035 from atmire/dynamic-theme-support
Add support for dynamic themes
2021-03-10 15:11:14 -06:00
Art Lowel
c004365cee fix tests after merge 2021-03-10 17:33:20 +01:00
Alessandro Martelli
996d54f37e [CST-3782] item deletion on lookup disabled 2021-03-10 17:11:53 +01:00
Art Lowel
95c43c1b00 Merge branch 'main' into dynamic-theme-support 2021-03-10 16:59:03 +01:00
Tim Donohue
31c557062f Merge pull request #978 from 4Science/CST-3620
Update /claimedtasks and /pooltasks to support reloading of workflow actions on individual WorkflowItems
2021-03-10 09:11:11 -06:00
Alessandro Martelli
28894f6764 [CST-3782] lookup search icon 2021-03-10 11:24:42 +01:00
Art Lowel
f1fa69bb3b use embed size in alternative link 2021-03-09 14:33:05 +01:00
Art Lowel
0ae4016f91 fix find-replace mistake 2021-03-08 18:20:41 +01:00
Art Lowel
75c9be026e remove css variables in media queries 2021-03-08 17:51:03 +01:00
Art Lowel
afa7b67532 roll back test changes 2021-03-08 12:10:56 +01:00
Marie Verdonck
fead3bc3fe 77178: Support embed sizes and use them in the ComCol tree 2021-03-05 13:27:42 +01:00
Alessandro Martelli
5201b4a31d [CST-3782] qualdrop move restored 2021-03-04 18:26:03 +01:00
Raf Ponsaerts
83819c5b18 fixed lint issues 2021-03-04 14:32:14 +01:00
Raf Ponsaerts
7a1b98ce83 remove unused import 2021-03-04 13:30:07 +01:00
Alessandro Martelli
5eb0a8744f [CSTPER-3782] custom move events handled correctly 2021-03-04 12:36:57 +01:00
Raf Ponsaerts
4f08ad453f removed whitelines 2021-03-04 09:48:27 +01:00
Tim Donohue
e4454de78c Merge pull request #1024 from tdonohue/add_csrf_support_to_uploader
Add CSRF support to uploader Component
2021-03-03 11:26:05 -06:00
Art Lowel
1bb2d5da29 add support for static assets in theme folders 2021-03-03 17:43:37 +01:00
Art Lowel
7a42a18bfb re-comment css style override example that got accidentally uncommented 2021-03-02 10:03:58 +01:00
Tim Donohue
82035516a7 Bug fix. Ensure onCompleteItem and onErrorItem both reset the CSRF Header (for next item in queue), as onBeforeUploadItem does not seem to be called for every item in the queue. 2021-03-01 16:51:56 -06:00
Art Lowel
2b03d22498 update mock data 2021-03-01 14:31:26 +01:00
Kristof De Langhe
91ca5af1d4 additional theme support tests 2021-03-01 10:38:12 +01:00
Art Lowel
5a6e4b1278 Add support for dynamic themes 2021-03-01 10:38:05 +01:00
Tim Donohue
4a72cb033b Bug fix. Ensure we check for changed token in empty responses. Also ensure we send token before each upload (as it might change between uploads) 2021-02-26 12:39:33 -06:00
Tim Donohue
59676b7c52 Fix broken tests via a new HttpXsrfTokenExtractorMock class. 2021-02-26 12:39:33 -06:00
Tim Donohue
5589016a4e Add XSRF support to uploader component 2021-02-26 12:39:33 -06:00
Tim Donohue
eb7d110683 Export all XSRF constants so they can be used elsewhere 2021-02-26 12:39:33 -06:00
Tim Donohue
70dac6bc8f Merge pull request #1038 from atmire/remove-ng-high-memory
Remove ng-high-memory & remove Node v10 support
2021-02-26 12:32:41 -06:00
lotte
913ead6019 77237: overwriteMerge environment files merge 2021-02-26 17:27:02 +01:00
Art Lowel
f54e582297 bump supported node versions to 12 and 14 2021-02-26 16:24:31 +01:00
Yura Bondarenko
8b2db86268 77205: Workaround: add access_control parent section after child sections 2021-02-26 16:13:20 +01:00
Yura Bondarenko
e23e46b212 Revert "TESTING: sectionID argument to debug getComponentForMenu"
This reverts commit bfbe598bdd.
2021-02-26 16:13:20 +01:00
Yura Bondarenko
bfbe598bdd TESTING: sectionID argument to debug getComponentForMenu 2021-02-26 15:25:00 +01:00
Yura Bondarenko
7e0866afe7 77205: Fix leftover links to /admin/access-control/ 2021-02-26 11:15:17 +01:00
Yura Bondarenko
47adba98b5 77205: Extend FeatureAuthorizationGuard for isCommunityAdmin/isCollectionAdmin 2021-02-26 10:21:51 +01:00
Art Lowel
7e6755bd0a remove ng-high-memory 2021-02-26 10:17:16 +01:00
Yura Bondarenko
1c030e6bad 77205: Add unit tests for authorization-dependent admin menu content 2021-02-26 10:00:42 +01:00
Art Lowel
7a5fecb7a2 Merge pull request #1033 from tdonohue/i18n_cleanup
Cleanup duplicative or incorrect Angular UI i18n keys
2021-02-26 09:39:44 +01:00
Yura Bondarenko
3d4f8c5222 77205: Wrap all section-specific methods in createMenu 2021-02-26 08:33:28 +01:00
Tim Donohue
1537b4e444 Cleanup duplicative or incorrect i18n keys 2021-02-25 16:33:34 -06:00
Alessandro Martelli
a66ec43ccc [CST-3782] Disabled drag when only one value is present 2021-02-25 19:07:51 +01:00
Tim Donohue
4eb16c131c Merge pull request #1031 from tdonohue/fix_1005
Comment out Edit Item tabs which are not yet implemented.
2021-02-25 11:12:53 -06:00
Giuseppe Digilio
a6effcad34 [CST-3620] Changes to show lookup button next to the field 2021-02-25 17:09:33 +01:00
Yura Bondarenko
70e9bb1180 77205: Use existing admin authorization guards for comm/coll 2021-02-25 16:48:33 +01:00
Yura Bondarenko
3f4e032bb5 77205: Add Comm/Coll admin guards & authorization checks 2021-02-25 15:12:31 +01:00
Yura Bondarenko
d401a92a17 77205: Add CanManageGroupGuard & configure routing 2021-02-25 15:12:31 +01:00
Yura Bondarenko
801cea4062 77205: Separate access control section in admin sidebar 2021-02-25 15:12:31 +01:00
Yura Bondarenko
a8544a7f32 77205: Remove access-control from admin routes 2021-02-25 15:12:31 +01:00
Yura Bondarenko
d9eb05d40e 77205: Refactor admin-access-control to access-control 2021-02-25 15:12:31 +01:00
Yura Bondarenko
5eec2efa9c 77205: Move admin-access-control out of +admin 2021-02-25 15:12:31 +01:00
Giuseppe Digilio
ee07d42c9c [CST-3620] fix typo 2021-02-25 13:17:47 +01:00
Tim Donohue
518bbb2cc4 Merge pull request #1015 from atmire/869-submission-embargo-bug
fix #869 Submission embargo bug
2021-02-24 16:29:43 -06:00
Alessandro Martelli
975ef7ebd2 [CST-3782] Style refinements and qualdrop moves fixed 2021-02-24 15:34:21 +01:00
Tim Donohue
be96c6bee6 Comment out tabs which are not yet implemented. 2021-02-23 11:44:22 -06:00
Alessandro Martelli
523b7a497c [CSTPER-3620] Fixed workspace followlink and search filters update 2021-02-22 16:56:29 +01:00
Tim Donohue
2ff232f437 Merge pull request #1022 from atmire/w2p-76922_Search-filter-from-entity-page-carries-over-to-discovery
Fix: Search filter from entity page carries over to discovery
2021-02-19 16:33:40 -06:00
Giuseppe Digilio
c78cd9ad71 [CST-3620] Remove console logs 2021-02-19 13:09:38 +01:00
Giuseppe Digilio
27905b2038 [CST-3620] Fix issue with TasksService findByItem method that returns stale response when second request is made 2021-02-19 13:08:38 +01:00
Giuseppe Digilio
8b57610be4 [CST-3620] Add component destroy on reload of loaded object within the listable-object-component-loader.component.ts 2021-02-19 12:09:12 +01:00
Giuseppe Digilio
8e7fad43b8 [CST-3782] Fix issue with remove button when repeatable group has only one field 2021-02-19 10:49:58 +01:00
Giuseppe Digilio
797596dc45 [CST-3782] Fix issue with merge 2021-02-19 10:46:39 +01:00
Giuseppe Digilio
39b0088c99 Merge remote-tracking branch 'origin/main' into CST-3782-fix-repeatable-fields
# Conflicts:
#	src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.spec.ts
#	src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.ts
2021-02-19 10:27:26 +01:00
Tim Donohue
554dcde8bc Merge pull request #1017 from atmire/w2p-75832_Issue-962_fix-unnecessary-calls-creating-deleting-groups
Fix unnecessary calls when creating/deleting groups
2021-02-18 14:44:47 -06:00
Tim Donohue
777abff666 Merge pull request #984 from atmire/Submission-external-sources-limited-on-metadata-field
Submission external sources limited on metadata field
2021-02-18 14:03:00 -06:00
Giuseppe Digilio
42636c6f95 [CST-3782] Fix issue with dispatchOperationsFromRemoveEvent method 2021-02-18 09:58:06 +01:00
Tim Donohue
f3246fb948 Merge pull request #1014 from atmire/w2p-76634_google-analytics-tracking-id-from-backend
W2p 76634 google analytics tracking id from backend
2021-02-17 17:07:05 -06:00
Giuseppe Digilio
1901ace5a6 [CST-3782] Changes in order to display add more and lookup button at the end of the repeatable fields array 2021-02-17 20:25:46 +01:00
Alessandro Martelli
d208cf16fa [CST-3782] Drag drop restored 2021-02-17 17:57:29 +01:00
Giuseppe Digilio
151b02aeec [CST-3782] Make changes in order to remove template row in form's repeatable fields 2021-02-17 16:10:22 +01:00
Dániel Péter Sipos
ce7e76b609 #885 fix 2021-02-16 16:14:10 +01:00
Dániel Péter Sipos
3b2037a70f #885 ad doctype 2021-02-16 16:01:02 +01:00
Dániel Péter Sipos
4621c0be73 #885 add comment 2021-02-16 15:47:08 +01:00
Dániel Péter Sipos
d6ccf72119 #885 move size to css 2021-02-16 15:41:39 +01:00
Dániel Péter Sipos
80e5199e37 #885 add size to config 2021-02-16 15:07:06 +01:00
Dániel Péter Sipos
488075b9c2 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2021-02-16 14:03:14 +01:00
Yura Bondarenko
fd11ab3751 76922: Add unit tests for ConfigurationSearchPageComponent 2021-02-15 12:39:49 +01:00
Yura Bondarenko
4f0a630e87 76922: Reset router parameters on destroy ConfigurationSearchPageComponent 2021-02-15 11:47:34 +01:00
reetagithub
be09ea939c Update fi.json5
Due to different grammar in Finnish, removed comma from the key "uploader.or"
2021-02-15 10:29:51 +02:00
reetagithub
6b69f82d6d Update fi.json5
Changed the Finnish translations of two 'has files' translation keys, namely search.filters.filter.has_content_in_original_bundle.head and search.filters.applied.f.has_content_in_original_bundle
2021-02-15 09:56:39 +02:00
Kristof De Langhe
91b647e6e5 75940: Unused import fix 2021-02-11 17:42:53 +01:00
Kristof De Langhe
3f6e605cd7 Merge branch 'main' into w2p-75939_Item-links-by-entity
Conflicts:
	src/app/+item-page/edit-item-page/abstract-item-update/abstract-item-update.component.ts
2021-02-11 17:33:39 +01:00
Kristof De Langhe
216e09f889 75316: Feedback 2021-02-11 - import fixes 2021-02-11 17:04:38 +01:00
Marie Verdonck
dd241c86b2 75832: [Issue 962]: Fix no change in search result if no results & fix 404 messages at delete in registry 2021-02-11 12:47:29 +01:00
Andrew Wood
f0a710a9fc fix #869 Submission embargo bug 2021-02-11 10:46:45 +01:00
Alessandro Martelli
d015b6caef [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Test fixes
2021-02-09 16:19:07 +01:00
Bruno Roemers
6424654e6e Fix LGTM Alert for PR #1014 2021-02-09 14:49:26 +01:00
Alessandro Martelli
5f6ad03f6f [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Merge cache part 2
2021-02-09 14:42:38 +01:00
Alessandro Martelli
807d4f5fc7 Merge branch 'main' into CST-3620 2021-02-09 11:23:24 +01:00
Tim Donohue
942dd2e72e Merge pull request #977 from tdonohue/reenable_csrf_protection
Enable Customized CSRF Protection in Angular UI
2021-02-08 11:45:12 -06:00
Tim Donohue
e41a6c1292 Merge pull request #983 from atmire/collection-mapper
Collection mapper
2021-02-08 11:36:31 -06:00
Dániel Péter Sipos
1f566f7993 #885 fix merge error 2021-02-08 16:22:23 +01:00
Marie Verdonck
569f354370 75832: [Issue 962]: Members total in Group registry fixed with GroupDTO 2021-02-08 15:05:27 +01:00
Dániel Péter Sipos
398e9fccc5 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2021-02-08 10:57:40 +01:00
Tim Donohue
31b346d932 Bug fix: Ensure we also look for a change in XSRF token during error responses. 2021-02-05 15:53:27 -06:00
Tim Donohue
43c37c2b75 Update Logout to use POST instead of GET 2021-02-05 15:53:27 -06:00
Tim Donohue
5b23ffa2dc Add custom XSRF interceptor which works with cross domain requests, using new DSPACE-XSRF-TOKEN header 2021-02-05 15:53:26 -06:00
Tim Donohue
3f95b5009f Merge pull request #975 from atmire/cache-redesign-part-2
Cache redesign part 2
2021-02-05 15:35:36 -06:00
Art Lowel
8c0459241f apply cache changes to root dataservice 2021-02-05 17:56:59 +01:00
Art Lowel
1e94e7a5a9 Merge branch 'main' into cache-redesign-part-2 2021-02-05 17:40:32 +01:00
Art Lowel
2afc6a07f0 fix cache issues with edit metadata and resource policy pages 2021-02-05 17:37:59 +01:00
Tim Donohue
8e458554d8 Merge pull request #999 from 4Science/#997
Fix issue with import from external source page
2021-02-05 09:31:52 -06:00
Dániel Péter Sipos
7d02e763f4 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2021-02-05 13:54:15 +01:00
Nagy Akos
3044a91cae Match all lines with English version 2021-02-04 22:53:05 +02:00
Nagy Akos
6105e038b1 Translate new lines to Hungarian 2021-02-04 21:26:18 +02:00
Giuseppe Digilio
ce8e1efa48 Fix issue with comcol-data.service.spec.ts 2021-02-04 18:12:20 +01:00
Tim Donohue
22f5e0a78b Merge pull request #968 from atmire/w2p-74647_Add-meta-generator-page-header
Meta "generator" tag in page header
2021-02-04 10:25:10 -06:00
Bram Luyten
328eb8ac4c Merge pull request #834 from MixonZ/latvian-translation
latvian translation update
2021-02-04 17:17:37 +01:00
Dániel Péter Sipos
22afa57a26 #885 fix media 2021-02-04 17:12:41 +01:00
Mikus
8f54600a6e latvian translation updated 2021-02-04 16:54:24 +01:00
Sascha Szott
3143154d2b German translation fixes (#906)
Contributions to the german message keys by saschaszott
2021-02-04 16:45:50 +01:00
Bram Luyten
64f0a0afbf Merge pull request #705 from akoscomp/master
Add Hungarian translation
2021-02-04 16:24:29 +01:00
Bram Luyten
a6e91ea294 Corrected illegal characters/escaping in hungarian labels 2021-02-04 16:19:09 +01:00
Dániel Péter Sipos
9e0ef1d9dd Merge remote-tracking branch 'upstream/main' into #885-media-viewer
# Conflicts:
#	package.json
#	src/app/+item-page/item-page.module.ts
#	src/app/+item-page/simple/item-types/shared/item.component.ts
#	yarn.lock
2021-02-04 15:28:23 +01:00
Bram Luyten
21cd1a7220 Switching REST to api7.dspace.org and activating Hungarian translation 2021-02-04 14:50:32 +01:00
Nagy Akos
ac75b095c1 translate hu.json5 by Transylvanian Museum Society 2021-02-04 14:50:31 +01:00
Nagy Akos
ba690eeeb9 add Hungarian translation 2021-02-04 14:50:31 +01:00
Bram Luyten
4a5da6d913 Merge pull request #1008 from reetagithub/main
Add the Finnish translation keys of Dspace 7.0
2021-02-04 14:16:50 +01:00
Marie Verdonck
dde149acea 75832: [Issue 962]: Fix unnecessary calls creating/deleting groups - feedback 2021-02-04 12:11:18 +01:00
reetagithub
eb42b5f760 Update fi.json5
The rest of the Finnish translation keys from the third set from the beginning of year 2021.
2021-02-04 09:41:20 +02:00
Kristof De Langhe
9a0e2bf996 74647: Fixed tslint issues 2021-02-03 17:11:11 +01:00
Kristof De Langhe
ccf4afe2e1 Merge branch 'main' into w2p-74647_Add-meta-generator-page-header 2021-02-03 16:58:59 +01:00
Bruno Roemers
ed98e7e39d 76634: Bugfixes 2021-02-02 14:41:36 +01:00
Bruno Roemers
3a486eb81f 76634: Add documentation 2021-02-02 14:40:56 +01:00
Bruno Roemers
3f6cf777b6 76634: Update tests for AppComponent 2021-02-02 12:28:26 +01:00
Bruno Roemers
ce5da5723b 76634: Write tests for GoogleAnalyticsService 2021-02-02 11:54:52 +01:00
Bruno Roemers
20f896e939 76634: Inject document into GoogleAnalyticsService 2021-02-02 11:54:38 +01:00
Bruno Roemers
d574ffafa4 76634: Implement GoogleAnalyticsService 2021-02-01 19:10:15 +01:00
Alessandro Martelli
54c405994c [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Lint
2021-01-29 19:31:54 +01:00
Alessandro Martelli
c65dfc7303 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Fixed test after angular 10 migration
2021-01-29 18:45:41 +01:00
Tim Donohue
d21cca2875 Merge pull request #1003 from atmire/fix-direct-csr
Fix prod mode with preboot disabled
2021-01-29 10:16:29 -06:00
Alessandro Martelli
5ef5a27e2b Merge branch 'main' into CST-3620
# Conflicts:
#	src/app/+my-dspace-page/my-dspace-page.module.ts
#	src/app/core/tasks/tasks.service.ts
#	src/app/shared/mydspace-actions/claimed-task/abstract/claimed-task-actions-abstract.component.ts
#	src/app/shared/mydspace-actions/claimed-task/approve/claimed-task-actions-approve.component.spec.ts
#	src/app/shared/mydspace-actions/claimed-task/edit-metadata/claimed-task-actions-edit-metadata.component.spec.ts
#	src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.spec.ts
#	src/app/shared/mydspace-actions/claimed-task/return-to-pool/claimed-task-actions-return-to-pool.component.spec.ts
#	src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.spec.ts
#	src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.ts
#	src/app/shared/mydspace-actions/mydspace-actions.ts
#	src/app/shared/mydspace-actions/pool-task/pool-task-actions.component.spec.ts
#	src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts
#	src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts
#	src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts
#	src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts
#	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/item-search-result/item-search-result-list-element-submission.component.spec.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/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts
#	src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts
2021-01-29 16:02:07 +01:00
Art Lowel
4b69b48007 fix issue where the app wouldn't start in prod mode if preboot was disabled 2021-01-29 11:26:26 +01:00
Kristof De Langhe
fda24a3838 Merge branch 'main' into w2p-75939_Item-links-by-entity
Conflicts:
	src/app/+collection-page/collection-page.component.ts
2021-01-28 12:56:05 +01:00
Art Lowel
43eb15349b fix LGTM warnings 2021-01-27 18:25:03 +01:00
Art Lowel
15495902ab redirect back to the list after an eperson add, edit or delete 2021-01-27 18:09:36 +01:00
Marie Verdonck
f1407b7f5b 75832: Groups registry refactor 2021-01-27 17:59:26 +01:00
Art Lowel
892512192b fix issue where private files could no longer be downloaded 2021-01-27 17:32:15 +01:00
Art Lowel
0f5c3fdc92 fix issue where a bunch of unnecessary requests where made when creating or removing a metadata field 2021-01-27 17:20:38 +01:00
Tim Donohue
a64cb63d99 Merge pull request #979 from atmire/680-recent-submision-pagination-reload
680 Fix change event reference for recent submission
2021-01-27 10:18:55 -06:00
Kristof De Langhe
7ce8b3d460 75940: missing semicolons 2021-01-27 12:58:38 +01:00
Kristof De Langhe
694d45fd2c 75939: Encode and lowercase entity type url 2021-01-27 11:50:47 +01:00
Kristof De Langhe
1d9d174f87 75940: Item page redirects 2021-01-27 11:50:47 +01:00
Kristof De Langhe
8e75132086 75939: (edit) item links refactored to contain entity types 2021-01-27 11:50:47 +01:00
Yana De Pauw
1942e0e2ba 75895: Angular - Handle redirects 2021-01-27 11:44:12 +01:00
Yana De Pauw
f2da1fa59e 75894: Angular - Routing 2021-01-27 11:44:11 +01:00
Kristof De Langhe
d69bde1327 75316: TSlint error fix 2021-01-27 11:24:40 +01:00
Kristof De Langhe
28ffe18b07 75316: Build error fix 2021-01-27 11:20:07 +01:00
Kristof De Langhe
3c296620c6 v1.22.10 2021-01-27 10:43:14 +01:00
Kristof De Langhe
3ffef2bffa 75316: TSLint fix 2021-01-27 10:31:37 +01:00
Art Lowel
e4d518fca7 fix issue where a relationshiptype wouldn't be found if the subscriber unsubscribed before all types were checked 2021-01-27 10:31:36 +01:00
Kristof De Langhe
d13eabe386 75316: Test fixes 2021-01-27 10:29:55 +01:00
Kristof De Langhe
a08b515335 75316: Only show external sources when configured 2021-01-27 10:27:40 +01:00
Kristof De Langhe
64f726bf30 75316: Deselect relationship on failure + show only enabled externalSources 2021-01-27 10:27:40 +01:00
Andrew Wood
b143ea7e61 680 add typedocs to new interface 2021-01-26 11:41:28 -05:00
Andrew Wood
771183097c 680 Untype incorrectly typed params 2021-01-26 11:39:55 -05:00
Andrew Wood
ee2e3be057 680 Add paginationChangeEvent interface and move to PaginationComponent impl for event handling 2021-01-26 11:39:55 -05:00
Andrew Wood
a51055cc14 680 Fix change event reference for recent submission 2021-01-26 11:39:55 -05:00
Marie Verdonck
62bd8fd278 75413: test fixes 2021-01-26 14:56:07 +01:00
Art Lowel
8efbaebc9c fix issues regarding item and collection mappings 2021-01-26 14:06:19 +01:00
Marie Verdonck
dbfab94a47 75413: collection/item mapper pages as tab in edit pages 2021-01-26 14:04:15 +01:00
Art Lowel
17e8881380 fix LGTM warnings 2021-01-26 11:58:53 +01:00
Art Lowel
57547fda15 add additional tests for shouldDispatchRequest 2021-01-26 11:46:02 +01:00
Art Lowel
298250f654 fix issue where interceptors were executed multiple times for each request 2021-01-26 10:40:59 +01:00
Giuseppe Digilio
743bd0bba2 Fix issue with comcol-data.service.spec.ts 2021-01-26 10:29:23 +01:00
Giuseppe Digilio
653776f119 Fix issue with import from external source page 2021-01-26 09:06:44 +01:00
Art Lowel
d8e6ccf76a fix issue where facets would be empty if you went straight to a search url in prod mode 2021-01-25 18:54:29 +01:00
Tim Donohue
ac9b97d388 Merge pull request #996 from atmire/update-rest-hostname
Update the rest hostname to api7.dspace.org
2021-01-25 09:08:19 -06:00
Art Lowel
3b67efe09d fix group tests and fix issues with the process detail page 2021-01-25 15:39:56 +01:00
Art Lowel
a54275ae21 update the rest hostname to api7.dspace.org 2021-01-22 16:35:42 +01:00
reetagithub
b85c6a0aa1 Update fi.json5
New Finnish translations
2021-01-22 12:05:29 +02:00
Art Lowel
634836158b fix issues with the group edit page 2021-01-21 14:30:59 +01:00
Art Lowel
c66de4fe91 Cache redesign part 2 2021-01-20 17:43:40 +01:00
Tim Donohue
64ba6293c9 Merge pull request #970 from 4Science/upgrade_angular10
Upgrade angular10
2021-01-19 10:00:59 -06:00
Alessandro Martelli
2becaca1b0 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Fixes and debug log
2021-01-19 09:10:24 +01:00
Giuseppe Digilio
c2ba368b40 Fix metadata schema form layout 2021-01-18 19:35:50 +01:00
Giuseppe Digilio
1b1c7f7d2a Fix metadata field form layout 2021-01-18 19:35:35 +01:00
Art Lowel
3c26c61cde import dynamic components in admin search module 2021-01-18 16:57:30 +01:00
Art Lowel
4e826f7ee8 fix SSR injection context issue with Angulartics 2021-01-18 16:57:25 +01:00
Art Lowel
9db9539725 add dynamic item page components to ENTRY_COMPONENTS 2021-01-18 16:57:22 +01:00
Art Lowel
8df117f8ef add dynamic menu components to ENTRY_COMPONENTS 2021-01-18 16:57:19 +01:00
Art Lowel
0308c8bc8e Revert "replace menu decorators with switches to solve an issue where decorators were not loaded in time"
This reverts commit ece84332a0.
2021-01-18 16:57:15 +01:00
reetagithub
0d421a141f Merge pull request #4 from DSpace/main
New Finnish keys January 2021
2021-01-18 11:07:40 +02:00
Giuseppe Digilio
a27c10e980 Fix comment for submission autosave configuration 2021-01-15 18:22:01 +01:00
Giuseppe Digilio
debf70b0e5 Revert "Fix issue with submission save when auto save is enabled"
This reverts commit 2b2b6df9
2021-01-15 18:17:31 +01:00
Giuseppe Digilio
2b2b6df919 Fix issue with submission save when auto save is enabled 2021-01-15 18:09:45 +01:00
Giuseppe Digilio
31045ff156 Removed nested subscribe 2021-01-15 15:20:47 +01:00
Giuseppe Digilio
00153fa92f Removed providedIn attribute for services that don't need 2021-01-15 14:34:28 +01:00
Giuseppe Digilio
9aea3f20ea Fix issue with components that using a custom decorator are not loaded during CSR 2021-01-15 14:18:18 +01:00
Giuseppe Digilio
d8df9c46a5 Fix issue with workspaceitem and workflowitem detail search components 2021-01-15 14:05:40 +01:00
Giuseppe Digilio
44454ec378 import modules optimization 2021-01-14 19:44:46 +01:00
Giuseppe Digilio
3192d190bb change comments for @angular/localize import 2021-01-12 11:16:25 +01:00
Giuseppe Digilio
2b8f436634 changes to address feedback 2021-01-12 10:42:46 +01:00
Giuseppe Digilio
480653cf8f fix deprecated warning 2021-01-12 10:12:32 +01:00
Alessandro Martelli
258e48e9a2 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Text fix
2021-01-11 17:39:35 +01:00
Alessandro Martelli
2bd8084046 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Provided mock and stub instead of empty objects
2021-01-11 16:49:18 +01:00
Giuseppe Digilio
665e07ae1f Changes based on feedback 2021-01-08 14:56:28 +01:00
Giuseppe Digilio
aad23c8001 Remove circular dependencies 2021-01-08 11:12:45 +01:00
Giuseppe Digilio
21d275fc8d Removed unused imports 2021-01-08 09:58:17 +01:00
Giuseppe Digilio
ae18027669 Fix lint error 2021-01-08 09:17:16 +01:00
Giuseppe Digilio
e5af894077 Removed deprecated helper function async 2021-01-07 20:12:15 +01:00
Giuseppe Digilio
4d4e920f0d Merge remote-tracking branch 'origin/main' into upgrade_angular10
# Conflicts:
#	src/app/+admin/admin-access-control/epeople-registry/epeople-registry.component.spec.ts
#	src/app/+admin/admin-access-control/epeople-registry/epeople-registry.component.ts
#	src/app/+admin/admin-access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts
#	src/app/+admin/admin-access-control/group-registry/group-form/group-form.component.spec.ts
#	src/app/+admin/admin-access-control/group-registry/group-form/members-list/members-list.component.spec.ts
#	src/app/+admin/admin-access-control/group-registry/group-form/subgroup-list/subgroups-list.component.spec.ts
#	src/app/+admin/admin-access-control/group-registry/groups-registry.component.ts
#	src/app/+admin/admin-import-metadata-page/metadata-import-page.component.ts
#	src/app/+admin/admin-registries/metadata-registry/metadata-registry.component.ts
#	src/app/+admin/admin-registries/metadata-schema/metadata-schema.component.ts
#	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
#	src/app/+admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.spec.ts
#	src/app/+bitstream-page/bitstream-page.resolver.ts
#	src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts
#	src/app/+bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts
#	src/app/+collection-page/collection-item-mapper/collection-item-mapper.component.ts
#	src/app/+collection-page/collection-page.component.ts
#	src/app/+collection-page/edit-collection-page/collection-roles/collection-roles.component.ts
#	src/app/+collection-page/edit-item-template-page/item-template-page.resolver.spec.ts
#	src/app/+collection-page/edit-item-template-page/item-template-page.resolver.ts
#	src/app/+item-page/edit-item-page/item-authorizations/item-authorizations.component.ts
#	src/app/+item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts
#	src/app/+item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts
#	src/app/+item-page/edit-item-page/item-collection-mapper/item-collection-mapper.component.ts
#	src/app/+item-page/edit-item-page/item-private/item-private.component.ts
#	src/app/+item-page/edit-item-page/item-public/item-public.component.ts
#	src/app/+item-page/edit-item-page/item-reinstate/item-reinstate.component.ts
#	src/app/+item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.ts
#	src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.ts
#	src/app/+item-page/edit-item-page/item-withdraw/item-withdraw.component.ts
#	src/app/+item-page/simple/item-types/shared/item-relationships-utils.ts
#	src/app/+my-dspace-page/collection-selector/collection-selector.component.spec.ts
#	src/app/+search-page/search-tracker.component.ts
#	src/app/app-routing.module.ts
#	src/app/community-list-page/community-list-service.ts
#	src/app/community-list-page/community-list.reducer.spec.ts
#	src/app/core/auth/auth-response-parsing.service.spec.ts
#	src/app/core/auth/auth.interceptor.spec.ts
#	src/app/core/browse/browse.service.spec.ts
#	src/app/core/browse/browse.service.ts
#	src/app/core/cache/builders/link.service.spec.ts
#	src/app/core/cache/builders/remote-data-build.service.ts
#	src/app/core/cache/object-cache.service.spec.ts
#	src/app/core/cache/response.models.ts
#	src/app/core/data/base-response-parsing.service.ts
#	src/app/core/data/bitstream-data.service.ts
#	src/app/core/data/bitstream-format-data.service.ts
#	src/app/core/data/bundle-data.service.spec.ts
#	src/app/core/data/bundle-data.service.ts
#	src/app/core/data/change-analyzer.ts
#	src/app/core/data/collection-data.service.spec.ts
#	src/app/core/data/collection-data.service.ts
#	src/app/core/data/comcol-data.service.spec.ts
#	src/app/core/data/comcol-data.service.ts
#	src/app/core/data/data.service.ts
#	src/app/core/data/entity-type-data.service.ts
#	src/app/core/data/entity-type.service.ts
#	src/app/core/data/feature-authorization/authorization-data.service.ts
#	src/app/core/data/feature-authorization/feature-data.service.ts
#	src/app/core/data/item-template-data.service.ts
#	src/app/core/data/license-data.service.ts
#	src/app/core/data/metadata-field-data.service.ts
#	src/app/core/data/processes/process-data.service.ts
#	src/app/core/data/processes/script-data.service.ts
#	src/app/core/data/relationship.service.spec.ts
#	src/app/core/data/relationship.service.ts
#	src/app/core/data/remote-data.ts
#	src/app/core/data/request.actions.ts
#	src/app/core/data/request.effects.ts
#	src/app/core/data/request.reducer.spec.ts
#	src/app/core/data/request.reducer.ts
#	src/app/core/data/request.service.spec.ts
#	src/app/core/data/request.service.ts
#	src/app/core/dspace-rest/dspace-rest.service.spec.ts
#	src/app/core/eperson/eperson-data.service.spec.ts
#	src/app/core/eperson/eperson-data.service.ts
#	src/app/core/eperson/group-data.service.spec.ts
#	src/app/core/eperson/group-data.service.ts
#	src/app/core/forward-client-ip/forward-client-ip.interceptor.spec.ts
#	src/app/core/index/index.reducer.ts
#	src/app/core/json-patch/json-patch-operations.service.spec.ts
#	src/app/core/json-patch/json-patch-operations.service.ts
#	src/app/core/locale/locale.interceptor.spec.ts
#	src/app/core/registry/registry.service.ts
#	src/app/core/resource-policy/resource-policy.service.ts
#	src/app/core/shared/operators.ts
#	src/app/core/shared/search/search.service.ts
#	src/app/core/submission/submission-object-data.service.ts
#	src/app/core/submission/submission-rest.service.ts
#	src/app/core/submission/vocabularies/vocabulary-entries-response-parsing.service.spec.ts
#	src/app/core/submission/vocabularies/vocabulary.service.spec.ts
#	src/app/core/submission/vocabularies/vocabulary.service.ts
#	src/app/core/submission/workflowitem-data.service.ts
#	src/app/core/tasks/tasks.service.ts
#	src/app/curation-form/curation-form.component.ts
#	src/app/process-page/process-page.resolver.ts
#	src/app/shared/collection-dropdown/collection-dropdown.component.spec.ts
#	src/app/shared/collection-dropdown/collection-dropdown.component.ts
#	src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.spec.ts
#	src/app/shared/comcol-forms/create-comcol-page/create-comcol-page.component.ts
#	src/app/shared/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.spec.ts
#	src/app/shared/comcol-forms/edit-comcol-page/comcol-role/comcol-role.component.spec.ts
#	src/app/shared/comcol-forms/edit-comcol-page/comcol-role/comcol-role.component.ts
#	src/app/shared/dso-selector/dso-selector/dso-selector.component.ts
#	src/app/shared/dso-selector/modal-wrappers/export-metadata-selector/export-metadata-selector.component.ts
#	src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/relationship.effects.ts
#	src/app/shared/form/builder/form-builder.service.ts
#	src/app/shared/item/item-versions/item-versions.component.ts
#	src/app/shared/mocks/remote-data-build.service.mock.ts
#	src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts
#	src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.spec.ts
#	src/app/shared/object-select/collection-select/collection-select.component.spec.ts
#	src/app/shared/object-select/item-select/item-select.component.spec.ts
#	src/app/shared/pagination-drag-and-drop/abstract-paginated-drag-and-drop-list.component.spec.ts
#	src/app/shared/pagination-drag-and-drop/abstract-paginated-drag-and-drop-list.component.ts
#	src/app/shared/resource-policies/form/eperson-group-list/eperson-group-list.component.ts
#	src/app/shared/search/search-query-response.model.ts
#	src/app/statistics/statistics.module.ts
#	src/app/submission/import-external/import-external-searchbar/submission-import-external-searchbar.component.spec.ts
#	src/app/submission/sections/form/section-form.component.ts
#	src/app/submission/sections/upload/section-upload.component.spec.ts
#	src/app/submission/sections/upload/section-upload.component.ts
#	src/app/submission/submission.service.spec.ts
#	src/app/submission/submission.service.ts
2021-01-07 19:17:19 +01:00
Alessandro Martelli
d542072a37 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Fixed test.
Removed unused imports.
2021-01-07 15:29:06 +01:00
Alessandro Martelli
4e5e08671e Merge branch 'main' into CST-3620
# Conflicts:
#	src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts
#	src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts
2021-01-07 15:04:29 +01:00
Tim Donohue
8530357676 Merge pull request #972 from atmire/Private-withdrawn-badges-for-items-everywhere
Private/Withdrawn badges for items everywhere
2021-01-04 11:03:14 -06:00
Tim Donohue
fd7aeacab3 Merge pull request #960 from 4Science/CSTPER-260
Auto-save in new Item Submission form breaks the form
2021-01-04 10:25:41 -06:00
Dániel Péter Sipos
9d61a24f03 #885 fix merge 2021-01-04 10:53:37 +01:00
Dániel Péter Sipos
742a895f13 Merge branch 'main' into #885-media-viewer 2021-01-04 10:30:09 +01:00
Dániel Péter Sipos
09dc9491a3 Merge branch 'main' into #885-media-viewer
# Conflicts:
#	src/app/+item-page/item-page.module.ts
2021-01-04 10:18:05 +01:00
Kristof De Langhe
a06599ef3f 74647: Test case fix 2020-12-24 14:06:20 +01:00
Kristof De Langhe
aed0750d47 Merge branch 'main' into w2p-74647_Add-meta-generator-page-header
Conflicts:
	src/app/core/core.module.ts
	src/app/core/data/root.model.ts
	src/app/core/shared/hal-endpoint.service.ts
2020-12-24 13:44:48 +01:00
Kristof De Langhe
d70685a5f2 74647: findByHref and findAllByHref for RootDataService 2020-12-24 13:39:37 +01:00
Alessandro Martelli
5700450eec [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Failing tests in CI environment refactored
2020-12-22 18:20:22 +01:00
Alessandro Martelli
b80282c243 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Test fix and environment settings restored
2020-12-22 17:32:56 +01:00
Alessandro Martelli
e41e7dfa07 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Cleanup
2020-12-22 16:25:26 +01:00
Alessandro Martelli
704d67da79 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Removed abstraction on claimed-search-result-list-element components
2020-12-22 15:53:43 +01:00
Alessandro Martelli
8013260f78 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Task Service implementation.
ReloadableAction abstraction.
2020-12-22 13:48:12 +01:00
Alessandro Martelli
e32c86f127 [CSTPER-3620] Workflow Actions refresh entire MyDSpace page instead of just WorkflowItem
Task Service implementation.
ReloadableAction abstraction.
2020-12-22 12:58:19 +01:00
Alessandro Martelli
6cf6dee5e6 [835] Auto-save in new Item Submission form breaks the form
Fixed unused imports.
2020-12-22 08:33:23 +01:00
Alessandro Martelli
8e77fac638 [835] Auto-save in new Item Submission form breaks the form
Minor fixes and method computeSectionConfiguredMetadata tested
2020-12-21 19:21:49 +01:00
Alessandro Martelli
042d2e71f0 [835] Auto-save in new Item Submission form breaks the form
Improved form touched state in ngrx store.
2020-12-21 17:27:59 +01:00
Alessandro Martelli
e8255927c5 [835] Auto-save in new Item Submission form breaks the form
Autosave timer switched to milliseconds.
2020-12-21 17:27:59 +01:00
Alessandro Martelli
451881ef08 [835] Auto-save in new Item Submission form breaks the form
Methods renaming
2020-12-21 17:27:59 +01:00
Alessandro Martelli
0794c50d19 [835] Auto-save in new Item Submission form breaks the form
Fixed unused imports.
2020-12-21 17:27:59 +01:00
Alessandro Martelli
de372896e7 [835] Auto-save in new Item Submission form breaks the form
Submission form Save button disabled when no pending operations are present
2020-12-21 17:24:42 +01:00
Alessandro Martelli
d47f686b95 [835] Auto-save in new Item Submission form breaks the form
Section Metadata field tested.
Form Touched filter tested.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
eb144b1551 [835] Auto-save in new Item Submission form breaks the form
Test FormSetAdditionalAction.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
0acaa3e57f [835] Auto-save in new Item Submission form breaks the form
Section metadata dispatched to the store and retrieved in subscription.
Added test case for hasMetadataEnrichment.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
9b752b443e [835] Auto-save in new Item Submission form breaks the form
Lint corrections.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
55bcdf0a25 [835] Auto-save in new Item Submission form breaks the form
Minor changes and cleanup.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
999993734f [835] Auto-save in new Item Submission form breaks the form
Tests fixed.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
875a43a14e [835] Auto-save in new Item Submission form breaks the form
Section formId added to the section state.
Error filtering during the parsing of the submission response.
2020-12-21 17:23:03 +01:00
Alessandro Martelli
9f33855a0f [835] Auto-save in new Item Submission form breaks the form
Autosave deactivated
2020-12-21 17:22:33 +01:00
Alessandro Martelli
8111bdd3ce [835] Auto-save in new Item Submission form breaks the form
Store additions:
1. Form AdditionalData: contains the list of the touched metadata
2. Submission metadata: contains the list of the metadata ids assignable for each section

We keep also track whether a section ha focused fields or not.
2020-12-21 17:22:33 +01:00
Alessandro Martelli
82b7b8aa6f [835] Auto-save in new Item Submission form breaks the form
Notifications are enable only for manual submission savings.
2020-12-21 17:14:36 +01:00
Alessandro Martelli
6136162a21 [835] Auto-save in new Item Submission form breaks the form
Notifications are disabled for submission section savings.
2020-12-21 17:14:36 +01:00
Alessandro Martelli
5ae649f7a5 [835] Auto-save in new Item Submission form breaks the form
Label Add on Form Array inputs.
2020-12-21 17:14:36 +01:00
Alessandro Martelli
c9f4568b69 [835] Auto-save in new Item Submission form breaks the form
Disable autosave when timer is equal to 0
2020-12-21 17:14:36 +01:00
Tim Donohue
e867badcb5 Merge pull request #961 from atmire/cache-redesign-part-1
Cache redesign part 1
2020-12-17 10:07:51 -06:00
Art Lowel
ece84332a0 replace menu decorators with switches to solve an issue where decorators were not loaded in time 2020-12-16 17:04:57 +01:00
Giuseppe Digilio
9f22324da0 Update allowed CommonJs dependencies 2020-12-16 17:04:28 +01:00
Art Lowel
54d0569bab adapt klaro code to be compatible with v0.7 2020-12-15 15:18:41 +01:00
Art Lowel
4e18fa35ca Cache redesign part 1, and add support for alternative links 2020-12-14 16:09:33 +01:00
Kristof De Langhe
c3bc730e57 Merge branch 'main' into w2p-75058_Private-Withdrawn-badges-for-items-everywhere
Conflicts:
	src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts
	src/app/shared/shared.module.ts
2020-12-14 11:44:57 +01:00
Tim Donohue
17ca2c4a21 Merge pull request #965 from atmire/Issue-964-getEntityTypeByLabel-impl
issue 964 properly impl getEntityTypeByLabel
2020-12-11 13:56:34 -06:00
Giuseppe Digilio
574caeb528 fix lint error 2020-12-11 18:55:06 +01:00
Giuseppe Digilio
caa4700d06 Fixed merge with main 2020-12-11 18:37:24 +01:00
Giuseppe Digilio
dfa91e04fd Merge remote-tracking branch 'remotes/origin/main' into upgrade_angular10
# Conflicts:
#	src/app/+item-page/item-page.module.ts
#	src/app/core/shared/item.model.ts
#	src/app/shared/object-grid/item-grid-element/item-types/item/item-grid-element.component.spec.ts
#	src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.ts
#	src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.ts
#	src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.ts
#	src/app/shared/search/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts
#	src/app/shared/shared.module.ts
2020-12-11 18:13:47 +01:00
Giuseppe Digilio
fcec66ebb7 Update dependencies 2020-12-11 18:08:43 +01:00
Tim Donohue
f4853972cc Merge pull request #937 from 4Science/comcol-resource-policies
Comcol resource policies
2020-12-11 10:02:46 -06:00
Giuseppe Digilio
752e415dce Fixed issue with components extends a component without a super call in the constructor 2020-12-11 16:38:47 +01:00
Giuseppe Digilio
c2e0ba9d98 fixed issue with failed request of resource policy edit 2020-12-11 09:53:37 +01:00
Giuseppe Digilio
f86f95e0f9 Merge remote-tracking branch 'remotes/origin/main' into comcol-resource-policies
# Conflicts:
#	src/app/shared/shared.module.ts
2020-12-11 09:30:38 +01:00
Tim Donohue
63e0c2f29a Merge pull request #967 from atmire/item-view-relationship-query-fix
Item view relationship query fix
2020-12-10 16:44:32 -06:00
Tim Donohue
ab9d5b409d Merge pull request #952 from atmire/Filter-queries-correct-operators
Filter queries using correct operators
2020-12-10 16:39:02 -06:00
Tim Donohue
f587170a11 Merge pull request #951 from atmire/w2p-74199_Admin-search-dialogs
Separate components for untyped items
2020-12-10 16:13:22 -06:00
Andrew Wood
06bb213078 Issue 964 make solution synchronous 2020-12-10 12:49:05 -05:00
Andrew Wood
10e09b69be issue 964 properly impl getEntityTypeByLabel 2020-12-10 11:08:22 -05:00
Yana De Pauw
5323477c49 Merge remote-tracking branch 'upstream/main' into w2p-74199_Admin-search-dialogs 2020-12-10 13:57:18 +01:00
Kevin Van de Velde
c0143c0ece Merge remote-tracking branch 'dspace/main' into item-view-relationship-query-fix 2020-12-10 11:04:30 +01:00
Raf Ponsaerts
7610f9cf50 Merge remote-tracking branch 'dspace/main' into w2p-74647_Add-meta-generator-page-header 2020-12-10 11:03:35 +01:00
Tim Donohue
39582c9243 Merge pull request #969 from tdonohue/sync_docker_with_backend
Sync Docker compose scripts with backend (DSpace/DSpace)
2020-12-09 17:19:13 -06:00
Tim Donohue
804905d62e Sync Docker compose scripts with backend (DSpace/DSpace) 2020-12-09 13:38:17 -06:00
Giuseppe Digilio
b1d851a3a8 Fix issue with _font_awesome_imports helper that can't import scss files properly 2020-12-09 14:13:30 +01:00
Kristof De Langhe
f7f784157d 74647: Add Generator meta tag on all pages 2020-12-08 14:51:40 +01:00
Kevin Van de Velde
01d81783fc Fixing an issue where the relationship query did a fuzzy query with UUID's (Test fix) 2020-12-08 14:40:48 +01:00
Kevin Van de Velde
9e9c07b9d7 Fixing an issue where the relationship query did a fuzzy query with UUID's 2020-12-08 14:21:35 +01:00
Kristof De Langhe
2087a20151 75058: message fix, badge placement for entity types grid, alerts on full item pages 2020-12-08 14:07:20 +01:00
Yana De Pauw
52d11932cb Fix issues with type badges in tests 2020-12-08 13:30:31 +01:00
Kristof De Langhe
fa36b3518d 75058: multiple badges fix, item alerts, tests 2020-12-08 13:07:18 +01:00
Yana De Pauw
1cc9349608 Merge remote-tracking branch 'upstream/main' into w2p-74199_Admin-search-dialogs 2020-12-08 10:59:09 +01:00
Kristof De Langhe
d50dd12d3d 75058: Added Withdrawn and Private badges for item list/grid components everywhere 2020-12-07 17:54:30 +01:00
Kristof De Langhe
be05647e5d 74647: Generator meta 2020-12-07 16:42:33 +01:00
Giuseppe Digilio
6da28c1e29 Temporary disable import for themed scss variables 2020-12-07 14:32:44 +01:00
Giuseppe Digilio
eed458569f Fix issue with sass-loader options 2020-12-07 14:28:57 +01:00
Giuseppe Digilio
5db5e0978a update sass-resources-loader 2020-12-07 11:27:59 +01:00
Giuseppe Digilio
84840678d2 Several fixes after merge with main 2020-12-04 14:16:40 +01:00
Giuseppe Digilio
948e002225 Merge remote-tracking branch 'remotes/origin/main' into upgrade_angular10
# Conflicts:
#	package.json
#	server.ts
#	src/app/+admin/admin-access-control/epeople-registry/epeople-registry.component.ts
#	src/app/+admin/admin-access-control/group-registry/group-form/group-form.component.ts
#	src/app/+admin/admin-access-control/group-registry/groups-registry.component.spec.ts
#	src/app/+admin/admin-access-control/group-registry/groups-registry.component.ts
#	src/app/+collection-page/collection-page.component.ts
#	src/app/+item-page/edit-item-page/item-page-reinstate.guard.ts
#	src/app/+item-page/edit-item-page/item-page-withdraw.guard.ts
#	src/app/+item-page/edit-item-page/item-relationships/edit-relationship-list/edit-relationship-list.component.ts
#	src/app/+item-page/edit-item-page/item-relationships/item-relationships.component.ts
#	src/app/+item-page/item-page-administrator.guard.ts
#	src/app/app-routing.module.ts
#	src/app/community-list-page/community-list-service.ts
#	src/app/core/data/entity-type.service.ts
#	src/app/core/data/feature-authorization/feature-authorization-guard/dso-page-feature.guard.spec.ts
#	src/app/core/data/feature-authorization/feature-authorization-guard/feature-authorization.guard.spec.ts
#	src/app/core/data/feature-authorization/feature-authorization-guard/feature-authorization.guard.ts
#	src/app/core/data/feature-authorization/feature-authorization-guard/site-administrator.guard.ts
#	src/app/core/data/feature-authorization/feature-authorization-guard/site-register.guard.ts
#	src/app/core/data/object-updates/object-updates.reducer.ts
#	src/app/core/shared/operators.ts
#	src/app/process-page/detail/process-detail.component.ts
#	src/app/shared/comcol-forms/delete-comcol-page/delete-comcol-page.component.ts
#	src/app/shared/dso-selector/dso-selector/dso-selector.component.ts
#	src/app/shared/input-suggestions/filter-suggestions/filter-input-suggestions.component.ts
#	src/app/shared/object-grid/grid-thumbnail/grid-thumbnail.component.ts
#	src/app/shared/shared.module.ts
#	yarn.lock
2020-12-04 11:36:48 +01:00
Giuseppe Digilio
79fa93bea9 Set providedIn root for services using inject tokens 2020-12-04 11:18:59 +01:00
Giuseppe Digilio
0f77e5cd92 Merge remote-tracking branch 'remotes/origin/main' into comcol-resource-policies 2020-12-04 10:52:30 +01:00
Giuseppe Digilio
18a07b571b Fix build error 2020-12-04 10:46:54 +01:00
Giuseppe Digilio
20b5721e3c Fixed lint errors and add lint fix script 2020-12-04 10:32:46 +01:00
Giuseppe Digilio
587affd064 added missing decorator for classes that use Angular features 2020-12-04 10:30:45 +01:00
Giuseppe Digilio
30d4c6ab5a fixed tests 2020-12-04 09:22:31 +01:00
Tim Donohue
32a29c4a17 Merge pull request #925 from atmire/w2p-74179_Deleting-groups
Fix delete and edit for Groups
2020-12-03 15:59:04 -06:00
Tim Donohue
6e9c129b6e Merge pull request #955 from atmire/401-login-page-and-403-page
401 login page and 403 page
2020-12-03 15:44:30 -06:00
Giuseppe Digilio
09101e83f3 temporary disabled problematic tests 2020-12-03 19:59:00 +01:00
Giuseppe Digilio
6123962e47 further changes for angular 10 2020-12-03 19:55:19 +01:00
Giuseppe Digilio
10d0c2e518 fixed tests after angular 10 upgrade 2020-12-03 19:45:05 +01:00
Giuseppe Digilio
9ed1c74f29 optimized module imports 2020-12-03 19:36:19 +01:00
Giuseppe Digilio
c841a135c9 Merge remote-tracking branch 'remotes/origin/main' into comcol-resource-policies
# Conflicts:
#	src/app/shared/shared.module.ts
2020-12-03 17:21:52 +01:00
Kristof De Langhe
411e2bd746 74612: Remove 401 pages and add login redirect to feature-authorization guards 2020-12-03 14:38:27 +01:00
Dániel Péter Sipos
152923aba7 #885 remove elements form test 2020-12-03 11:19:51 +01:00
Dániel Péter Sipos
84bb449c8e Merge branch 'main' into #885-media-viewer 2020-12-03 11:17:08 +01:00
Giuseppe Digilio
308aa34d8a fixed form builder service after angular 10 upgrade 2020-12-03 10:37:24 +01:00
Giuseppe Digilio
265b74f3d6 fixed SubmissionImportExternalPreviewComponent after angular 10 upgrade 2020-12-03 10:08:59 +01:00
Giuseppe Digilio
ad9b676bec fixed menu effects after angular 10 upgrade 2020-12-03 09:31:00 +01:00
Giuseppe Digilio
58f1cbe5e5 fixed collection selector component after angular 10 upgrade 2020-12-02 16:19:26 +01:00
Giuseppe Digilio
b49d46176b fixed dynamic disabled component after angular 10 upgrade 2020-12-02 12:38:26 +01:00
Giuseppe Digilio
9336693cc7 Removed entry components from module definitions 2020-12-01 20:38:03 +01:00
Giuseppe Digilio
18160b16db fixed absolute import paths 2020-12-01 20:33:17 +01:00
Giuseppe Digilio
ef0c574473 fixed collection dropdown component after angular 10 upgrade 2020-12-01 15:23:41 +01:00
Kristof De Langhe
4145f829a7 Merge branch 'main' into w2p-74612_Ask-unauthenticated-users-to-log-in 2020-12-01 14:52:26 +01:00
Kristof De Langhe
67de6538e5 74606: LGTM issue fixes 2020-12-01 14:47:03 +01:00
Kristof De Langhe
e15b66aa1b Merge branch 'main' into w2p-74606_Ensure-the-correct-operators-are-used-for-filter-queries 2020-12-01 14:38:19 +01:00
Marie Verdonck
2243e8a76c 74848: Check so warn message not shown on new group form 2020-12-01 14:28:47 +01:00
Marie Verdonck
dee3043c9f 74179/PR#925: Test fixes 2020-12-01 13:43:15 +01:00
Marie Verdonck
dfd7468b88 74179/PR#925: Groups with linked dso (workflow groups) => No edit/delete possible + alert on edit page with link to edit roles on comcol page 2020-12-01 13:43:15 +01:00
Marie Verdonck
1fcd4d6c3e 74179: NameAlreadyInUse check removed since not correctly shown if there are similarly named groups (group name search not exact) 2020-12-01 13:43:15 +01:00
Art Lowel
3c20cb7ee1 fix positioning of group delete button and clearing of the cache on delete 2020-12-01 13:43:15 +01:00
Marie Verdonck
46defed6f2 74179: Test fix 2020-12-01 13:43:15 +01:00
Marie Verdonck
f8a8af32da 74179: Delete group cache cleared, redirect & delete button moved on group edit page 2020-12-01 13:43:15 +01:00
Marie Verdonck
e3578a6b0f 74179: Edit group functionality added + test (fixes) 2020-12-01 13:43:15 +01:00
Marie Verdonck
ab88dc3c77 74179: Test fixes after changes for empty results in eperson/group registries 2020-12-01 13:43:15 +01:00
Marie Verdonck
bdd1a675f1 74179: Fix for no result message not shown if no search results epeople/group registry 2020-12-01 13:43:15 +01:00
Marie Verdonck
1903530f77 74179: Deleting groups notifications, authorisation check, button on edit group page 2020-12-01 13:43:14 +01:00
Giuseppe Digilio
5b5d2031d5 fixed date picker form component after angular 10 upgrade 2020-12-01 11:50:27 +01:00
Tim Donohue
aa8feb01b3 Merge pull request #954 from 4Science/orcid_labels
replaced orcidV2 label keys with orcid
2020-11-30 11:10:17 -06:00
Tim Donohue
4a6939f621 Merge pull request #959 from DSpace/tdonohue-correct_build
Update build.yml to not limit by branch
2020-11-30 10:39:44 -06:00
Tim Donohue
96d7f9c2d7 Update build.yml to not limit by branch 2020-11-30 10:12:02 -06:00
Tim Donohue
0bfa425e57 Update build status badge to point to GitHub 2020-11-25 17:08:20 -06:00
Tim Donohue
5e23a84ea3 Merge pull request #956 from tdonohue/github_ci
Add CI to Github via Actions (based on Travis CI config)
2020-11-25 10:20:04 -06:00
Tim Donohue
3f1266e485 Enable only for main branch pushes or PRs 2020-11-25 09:26:43 -06:00
Tim Donohue
49effd14df Rename job to "tests". Space out steps to make it easier to read. 2020-11-25 08:58:38 -06:00
Tim Donohue
d241d4ea6a Revert to checkout@v1 per https://community.codecov.io/t/codecov-status-stuck-at-waiting-for-status-to-be-reported-on-github/341/40 2020-11-25 08:27:25 -06:00
Tim Donohue
e32b435edd Remove .travis.yml Minor comment cleanup to build.yml 2020-11-24 17:07:49 -06:00
Tim Donohue
b036c084b7 Try codecov bash uploader to see if it works 2020-11-24 16:38:07 -06:00
Tim Donohue
8d526f0e80 Move codecov reports to last step 2020-11-24 16:03:22 -06:00
Tim Donohue
bc0b0a26c9 Initial GitHub Actions CI settings. Rename docker-compose-travis to docker-compose-ci 2020-11-24 15:15:58 -06:00
Kristof De Langhe
8486fecc17 74612: Post-merge test fixes 2020-11-24 12:03:34 +01:00
Yana De Pauw
6b69f66a8d 74572: Update type badge to not rely on constructor name 2020-11-24 11:58:16 +01:00
Kristof De Langhe
c28af7d7c8 Merge branch 'main' into w2p-74612_Ask-unauthenticated-users-to-log-in
Conflicts:
	src/app/+item-page/simple/item-page.component.ts
	src/app/process-page/detail/process-detail.component.spec.ts
	src/app/process-page/detail/process-detail.component.ts
2020-11-24 11:34:17 +01:00
Kristof De Langhe
b2369b237e 74612: Redirect bugfix 2020-11-24 10:36:50 +01:00
Giuseppe Digilio
4473395cb9 Fixed "CommonJS or AMD dependencies can cause optimization bailouts." warnings
https://stackoverflow.com/questions/62592903/upgrading-to-angular-10-fix-commonjs-or-amd-dependencies-can-cause-optimizatio/62604034#62604034
2020-11-23 16:52:55 +01:00
Tim Donohue
d78549c2ff Merge pull request #938 from 4Science/CSTPER-222
Metadata identifier for Communities and Collections
2020-11-23 09:21:37 -06:00
Giuseppe Digilio
9f5204992d Replaced deprecated rxjs flatMap operator 2020-11-23 15:38:02 +01:00
Dániel Péter Sipos
b14ae840b0 #885 fix build 2020-11-23 09:47:56 +01:00
Dániel Péter Sipos
b5ffe718d2 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2020-11-23 09:40:09 +01:00
Corrado Lombardi
f8076051b4 replaced orcidV2 label keys with orcid 2020-11-23 09:14:16 +01:00
Tim Donohue
f1b1f8199b Merge pull request #827 from atmire/Support-for-process-output
Support for process output on detail page
2020-11-20 15:10:37 -06:00
Tim Donohue
c5898b4182 Merge pull request #929 from atmire/w2p-74275_Issue-2988_Reset-pw-eperson-created-in-admin-ui
Issue 2988: Password (re)set for eperson with add PatchOperation
2020-11-20 14:31:55 -06:00
Giuseppe Digilio
44a65c7a23 upgrade to angular 10 intermediate commit 2020-11-20 21:10:36 +01:00
Giuseppe Digilio
9abc827fc1 fix for dynamic form after upgrade 2020-11-20 21:10:09 +01:00
Tim Donohue
6e0e5a8fee Merge pull request #941 from atmire/74609-Fix-type-error-on-search-pages
Fix TypeError on search pages
2020-11-20 11:51:16 -06:00
Giuseppe Digilio
59a0263817 upgrade to angular 10 intermediate commit 2020-11-20 17:06:42 +01:00
Giuseppe Digilio
79285b203b Changed to use TestBed.inject method instead of deprecated TestBed.get 2020-11-20 15:21:34 +01:00
Dániel Péter Sipos
dc85bd9bff #885 disable media viewer 2020-11-20 15:12:26 +01:00
Dániel Péter Sipos
2ed7d153fa #885 remove redundant config 2020-11-20 15:11:12 +01:00
Dániel Péter Sipos
81f0663914 Merge branch 'main' into #885-media-viewer
# Conflicts:
#	src/config/global-config.interface.ts
2020-11-20 15:08:53 +01:00
Giuseppe Digilio
32dc9a80a6 Replaced ngx-bootstrap TooltipModule in favour of @ng-bootstrap ngbTooltip 2020-11-20 12:41:13 +01:00
Yana De Pauw
9c2ca90c32 Remove unused import 2020-11-20 11:11:58 +01:00
Yana De Pauw
6c80f0797b Merge remote-tracking branch 'upstream/main' into w2p-74199_Admin-search-dialogs 2020-11-20 10:44:24 +01:00
Tim Donohue
c05f4fc912 Merge pull request #942 from atmire/74615-Remove-baseUrl-api-workaround
Remove workaround for baseUrl ending in /api
2020-11-19 17:04:05 -06:00
Tim Donohue
2fa24b5d5c Merge pull request #953 from DSpace/codecov_patch_info_mode
Switch codecov 'patch' checks to informational only
2020-11-19 16:25:04 -06:00
Tim Donohue
130e2e500b Merge pull request #944 from atmire/w2p-74345_Fix-comcol-tree-issues
Fix com/col tree issues (#899 & #908)
2020-11-19 16:23:39 -06:00
Tim Donohue
c9f4baa4d4 Merge pull request #916 from 4Science/CSTPER-66
Communities and collections not shown right after creation
2020-11-19 14:52:46 -06:00
Tim Donohue
de28b02cf6 Switch patch checks to informational only 2020-11-19 14:41:41 -06:00
Tim Donohue
8bc85d5ed1 Merge pull request #933 from atmire/w2p-74348_Fix-security-issues-LGTM
Fix security issues reported by LGTM
2020-11-19 14:20:53 -06:00
Giuseppe Digilio
764ad4a0c0 fix update of @ng-dynamic-forms libs 2020-11-19 18:29:40 +01:00
Art Lowel
921fbe5269 Merge pull request #926 from qultoltd/#674-fix-thumbnail
#674 fix thumbnail
2020-11-19 16:53:15 +01:00
Yana De Pauw
bc8c0aaeac Merge remote-tracking branch 'upstream/main' into 74609-Fix-type-error-on-search-pages 2020-11-19 14:03:16 +01:00
Yana De Pauw
c1fba059ca 74572: Fix typo 2020-11-19 13:12:53 +01:00
Yana De Pauw
c38cee7561 74572: Separate components for untyped items 2020-11-19 13:12:53 +01:00
Yana De Pauw
963d72ddcd 74348: Increase ratelimiter to 500 2020-11-19 12:11:40 +01:00
Giuseppe Digilio
92a4b9fa78 updated @ng-bootstrap and @ng-dynamic-forms 2020-11-19 11:25:23 +01:00
Tim Donohue
8d44b5d2f0 Merge pull request #934 from atmire/w2p-74354_Handle-redicts-fix
Fix for handle redirects
2020-11-18 16:22:04 -06:00
Tim Donohue
1ed39d8040 Merge pull request #545 from atmire/w2p-67685_Add-relationships-in-edit-item
Create relationships as an admin in edit item
2020-11-18 14:48:13 -06:00
Tim Donohue
cdf26f12d4 Merge pull request #946 from atmire/GH-945_rimraf-clean
#945 Clean node at end to avoid rimraf error
2020-11-18 14:43:12 -06:00
Tim Donohue
b70daafda2 Merge pull request #930 from atmire/Admin-search-dialogs
Admin search dialogs
2020-11-18 14:27:41 -06:00
Giuseppe Digilio
1e918d6df8 updated Angular Universal 2020-11-18 19:06:25 +01:00
Giuseppe Digilio
1b21af3191 updated to the latest 9.x version 2020-11-18 19:02:55 +01:00
Giuseppe Digilio
17d7e10ac3 updated to the latest 8.x version 2020-11-18 18:48:54 +01:00
Giuseppe Digilio
46c748efba set target to es2015 2020-11-18 18:46:46 +01:00
Giuseppe Digilio
1507ec0ffa using dynamic imports for lazy loaded modules via the router 2020-11-18 18:05:40 +01:00
Kristof De Langhe
cb6381f7ee 74606: Move stripping of suggestions to SearchFacetFilter 2020-11-18 17:59:22 +01:00
Kristof De Langhe
ab755d3fd9 74612: 403 page + redirect to login on unauthorized 2020-11-18 14:05:36 +01:00
Alessandro Martelli
2369892c3f [CSTPER-222] handle metadata reading for communities and collections
Removed handle field and the setter from community and collection models.
2020-11-18 12:08:57 +01:00
Corrado Lombardi
dfc26efd12 renamed private function 2020-11-18 10:51:55 +01:00
Chris Wilper
9056514144 #945 Clean node at end to avoid rimraf error 2020-11-17 17:27:30 -05:00
Corrado Lombardi
c2e65e2811 removed unused import 2020-11-17 19:12:34 +01:00
Corrado Lombardi
8da8273d82 removed unused imports 2020-11-17 18:51:49 +01:00
Tim Donohue
12da991630 Merge pull request #932 from atmire/w2p-74356_Issue-867_Missing-labels-externalsources
Submission relationship lookup externalsources: Missing i18n labels & other issues
2020-11-17 11:01:29 -06:00
Kristof De Langhe
05406e6919 74606: Search Utils test cases + test fixes 2020-11-17 15:43:05 +01:00
Yana De Pauw
77ca0f049a 74615: Remove workaround for baseUrl ending in /api 2020-11-17 15:38:30 +01:00
Dániel Péter Sipos
3303094efe #674 imort fix 2020-11-17 14:34:42 +01:00
Dániel Péter Sipos
aca0641232 #674 fix 2020-11-17 14:32:10 +01:00
Kristof De Langhe
6f9e8bd3bf 74606: Ensure the correct operators are used for filter queries 2020-11-17 14:31:07 +01:00
Yana De Pauw
9e4e5e4bdf Fix ping 2020-11-17 14:28:40 +01:00
Yana De Pauw
0a0decfc33 74609: Fix TypeError on search pages 2020-11-17 14:21:14 +01:00
Dániel Péter Sipos
55b6486cda #674 fix 2020-11-17 14:09:03 +01:00
Dániel Péter Sipos
ffd0605511 Merge branch 'main' into #674-fix-thumbnail 2020-11-17 13:36:21 +01:00
Corrado Lombardi
c40f31279f [CSTPER-66] moved refreshCache function to common ComColDataService, tests have been moved accordingly.
Used HalEndpointService to discover communities search top endpoint
2020-11-17 09:29:01 +01:00
Marie Verdonck
140f660cf4 74345: Fix com/col tree issues (#899 & #908):
https://github.com/DSpace/dspace-angular/issues/899
https://github.com/DSpace/dspace-angular/issues/908
2020-11-16 17:57:59 +01:00
Yana De Pauw
82811ebafd 74348: Add comments and update rate limit config 2020-11-16 09:34:34 +01:00
Dániel Péter Sipos
c377a3e45a #674 fix 2020-11-13 17:31:05 +01:00
Dániel Péter Sipos
5923a97336 #674 remove un used imports 2020-11-13 16:51:23 +01:00
Dániel Péter Sipos
bb1d863470 #674 fix tests 2020-11-13 16:08:52 +01:00
Dániel Péter Sipos
cb3131e31b #674 remove un used imports 2020-11-13 14:29:03 +01:00
Dániel Péter Sipos
7b160cdbd3 #674 revert eror throw and ad set/get for grid communities and collections 2020-11-13 14:12:27 +01:00
Marie Verdonck
df5570c7b0 Refactored to use process log bitstream 2020-11-12 17:35:39 +01:00
Art Lowel
0e05184d20 remove unused import 2020-11-12 09:39:16 +01:00
Tim Donohue
2ee815908f Merge pull request #939 from tdonohue/use_codecov_bash_script
Use codecov bash script instead of codecov node module
2020-11-10 14:20:05 -06:00
Tim Donohue
086449d82c Remove 'codecov' node module 2020-11-10 13:28:21 -06:00
Tim Donohue
ff173f1f0f Switch to using Codecov bash script instead of node module to upload reports 2020-11-10 13:28:21 -06:00
Alessandro Martelli
fa8ecd16a7 [CSTPER-222] handle metadata reading for communities and collections
Fixed unused imports.
2020-11-10 14:50:46 +01:00
Alessandro Martelli
4a2fe76ef0 [CSTPER-222] handle metadata reading for communities and collections
Fixed tests
2020-11-10 14:30:52 +01:00
Alessandro Martelli
fa113babc7 [CSTPER-222] handle metadata reading for communities and collections
Community and Collection handle tests
2020-11-10 14:03:40 +01:00
Alessandro Martelli
5c7a111a61 [CSTPER-222] handle metadata reading for communities and collections 2020-11-10 14:00:30 +01:00
Alessandro Martelli
65516b3880 [CSTPER-222] handle metadata reading for communities and collections 2020-11-10 14:00:30 +01:00
Giuseppe Digilio
0072486f96 Fix issue where the edit of resource policies failed even if successfully 2020-11-10 09:53:44 +01:00
Giuseppe Digilio
db7514fd25 Fix issue where the creation of resource policies failed even if successfully 2020-11-10 09:53:30 +01:00
Giuseppe Digilio
926cce8286 Add route to create/edit a collection policies 2020-11-09 19:24:43 +01:00
Giuseppe Digilio
e0c4b836d9 Add route to create/edit a community policies 2020-11-09 19:24:32 +01:00
Giuseppe Digilio
317b61b3a4 moved ResourcePolicyEditComponent and ResourcePolicyCreateComponent to shared.module.ts 2020-11-09 19:13:50 +01:00
Giuseppe Digilio
8b6f99e2be Added i18n labels for communities/collections authorizations edit page 2020-11-09 18:22:42 +01:00
Giuseppe Digilio
29df9c609e Added authorizations edit page for collections 2020-11-09 18:21:37 +01:00
Giuseppe Digilio
042e9a06e8 Added authorizations edit page for community 2020-11-09 18:21:13 +01:00
Dániel Péter Sipos
ccb20ea2d7 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2020-11-09 13:27:08 +01:00
Dániel Péter Sipos
17d629779e #885 remove unused imports 2020-11-09 13:15:55 +01:00
Dániel Péter Sipos
337ecca4a3 #885 fix tests 2020-11-09 12:41:03 +01:00
Marie Verdonck
61f2a3c0f8 Missing key for button title added 2020-11-09 10:06:26 +01:00
Tim Donohue
9fc732085e Merge pull request #935 from tdonohue/fix_codecov
Update Travis to only send coverage reports to codecov *once*
2020-11-06 15:01:49 -06:00
Tim Donohue
9b7eac625c Update Travis to only send coverage reports to codecov *once* 2020-11-06 12:20:25 -06:00
Tim Donohue
b10b972da3 Merge pull request #880 from mwoodiupui/879
[#879] Clarify the use of the production build script, and when configuration is processed
2020-11-06 09:34:49 -06:00
Yana De Pauw
653ceca512 74354: Handle redirects don't work 2020-11-06 15:46:52 +01:00
Yana De Pauw
3a486f5117 Update comment to be more clear 2020-11-06 14:47:14 +01:00
Yana De Pauw
5ef7ae1b86 74348: Fix security issues reported by LGTM 2020-11-06 14:30:39 +01:00
Dániel Péter Sipos
1913094bdf #885 check bitsteam fail 2020-11-06 13:54:11 +01:00
Dániel Péter Sipos
d17b874156 #885 remove auto play and filter unsupported media types 2020-11-06 13:40:28 +01:00
Dániel Péter Sipos
3802436531 Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2020-11-06 13:14:15 +01:00
Dániel Péter Sipos
115a59148f #885 change preview if user is authernticated 2020-11-06 13:13:45 +01:00
Samuel
1ac1a4263a PR 545 Create relationships as an admin in edit item - fix lgtm issues 2020-11-06 11:44:41 +01:00
Samuel
06163ce777 PR 545 Create relationships as an admin in edit item - feedback 2020-11-06 11:33:09 +01:00
Samuel
cba71fc53f PR 545 Create relationships as an admin in edit item 2020-11-06 11:31:15 +01:00
Dániel Péter Sipos
af79945fd8 #885 add enviroment variable for media viewer 2020-11-06 11:05:20 +01:00
Marie Verdonck
e4a1d717a2 Merge branch 'upstream-master' into Support-for-process-output
# Conflicts:
#	src/app/process-page/detail/process-detail.component.ts
2020-11-05 13:01:14 +01:00
Marie Verdonck
5c62fb6d14 unused import removed and observableCombineLatest aligned with convention 2020-11-05 12:05:51 +01:00
Marie Verdonck
4487e2b8ea Fix count results in external source relationship lookup tab label 2020-11-05 11:44:43 +01:00
Marie Verdonck
ecb56413e2 Issue 867 - Missing labels added 2020-11-05 11:13:41 +01:00
Marie Verdonck
d73298daaa fix issue where externalsource search results couldn't be rendered on fields without name 2020-11-05 11:12:56 +01:00
Art Lowel
a937579b8a Merge pull request #905 from saschaszott/issue-904
bugfix of issue #904
2020-11-05 10:22:05 +01:00
Kristof De Langhe
5835c661ac 74199: Lint and LGTM fixes + HoverClassDirective JSDocs and tests 2020-11-04 14:59:10 +01:00
Kristof De Langhe
7bd7f38259 74199: AuthorizedCollectionSelectorComponent current dso query fix 2020-11-04 14:11:46 +01:00
Dániel Péter Sipos
ae079f06ed #885 quick fix 2020-11-03 16:09:34 +01:00
Dániel Péter Sipos
263c12e8f2 #885 fix other thumbnail 2020-11-03 13:27:17 +01:00
Dániel Péter Sipos
66f0b5f77d #885 fix thumbnail size 2020-11-03 11:15:16 +01:00
Dániel Péter Sipos
4312776b2d #885 fix loading bitstream format 2020-11-03 10:59:31 +01:00
Kristof De Langhe
b7aff5894a Merge branch 'main' into w2p-74199_Admin-search-dialogs
Conflicts:
	src/app/+item-page/simple/item-page.component.ts
2020-11-02 12:48:02 +01:00
Kristof De Langhe
52ab6f8a4e 74199: HoverClassDirective and Home parent 2020-11-02 11:49:02 +01:00
Art Lowel
f06c4a20b0 make breadcrumb home text i18nable 2020-10-30 17:40:12 +01:00
Art Lowel
96c31d84d6 support truncation on different backgrounds 2020-10-30 17:16:49 +01:00
Tim Donohue
1e87f2b742 Merge pull request #894 from 4Science/CSTPER-138
miscellaneous fixes for import from external source page
2020-10-30 09:51:32 -05:00
Art Lowel
48c7fff930 add loading indicator to infinite scroll, few style tweaks 2020-10-30 13:36:39 +01:00
Dániel Péter Sipos
9339cfaafd #674 remove un used import 2020-10-29 16:14:35 +01:00
Dániel Péter Sipos
17455a7860 #674 add dock type 2020-10-29 15:19:04 +01:00
Dániel Péter Sipos
22fe184142 #674 ad doctype 2020-10-29 14:57:09 +01:00
Dániel Péter Sipos
9a1b21aeef #675 remove unused imports 2020-10-29 14:43:17 +01:00
Dániel Péter Sipos
71ca57a5ce #674 update other grid elements 2020-10-29 14:35:44 +01:00
Dániel Péter Sipos
6f7a226b81 #674 refactore thumbnail 2020-10-29 14:28:49 +01:00
Dániel Péter Sipos
431d884e8a Merge remote-tracking branch 'upstream/main' into #674-fix-thumbnail 2020-10-29 11:23:16 +01:00
Dániel Péter Sipos
77e7d0effd #674 remove consle logs 2020-10-29 11:23:02 +01:00
Marie Verdonck
9ae7e8174e 74275: [Issue 2988]: Password (re)set for eperson with add PatchOperation 2020-10-29 10:08:19 +01:00
Tim Donohue
09bdc7a0e3 Merge pull request #891 from atmire/DSO-404-fix
Fix DSO 404 pages
2020-10-28 13:04:57 -05:00
Dániel Péter Sipos
7925e9134a Revert "#674 remove async"
This reverts commit 371b8e72f7.
2020-10-28 16:29:02 +01:00
Dániel Péter Sipos
371b8e72f7 #674 remove async 2020-10-28 16:13:41 +01:00
Dániel Péter Sipos
0ea105c73e #674 fix community and collection thumblogo 2020-10-28 16:01:26 +01:00
Dániel Péter Sipos
0d8049494f Merge branch 'main' into #0-fix-thumbnail 2020-10-28 10:44:59 +01:00
Dániel Péter Sipos
23c01b4683 #0-remove 2020-10-28 10:44:51 +01:00
Kristof De Langhe
d52da292a6 74053: Fix double slash in route 2020-10-27 13:14:01 +01:00
Kristof De Langhe
2d67b0b13e 74053: remove fdescribe + use consts for routing paths 2020-10-27 12:29:39 +01:00
Kristof De Langhe
736704aae8 74053: redirectOn404Or401 2020-10-27 11:25:12 +01:00
Kristof De Langhe
18577f016c 74200: DsoPageEditButtonComponent test cases 2020-10-27 10:46:33 +01:00
Dániel Péter Sipos
d7d527b735 #0 fix thumbnail 2020-10-27 10:00:21 +01:00
Kristof De Langhe
06769493e1 74199: Edit current DSO button 2020-10-26 17:49:56 +01:00
Kristof De Langhe
892e7bdaa1 74199: Tests 2020-10-26 15:43:15 +01:00
Tim Donohue
e3c4884bf9 Merge pull request #913 from atmire/fix-item-grid-shadows
Fix grid search result shadows
2020-10-23 16:42:57 -05:00
Tim Donohue
418fe5c5ce Merge pull request #881 from jonas-atmire/w2p-72326-Back-link-on-bitstream-edit-page
Back link on bitstream edit page
2020-10-23 16:18:36 -05:00
Kristof De Langhe
40891a3c35 74199: Admin search dialogs - Current DSO + context for new item/collection 2020-10-23 17:29:10 +02:00
Corrado Lombardi
9658da4fc0 [CSTPER-66] removed detectChanges in single tests, removed TranslateService stub provision, added _links section in community objects 2020-10-23 16:40:49 +02:00
Corrado Lombardi
4bed16af32 [CSTPER-66] onConfirm tests executed within a scheduler and provided _links section on tested data 2020-10-23 11:54:07 +02:00
Corrado Lombardi
564e4e0b02 [CSTPER-66] onSubmit test executed within a scheduler and provided _links section on tested data 2020-10-23 11:53:35 +02:00
Corrado Lombardi
d50d1506ef [CSTPER-66] provided RequestService 2020-10-22 23:41:18 +02:00
Corrado Lombardi
8424ab89d7 [CSTPER-66] provided RequestService in constructor and parent community empty link 2020-10-22 20:15:08 +02:00
Kristof De Langhe
ade5eb53cc 74199: Infinite scroll size changes 2020-10-22 18:03:32 +02:00
Giuseppe Digilio
c374627c27 [CSTPER-138] Fixed failed test 2020-10-22 17:24:18 +02:00
Corrado Lombardi
5ef329f7a6 [CSTPER-66] removed consecutive blank lines 2020-10-22 16:44:49 +02:00
Corrado Lombardi
be6a6a2f62 [CSTPER-66] when a community or a collection is created or deleted, angular cache is refreshed so that in case of new community or collection it appears immediately in pages where communities and collections lists are displayed, in case of community or collection deletion deleted community or collection does not appear anymore in pages where communities and collections lists are displayed. 2020-10-22 15:50:44 +02:00
Corrado Lombardi
20c7afce06 [CSTPER-66] utility functions to create remote data object without content 2020-10-22 15:46:29 +02:00
Corrado Lombardi
e1cce311e8 [CSTPER-66] utility method to check if remote data has no content 2020-10-22 15:46:05 +02:00
Corrado Lombardi
1127b363e9 [CSTPER-66] function to get succeeded or no content response 2020-10-22 15:45:39 +02:00
Giuseppe Digilio
826957a66d [CSTPER-138] Fixed issue where results are the same when pagination changed while retrieving external source providers 2020-10-22 09:18:03 +02:00
Kristof De Langhe
8b2b28df25 74199: Infinite scrollable dso-selector + collection/community implementation + authorized-collection-selector 2020-10-21 18:04:03 +02:00
Tim Donohue
d103092a81 Merge pull request #901 from qultoltd/#895-search-grid-layout
#895 fix grid layout
2020-10-21 08:50:44 -05:00
Kristof De Langhe
f79ea2b844 74199: Admin search dialogs - sidebar search list element implementations - intermediate commit 2020-10-21 13:24:21 +02:00
Art Lowel
c4687116e5 add isCollapsed to mock TruncatableService 2020-10-21 11:35:05 +02:00
Art Lowel
1dcfb729a8 fix issue where item search results would always have a shadow, instead of only when they're focused 2020-10-21 10:23:56 +02:00
Kristof De Langhe
ac44bb9cb9 74199: Admin search dialogs - intermediate commit 2020-10-20 17:54:12 +02:00
Kristof De Langhe
6a016cd17f 74199: ItemResolver item to dso refactor 2020-10-20 16:40:01 +02:00
Corrado Lombardi
a2c5ddbfce Merge branch 'main' into CSTPER-66 2020-10-19 08:59:18 +02:00
Sascha Szott
4e4ef36c34 bugfix of issue #904 2020-10-17 21:42:47 +02:00
Dániel Péter Sipos
9a324ba456 #895 revert changes fix layout 2020-10-16 17:12:25 +02:00
Dániel Péter Sipos
3d1ffa6738 #895 fix colums sorting 2020-10-16 17:05:46 +02:00
Dániel Péter Sipos
622871fcde #895 fix grid layout 2020-10-16 14:53:58 +02:00
Tim Donohue
f7883492c6 Correct syntax for referencing related issues/PRs 2020-10-15 15:41:08 -05:00
Giuseppe Digilio
988747e392 [CSTPER-138] Fixed issue with request pagination while retrieving external source providers 2020-10-15 12:50:02 +02:00
Giuseppe Digilio
7599938516 [CSTPER-138] Added label for arXiv external providers 2020-10-15 12:47:12 +02:00
Giuseppe Digilio
ed1e93f73d [CSTPER-138] Fixed issue with infinite scroll within the dropdown of the external source providers 2020-10-15 12:09:05 +02:00
Giuseppe Digilio
f1256b3795 [CSTPER-138] Fixed issue with request pagination while retrieving external source providers 2020-10-15 12:07:47 +02:00
Giuseppe Digilio
f8afc6355b [CSTPER-138] Fixed issue that blocked route change within the import-external page 2020-10-15 12:06:32 +02:00
Kristof De Langhe
d4bd128b67 74053: Remove unused imports 2020-10-13 14:19:56 +02:00
Dániel Péter Sipos
401bbf3a8e #885 fix default tumbnail 2020-10-13 13:38:30 +02:00
Dániel Péter Sipos
22de03e7aa Merge remote-tracking branch 'upstream/main' into #885-media-viewer 2020-10-13 13:33:37 +02:00
Kristof De Langhe
5e21bfa5ca 74053: fix issue #865 2020-10-13 13:28:47 +02:00
Dániel Péter Sipos
9b63767d63 #885 add default thumbnail 2020-10-13 13:20:46 +02:00
Dániel Péter Sipos
6642cbb088 #885 add more unit test 2020-10-13 10:32:56 +02:00
Corrado Lombardi
6892efc6a3 Merge branch 'main' into fix_com_col_refresh 2020-10-12 16:36:23 +02:00
Dániel Péter Sipos
681904639b QREPO-110 quick test fix 2020-10-12 14:53:35 +02:00
Dániel Péter Sipos
0294c6c234 QREPO-110 add more tests 2020-10-12 14:52:50 +02:00
Dániel Péter Sipos
f46c8ef7b3 QREPO-110 add commnets 2020-10-12 11:02:21 +02:00
Dániel Péter Sipos
c044f458e1 #885 fix lint 2020-10-09 14:28:24 +02:00
Dániel Péter Sipos
88a64b1bd7 #855 fix tests and add angular 8 compatible gallery 2020-10-09 14:25:44 +02:00
Tim Donohue
d9634a84ae Merge pull request #874 from atmire/w2p-72956_delete-eperson
Delete eperson
2020-10-08 12:08:29 -05:00
Dániel Péter Sipos
cfe6eb6e61 #885 fix enviroment 2020-10-08 15:46:59 +02:00
Dániel Péter Sipos
55cca0538a #885 fix for linter 2020-10-08 15:43:31 +02:00
Dániel Péter Sipos
a740453e88 #885 fix gallery 2020-10-08 14:45:37 +02:00
Dániel Péter Sipos
a157552a13 #885 add media viewer 2020-10-08 14:15:16 +02:00
Tim Donohue
5bf6d0f287 Merge pull request #851 from atmire/usage-reports
Add statistics pages
2020-10-07 12:34:04 -05:00
Samuel
d843230158 Add statistics pages - fix link caching issue 2020-10-07 13:53:20 +02:00
Tim Donohue
bb935be0b6 Merge pull request #866 from atmire/Metadata-edit-patch-error-fix
Metadata edit patch error fix
2020-10-06 09:54:55 -05:00
Raf Ponsaerts
fbe6ec61de [Task 72956] applied feedback to the delete eperson error message 2020-10-02 16:38:19 +02:00
jonas-atmire
be2bfbe066 Fixing LGTM - Unused imports 2020-10-01 09:33:38 +02:00
jonas-atmire
a45bc349cc Small doc update 2020-10-01 09:11:25 +02:00
jonas-atmire
ce553e3272 Fixing lint error(s) 2020-10-01 09:09:05 +02:00
Mark H. Wood
17caa779c1 [#879] Clarify the use of the production build script, and when configuration is processed. 2020-09-30 17:04:45 -04:00
Tim Donohue
03bba0f578 Merge pull request #877 from atmire/remove-api-from-rest-config
remove remaining uses of /api in the rest namespace
2020-09-30 11:33:16 -05:00
Tim Donohue
098eb291b6 Merge pull request #878 from atmire/reomve-circular-dependencies-part-2
Remove circular dependencies part 2
2020-09-30 11:02:57 -05:00
Art Lowel
4f16f21a7d remove remaining uses of /api in the rest namespace 2020-09-30 17:14:31 +02:00
Tim Donohue
6511920d0c Merge pull request #868 from atmire/google-scholar-fixes
Google scholar fixes
2020-09-30 09:48:17 -05:00
Tim Donohue
b4120f2053 Update Codecov settings
This makes patch checks slightly more lenient, as they are not required.
2020-09-30 09:14:23 -05:00
Raf Ponsaerts
2621454cdb [Task 72956] fixed LGTM issue 2020-09-30 15:26:46 +02:00
Raf Ponsaerts
5615390ce5 [Task 72956] fixed EPerson deletion issues with page not refreshing 2020-09-30 14:46:03 +02:00
Art Lowel
3e191bb56e move info module paths to separate file 2020-09-30 13:53:04 +02:00
Raf Ponsaerts
e12559544b Merge remote-tracking branch 'dspace/main' into w2p-72956_delete-eperson
Conflicts:
	src/app/core/data/feature-authorization/feature-id.ts
2020-09-30 13:06:18 +02:00
jonas-atmire
aa757cfe23 Redirecting to item edit page on the bitstream tab, instead of the item viewing page 2020-09-30 13:04:34 +02:00
Raf Ponsaerts
24c07536b0 [Task 72956] fixing tests 2020-09-30 13:01:12 +02:00
jonas-atmire
5de774842d Merge remote-tracking branch 'community/main' into w2p-72326-Back-link-on-bitstream-edit-page 2020-09-30 12:34:11 +02:00
jonas-atmire
988079caed Merge conflict fixes 2020-09-30 12:34:03 +02:00
Art Lowel
24706f0cc4 remove remaining uses of /api in the rest namespace 2020-09-30 11:15:50 +02:00
Art Lowel
764cfc5d95 add comment to explain rewriteDownloadUrls 2020-09-30 10:44:37 +02:00
Tim Donohue
c67d2e6718 Merge pull request #873 from atmire/w2p-fix-bitstreams-pagination-on-item-page
Fix bug concerning bistream pagination on the item page
2020-09-29 11:51:02 -05:00
Raf Ponsaerts
8a07b3bb2b [Task 72956] fix LGTM issue 2020-09-29 14:20:20 +02:00
Raf Ponsaerts
f6fea087c3 [Task 72956] further development on delete eperson 2020-09-29 14:18:15 +02:00
Samuel
b6ff9369e4 Add statistics pages - move data service and add ds-loading 2020-09-29 14:14:28 +02:00
jonas-atmire
dddf8df2b2 Merge conflict fixes 2020-09-25 11:38:11 +02:00
jonas-atmire
27f8c7da2e Merge remote-tracking branch 'community/main' into w2p-72326-Back-link-on-bitstream-edit-page 2020-09-24 15:30:23 +02:00
Corrado Lombardi
367470a912 cache cleared with parent community reference once a collection or a community is created or deleted 2020-09-24 13:03:29 +02:00
Corrado Lombardi
d9c177b100 added RequestService 2020-09-24 13:02:38 +02:00
Kristof De Langhe
15de3a2eeb Merge branch 'main' into w2p-73014_Metadata-edit-patch-error-fix
Conflicts:
	src/app/+item-page/edit-item-page/item-metadata/item-metadata.component.ts
2020-09-24 10:16:01 +02:00
Tim Donohue
6e6253c2d8 Merge pull request #860 from atmire/w2p-71894_metadatafields-byFieldName-search-endpoint
Item edit page metadatafields suggestion & validation
2020-09-23 16:31:38 -05:00
Samuel
6ff9429bc0 Add statistics pages - add support for parameters in menu sections and add id params 2020-09-23 23:28:06 +02:00
Tim Donohue
aa84a56c2b Merge pull request #861 from atmire/Cookie-preferences
Cookie consent preferences
2020-09-23 15:14:24 -05:00
Samuel
e7e408dacb Add statistics pages - feedback 2020-09-23 21:57:53 +02:00
Samuel
b7382de29a Add statistics pages 2020-09-23 21:57:52 +02:00
Tim Donohue
1ef3d40904 Merge pull request #822 from atmire/Features-support-part-2
Features support part 2
2020-09-23 14:37:30 -05:00
Tim Donohue
1fba45a08b Customize Codecov settings 2020-09-23 13:31:53 -05:00
lotte
456551fd94 fixed tests 2020-09-23 16:57:08 +02:00
Tim Donohue
a0414e11bc Merge pull request #872 from tdonohue/replace_coveralls_with_codecov
Switch from Coveralls.io to Codecov.io
2020-09-23 08:36:54 -05:00
Raf Ponsaerts
3de2b50d10 [Task 72956] applied feedback to the deletion of epersons 2020-09-23 15:07:38 +02:00
Yana De Pauw
ddc1cbbd73 73249: Fix message and filter issue 2020-09-23 11:36:10 +02:00
Yana De Pauw
cfadb4314e Remove console.log 2020-09-23 10:57:41 +02:00
Yana De Pauw
dfbbd98862 73249: Fix issues with bitstream pagination on item pages. 2020-09-23 10:57:41 +02:00
Tim Donohue
047fbfee1f Switch from Coveralls.io to Codecov.io 2020-09-22 16:19:07 -05:00
Tim Donohue
6960597381 Merge pull request #871 from atmire/fix-express-error-handler
Ensure CSR fallback only happens on actual errors
2020-09-22 12:43:12 -05:00
Kristof De Langhe
124ed4aff2 71764: LGTM Issue fix 2020-09-22 09:14:07 +02:00
Kristof De Langhe
dd7f34e541 Merge branch 'main' into w2p-71764_Features-support-part-2
Conflicts:
	src/app/+collection-page/collection-page-routing.module.ts
	src/app/+community-page/community-page-routing.module.ts
	src/app/+item-page/edit-item-page/edit-item-page.routing.module.ts
	src/app/+item-page/edit-item-page/item-status/item-status.component.ts
	src/app/+item-page/item-page-routing.module.ts
	src/app/app-routing.module.ts
	src/app/core/core.module.ts
	src/app/shared/log-in/log-in.component.html
	src/app/shared/log-in/log-in.component.spec.ts
	src/app/shared/log-in/log-in.component.ts
2020-09-22 08:36:16 +02:00
Art Lowel
5afd4a6930 ensure CSR fallback only happens on actual errors 2020-09-21 18:41:10 +02:00
Raf Ponsaerts
f8dab74b64 [Task 72956] improvement to the spyOn in EPersonFormComponent test 2020-09-21 14:56:29 +02:00
Raf Ponsaerts
2d2fb0210c [Task 72956] removed console logs 2020-09-21 14:29:04 +02:00
Raf Ponsaerts
05f3b7e7c6 [Task 72956] implemented the deletion of EPerson in the EPerson Form and Registry 2020-09-21 14:24:55 +02:00
lotte
9886ba8dc9 fixed linting errors 2020-09-21 09:12:22 +02:00
lotte
8e04dff09d fixed lgtm issues 2020-09-21 09:05:29 +02:00
Art Lowel
9757e6651e fix test 2020-09-18 18:05:37 +02:00
Art Lowel
47edd9b6d8 add docs on configuring rewriteDownloadUrls 2020-09-18 17:46:49 +02:00
lotte
f96549d5c7 added urlcombiner 2020-09-18 17:46:45 +02:00
lotte
9c01c1b3f3 fixed test issues 2020-09-18 17:46:36 +02:00
lotte
1b10ec63d6 fixed google scholar links, todo: fix tests 2020-09-18 17:46:29 +02:00
Tim Donohue
9f396f7120 Merge pull request #862 from atmire/User-agreement
User agreement
2020-09-17 11:17:43 -05:00
Tim Donohue
54e61e00ce Merge pull request #856 from atmire/Hard-redirect-after-log-in
Hard redirect after log in
2020-09-17 08:25:18 -05:00
Kristof De Langhe
11b62daa44 73014: metadata edit - notification on patch error 2020-09-17 14:24:44 +02:00
Kristof De Langhe
4e10db8a53 72541: user-agreement update to patch 2020-09-17 13:13:32 +02:00
Kristof De Langhe
b68fe23310 72699: Additional test fix 2020-09-17 11:40:30 +02:00
Kristof De Langhe
d5927a76fc 72699: Test fix 2020-09-17 10:49:24 +02:00
Kristof De Langhe
b77dce25ce 72699: Shibboleth login redirect fix 2020-09-17 10:44:10 +02:00
Marie Verdonck
ade3bffcb7 71894: prod build permission issue fix 2020-09-17 10:30:23 +02:00
Tim Donohue
4214ddec8c Merge pull request #863 from atmire/SSR-preboot-and-error-handling
Fixes for preboot and SSR error handling
2020-09-16 16:06:58 -05:00
Marie Verdonck
5db42a6da8 71894: also disable save button if invalid input field 2020-09-16 16:33:38 +02:00
Marie Verdonck
75058a735a 71894: confirm edit metadata button disabled if invalid &
removed unneeded service
2020-09-16 14:50:29 +02:00
Kristof De Langhe
8c4f5002f5 73014: Remove sending patch to cache + small refactoring changes 2020-09-16 12:01:43 +02:00
Kristof De Langhe
2e8a78151e 73014: MetadataPatchOperation refactoring + add operation fix 2020-09-15 17:49:30 +02:00
lotte
5e21c5fd26 Merge branch 'Hard-redirect-after-log-in' into w2p-72635_cookie-preferences 2020-09-15 09:42:09 +02:00
lotte
fc35c9fd67 Merge branch 'Hard-redirect-after-log-in' into w2p-72635_cookie-preferences 2020-09-15 09:39:23 +02:00
Kristof De Langhe
e53548a95a 73014: Item metadata patch tests 2020-09-14 16:53:36 +02:00
Kristof De Langhe
eee57f5b41 73014: MetadataPatchOperationService create patch in two steps to fix remove operation issue 2020-09-14 13:34:30 +02:00
Kristof De Langhe
1647c95600 73014: Create patch from object-updates and send immediate patch for item-metadata-edit 2020-09-11 17:34:37 +02:00
Art Lowel
abab73b909 Merge branch 'Hard-redirect-after-log-in' into User-agreement 2020-09-11 16:54:17 +02:00
Art Lowel
7eb88f9fda Merge branch 'main' into Hard-redirect-after-log-in 2020-09-11 16:52:01 +02:00
Tim Donohue
0be3c61eeb Merge pull request #751 from 4Science/authorities_and_controlled_vocabularies
Refactoring authority framework, value pairs and controlled vocabulary [Angular]
2020-09-11 09:42:37 -05:00
Giuseppe Digilio
e7ef068352 Merge remote-tracking branch 'remotes/origin/main' into authorities_and_controlled_vocabularies 2020-09-11 15:52:58 +02:00
Giuseppe Digilio
c5cb1a2837 [CSTPER-75] Fixed confidence status for linked metadata with authority 2020-09-11 15:38:41 +02:00
Giuseppe Digilio
a178e215f0 Fixed issue with preparing patch operation's value when value has an authority id but is not an instance of VocabularyEntry or FormFieldMetadataValueObject 2020-09-11 15:35:50 +02:00
Giuseppe Digilio
fab0a09727 Fixed issue with adding lookup repeatable fields 2020-09-11 15:33:05 +02:00
Giuseppe Digilio
1e8669a738 Fixed issue with change not detected 2020-09-11 15:30:38 +02:00
Marie Verdonck
1885933f89 Merge remote-tracking branch 'upstream/main' into Support-for-process-output 2020-09-10 17:32:55 +02:00
lotte
a6dd87f78c updated server.ts to latest fixes 2020-09-09 16:08:01 +02:00
lotte
cced7a2914 fixed preboot issues and error handling 2020-09-09 16:07:19 +02:00
lotte
3f4a0d1fd9 removing proboot option from config 2020-09-09 16:07:19 +02:00
Tim Donohue
4b11e1d9cd Merge pull request #857 from 4Science/issue#819
Issue#819
2020-09-08 09:40:09 -05:00
Kristof De Langhe
b82e840935 72541: Removed unused import 2020-09-08 11:16:12 +02:00
Kristof De Langhe
c5e975601a Merge branch 'w2p-72699_Hard-redirect-after-log-in' into w2p-72541_User-agreement-and-Privacy-statement
Conflicts:
	src/app/app-routing.module.ts
2020-09-08 10:17:44 +02:00
lotte
99b84223e2 fixed lgtm error 2020-09-08 09:26:38 +02:00
lotte
d4027cc1d1 debounce for update requests 2020-09-08 09:13:17 +02:00
lotte
90f0597baa bugfix for users without metadata value for cookie 2020-09-08 09:13:17 +02:00
lotte
48ffb2105f added missing typedoc 2020-09-08 09:13:17 +02:00
lotte
d7f6885232 updated consent configuration 2020-09-08 09:13:17 +02:00
lotte
8d29090f24 small fixes 2020-09-08 09:13:17 +02:00
lotte
c19f49fb96 added tests 2020-09-08 09:13:17 +02:00
lotte
19ca179e7a commit before rebase 2020-09-08 09:13:17 +02:00
lotte
f6e8448164 fixed SSR issue, added code for storing the users cookie consents and restoring them 2020-09-08 09:13:17 +02:00
lotte
b3b934033c added klaro exclusion to webpack/tsconfig 2020-09-08 09:13:17 +02:00
lotte
3e1fb243a1 solving SSR issue 2020-09-08 09:13:17 +02:00
lotte
33aeccdd43 72635: Fixed initialize code and started on storageName 2020-09-08 09:13:17 +02:00
lotte
0b3b82b485 finished basic Klaro setup 2020-09-08 09:13:17 +02:00
lotte
472154c0df 72635: Cookie preferences first committ 2020-09-08 09:13:17 +02:00
Kristof De Langhe
de9f642bf9 72541: Fix tests, remove redundant injection and added JSDocs 2020-09-07 12:01:23 +02:00
Kristof De Langhe
f0940aad57 Merge branch 'w2p-72699_Hard-redirect-after-log-in' into Hard-redirect-after-log-in 2020-09-07 10:30:09 +02:00
Kristof De Langhe
4141ae7ad7 72699: JSDocs 2020-09-07 10:27:39 +02:00
Kristof De Langhe
b89c21ec3b Merge branch 'main' into w2p-72699_Hard-redirect-after-log-in
Conflicts:
	src/app/app-routing.module.ts
2020-09-07 10:22:37 +02:00
Giuseppe Digilio
ac86976115 Disabled EPerson language when sending Accept-Language header 2020-09-07 09:27:38 +02:00
Giuseppe Digilio
6feb344aa0 Revert "Fixed issue with LocaleInterceptor that blocked new request"
This reverts commit a76e0796
2020-09-07 09:26:23 +02:00
Giuseppe Digilio
b58defc0f3 Revert "Fixed issue that emits successful remote data twice with undefined payload in the first one"
This reverts commit 99c0f6ce
2020-09-07 09:26:02 +02:00
Kristof De Langhe
18fdf7585e Merge branch 'w2p-72541_User-agreement-and-Privacy-statement' of https://git.atmire.com/contributions/dspace-angular into w2p-72541_User-agreement-and-Privacy-statement 2020-09-04 17:46:11 +02:00
Kristof De Langhe
aa1b568bf4 72541: Redirect through query param at EndUserAgreement 2020-09-04 17:46:05 +02:00
Tim Donohue
dd037459cf Merge pull request #715 from 4Science/DS-4515_submit-external-source
DS-4515: Start new submission via Search or ID Lookup (i.e. submit external source)
2020-09-04 09:49:55 -05:00
Art Lowel
7997100a7e Merge branch 'w2p-72699_Hard-redirect-after-log-in' into w2p-72541_User-agreement-and-Privacy-statement 2020-09-04 14:35:24 +02:00
Art Lowel
5965f4e929 remove circular dependency 2020-09-04 14:32:13 +02:00
Marie Verdonck
1e82943f4a Remove unused imports 2020-09-04 13:04:57 +02:00
Marie Verdonck
dcbb002630 71894: small fix after rebase 2020-09-04 12:52:15 +02:00
Marie Verdonck
810f009582 71894: position dropdown right underneath input 2020-09-04 12:23:31 +02:00
Marie Verdonck
b602a736de 71894: Refactored exact FieldName search for validator after change endpoint 2020-09-04 12:23:31 +02:00
Art Lowel
10b314cf20 fix tests 2020-09-04 12:23:30 +02:00
Marie Verdonck
1f4ae7a035 71894: refactor with new operator metadataFieldsToString instead of schemaResolved 2020-09-04 12:23:30 +02:00
Marie Verdonck
2ebb1640b4 71894: WIP: fix EditInPlace tests 2020-09-04 12:22:24 +02:00
Marie Verdonck
4a0444d669 71894: mdField validation; TODO: fix EditInPlace tests 2020-09-04 12:22:24 +02:00
Marie Verdonck
a6c0a60bd7 71894: Start of mdField validator; todo: show error & some backend changes 2020-09-04 12:22:24 +02:00
Marie Verdonck
77b2506112 71894: MD field suggestions on edit item page 2020-09-04 12:22:24 +02:00
Kristof De Langhe
bd522038a1 72541: Additional tests and fixes 2020-09-03 17:52:52 +02:00
Kristof De Langhe
eda1a34da5 72541: EndUserAgreementCurrentUserGuard and EndUserAgreementCookieGuard 2020-09-03 17:22:38 +02:00
Kristof De Langhe
a0759098ea Merge branch 'w2p-72699_Hard-redirect-after-log-in' into w2p-72541_User-agreement-and-Privacy-statement
Conflicts:
	src/app/+collection-page/collection-page-routing.module.ts
	src/app/+community-page/community-page-routing.module.ts
	src/app/+item-page/item-page-routing.module.ts
	src/app/+workflowitems-edit-page/workflowitems-edit-page-routing.module.ts
	src/app/app-routing.module.ts
	src/app/core/shared/operators.ts
2020-09-03 16:06:59 +02:00
Giuseppe Digilio
a76e0796c6 Fixed issue with LocaleInterceptor that blocked new request 2020-09-03 14:46:52 +02:00
Giuseppe Digilio
99c0f6ceaa Fixed issue that emits successful remote data twice with undefined payload in the first one 2020-09-03 14:45:10 +02:00
Kristof De Langhe
59def51ebe 72699: LGTM alert fixes 2020-09-03 13:36:16 +02:00
Kristof De Langhe
5e970bcff2 72699: isAuthBlocking$ rename to isNotAuthBlocking$ 2020-09-03 13:32:13 +02:00
Kristof De Langhe
3d08eb0ae1 Merge branch 'main' into w2p-72699_Hard-redirect-after-log-in
Conflicts:
	src/app/app-routing.module.ts
	src/app/shared/log-in/log-in.component.ts
2020-09-03 13:19:36 +02:00
Art Lowel
e9a2b4b368 made the redirect after logging out blocking as well 2020-09-03 12:58:40 +02:00
Giuseppe Digilio
b8138ee3b9 Fixed lint error 2020-09-03 12:27:55 +02:00
Giuseppe Digilio
b15113ad96 Fixed failed test 2020-09-03 11:36:28 +02:00
Giuseppe Digilio
a504b7cbd3 Fixed issue with form field losing confidence value 2020-09-03 11:18:32 +02:00
Kristof De Langhe
306d6d15c5 Merge branch 'w2p-72699_Hard-redirect-after-log-in' into w2p-72541_User-agreement-and-Privacy-statement
Conflicts:
	src/app/app-routing.module.ts
2020-09-03 10:49:06 +02:00
Giuseppe Digilio
7d22bcc59c Merge remote-tracking branch 'remotes/atmire/fix-entities-issue-pr-751' into authorities_and_controlled_vocabularies 2020-09-03 10:07:34 +02:00
Giuseppe Digilio
94119668dd Fixed merge 2020-09-03 09:57:24 +02:00
Giuseppe Digilio
5ebd4fcbc8 Merge remote-tracking branch 'remotes/origin/main' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/core/integration/models/authority.value.ts
#	src/app/shared/chips/models/chips-item.model.ts
#	src/app/shared/chips/models/chips.model.ts
#	src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts
#	src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts
#	src/app/shared/form/builder/models/form-field-metadata-value.model.ts
2020-09-03 09:36:39 +02:00
Tim Donohue
cd6c5b70c8 Merge pull request #853 from atmire/w2p-72741_upload-section-id
844: Fix file upload to use section ID instead of 'upload'
2020-09-02 15:00:36 -05:00
Marie Verdonck
f82e6fa48b 72403: Process output logs only retrieved at button press + tests 2020-09-02 19:35:35 +02:00
Tim Donohue
16a68dae42 Merge pull request #855 from atmire/Curation-task-email-parameter-removal
Removal of email option for the curation script
2020-09-02 11:14:34 -05:00
jonas-atmire
be79663df9 Removal of email option for the curation script -> See https://github.com/DSpace/DSpace/pull/2926#pullrequestreview-477868288 for full explanation 2020-09-02 14:59:44 +02:00
Kristof De Langhe
17249e9541 72699: Additional fixes for maintaining and clearing the redirect url on login components 2020-09-01 16:22:16 +02:00
Tim Donohue
f4946003e2 Add action to auto-label PRs with merge conflicts 2020-09-01 09:08:25 -05:00
Art Lowel
f167d5a629 fix issue where combining entities and authority control in the same field wouldn't work 2020-09-01 14:25:50 +02:00
Art Lowel
724e5d1f12 add blocking state to make dealing with log in errors more user friendly 2020-09-01 10:10:39 +02:00
Tim Donohue
bc0be9e235 Merge pull request #850 from atmire/remove-cirular-dependencies
Remove circular dependencies
2020-08-31 15:14:06 -05:00
Yana De Pauw
f222cd8b33 72741: Fix file upload to use section ID instead of 'upload' 2020-08-28 17:24:52 +02:00
Tim Donohue
a63bfdf2fd Merge pull request #845 from atmire/w2p-72444_Support-multiple-dsoType-values-in-discovery
Support multiple dso type values in discovery
2020-08-28 09:05:20 -05:00
Tim Donohue
43ae3fc952 Merge pull request #841 from 4Science/ISSUE_840
Hide EPerson search section in the edit mode
2020-08-28 08:48:05 -05:00
Kristof De Langhe
cb3ef1dde4 72541: End-User-Agreement redirect via store 2020-08-28 13:05:02 +02:00
Art Lowel
bbc7844b5d fix lgtm issues 2020-08-28 11:58:43 +02:00
Kristof De Langhe
76b9fd4702 Merge branch 'w2p-72699_Hard-redirect-after-log-in' into w2p-72541_User-agreement-and-Privacy-statement 2020-08-28 11:46:38 +02:00
Kristof De Langhe
61e0b9efb0 72699: Remove redundant subscribe + fix tests 2020-08-28 11:40:22 +02:00
Art Lowel
21e8879f77 remove circular dependencies 2020-08-28 11:34:17 +02:00
Kristof De Langhe
beca98b441 Merge branch 'w2p-72699_Hard-redirect-after-log-in' into w2p-72541_User-agreement-and-Privacy-statement
Conflicts:
	src/app/app-routing.module.ts
	src/app/core/core.module.ts
2020-08-28 10:40:01 +02:00
Kristof De Langhe
32cf92eba9 72541: Spacing between checkbox and buttons 2020-08-28 10:37:55 +02:00
Marie Verdonck
81fc26b844 72444: Statistics search event dsoType single string & small fix 2020-08-27 15:17:02 +02:00
Kristof De Langhe
a3df6ce474 72699: Remove unnecessary method 2020-08-27 14:56:20 +02:00
Kristof De Langhe
55c45f5f6c 72699: Hard redirect after log in - loading fixes 2020-08-27 14:50:13 +02:00
Marie Verdonck
e9d77c4d2c 72444: statistics searchevent.dsoTypes changed until backend changes
& error on export modal dso selector for item removed, only returns comcols, not items now
& test fixes
2020-08-27 14:37:31 +02:00
Marie Verdonck
e89d064934 multiple dsoType allowed in search & in selector modals 2020-08-27 14:37:31 +02:00
Giuseppe Digilio
92207cf66d Added missing TypeDocs 2020-08-27 09:30:38 +02:00
Kristof De Langhe
7fbae8997d 72699: JSDocs and Test cases 2020-08-26 16:32:03 +02:00
Giuseppe Digilio
4080cce8fd Fixed check for Hierarchical Vocabulary 2020-08-26 15:57:34 +02:00
Giuseppe Digilio
ee2f11f602 Fixed template 2020-08-26 15:33:52 +02:00
Giuseppe Digilio
87bed6d288 Fixed check for vocabulary options on DsDynamicListComponent 2020-08-26 15:24:01 +02:00
Giuseppe Digilio
3178e5578c Fixed issue after merge 2020-08-26 14:45:53 +02:00
Giuseppe Digilio
67bd19a340 Fixed template 2020-08-26 14:42:47 +02:00
Giuseppe Digilio
ab190e381d Fixed test 2020-08-26 14:35:23 +02:00
Kristof De Langhe
7367f91176 72699: Hard redirect after log in 2020-08-26 14:20:47 +02:00
Giuseppe Digilio
4b35828bbe Merge remote-tracking branch 'remotes/origin/main' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/shared/shared.module.ts
2020-08-26 13:58:49 +02:00
Giuseppe Digilio
94b4115ecd Removed unintentional fdescribe 2020-08-26 12:53:50 +02:00
Tim Donohue
cc618ebadd Merge pull request #838 from atmire/file-pagination-simple-and-full-item-pages
File pagination simple and full item pages
2020-08-21 16:30:25 -05:00
Luca Giamminonni
547ade276c Hide EPerson search section in the edit mode 2020-08-21 19:01:08 +02:00
Kristof De Langhe
de1e1a70d1 72541: End User Agreement test cases 2020-08-21 16:05:19 +02:00
jonas-atmire
95de75dbf9 Failing test fixing + additional tests for the call that handles the actual navigation routing 2020-08-21 11:28:16 +02:00
Kristof De Langhe
ecf75efe99 72541: Renamed end-user-agreement-guard and -service; Add metadata on registry; privacy statement component 2020-08-21 11:22:02 +02:00
jonas-atmire
11d81d8afc Initial tests added (Still failing) 2020-08-21 09:30:06 +02:00
Kristof De Langhe
d46355e274 72541: Accepting the End User Agreement + UserAgreementService 2020-08-20 17:28:25 +02:00
Tim Donohue
708b5495c7 Merge pull request #825 from atmire/Add-robots-txt
Add robots.txt
2020-08-20 10:18:08 -05:00
Tim Donohue
0fc757ba4d Add link to Code Testing Guide in PR template 2020-08-20 10:09:05 -05:00
Kristof De Langhe
8768645e4a 72541: InfoModule, EndUserAgreementComponent, UserAgreementGuard 2020-08-19 17:47:33 +02:00
Tim Donohue
6b90ac073c Merge pull request #798 from atmire/Export-Import_metadata_CSV
Export/Import metadata CSV
2020-08-19 10:10:03 -05:00
Raf Ponsaerts
1247088df9 Fixed tslint issues 2020-08-17 16:29:57 +02:00
Raf Ponsaerts
a38d365bab Updated message for the collapse bitstreams for the bitstream pagination on simple item pages 2020-08-17 15:18:25 +02:00
Raf Ponsaerts
18fb47c9b6 [Task 72397] applied feedback on the file section and full file section components 2020-08-17 10:14:05 +02:00
Danilo Di Nuzzo
cfd819cd62 Merge branch 'authorities_and_controlled_vocabularies' of https://github.com/4Science/dspace-angular into authorities_and_controlled_vocabularies 2020-08-14 12:56:57 +02:00
ddinuzzo
3f8a670dcf Merge branch 'main' into authorities_and_controlled_vocabularies 2020-08-14 12:53:38 +02:00
Marie Verdonck
02c693363b Unneeded ts-ignore removed 2020-08-13 12:31:42 +02:00
Art Lowel
0a06368340 add a proxy for the sitemaps 2020-08-12 17:31:33 +02:00
Art Lowel
a2fa51cef5 deprecate the use of /api in the rest nameSpace 2020-08-12 14:38:06 +02:00
Danilo Di Nuzzo
66cabcb342 refactory for metadata and collection params 2020-08-12 14:01:29 +02:00
Art Lowel
8f822ba4f7 add robots.txt 2020-08-12 13:20:11 +02:00
Art Lowel
05a92f8e5b refactor webpack config 2020-08-12 13:19:23 +02:00
lotte
82d780b6c2 Fixed PageInfo SSR issue 2020-08-12 11:56:49 +02:00
Raf Ponsaerts
cb7335208f [Task 72397] undo test consoles and fix pagination issue 2020-08-11 13:13:02 +02:00
Raf Ponsaerts
0553f68607 [Task 72397] adding debug consoles and pageSize 2020-08-11 11:58:42 +02:00
Matteo Perelli
25d912b006 Merge with main 2020-08-11 10:01:16 +02:00
Raf Ponsaerts
f6f87a5738 [Task 72397] implemented the bitstream pagination on simple and full item pages 2020-08-07 16:07:33 +02:00
jonas-atmire
e78a1ee63e Routing back to the item page from bitstream edit 2020-08-07 09:51:33 +02:00
Tim Donohue
f1db0c044b Merge pull request #829 from atmire/Put-dynamic-workflowgroup-links-on-Collections-in-an-array
Put dynamic workflowgroup links on Collections in an array
2020-08-06 15:52:23 -05:00
Tim Donohue
9c83cd9b53 Merge pull request #830 from atmire/submission-repeatable-issue
Fix issue with repeatable scrollable dropdowns in the submission
2020-08-06 15:14:45 -05:00
Tim Donohue
4f608eb3cf Merge pull request #724 from 4Science/CST-3091
DS-4514 start a new submission via file
2020-08-06 08:45:50 -05:00
Kristof De Langhe
42978931de Merge branch 'main' into w2p-71764_Features-support-part-2
Conflicts:
	src/app/core/core.module.ts
2020-08-06 13:50:48 +02:00
Samuel
261f79daab Put dynamic workflowgroup links on Collections in an array - fix lgtm warnings 2020-08-05 16:17:27 +02:00
Art Lowel
d560e08b20 only clone for add events 2020-08-05 16:03:51 +02:00
Art Lowel
8bfccaa624 fix issue where adding multiple fields at the same time to an empty dropdown would only add the last field 2020-08-05 15:37:10 +02:00
Art Lowel
c2fd019ebd fix exception when adding a field for a repeatable dropdown 2020-08-05 13:55:26 +02:00
Samuel
a29de15f71 Put dynamic workflowgroup links on Collections in an array 2020-08-05 12:41:11 +02:00
jonas-atmire
82587b5ff8 Move followLink for format to bitstream-page.resolver 2020-08-05 11:14:21 +02:00
jonas-atmire
97ce951bd8 FollowLink addition to bitstream/bundle models 2020-08-05 11:01:56 +02:00
Marie Verdonck
f2a3816430 72403: tab removed process output, message change & redundant switchmap removed 2020-08-04 15:00:08 +02:00
Marie Verdonck
8325a34910 72403: Support for process output on detail page 2020-08-04 14:15:25 +02:00
Danilo Di Nuzzo
6422288207 added TypeDocs on collection selectior component 2020-08-04 11:55:24 +02:00
ddinuzzo
73b5a376b3 Merge branch 'main' into CST-3091 2020-08-04 11:53:35 +02:00
Danilo Di Nuzzo
4a30e5d7d5 fix response for test submission/vocabularies 2020-08-04 09:43:36 +02:00
Danilo Di Nuzzo
9b69aaaa07 added missing unsubscription in onebox component 2020-08-03 16:52:28 +02:00
Marie Verdonck
e06ff5057a lint 2020-08-03 16:26:10 +02:00
Marie Verdonck
4338250d8d abort travis after script fail, to be able to find cause of failure 2020-08-03 16:26:10 +02:00
Marie Verdonck
26905860ba 71712: Test fixes: eventemitter to subject in confirmation modal 2020-08-03 16:26:10 +02:00
Marie Verdonck
3e0f4a54e6 71712: confirmation modal for export + tests &
- request causing error because of issue #756, commented out for now &
- drop event prevention in a HostListener like dragover event
2020-08-03 16:26:10 +02:00
Marie Verdonck
66cdf9dd18 fdescribe removed 2020-08-03 16:25:38 +02:00
Marie Verdonck
e160d46b81 71713: Dropzone without uploader to own component 2020-08-03 16:25:38 +02:00
Marie Verdonck
9e095d09b6 lint fixes 2020-08-03 16:25:38 +02:00
Marie Verdonck
930512efaa 71713: dropzone padding 2020-08-03 16:25:38 +02:00
Marie Verdonck
393bdf0786 71713: restyle dropzone & rewrite antipattern nested subscribes 2020-08-03 16:25:38 +02:00
Marie Verdonck
9ae68fee32 71713: Tests Import metadata CSV page added 2020-08-03 16:25:38 +02:00
Marie Verdonck
2898cbac6d 71713: Import metadata CSV 2020-08-03 16:25:38 +02:00
Marie Verdonck
d295fa422f 71712: Item export no longer redirects & test async fixes 2020-08-03 16:25:09 +02:00
Marie Verdonck
8f28e989a1 71712: Test fixes 2020-08-03 16:25:09 +02:00
Marie Verdonck
311d93efad 71712: Left out the filter for authorized & metadata-export script exists to show export metadata option for now, until #635 is fixed
See https://github.com/DSpace/dspace-angular/issues/635
If uncommented now: in prod mode: button only available after refresh after login; in dev mode: button not available in any way because authorisation request header is not added to script request
2020-08-03 16:25:09 +02:00
Art Lowel
2f946ba2a3 fix issue where the menu wouldn't update if an option was added after the initial render 2020-08-03 16:25:09 +02:00
Marie Verdonck
d2523ade9b 71712: Check script exists with findBy Id & new tests & test fixes 2020-08-03 16:25:09 +02:00
Marie Verdonck
902d4c2330 71712: Export metadata CSV; WIP 2020-08-03 16:25:09 +02:00
ddinuzzo
793698a6d8 Merge branch 'main' into authorities_and_controlled_vocabularies 2020-08-03 11:00:38 +02:00
Tim Donohue
eb9809801f Merge pull request #799 from atmire/w2p-71806_Curation-tasks-UI
Curation Task Admin UI
2020-07-31 14:14:25 -05:00
Giuseppe Digilio
34da1dc055 Removed angular material dependency 2020-07-31 15:18:41 +02:00
Giuseppe Digilio
0582bc5622 Fixed issue when adding repeatable onebox field with vocabulary 2020-07-31 15:17:51 +02:00
Giuseppe Digilio
79db49043f Make metadata and scope properties as optional in the VocabularyOptions 2020-07-31 14:16:20 +02:00
Giuseppe Digilio
2ed144bd1c Fixed wrong links in mock object 2020-07-31 13:37:26 +02:00
Giuseppe Digilio
c9519f44fb Retrieve entries url from vocabulary's link 2020-07-31 13:30:23 +02:00
Giuseppe Digilio
9ced3530ab Added inline comments 2020-07-30 19:13:59 +02:00
Giuseppe Digilio
090fb94c4d Normalized submission section data when retrieving them from item object 2020-07-30 18:50:47 +02:00
Giuseppe Digilio
85506238b3 Fixed issue with form dropdown field which didn't close menu after entry selection 2020-07-30 18:46:17 +02:00
Giuseppe Digilio
1a9d20161c Fixed issue while preparing json patch value in case of array in the JsonPatchOperationsBuilder 2020-07-30 18:43:19 +02:00
Giuseppe Digilio
7dae82cbbd added virtualValue property to FormFieldMetadataValueObject 2020-07-30 18:41:04 +02:00
Giuseppe Digilio
7e7ce7b06e Added check for VocabularyEntry when initializing a controlled vocabulary component's init model 2020-07-30 18:37:45 +02:00
Yana De Pauw
ce5247253c Remove unused imports 2020-07-30 16:01:59 +02:00
Yana De Pauw
90f68eed7e Add check for config properties provided by server 2020-07-30 15:11:42 +02:00
Yana De Pauw
76ad72f536 71806: Use server config for curation tasks 2020-07-30 14:31:59 +02:00
Kristof De Langhe
23354b45c1 71764: Test changes 2020-07-30 11:24:58 +02:00
Kristof De Langhe
adb51bc06c 71764: authorization-data-service remove eperson param unless provided 2020-07-30 11:09:16 +02:00
Tim Donohue
8b639bc7ba Add keyword fixes & reminder to link to REST PR 2020-07-27 10:46:28 -05:00
Giuseppe Digilio
4779dd209e [CST-3092] fix context 2020-07-27 11:15:15 +02:00
Giuseppe Digilio
3f77ffa1e6 [CST-3092] remove margin bottom 2020-07-27 11:14:56 +02:00
Giuseppe Digilio
2529c91868 Merge remote-tracking branch 'remotes/DSpacegithub/main' into DS-4515_submit-external-source 2020-07-27 09:49:33 +02:00
Tim Donohue
1a46031e4d Add comments about syncing with local.cfg
This seems to be a common question of users. Clarifying via comments.
2020-07-24 11:36:52 -05:00
Giuseppe Digilio
a25ab5620f Merge remote-tracking branch 'remotes/origin/main' into authorities_and_controlled_vocabularies 2020-07-23 11:41:03 +02:00
Giuseppe Digilio
fb1b6c7a7a Changed findEntryDetailByValue method name to a properly findEntryDetailById 2020-07-22 17:49:36 +02:00
Giuseppe Digilio
d88a863a0d fixed issue that didn't allow to select tree node after a search 2020-07-22 17:40:03 +02:00
Giuseppe Digilio
47ab023e7a fixed VocabularyTreeviewComponent selector 2020-07-22 17:03:52 +02:00
Tim Donohue
095d5f3299 Merge pull request #541 from atmire/metadata-and-relationships-combined-in-submission
Combining relationships and metadata during submission
2020-07-22 09:26:55 -05:00
lotte
725481687d added test 2020-07-22 11:34:45 +02:00
Yana De Pauw
3e8ff05d2d 71806: Update messages 2020-07-22 10:49:59 +02:00
Yana De Pauw
2162153ae9 71806: Curation tasks UI 2020-07-22 10:49:59 +02:00
lotte
091ec6c917 added missing typedoc + removed console.logs 2020-07-22 10:27:57 +02:00
Giuseppe Digilio
c8c7e92717 Merge remote-tracking branch 'remotes/origin/main' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/core/core.module.ts
2020-07-21 18:57:47 +02:00
Giuseppe Digilio
cb11e3c702 Merge remote-tracking branch 'remotes/origin/main' into authorities_and_controlled_vocabularies 2020-07-21 18:55:48 +02:00
Giuseppe Digilio
6fecdfadb2 Fixed issue that redirect always to home page after checking authentication on CSR 2020-07-21 18:53:09 +02:00
Tim Donohue
9d3f58770a Merge pull request #717 from atmire/Features-support
Features support
2020-07-21 11:41:49 -05:00
lotte
ee8ad1293f removed remaining unnecessary imports for lgtm 2020-07-17 10:41:52 +02:00
lotte
a68428cc12 Merge branch 'main' into metadata-and-relationships-combined-in-submission 2020-07-17 10:03:39 +02:00
lotte
d467af4a35 lgtm feedback fixes 2020-07-17 10:01:56 +02:00
Tim Donohue
b3e90cbce9 Merge pull request #792 from atmire/X-Forwarded-For-Interceptor
IP Authentication: X-Forwarded-For Interceptor
2020-07-16 17:18:25 -05:00
Tim Donohue
84451b1f6f Merge pull request #758 from atmire/DS-630-Item_delete_broken
DS 630 - item delete broken
2020-07-16 15:17:32 -05:00
Tim Donohue
cf2759f6ca Update and rename .github/workflows/pull_request_opened.yml to .github/disabled-workflows/pull_request_opened.yml 2020-07-16 14:20:15 -05:00
Giuseppe Digilio
607318f6c5 Fix CommunityDataService's topLinkPath 2020-07-16 19:51:32 +02:00
Giuseppe Digilio
5950fb2e32 Merge remote-tracking branch 'remotes/github4science/master' into DS-4515_submit-external-source 2020-07-16 17:25:21 +02:00
Giuseppe Digilio
efb2922bb3 Merge remote-tracking branch 'remotes/origin/master' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/process-page/form/process-form.component.spec.ts
2020-07-16 17:18:20 +02:00
Giuseppe Digilio
c48b817c2d [CST-3092] Changed start message from external source page 2020-07-16 17:02:12 +02:00
Giuseppe Digilio
1c31deb3df [CST-3092] fixed style issue with external source search bar 2020-07-16 17:01:06 +02:00
Giuseppe Digilio
9225819046 [CST-3092] Removed label from New submission and Import buttons 2020-07-16 17:00:14 +02:00
Giuseppe Digilio
57f436e4ff Merge branch 'DS-4515_submit-external-source' of github.com:4Science/dspace-angular into DS-4515_submit-external-source
 Conflicts:
	src/app/submission/import-external/import-external-preview/submission-import-external-preview.component.spec.ts
2020-07-16 14:51:57 +02:00
Giuseppe Digilio
b8abedb5d6 Fixed test 2020-07-16 14:49:03 +02:00
Giuseppe Digilio
dda2668109 Merge remote-tracking branch 'remotes/origin/master' into authorities_and_controlled_vocabularies 2020-07-16 14:36:37 +02:00
Giuseppe Digilio
c7ef818454 [CST-3088] fix ProcessFormComponent test 2020-07-16 14:35:57 +02:00
Giuseppe Digilio
c33a63aa90 [CST-3088] Removed metadata and collection params when making vocabulary requests 2020-07-16 13:13:24 +02:00
Giuseppe Digilio
a283476403 [CST-3088] Fixed travis failure 2020-07-16 13:08:17 +02:00
Samuel
130a58870e Merge branch 'main' into DS-630-Item_delete_broken 2020-07-16 12:27:28 +02:00
Tim Donohue
a38df3811b Update issue templates 2020-07-15 15:10:53 -05:00
Tim Donohue
7ff250fb0b Merge pull request #795 from DSpace/tdonohue-pr-action
Auto Assign new Pull Requests to "main" branch to the PR creator
2020-07-15 15:05:35 -05:00
Tim Donohue
31e97eec9c Merge pull request #796 from DSpace/tdonohue-issue-action
Automatically add new Issues to "DSpace Backlog" project board
2020-07-15 15:05:13 -05:00
Tim Donohue
2959b73632 Create issue_opened.yml 2020-07-15 14:56:00 -05:00
Tim Donohue
5088da484e Create pull_request_opened.yml 2020-07-15 14:53:44 -05:00
Art Lowel
eeec39bf3f remove debug log 2020-07-15 18:16:45 +02:00
Tim Donohue
8d399fdde8 Initial issue templates
Starting with just a bug report & feature request.
2020-07-14 16:48:15 -05:00
Tim Donohue
23001b6d26 Merge pull request #794 from tdonohue/rename_master_to_main
Replace all references to `master` with `main`
2020-07-14 12:02:52 -05:00
Tim Donohue
47e735270b Rename master to main 2020-07-14 10:44:38 -05:00
Kristof De Langhe
b8a5edd2f3 Merge branch 'main' into w2p-71809_Add-server-side-X-Forwarded-For-interceptor 2020-07-14 17:37:30 +02:00
Kristof De Langhe
522ad4b3dc Merge branch 'main' into w2p-71429_Features-support-part-1
Conflicts:
	src/app/process-page/form/process-form.component.spec.ts
2020-07-14 17:36:20 +02:00
Tim Donohue
0da19b7c75 Merge pull request #793 from atmire/project-rename
Renamed project back to dspace-angular
2020-07-14 10:32:32 -05:00
lotte
1d7a9cd78b removed unused ci script from package.json 2020-07-14 16:39:04 +02:00
lotte
d558a056aa updates to travis scripts to prevent timeout 2020-07-14 16:37:26 +02:00
lotte
1bfc12fe9b added travis_wait to yarn ci command 2020-07-14 16:21:41 +02:00
lotte
08484d31ca renamed project to dspace-angular and fixed broken tests 2020-07-14 15:54:41 +02:00
Kristof De Langhe
3afe8c0b1d 71764: ItemStatusComponent BehaviorSubject for updating operations 2020-07-14 15:13:21 +02:00
Kristof De Langhe
35ca785695 Merge branch 'master' into w2p-71809_Add-server-side-X-Forwarded-For-interceptor
Conflicts:
	src/modules/app/server-app.module.ts
2020-07-14 13:35:11 +02:00
Tim Donohue
e5742c49d9 Merge pull request #760 from tdonohue/update_coveralls
Move coveralls step to "after_success" in Travis CI
2020-07-13 15:39:22 -05:00
Tim Donohue
4648348bd1 Remove deprecated "sudo" key. Add new recommended "os" key 2020-07-13 14:08:47 -05:00
Tim Donohue
e94fbfdcd0 Allow for any version of coveralls compatible with 3.0.0 2020-07-13 12:22:31 -05:00
Tim Donohue
6cd6c096e3 Move coveralls to after_success 2020-07-13 12:22:11 -05:00
Tim Donohue
e053607a17 Merge pull request #714 from 4Science/language-header
Language header
2020-07-13 11:40:09 -05:00
Tim Donohue
b05420ea88 Merge pull request #755 from atmire/reset-scroll-position-on-route-change
Reset scroll position on route change
2020-07-13 11:08:28 -05:00
Kristof De Langhe
0fa1e17078 71809: ForwardClientIpInterceptor 2020-07-13 15:47:59 +02:00
Kristof De Langhe
7f6bd680b2 71764: Test fixes 2020-07-10 14:18:01 +02:00
Kristof De Langhe
7787a2d0e9 71764: SiteRegisterGuard + hide register link when unauthorized 2020-07-10 13:14:55 +02:00
Kristof De Langhe
02fb4a4e4e 71764: Refactor DsoPageAdministratorGuard to more abstract DsoPageFeatureGuard and add implementations for WithdrawItem / ReinstateItem guards 2020-07-10 13:14:55 +02:00
Kristof De Langhe
9a666731e6 71764: Hide withdraw and reinstate button depending on authorization 2020-07-10 13:14:55 +02:00
Kristof De Langhe
73370fa00d 71764: DsoPageAdministratorGuard 2020-07-10 13:14:55 +02:00
Kristof De Langhe
5784493279 71429: Move curation task menu section to admin list 2020-07-10 13:14:43 +02:00
Art Lowel
95163aa226 fix issue due to method signature change after merge 2020-07-09 17:24:00 +02:00
Kristof De Langhe
3560bc60aa 71429: isAuthorized check on feature ID + hide impersonate button when unauthorized 2020-07-09 15:46:14 +02:00
Art Lowel
56d8a99c51 Merge pull request #757 from DSpace/dependabot/npm_and_yarn/npm-registry-fetch-4.0.5
Bump npm-registry-fetch from 4.0.3 to 4.0.5
2020-07-09 15:06:51 +02:00
Samuel
5a1b82d93c fix #630 Item delete broken - repair tests 2020-07-08 13:45:53 +02:00
Samuel
52289d8d23 fix #630 Item delete broken - handle items without entity type 2020-07-08 12:27:51 +02:00
dependabot[bot]
797a640814 Bump npm-registry-fetch from 4.0.3 to 4.0.5
Bumps [npm-registry-fetch](https://github.com/npm/registry-fetch) from 4.0.3 to 4.0.5.
- [Release notes](https://github.com/npm/registry-fetch/releases)
- [Changelog](https://github.com/npm/npm-registry-fetch/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/registry-fetch/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-08 09:00:35 +00:00
Samuel
deabffd429 fix #630 Item delete broken 2020-07-07 14:31:14 +02:00
Art Lowel
a74dafb959 reset scroll position on route change 2020-07-07 09:51:54 +02:00
Danilo Di Nuzzo
d85b0cb1b1 2020-07-06 18:34:03 +02:00
Kristof De Langhe
bfeeb7c13e Merge branch 'master' into w2p-71429_Features-support-part-1
Conflicts:
	src/app/+admin/admin-sidebar/admin-sidebar.component.ts
	src/app/app-routing.module.ts
	src/app/core/core.module.ts
2020-07-06 16:16:17 +02:00
ddinuzzo
5650a4a235 Merge branch 'master' into language-header 2020-07-06 14:46:14 +02:00
Giuseppe Digilio
a38e5cf632 fixed travis failure 2020-07-06 12:30:53 +02:00
Giuseppe Digilio
7c36051fcc fixed travis failure 2020-07-06 11:24:21 +02:00
Giuseppe Digilio
aa265c02a5 [CST-3088] Fixed travis failure 2020-07-06 10:28:23 +02:00
Matteo Perelli
9ec5709410 CI test fix using TestScheduler 2020-07-06 10:28:17 +02:00
Matteo
633dfaaa6d Merge branch 'master' into DS-4515_submit-external-source 2020-07-06 09:16:07 +02:00
Matteo Perelli
d6a5d9d1dd CI test fix, buttons and searchbar style fix and service methods removed 2020-07-06 09:12:18 +02:00
Giuseppe Digilio
58f18737f7 [CST-3088] tried to resolve travis fail 2020-07-03 15:53:29 +02:00
Giuseppe Digilio
2da96aac25 initialized submission object's sections properly on submission submit 2020-07-03 15:43:08 +02:00
Giuseppe Digilio
9015d50f59 Merge remote-tracking branch 'remotes/origin/master' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/core/core.module.ts
#	src/app/shared/shared.module.ts
2020-07-03 09:29:59 +02:00
Art Lowel
bd9a6c487f Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-07-03 09:26:57 +02:00
Art Lowel
d6ab8eff45 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-07-02 18:29:10 +02:00
Art Lowel
fe785f6d2f fix issue where create com/col guards would redirect to 404 for the wrong reason 2020-07-02 18:28:30 +02:00
Giuseppe Digilio
2238599a7d [CST-3088] remove duplicated test 2020-07-02 17:57:31 +02:00
Giuseppe Digilio
e46ee579a3 reverted i18n files to master version 2020-07-02 16:33:16 +02:00
ddinuzzo
8c5347ab0f Merge branch 'master' into language-header 2020-07-02 14:51:17 +02:00
Kristof De Langhe
d562b19d57 71429: LGTM fixes 2020-07-02 14:28:35 +02:00
Giuseppe Digilio
599ddf4653 [CST-3088] Renamed browseEntries variable to entries 2020-07-02 14:28:12 +02:00
Kristof De Langhe
ba3c8d2b9e Merge branch 'master' into w2p-71429_Features-support-part-1
Conflicts:
	src/app/core/core.module.ts
	src/app/core/eperson/eperson-data.service.ts
2020-07-02 14:26:19 +02:00
Giuseppe Digilio
3f0ab2cf13 [CST-3088] Fixed lint errors 2020-07-02 14:15:16 +02:00
Giuseppe Digilio
2ad62dd3e9 Merge remote-tracking branch 'remotes/origin/master' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/core/cache/response.models.ts
#	src/app/core/core.module.ts
#	src/app/core/data/request.models.ts
#	src/app/shared/shared.module.ts
2020-07-02 14:07:18 +02:00
Giuseppe Digilio
30d53c5954 [CST-3088] Renamed DsDynamicTypeaheadComponent to DsDynamicOneboxComponent 2020-07-02 12:14:19 +02:00
Matteo Perelli
e36cb83622 Additional fix for CI tests 2020-07-02 11:50:39 +02:00
Giuseppe Digilio
e8237f196f [CST-3088] added test for hierarchical vocabulary 2020-07-02 11:42:30 +02:00
Matteo
4370f197ec Merge branch 'master' into DS-4515_submit-external-source 2020-07-02 09:47:58 +02:00
Giuseppe Digilio
44381d7653 [CST-3088] fixed code 2020-07-01 22:57:26 +02:00
Art Lowel
c36877ae3a remove debug log 2020-07-01 18:19:52 +02:00
Art Lowel
2cffdc8a86 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-07-01 16:59:22 +02:00
Art Lowel
bcd93de708 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-07-01 16:44:38 +02:00
Giuseppe Digilio
7e80bcf9e9 Merge remote-tracking branch 'remotes/origin/master' into authorities_and_controlled_vocabularies
# Conflicts:
#	src/app/core/cache/response.models.ts
#	src/app/core/core.module.ts
#	src/app/shared/shared.module.ts
2020-07-01 16:04:11 +02:00
Giuseppe Digilio
ca42e2280c [CST-3088] added management of hierarchical vocabulary on typeahead component 2020-07-01 16:00:09 +02:00
Giuseppe Digilio
81f0391400 [CST-3088] Fix lint errors 2020-07-01 15:35:29 +02:00
Giuseppe Digilio
e0604026c5 [CST-3088] Added component to show hierarchical vocabulary as a tree 2020-07-01 15:16:14 +02:00
Giuseppe Digilio
ce61addc9b [CST-3088] Added method to retrieve parent and children for a vocabulary entry 2020-07-01 15:13:52 +02:00
Danilo Di Nuzzo
722fdc0124 [CST-2877] rm browser lang for SSR reqs 2020-06-30 16:42:58 +02:00
Giuseppe Digilio
6ef3f685ca Fixed issue with search requests that weren't fetched again after entry cache was expired 2020-06-30 12:42:48 +02:00
Art Lowel
f4387ac212 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-06-30 12:06:56 +02:00
Art Lowel
3e6195a124 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-06-30 11:49:08 +02:00
Danilo Di Nuzzo
99a6bf52ff Merge branch 'master' into CST-3091 2020-06-30 10:25:01 +02:00
Danilo Di Nuzzo
d611761548 Merge branch 'master' into language-header 2020-06-30 10:17:03 +02:00
Giuseppe Digilio
3225966600 [CST-3088] Created abstract form component to handle vocabularies 2020-06-29 22:20:52 +02:00
Giuseppe Digilio
4cc1a3eecd [CST-3088] Refactored VocabularyService to use VocabularyOptions and added more methods 2020-06-29 22:18:10 +02:00
Giuseppe Digilio
df26b85c50 [CST-3088] Create abstract response parsing for entries 2020-06-29 22:15:02 +02:00
Art Lowel
775becd656 fix issue where hints wouldn't show for non-repeatable fields, and remove commented out bits of code 2020-06-29 15:34:18 +02:00
ddinuzzo
746a72392f Merge branch 'master' into language-header 2020-06-29 09:36:54 +02:00
Matteo
bcb1682e1d Merge branch 'master' into DS-4515_submit-external-source 2020-06-29 09:15:53 +02:00
Danilo Di Nuzzo
806843640f [CST-3091] fix close dialog and test 2020-06-26 16:15:16 +02:00
Danilo Di Nuzzo
8df505b4a0 Merge branch 'master' into CST-3091 2020-06-26 15:31:39 +02:00
Danilo Di Nuzzo
0ca1798537 [CST-3091] fix tests and add new labels 2020-06-26 15:25:58 +02:00
Matteo Perelli
e094663a77 Additional fix for CI tests 2020-06-26 11:19:44 +02:00
Danilo Di Nuzzo
573968adc0 Merge branch 'CST-3090-collection-dropdown' into CST-3091 2020-06-26 09:56:01 +02:00
Danilo Di Nuzzo
e6b0c20377 Merge branch 'CST-3090-collection-dropdown' into CST-3091 2020-06-26 09:44:09 +02:00
Matteo Perelli
97b4b90585 Additional fix for CI tests 2020-06-26 09:29:11 +02:00
Danilo Di Nuzzo
59564eb44d [CST-3091] add comp collection-selector, fix issue 2020-06-26 09:25:22 +02:00
Matteo Perelli
9ada61db28 Multiple call to external source service fix 2020-06-25 16:58:43 +02:00
Giuseppe Digilio
f71fd5737a [CST-3088] Removed authority and integration services 2020-06-25 15:22:20 +02:00
Giuseppe Digilio
63cca76b49 [CST-3088] Replace use of AuthorityService with new VocabularyService 2020-06-25 15:21:44 +02:00
Giuseppe Digilio
3117916d5b [CST-3088] Added vocabularyEntryDetails's methods to VocabularyService 2020-06-24 19:00:13 +02:00
Kristof De Langhe
fcdd1a8ef2 71429: Test fix 2020-06-24 16:40:50 +02:00
Kristof De Langhe
882ff3ea18 71429: Test fixes 2020-06-24 16:08:10 +02:00
Matteo Perelli
ba46f243c8 Test fix for CI 2020-06-24 15:38:45 +02:00
Kristof De Langhe
080ddf8a1f 71429: Unauthorized page fixes 2020-06-24 15:05:24 +02:00
Kristof De Langhe
78a5bd5fce 71429: Unauthorized component 2020-06-24 14:22:28 +02:00
Kristof De Langhe
0cef62ff48 71429: Feedback 2020-06-23 2020-06-24 13:05:58 +02:00
Giuseppe Digilio
c7cf11f421 [CST-3088] Improved VocabularyFindOptions 2020-06-24 12:52:16 +02:00
Danilo Di Nuzzo
c3192047e1 [CST-2877] fix tests 2020-06-24 12:32:33 +02:00
Matteo Perelli
c25085b299 Lint errors fixed 2020-06-24 11:52:34 +02:00
Danilo Di Nuzzo
ea5f727449 [CST-2877] fix method for lang list & add reload after change lang 2020-06-24 10:55:13 +02:00
Giuseppe Digilio
74d1e0bccb Fixed issue with spyOn 2020-06-24 10:48:29 +02:00
Giuseppe Digilio
0f4e881717 Merge branch 'DS-4515_submit-external-source' of github.com:4Science/dspace-angular into DS-4515_submit-external-source 2020-06-24 10:32:06 +02:00
Giuseppe Digilio
1f54094d5a Fixed components import 2020-06-24 10:31:54 +02:00
Matteo Perelli
0b858805f2 Merge branch 'master' into DS-4515_submit-external-source 2020-06-24 10:29:28 +02:00
Matteo Perelli
43f5e08530 External source import completed with tests 2020-06-24 10:16:30 +02:00
Giuseppe Digilio
1156bd3934 [CST-3088] Added vocabulary service and models 2020-06-23 18:17:47 +02:00
Giuseppe Digilio
e1b80bcbaf [CST-3088] changed buildHrefFromFindOptions in the way to use search params while building url 2020-06-23 18:12:02 +02:00
Matteo Perelli
c2c650fa1a External import button added 2020-06-22 20:26:04 +02:00
Matteo Perelli
0e29fbc2ba Fixed conflicts after merge 2020-06-22 20:25:22 +02:00
Matteo Perelli
b4ec056d03 Removing file for conflicts 2020-06-22 20:23:54 +02:00
Matteo Perelli
2f04b6ae83 External source items import new files 2020-06-22 19:59:29 +02:00
Matteo Perelli
e7ef9dab20 External source items import code completed 2020-06-22 19:59:10 +02:00
Danilo Di Nuzzo
d66d5b6a46 [CST-2877] done (angular) 2020-06-22 17:54:37 +02:00
Art Lowel
a49607ed61 restore property that was accidentally removed during merge 2020-06-22 16:46:11 +02:00
Art Lowel
a281583f6e fix test and lint issues after merge 2020-06-22 12:26:30 +02:00
Art Lowel
05b2489da5 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-06-22 11:50:44 +02:00
Kristof De Langhe
72381f4083 71429: Feature and Authorization tests 2020-06-19 15:55:25 +02:00
Giuseppe Digilio
2653980beb Merge remote-tracking branch 'remotes/origin/master' into language-header 2020-06-19 11:19:31 +02:00
Giuseppe Digilio
63cff331d2 Fixed scrollable dropdown 2020-06-18 19:01:34 +02:00
Kristof De Langhe
89afaaa4a5 71429: Abstract FeatureAuthorizationGuard + small fix 2020-06-18 17:39:11 +02:00
Kristof De Langhe
bbbeddc875 71429: SiteAdministratorGuard on admin routes + authorization check on visibility of admin sidebar sections 2020-06-18 17:13:37 +02:00
Matteo Perelli
fb40b8f031 Submission from an external source initial commit 2020-06-18 16:16:31 +02:00
Kristof De Langhe
8350833b61 71429: FeatureType enum and searchBy override 2020-06-18 14:47:59 +02:00
Kristof De Langhe
ec998fce30 71429: isAuthenticated and canImpersonate$ 2020-06-18 10:04:18 +02:00
Kristof De Langhe
39e0c03593 71429: Feature and Authentication Models and Services 2020-06-17 16:27:25 +02:00
Kristof De Langhe
94cd5b5767 Merge branch 'master' into w2p-68067_Fix-context-sensitive-menus 2020-06-17 13:32:49 +02:00
lotte
1afa906b21 fixed issue with test import 2020-05-12 18:37:28 +02:00
lotte
aa9570c776 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-05-12 17:19:08 +02:00
Giuseppe Digilio
889a91ba52 Fixed merge 2020-05-11 20:28:31 +02:00
Giuseppe Digilio
bdc0304d5a Merge remote-tracking branch 'remotes/origin/master' into language-header
# Conflicts:
#	src/app/app.component.spec.ts
#	src/app/app.component.ts
#	src/app/shared/lang-switch/lang-switch.component.spec.ts
#	src/app/shared/lang-switch/lang-switch.component.ts
2020-05-11 20:09:39 +02:00
Art Lowel
f3ecd3837e fix issue where mydspace would throw an error while loading 2020-04-29 18:07:52 +02:00
Art Lowel
db169826d5 fix issue where the entered value couldn't be used as a query in the entity lookup for oneboxes 2020-04-29 15:18:56 +02:00
Art Lowel
766015d64c use unique list ids for each submission 2020-04-29 15:00:57 +02:00
Art Lowel
2a6e0c796a fix tests 2020-04-29 14:12:45 +02:00
Art Lowel
c87d0895b0 filter out move operations where source and target are the same 2020-04-28 17:52:01 +02:00
Art Lowel
afe394e2a4 Merge branch 'master' into w2p-70237_entities-orgunit-submission-fix 2020-04-28 17:45:29 +02:00
Art Lowel
673926c36b fix tests and lint issues 2020-04-28 16:35:51 +02:00
Art Lowel
e4c4a1ecd4 remove debug log 2020-04-23 13:17:13 +02:00
Art Lowel
facd2284d2 fix issue where related entites would be rendered as metadata for one box fields 2020-04-23 13:16:43 +02:00
Art Lowel
adc7649820 fix an issue where a relationship in the submission would keep loading until you click the page 2020-04-22 18:17:08 +02:00
Art Lowel
056bac885d don't show the plus button for repeatable relationship only fields 2020-04-22 18:10:29 +02:00
Art Lowel
3aefa690b9 fix issue where the disabled field would be rendered for each selected relationship 2020-04-22 18:07:20 +02:00
Art Lowel
ecf4b165b1 Merge branch 'metadata-and-relationships-combined-in-submission' into w2p-70237_entities-orgunit-submission-fix 2020-04-22 15:51:42 +02:00
Art Lowel
dd7fc2aa6f fix issue where editing template rows caused invald patch requests 2020-04-22 15:13:12 +02:00
lotte
1465cfca37 Merge branch 'metadata-and-relationships-combined-in-submission' into w2p-70237_entities-orgunit-submission-fix 2020-04-22 11:45:00 +02:00
Art Lowel
53fd559a7c fix issues with deleting of reorderable array items 2020-04-22 09:49:32 +02:00
Giuseppe Digilio
616a5fe0bd Added LocaleInterceptor to set Accept-Language header 2020-04-20 20:07:24 +02:00
Giuseppe Digilio
145b26d262 Added LocaleService as localization handler 2020-04-20 20:06:50 +02:00
lotte
5aa09eb363 fixed compilation issues 2020-04-17 13:13:04 +02:00
Art Lowel
19bd36a80f switch to patch for reorderin 2020-04-17 11:24:10 +02:00
lotte
450bfe6b3f Merge branch 'metadata-and-relationships-combined-in-submission' into w2p-70237_entities-orgunit-submission-fix 2020-04-17 11:09:03 +02:00
lotte
b29161988d fixed broken tests 2020-04-17 11:06:02 +02:00
lotte
cb61b0adda fixed issue in effects and removed unnecessary console logs 2020-04-16 14:23:23 +02:00
Art Lowel
9a68969eec ensure PUTs are always executed after the PATCH for a move operation 2020-04-15 17:13:43 +02:00
Art Lowel
2c3d8fd031 remove console log 2020-04-15 15:31:06 +02:00
Art Lowel
d02c41c089 ensure cache times are used for all types of requests 2020-04-15 15:04:31 +02:00
Art Lowel
d6087e3620 remove logs, fix lint issues 2020-04-15 11:24:24 +02:00
Art Lowel
66a996bb0f add i18n label 2020-04-15 10:55:36 +02:00
Art Lowel
634f4e718e don't pass a query value to the modal if it's readonly 2020-04-15 10:50:10 +02:00
Art Lowel
06cc028c80 use namevariants based on config 2020-04-15 10:34:35 +02:00
Art Lowel
44801701c9 populate submission sections with metadata from single effect 2020-04-10 10:12:21 +02:00
Art Lowel
6b0f76c012 fix nullpointer 2020-04-09 10:30:20 +02:00
Art Lowel
e0d4eb7c9c ensure submissionsection state also contains all metadata after a save 2020-04-08 18:14:29 +02:00
Art Lowel
85bc11176e Merge branch 'request-by-uuid-issue' into metadata-and-relationships-combined-in-submission 2020-04-07 18:33:11 +02:00
lotte
74db9030b0 working on fixes for OrgUnit field in submission 2020-04-07 18:17:37 +02:00
Art Lowel
558b0b688c Merge branch 'request-by-uuid-issue' into metadata-and-relationships-combined-in-submission 2020-04-07 14:06:26 +02:00
Art Lowel
1fd7989a41 fix test and lint 2020-04-07 11:08:20 +02:00
Art Lowel
e5053c85b0 fix lint issues 2020-04-07 09:30:08 +02:00
Art Lowel
493cbc65fe fix issue where reordering wouldn't work for relationships to cached items 2020-04-06 18:35:10 +02:00
Art Lowel
61624bf606 remove PATCH workaround and fix issue where name variants wouldn't be stored in the Item 2020-04-06 18:20:45 +02:00
Art Lowel
807500db41 fix issue where results wouldn't update after a name variant change 2020-04-06 18:11:27 +02:00
Art Lowel
2a58f2480a fix issue where requestservice.getByUUID wouldn't work for requests that were never sent because there was already a copy in the cache 2020-04-06 16:40:45 +02:00
Art Lowel
f64eff42f4 fix a number of issues with name variants 2020-04-03 17:28:13 +02:00
Art Lowel
62002f94ef only use name variant after modal closes 2020-04-03 10:23:55 +02:00
Art Lowel
924e623b6a fix issue where namvariants wouldn't work 2020-04-02 14:14:36 +02:00
Art Lowel
f93df688e4 remove debug logs 2020-04-02 10:23:11 +02:00
Art Lowel
29e6f6f72f fix issue where the first relationship of a type wouldn't be added 2020-04-02 10:22:08 +02:00
Art Lowel
6dbc2ef880 fix lint issue 2020-04-01 15:55:53 +02:00
Art Lowel
285fe2299a fix test after merge 2020-04-01 15:35:33 +02:00
Art Lowel
a2df95a679 fix lint issues 2020-04-01 14:20:00 +02:00
Art Lowel
987e2d98fd Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-04-01 14:06:06 +02:00
Art Lowel
2989ca4d96 fix issues with repeatable fields 2020-04-01 11:06:31 +02:00
Art Lowel
a8d5ad9c37 fix adding of metadata only fields, and styling 2020-02-25 17:01:44 +01:00
Art Lowel
644dcf8ce6 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-02-24 16:43:18 +01:00
Art Lowel
212d626e36 Merge branch 'followlink-refactor' into metadata-and-relationships-combined-in-submission 2020-02-24 15:17:13 +01:00
Art Lowel
bc8bacab54 Merge branch 'followlink-refactor' into metadata-and-relationships-combined-in-submission 2020-02-24 14:59:28 +01:00
Art Lowel
9d059e190e Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-02-24 11:42:55 +01:00
lotte
c98a4a1c3f fixes for replacing/moving 2020-02-19 17:04:37 +01:00
lotte
1a6f67d12e reorderable update fix 2020-02-17 13:23:49 +01:00
lotte
1b8cb5b10c workspace item update after move 2020-02-14 16:50:28 +01:00
lotte
6053d0691f bug fix 2020-02-13 08:49:24 +01:00
lotte
0f539ea7d7 trying to fix query in submission entities 2020-02-06 16:28:39 +01:00
lotte
2fc1e6e827 disabled thumbnails in entities results 2020-02-06 14:26:15 +01:00
lotte
32f8842af8 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-02-06 08:55:04 +01:00
lotte
6cfcff5503 fixed tests in relaitonship service 2020-02-05 16:53:39 +01:00
lotte
405143388c Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-02-05 10:54:49 +01:00
lotte
fa0a0dd78c fixed relationship effects tests 2020-02-05 10:38:58 +01:00
lotte
34c5d93a98 fixed more tests 2020-02-04 12:36:17 +01:00
lotte
d1b7f07c68 final bug fixing 2020-02-03 14:49:06 +01:00
lotte
360abb78de intermediate commit 2020-02-03 12:58:24 +01:00
lotte
28747314e6 fixed bug with double selection 2020-01-28 11:29:25 +01:00
lotte
6792f75c38 bug fixing 2020-01-24 17:15:14 +01:00
lotte
8a6fe08c22 drag drop styling 2020-01-22 14:58:37 +01:00
lotte
002813e25e Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-01-22 09:37:37 +01:00
lotte
ee3de31d69 fixed remaining test issue 2020-01-20 15:15:01 +01:00
lotte
0854701550 fixed tests 2020-01-20 12:44:29 +01:00
lotte
a4d5e0d20e bug fixing 2020-01-17 16:51:05 +01:00
lotte
db96da55d8 Merge branch 'master' into metadata-and-relationships-combined-in-submission 2020-01-17 13:06:16 +01:00
lotte
a449b79746 Merge branch 'reorder-name-variants' into metadata-and-relationships-combined-in-submission 2020-01-16 13:24:19 +01:00
lotte
c92fb9262c fixes for multiple fields 2020-01-16 12:59:19 +01:00
lotte
ab966c08ac Merge branch 'reorder-name-variants' into metadata-and-relationships-combined-in-submission 2020-01-14 16:16:17 +01:00
lotte
e768169add UX improvements 2020-01-14 15:29:21 +01:00
lotte
23d4b16243 made sure added relationships are shown again, resolved issues with duplicate entries + other bug fixes 2020-01-09 16:23:32 +01:00
lotte
3e9eb9eedc fixed relationship specific labels in modal and cleaned up existing code 2020-01-02 13:48:24 +01:00
lotte
3dfba2ad12 fixed strange test issue 2020-01-02 13:22:10 +01:00
lotte
11d3f33276 added input value as query in modal 2019-12-23 15:36:39 +01:00
lotte
2a686a2fc4 fixed spec error 2019-12-23 13:13:57 +01:00
lotte
5778b3ec6d Merge branch 'reorder-name-variants' into metadata-and-relationships-combined-in-submission 2019-12-23 11:49:42 +01:00
lotte
747606b40f fixed linting errors 2019-12-23 09:27:57 +01:00
lotte
c002d8c640 fixed existing tests 2019-12-23 08:47:46 +01:00
lotte
5ef538a9e8 Merge branch 'reorder-name-variants' into metadata-and-relationships-combined-in-submission 2019-12-23 08:31:22 +01:00
lotte
692a4a4a3d cleanup 2019-12-20 15:08:26 +01:00
lotte
aa7b3b7bb4 fixed remove buttons for both relatinoships and metadata 2019-12-16 15:31:14 +01:00
lotte
e3355455af fixed patch move 2019-12-13 16:58:59 +01:00
lotte
b7f18a1275 fixed issues with concat fields and adding repeatable metadata values in submission 2019-12-11 15:28:24 +01:00
Art Lowel
4cdb1370e2 metadata updates are now sent to the server, but the format is still wrong 2019-12-10 18:30:19 +01:00
lotte
b705e4a0f6 updates styling 2019-12-10 16:52:00 +01:00
lotte
55f14b2885 Merge branch 'metadata-and-relationships-combined-in-submission' of https://git.atmire.com/contributions/dspace-angular into metadata-and-relationships-combined-in-submission 2019-12-10 16:16:52 +01:00
lotte
cce9832037 fixed to row fields 2019-12-10 16:16:07 +01:00
Art Lowel
453a2919d1 store reordered relationships to the server 2019-12-10 15:40:56 +01:00
Art Lowel
b728463e56 make reorderables work for empty values 2019-12-10 10:58:47 +01:00
lotte
84bb44ae62 show metadata values in input fields 2019-12-10 10:22:27 +01:00
Art Lowel
9804161ff1 intermediate commit 2019-12-09 18:32:58 +01:00
Art Lowel
a5047f2f76 hide hints for repeated models of the same field, fix typo 2019-12-09 17:10:49 +01:00
lotte
fa40cac7e7 draggable form groups 2019-12-09 16:33:52 +01:00
lotte
e9f002785a draggable form array controls 2019-12-09 13:51:14 +01:00
lotte
6bba88019e changed rendering of values 2019-12-06 17:02:57 +01:00
lotte
28a0654d20 commit with extra wrapper component 2019-12-06 09:17:08 +01:00
2595 changed files with 126410 additions and 41483 deletions

28
.codecov.yml Normal file
View File

@@ -0,0 +1,28 @@
# DSpace configuration for Codecov.io coverage reports
# These override the default YAML settings at
# https://docs.codecov.io/docs/codecov-yaml#section-default-yaml
# Can be validated via instructions at:
# https://docs.codecov.io/docs/codecov-yaml#validate-your-repository-yaml
# Settings related to code coverage analysis
coverage:
status:
# Configuration for project-level checks. This checks how the PR changes overall coverage.
project:
default:
# For each PR, auto compare coverage to previous commit.
# Require that overall (project) coverage does NOT drop more than 0.5%
target: auto
threshold: 0.5%
# Configuration for patch-level checks. This checks the relative coverage of the new PR code ONLY.
patch:
default:
# Enable informational mode, which just provides info to reviewers & always passes
# https://docs.codecov.io/docs/commit-status#section-informational
informational: true
# Turn PR comments "off". This feature adds the code coverage summary as a
# comment on each PR. See https://docs.codecov.io/docs/pull-request-comments
# However, this same info is available from the Codecov checks in the PR's
# "Checks" tab in GitHub. So, the comment is unnecessary.
comment: false

View File

@@ -12,3 +12,6 @@ trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false
[*.ts]
quote_type = single

22
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,22 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug, needs triage
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is. Include the version(s) of DSpace where you've seen this problem & what *web browser* you were using. Link to examples if they are public.
**To Reproduce**
Steps to reproduce the behavior:
1. Do this
2. Then this...
**Expected behavior**
A clear and concise description of what you expected to happen.
**Related work**
Link to any related tickets or PRs here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest a new feature for this project
title: ''
labels: new feature, needs triage
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives or workarounds you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

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

View File

@@ -1,7 +1,7 @@
## References
_Add references/links to any related tickets or PRs. These may include:_
* Link to [Angular issue or PR](https://github.com/DSpace/dspace-angular/issues) related to this PR, if any
* Link to [JIRA](https://jira.lyrasis.org/projects/DS/summary) ticket(s), if any
_Add references/links to any related issues or PRs. These may include:_
* Fixes #[issue-number]
* Requires DSpace/DSpace#[pr-number] (if a REST API PR is required to test this)
## Description
Short summary of changes (1-2 sentences).
@@ -20,9 +20,7 @@ _This checklist provides a reminder of what we are going to look for when review
- [ ] My PR is small in size (e.g. less than 1,000 lines of code, not including comments & specs/tests), or I have provided reasons as to why that's not possible.
- [ ] My PR passes [TSLint](https://palantir.github.io/tslint/) validation using `yarn run lint`
- [ ] My PR doesn't introduce circular dependencies
- [ ] My PR includes [TypeDoc](https://typedoc.org/) comments for _all new (or modified) public methods and classes_. It also includes TypeDoc for large or complex private methods.
- [ ] My PR passes all specs/tests and includes new/updated specs for any bug fixes, improvements or new features. A few reminders about what constitutes good tests:
* Include tests for different user types (if behavior differs), including: (1) Anonymous user, (2) Logged in user (non-admin), and (3) Administrator.
* Include tests for error scenarios, e.g. when errors/warnings should appear (or buttons should be disabled).
* For bug fixes, include a test that reproduces the bug and proves it is fixed. For clarity, it may be useful to provide the test in a separate commit from the bug fix.
- [ ] If my PR includes new, third-party dependencies (in `package.json`), I've made sure their licenses align with the [DSpace BSD License](https://github.com/DSpace/DSpace/blob/master/LICENSE) based on the [Licensing of Contributions](https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines#CodeContributionGuidelines-LicensingofContributions) documentation.
- [ ] My PR passes all specs/tests and includes new/updated specs or tests based on the [Code Testing Guide](https://wiki.lyrasis.org/display/DSPACE/Code+Testing+Guide).
- [ ] If my PR includes new, third-party dependencies (in `package.json`), I've made sure their licenses align with the [DSpace BSD License](https://github.com/DSpace/DSpace/blob/main/LICENSE) based on the [Licensing of Contributions](https://wiki.lyrasis.org/display/DSPACE/Code+Contribution+Guidelines#CodeContributionGuidelines-LicensingofContributions) documentation.

155
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,155 @@
# DSpace Continuous Integration/Build via GitHub Actions
# Concepts borrowed from
# https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs
name: Build
# Run this Build for all pushes / PRs to current branch
on: [push, pull_request]
jobs:
tests:
runs-on: ubuntu-latest
env:
# The ci step will test the dspace-angular code against DSpace REST.
# Direct that step to utilize a DSpace REST service that has been started in docker.
DSPACE_REST_HOST: localhost
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
# 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]
# 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
# https://github.com/actions/setup-node
- name: Install Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
# If CHROME_VERSION env variable specified above, then pin to that version.
# Otherwise, just install latest version of Chrome.
- name: Install Chrome (for e2e tests)
run: |
if [[ -z "${CHROME_VERSION}" ]]
then
echo "Installing latest stable version"
sudo apt-get update
sudo apt-get --only-upgrade install google-chrome-stable -y
else
echo "Installing version ${CHROME_VERSION}"
wget -q "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}_amd64.deb"
sudo dpkg -i "google-chrome-stable_${CHROME_VERSION}_amd64.deb"
fi
google-chrome --version
# https://github.com/actions/cache/blob/main/examples.md#node---yarn
- name: Get Yarn cache directory
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Cache Yarn dependencies
uses: actions/cache@v2
with:
# Cache entire Yarn cache directory (see previous step)
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
# Cache key is hash of yarn.lock. Therefore changes to yarn.lock will invalidate cache
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-
- name: Install Yarn dependencies
run: yarn install --frozen-lockfile
- name: Run lint
run: yarn run lint
- name: Run build
run: yarn run build:prod
- name: Run specs (unit tests)
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)
# https://github.com/codecov/codecov-action
- name: Upload coverage to Codecov.io
uses: codecov/codecov-action@v1
if: matrix.node-version == '12.x'
# Using docker-compose start backend using CI configuration
# and load assetstore from a cached copy
- name: Start DSpace REST Backend via Docker (for e2e tests)
run: |
docker-compose -f ./docker/docker-compose-ci.yml up -d
docker-compose -f ./docker/cli.yml -f ./docker/cli.assetstore.yml run --rm dspace-cli
docker container ls
# Run integration tests via Cypress.io
# https://github.com/cypress-io/github-action
# (NOTE: to run these e2e tests locally, just use 'ng e2e')
- name: Run e2e tests (integration tests)
uses: cypress-io/github-action@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
# Start up the app with SSR enabled (run in background)
- name: Start app in SSR (server-side rendering) mode
run: |
nohup yarn run serve:ssr &
printf 'Waiting for app to start'
until curl --output /dev/null --silent --head --fail http://localhost:4000/home; do
printf '.'
sleep 2
done
echo "App started successfully."
# Get homepage and verify that the <meta name="title"> tag includes "DSpace".
# If it does, then SSR is working, as this tag is created by our MetadataService.
# This step also prints entire HTML of homepage for easier debugging if grep fails.
- name: Verify SSR (server-side rendering)
run: |
result=$(wget -O- -q http://localhost:4000/home)
echo "$result"
echo "$result" | grep -oE "<meta name=\"title\" [^>]*>" | grep DSpace
- name: Stop running app
run: kill -9 $(lsof -t -i:4000)
- name: Shutdown Docker containers
run: docker-compose -f ./docker/docker-compose-ci.yml down

29
.github/workflows/issue_opened.yml vendored Normal file
View File

@@ -0,0 +1,29 @@
# This workflow runs whenever a new issue is created
name: Issue opened
on:
issues:
types: [opened]
jobs:
automation:
runs-on: ubuntu-latest
steps:
# Add the new issue to a project board, if it needs triage
# See https://github.com/marketplace/actions/create-project-card-action
- name: Add issue to project board
# Only add to project board if issue is flagged as "needs triage" or has no labels
# NOTE: By default we flag new issues as "needs triage" in our issue template
if: (contains(github.event.issue.labels.*.name, 'needs triage') || join(github.event.issue.labels.*.name) == '')
uses: technote-space/create-project-card-action@v1
# Note, the authentication token below is an ORG level Secret.
# It must be created/recreated manually via a personal access token with "public_repo" and "admin:org" permissions
# See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token#permissions-for-the-github_token
# This is necessary because the "DSpace Backlog" project is an org level project (i.e. not repo specific)
with:
GITHUB_TOKEN: ${{ secrets.ORG_PROJECT_TOKEN }}
PROJECT: DSpace Backlog
COLUMN: Triage
CHECK_ORG_PROJECT: true
# Ignore errors
continue-on-error: true

View File

@@ -0,0 +1,25 @@
# This workflow checks open PRs for merge conflicts and labels them when conflicts are found
name: Check for merge conflicts
# Run whenever the "main" branch is updated
# NOTE: This means merge conflicts are only checked for when a PR is merged to main.
on:
push:
branches:
- main
jobs:
triage:
runs-on: ubuntu-latest
steps:
# See: https://github.com/mschilde/auto-label-merge-conflicts/
- name: Auto-label PRs with merge conflicts
uses: mschilde/auto-label-merge-conflicts@v2.0
# Add "merge conflict" label if a merge conflict is detected. Remove it when resolved.
# Note, the authentication token is created automatically
# See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
with:
CONFLICT_LABEL_NAME: 'merge conflict'
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Ignore errors
continue-on-error: true

1
.gitignore vendored
View File

@@ -39,3 +39,4 @@ package-lock.json
.java-version
.env
/nbproject/

View File

@@ -1,57 +0,0 @@
sudo: required
dist: bionic
language: node_js
# Enable caching for yarn & node_modules
cache:
yarn: true
node_js:
- "10"
- "12"
# Install latest chrome (for e2e headless testing). Run an update if needed.
addons:
apt:
sources:
- google-chrome
packages:
- google-chrome-stable
update: true
env:
# The ci step will test the dspace-angular code against DSpace REST.
# Direct that step to utilize a DSpace REST service that has been started in docker.
DSPACE_REST_HOST: localhost
DSPACE_REST_PORT: 8080
DSPACE_REST_NAMESPACE: '/server/api'
DSPACE_REST_SSL: false
before_install:
# Check our versions of everything
- echo "Check versions"
- yarn -v
- docker-compose -v
- google-chrome-stable --version
install:
# Start up DSpace 7 using the entities database dump
- docker-compose -f ./docker/docker-compose-travis.yml up -d
# Use the dspace-cli image to populate the assetstore. Triggers a discovery and oai update
- docker-compose -f ./docker/cli.yml -f ./docker/cli.assetstore.yml run --rm dspace-cli
- travis_retry yarn install
before_script:
- echo "Check Docker containers"
- docker container ls
# The following line could be enabled to verify that the rest server is responding.
#- echo "Check REST API available (via Docker)"
#- curl http://localhost:8080/server/
script:
- yarn run ci
- cat coverage/dspace-angular-cli/lcov.info | ./node_modules/coveralls/bin/coveralls.js
after_script:
# Shutdown docker after everything runs
- docker-compose -f ./docker/docker-compose-travis.yml down

View File

@@ -1,3 +1,7 @@
{
"typescript.check.workspaceVersion": false
"typescript.check.workspaceVersion": false,
"i18n-ally.localesPaths": [
"src/assets/i18n",
"src/app/core/locale"
]
}

View File

@@ -1,6 +1,6 @@
DSpace source code BSD License:
Copyright (c) 2002-2020, LYRASIS. All rights reserved.
Copyright (c) 2002-2021, LYRASIS. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are

238
README.md
View File

@@ -1,19 +1,41 @@
[![Build Status](https://travis-ci.org/DSpace/dspace-angular.svg?branch=master)](https://travis-ci.org/DSpace/dspace-angular) [![Coverage Status](https://coveralls.io/repos/github/DSpace/dspace-angular/badge.svg?branch=master)](https://coveralls.io/github/DSpace/dspace-angular?branch=master) [![Universal Angular](https://img.shields.io/badge/universal-angular2-brightgreen.svg?style=flat)](https://github.com/angular/universal)
[![Build Status](https://github.com/DSpace/dspace-angular/workflows/Build/badge.svg?branch=main)](https://github.com/DSpace/dspace-angular/actions?query=workflow%3ABuild) [![Coverage Status](https://codecov.io/gh/DSpace/dspace-angular/branch/main/graph/badge.svg)](https://codecov.io/gh/DSpace/dspace-angular) [![Universal Angular](https://img.shields.io/badge/universal-angular2-brightgreen.svg?style=flat)](https://github.com/angular/universal)
dspace-angular
==============
> The next UI for DSpace 7, based on Angular Universal.
> The DSpace User Interface built on [Angular](https://angular.io/), written in [TypeScript](https://www.typescriptlang.org/) and using [Angular Universal](https://angular.io/guide/universal).
This project is currently under active development. For more information on the DSpace 7 release see the [DSpace 7.0 Release Status wiki page](https://wiki.lyrasis.org/display/DSPACE/DSpace+Release+7.0+Status)
Overview
--------
You can find additional information on the DSpace 7 Angular UI on the [wiki](https://wiki.lyrasis.org/display/DSPACE/DSpace+7+-+Angular+UI+Development).
DSpace open source software is a turnkey repository application used by more than
2,000 organizations and institutions worldwide to provide durable access to digital resources.
For more information, visit http://www.dspace.org/
DSpace consists of both a Java-based backend and an Angular-based frontend.
* Backend (https://github.com/DSpace/DSpace/) provides a REST API, along with other machine-based interfaces (e.g. OAI-PMH, SWORD, etc)
* The REST Contract is at https://github.com/DSpace/RestContract
* Frontend (this codebase) is the User Interface built on the REST API
Downloads
---------
* Backend (REST API): https://github.com/DSpace/DSpace/releases
* Frontend (User Interface): https://github.com/DSpace/dspace-angular/releases
## Documentation / Installation
Documentation for each release may be viewed online or downloaded via our [Documentation Wiki](https://wiki.lyrasis.org/display/DSDOC/).
The latest DSpace Installation instructions are available at:
https://wiki.lyrasis.org/display/DSDOC7x/Installing+DSpace
Quick start
-----------
**Ensure you're running [Node](https://nodejs.org) `v10.x` or `v12.x`, [npm](https://www.npmjs.com/) >= `v5.x` and [yarn](https://yarnpkg.com) >= `v1.x`**
**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`**
```bash
# clone the repo
@@ -39,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)
@@ -65,7 +90,7 @@ Requirements
------------
- [Node.js](https://nodejs.org) and [yarn](https://yarnpkg.com)
- Ensure you're running node `v10.x` or `v12.x` and yarn >= `v1.x`
- Ensure you're running node `v12.x` or `v14.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.
@@ -82,9 +107,9 @@ Default configuration file is located in `src/environments/` folder.
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.
- 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 `environment.prod.ts` file in `src/environments/` for a `production` environment;
The server settings can also be overwritten using an environment file.
The server settings can also be overwritten using an environment file.
This file should be called `.env` and be placed in the project root.
@@ -103,12 +128,13 @@ DSPACE_REST_SSL # Whether the angular REST uses SSL [true/false]
```
The same settings can also be overwritten by setting system environment variables instead, E.g.:
```bash
export DSPACE_HOST=dspace7.4science.cloud
```bash
export DSPACE_HOST=api7.dspace.org
```
The priority works as follows: **environment variable** overrides **variable in `.env` file** overrides **`environment.(prod, dev or test).ts`** overrides **`environment.common.ts`**
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.
#### Using environment variables in code
To use environment variables in a UI component, use:
@@ -117,7 +143,7 @@ To use environment variables in a UI component, use:
import { environment } from '../environment.ts';
```
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`
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`
Running the app
@@ -134,17 +160,20 @@ To build the app for production and start the server run:
```bash
yarn start
```
This will run the application in an instance of the Express server, which is included.
If you only want to build for production, without starting, run:
```bash
yarn run build:prod
```
This will build the application and put the result in the `dist` folder
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`.
### Running the application with Docker
NOTE: At this time, we do not have production-ready Docker images for DSpace.
That said, we do have quick-start Docker Compose scripts for development or testing purposes.
See [Docker Runtime Options](docker/README.md)
@@ -183,34 +212,66 @@ 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, you MUST have a running backend (i.e. REST API). By default, the e2e tests look for this at http://localhost:8080/server/ or whatever `rest` backend is defined in your `environment.prod.ts` or `environment.common.ts`. You may override this using env variables, see [Configuring](#configuring).
and run: `ng e2e`
Run `ng e2e` to kick off the tests. This 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.
### Continuous Integration (CI) Test
#### Writing E2E Tests
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.
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
* 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.
* 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
@@ -233,8 +294,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)
@@ -256,96 +315,43 @@ dspace-angular
│   ├── environment.default.js * Default configuration files
│   └── environment.test.js * Test configuration files
├── 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 *
├── cypress * Folder for Cypress (https://cypress.io/) / e2e tests
│   ├── integration * Folder for e2e/integration test files
│   ├── fixtures * 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
├── karma.conf.js * Karma configuration file for Unit Test
├── 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
│   ├── 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
│   | └── en.json5 * i18n translations for English
│   │   ── images * Folder for images
│   ├── 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
│   ├── robots.txt * The robots.txt file
│   ├── 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
│   └── themes * Folder containing available themes
│      ── custom * Template folder for creating a custom theme
│      └── dspace * Default 'dspace' theme
├── tsconfig.json * TypeScript config
├── tslint.json * TSLint (https://palantir.github.io/tslint/) configuration
├── typedoc.json * TYPEDOC configuration
├── webpack * Webpack (https://webpack.github.io/) config directory
│   ├── helpers.js *
│   ├── 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 *
│   ├── webpack.browser.ts * Webpack (https://webpack.github.io/) config for client build
│   ├── webpack.common.ts *
│   ├── webpack.prod.ts * Webpack (https://webpack.github.io/) config for production build
│   ── webpack.test.ts * Webpack (https://webpack.github.io/) config for test build
└── yarn.lock * Yarn lockfile (https://yarnpkg.com/en/docs/yarn-lock)
```
@@ -403,8 +409,8 @@ Frequently asked questions
- You can write your tests next to your component files. e.g. for `src/app/home/home.component.ts` call it `src/app/home/home.component.spec.ts`
- How do I start the app when I get `EACCES` and `EADDRINUSE` errors?
- The `EADDRINUSE` error means the port `4000` is currently being used and `EACCES` is lack of permission to build files to `./dist/`
- What are the naming conventions for Angular 2?
- See [the official angular 2 style guide](https://angular.io/styleguide)
- What are the naming conventions for Angular?
- See [the official angular style guide](https://angular.io/styleguide)
- Why is the size of my app larger in development?
- The production build uses a whole host of techniques (ahead-of-time compilation, rollup to remove unreachable code, minification, etc.) to reduce the size, that aren't used during development in the intrest of build speed.
- node-pre-gyp ERR in yarn install (Windows)
@@ -415,6 +421,32 @@ Frequently asked questions
- then run `git add yarn.lock` to stage the lockfile for commit
- and `git commit` to conclude the merge
Getting Help
------------
DSpace provides public mailing lists where you can post questions or raise topics for discussion.
We welcome everyone to participate in these lists:
* [dspace-community@googlegroups.com](https://groups.google.com/d/forum/dspace-community) : General discussion about DSpace platform, announcements, sharing of best practices
* [dspace-tech@googlegroups.com](https://groups.google.com/d/forum/dspace-tech) : Technical support mailing list. See also our guide for [How to troubleshoot an error](https://wiki.lyrasis.org/display/DSPACE/Troubleshoot+an+error).
* [dspace-devel@googlegroups.com](https://groups.google.com/d/forum/dspace-devel) : Developers / Development mailing list
Great Q&A is also available under the [DSpace tag on Stackoverflow](http://stackoverflow.com/questions/tagged/dspace)
Additional support options are at https://wiki.lyrasis.org/display/DSPACE/Support
DSpace also has an active service provider network. If you'd rather hire a service provider to
install, upgrade, customize or host DSpace, then we recommend getting in touch with one of our
[Registered Service Providers](http://www.dspace.org/service-providers).
Issue Tracker
-------------
DSpace uses GitHub to track issues:
* Backend (REST API) issues: https://github.com/DSpace/DSpace/issues
* Frontend (User Interface) issues: https://github.com/DSpace/dspace-angular/issues
License
-------
This project's source code is made available under the DSpace BSD License: http://www.dspace.org/license

15
SECURITY.md Normal file
View File

@@ -0,0 +1,15 @@
# Security Policy
## Supported Versions
For information regarding which versions of DSpace are currently under support, please see our DSpace Software Support Policy:
https://wiki.lyrasis.org/display/DSPACE/DSpace+Software+Support+Policy
## Reporting a Vulnerability
If you believe you have found a security vulnerability in a supported version of DSpace, we encourage you to let us know right away.
We will investigate all legitimate reports and do our best to quickly fix the problem. Please see our DSpace Software Support Policy
for information on privately reporting vulnerabilities:
https://wiki.lyrasis.org/display/DSPACE/DSpace+Software+Support+Policy

View File

@@ -3,7 +3,7 @@
"version": 1,
"newProjectRoot": "projects",
"projects": {
"dspace-angular-cli": {
"dspace-angular": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
@@ -17,23 +17,52 @@
"build": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"extractCss": true,
"preserveSymlinks": true,
"customWebpackConfig": {
"path": "./webpack/webpack.common.ts",
"path": "./webpack/webpack.browser.ts",
"mergeStrategies": {
"loaders": "prepend"
},
}
},
"allowedCommonJsDependencies": [
"angular2-text-mask",
"cerialize",
"core-js",
"lodash",
"jwt-decode",
"url-parse",
"uuid",
"webfontloader",
"zone.js"
],
"outputPath": "dist/browser",
"index": "src/index.html",
"main": "src/main.browser.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": false,
"aot": true,
"assets": [
"src/assets"
"src/assets",
"src/robots.txt"
],
"styles": [
"src/styles.scss"
"src/styles/startup.scss",
{
"input": "src/styles/base-theme.scss",
"inject": false,
"bundleName": "base-theme"
},
{
"input": "src/themes/custom/styles/theme.scss",
"inject": false,
"bundleName": "custom-theme"
},
{
"input": "src/themes/dspace/styles/theme.scss",
"inject": false,
"bundleName": "dspace-theme"
}
],
"scripts": []
},
@@ -55,8 +84,8 @@
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
"maximumWarning": "200kb",
"maximumError": "300kb"
}
]
}
@@ -65,26 +94,26 @@
"serve": {
"builder": "@angular-builders/custom-webpack:dev-server",
"options": {
"browserTarget": "dspace-angular-cli:build",
"browserTarget": "dspace-angular:build",
"port": 4000
},
"configurations": {
"production": {
"browserTarget": "dspace-angular-cli:build:production"
"browserTarget": "dspace-angular:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "dspace-angular-cli:build"
"browserTarget": "dspace-angular:build"
}
},
"test": {
"builder": "@angular-builders/custom-webpack:karma",
"options": {
"customWebpackConfig": {
"path": "./webpack/webpack.common.ts",
"path": "./webpack/webpack.test.ts",
"mergeStrategies": {
"loaders": "prepend"
}
@@ -93,11 +122,21 @@
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"sourceMap": {
"scripts": false,
"styles": false,
"hidden": false,
"vendor": false
},
"assets": [
"src/assets"
],
"styles": [
"src/styles.scss"
{
"input": "src/styles/base-theme.scss",
"inject": false,
"bundleName": "base-theme"
}
],
"scripts": []
}
@@ -108,7 +147,7 @@
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
"cypress/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
@@ -116,14 +155,15 @@
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"builder": "@cypress/schematic:cypress",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "dspace-angular-cli:serve"
"devServerTarget": "dspace-angular:serve",
"watch": true,
"headless": false
},
"configurations": {
"production": {
"devServerTarget": "dspace-angular-cli:serve:production"
"devServerTarget": "dspace-angular:serve:production"
}
}
},
@@ -149,9 +189,54 @@
}
}
}
},
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server",
"options": {
"browserTarget": "dspace-angular:build",
"serverTarget": "dspace-angular:server",
"port": 4000
},
"configurations": {
"production": {
"browserTarget": "dspace-angular:build:production",
"serverTarget": "dspace-angular:server:production"
}
}
},
"prerender": {
"builder": "@nguniversal/builders:prerender",
"options": {
"browserTarget": "dspace-angular:build:production",
"serverTarget": "dspace-angular:server:production",
"routes": [
"/"
]
},
"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
}
}
}
}
},
"defaultProject": "dspace-angular-cli"
}
"defaultProject": "dspace-angular"
}

9
cypress.json Normal file
View File

@@ -0,0 +1,9 @@
{
"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"
}

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('ds-search-form input[name="query"]').type(queryString);
cy.get('ds-search-form button.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,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,49 @@
const page = {
fillOutQueryInNavBar(query) {
// Click the magnifying glass
cy.get('.navbar-container #search-navbar-container form a').click();
// Fill out a query in input that appears
cy.get('.navbar-container #search-navbar-container form input[name = "query"]').type(query);
},
submitQueryByPressingEnter() {
cy.get('.navbar-container #search-navbar-container form input[name = "query"]').type('{enter}');
},
submitQueryByPressingIcon() {
cy.get('.navbar-container #search-navbar-container form .submit-icon').click();
}
};
describe('Search from Navigation Bar', () => {
// NOTE: these tests currently assume this query will return results!
const query = 'test';
it('should go to search page with correct query if submitted (from home)', () => {
cy.visit('/');
page.fillOutQueryInNavBar(query);
page.submitQueryByPressingEnter();
// New URL should include query param
cy.url().should('include', 'query=' + query);
// At least one search result should be displayed
cy.get('ds-item-search-result-list-element').should('be.visible');
});
it('should go to search page with correct query if submitted (from search)', () => {
cy.visit('/search');
page.fillOutQueryInNavBar(query);
page.submitQueryByPressingEnter();
// New URL should include query param
cy.url().should('include', 'query=' + query);
// At least one search result should be displayed
cy.get('ds-item-search-result-list-element').should('be.visible');
});
it('should allow user to also submit query by clicking icon', () => {
cy.visit('/');
page.fillOutQueryInNavBar(query);
page.submitQueryByPressingIcon();
// New URL should include query param
cy.url().should('include', 'query=' + query);
// At least one search result should be displayed
cy.get('ds-item-search-result-list-element').should('be.visible');
});
});

View File

@@ -0,0 +1,72 @@
import { Options } from 'cypress-axe';
import { testA11y } from 'cypress/support/utils';
describe('Search Page', () => {
// unique ID of the search form (for selecting specific elements below)
const SEARCHFORM_ID = '#search-form';
it('should contain query value when navigating to page with query parameter', () => {
const queryString = 'test query';
cy.visit('/search?query=' + queryString);
cy.get(SEARCHFORM_ID + ' input[name="query"]').should('have.value', queryString);
});
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(SEARCHFORM_ID + ' input[name="query"]').type(queryString);
cy.get(SEARCHFORM_ID + ' button.search-button').click();
cy.url().should('include', 'query=' + encodeURI(queryString));
});
it('should pass accessibility tests', () => {
cy.visit('/search');
// <ds-search-page> tag must be loaded
cy.get('ds-search-page').should('exist');
// 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-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 pass accessibility tests in Grid view', () => {
cy.visit('/search');
// Click to display grid view
// TODO: These buttons should likely have an easier way to uniquely select
cy.get('#search-sidebar-content > ds-view-mode-switch > .btn-group > [href="/search?spc.sf=score&spc.sd=DESC&view=grid"] > .fas').click();
// <ds-search-page> tag must be loaded
cy.get('ds-search-page').should('exist');
// 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
);
});
});

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

@@ -0,0 +1,16 @@
// 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) => {
// 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
on('task', {
log(message: string) {
console.log(message);
return null;
},
table(message: string) {
console.table(message);
return null;
}
});
};

View File

@@ -0,0 +1,43 @@
// ***********************************************
// This example namespace declaration will help
// with Intellisense and code completion in your
// IDE or Text Editor.
// ***********************************************
// declare namespace Cypress {
// interface Chainable<Subject = any> {
// customCommand(param: any): typeof customCommand;
// }
// }
//
// function customCommand(param: any): void {
// console.warn(param);
// }
//
// NOTE: You can use it like so:
// Cypress.Commands.add('customCommand', customCommand);
//
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add("login", (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })

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

@@ -0,0 +1,26 @@
// ***********************************************************
// 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
// ***********************************************************
// When a command from ./commands is ready to use, import with `import './commands'` syntax
// import './commands';
// Import Cypress Axe tools for all tests
// https://github.com/component-driven/cypress-axe
import 'cypress-axe';
// Global constants used in tests
export const TEST_COLLECTION = '282164f5-d325-4740-8dd1-fa4d6d3e7200';
export const TEST_COMMUNITY = '0958c910-2037-42a9-81c7-dca80e3892b4';
export const TEST_ENTITY_PUBLICATION = 'e98b0f27-5c19-49a0-960d-eb6ad5287067';

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,11 +1,15 @@
# 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-travis.yml
- 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.

View File

@@ -1,3 +1,17 @@
#
# 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 is a copy of the cli.ingest.yml that is available in the DSpace/DSpace
# (Backend) at:
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/cli.assetstore.yml
#
# Therefore, it should be kept in sync with that file
version: "3.7"
networks:
@@ -8,7 +22,8 @@ services:
networks:
dspacenet: {}
environment:
- LOADASSETS=https://www.dropbox.com/s/zv7lj8j2lp3egjs/assetstore.tar.gz?dl=1
# This assetstore zip is available from https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data
- LOADASSETS=https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/assetstore.tar.gz
entrypoint:
- /bin/bash
- '-c'
@@ -21,3 +36,5 @@ services:
fi
/dspace/bin/dspace index-discovery
/dspace/bin/dspace oai import
/dspace/bin/dspace oai clean-cache

View File

@@ -6,12 +6,18 @@
# http://www.dspace.org/license/
#
#
# This is a copy of the cli.ingest.yml that is available in the DSpace/DSpace
# (Backend) at:
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/cli.ingest.yml
#
# Therefore, it should be kept in sync with that file
version: "3.7"
services:
dspace-cli:
environment:
- AIPZIP=https://github.com/DSpace-Labs/AIP-Files/raw/master/dogAndReport.zip
- AIPZIP=https://github.com/DSpace-Labs/AIP-Files/raw/main/dogAndReport.zip
- ADMIN_EMAIL=test@test.edu
- AIPDIR=/tmp/aip-dir
entrypoint:

View File

@@ -1,3 +1,17 @@
#
# 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 is a copy of the docker-compose-cli.yml that is available in the DSpace/DSpace
# (Backend) at:
# https://github.com/DSpace/DSpace/blob/main/docker-compose-cli.yml
#
# Therefore, it should be kept in sync with that file
version: "3.7"
services:

View File

@@ -6,11 +6,46 @@
# http://www.dspace.org/license/
#
#
# This is a copy of the db.entities.yml that is available in the DSpace/DSpace
# (Backend) at:
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/db.entities.yml
#
# # Therefore, it should be kept in sync with that file
version: "3.7"
services:
dspacedb:
image: dspace/dspace-postgres-pgcrypto:loadsql
environment:
# Double underbars in env names will be replaced with periods for apache commons
- LOADSQL=https://www.dropbox.com/s/xh3ack0vg0922p2/configurable-entities-2019-05-08.sql?dl=1
# 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
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
# 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
# 4. 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
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"/> \
<name-map collection-handle="123456789/5" submission-name="Publication"/> \
<name-map collection-handle="123456789/8" submission-name="OrgUnit"/> \
<name-map collection-handle="123456789/6" submission-name="Person"/> \
<name-map collection-handle="123456789/279" submission-name="Person"/> \
<name-map collection-handle="123456789/7" submission-name="Project"/> \
<name-map collection-handle="123456789/280" submission-name="Project"/> \
<name-map collection-handle="123456789/28" submission-name="Journal"/> \
<name-map collection-handle="123456789/29" submission-name="JournalVolume"/> \
<name-map collection-handle="123456789/30" submission-name="JournalIssue"/>' /dspace/config/item-submission.xml
catalina.sh run

View File

@@ -0,0 +1,101 @@
#
# 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/
#
# Docker Compose for running the DSpace backend for e2e testing in a CI environment
# This is used by our GitHub CI at .github/workflows/build.yml
# It is based heavily on the Backend's Docker Compose:
# https://github.com/DSpace/DSpace/blob/main/docker-compose.yml
version: '3.7'
networks:
dspacenet:
services:
# DSpace (backend) webapp container
dspace:
container_name: dspace
depends_on:
- dspacedb
image: dspace/dspace:dspace-7_x-test
networks:
dspacenet:
ports:
- published: 8080
target: 8080
stdin_open: true
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
# 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
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
dspacedb:
container_name: dspacedb
environment:
# This LOADSQL should be kept in sync with the LOADSQL in
# https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/db.entities.yml
# This SQL is available from https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data
LOADSQL: https://github.com/DSpace-Labs/AIP-Files/releases/download/demo-entities-data/dspace7-entities-2021-04-14.sql
PGDATA: /pgdata
image: dspace/dspace-postgres-pgcrypto:loadsql
networks:
dspacenet:
stdin_open: true
tty: true
volumes:
- pgdata:/pgdata
# DSpace Solr container
dspacesolr:
container_name: dspacesolr
# Uses official Solr image at https://hub.docker.com/_/solr/
image: solr:8.8
# Needs main 'dspace' container to start first to guarantee access to solr_configs
depends_on:
- dspace
networks:
dspacenet:
ports:
- published: 8983
target: 8983
stdin_open: true
tty: true
working_dir: /var/solr/data
volumes:
# Mount our "solr_configs" volume available under the Solr's configsets folder (in a 'dspace' subfolder)
# This copies the Solr configs from main 'dspace' container into 'dspacesolr' via that volume
- solr_configs:/opt/solr/server/solr/configsets/dspace
# Keep Solr data directory between reboots
- solr_data:/var/solr/data
# Initialize all DSpace Solr cores using the mounted configsets (see above), then start Solr
entrypoint:
- /bin/bash
- '-c'
- |
init-var-solr
precreate-core authority /opt/solr/server/solr/configsets/dspace/authority
precreate-core oai /opt/solr/server/solr/configsets/dspace/oai
precreate-core search /opt/solr/server/solr/configsets/dspace/search
precreate-core statistics /opt/solr/server/solr/configsets/dspace/statistics
exec solr -f
volumes:
assetstore:
pgdata:
solr_data:
# Special volume used to share Solr configs from 'dspace' to 'dspacesolr' container (see above)
solr_configs:

View File

@@ -1,11 +1,25 @@
#
# 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/
#
# Docker Compose for running the DSpace backend for testing/development
# This is based heavily on the docker-compose.yml that is available in the DSpace/DSpace
# (Backend) at:
# https://github.com/DSpace/DSpace/blob/main/docker-compose.yml
version: '3.7'
networks:
dspacenet:
services:
# DSpace (backend) webapp container
dspace:
container_name: dspace
image: dspace/dspace:dspace-7_x-test
depends_on:
- dspacedb
image: dspace/dspace:dspace-7_x-test
networks:
dspacenet:
ports:
@@ -16,27 +30,42 @@ services:
volumes:
- assetstore:/dspace/assetstore
- "./local.cfg:/dspace/config/local.cfg"
# Ensure that the database is ready before starting tomcat
# 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
# 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
catalina.sh run
# DSpace database container
dspacedb:
container_name: dspacedb
image: dspace/dspace-postgres-pgcrypto
environment:
PGDATA: /pgdata
image: dspace/dspace-postgres-pgcrypto
networks:
dspacenet:
ports:
- published: 5432
target: 5432
stdin_open: true
tty: true
volumes:
- pgdata:/pgdata
# DSpace Solr container
dspacesolr:
container_name: dspacesolr
image: dspace/dspace-solr
# Uses official Solr image at https://hub.docker.com/_/solr/
image: solr:8.8
# Needs main 'dspace' container to start first to guarantee access to solr_configs
depends_on:
- dspace
networks:
dspacenet:
ports:
@@ -44,16 +73,27 @@ services:
target: 8983
stdin_open: true
tty: true
working_dir: /var/solr/data
volumes:
- solr_authority:/opt/solr/server/solr/authority/data
- solr_oai:/opt/solr/server/solr/oai/data
- solr_search:/opt/solr/server/solr/search/data
- solr_statistics:/opt/solr/server/solr/statistics/data
version: '3.7'
# Mount our "solr_configs" volume available under the Solr's configsets folder (in a 'dspace' subfolder)
# This copies the Solr configs from main 'dspace' container into 'dspacesolr' via that volume
- solr_configs:/opt/solr/server/solr/configsets/dspace
# Keep Solr data directory between reboots
- solr_data:/var/solr/data
# Initialize all DSpace Solr cores using the mounted local configsets (see above), then start Solr
entrypoint:
- /bin/bash
- '-c'
- |
init-var-solr
precreate-core authority /opt/solr/server/solr/configsets/dspace/authority
precreate-core oai /opt/solr/server/solr/configsets/dspace/oai
precreate-core search /opt/solr/server/solr/configsets/dspace/search
precreate-core statistics /opt/solr/server/solr/configsets/dspace/statistics
exec solr -f
volumes:
assetstore:
pgdata:
solr_authority:
solr_oai:
solr_search:
solr_statistics:
solr_data:
# Special volume used to share Solr configs from 'dspace' to 'dspacesolr' container (see above)
solr_configs:

View File

@@ -1,53 +0,0 @@
networks:
dspacenet:
services:
dspace:
container_name: dspace
depends_on:
- dspacedb
image: dspace/dspace:dspace-7_x-test
networks:
dspacenet:
ports:
- published: 8080
target: 8080
stdin_open: true
tty: true
volumes:
- assetstore:/dspace/assetstore
- "./local.cfg:/dspace/config/local.cfg"
dspacedb:
container_name: dspacedb
environment:
LOADSQL: https://www.dropbox.com/s/xh3ack0vg0922p2/configurable-entities-2019-05-08.sql?dl=1
PGDATA: /pgdata
image: dspace/dspace-postgres-pgcrypto:loadsql
networks:
dspacenet:
stdin_open: true
tty: true
volumes:
- pgdata:/pgdata
dspacesolr:
container_name: dspacesolr
image: dspace/dspace-solr
networks:
dspacenet:
ports:
- published: 8983
target: 8983
stdin_open: true
tty: true
volumes:
- solr_authority:/opt/solr/server/solr/authority/data
- solr_oai:/opt/solr/server/solr/oai/data
- solr_search:/opt/solr/server/solr/search/data
- solr_statistics:/opt/solr/server/solr/statistics/data
version: '3.7'
volumes:
assetstore:
pgdata:
solr_authority:
solr_oai:
solr_search:
solr_statistics:

View File

@@ -1,3 +1,14 @@
#
# 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/
#
# Docker Compose for running the DSpace Angular UI for testing/development
# Requires also running a REST API backend (either locally or remotely),
# for example via 'docker-compose-rest.yml'
version: '3.7'
networks:
dspacenet:

View File

@@ -13,6 +13,6 @@ export const environment = {
host: 'localhost',
port: 8080,
// NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: '/server/api'
nameSpace: '/server'
}
};

View File

@@ -39,10 +39,10 @@ export const environment = {
// The REST API server settings.
rest: {
ssl: true,
host: 'dspace7.4science.cloud',
host: 'api7.dspace.org',
port: 443,
// NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: '/server/api'
nameSpace: '/server'
}
};
```
@@ -50,9 +50,9 @@ export const environment = {
Alternately you can set the following environment variables. If any of these are set, it will override all configuration files:
```
DSPACE_REST_SSL=true
DSPACE_REST_HOST=dspace7.4science.cloud
DSPACE_REST_HOST=api7.dspace.org
DSPACE_REST_PORT=443
DSPACE_REST_NAMESPACE=/server/api
DSPACE_REST_NAMESPACE=/server
```
## Supporting analytics services other than Google Analytics
@@ -63,3 +63,4 @@ Angulartics can be configured to work with a number of other services besides Go
In order to start using one of these services, select it from the [Angulartics Providers page](https://angulartics.github.io/angulartics2/#providers), and follow the instructions on how to configure it.
The Google Analytics script was added in [`main.browser.ts`](https://github.com/DSpace/dspace-angular/blob/ff04760f4af91ac3e7add5e7424a46cb2439e874/src/main.browser.ts#L33) instead of the `<head>` tag in `index.html` to ensure events get sent when the page is shown in a client's browser, and not when it's rendered on the universal server. Likely you'll want to do the same when adding a new service.

View File

@@ -1,10 +0,0 @@
const config = require('./protractor.conf').config;
config.capabilities = {
browserName: 'chrome',
chromeOptions: {
args: ['--headless', '--no-sandbox', '--disable-gpu']
}
};
exports.config = config;

View File

@@ -1,92 +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: true
}
}));
}
};

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,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('#search-navbar-container form input')).getAttribute('value');
}
expandAndFocusSearchBox() {
element(by.css('#search-navbar-container form a')).click();
}
setCurrentQuery(query: string) {
element(by.css('#search-navbar-container form input[name="query"]')).sendKeys(query);
}
submitNavbarSearchForm() {
element(by.css('#search-navbar-container form .submit-icon')).click();
}
submitByPressingEnter() {
element(by.css('#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": "es5",
"typeRoots": [
"../node_modules/@types"
]
}
}

View File

@@ -14,10 +14,11 @@ module.exports = function (config) {
require('karma-mocha-reporter'),
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
clearContext: false, // leave Jasmine Spec Runner output visible in browser
captureConsole: false
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage/dspace-angular-cli'),
dir: require('path').join(__dirname, './coverage/dspace-angular'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},

View File

@@ -1,5 +1,5 @@
{
"name": "dspace-angular-cli",
"name": "dspace-angular",
"version": "0.0.0",
"scripts": {
"ng": "ng",
@@ -8,6 +8,7 @@
"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",
"config:check:rest": "yarn run config:prod && ts-node --project ./tsconfig.ts-node.json scripts/test-rest.ts",
"prestart:dev": "yarn run config:dev",
"prebuild": "yarn run config:dev",
"pretest": "yarn run config:test",
@@ -15,24 +16,25 @@
"pretest:headless": "yarn run config:test",
"prebuild:prod": "yarn run config:prod",
"pree2e": "yarn run config:prod",
"pree2e:ci": "yarn run config:prod",
"start": "yarn run start:prod",
"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",
"start:mirador:prod": "yarn run build:mirador && yarn run start:prod",
"analyze": "webpack-bundle-analyzer dist/browser/stats.json",
"build": "ng build",
"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": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng build --prod && ng run dspace-angular-cli:server:production --bundleDependencies all",
"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": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng test --sourceMap=true --watch=true",
"test:headless": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng test --watch=false --sourceMap=true --browsers=ChromeHeadless --code-coverage",
"test": "ng test --sourceMap=true --watch=true",
"test:headless": "ng test --watch=false --sourceMap=true --browsers=ChromeHeadless --code-coverage",
"lint": "ng lint",
"lint-fix": "ng lint --fix=true",
"e2e": "ng e2e",
"e2e:ci": "ng e2e --protractor-config=./e2e/protractor-ci.conf.js",
"compile:server": "webpack --config webpack.server.config.js --progress --colors",
"compile:server": "webpack --config webpack.server.config.js --progress --color",
"serve:ssr": "node dist/server",
"ci": "ng lint && yarn run build:prod && yarn test:headless && yarn run e2e:ci",
"clean:coverage": "rimraf coverage",
"clean:dist": "rimraf dist",
"clean:doc": "rimraf doc",
@@ -41,9 +43,14 @@
"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:node && yarn run clean:env",
"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"
"sync-i18n": "yarn run config:dev && ts-node --project ./tsconfig.ts-node.json scripts/sync-i18n-files.ts",
"build:mirador": "webpack --config webpack/webpack.mirador.config.ts",
"merge-i18n": "yarn run config:dev && ts-node --project ./tsconfig.ts-node.json scripts/merge-i18n-files.ts",
"postinstall": "ngcc",
"cypress:open": "cypress open",
"cypress:run": "cypress run"
},
"browser": {
"fs": false,
@@ -53,131 +60,145 @@
},
"private": true,
"resolutions": {
"minimist": "^1.2.5"
"minimist": "^1.2.5",
"webdriver-manager": "^12.1.8"
},
"dependencies": {
"@angular/animations": "~8.2.14",
"@angular/cdk": "8.2.3",
"@angular/common": "~8.2.14",
"@angular/compiler": "~8.2.14",
"@angular/core": "~8.2.14",
"@angular/forms": "~8.2.14",
"@angular/platform-browser": "~8.2.14",
"@angular/platform-browser-dynamic": "~8.2.14",
"@angular/platform-server": "~8.2.14",
"@angular/router": "~8.2.14",
"@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": "5.2.1",
"@ng-dynamic-forms/core": "8.1.1",
"@ng-dynamic-forms/ui-ng-bootstrap": "8.1.1",
"@ngrx/effects": "^8.6.0",
"@ngrx/router-store": "^8.6.0",
"@ngrx/store": "^8.6.0",
"@nguniversal/express-engine": "8.2.6",
"@nguniversal/module-map-ngfactory-loader": "v8.2.6",
"@ngx-translate/core": "11.0.1",
"@nicky-lenaers/ngx-scroll-to": "^3.0.1",
"@kolkov/ngx-gallery": "^1.2.3",
"@ng-bootstrap/ng-bootstrap": "7.0.0",
"@ng-dynamic-forms/core": "^12.0.0",
"@ng-dynamic-forms/ui-ng-bootstrap": "^12.0.0",
"@ngrx/effects": "^10.0.1",
"@ngrx/router-store": "^10.0.1",
"@ngrx/store": "^10.0.1",
"@nguniversal/express-engine": "10.1.0",
"@ngx-translate/core": "^13.0.0",
"@nicky-lenaers/ngx-scroll-to": "^9.0.0",
"angular-idle-preload": "3.0.0",
"angular2-text-mask": "9.0.0",
"angulartics2": "7.5.2",
"angulartics2": "^10.0.0",
"bootstrap": "4.3.1",
"caniuse-lite": "^1.0.30000697",
"caniuse-lite": "^1.0.30001165",
"cerialize": "0.1.18",
"cli-progress": "^3.8.0",
"cookie-parser": "1.4.3",
"core-js": "^3.6.4",
"cookie-parser": "1.4.5",
"core-js": "^3.7.0",
"debug-loader": "^0.0.1",
"deepmerge": "^4.2.2",
"express": "4.16.2",
"fast-json-patch": "^2.0.7",
"file-saver": "^1.3.8",
"express": "^4.17.1",
"express-rate-limit": "^5.1.3",
"fast-json-patch": "^3.0.0-1",
"file-saver": "^2.0.5",
"filesize": "^6.1.0",
"font-awesome": "4.7.0",
"https": "1.0.0",
"js-cookie": "2.2.0",
"json5": "^2.1.0",
"jsonschema": "1.2.2",
"jwt-decode": "^2.2.0",
"moment": "^2.22.1",
"morgan": "^1.9.1",
"ng-mocks": "^8.1.0",
"js-cookie": "2.2.1",
"json5": "^2.1.3",
"jsonschema": "1.4.0",
"jwt-decode": "^3.1.2",
"klaro": "^0.7.10",
"mirador": "^3.0.0",
"mirador-dl-plugin": "^0.13.0",
"mirador-share-plugin": "^0.10.0",
"moment": "^2.29.1",
"morgan": "^1.10.0",
"ng-mocks": "10.5.4",
"ng2-file-upload": "1.4.0",
"ng2-nouislider": "^1.8.2",
"ngx-bootstrap": "^5.3.2",
"ngx-infinite-scroll": "6.0.1",
"ngx-moment": "^3.4.0",
"ngx-pagination": "3.0.3",
"ngx-sortablejs": "^3.1.4",
"nouislider": "^11.0.0",
"pem": "1.13.2",
"postcss-cli": "^6.0.0",
"ngx-infinite-scroll": "^10.0.1",
"ngx-moment": "^5.0.0",
"ngx-pagination": "5.0.0",
"ngx-sortablejs": "^10.0.0",
"nouislider": "^14.6.3",
"pem": "1.14.4",
"postcss-cli": "^8.3.0",
"react": "^16.14.0",
"react-dom": "^16.14.0",
"reflect-metadata": "^0.1.13",
"rxjs": "~6.4.0",
"rxjs-spy": "^7.5.1",
"sass-resources-loader": "^2.0.0",
"sortablejs": "1.7.0",
"tslib": "^1.10.0",
"rxjs": "^6.6.3",
"rxjs-spy": "^7.5.3",
"sass-resources-loader": "^2.1.1",
"sortablejs": "1.13.0",
"tslib": "^2.0.0",
"webfontloader": "1.6.28",
"zone.js": "^0.9.1"
"zone.js": "^0.10.3"
},
"devDependencies": {
"@angular-builders/custom-webpack": "8.4.1",
"@angular-devkit/build-angular": "~0.803.25",
"@angular/cli": "~8.3.25",
"@angular/compiler-cli": "~8.2.14",
"@angular/language-service": "~8.2.14",
"@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",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^5.5.0",
"@ngrx/store-devtools": "^8.6.0",
"@ngtools/webpack": "^8.3.25",
"@types/deep-freeze": "0.1.1",
"@types/express": "^4.17.0",
"@types/file-saver": "^1.3.0",
"@types/jasmine": "^3.3.9",
"@types/jasminewd2": "~2.0.3",
"@types/js-cookie": "2.1.0",
"@types/lodash": "^4.14.110",
"@types/node": "11.15.3",
"codelyzer": "^5.0.0",
"@ngrx/store-devtools": "^10.0.1",
"@ngtools/webpack": "10.2.0",
"@nguniversal/builders": "~10.1.0",
"@types/deep-freeze": "0.1.2",
"@types/express": "^4.17.9",
"@types/file-saver": "^2.0.1",
"@types/jasmine": "^3.6.2",
"@types/jasminewd2": "~2.0.8",
"@types/js-cookie": "2.2.6",
"@types/lodash": "^4.14.165",
"@types/node": "^14.14.9",
"axe-core": "^4.3.3",
"codelyzer": "^6.0.1",
"compression-webpack-plugin": "^3.0.1",
"copy-webpack-plugin": "^5.1.1",
"coveralls": "3.0.0",
"copy-webpack-plugin": "^6.4.1",
"css-loader": "3.4.0",
"cssnano": "^4.1.10",
"cypress": "8.6.0",
"cypress-axe": "^0.13.0",
"deep-freeze": "0.0.1",
"dotenv": "^8.2.0",
"fork-ts-checker-webpack-plugin": "^0.4.10",
"html-webpack-plugin": "^3.2.0",
"jasmine-core": "^3.3.0",
"jasmine-marbles": "0.3.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "^5.0.9",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"fork-ts-checker-webpack-plugin": "^6.0.3",
"html-loader": "^1.3.2",
"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",
"karma-coverage-istanbul-reporter": "~3.0.2",
"karma-jasmine": "^4.0.1",
"karma-jasmine-html-reporter": "^1.5.4",
"karma-mocha-reporter": "2.2.5",
"nodemon": "^2.0.2",
"npm-run-all": "^4.1.5",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"optimize-css-assets-webpack-plugin": "^5.0.4",
"postcss-apply": "0.11.0",
"postcss-cssnext": "3.1.0",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"postcss-preset-env": "6.7.0",
"postcss-responsive-type": "1.0.0",
"protractor": "^7.0.0",
"protractor-istanbul-plugin": "2.0.0",
"raw-loader": "0.5.1",
"rimraf": "^3.0.2",
"script-ext-html-webpack-plugin": "2.1.4",
"string-replace-loader": "^2.1.1",
"script-ext-html-webpack-plugin": "2.1.5",
"string-replace-loader": "^2.3.0",
"terser-webpack-plugin": "^2.3.1",
"ts-loader": "^5.2.0",
"ts-node": "^8.8.1",
"tslint": "~5.15.0",
"typescript": "~3.5.3",
"webpack": "^4.0.0",
"webpack-bundle-analyzer": "^3.3.2",
"webpack-cli": "^3.1.0",
"tslint": "^6.1.3",
"typescript": "~4.0.5",
"webpack": "^4.44.2",
"webpack-bundle-analyzer": "^4.4.0",
"webpack-cli": "^4.2.0",
"webpack-node-externals": "1.7.2"
}
}

View File

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

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

@@ -10,7 +10,7 @@ const targetPath = './src/environments/environment.ts';
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;
@@ -45,10 +45,10 @@ const processEnv = {
} as GlobalConfig;
import(environmentFilePath)
.then((file) => generateEnvironmentFile(merge.all([commonEnv, file.environment, processEnv])))
.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))
generateEnvironmentFile(merge(commonEnv, processEnv, mergeOptions))
});
function generateEnvironmentFile(file: GlobalConfig): void {
@@ -65,7 +65,7 @@ function generateEnvironmentFile(file: GlobalConfig): void {
}
// allow to override a few important options by environment variables
function createServerConfig(host?: string, port?: string, nameSpace?: string, ssl?: string): ServerConfig {
function createServerConfig(host?: string, port?: string, nameSpace?: string, ssl?: string): ServerConfig {
const result = {} as any;
if (hasValue(host)) {
result.host = host;

View File

@@ -1,22 +0,0 @@
const syncBuildDir = require('copyfiles');
const path = require('path');
const {
projectRoot,
theme,
themePath,
} = require('../webpack/helpers');
const projectDepth = projectRoot('./').split(path.sep).length;
let callback;
if (theme !== null && theme !== undefined) {
callback = () => {
syncBuildDir([path.join(themePath, '**/*'), 'build'], { up: projectDepth + 2 }, () => {})
}
}
else {
callback = () => {};
}
syncBuildDir([projectRoot('src/**/*'), 'build'], { up: projectDepth + 1 }, callback);

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

@@ -0,0 +1,66 @@
import * as http from 'http';
import * as https from 'https';
import { environment } from '../src/environments/environment';
/**
* Script to test the connection with the configured REST API (in the 'rest' settings of your environment.*.ts)
*
* This script is useful to test for any Node.js connection issues with your REST API.
*
* Usage (see package.json): yarn test:rest-api
*/
// Get root URL of configured REST API
const restUrl = environment.rest.baseUrl + '/api';
console.log(`...Testing connection to REST API at ${restUrl}...\n`);
// If SSL enabled, test via HTTPS, else via HTTP
if (environment.rest.ssl) {
const req = https.request(restUrl, (res) => {
console.log(`RESPONSE: ${res.statusCode} ${res.statusMessage} \n`);
res.on('data', (data) => {
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`);
res.on('data', (data) => {
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 === environment.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}`);
}
}

289
server.ts
View File

@@ -26,85 +26,165 @@ import * as morgan from 'morgan';
import * as express from 'express';
import * as bodyParser from 'body-parser';
import * as compression from 'compression';
import * as cookieParser from 'cookie-parser';
import { join } from 'path';
import { enableProdMode, NgModuleFactory, Type } from '@angular/core';
import { enableProdMode } from '@angular/core';
import { existsSync } from 'fs';
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 { UIServerConfig } from './src/config/ui-server-config.interface';
/*
* 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 { ServerAppModuleNgFactory, LAZY_MODULE_MAP, ngExpressEngine, provideModuleMap } = require('./dist/server/main');
const { ServerAppModule, ngExpressEngine } = require('./dist/server/main');
/*
* Create a new express application
*/
const app = express();
const cookieParser = require('cookie-parser');
/*
* 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)
*/
if (environment.production) {
enableProdMode();
app.use(compression());
// The Express app is exported so that it can be used by serverless Functions.
export function app() {
/*
* Create a new express application
*/
const server = express();
/*
* 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)
*/
if (environment.production) {
enableProdMode();
server.use(compression());
}
/*
* Enable request logging
* See [morgan](https://github.com/expressjs/morgan)
*/
server.use(morgan('dev'));
/*
* Add cookie parser middleware
* See [morgan](https://github.com/expressjs/cookie-parser)
*/
server.use(cookieParser());
/*
* Add parser for request bodies
* See [morgan](https://github.com/expressjs/body-parser)
*/
server.use(bodyParser.json());
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
server.engine('html', (_, options, callback) =>
ngExpressEngine({
bootstrap: ServerAppModule,
providers: [
{
provide: REQUEST,
useValue: (options as any).req,
},
{
provide: RESPONSE,
useValue: (options as any).req.res,
},
],
})(_, (options as any), callback)
);
/*
* Register the view engines for html and ejs
*/
server.set('view engine', 'html');
/*
* Set views folder path to directory where template files are stored
*/
server.set('views', DIST_FOLDER);
/**
* Proxy the sitemaps
*/
server.use('/sitemap**', createProxyMiddleware({ target: `${environment.rest.baseUrl}/sitemaps`, changeOrigin: true }));
/**
* Checks if the rateLimiter property is present
* When it is present, the rateLimiter will be enabled. When it is undefined, the rateLimiter will be disabled.
*/
if (hasValue((environment.ui as UIServerConfig).rateLimiter)) {
const RateLimit = require('express-rate-limit');
const limiter = new RateLimit({
windowMs: (environment.ui as UIServerConfig).rateLimiter.windowMs,
max: (environment.ui as UIServerConfig).rateLimiter.max
});
server.use(limiter);
}
/*
* Serve static resources (images, i18n messages, …)
*/
server.get('*.*', cacheControl, express.static(DIST_FOLDER, { index: false }));
/*
* Fallthrough to the IIIF viewer (must be included in the build).
*/
server.use('/iiif', express.static(IIIF_VIEWER, {index:false}));
// Register the ngApp callback function to handle incoming requests
server.get('*', ngApp);
return server;
}
/*
* Enable request logging
* See [morgan](https://github.com/expressjs/morgan)
* The callback function to serve server side angular
*/
app.use(morgan('dev'));
/*
* Add cookie parser middleware
* See [morgan](https://github.com/expressjs/cookie-parser)
*/
app.use(cookieParser());
/*
* Add parser for request bodies
* See [morgan](https://github.com/expressjs/body-parser)
*/
app.use(bodyParser.json());
/*
* Render html pages by running angular server side
*/
app.engine('html', (_, options, callback) =>
ngExpressEngine({
bootstrap: ServerAppModuleNgFactory,
providers: [
{
provide: REQUEST,
useValue: (options as any).req,
},
{
provide: RESPONSE,
useValue: (options as any).req.res,
},
provideModuleMap(LAZY_MODULE_MAP)
],
})(_, (options as any), callback)
);
/*
* Register the view engines for html and ejs
*/
app.set('view engine', 'ejs');
app.set('view engine', 'html');
/*
* Set views folder path to directory where template files are stored
*/
app.set('views', DIST_FOLDER);
function ngApp(req, res) {
if (environment.universal.preboot) {
res.render(indexHtml, {
req,
res,
preboot: environment.universal.preboot,
async: environment.universal.async,
time: environment.universal.time,
baseUrl: environment.ui.nameSpace,
originUrl: environment.ui.baseUrl,
requestUrl: req.originalUrl,
providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }]
}, (err, data) => {
if (hasNoValue(err) && hasValue(data)) {
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
// sent. These errors occur for various reasons in universal, not all of which are in our
// control to solve.
console.warn('Warning [ERR_HTTP_HEADERS_SENT]: Tried to set headers after they were sent to the client');
} else {
console.warn('Error in SSR, serving for direct CSR.');
if (hasValue(err)) {
console.warn('Error details : ', err);
}
res.sendFile(DIST_FOLDER + '/index.html');
}
});
} else {
// If preboot is disabled, just serve the client
console.log('Universal off, serving for direct CSR');
res.sendFile(DIST_FOLDER + '/index.html');
}
}
/*
* Adds a cache control header to the response
@@ -116,71 +196,6 @@ function cacheControl(req, res, next) {
next();
}
/*
* Serve static resources (images, i18n messages, …)
*/
app.get('*.*', cacheControl, express.static(DIST_FOLDER, { index: false }));
/*
* The callback function to serve server side angular
*/
function ngApp(req, res) {
// Object to be set to window.dspace when CSR is used
// this allows us to pass the info in the original request
// to the dspace7-angular instance running in the client's browser
const dspace = {
originalRequest: {
headers: req.headers,
body: req.body,
method: req.method,
params: req.params,
reportProgress: req.reportProgress,
withCredentials: req.withCredentials,
responseType: req.responseType,
urlWithParams: req.urlWithParams
}
};
// callback function for the case when SSR throws an error.
function onHandleError(parentZoneDelegate, currentZone, targetZone, error) {
if (!res._headerSent) {
console.warn('Error in SSR, serving for direct CSR. Error details : ', error);
res.sendFile('index.csr.ejs', {
root: DIST_FOLDER,
scripts: `<script>window.dspace = ${JSON.stringify(dspace)}</script>`
});
}
}
if (environment.universal.preboot) {
// If preboot is enabled, create a new zone for SSR, and
// register the error handler for when it throws an error
Zone.current.fork({ name: 'CSR fallback', onHandleError }).run(() => {
res.render(DIST_FOLDER + '/index.html', {
req,
res,
preboot: environment.universal.preboot,
async: environment.universal.async,
time: environment.universal.time,
baseUrl: environment.ui.nameSpace,
originUrl: environment.ui.baseUrl,
requestUrl: req.originalUrl
});
});
} else {
// If preboot is disabled, just serve the client side ejs template and pass it the required
// variables
console.log('Universal off, serving for direct CSR');
res.render('index-csr.ejs', {
root: DIST_FOLDER,
scripts: `<script>window.dspace = ${JSON.stringify(dspace)}</script>`
});
}
}
// Register the ngApp callback function to handle incoming requests
app.get('*', ngApp);
/*
* Callback function for when the server has started
*/
@@ -201,6 +216,17 @@ function createHttpsServer(keys) {
});
}
function run() {
const port = environment.ui.port || 4000;
const host = environment.ui.host || '/';
// Start up the Node server
const server = app();
server.listen(port, host, () => {
serverStarted();
});
}
/*
* If SSL is enabled
* - Read credentials from configuration files
@@ -229,8 +255,9 @@ if (environment.ui.ssl) {
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';
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; // lgtm[js/disabling-certificate-validation]
pem.createCertificate({
days: 1,
@@ -240,7 +267,7 @@ if (environment.ui.ssl) {
});
}
} else {
app.listen(environment.ui.port, environment.ui.host, () => {
serverStarted();
});
run();
}
export * from './src/main.server';

View File

@@ -1,38 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { EPeopleRegistryComponent } from './epeople-registry/epeople-registry.component';
import { GroupFormComponent } from './group-registry/group-form/group-form.component';
import { GroupsRegistryComponent } from './group-registry/groups-registry.component';
import { URLCombiner } from '../../core/url-combiner/url-combiner';
import { getAccessControlModulePath } from '../admin-routing.module';
export const GROUP_EDIT_PATH = 'groups';
export function getGroupEditPath(id: string) {
return new URLCombiner(getAccessControlModulePath(), GROUP_EDIT_PATH, id).toString();
}
@NgModule({
imports: [
RouterModule.forChild([
{ path: 'epeople', component: EPeopleRegistryComponent, data: { title: 'admin.access-control.epeople.title' } },
{ path: GROUP_EDIT_PATH, component: GroupsRegistryComponent, data: { title: 'admin.access-control.groups.title' } },
{
path: `${GROUP_EDIT_PATH}/:groupId`,
component: GroupFormComponent,
data: {title: 'admin.registries.schema.title'}
},
{
path: `${GROUP_EDIT_PATH}/newGroup`,
component: GroupFormComponent,
data: {title: 'admin.registries.schema.title'}
},
])
]
})
/**
* Routing module for the AccessControl section of the admin sidebar
*/
export class AdminAccessControlRoutingModule {
}

View File

@@ -1,93 +0,0 @@
<div class="container">
<div class="epeople-registry row">
<div class="col-12">
<h2 id="header" class="border-bottom pb-2">{{labelPrefix + 'head' | translate}}</h2>
<ds-eperson-form *ngIf="isEPersonFormShown" (submitForm)="forceUpdateEPeople()"
(cancelForm)="isEPersonFormShown = false"></ds-eperson-form>
<div *ngIf="!isEPersonFormShown" class="button-row top d-flex pb-2">
<button class="mr-auto btn btn-success addEPerson-button"
(click)="isEPersonFormShown = true">
<i class="fas fa-plus"></i>
<span class="d-none d-sm-inline">{{labelPrefix + 'button.add' | translate}}</span>
</button>
</div>
<h3 id="search" class="border-bottom pb-2">{{labelPrefix + 'search.head' | translate}}
<button (click)="clearFormAndResetResult();"
class="btn btn-primary float-right">{{labelPrefix + 'button.see-all' | translate}}</button>
</h3>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="row">
<div class="col-12 col-sm-3">
<select name="scope" id="scope" formControlName="scope" class="form-control" aria-label="Search scope">
<option value="metadata">{{labelPrefix + 'search.scope.metadata' | translate}}</option>
<option value="email">{{labelPrefix + 'search.scope.email' | translate}}</option>
</select>
</div>
<div class="col-sm-9 col-12">
<div class="form-group input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit"
class="search-button btn btn-secondary">{{ labelPrefix + 'search.button' | translate }}</button>
</span>
</div>
</div>
</form>
<ds-pagination
*ngIf="(ePeople | async)?.payload?.totalElements > 0"
[paginationOptions]="config"
[pageInfoState]="(ePeople | async)?.payload"
[collectionSize]="(ePeople | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true"
(pageChange)="onPageChange($event)">
<div class="table-responsive">
<table id="epeople" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th scope="col">{{labelPrefix + 'table.id' | translate}}</th>
<th scope="col">{{labelPrefix + 'table.name' | translate}}</th>
<th scope="col">{{labelPrefix + 'table.email' | translate}}</th>
<th>{{labelPrefix + 'table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let eperson of (ePeople | async)?.payload?.page"
[ngClass]="{'table-primary' : isActive(eperson) | async}">
<td>{{eperson.id}}</td>
<td>{{eperson.name}}</td>
<td>{{eperson.email}}</td>
<td>
<div class="btn-group edit-field">
<button (click)="toggleEditEPerson(eperson)"
class="btn btn-outline-primary btn-sm access-control-editEPersonButton"
title="{{labelPrefix + 'table.edit.buttons.edit' | translate: {name: eperson.name} }}">
<i class="fas fa-edit fa-fw"></i>
</button>
<button (click)="deleteEPerson(eperson)"
class="btn btn-outline-danger btn-sm access-control-deleteEPersonButton"
title="{{labelPrefix + 'table.edit.buttons.remove' | translate: {name: eperson.name} }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(ePeople | async)?.payload?.totalElements == 0" class="alert alert-info w-100 mb-2" role="alert">
{{labelPrefix + 'no-items' | translate}}
</div>
</div>
</div>
</div>

View File

@@ -1,202 +0,0 @@
import { Component, OnDestroy, OnInit } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { Router } from '@angular/router';
import { TranslateService } from '@ngx-translate/core';
import { Observable } from 'rxjs';
import { Subscription } from 'rxjs/internal/Subscription';
import { map, take } from 'rxjs/operators';
import { PaginatedList } from '../../../core/data/paginated-list';
import { RemoteData } from '../../../core/data/remote-data';
import { EPersonDataService } from '../../../core/eperson/eperson-data.service';
import { EPerson } from '../../../core/eperson/models/eperson.model';
import { hasValue } from '../../../shared/empty.util';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
@Component({
selector: 'ds-epeople-registry',
templateUrl: './epeople-registry.component.html',
})
/**
* A component used for managing all existing epeople within the repository.
* The admin can create, edit or delete epeople here.
*/
export class EPeopleRegistryComponent implements OnInit, OnDestroy {
labelPrefix = 'admin.access-control.epeople.';
/**
* A list of all the current EPeople within the repository or the result of the search
*/
ePeople: Observable<RemoteData<PaginatedList<EPerson>>>;
/**
* Pagination config used to display the list of epeople
*/
config: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'epeople-list-pagination',
pageSize: 5,
currentPage: 1
});
/**
* Whether or not to show the EPerson form
*/
isEPersonFormShown: boolean;
// The search form
searchForm;
// Current search in epersons registry
currentSearchQuery: string;
currentSearchScope: string;
/**
* List of subscriptions
*/
subs: Subscription[] = [];
constructor(private epersonService: EPersonDataService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private formBuilder: FormBuilder,
private router: Router) {
this.currentSearchQuery = '';
this.currentSearchScope = 'metadata';
this.searchForm = this.formBuilder.group(({
scope: 'metadata',
query: '',
}));
}
ngOnInit() {
this.isEPersonFormShown = false;
this.search({ scope: this.currentSearchScope, query: this.currentSearchQuery });
this.subs.push(this.epersonService.getActiveEPerson().subscribe((eperson: EPerson) => {
if (eperson != null && eperson.id) {
this.isEPersonFormShown = true;
}
}));
}
/**
* Event triggered when the user changes page
* @param event
*/
onPageChange(event) {
this.config.currentPage = event;
this.search({ scope: this.currentSearchScope, query: this.currentSearchQuery })
}
/**
* Force-update the list of EPeople by first clearing the cache related to EPeople, then performing
* a new REST call
*/
public forceUpdateEPeople() {
this.epersonService.clearEPersonRequests();
this.isEPersonFormShown = false;
this.search({ query: '', scope: 'metadata' })
}
/**
* Search in the EPeople by metadata (default) or email
* @param data Contains scope and query param
*/
search(data: any) {
const query: string = data.query;
const scope: string = data.scope;
if (query != null && this.currentSearchQuery !== query) {
this.router.navigateByUrl(this.epersonService.getEPeoplePageRouterLink());
this.currentSearchQuery = query;
this.config.currentPage = 1;
}
if (scope != null && this.currentSearchScope !== scope) {
this.router.navigateByUrl(this.epersonService.getEPeoplePageRouterLink());
this.currentSearchScope = scope;
this.config.currentPage = 1;
}
this.ePeople = this.epersonService.searchByScope(this.currentSearchScope, this.currentSearchQuery, {
currentPage: this.config.currentPage,
elementsPerPage: this.config.pageSize
});
}
/**
* Checks whether the given EPerson is active (being edited)
* @param eperson
*/
isActive(eperson: EPerson): Observable<boolean> {
return this.getActiveEPerson().pipe(
map((activeEPerson) => eperson === activeEPerson)
);
}
/**
* Gets the active eperson (being edited)
*/
getActiveEPerson(): Observable<EPerson> {
return this.epersonService.getActiveEPerson();
}
/**
* Start editing the selected EPerson
* @param ePerson
*/
toggleEditEPerson(ePerson: EPerson) {
this.getActiveEPerson().pipe(take(1)).subscribe((activeEPerson: EPerson) => {
if (ePerson === activeEPerson) {
this.epersonService.cancelEditEPerson();
this.isEPersonFormShown = false;
} else {
this.epersonService.editEPerson(ePerson);
this.isEPersonFormShown = true;
}
});
this.scrollToTop()
}
/**
* Deletes EPerson, show notification on success/failure & updates EPeople list
*/
deleteEPerson(ePerson: EPerson) {
if (hasValue(ePerson.id)) {
this.epersonService.deleteEPerson(ePerson).pipe(take(1)).subscribe((success: boolean) => {
if (success) {
this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: ePerson.name }));
this.forceUpdateEPeople();
} else {
this.notificationsService.error(this.translateService.get(this.labelPrefix + 'notification.deleted.failure', { name: ePerson.name }));
}
this.epersonService.cancelEditEPerson();
this.isEPersonFormShown = false;
})
}
}
/**
* Unsub all subscriptions
*/
ngOnDestroy(): void {
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
}
scrollToTop() {
(function smoothscroll() {
const currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
if (currentScroll > 0) {
window.requestAnimationFrame(smoothscroll);
window.scrollTo(0, currentScroll - (currentScroll / 8));
}
})();
}
/**
* Reset all input-fields to be empty and search all search
*/
clearFormAndResetResult() {
this.searchForm.patchValue({
query: '',
});
this.search({ query: '' });
}
}

View File

@@ -1,272 +0,0 @@
import { HttpClient } from '@angular/common/http';
import { Store } from '@ngrx/store';
import { of as observableOf } from 'rxjs';
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { Observable } from 'rxjs/internal/Observable';
import { RemoteDataBuildService } from '../../../../core/cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../../../core/cache/object-cache.service';
import { RestResponse } from '../../../../core/cache/response.models';
import { DSOChangeAnalyzer } from '../../../../core/data/dso-change-analyzer.service';
import { PaginatedList } from '../../../../core/data/paginated-list';
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 { HALEndpointService } from '../../../../core/shared/hal-endpoint.service';
import { PageInfo } from '../../../../core/shared/page-info.model';
import { UUIDService } from '../../../../core/shared/uuid.service';
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';
import { getMockFormBuilderService } from '../../../../shared/mocks/form-builder-service.mock';
import { getMockTranslateService } from '../../../../shared/mocks/translate.service.mock';
import { NotificationsServiceStub } from '../../../../shared/testing/notifications-service.stub';
import { TranslateLoaderMock } from '../../../../shared/mocks/translate-loader.mock';
import { AuthService } from '../../../../core/auth/auth.service';
import { AuthServiceStub } from '../../../../shared/testing/auth-service.stub';
describe('EPersonFormComponent', () => {
let component: EPersonFormComponent;
let fixture: ComponentFixture<EPersonFormComponent>;
let translateService: TranslateService;
let builderService: FormBuilderService;
let mockEPeople;
let ePersonDataServiceStub: any;
let authService: AuthServiceStub;
beforeEach(async(() => {
mockEPeople = [EPersonMock, EPersonMock2];
ePersonDataServiceStub = {
activeEPerson: null,
allEpeople: mockEPeople,
getEPeople(): Observable<RemoteData<PaginatedList<EPerson>>> {
return createSuccessfulRemoteDataObject$(new PaginatedList(null, this.allEpeople));
},
getActiveEPerson(): Observable<EPerson> {
return observableOf(this.activeEPerson);
},
searchByScope(scope: string, query: string, options: FindListOptions = {}): Observable<RemoteData<PaginatedList<EPerson>>> {
if (scope === 'email') {
const result = this.allEpeople.find((ePerson: EPerson) => {
return ePerson.email === query
});
return createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [result]));
}
if (scope === 'metadata') {
if (query === '') {
return createSuccessfulRemoteDataObject$(new PaginatedList(null, this.allEpeople));
}
const result = this.allEpeople.find((ePerson: EPerson) => {
return (ePerson.name.includes(query) || ePerson.email.includes(query))
});
return createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [result]));
}
return createSuccessfulRemoteDataObject$(new PaginatedList(null, this.allEpeople));
},
deleteEPerson(ePerson: EPerson): Observable<boolean> {
this.allEpeople = this.allEpeople.filter((ePerson2: EPerson) => {
return (ePerson2.uuid !== ePerson.uuid);
});
return observableOf(true);
},
create(ePerson: EPerson) {
this.allEpeople = [...this.allEpeople, ePerson]
},
editEPerson(ePerson: EPerson) {
this.activeEPerson = ePerson;
},
cancelEditEPerson() {
this.activeEPerson = null;
},
clearEPersonRequests(): void {
// empty
},
tryToCreate(ePerson: EPerson): Observable<RestResponse> {
this.allEpeople = [...this.allEpeople, ePerson]
return observableOf(new RestResponse(true, 200, 'Success'));
},
updateEPerson(ePerson: EPerson): Observable<RestResponse> {
this.allEpeople.forEach((ePersonInList: EPerson, i: number) => {
if (ePersonInList.id === ePerson.id) {
this.allEpeople[i] = ePerson;
}
});
return observableOf(new RestResponse(true, 200, 'Success'));
}
};
builderService = getMockFormBuilderService();
translateService = getMockTranslateService();
authService = new AuthServiceStub();
TestBed.configureTestingModule({
imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock
}
}),
],
declarations: [EPeopleRegistryComponent, EPersonFormComponent],
providers: [EPersonFormComponent,
{ provide: EPersonDataService, useValue: ePersonDataServiceStub },
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
{ provide: FormBuilderService, useValue: builderService },
{ provide: DSOChangeAnalyzer, useValue: {} },
{ provide: HttpClient, useValue: {} },
{ provide: ObjectCacheService, useValue: {} },
{ provide: UUIDService, useValue: {} },
{ provide: Store, useValue: {} },
{ provide: RemoteDataBuildService, useValue: {} },
{ provide: HALEndpointService, useValue: {} },
{ provide: AuthService, useValue: authService },
EPeopleRegistryComponent
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EPersonFormComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create EPersonFormComponent', inject([EPersonFormComponent], (comp: EPersonFormComponent) => {
expect(comp).toBeDefined();
}));
describe('when submitting the form', () => {
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.firstName.value = firstName;
component.lastName.value = lastName;
component.email.value = email;
component.canLogIn.value = canLogIn;
component.requireCertificate.value = requireCertificate;
});
describe('without active EPerson', () => {
beforeEach(() => {
spyOn(ePersonDataServiceStub, 'getActiveEPerson').and.returnValue(observableOf(undefined));
component.onSubmit();
fixture.detectChanges();
});
it('should emit a new eperson using the correct values', async(() => {
fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expected);
});
}));
});
describe('with an active eperson', () => {
let expectedWithId;
beforeEach(() => {
expectedWithId = Object.assign(new EPerson(), {
metadata: {
'eperson.firstname': [
{
value: firstName
}
],
'eperson.lastname': [
{
value: lastName
},
],
},
email: email,
canLogIn: canLogIn,
requireCertificate: requireCertificate,
});
spyOn(ePersonDataServiceStub, 'getActiveEPerson').and.returnValue(observableOf(expectedWithId));
component.onSubmit();
fixture.detectChanges();
});
it('should emit the existing eperson using the correct values', async(() => {
fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId);
});
}));
});
});
describe('impersonate', () => {
let ePersonId;
beforeEach(() => {
spyOn(authService, 'impersonate').and.callThrough();
ePersonId = 'testEPersonId';
component.epersonInitial = Object.assign(new EPerson(), {
id: ePersonId
});
component.impersonate();
});
it('should call authService.impersonate', () => {
expect(authService.impersonate).toHaveBeenCalledWith(ePersonId);
});
it('should set isImpersonated to true', () => {
expect(component.isImpersonated).toBe(true);
});
});
describe('stopImpersonating', () => {
beforeEach(() => {
spyOn(authService, 'stopImpersonatingAndRefresh').and.callThrough();
component.stopImpersonating();
});
it('should call authService.stopImpersonatingAndRefresh', () => {
expect(authService.stopImpersonatingAndRefresh).toHaveBeenCalled();
});
it('should set isImpersonated to false', () => {
expect(component.isImpersonated).toBe(false);
});
});
});

View File

@@ -1,33 +0,0 @@
<div class="container">
<div class="group-form row">
<div class="col-12">
<div *ngIf="groupDataService.getActiveGroup() | async; then editheader; else createHeader"></div>
<ng-template #createHeader>
<h2 class="border-bottom pb-2">{{messagePrefix + '.head.create' | translate}}</h2>
</ng-template>
<ng-template #editheader>
<h2 class="border-bottom pb-2">{{messagePrefix + '.head.edit' | translate}}</h2>
</ng-template>
<ds-form [formId]="formId"
[formModel]="formModel"
[formGroup]="formGroup"
[formLayout]="formLayout"
(cancel)="onCancel()"
(submitForm)="onSubmit()">
</ds-form>
<ds-members-list *ngIf="groupBeingEdited != null" [messagePrefix]="messagePrefix + '.members-list'"></ds-members-list>
<ds-subgroups-list *ngIf="groupBeingEdited != null" [messagePrefix]="messagePrefix + '.subgroups-list'"></ds-subgroups-list>
<div>
<button [routerLink]="[this.groupDataService.getGroupRegistryRouterLink()]"
class="btn btn-primary">{{messagePrefix + '.return' | translate}}</button>
</div>
</div>
</div>
</div>

View File

@@ -1,153 +0,0 @@
import { CommonModule } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { ActivatedRoute, Router } from '@angular/router';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { Store } from '@ngrx/store';
import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
import { of as observableOf } from 'rxjs';
import { Observable } from 'rxjs/internal/Observable';
import { RemoteDataBuildService } from '../../../../core/cache/builders/remote-data-build.service';
import { ObjectCacheService } from '../../../../core/cache/object-cache.service';
import { RestResponse } from '../../../../core/cache/response.models';
import { DSOChangeAnalyzer } from '../../../../core/data/dso-change-analyzer.service';
import { PaginatedList } from '../../../../core/data/paginated-list';
import { RemoteData } from '../../../../core/data/remote-data';
import { EPersonDataService } from '../../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../../core/eperson/group-data.service';
import { Group } from '../../../../core/eperson/models/group.model';
import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service';
import { PageInfo } from '../../../../core/shared/page-info.model';
import { UUIDService } from '../../../../core/shared/uuid.service';
import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
import { GroupMock, GroupMock2 } from '../../../../shared/testing/group-mock';
import { GroupFormComponent } from './group-form.component';
import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils';
import { getMockFormBuilderService } from '../../../../shared/mocks/form-builder-service.mock';
import { getMockTranslateService } from '../../../../shared/mocks/translate.service.mock';
import { TranslateLoaderMock } from '../../../../shared/testing/translate-loader.mock';
import { RouterMock } from '../../../../shared/mocks/router.mock';
import { NotificationsServiceStub } from '../../../../shared/testing/notifications-service.stub';
describe('GroupFormComponent', () => {
let component: GroupFormComponent;
let fixture: ComponentFixture<GroupFormComponent>;
let translateService: TranslateService;
let builderService: FormBuilderService;
let ePersonDataServiceStub: any;
let groupsDataServiceStub: any;
let router;
let groups;
let groupName;
let groupDescription;
let expected;
beforeEach(async(() => {
groups = [GroupMock, GroupMock2]
groupName = 'testGroupName';
groupDescription = 'testDescription';
expected = Object.assign(new Group(), {
name: groupName,
metadata: {
'dc.description': [
{
value: groupDescription
}
],
},
});
ePersonDataServiceStub = {};
groupsDataServiceStub = {
allGroups: groups,
activeGroup: null,
getActiveGroup(): Observable<Group> {
return observableOf(this.activeGroup);
},
getGroupRegistryRouterLink(): string {
return '/admin/access-control/groups';
},
editGroup(group: Group) {
this.activeGroup = group
},
cancelEditGroup(): void {
this.activeGroup = null;
},
findById(id: string) {
return observableOf({ payload: null, hasSucceeded: true });
},
tryToCreate(group: Group): Observable<RestResponse> {
this.allGroups = [...this.allGroups, group]
return observableOf(new RestResponse(true, 200, 'Success'));
},
searchGroups(query: string): Observable<RemoteData<PaginatedList<Group>>> {
return createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), []))
}
};
builderService = getMockFormBuilderService();
translateService = getMockTranslateService();
router = new RouterMock();
TestBed.configureTestingModule({
imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock
}
}),
],
declarations: [GroupFormComponent],
providers: [GroupFormComponent,
{ provide: EPersonDataService, useValue: ePersonDataServiceStub },
{ provide: GroupDataService, useValue: groupsDataServiceStub },
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
{ provide: FormBuilderService, useValue: builderService },
{ provide: DSOChangeAnalyzer, useValue: {} },
{ provide: HttpClient, useValue: {} },
{ provide: ObjectCacheService, useValue: {} },
{ provide: UUIDService, useValue: {} },
{ provide: Store, useValue: {} },
{ provide: RemoteDataBuildService, useValue: {} },
{ provide: HALEndpointService, useValue: {} },
{ provide: ActivatedRoute, useValue: { data: observableOf({ dso: { payload: {} } }), params: observableOf({}) } },
{ provide: Router, useValue: router },
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(GroupFormComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create GroupFormComponent', inject([GroupFormComponent], (comp: GroupFormComponent) => {
expect(comp).toBeDefined();
}));
describe('when submitting the form', () => {
beforeEach(() => {
spyOn(component.submitForm, 'emit');
component.groupName.value = groupName;
component.groupDescription.value = groupDescription;
});
describe('without active Group', () => {
beforeEach(() => {
component.onSubmit();
fixture.detectChanges();
});
it('should emit a new group using the correct values', async(() => {
fixture.whenStable().then(() => {
expect(component.submitForm.emit).toHaveBeenCalledWith(expected);
});
}));
});
});
});

View File

@@ -1,280 +0,0 @@
import { Component, EventEmitter, HostListener, OnDestroy, OnInit, Output } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import {
DynamicFormControlModel,
DynamicFormLayout,
DynamicInputModel,
DynamicTextAreaModel
} from '@ng-dynamic-forms/core';
import { TranslateService } from '@ngx-translate/core';
import { combineLatest } from 'rxjs/internal/observable/combineLatest';
import { Subscription } from 'rxjs/internal/Subscription';
import { take } from 'rxjs/operators';
import { RestResponse } from '../../../../core/cache/response.models';
import { PaginatedList } from '../../../../core/data/paginated-list';
import { EPersonDataService } from '../../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../../core/eperson/group-data.service';
import { Group } from '../../../../core/eperson/models/group.model';
import { getRemoteDataPayload, getSucceededRemoteData } from '../../../../core/shared/operators';
import { hasValue, isNotEmpty } from '../../../../shared/empty.util';
import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service';
import { NotificationsService } from '../../../../shared/notifications/notifications.service';
@Component({
selector: 'ds-group-form',
templateUrl: './group-form.component.html'
})
/**
* A form used for creating and editing groups
*/
export class GroupFormComponent implements OnInit, OnDestroy {
messagePrefix = 'admin.access-control.groups.form';
/**
* A unique id used for ds-form
*/
formId = 'group-form';
/**
* Dynamic models for the inputs of form
*/
groupName: DynamicInputModel;
groupDescription: DynamicTextAreaModel;
/**
* A list of all dynamic input models
*/
formModel: DynamicFormControlModel[];
/**
* Layout used for structuring the form inputs
*/
formLayout: DynamicFormLayout = {
groupName: {
grid: {
host: 'row'
}
},
groupDescription: {
grid: {
host: 'row'
}
},
};
/**
* A FormGroup that combines all inputs
*/
formGroup: FormGroup;
/**
* An EventEmitter that's fired whenever the form is being submitted
*/
@Output() submitForm: EventEmitter<any> = new EventEmitter();
/**
* An EventEmitter that's fired whenever the form is cancelled
*/
@Output() cancelForm: EventEmitter<any> = new EventEmitter();
/**
* List of subscriptions
*/
subs: Subscription[] = [];
/**
* Group currently being edited
*/
groupBeingEdited: Group;
constructor(public groupDataService: GroupDataService,
private ePersonDataService: EPersonDataService,
private formBuilderService: FormBuilderService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private route: ActivatedRoute,
protected router: Router) {
}
ngOnInit() {
this.subs.push(this.route.params.subscribe((params) => {
this.setActiveGroup(params.groupId)
}));
combineLatest(
this.translateService.get(`${this.messagePrefix}.groupName`),
this.translateService.get(`${this.messagePrefix}.groupDescription`),
).subscribe(([groupName, groupDescription]) => {
this.groupName = new DynamicInputModel({
id: 'groupName',
label: groupName,
name: 'groupName',
validators: {
required: null,
},
required: true,
});
this.groupDescription = new DynamicTextAreaModel({
id: 'groupDescription',
label: groupDescription,
name: 'groupDescription',
required: false,
});
this.formModel = [
this.groupName,
this.groupDescription
];
this.formGroup = this.formBuilderService.createFormGroup(this.formModel);
this.subs.push(this.groupDataService.getActiveGroup().subscribe((activeGroup: Group) => {
if (activeGroup != null) {
this.groupBeingEdited = activeGroup;
this.formGroup.patchValue({
groupName: activeGroup != null ? activeGroup.name : '',
groupDescription: activeGroup != null ? activeGroup.firstMetadataValue('dc.description') : '',
});
if (activeGroup.permanent) {
this.formGroup.get('groupName').disable();
}
}
}));
});
}
/**
* Stop editing the currently selected group
*/
onCancel() {
this.groupDataService.cancelEditGroup();
this.cancelForm.emit();
this.router.navigate([this.groupDataService.getGroupRegistryRouterLink()]);
}
/**
* Submit the form
* When the eperson has an id attached -> Edit the eperson
* When the eperson has no id attached -> Create new eperson
* Emit the updated/created eperson using the EventEmitter submitForm
*/
onSubmit() {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe(
(group: Group) => {
const values = {
name: this.groupName.value,
metadata: {
'dc.description': [
{
value: this.groupDescription.value
}
],
},
};
if (group === null) {
this.createNewGroup(values);
} else {
this.editGroup(group, values);
}
}
);
}
/**
* Creates new Group based on given values from form
* @param values
*/
createNewGroup(values) {
const groupToCreate = Object.assign(new Group(), values);
const response = this.groupDataService.tryToCreate(groupToCreate);
response.pipe(take(1)).subscribe((restResponse: RestResponse) => {
if (restResponse.isSuccessful) {
this.notificationsService.success(this.translateService.get(this.messagePrefix + '.notification.created.success', { name: groupToCreate.name }));
this.submitForm.emit(groupToCreate);
const resp: any = restResponse;
if (isNotEmpty(resp.resourceSelfLinks)) {
const groupSelfLink = resp.resourceSelfLinks[0];
this.setActiveGroupWithLink(groupSelfLink);
this.router.navigateByUrl(this.groupDataService.getGroupEditPageRouterLinkWithID(this.groupDataService.getUUIDFromString(groupSelfLink)));
}
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.created.failure', { name: groupToCreate.name }));
this.showNotificationIfNameInUse(groupToCreate, 'created');
this.cancelForm.emit();
}
});
}
/**
* Checks for the given group if there is already a group in the system with that group name and shows error if that
* is the case
* @param group group to check
* @param notificationSection whether in create or edit
*/
private showNotificationIfNameInUse(group: Group, notificationSection: string) {
// Relevant message for group name in use
this.subs.push(this.groupDataService.searchGroups(group.name, {
currentPage: 1,
elementsPerPage: 0
}).pipe(getSucceededRemoteData(), getRemoteDataPayload())
.subscribe((list: PaginatedList<Group>) => {
if (list.totalElements > 0) {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.' + notificationSection + '.failure.groupNameInUse', {
name: group.name
}));
}
}));
}
/**
* // TODO
* @param group
* @param values
*/
editGroup(group: Group, values) {
// TODO (backend)
console.log('TODO implement editGroup', values);
this.notificationsService.error('TODO implement editGroup (not yet implemented in backend) ');
}
/**
* Start editing the selected group
* @param groupId ID of group to set as active
*/
setActiveGroup(groupId: string) {
this.groupDataService.cancelEditGroup();
this.groupDataService.findById(groupId)
.pipe(
getSucceededRemoteData(),
getRemoteDataPayload())
.subscribe((group: Group) => {
this.groupDataService.editGroup(group);
});
}
/**
* Start editing the selected group
* @param groupSelfLink SelfLink of group to set as active
*/
setActiveGroupWithLink(groupSelfLink: string) {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => {
if (activeGroup === null) {
this.groupDataService.cancelEditGroup();
this.groupDataService.findByHref(groupSelfLink)
.pipe(
getSucceededRemoteData(),
getRemoteDataPayload())
.subscribe((group: Group) => {
this.groupDataService.editGroup(group);
})
}
});
}
/**
* Cancel the current edit when component is destroyed & unsub all subscriptions
*/
@HostListener('window:beforeunload')
ngOnDestroy(): void {
this.onCancel();
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
}
}

View File

@@ -1,124 +0,0 @@
<ng-container>
<h3 class="border-bottom pb-2">{{messagePrefix + '.head' | translate}}</h3>
<h4 id="search" class="border-bottom pb-2">{{messagePrefix + '.search.head' | translate}}
<button (click)="clearFormAndResetResult();"
class="btn btn-primary float-right">{{messagePrefix + '.button.see-all' | translate}}</button>
</h4>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="row">
<div class="col-12 col-sm-3">
<select name="scope" id="scope" formControlName="scope" class="form-control" aria-label="Search scope">
<option value="metadata">{{messagePrefix + '.search.scope.metadata' | translate}}</option>
<option value="email">{{messagePrefix + '.search.scope.email' | translate}}</option>
</select>
</div>
<div class="col-sm-9 col-12">
<div class="form-group input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit"
class="search-button btn btn-secondary">{{ messagePrefix + '.search.button' | translate }}</button>
</span>
</div>
</div>
</form>
<ds-pagination *ngIf="(ePeopleSearch | async)?.payload.totalElements > 0"
[paginationOptions]="configSearch"
[pageInfoState]="(ePeopleSearch | async)?.payload"
[collectionSize]="(ePeopleSearch | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true"
(pageChange)="onPageChangeSearch($event)">
<div class="table-responsive">
<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>
</tr>
</thead>
<tbody>
<tr *ngFor="let ePerson of (ePeopleSearch | async)?.payload?.page">
<td>{{ePerson.id}}</td>
<td><a (click)="ePersonDataService.startEditingNewEPerson(ePerson)"
[routerLink]="[ePersonDataService.getEPeoplePageRouterLink()]">{{ePerson.name}}</a></td>
<td>
<div class="btn-group edit-field">
<button *ngIf="(isMemberOfGroup(ePerson) | async)"
(click)="deleteMemberFromGroup(ePerson)"
class="btn btn-outline-danger btn-sm"
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: {name: ePerson.name} }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
<button *ngIf="!(isMemberOfGroup(ePerson) | async)"
(click)="addMemberToGroup(ePerson)"
class="btn btn-outline-primary btn-sm"
title="{{messagePrefix + '.table.edit.buttons.add' | translate: {name: ePerson.name} }}">
<i class="fas fa-plus fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(ePeopleSearch | async)?.payload.totalElements == 0 && searchDone"
class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-items' | translate}}
</div>
<h4>{{messagePrefix + '.headMembers' | translate}}</h4>
<ds-pagination *ngIf="(ePeopleMembersOfGroup | async)?.payload.totalElements > 0"
[paginationOptions]="config"
[pageInfoState]="(ePeopleMembersOfGroup | async)?.payload"
[collectionSize]="(ePeopleMembersOfGroup | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true"
(pageChange)="onPageChange($event)">
<div class="table-responsive">
<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>
</tr>
</thead>
<tbody>
<tr *ngFor="let ePerson of (ePeopleMembersOfGroup | async)?.payload?.page">
<td>{{ePerson.id}}</td>
<td><a (click)="ePersonDataService.startEditingNewEPerson(ePerson)"
[routerLink]="[ePersonDataService.getEPeoplePageRouterLink()]">{{ePerson.name}}</a></td>
<td>
<div class="btn-group edit-field">
<button (click)="deleteMemberFromGroup(ePerson)"
class="btn btn-outline-danger btn-sm"
title="{{messagePrefix + '.table.edit.buttons.remove' | translate: {name: ePerson.name} }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(ePeopleMembersOfGroup | async)?.payload.totalElements == 0" class="alert alert-info w-100 mb-2"
role="alert">
{{messagePrefix + '.no-members-yet' | translate}}
</div>
</ng-container>

View File

@@ -1,247 +0,0 @@
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { Router } from '@angular/router';
import { TranslateService } from '@ngx-translate/core';
import { Observable, of as observableOf, Subscription } from 'rxjs';
import { map, mergeMap, take } from 'rxjs/operators';
import { RestResponse } from '../../../../../core/cache/response.models';
import { PaginatedList } from '../../../../../core/data/paginated-list';
import { RemoteData } from '../../../../../core/data/remote-data';
import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../../../core/eperson/group-data.service';
import { EPerson } from '../../../../../core/eperson/models/eperson.model';
import { Group } from '../../../../../core/eperson/models/group.model';
import { getRemoteDataPayload, getSucceededRemoteData } from '../../../../../core/shared/operators';
import { hasValue } from '../../../../../shared/empty.util';
import { NotificationsService } from '../../../../../shared/notifications/notifications.service';
import { PaginationComponentOptions } from '../../../../../shared/pagination/pagination-component-options.model';
@Component({
selector: 'ds-members-list',
templateUrl: './members-list.component.html'
})
/**
* The list of members in the edit group page
*/
export class MembersListComponent implements OnInit, OnDestroy {
@Input()
messagePrefix: string;
/**
* EPeople being displayed in search result, initially all members, after search result of search
*/
ePeopleSearch: Observable<RemoteData<PaginatedList<EPerson>>>;
/**
* List of EPeople members of currently active group being edited
*/
ePeopleMembersOfGroup: Observable<RemoteData<PaginatedList<EPerson>>>;
/**
* Pagination config used to display the list of EPeople that are result of EPeople search
*/
configSearch: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'search-members-list-pagination',
pageSize: 5,
currentPage: 1
});
/**
* Pagination config used to display the list of EPerson Membes of active group being edited
*/
config: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'members-list-pagination',
pageSize: 5,
currentPage: 1
});
/**
* List of subscriptions
*/
subs: Subscription[] = [];
// The search form
searchForm;
// Current search in edit group - epeople search form
currentSearchQuery: string;
currentSearchScope: string;
// Whether or not user has done a EPeople search yet
searchDone: boolean;
// current active group being edited
groupBeingEdited: Group;
constructor(private groupDataService: GroupDataService,
public ePersonDataService: EPersonDataService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private formBuilder: FormBuilder,
private router: Router) {
this.currentSearchQuery = '';
this.currentSearchScope = 'metadata';
}
ngOnInit() {
this.searchForm = this.formBuilder.group(({
scope: 'metadata',
query: '',
}));
this.subs.push(this.groupDataService.getActiveGroup().subscribe((activeGroup: Group) => {
if (activeGroup != null) {
this.groupBeingEdited = activeGroup;
this.forceUpdateEPeople(activeGroup);
}
}));
}
/**
* Event triggered when the user changes page on search result
* @param event
*/
onPageChangeSearch(event) {
this.configSearch.currentPage = event;
this.search({ scope: this.currentSearchScope, query: this.currentSearchQuery });
}
/**
* Event triggered when the user changes page on EPerson embers of active group
* @param event
*/
onPageChange(event) {
this.ePeopleMembersOfGroup = this.ePersonDataService.findAllByHref(this.groupBeingEdited._links.epersons.href, {
currentPage: event,
elementsPerPage: this.config.pageSize
})
}
/**
* Deletes a given EPerson from the members list of the group currently being edited
* @param ePerson EPerson we want to delete as member from group that is currently being edited
*/
deleteMemberFromGroup(ePerson: EPerson) {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => {
if (activeGroup != null) {
const response = this.groupDataService.deleteMemberFromGroup(activeGroup, ePerson);
this.showNotifications('deleteMember', response, ePerson.name, activeGroup);
this.forceUpdateEPeople(activeGroup);
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.noActiveGroup'));
}
});
}
/**
* Adds a given EPerson to the members list of the group currently being edited
* @param ePerson EPerson we want to add as member to group that is currently being edited
*/
addMemberToGroup(ePerson: EPerson) {
this.groupDataService.getActiveGroup().pipe(take(1)).subscribe((activeGroup: Group) => {
if (activeGroup != null) {
const response = this.groupDataService.addMemberToGroup(activeGroup, ePerson);
this.showNotifications('addMember', response, ePerson.name, activeGroup);
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.noActiveGroup'));
}
});
this.forceUpdateEPeople(this.groupBeingEdited, ePerson);
}
/**
* Whether or not the given ePerson is a member of the group currently being edited
* @param possibleMember EPerson that is a possible member (being tested) of the group currently being edited
*/
isMemberOfGroup(possibleMember: EPerson): Observable<boolean> {
return this.groupDataService.getActiveGroup().pipe(take(1),
mergeMap((group: Group) => {
if (group != null) {
return this.ePersonDataService.findAllByHref(group._links.epersons.href, {
currentPage: 0,
elementsPerPage: Number.MAX_SAFE_INTEGER
})
.pipe(
getSucceededRemoteData(),
getRemoteDataPayload(),
map((listEPeopleInGroup: PaginatedList<EPerson>) => listEPeopleInGroup.page.filter((ePersonInList: EPerson) => ePersonInList.id === possibleMember.id)),
map((epeople: EPerson[]) => epeople.length > 0))
} else {
return observableOf(false);
}
}))
}
/**
* Search in the EPeople by name, email or metadata
* @param data Contains scope and query param
*/
search(data: any) {
const query: string = data.query;
const scope: string = data.scope;
if (query != null && this.currentSearchQuery !== query && this.groupBeingEdited) {
this.router.navigateByUrl(this.groupDataService.getGroupEditPageRouterLink(this.groupBeingEdited));
this.currentSearchQuery = query;
this.configSearch.currentPage = 1;
}
if (scope != null && this.currentSearchScope !== scope && this.groupBeingEdited) {
this.router.navigateByUrl(this.groupDataService.getGroupEditPageRouterLink(this.groupBeingEdited));
this.currentSearchScope = scope;
this.configSearch.currentPage = 1;
}
this.searchDone = true;
this.ePeopleSearch = this.ePersonDataService.searchByScope(this.currentSearchScope, this.currentSearchQuery, {
currentPage: this.configSearch.currentPage,
elementsPerPage: this.configSearch.pageSize
});
}
/**
* Force-update the list of EPeople by first clearing the cache related to EPeople, then performing
* a new REST call
* @param activeGroup Group currently being edited
*/
public forceUpdateEPeople(activeGroup: Group, ePersonToUpdate?: EPerson) {
if (ePersonToUpdate != null) {
this.ePersonDataService.clearLinkRequests(ePersonToUpdate._links.groups.href);
}
this.ePersonDataService.clearLinkRequests(activeGroup._links.epersons.href);
this.router.navigateByUrl(this.groupDataService.getGroupEditPageRouterLink(activeGroup));
this.ePeopleMembersOfGroup = this.ePersonDataService.findAllByHref(activeGroup._links.epersons.href, {
currentPage: this.configSearch.currentPage,
elementsPerPage: this.configSearch.pageSize
})
}
/**
* unsub all subscriptions
*/
ngOnDestroy(): void {
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
}
/**
* Shows a notification based on the success/failure of the request
* @param messageSuffix Suffix for message
* @param response RestResponse observable containing success/failure request
* @param nameObject Object request was about
* @param activeGroup Group currently being edited
*/
showNotifications(messageSuffix: string, response: Observable<RestResponse>, nameObject: string, activeGroup: Group) {
response.pipe(take(1)).subscribe((restResponse: RestResponse) => {
if (restResponse.isSuccessful) {
this.notificationsService.success(this.translateService.get(this.messagePrefix + '.notification.success.' + messageSuffix, { name: nameObject }));
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + '.notification.failure.' + messageSuffix, { name: nameObject }));
}
})
}
/**
* Reset all input-fields to be empty and search all search
*/
clearFormAndResetResult() {
this.searchForm.patchValue({
query: '',
});
this.search({ query: '' });
}
}

View File

@@ -1,84 +0,0 @@
<div class="container">
<div class="groups-registry row">
<div class="col-12">
<h2 id="header" class="border-bottom pb-2">{{messagePrefix + 'head' | translate}}</h2>
<div class="button-row top d-flex pb-2">
<button class="mr-auto btn btn-success"
[routerLink]="['newGroup']">
<i class="fas fa-plus"></i>
<span class="d-none d-sm-inline">&nbsp;{{messagePrefix + 'button.add' | translate}}</span>
</button>
</div>
<h3 id="search" class="border-bottom pb-2">{{messagePrefix + 'search.head' | translate}}
<button (click)="clearFormAndResetResult();"
class="btn btn-primary float-right">{{messagePrefix + 'button.see-all' | translate}}</button>
</h3>
<form [formGroup]="searchForm" (ngSubmit)="search(searchForm.value)" class="row">
<div class="col-12">
<div class="form-group input-group">
<input type="text" name="query" id="query" formControlName="query"
class="form-control" aria-label="Search input">
<span class="input-group-append">
<button type="submit"
class="search-button btn btn-secondary">{{ messagePrefix + 'search.button' | translate }}</button>
</span>
</div>
</div>
</form>
<ds-pagination
*ngIf="(groups | async)?.payload?.totalElements > 0"
[paginationOptions]="config"
[pageInfoState]="(groups | async)?.payload"
[collectionSize]="(groups | async)?.payload?.totalElements"
[hideGear]="true"
[hidePagerWhenSinglePage]="true"
(pageChange)="onPageChange($event)">
<div class="table-responsive">
<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">{{messagePrefix + 'table.members' | translate}}</th>
<!-- <th scope="col">{{messagePrefix + 'table.comcol' | translate}}</th>-->
<th>{{messagePrefix + 'table.edit' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let group of (groups | async)?.payload?.page">
<td>{{group.id}}</td>
<td>{{group.name}}</td>
<td>{{(getMembers(group) | async)?.payload?.totalElements + (getSubgroups(group) | async)?.payload?.totalElements}}</td>
<!-- <td>{{getOptionalComColFromName(group.name)}}</td>-->
<td>
<div class="btn-group edit-field">
<button [routerLink]="groupService.getGroupEditPageRouterLink(group)"
class="btn btn-outline-primary btn-sm"
title="{{messagePrefix + 'table.edit.buttons.edit' | translate: {name: group.name} }}">
<i class="fas fa-edit fa-fw"></i>
</button>
<button *ngIf="!group?.permanent" (click)="deleteGroup(group)"
class="btn btn-outline-danger btn-sm"
title="{{messagePrefix + 'table.edit.buttons.remove' | translate: {name: group.name} }}">
<i class="fas fa-trash-alt fa-fw"></i>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</ds-pagination>
<div *ngIf="(groups | async)?.payload?.totalElements == 0" class="alert alert-info w-100 mb-2" role="alert">
{{messagePrefix + 'no-items' | translate}}
</div>
</div>
</div>
</div>

View File

@@ -1,139 +0,0 @@
import { CommonModule } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, fakeAsync, inject, TestBed, tick } from '@angular/core/testing';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserModule, By } from '@angular/platform-browser';
import { Router } from '@angular/router';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { Observable } from 'rxjs/internal/Observable';
import { PaginatedList } from '../../../core/data/paginated-list';
import { RemoteData } from '../../../core/data/remote-data';
import { EPersonDataService } from '../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../core/eperson/group-data.service';
import { EPerson } from '../../../core/eperson/models/eperson.model';
import { Group } from '../../../core/eperson/models/group.model';
import { RouteService } from '../../../core/services/route.service';
import { PageInfo } from '../../../core/shared/page-info.model';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { GroupMock, GroupMock2 } from '../../../shared/testing/group-mock';
import { GroupsRegistryComponent } from './groups-registry.component';
import { EPersonMock, EPersonMock2 } from '../../../shared/testing/eperson.mock';
import { createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils';
import { TranslateLoaderMock } from '../../../shared/testing/translate-loader.mock';
import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub';
import { routeServiceStub } from '../../../shared/testing/route-service.stub';
import { RouterMock } from '../../../shared/mocks/router.mock';
describe('GroupRegistryComponent', () => {
let component: GroupsRegistryComponent;
let fixture: ComponentFixture<GroupsRegistryComponent>;
let ePersonDataServiceStub: any;
let groupsDataServiceStub: any;
let mockGroups;
let mockEPeople;
beforeEach(async(() => {
mockGroups = [GroupMock, GroupMock2];
mockEPeople = [EPersonMock, EPersonMock2];
ePersonDataServiceStub = {
findAllByHref(href: string): Observable<RemoteData<PaginatedList<EPerson>>> {
switch (href) {
case 'https://dspace.4science.it/dspace-spring-rest/api/eperson/groups/testgroupid2/epersons':
return createSuccessfulRemoteDataObject$(new PaginatedList(null, []));
case 'https://dspace.4science.it/dspace-spring-rest/api/eperson/groups/testgroupid/epersons':
return createSuccessfulRemoteDataObject$(new PaginatedList(null, [EPersonMock]));
default:
return createSuccessfulRemoteDataObject$(new PaginatedList(null, []));
}
}
};
groupsDataServiceStub = {
allGroups: mockGroups,
findAllByHref(href: string): Observable<RemoteData<PaginatedList<Group>>> {
switch (href) {
case 'https://dspace.4science.it/dspace-spring-rest/api/eperson/groups/testgroupid2/groups':
return createSuccessfulRemoteDataObject$(new PaginatedList(null, []));
case 'https://dspace.4science.it/dspace-spring-rest/api/eperson/groups/testgroupid/groups':
return createSuccessfulRemoteDataObject$(new PaginatedList(null, [GroupMock2]));
default:
return createSuccessfulRemoteDataObject$(new PaginatedList(null, []));
}
},
getGroupEditPageRouterLink(group: Group): string {
return '/admin/access-control/groups/' + group.id;
},
getGroupRegistryRouterLink(): string {
return '/admin/access-control/groups';
},
searchGroups(query: string): Observable<RemoteData<PaginatedList<Group>>> {
if (query === '') {
return createSuccessfulRemoteDataObject$(new PaginatedList(null, this.allGroups));
}
const result = this.allGroups.find((group: Group) => {
return (group.id.includes(query))
});
return createSuccessfulRemoteDataObject$(new PaginatedList(new PageInfo(), [result]));
}
};
TestBed.configureTestingModule({
imports: [CommonModule, NgbModule, FormsModule, ReactiveFormsModule, BrowserModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateLoaderMock
}
}),
],
declarations: [GroupsRegistryComponent],
providers: [GroupsRegistryComponent,
{ provide: EPersonDataService, useValue: ePersonDataServiceStub },
{ provide: GroupDataService, useValue: groupsDataServiceStub },
{ provide: NotificationsService, useValue: new NotificationsServiceStub() },
{ provide: RouteService, useValue: routeServiceStub },
{ provide: Router, useValue: new RouterMock() },
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(GroupsRegistryComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create GroupRegistryComponent', inject([GroupsRegistryComponent], (comp: GroupsRegistryComponent) => {
expect(comp).toBeDefined();
}));
it('should display list of groups', () => {
const groupIdsFound = fixture.debugElement.queryAll(By.css('#groups tr td:first-child'));
expect(groupIdsFound.length).toEqual(2);
mockGroups.map((group: Group) => {
expect(groupIdsFound.find((foundEl) => {
return (foundEl.nativeElement.textContent.trim() === group.uuid);
})).toBeTruthy();
})
});
describe('search', () => {
describe('when searching with query', () => {
let groupIdsFound;
beforeEach(fakeAsync(() => {
component.search({ query: GroupMock2.id });
tick();
fixture.detectChanges();
groupIdsFound = fixture.debugElement.queryAll(By.css('#groups tr td:first-child'));
}));
it('should display search result', () => {
expect(groupIdsFound.length).toEqual(1);
expect(groupIdsFound.find((foundEl) => {
return (foundEl.nativeElement.textContent.trim() === GroupMock2.uuid);
})).toBeTruthy();
});
});
});
});

View File

@@ -1,154 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { Router } from '@angular/router';
import { TranslateService } from '@ngx-translate/core';
import { Observable } from 'rxjs';
import { take } from 'rxjs/operators';
import { PaginatedList } from '../../../core/data/paginated-list';
import { RemoteData } from '../../../core/data/remote-data';
import { EPersonDataService } from '../../../core/eperson/eperson-data.service';
import { GroupDataService } from '../../../core/eperson/group-data.service';
import { EPerson } from '../../../core/eperson/models/eperson.model';
import { Group } from '../../../core/eperson/models/group.model';
import { RouteService } from '../../../core/services/route.service';
import { hasValue } from '../../../shared/empty.util';
import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model';
@Component({
selector: 'ds-groups-registry',
templateUrl: './groups-registry.component.html',
})
/**
* A component used for managing all existing groups within the repository.
* The admin can create, edit or delete groups here.
*/
export class GroupsRegistryComponent implements OnInit {
messagePrefix = 'admin.access-control.groups.';
/**
* Pagination config used to display the list of groups
*/
config: PaginationComponentOptions = Object.assign(new PaginationComponentOptions(), {
id: 'groups-list-pagination',
pageSize: 5,
currentPage: 1
});
/**
* A list of all the current groups within the repository or the result of the search
*/
groups: Observable<RemoteData<PaginatedList<Group>>>;
// The search form
searchForm;
// Current search in groups registry
currentSearchQuery: string;
constructor(public groupService: GroupDataService,
private ePersonDataService: EPersonDataService,
private translateService: TranslateService,
private notificationsService: NotificationsService,
private formBuilder: FormBuilder,
protected routeService: RouteService,
private router: Router) {
this.currentSearchQuery = '';
this.searchForm = this.formBuilder.group(({
query: this.currentSearchQuery,
}));
}
ngOnInit() {
this.search({ query: this.currentSearchQuery });
}
/**
* Event triggered when the user changes page
* @param event
*/
onPageChange(event) {
this.config.currentPage = event;
this.search({ query: this.currentSearchQuery })
}
/**
* Search in the groups (searches by group name and by uuid exact match)
* @param data Contains query param
*/
search(data: any) {
const query: string = data.query;
if (query != null && this.currentSearchQuery !== query) {
this.router.navigateByUrl(this.groupService.getGroupRegistryRouterLink());
this.currentSearchQuery = query;
this.config.currentPage = 1;
}
this.groups = this.groupService.searchGroups(this.currentSearchQuery.trim(), {
currentPage: this.config.currentPage,
elementsPerPage: this.config.pageSize
});
}
/**
* Delete Group
*/
deleteGroup(group: Group) {
// TODO (backend)
console.log('TODO implement editGroup', group);
this.notificationsService.error('TODO implement deleteGroup (not yet implemented in backend)');
if (hasValue(group.id)) {
this.groupService.deleteGroup(group).pipe(take(1)).subscribe((success: boolean) => {
if (success) {
this.notificationsService.success(this.translateService.get(this.messagePrefix + 'notification.deleted.success', { name: group.name }));
this.forceUpdateGroup();
} else {
this.notificationsService.error(this.translateService.get(this.messagePrefix + 'notification.deleted.failure', { name: group.name }));
}
})
}
}
/**
* Force-update the list of groups by first clearing the cache related to groups, then performing a new REST call
*/
public forceUpdateGroup() {
this.groupService.clearGroupsRequests();
this.search({ query: this.currentSearchQuery })
}
/**
* Get the members (epersons embedded value of a group)
* @param group
*/
getMembers(group: Group): Observable<RemoteData<PaginatedList<EPerson>>> {
return this.ePersonDataService.findAllByHref(group._links.epersons.href);
}
/**
* Get the subgroups (groups embedded value of a group)
* @param group
*/
getSubgroups(group: Group): Observable<RemoteData<PaginatedList<Group>>> {
return this.groupService.findAllByHref(group._links.subgroups.href);
}
/**
* Reset all input-fields to be empty and search all search
*/
clearFormAndResetResult() {
this.searchForm.patchValue({
query: '',
});
this.search({ query: '' });
}
/**
* Extract optional UUID from a group name => To be resolved to community or collection with link
* (Or will be resolved in backend and added to group object, tbd) //TODO
* @param groupName
*/
getOptionalComColFromName(groupName: string): string {
return this.groupService.getUUIDFromString(groupName);
}
}

View File

@@ -1,15 +0,0 @@
<ng-template dsListableObject>
</ng-template>
<div #badges class="position-absolute ml-1">
<div *ngIf="dso && !dso.isDiscoverable" class="private-badge">
<span class="badge badge-danger">{{ "admin.search.item.private" | translate }}</span>
</div>
<div *ngIf="dso && dso.isWithdrawn" class="withdrawn-badge">
<span class="badge badge-warning">{{ "admin.search.item.withdrawn" | translate }}</span>
</div>
</div>
<ul #buttons class="list-group list-group-flush">
<li class="list-group-item">
<ds-item-admin-search-result-actions-element class="d-flex justify-content-between" [item]="dso" [small]="true"></ds-item-admin-search-result-actions-element>
</li>
</ul>

View File

@@ -1,12 +0,0 @@
<div *ngIf="dso && !dso.isDiscoverable" class="private-badge">
<span class="badge badge-danger">{{ "admin.search.item.private" | translate }}</span>
</div>
<div *ngIf="dso && dso.isWithdrawn" class="withdrawn-badge">
<span class="badge badge-warning">{{ "admin.search.item.withdrawn" | translate }}</span>
</div>
<ds-listable-object-component-loader [object]="object"
[viewMode]="viewModes.ListElement"
[index]="index"
[linkType]="linkType"
[listID]="listID"></ds-listable-object-component-loader>
<ds-item-admin-search-result-actions-element [item]="dso" [small]="false"></ds-item-admin-search-result-actions-element>

View File

@@ -1,27 +0,0 @@
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 edit-link" [routerLink]="[getEditPath()]" [title]="'admin.search.item.edit' | translate">
<i class="fa fa-edit"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.edit" | translate}}</span>
</a>
<a [ngClass]="{'btn-sm': small}" *ngIf="item && !item.isWithdrawn" class="btn btn-light my-1 withdraw-link" [routerLink]="[getWithdrawPath()]" [title]="'admin.search.item.withdraw' | translate">
<i class="fa fa-ban"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.withdraw" | translate}}</span>
</a>
<a [ngClass]="{'btn-sm': small}" *ngIf="item && item.isWithdrawn" class="btn btn-light my-1 reinstate-link" [routerLink]="[getReinstatePath()]" [title]="'admin.search.item.reinstate' | translate">
<i class="fa fa-undo"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.reinstate" | translate}}</span>
</a>
<a [ngClass]="{'btn-sm': small}" *ngIf="item && item.isDiscoverable" class="btn btn-light my-1 private-link" [routerLink]="[getPrivatePath()]" [title]="'admin.search.item.make-private' | translate">
<i class="fa fa-eye-slash"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.make-private" | translate}}</span>
</a>
<a [ngClass]="{'btn-sm': small}" *ngIf="item && !item.isDiscoverable" class="btn btn-light my-1 public-link" [routerLink]="[getPublicPath()]" [title]="'admin.search.item.make-public' | translate">
<i class="fa fa-eye"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.make-public" | translate}}</span>
</a>
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 delete-link" [routerLink]="[getDeletePath()]" [title]="'admin.search.item.delete' | translate">
<i class="fa fa-trash"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.delete" | translate}}</span>
</a>
<a [ngClass]="{'btn-sm': small}" class="btn btn-light my-1 move-link" [routerLink]="[getMovePath()]" [title]="'admin.search.item.move' | translate">
<i class="fa fa-arrow-circle-right"></i><span *ngIf="!small" class="d-none d-sm-inline"> {{"admin.search.item.move" | translate}}</span>
</a>

View File

@@ -1,11 +0,0 @@
<li class="sidebar-section">
<a class="nav-item nav-link shortcut-icon" [routerLink]="itemModel.link">
<i class="fas fa-{{section.icon}} fa-fw" [title]="('menu.section.icon.' + section.id) | translate"></i>
</a>
<div class="sidebar-collapsible">
<span class="section-header-text">
<ng-container
*ngComponentOutlet="itemComponents.get(section.id); injector: itemInjectors.get(section.id);"></ng-container>
</span>
</div>
</li>

View File

@@ -1,52 +0,0 @@
<nav @slideHorizontal class="navbar navbar-dark p-0"
[ngClass]="{'active': sidebarOpen, 'inactive': sidebarClosed}"
[@slideSidebar]="{
value: (!(sidebarExpanded | async) ? 'collapsed' : 'expanded'),
params: {sidebarWidth: (sidebarWidth | async)}
}" (@slideSidebar.done)="finishSlide($event)" (@slideSidebar.start)="startSlide($event)"
*ngIf="menuVisible | async" (mouseenter)="expandPreview($event)"
(mouseleave)="collapsePreview($event)">
<div class="sidebar-top-level-items">
<ul class="navbar-nav">
<li class="admin-menu-header sidebar-section">
<a class="shortcut-icon navbar-brand mr-0" href="#">
<span class="logo-wrapper">
<img class="admin-logo" src="assets/images/dspace-logo-mini.svg"
[alt]="('menu.header.image.logo') | translate">
</span>
</a>
<div class="sidebar-collapsible">
<a class="navbar-brand mr-0" href="#">
<h4 class="section-header-text mb-0">{{'menu.header.admin' |
translate}}</h4>
</a>
</div>
</li>
<ng-container *ngFor="let section of (sections | async)">
<ng-container
*ngComponentOutlet="sectionComponents.get(section.id); injector: sectionInjectors.get(section.id);"></ng-container>
</ng-container>
</ul>
</div>
<div class="navbar-nav">
<div class="sidebar-section" id="sidebar-collapse-toggle">
<a class="nav-item nav-link shortcut-icon"
href="#"
(click)="toggle($event)">
<i *ngIf="(menuCollapsed | async)" class="fas fa-fw fa-angle-double-right"
[title]="'menu.section.icon.pin' | translate"></i>
<i *ngIf="!(menuCollapsed | async)" class="fas fa-fw fa-angle-double-left"
[title]="'menu.section.icon.unpin' | translate"></i>
</a>
<div class="sidebar-collapsible">
<a class="nav-item nav-link sidebar-section"
href="#"
(click)="toggle($event)">
<span *ngIf="menuCollapsed | async" class="section-header-text">{{'menu.section.pin' | translate }}</span>
<span *ngIf="!(menuCollapsed | async)" class="section-header-text">{{'menu.section.unpin' | translate }}</span>
</a>
</div>
</div>
</div>
</nav>

View File

@@ -1,76 +0,0 @@
$icon-z-index: 10;
:host {
left: 0;
top: 0;
height: 100vh;
flex: 1 1 auto;
nav {
background-color: $admin-sidebar-bg;
height: 100%;
flex-direction: column;
> div {
width: 100%;
&.sidebar-top-level-items {
flex: 1;
overflow: auto;
@include dark-scrollbar;
}
}
&.inactive ::ng-deep .sidebar-collapsible {
margin-left: -#{$sidebar-items-width};
}
.navbar-nav {
.admin-menu-header {
background-color: $admin-sidebar-header-bg;
.logo-wrapper {
img {
height: 20px;
}
}
.section-header-text {
line-height: 1.5;
}
}
}
::ng-deep {
.navbar-nav {
.sidebar-section {
display: flex;
align-content: stretch;
background-color: $admin-sidebar-bg;
.nav-item {
padding-top: $spacer;
padding-bottom: $spacer;
}
.shortcut-icon {
padding-left: $icon-padding;
padding-right: $icon-padding;
}
.shortcut-icon, .icon-wrapper {
background-color: inherit;
z-index: $icon-z-index;
}
.sidebar-collapsible {
width: $sidebar-items-width;
position: relative;
a {
padding-right: $spacer;
width: 100%;
}
}
&.active > .sidebar-collapsible > .nav-link {
color: $navbar-dark-active-color;
}
}
}
}
}
}

View File

@@ -1,163 +0,0 @@
import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { TranslateModule } from '@ngx-translate/core';
import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core';
import { AdminSidebarComponent } from './admin-sidebar.component';
import { MenuService } from '../../shared/menu/menu.service';
import { MenuServiceStub } from '../../shared/testing/menu-service.stub';
import { CSSVariableService } from '../../shared/sass-helper/sass-helper.service';
import { CSSVariableServiceStub } from '../../shared/testing/css-variable-service.stub';
import { AuthServiceStub } from '../../shared/testing/auth-service.stub';
import { AuthService } from '../../core/auth/auth.service';
import { of as observableOf } from 'rxjs';
import { By } from '@angular/platform-browser';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { RouterTestingModule } from '@angular/router/testing';
import { ActivatedRoute } from '@angular/router';
describe('AdminSidebarComponent', () => {
let comp: AdminSidebarComponent;
let fixture: ComponentFixture<AdminSidebarComponent>;
const menuService = new MenuServiceStub();
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [TranslateModule.forRoot(), NoopAnimationsModule, RouterTestingModule],
declarations: [AdminSidebarComponent],
providers: [
{ provide: Injector, useValue: {} },
{ provide: MenuService, useValue: menuService },
{ provide: CSSVariableService, useClass: CSSVariableServiceStub },
{ provide: AuthService, useClass: AuthServiceStub },
{ provide: ActivatedRoute, useValue: {} },
{
provide: NgbModal, useValue: {
open: () => {/*comment*/}
}
}
],
schemas: [NO_ERRORS_SCHEMA]
}).overrideComponent(AdminSidebarComponent, {
set: {
changeDetection: ChangeDetectionStrategy.Default,
}
}).compileComponents();
}));
beforeEach(() => {
spyOn(menuService, 'getMenuTopSections').and.returnValue(observableOf([]));
fixture = TestBed.createComponent(AdminSidebarComponent);
comp = fixture.componentInstance; // SearchPageComponent test instance
comp.sections = observableOf([]);
fixture.detectChanges();
});
describe('startSlide', () => {
describe('when expanding', () => {
beforeEach(() => {
comp.sidebarClosed = true;
comp.startSlide({ toState: 'expanded' } as any);
});
it('should set the sidebarClosed to false', () => {
expect(comp.sidebarClosed).toBeFalsy();
})
});
describe('when collapsing', () => {
beforeEach(() => {
comp.sidebarClosed = false;
comp.startSlide({ toState: 'collapsed' } as any);
});
it('should set the sidebarOpen to false', () => {
expect(comp.sidebarOpen).toBeFalsy();
})
})
});
describe('finishSlide', () => {
describe('when expanding', () => {
beforeEach(() => {
comp.sidebarClosed = true;
comp.startSlide({ fromState: 'expanded' } as any);
});
it('should set the sidebarClosed to true', () => {
expect(comp.sidebarClosed).toBeTruthy();
})
});
describe('when collapsing', () => {
beforeEach(() => {
comp.sidebarClosed = false;
comp.startSlide({ fromState: 'collapsed' } as any);
});
it('should set the sidebarOpen to true', () => {
expect(comp.sidebarOpen).toBeTruthy();
})
})
});
describe('when the collapse icon is clicked', () => {
beforeEach(() => {
spyOn(menuService, 'toggleMenu');
const sidebarToggler = fixture.debugElement.query(By.css('#sidebar-collapse-toggle')).query(By.css('a.shortcut-icon'));
sidebarToggler.triggerEventHandler('click', {
preventDefault: () => {/**/
}
});
});
it('should call toggleMenu on the menuService', () => {
expect(menuService.toggleMenu).toHaveBeenCalled();
});
});
describe('when the collapse link is clicked', () => {
beforeEach(() => {
spyOn(menuService, 'toggleMenu');
const sidebarToggler = fixture.debugElement.query(By.css('#sidebar-collapse-toggle')).query(By.css('.sidebar-collapsible')).query(By.css('a'));
sidebarToggler.triggerEventHandler('click', {
preventDefault: () => {/**/
}
});
});
it('should call toggleMenu on the menuService', () => {
expect(menuService.toggleMenu).toHaveBeenCalled();
});
});
describe('when the the mouse enters the nav tag', () => {
it('should call expandPreview on the menuService after 100ms', fakeAsync(() => {
spyOn(menuService, 'expandMenuPreview');
const sidebarToggler = fixture.debugElement.query(By.css('nav.navbar'));
sidebarToggler.triggerEventHandler('mouseenter', {
preventDefault: () => {/**/
}
});
tick(99);
expect(menuService.expandMenuPreview).not.toHaveBeenCalled();
tick(1);
expect(menuService.expandMenuPreview).toHaveBeenCalled();
}));
});
describe('when the the mouse leaves the nav tag', () => {
it('should call collapseMenuPreview on the menuService after 400ms', fakeAsync(() => {
spyOn(menuService, 'collapseMenuPreview');
const sidebarToggler = fixture.debugElement.query(By.css('nav.navbar'));
sidebarToggler.triggerEventHandler('mouseleave', {
preventDefault: () => {/**/
}
});
tick(399);
expect(menuService.collapseMenuPreview).not.toHaveBeenCalled();
tick(1);
expect(menuService.collapseMenuPreview).toHaveBeenCalled();
}));
});
});

View File

@@ -1,504 +0,0 @@
import { Component, Injector, OnInit } from '@angular/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { combineLatest as combineLatestObservable } from 'rxjs';
import { Observable } from 'rxjs/internal/Observable';
import { first, map } from 'rxjs/operators';
import { AuthService } from '../../core/auth/auth.service';
import { slideHorizontal, slideSidebar } from '../../shared/animations/slide';
import { CreateCollectionParentSelectorComponent } from '../../shared/dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component';
import { CreateCommunityParentSelectorComponent } from '../../shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component';
import { CreateItemParentSelectorComponent } from '../../shared/dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component';
import { EditCollectionSelectorComponent } from '../../shared/dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component';
import { EditCommunitySelectorComponent } from '../../shared/dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component';
import { EditItemSelectorComponent } from '../../shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component';
import { MenuID, MenuItemType } from '../../shared/menu/initial-menus-state';
import { LinkMenuItemModel } from '../../shared/menu/menu-item/models/link.model';
import { OnClickMenuItemModel } from '../../shared/menu/menu-item/models/onclick.model';
import { TextMenuItemModel } from '../../shared/menu/menu-item/models/text.model';
import { MenuComponent } from '../../shared/menu/menu.component';
import { MenuService } from '../../shared/menu/menu.service';
import { CSSVariableService } from '../../shared/sass-helper/sass-helper.service';
/**
* Component representing the admin sidebar
*/
@Component({
selector: 'ds-admin-sidebar',
templateUrl: './admin-sidebar.component.html',
styleUrls: ['./admin-sidebar.component.scss'],
animations: [slideHorizontal, slideSidebar]
})
export class AdminSidebarComponent extends MenuComponent implements OnInit {
/**
* The menu ID of the Navbar is PUBLIC
* @type {MenuID.ADMIN}
*/
menuID = MenuID.ADMIN;
/**
* Observable that emits the width of the collapsible menu sections
*/
sidebarWidth: Observable<string>;
/**
* Is true when the sidebar is open, is false when the sidebar is animating or closed
* @type {boolean}
*/
sidebarOpen = true; // Open in UI, animation finished
/**
* Is true when the sidebar is closed, is false when the sidebar is animating or open
* @type {boolean}
*/
sidebarClosed = !this.sidebarOpen; // Closed in UI, animation finished
/**
* Emits true when either the menu OR the menu's preview is expanded, else emits false
*/
sidebarExpanded: Observable<boolean>;
constructor(protected menuService: MenuService,
protected injector: Injector,
private variableService: CSSVariableService,
private authService: AuthService,
private modalService: NgbModal
) {
super(menuService, injector);
}
/**
* Set and calculate all initial values of the instance variables
*/
ngOnInit(): void {
this.createMenu();
super.ngOnInit();
this.sidebarWidth = this.variableService.getVariable('sidebarItemsWidth');
this.authService.isAuthenticated()
.subscribe((loggedIn: boolean) => {
if (loggedIn) {
this.menuService.showMenu(this.menuID);
}
});
this.menuCollapsed.pipe(first())
.subscribe((collapsed: boolean) => {
this.sidebarOpen = !collapsed;
this.sidebarClosed = collapsed;
});
this.sidebarExpanded = combineLatestObservable(this.menuCollapsed, this.menuPreviewCollapsed)
.pipe(
map(([collapsed, previewCollapsed]) => (!collapsed || !previewCollapsed))
);
}
/**
* Initialize all menu sections and items for this menu
*/
createMenu() {
const menuList = [
/* News */
{
id: 'new',
active: false,
visible: true,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.new'
} as TextMenuItemModel,
icon: 'plus-circle',
index: 0
},
{
id: 'new_community',
parentID: 'new',
active: false,
visible: true,
model: {
type: MenuItemType.ONCLICK,
text: 'menu.section.new_community',
function: () => {
this.modalService.open(CreateCommunityParentSelectorComponent);
}
} as OnClickMenuItemModel,
},
{
id: 'new_collection',
parentID: 'new',
active: false,
visible: true,
model: {
type: MenuItemType.ONCLICK,
text: 'menu.section.new_collection',
function: () => {
this.modalService.open(CreateCollectionParentSelectorComponent);
}
} as OnClickMenuItemModel,
},
{
id: 'new_item',
parentID: 'new',
active: false,
visible: true,
model: {
type: MenuItemType.ONCLICK,
text: 'menu.section.new_item',
function: () => {
this.modalService.open(CreateItemParentSelectorComponent);
}
} as OnClickMenuItemModel,
},
{
id: 'new_process',
parentID: 'new',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.new_process',
link: '/processes/new'
} as LinkMenuItemModel,
},
{
id: 'new_item_version',
parentID: 'new',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.new_item_version',
link: ''
} as LinkMenuItemModel,
},
/* Edit */
{
id: 'edit',
active: false,
visible: true,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.edit'
} as TextMenuItemModel,
icon: 'pencil-alt',
index: 1
},
{
id: 'edit_community',
parentID: 'edit',
active: false,
visible: true,
model: {
type: MenuItemType.ONCLICK,
text: 'menu.section.edit_community',
function: () => {
this.modalService.open(EditCommunitySelectorComponent);
}
} as OnClickMenuItemModel,
},
{
id: 'edit_collection',
parentID: 'edit',
active: false,
visible: true,
model: {
type: MenuItemType.ONCLICK,
text: 'menu.section.edit_collection',
function: () => {
this.modalService.open(EditCollectionSelectorComponent);
}
} as OnClickMenuItemModel,
},
{
id: 'edit_item',
parentID: 'edit',
active: false,
visible: true,
model: {
type: MenuItemType.ONCLICK,
text: 'menu.section.edit_item',
function: () => {
this.modalService.open(EditItemSelectorComponent);
}
} as OnClickMenuItemModel,
},
/* Import */
{
id: 'import',
active: false,
visible: true,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.import'
} as TextMenuItemModel,
icon: 'sign-in-alt',
index: 2
},
{
id: 'import_metadata',
parentID: 'import',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.import_metadata',
link: ''
} as LinkMenuItemModel,
},
{
id: 'import_batch',
parentID: 'import',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.import_batch',
link: ''
} as LinkMenuItemModel,
},
/* Export */
{
id: 'export',
active: false,
visible: true,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.export'
} as TextMenuItemModel,
icon: 'sign-out-alt',
index: 3
},
{
id: 'export_community',
parentID: 'export',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.export_community',
link: ''
} as LinkMenuItemModel,
},
{
id: 'export_collection',
parentID: 'export',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.export_collection',
link: ''
} as LinkMenuItemModel,
},
{
id: 'export_item',
parentID: 'export',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.export_item',
link: ''
} as LinkMenuItemModel,
}, {
id: 'export_metadata',
parentID: 'export',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.export_metadata',
link: ''
} as LinkMenuItemModel,
},
/* Access Control */
{
id: 'access_control',
active: false,
visible: true,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.access_control'
} as TextMenuItemModel,
icon: 'key',
index: 4
},
{
id: 'access_control_people',
parentID: 'access_control',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.access_control_people',
link: '/admin/access-control/epeople'
} as LinkMenuItemModel,
},
{
id: 'access_control_groups',
parentID: 'access_control',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.access_control_groups',
link: '/admin/access-control/groups'
} as LinkMenuItemModel,
},
{
id: 'access_control_authorizations',
parentID: 'access_control',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.access_control_authorizations',
link: ''
} as LinkMenuItemModel,
},
/* Admin Search */
{
id: 'admin_search',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.admin_search',
link: '/admin/search'
} as LinkMenuItemModel,
icon: 'search',
index: 5
},
/* Registries */
{
id: 'registries',
active: false,
visible: true,
model: {
type: MenuItemType.TEXT,
text: 'menu.section.registries'
} as TextMenuItemModel,
icon: 'list',
index: 6
},
{
id: 'registries_metadata',
parentID: 'registries',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.registries_metadata',
link: 'admin/registries/metadata'
} as LinkMenuItemModel,
},
{
id: 'registries_format',
parentID: 'registries',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.registries_format',
link: 'admin/registries/bitstream-formats'
} as LinkMenuItemModel,
},
/* Curation tasks */
{
id: 'curation_tasks',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.curation_task',
link: ''
} as LinkMenuItemModel,
icon: 'filter',
index: 7
},
/* Statistics */
{
id: 'statistics_task',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.statistics_task',
link: ''
} as LinkMenuItemModel,
icon: 'chart-bar',
index: 8
},
/* Control Panel */
{
id: 'control_panel',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.control_panel',
link: ''
} as LinkMenuItemModel,
icon: 'cogs',
index: 9
},
/* Processes */
{
id: 'processes',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.processes',
link: '/processes'
} as LinkMenuItemModel,
icon: 'terminal',
index: 10
},
/* Workflow */
{
id: 'workflow',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'menu.section.workflow',
link: '/admin/workflow'
} as LinkMenuItemModel,
icon: 'user-check',
index: 10
},
];
menuList.forEach((menuSection) => this.menuService.addSection(this.menuID, Object.assign(menuSection, {
shouldPersistOnRouteChange: true
})));
}
/**
* Method to change this.collapsed to false when the slide animation ends and is sliding open
* @param event The animation event
*/
startSlide(event: any): void {
if (event.toState === 'expanded') {
this.sidebarClosed = false;
} else if (event.toState === 'collapsed') {
this.sidebarOpen = false;
}
}
/**
* Method to change this.collapsed to false when the slide animation ends and is sliding open
* @param event The animation event
*/
finishSlide(event: any): void {
if (event.fromState === 'expanded') {
this.sidebarClosed = true;
} else if (event.fromState === 'collapsed') {
this.sidebarOpen = true;
}
}
}

View File

@@ -1,27 +0,0 @@
<li class="sidebar-section" [ngClass]="{'expanded': (expanded | async)}"
[@bgColor]="{
value: ((expanded | async) ? 'endBackground' : 'startBackground'),
params: {endColor: (sidebarActiveBg | async)}}">
<div class="icon-wrapper">
<a class="nav-item nav-link shortcut-icon" (click)="toggleSection($event)" href="#">
<i class="fas fa-{{section.icon}} fa-fw" [title]="('menu.section.icon.' + section.id) | translate"></i>
</a>
</div>
<div class="sidebar-collapsible">
<a class="nav-item nav-link" href="#"
(click)="toggleSection($event)">
<span class="section-header-text">
<ng-container
*ngComponentOutlet="itemComponents.get(section.id); injector: itemInjectors.get(section.id);"></ng-container>
</span>
<i class="fas fa-chevron-right fa-pull-right"
[@rotate]="(expanded | async) ? 'expanded' : 'collapsed'" [title]="('menu.section.toggle.' + section.id) | translate"></i>
</a>
<ul class="sidebar-sub-level-items list-unstyled" @slide *ngIf="(expanded | async)">
<li *ngFor="let subSection of (subSections | async)">
<ng-container
*ngComponentOutlet="itemComponents.get(subSection.id); injector: itemInjectors.get(subSection.id);"></ng-container>
</li>
</ul>
</div>
</li>

View File

@@ -1,19 +0,0 @@
:host ::ng-deep {
.fa-chevron-right {
padding-left: $spacer/2;
font-size: 0.5rem;
line-height: 3;
}
.sidebar-sub-level-items {
list-style: disc;
color: $navbar-dark-color;
overflow: hidden;
}
.sidebar-collapsible {
display: flex;
flex-direction: column;
}
}

View File

@@ -1,60 +0,0 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../shared/shared.module';
import { AdminAccessControlModule } from './admin-access-control/admin-access-control.module';
import { AdminRegistriesModule } from './admin-registries/admin-registries.module';
import { AdminRoutingModule } from './admin-routing.module';
import { AdminSearchPageComponent } from './admin-search-page/admin-search-page.component';
import { SearchPageModule } from '../+search-page/search-page.module';
import { ItemAdminSearchResultListElementComponent } from './admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component';
import { CommunityAdminSearchResultListElementComponent } from './admin-search-page/admin-search-results/admin-search-result-list-element/community-search-result/community-admin-search-result-list-element.component';
import { CollectionAdminSearchResultListElementComponent } from './admin-search-page/admin-search-results/admin-search-result-list-element/collection-search-result/collection-admin-search-result-list-element.component';
import { ItemAdminSearchResultGridElementComponent } from './admin-search-page/admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component';
import { CommunityAdminSearchResultGridElementComponent } from './admin-search-page/admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component';
import { CollectionAdminSearchResultGridElementComponent } from './admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component';
import { ItemAdminSearchResultActionsComponent } from './admin-search-page/admin-search-results/item-admin-search-result-actions.component';
import { WorkflowItemSearchResultAdminWorkflowGridElementComponent } from './admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component';
import { WorkflowItemAdminWorkflowActionsComponent } from './admin-workflow-page/admin-workflow-search-results/workflow-item-admin-workflow-actions.component';
import { WorkflowItemSearchResultAdminWorkflowListElementComponent } from './admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component';
import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component';
@NgModule({
imports: [
AdminRoutingModule,
AdminRegistriesModule,
AdminAccessControlModule,
SharedModule,
SearchPageModule
],
declarations: [
AdminSearchPageComponent,
AdminWorkflowPageComponent,
ItemAdminSearchResultListElementComponent,
CommunityAdminSearchResultListElementComponent,
CollectionAdminSearchResultListElementComponent,
ItemAdminSearchResultGridElementComponent,
CommunityAdminSearchResultGridElementComponent,
CollectionAdminSearchResultGridElementComponent,
ItemAdminSearchResultActionsComponent,
WorkflowItemSearchResultAdminWorkflowListElementComponent,
WorkflowItemSearchResultAdminWorkflowGridElementComponent,
WorkflowItemAdminWorkflowActionsComponent
],
entryComponents: [
ItemAdminSearchResultListElementComponent,
CommunityAdminSearchResultListElementComponent,
CollectionAdminSearchResultListElementComponent,
ItemAdminSearchResultGridElementComponent,
CommunityAdminSearchResultGridElementComponent,
CollectionAdminSearchResultGridElementComponent,
ItemAdminSearchResultActionsComponent,
WorkflowItemSearchResultAdminWorkflowListElementComponent,
WorkflowItemSearchResultAdminWorkflowGridElementComponent,
WorkflowItemAdminWorkflowActionsComponent
]
})
export class AdminModule {
}

View File

@@ -1,30 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { EditBitstreamPageComponent } from './edit-bitstream-page/edit-bitstream-page.component';
import { AuthenticatedGuard } from '../core/auth/authenticated.guard';
import { BitstreamPageResolver } from './bitstream-page.resolver';
const EDIT_BITSTREAM_PATH = ':id/edit';
/**
* Routing module to help navigate Bitstream pages
*/
@NgModule({
imports: [
RouterModule.forChild([
{
path: EDIT_BITSTREAM_PATH,
component: EditBitstreamPageComponent,
resolve: {
bitstream: BitstreamPageResolver
},
canActivate: [AuthenticatedGuard]
}
])
],
providers: [
BitstreamPageResolver,
]
})
export class BitstreamPageRoutingModule {
}

View File

@@ -1,56 +0,0 @@
import { combineLatest as observableCombineLatest } from 'rxjs';
import { Component } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { hasValue } from '../../shared/empty.util';
import {
BrowseByMetadataPageComponent,
browseParamsToOptions
} from '../+browse-by-metadata-page/browse-by-metadata-page.component';
import { BrowseEntrySearchOptions } from '../../core/browse/browse-entry-search-options.model';
import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service';
import { BrowseService } from '../../core/browse/browse.service';
import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model';
import { BrowseByType, rendersBrowseBy } from '../+browse-by-switcher/browse-by-decorator';
@Component({
selector: 'ds-browse-by-title-page',
styleUrls: ['../+browse-by-metadata-page/browse-by-metadata-page.component.scss'],
templateUrl: '../+browse-by-metadata-page/browse-by-metadata-page.component.html'
})
/**
* Component for browsing items by title (dc.title)
*/
@rendersBrowseBy(BrowseByType.Title)
export class BrowseByTitlePageComponent extends BrowseByMetadataPageComponent {
public constructor(protected route: ActivatedRoute,
protected browseService: BrowseService,
protected dsoService: DSpaceObjectDataService,
protected router: Router) {
super(route, browseService, dsoService, router);
}
ngOnInit(): void {
this.sortConfig = new SortOptions('dc.title', SortDirection.ASC);
this.updatePage(new BrowseEntrySearchOptions(null, this.paginationConfig, this.sortConfig));
this.subs.push(
observableCombineLatest(
this.route.params,
this.route.queryParams,
this.route.data,
(params, queryParams, data ) => {
return Object.assign({}, params, queryParams, data);
})
.subscribe((params) => {
this.browseId = params.id || this.defaultBrowseId;
this.updatePageWithItems(browseParamsToOptions(params, this.paginationConfig, this.sortConfig, this.browseId), undefined);
this.updateParent(params.scope)
}));
this.updateStartsWithTextOptions();
}
ngOnDestroy(): void {
this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe());
}
}

View File

@@ -1,38 +0,0 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { BrowseByTitlePageComponent } from './+browse-by-title-page/browse-by-title-page.component';
import { ItemDataService } from '../core/data/item-data.service';
import { SharedModule } from '../shared/shared.module';
import { BrowseByRoutingModule } from './browse-by-routing.module';
import { BrowseService } from '../core/browse/browse.service';
import { BrowseByMetadataPageComponent } from './+browse-by-metadata-page/browse-by-metadata-page.component';
import { BrowseByDatePageComponent } from './+browse-by-date-page/browse-by-date-page.component';
import { BrowseByGuard } from './browse-by-guard';
import { BrowseBySwitcherComponent } from './+browse-by-switcher/browse-by-switcher.component';
@NgModule({
imports: [
BrowseByRoutingModule,
CommonModule,
SharedModule
],
declarations: [
BrowseByTitlePageComponent,
BrowseByMetadataPageComponent,
BrowseByDatePageComponent,
BrowseBySwitcherComponent
],
providers: [
ItemDataService,
BrowseService,
BrowseByGuard
],
entryComponents: [
BrowseByTitlePageComponent,
BrowseByMetadataPageComponent,
BrowseByDatePageComponent
]
})
export class BrowseByModule {
}

View File

@@ -1,89 +0,0 @@
import { Component, Input } from '@angular/core';
import {
DynamicFormControlModel,
DynamicFormService,
DynamicInputModel,
DynamicTextAreaModel
} from '@ng-dynamic-forms/core';
import { Collection } from '../../core/shared/collection.model';
import { ComColFormComponent } from '../../shared/comcol-forms/comcol-form/comcol-form.component';
import { Location } from '@angular/common';
import { TranslateService } from '@ngx-translate/core';
import { NotificationsService } from '../../shared/notifications/notifications.service';
import { CommunityDataService } from '../../core/data/community-data.service';
import { AuthService } from '../../core/auth/auth.service';
import { RequestService } from '../../core/data/request.service';
import { ObjectCacheService } from '../../core/cache/object-cache.service';
/**
* Form used for creating and editing collections
*/
@Component({
selector: 'ds-collection-form',
styleUrls: ['../../shared/comcol-forms/comcol-form/comcol-form.component.scss'],
templateUrl: '../../shared/comcol-forms/comcol-form/comcol-form.component.html'
})
export class CollectionFormComponent extends ComColFormComponent<Collection> {
/**
* @type {Collection} A new collection when a collection is being created, an existing Input collection when a collection is being edited
*/
@Input() dso: Collection = new Collection();
/**
* @type {Collection.type} This is a collection-type form
*/
type = Collection.type;
/**
* The dynamic form fields used for creating/editing a collection
* @type {(DynamicInputModel | DynamicTextAreaModel)[]}
*/
formModel: DynamicFormControlModel[] = [
new DynamicInputModel({
id: 'title',
name: 'dc.title',
required: true,
validators: {
required: null
},
errorMessages: {
required: 'Please enter a name for this title'
},
}),
new DynamicTextAreaModel({
id: 'description',
name: 'dc.description',
}),
new DynamicTextAreaModel({
id: 'abstract',
name: 'dc.description.abstract',
}),
new DynamicTextAreaModel({
id: 'rights',
name: 'dc.rights',
}),
new DynamicTextAreaModel({
id: 'tableofcontents',
name: 'dc.description.tableofcontents',
}),
new DynamicTextAreaModel({
id: 'license',
name: 'dc.rights.license',
}),
new DynamicTextAreaModel({
id: 'provenance',
name: 'dc.description.provenance',
}),
];
public constructor(protected location: Location,
protected formService: DynamicFormService,
protected translate: TranslateService,
protected notificationsService: NotificationsService,
protected authService: AuthService,
protected dsoService: CommunityDataService,
protected requestService: RequestService,
protected objectCache: ObjectCacheService) {
super(location, formService, translate, notificationsService, authService, requestService, objectCache);
}
}

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