Skip to content
Draft
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
2 changes: 2 additions & 0 deletions client/eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ const jsRules = {
"dropdown",
"dropzone",
"enum",
"envi",
"envidat",
"etag",
"favicon",
"fetchable",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ export type DataConnectorSecretPatch = {
value: SecretValueNullable;
};
export type DataConnectorSecretPatchList = DataConnectorSecretPatch[];
export type DepositProvider = "zenodo";
export type DepositProvider = "zenodo" | "envidat";
export type DepositSourcePath = string;
export type DepositPost = {
name: DataConnectorName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1623,7 +1623,7 @@
},
"DepositProvider": {
"type": "string",
"enum": ["zenodo"]
"enum": ["zenodo", "envidat"]
},
"DepositStatus": {
"type": "string",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import {
ModalHeader,
} from "reactstrap";

import { WarnAlert } from "~/components/Alert";
import RtkOrDataServicesError from "~/components/errors/RtkOrDataServicesError";
import ExternalLink from "~/components/ExternalLink";
import { Loader } from "~/components/Loader";
import {
useGetOauth2ConnectionsQuery,
Expand All @@ -25,7 +27,7 @@ import {
import { DataConnectorRead } from "../api/data-connectors.api";
import { usePostDepositsMutation } from "../api/data-connectors.enhanced-api";
import DepositIntegrationInfo from "./DepositIntegrationInfo";
import { PROVIDER_OPTIONS } from "./deposits.constants";
import { ENVIDAT_DASHBOARD_URL, PROVIDER_OPTIONS } from "./deposits.constants";
import { CreateDepositionForm } from "./deposits.types";

interface DepositCreationModalProps {
Expand All @@ -50,26 +52,29 @@ export default function DepositCreationModal({
});
const [postDeposit, result] = usePostDepositsMutation();

// Fetch connection information for the selected provider
// Fetch connection information for the selected provider if necessary
const userSelectedProvider = useWatch({
control,
name: "provider",
});
const targetProviderString = ["zenodo"].includes(userSelectedProvider)
? userSelectedProvider
: null;
const targetProviderIntegration = PROVIDER_OPTIONS.find(
(provider) =>
provider.value === userSelectedProvider && provider.integration,
)?.integration;

const {
data: providers,
error: providersError,
isLoading: isLoadingProviders,
} = useGetOauth2ProvidersQuery(targetProviderString ? undefined : skipToken);
} = useGetOauth2ProvidersQuery(
targetProviderIntegration ? undefined : skipToken,
);

const targetProvider = useMemo(() => {
return providers?.find(
(provider) => provider.kind === targetProviderString,
(provider) => provider.kind === targetProviderIntegration,
);
}, [providers, targetProviderString]);
}, [providers, targetProviderIntegration]);

const {
data: connections,
Expand Down Expand Up @@ -216,14 +221,21 @@ export default function DepositCreationModal({
Different platforms might have different
limitations/requirements.
</FormText>
<div className="mt-1">
<DepositIntegrationInfo
connection={targetConnection}
isError={!!error}
isLoading={isLoading}
provider={targetProvider}
/>
</div>
{targetProviderIntegration && (
<div className="mt-1">
<DepositIntegrationInfo
connection={targetConnection}
isError={!!error}
isLoading={isLoading}
provider={targetProvider}
/>
</div>
)}
{userSelectedProvider === "envidat" && (
<div className="mt-1">
<EnviDatWarning />
</div>
)}
</div>
</FormGroup>

Expand Down Expand Up @@ -259,3 +271,18 @@ export default function DepositCreationModal({
</Modal>
);
}

function EnviDatWarning() {
return (
<WarnAlert dismissible={false}>
<p className="mb-0">
You need an account with <code>Editor</code> permissions on the{" "}
<ExternalLink href={ENVIDAT_DASHBOARD_URL}>
EnviDat platform
</ExternalLink>{" "}
to publish Datasets. Please check your account before starting the
export.
</p>
</WarnAlert>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import {
ModalHeader,
} from "reactstrap";

import { WarnAlert } from "~/components/Alert";
import RtkOrDataServicesError from "~/components/errors/RtkOrDataServicesError";
import ExternalLink from "~/components/ExternalLink";
import { Loader } from "~/components/Loader";
import {
useGetOauth2ConnectionsQuery,
Expand All @@ -28,6 +30,7 @@ import {
usePostDepositsByDepositIdJobMutation,
} from "../api/data-connectors.enhanced-api";
import DepositIntegrationInfo from "./DepositIntegrationInfo";
import { ENVIDAT_DASHBOARD_URL, PROVIDER_OPTIONS } from "./deposits.constants";
import { EditDepositionForm } from "./deposits.types";

interface DepositEditModalProps {
Expand All @@ -53,16 +56,23 @@ export default function DepositEditModal({
usePatchDepositsByDepositIdMutation();
const [postJob, postJobResult] = usePostDepositsByDepositIdJobMutation();

// Fetch connection information for the target provider
// Fetch connection information for the selected provider if necessary
const targetProviderIntegration = PROVIDER_OPTIONS.find(
(provider) => provider.value === deposit?.provider && provider.integration,
)?.integration;

const {
data: providers,
error: providersError,
isLoading: isLoadingProviders,
} = useGetOauth2ProvidersQuery(deposit?.provider ? undefined : skipToken);

} = useGetOauth2ProvidersQuery(
targetProviderIntegration ? undefined : skipToken,
);
const targetProvider = useMemo(() => {
return providers?.find((provider) => provider.kind === deposit?.provider);
}, [providers, deposit?.provider]);
return providers?.find(
(provider) => provider.kind === targetProviderIntegration,
);
}, [providers, targetProviderIntegration]);

const {
data: connections,
Expand Down Expand Up @@ -216,14 +226,21 @@ export default function DepositEditModal({
need to change it, please delete this export and create a new
one with the desired configuration.
</FormText>
<div className="mt-1">
<DepositIntegrationInfo
connection={targetConnection}
isError={!!error}
isLoading={isLoading}
provider={targetProvider}
/>
</div>
{targetProviderIntegration && (
<div className="mt-1">
<DepositIntegrationInfo
connection={targetConnection}
isError={!!error}
isLoading={isLoading}
provider={targetProvider}
/>
</div>
)}
{deposit?.provider === "envidat" && (
<div className="mt-1">
<EnviDatWarning />
</div>
)}
</div>
</FormGroup>

Expand All @@ -244,7 +261,11 @@ export default function DepositEditModal({
<Button
color="primary"
data-cy="create-deposit-modal-button"
disabled={postJobResult.isLoading || patchDepositResult.isLoading}
disabled={
deposit.provider === "envidat" ||
postJobResult.isLoading ||
patchDepositResult.isLoading
}
type="submit"
>
{postJobResult.isLoading || patchDepositResult.isLoading ? (
Expand All @@ -270,3 +291,17 @@ export default function DepositEditModal({
</Modal>
);
}

function EnviDatWarning() {
return (
<WarnAlert dismissible={false}>
<p className="mb-0">
We do not support editing or re running exports to the{" "}
<ExternalLink href={ENVIDAT_DASHBOARD_URL}>
EnviDat platform
</ExternalLink>
. If you need, you can still delete this export and create a new one.
</p>
</WarnAlert>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@ import { ProviderOption } from "./deposits.types";

export const POLL_TIME_INACTIVE_DEPOSITS = 60_000;
export const POLL_TIME_ACTIVE_DEPOSITS = 5_000;

export const PROVIDER_OPTIONS: ProviderOption[] = [
{ value: "zenodo", label: "Zenodo" },
{ value: "zenodo", label: "Zenodo", integration: "zenodo" },
{ value: "envidat", label: "EnviDat", integration: undefined },
];
export const LAST_DEPOSIT_QUERY_PARAMS = { page: 1, per_page: 1 }; // We only consider the last deposit for now

// ? We only consider the last deposit for now
export const LAST_DEPOSIT_QUERY_PARAMS = { page: 1, per_page: 1 };

export const ENVIDAT_BASE_URL = "https://www.envidat.ch";
export const ENVIDAT_DASHBOARD_URL = `${ENVIDAT_BASE_URL}/#/dashboard`;
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
import { DepositProvider, DepositStatus } from "../api/data-connectors.api";

type DepositProviders = DepositProvider;

export interface CreateDepositionForm {
name: string;
path: string;
provider: DepositProvider;
provider: DepositProviders;
}
export interface EditDepositionForm {
name: string;
path: string;
status: DepositStatus;
}
export type ProviderOption = { value: DepositProvider; label: string };
export type ProviderOption = {
value: DepositProviders;
label: string;
integration?: string;
};
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,16 @@ export default function DataConnectorSettings() {
Delete
</Button>
)}
{lastDeposit && (
<Button
color="outline-primary"
data-cy="data-connector-deposits-show-logs-button"
onClick={toggleShowDepositLogsOpen}
>
<FileEarmarkText className={cx("bi", "me-1")} />
Show logs
</Button>
)}
{lastDeposit && lastDeposit.status !== "complete" && (
<Button
color={
Expand All @@ -303,14 +313,6 @@ export default function DataConnectorSettings() {
)}
{lastDeposit && lastDeposit.status === "upload_complete" && (
<>
<Button
color="outline-primary"
data-cy="data-connector-deposits-show-logs-button"
onClick={toggleShowDepositLogsOpen}
>
<FileEarmarkText className={cx("bi", "me-1")} />
Show logs
</Button>
<Button
color="primary"
data-cy="data-connector-deposits-finalize-button"
Expand Down
Loading