Skip to content

Commit a923523

Browse files
authored
Merge pull request #606 from EPantelaios/fix/CAT-1058
[CAT-1058] - Update Zenodo State Keywords for API Compatibility
2 parents d9bfda1 + f49ec3f commit a923523

File tree

3 files changed

+67
-62
lines changed

3 files changed

+67
-62
lines changed

src/pages/assessments/AssessmentsList.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ interface ZenodoModalConfig {
9393
name: string;
9494
id: string;
9595
isPublished: boolean;
96-
zenodoUrl?: string;
9796
}
9897

9998
interface PublishModalConfig {
@@ -162,7 +161,6 @@ function AssessmentsList({ listPublic = false }: AssessmentListProps) {
162161
name: "",
163162
id: "",
164163
isPublished: false,
165-
zenodoUrl: "",
166164
},
167165
);
168166

@@ -383,7 +381,6 @@ function AssessmentsList({ listPublic = false }: AssessmentListProps) {
383381
name: item.name,
384382
id: item.id,
385383
isPublished: item.zenodo_published,
386-
zenodoUrl: item.zenodo_deposit_url,
387384
});
388385
};
389386

@@ -451,15 +448,14 @@ function AssessmentsList({ listPublic = false }: AssessmentListProps) {
451448
name={zenodoModalConfig.name}
452449
id={zenodoModalConfig.id}
453450
isPublished={zenodoModalConfig.isPublished}
454-
zenodoUrl={zenodoModalConfig.zenodoUrl}
451+
zenodoUrl={qAssessment?.zenodo_deposit_url}
455452
zenodoState={qAssessment?.zenodo_publication_state}
456453
onHide={() => {
457454
setZenodoModalConfig({
458455
show: false,
459456
name: "",
460457
id: "",
461458
isPublished: false,
462-
zenodoUrl: "",
463459
});
464460
}}
465461
onPublish={handlePublishToZenodo}

src/pages/assessments/components/ZenodoModal.tsx

Lines changed: 65 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import { AuthContext } from "@/auth";
77
import { useContext } from "react";
88

99
type ZenodoState =
10-
| "PROCESS_INIT"
11-
| "DEPOSIT_CREATED"
12-
| "FILE_UPLOADED_TO_DEPOSIT"
13-
| "DEPOSIT_PUBLISHED"
14-
| "PROCESS_COMPLETED"
15-
| "PROCESS_FAILED";
10+
| "PROCESS INIT"
11+
| "DEPOSIT CREATED"
12+
| "FILE UPLOADED TO DEPOSIT"
13+
| "DEPOSIT PUBLISHED"
14+
| "PROCESS COMPLETED"
15+
| "PROCESS FAILED";
1616

1717
interface ZenodoModalProps {
1818
show: boolean;
@@ -49,37 +49,48 @@ function ZenodoModal({
4949

5050
useEffect(() => {
5151
let interval: NodeJS.Timeout;
52+
let timeout: NodeJS.Timeout;
5253

5354
if (
5455
show &&
55-
zenodoState !== "PROCESS_COMPLETED" &&
56-
zenodoState !== "PROCESS_FAILED" &&
56+
zenodoState !== "PROCESS COMPLETED" &&
57+
zenodoState !== "PROCESS FAILED" &&
5758
onRefetch
5859
) {
5960
interval = setInterval(() => {
6061
onRefetch();
61-
}, 1000); // Poll every 2 seconds
62+
}, 1000); // Poll every 1 second
63+
64+
// Stop polling after 1 minute to prevent infinite polling
65+
timeout = setTimeout(() => {
66+
if (interval) {
67+
clearInterval(interval);
68+
}
69+
}, 20000); // 20 seconds timeout
6270
}
6371

6472
return () => {
6573
if (interval) {
6674
clearInterval(interval);
6775
}
76+
if (timeout) {
77+
clearTimeout(timeout);
78+
}
6879
};
6980
}, [show, zenodoState, onRefetch]);
7081

7182
const isInProgressState = (state: string): boolean => {
7283
return [
73-
"PROCESS_INIT",
74-
"DEPOSIT_CREATED",
75-
"FILE_UPLOADED_TO_DEPOSIT",
76-
"DEPOSIT_PUBLISHED",
84+
"PROCESS INIT",
85+
"DEPOSIT CREATED",
86+
"FILE UPLOADED TO DEPOSIT",
87+
"DEPOSIT PUBLISHED",
7788
].includes(state);
7889
};
7990

8091
// Reset publishing state when process fails
8192
useEffect(() => {
82-
if (zenodoState === "PROCESS_FAILED" && isPublishing) {
93+
if (zenodoState === "PROCESS FAILED" && isPublishing) {
8394
setIsPublishing(false);
8495
}
8596
}, [zenodoState, isPublishing]);
@@ -97,22 +108,22 @@ function ZenodoModal({
97108
const getStepStatus = (stepState: ZenodoState) => {
98109
// If we're publishing but no zenodo_publication_state yet, show first step as active
99110
if (isPublishing && !zenodoState) {
100-
return stepState === "PROCESS_INIT" ? "active" : "pending";
111+
return stepState === "PROCESS INIT" ? "active" : "pending";
101112
}
102113

103114
if (!zenodoState) return "pending";
104115

105116
const stateOrder = [
106-
"PROCESS_INIT",
107-
"DEPOSIT_CREATED",
108-
"FILE_UPLOADED_TO_DEPOSIT",
109-
"DEPOSIT_PUBLISHED",
110-
"PROCESS_COMPLETED",
117+
"PROCESS INIT",
118+
"DEPOSIT CREATED",
119+
"FILE UPLOADED TO DEPOSIT",
120+
"DEPOSIT PUBLISHED",
121+
"PROCESS COMPLETED",
111122
];
112123
const currentIndex = stateOrder.indexOf(zenodoState);
113124
const stepIndex = stateOrder.indexOf(stepState);
114125

115-
if (zenodoState === "PROCESS_FAILED") return "failed";
126+
if (zenodoState === "PROCESS FAILED") return "failed";
116127
if (stepIndex < currentIndex) return "completed";
117128
if (stepIndex === currentIndex) return "active";
118129
return "pending";
@@ -147,16 +158,16 @@ function ZenodoModal({
147158
if (!zenodoState) return 0;
148159

149160
const stateOrder = [
150-
"PROCESS_INIT",
151-
"DEPOSIT_CREATED",
152-
"FILE_UPLOADED_TO_DEPOSIT",
153-
"DEPOSIT_PUBLISHED",
154-
"PROCESS_COMPLETED",
161+
"PROCESS INIT",
162+
"DEPOSIT CREATED",
163+
"FILE UPLOADED TO DEPOSIT",
164+
"DEPOSIT PUBLISHED",
165+
"PROCESS COMPLETED",
155166
];
156167
const currentIndex = stateOrder.indexOf(zenodoState);
157168

158-
if (zenodoState === "PROCESS_FAILED") return 100;
159-
if (zenodoState === "PROCESS_COMPLETED") return 100;
169+
if (zenodoState === "PROCESS FAILED") return 100;
170+
if (zenodoState === "PROCESS COMPLETED") return 100;
160171

161172
return Math.max(0, (currentIndex / (stateOrder.length - 1)) * 100);
162173
};
@@ -222,7 +233,7 @@ function ZenodoModal({
222233
<>
223234
{(zenodoState &&
224235
(isInProgressState(zenodoState) ||
225-
zenodoState === "PROCESS_FAILED")) ||
236+
zenodoState === "PROCESS FAILED")) ||
226237
isPublishing ? (
227238
<>
228239
<div className="mb-3">
@@ -231,86 +242,86 @@ function ZenodoModal({
231242

232243
<div className="steps-container">
233244
<div
234-
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("PROCESS_INIT")}`}
245+
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("PROCESS INIT")}`}
235246
>
236-
{renderStepIcon(getStepStatus("PROCESS_INIT"))}
247+
{renderStepIcon(getStepStatus("PROCESS INIT"))}
237248
<span
238-
className={`ms-2 ${["completed", "active"].includes(getStepStatus("PROCESS_INIT")) ? "text-primary" : ""}`}
249+
className={`ms-2 ${["completed", "active"].includes(getStepStatus("PROCESS INIT")) ? "text-primary" : ""}`}
239250
>
240251
Initializing Process
241252
</span>
242253
</div>
243254

244255
<div
245-
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("DEPOSIT_CREATED")}`}
256+
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("DEPOSIT CREATED")}`}
246257
>
247-
{renderStepIcon(getStepStatus("DEPOSIT_CREATED"))}
258+
{renderStepIcon(getStepStatus("DEPOSIT CREATED"))}
248259
<span
249-
className={`ms-2 ${["completed", "active"].includes(getStepStatus("DEPOSIT_CREATED")) ? "text-primary" : ""}`}
260+
className={`ms-2 ${["completed", "active"].includes(getStepStatus("DEPOSIT CREATED")) ? "text-primary" : ""}`}
250261
>
251262
Creating Zenodo Deposit
252263
</span>
253264
</div>
254265

255266
<div
256-
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("FILE_UPLOADED_TO_DEPOSIT")}`}
267+
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("FILE UPLOADED TO DEPOSIT")}`}
257268
>
258269
{renderStepIcon(
259-
getStepStatus("FILE_UPLOADED_TO_DEPOSIT"),
270+
getStepStatus("FILE UPLOADED TO DEPOSIT"),
260271
)}
261272
<span
262-
className={`ms-2 ${["completed", "active"].includes(getStepStatus("FILE_UPLOADED_TO_DEPOSIT")) ? "text-primary" : ""}`}
273+
className={`ms-2 ${["completed", "active"].includes(getStepStatus("FILE UPLOADED TO DEPOSIT")) ? "text-primary" : ""}`}
263274
>
264275
Uploading Assessment File
265276
</span>
266277
</div>
267278

268279
<div
269-
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("DEPOSIT_PUBLISHED")}`}
280+
className={`step-item d-flex align-items-center mb-2 ${getStepStatus("DEPOSIT PUBLISHED")}`}
270281
>
271-
{renderStepIcon(getStepStatus("DEPOSIT_PUBLISHED"))}
282+
{renderStepIcon(getStepStatus("DEPOSIT PUBLISHED"))}
272283
<span
273-
className={`ms-2 ${["completed", "active"].includes(getStepStatus("DEPOSIT_PUBLISHED")) ? "text-primary" : ""}`}
284+
className={`ms-2 ${["completed", "active"].includes(getStepStatus("DEPOSIT PUBLISHED")) ? "text-primary" : ""}`}
274285
>
275286
Publishing to Repository
276287
</span>
277288
</div>
278289

279290
<div
280291
className={`step-item d-flex align-items-center mb-2 ${
281-
zenodoState === "PROCESS_COMPLETED"
292+
zenodoState === "PROCESS COMPLETED"
282293
? "completed"
283-
: zenodoState === "PROCESS_FAILED"
294+
: zenodoState === "PROCESS FAILED"
284295
? "failed"
285296
: "pending"
286297
}`}
287298
>
288-
{zenodoState === "PROCESS_COMPLETED" ? (
299+
{zenodoState === "PROCESS COMPLETED" ? (
289300
<FaCheck className="text-success" />
290-
) : zenodoState === "PROCESS_FAILED" ? (
301+
) : zenodoState === "PROCESS FAILED" ? (
291302
<FaTimes className="text-danger" />
292303
) : (
293304
<div className="step-pending-icon"></div>
294305
)}
295306
<span
296307
className={`ms-2 ${
297-
zenodoState === "PROCESS_COMPLETED"
308+
zenodoState === "PROCESS COMPLETED"
298309
? "text-success fw-bold"
299-
: zenodoState === "PROCESS_FAILED"
310+
: zenodoState === "PROCESS FAILED"
300311
? "text-danger fw-bold"
301312
: ""
302313
}`}
303314
>
304-
{zenodoState === "PROCESS_COMPLETED"
315+
{zenodoState === "PROCESS COMPLETED"
305316
? "Successfully Published!"
306-
: zenodoState === "PROCESS_FAILED"
317+
: zenodoState === "PROCESS FAILED"
307318
? "Publishing Failed"
308319
: "Finalizing..."}
309320
</span>
310321
</div>
311322
</div>
312323

313-
{zenodoState === "PROCESS_FAILED" && (
324+
{zenodoState === "PROCESS FAILED" && (
314325
<Alert variant="danger" className="mt-3">
315326
<small>
316327
<strong>Error:</strong> Publishing to Zenodo failed.
@@ -319,11 +330,8 @@ function ZenodoModal({
319330
</Alert>
320331
)}
321332

322-
{zenodoState === "PROCESS_COMPLETED" && zenodoUrl && (
333+
{zenodoState === "PROCESS COMPLETED" && zenodoUrl && (
323334
<Alert variant="success" className="mt-3">
324-
<Alert.Heading className="h6">
325-
🎉 Successfully Published!
326-
</Alert.Heading>
327335
<p className="mb-2">
328336
Your assessment has been successfully published to
329337
Zenodo.
@@ -375,9 +383,9 @@ function ZenodoModal({
375383
>
376384
{t("buttons.close")}
377385
</Button>
378-
{!isPublished && zenodoState !== "PROCESS_COMPLETED" && (
386+
{!isPublished && zenodoState !== "PROCESS COMPLETED" && (
379387
<Button
380-
variant={zenodoState === "PROCESS_FAILED" ? "warning" : "success"}
388+
variant={zenodoState === "PROCESS FAILED" ? "warning" : "success"}
381389
onClick={handlePublish}
382390
disabled={
383391
isPublishing ||
@@ -397,7 +405,7 @@ function ZenodoModal({
397405
</>
398406
) : (
399407
<>
400-
{zenodoState === "PROCESS_FAILED"
408+
{zenodoState === "PROCESS FAILED"
401409
? "Retry Publishing to Zenodo"
402410
: "Request to Publish to Zenodo"}
403411
</>

src/types/assessment.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ export interface AssessmentDetailsResponse {
452452
assessment_doc: Assessment;
453453
assessment_doc_version?: string;
454454
zenodo_publication_state?: string;
455+
zenodo_deposit_url?: string;
455456
}
456457

457458
export interface ObjectListItem {

0 commit comments

Comments
 (0)