Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Added

- Edit Dataset Template Integration: "Edit Template" dropdown on the Dataset Templates listing now opens the Metadata or Terms editor and shows a "Template updated" toast on return.
- External Tools: Added guestbook and terms modal for Dataverse external tools.
- Manage Guestbooks page integration, including:
- a guestbooks table with sorting, enable/disable actions, preview, and per-guestbook response download
- Create Guestbook and Download All Responses actions
Expand All @@ -25,8 +27,13 @@ This changelog follows the principles of [Keep a Changelog](https://keepachangel

### Fixed

- After saving on either Edit Template tab (Metadata or Terms), the user is redirected to the templates listing with a success toast instead of staying on the edit page.
- Edit Template breadcrumb on the Terms page no longer renders the dataset's "Terms and Guestbook" label (templates have no guestbook).

### Removed

- Standalone `EditTemplateMetadataFactory` and `EditTemplateTermsFactory` route factories — replaced by a single `EditTemplateFactory` dispatcher that selects the right page based on `editMode`.

---

## [v0.3.1] -- 2026-04-30
Expand All @@ -49,6 +56,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
- Dataset Templates UI integration, including create/edit flows, previews, and skeleton states.
- Added a message note to the login page
- Download with terms of use and guestbook.
- Show terms modal before download when dataset has custom terms, a non-default license (not CC0 1.0), or a guestbook. Draft datasets and dataset editors bypass the modal.
Expand Down
26 changes: 25 additions & 1 deletion public/locales/en/datasetTemplates.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,12 @@
"deleteSuccess": "Template deleted.",
"deleteError": "Something went wrong deleting the template. Try again later.",
"copySuccess": "Template copied.",
"copyError": "Something went wrong copying the template. Try again later."
"copyError": "Something went wrong copying the template. Try again later.",
"setDefaultSuccess": "The template has been selected as the default template for this dataverse.",
"setDefaultError": "Something went wrong setting the template as default. Try again later.",
"unsetDefaultSuccess": "The template has been removed as the default template for this dataverse.",
"unsetDefaultError": "Something went wrong removing the default template. Try again later.",
"editSuccess": "Template updated."
},
"copyNamePrefix": "copy {{name}}",
"preview": {
Expand Down Expand Up @@ -92,5 +97,24 @@
"termsOfAccessLabel": "Terms of Access for Restricted Files",
"dataAccessPlaceLabel": "Data Access Place"
}
},
"editTemplate": {
"metadataPageTitle": "Edit Template Metadata",
"termsPageTitle": "Edit Template Terms",
"actions": {
"metadata": "Metadata",
"terms": "Terms"
},
"alerts": {
"metadataUpdated": "Template metadata updated.",
"licenseUpdated": "Template license/terms updated.",
"termsOfAccessUpdated": "Template terms of access updated."
},
"errors": {
"saveMetadataFailed": "Something went wrong updating the template metadata. Try again later.",
"saveLicenseFailed": "Something went wrong updating the template license/terms. Try again later.",
"saveTermsOfAccessFailed": "Something went wrong updating the template terms of access. Try again later.",
"loadingTemplate": "Something went wrong loading the template. Try again later."
}
}
}
26 changes: 25 additions & 1 deletion public/locales/es/datasetTemplates.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,12 @@
"deleteSuccess": "Plantilla eliminada.",
"deleteError": "Algo salió mal al eliminar la plantilla. Inténtelo de nuevo más tarde.",
"copySuccess": "Plantilla copiada.",
"copyError": "Algo salió mal al copiar la plantilla. Inténtelo de nuevo más tarde."
"copyError": "Algo salió mal al copiar la plantilla. Inténtelo de nuevo más tarde.",
"setDefaultSuccess": "La plantilla ha sido seleccionada como la plantilla predeterminada para este dataverse.",
"setDefaultError": "Algo salió mal al establecer la plantilla como predeterminada. Inténtelo de nuevo más tarde.",
"unsetDefaultSuccess": "La plantilla ha sido eliminada como la plantilla predeterminada para este dataverse.",
"unsetDefaultError": "Algo salió mal al eliminar la plantilla predeterminada. Inténtelo de nuevo más tarde.",
"editSuccess": "Plantilla actualizada."
},
"copyNamePrefix": "copia {{name}}",
"preview": {
Expand Down Expand Up @@ -91,5 +96,24 @@
"termsOfAccessLabel": "Términos de acceso para archivos restringidos",
"dataAccessPlaceLabel": "Lugar de acceso a los datos"
}
},
"editTemplate": {
"metadataPageTitle": "Editar metadatos de plantilla",
"termsPageTitle": "Editar términos de plantilla",
"actions": {
"metadata": "Metadatos",
"terms": "Términos"
},
"alerts": {
"metadataUpdated": "Metadatos de plantilla actualizados.",
"licenseUpdated": "Licencia/términos de plantilla actualizados.",
"termsOfAccessUpdated": "Términos de acceso de plantilla actualizados."
},
"errors": {
"saveMetadataFailed": "Algo salió mal al actualizar los metadatos de la plantilla. Inténtelo de nuevo más tarde.",
"saveLicenseFailed": "Algo salió mal al actualizar la licencia/términos de la plantilla. Inténtelo de nuevo más tarde.",
"saveTermsOfAccessFailed": "Algo salió mal al actualizar los términos de acceso de la plantilla. Inténtelo de nuevo más tarde.",
"loadingTemplate": "Algo salió mal al cargar la plantilla. Inténtelo de nuevo más tarde."
}
}
}
12 changes: 6 additions & 6 deletions src/router/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ const CreateTemplatePage = lazy(() =>
)
)

