Skip to content
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
8fb9658
feat: view guestbook and download file with guestbook
ChengShi-1 Feb 27, 2026
1ac21f6
feat: add submit multiple files with guestbook
ChengShi-1 Mar 3, 2026
d256ae4
fix: dataset test error
ChengShi-1 Mar 4, 2026
3ceaf98
feat: tests
ChengShi-1 Mar 4, 2026
54f7a0e
feat: write storybook and more tests
ChengShi-1 Mar 4, 2026
18691cb
fix: test useGetDatasetVersionDiff.spec
ChengShi-1 Mar 5, 2026
9bf054e
fix: increase test coverage, and disable edit names and email in gues…
ChengShi-1 Mar 5, 2026
152cfcd
fix: remove .only
ChengShi-1 Mar 6, 2026
3a8f6a3
fix: increase test coverage
ChengShi-1 Mar 6, 2026
6faaeb4
fix: increase test coverage
ChengShi-1 Mar 6, 2026
9c59921
fix: optimize the structure
ChengShi-1 Mar 9, 2026
983268d
fix: tests failing
ChengShi-1 Mar 9, 2026
b67702a
add e2e test, update download modal
ChengShi-1 Mar 11, 2026
9e1b4bd
fix: test custom terms
ChengShi-1 Mar 11, 2026
b876d24
package.json update
ChengShi-1 Mar 11, 2026
e368ef0
feat: add clear selection to edit guestbook page
ChengShi-1 Mar 12, 2026
d14878d
fix: storybook and fix tests
ChengShi-1 Mar 13, 2026
6540c6f
update with js-dataverse
ChengShi-1 Mar 18, 2026
d5ae0cd
fix: e2e test file download
ChengShi-1 Mar 18, 2026
20f6131
fix: Copilot review
ChengShi-1 Mar 18, 2026
6261406
fix: test error
ChengShi-1 Mar 18, 2026
90c375e
fix: small fix on removing custom question url
ChengShi-1 Mar 19, 2026
6ece880
cherry pick the guestbook review
ChengShi-1 Mar 23, 2026
6bf616b
fix: use signedURL Download for no guestbook files
ChengShi-1 Mar 24, 2026
51318d3
fix: use e2e errpr
ChengShi-1 Mar 24, 2026
55cbbaf
fix: add format to download api
ChengShi-1 Mar 25, 2026
1a2d5e2
Merge branch 'develop' into 896-add-terms-of-use-and-guestbook-to-fil…
ChengShi-1 Mar 25, 2026
ec641f5
chore: remove console.log
ChengShi-1 Mar 25, 2026
6eef084
fix: change jsDatasetMapper downloadurls still back to persistenID
ChengShi-1 Mar 25, 2026
dba18f8
fix: Test errors on jsDatasetMapper downloadurls
ChengShi-1 Mar 25, 2026
c53bf6e
fix: update the guestbookID and other info to AccessFile component
ChengShi-1 Mar 25, 2026
5146f52
fix: duplicated text and close modal before error
ChengShi-1 Mar 26, 2026
4e93a2e
fix: dataset file download
ChengShi-1 Mar 30, 2026
78a5bbb
fix: Added an [enabled] prevent multiple calls of GetGuestbook and cl…
ChengShi-1 Mar 31, 2026
47cfd49
feat: disallow guestbook if it's a draft or edit permission
ChengShi-1 Apr 1, 2026
0a0a9f3
fix: flaky test in collectionItemPanel
ChengShi-1 Apr 1, 2026
87c3919
fix: permission has to change in tests
ChengShi-1 Apr 1, 2026
56c70ce
fix: one permission didn't change
ChengShi-1 Apr 2, 2026
03a1008
Merge branch 'develop' into 896-add-terms-of-use-and-guestbook-to-fil…
ChengShi-1 Apr 7, 2026
7c2b5e0
update js-dataverse to point to merged version
ekraffmiller Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel
- Added Notifications tab in Account Page
- Added runtime configuration options for homepage branding and support link.
- Added an environment variable to docker-compose-dev.yml to hide the OIDC client used in the SPA from the JSF frontend: DATAVERSE_AUTH_OIDC_HIDDEN_JSF: 1
- Download with terms of use and guestbook.

### Changed

Expand Down
6 changes: 3 additions & 3 deletions dev-env/docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ services:
-Ddataverse.files.s3.connection-pool-size=2048
-Ddataverse.files.s3.custom-endpoint-region=us-east-1
-Ddataverse.files.s3.custom-endpoint-url=https://s3.us-east-1.amazonaws.com
# We publish the port on the host machine instead of just exposing it within the network, so that the browser can access the URLs of images generated by Dataverse (http://localhost:8080...).
# This is necessary because the dev_nginx proxy is placed on top of the Dataverse service, making those URLs unreachable unless this port is exposed.
# We publish the port on the host machine instead of just exposing it within the network, so that the browser can access the URLs of images generated by Dataverse (http://localhost:8080...).
# This is necessary because the dev_nginx proxy is placed on top of the Dataverse service, making those URLs unreachable unless this port is exposed.
# This workaround is only necessary and intended for the local dev environment and will not be used in the remote environment, where we use a production DNS.
ports:
- '8080:8080'
Expand Down Expand Up @@ -214,7 +214,7 @@ services:
- DATAVERSE_DB_PORT=5432
- DATAVERSE_DB_USER=${DATAVERSE_DB_USER}
- DATAVERSE_DB_PASSWORD=secret
- DATAVERSE_BASE_URL=http://dataverse:8080
- DATAVERSE_BASE_URL=http://localhost:8000
networks:
dataverse:
aliases:
Expand Down
35 changes: 35 additions & 0 deletions dev-env/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ http {
# Default route for other URLs
location / {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Keycloak reverse proxy for /realms
Expand All @@ -23,31 +28,61 @@ http {
# Specific route for /resources/images
location /resources/images {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/css
location /resources/css {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/js
location /resources/js {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/dev
location /resources/dev {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/fontcustom
location /resources/fontcustom {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/iqbs
location /resources/iqbs {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# General route for other /resources routes, handled by Keycloak
Expand Down
2 changes: 1 addition & 1 deletion dev-env/shib-dev-env/docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ services:
- DATAVERSE_DB_PORT=5432
- DATAVERSE_DB_USER=${DATAVERSE_DB_USER}
- DATAVERSE_DB_PASSWORD=secret
- DATAVERSE_BASE_URL=http://dataverse:8080
- DATAVERSE_BASE_URL=https://localhost
networks:
dataverse:
aliases:
Expand Down
35 changes: 35 additions & 0 deletions dev-env/shib-dev-env/nginx/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ http {
# Default route for other URLs
location / {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Keycloak reverse proxy for /realms
Expand All @@ -26,31 +31,61 @@ http {
# Specific route for /resources/images
location /resources/images {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/css
location /resources/css {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/js
location /resources/js {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/dev
location /resources/dev {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/fontcustom
location /resources/fontcustom {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# Specific route for /resources/iqbs
location /resources/iqbs {
proxy_pass http://dataverse:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
}

# General route for other /resources routes, handled by Keycloak
Expand Down
20 changes: 10 additions & 10 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"@dnd-kit/sortable": "8.0.0",
"@dnd-kit/utilities": "3.2.2",
"@faker-js/faker": "7.6.0",
"@iqss/dataverse-client-javascript": "2.1.0-alpha.1",
"@iqss/dataverse-client-javascript": "2.1.0-pr438.62748a8",
"@iqss/dataverse-design-system": "*",
Copy link

Copilot AI Mar 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The dependency is pinned to a PR-specific build (2.1.0-pr429.f4e6bd4). This is risky for reproducible builds since PR build tags can be moved/removed, and it makes it harder to reason about what API surface is guaranteed. Prefer upgrading to a released semver version (or a stable pre-release) once the upstream change is merged, and document/track this temporary pin if it must remain for now.

Suggested change
"@iqss/dataverse-design-system": "*",
"@iqss/dataverse-design-system": "1.0.0",

Copilot uses AI. Check for mistakes.
"@istanbuljs/nyc-config-typescript": "1.0.2",
"@tanstack/react-table": "8.9.2",
Expand Down
1 change: 1 addition & 0 deletions packages/design-system/src/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export { NavbarDropdown } from './components/navbar/navbar-dropdown/NavbarDropdo
export { ThemeProvider, useTheme } from './components/theme/ThemeProvider'
export { Breadcrumb } from './components/breadcrumb/Breadcrumb'
export { Alert } from './components/alert/Alert'
export type { AlertVariant } from './components/alert/AlertVariant'
export { Tabs } from './components/tabs/Tabs'
export { Accordion } from './components/accordion/Accordion'
export { ButtonGroup } from './components/button-group/ButtonGroup'
Expand Down
4 changes: 2 additions & 2 deletions packages/design-system/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
"jsx": "react-jsx"
},
"include": ["src", "tests", "vite.config.ts", "cypress.config.ts", ".storybook/test-runner.ts"],
"exclude": ["tests/**/**.spec.ts", "tests/**/**.spec.tsx"]
Expand Down
17 changes: 12 additions & 5 deletions public/locales/en/dataset.json
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,11 @@
"requestAccessTip": "If checked, users can request access to the restricted files in this dataset.",
"requestAccessTrue": "Users may request access to files.",
"requestAccessFalse": "Users may not request access to files.",
"guestbookTitle": "Guestbook",
"guestbookTip": "User information (i.e., name, email, institution, and position) will be collected when files are downloaded.",
"guestbookDescription": "The following guestbook will prompt a user to provide additional information when downloading a file.",
"noGuestbookAssigned": "No guestbook is assigned to this dataset so users will not be prompted to provide any information when downloading files. To learn more about guestbooks, visit the <anchor>Dataset Guestbook</anchor> section of the User Guide.",
"guestbookPreviewButton": "Preview Guestbook",
"restrictedFilesTip": "The number of restricted files in this dataset.",
"dataAccessPlaceTip": "If the data is not only in Dataverse, list the location(s) where the data are currently stored.",
"originalArchiveTip": "Archive from which the data was obtained.",
Expand Down Expand Up @@ -350,7 +355,7 @@
"tabs": {
"datasetTerms": "Dataset Terms",
"restrictedFilesTerms": "Restricted Files + Terms of Access",
"guestBook": "GuestBook"
"guestbook": "Guestbook"
},
"datasetTerms": {
"title": "Dataset Terms",
Expand All @@ -364,10 +369,11 @@
"title": "Restricted Files + Terms of Access",
"description": "Set up access restrictions and terms for restricted files in this dataset."
},
"guestBook": {
"title": "GuestBook",
"description": "Select a guestbook to have a user provide additional information when downloading a file.",
"testGuestbook": "Test Guestbook",
"guestbook": {
"title": "Guestbook",
"description": "Select a guestbook to have a user provide additional information when downloading a file. To learn more about guestbooks, visit the <anchor>Dataset Guestbook</anchor> section of the User Guide.",
"clearSelection": "Clear Selection",
"noGuestbooksEnabled": "There are no guestbooks enabled in {{collectionName}}. To create a guestbook, return to {{collectionName}}, click the \"Edit\" button and select the \"Dataset Guestbooks\" option.",
"previewButton": "Preview Guestbook"
},
"unsavedChangesModal": {
Expand All @@ -376,6 +382,7 @@
"stay": "Stay on this page",
"leave": "Leave without saving"
},
"defaultGuestbookUpdateError": "An error occurred while updating the dataset guestbook. Please try again.",
"defaultLicenseUpdateError": "An error occurred while updating the dataset license. Please try again.",
"defaultTermsOfAccessUpdateError": "An error occurred while updating the dataset terms of access. Please try again."
}
Expand Down
12 changes: 12 additions & 0 deletions public/locales/en/file.json
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,18 @@
"helpText": "Share this file on your favorite social media networks."
}
},
"actions": {
"optionsMenu": {
"guestbookCollectModal": {
"submitError": "Something went wrong submitting guestbook responses. Try again later.",
"downloadError": "Something went wrong downloading the file. Try again later.",
"validation": {
"required": "This field is required.",
"invalidEmail": "Please enter a valid email address."
}
}
}
},
"deleteFileModal": {
"title": "Delete File",
"message": "The file will be deleted after you click on the Delete button.",
Expand Down
13 changes: 13 additions & 0 deletions public/locales/en/files.json
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,19 @@
"title": "File Options",
"headers": {
"editOptions": "Edit Options"
},
"guestbookCollectModal": {
"title": "Dataset Guestbook",
"message": "A guestbook is assigned to this dataset. Users will be prompted to provide additional information when downloading files.",
"close": "Close",
"additionalQuestions": "Additional Questions",
"submitError": "Something went wrong submitting guestbook responses. Try again later.",
"downloadStarted": "Your download has started.",
"downloadError": "Something went wrong downloading the file. Try again later.",
"validation": {
"required": "This field is required.",
"invalidEmail": "Please enter a valid email address."
}
}
},
"alreadyDeletedAlert": {
Expand Down
31 changes: 31 additions & 0 deletions public/locales/en/guestbooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"title": "Dataset Guestbooks",
"errors": {
"getGuestbook": "Something went wrong getting the guestbook. Try again later."
},
"preview": {
"title": "Preview Guestbook",
"description": "Upon downloading files the guestbook asks for the following information.",
"guestbookNameLabel": "Guestbook Name",
"guestbookDataLabel": "Collected Data",
"guestbookDataTip": "User data collected by the guestbook.",
Comment on lines +10 to +11
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a duplicate of the next two items (collectedDataLabel, collectedDataTip) can we remove them?

"accountInformation": "Account Information",
"customQuestionsLabel": "Custom Questions",
"required": "Required",
"optional": "Optional"
},
"create": {
"fields": {
"dataCollected": {
"label": "Data Collected",
"help": "Dataverse account information that will be collected when a user downloads a file. Check the ones that will be required.",
"options": {
"name": "Name",
"email": "Email",
"institution": "Institution",
"position": "Position"
}
}
}
}
}
Loading
Loading