const EditDatasetTemplateTermsPage = lazy(() =>
import('../sections/templates/edit-template-terms/EditTemplateTermsFactory').then(
({ EditTemplateTermsFactory }) => ({
default: () => EditTemplateTermsFactory.create()
const EditDatasetTemplatePage = lazy(() =>
import('../sections/templates/edit-template/EditTemplateFactory').then(
({ EditTemplateFactory }) => ({
default: () => EditTemplateFactory.create()
})
)
)
Expand Down Expand Up @@ -363,10 +363,10 @@ export const routes: RouteObject[] = [
errorElement: <ErrorPage />
},
{
path: Route.TEMPLATES_EDIT_TERMS,
path: Route.TEMPLATES_EDIT,
element: (
<Suspense fallback={<AppLoader />}>
<EditDatasetTemplateTermsPage />
<EditDatasetTemplatePage />
</Suspense>
),
errorElement: <ErrorPage />
Expand Down
27 changes: 21 additions & 6 deletions src/sections/Route.enum.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ export enum Route {
GUESTBOOKS = '/:collectionId/guestbooks',
GUESTBOOKS_CREATE = '/:collectionId/guestbooks/create',
TEMPLATES_CREATE = '/:collectionId/templates/create',
TEMPLATES_EDIT_METADATA = '/:collectionId/templates/:templateId/edit/metadata',
TEMPLATES_EDIT_TERMS = '/:collectionId/templates/:templateId/edit/terms',
TEMPLATES_EDIT = '/templates/edit',
FEATURED_ITEM = '/featured-item/:parentCollectionId/:featuredItemId',
NOT_FOUND_PAGE = '/404',
AUTH_CALLBACK = '/auth-callback',
Expand All @@ -44,10 +43,18 @@ export const RouteWithParams = {
GUESTBOOKS: (collectionId: string) => `/${collectionId}/guestbooks`,
GUESTBOOKS_CREATE: (collectionId: string) => `/${collectionId}/guestbooks/create`,
TEMPLATES_CREATE: (collectionId: string) => `/${collectionId}/templates/create`,
TEMPLATES_EDIT_METADATA: (collectionId: string, templateId: number | string) =>
`/${collectionId}/templates/${templateId}/edit/metadata`,
TEMPLATES_EDIT_TERMS: (collectionId: string, templateId: number | string) =>
`/${collectionId}/templates/${templateId}/edit/terms`,
TEMPLATES_EDIT: (
collectionId: string,
templateId: number | string,
editMode: TemplateEditMode
) => {
const searchParams = new URLSearchParams({
[QueryParamKey.ID]: templateId.toString(),
[QueryParamKey.OWNER_ID]: collectionId,
[QueryParamKey.EDIT_MODE]: editMode
})
return `${Route.TEMPLATES_EDIT}?${searchParams.toString()}`
},
EDIT_FILE_METADATA: (
datasetPersistentId: string,
datasetVersion: string,
Expand Down Expand Up @@ -93,9 +100,17 @@ export enum QueryParamKey {
COLLECTION_ID = 'collectionId',
TAB = 'tab',
FILE_ID = 'id',
ID = 'id',
OWNER_ID = 'ownerId',
EDIT_MODE = 'editMode',
DATASET_VERSION = 'datasetVersion',
REFERRER = 'referrer',
AUTH_STATE = 'state',
VALID_TOKEN_BUT_NOT_LINKED_ACCOUNT = 'validTokenButNotLinkedAccount',
TOOL_TYPE = 'toolType'
}

export enum TemplateEditMode {
METADATA = 'METADATA',
LICENSE = 'LICENSE'
}
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ export function EditTermsOfAccess({ onFormStateChange }: EditTermsOfAccessProps)
disabled={isLoading || (!isRequestAccessEnabled && !isTermsOfAccessProvided)}>
{isLoading ? tShared('saving') : tShared('saveChanges')}
</Button>
<Button variant="secondary" type="button" onClick={handleCancel}>
<Button type="button" variant="secondary" disabled={isLoading} onClick={handleCancel}>
{tShared('cancel')}
</Button>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,17 @@
margin-bottom: $spacer;
}

.required-field-text {
display: flex;
flex-direction: column;
}

.accordion {
margin-top: $spacer;
}

.form-actions {
display: flex;
gap: 1rem;
margin-top: $spacer;
}
Loading
Loading