diff --git a/ui/src/lib/components/SurveyAdmin.svelte b/ui/src/lib/components/SurveyAdmin.svelte
index 784d033..b8418d6 100644
--- a/ui/src/lib/components/SurveyAdmin.svelte
+++ b/ui/src/lib/components/SurveyAdmin.svelte
@@ -34,10 +34,14 @@
})
}
+ let duplicateInProgress = false;
function duplicateSurvey() {
+ duplicateInProgress = true;
survey.duplicate().then((response) => {
+ duplicateInProgress = false;
goto(`surveys/${response.id}`);
}).catch((error) => {
+ duplicateInProgress = false;
ToastsStore.addErrorToast({
msg: error,
});
@@ -157,14 +161,19 @@
diff --git a/ui/src/lib/surveys.js b/ui/src/lib/surveys.js
index 4009bfa..6b01b2d 100644
--- a/ui/src/lib/surveys.js
+++ b/ui/src/lib/surveys.js
@@ -105,31 +105,35 @@ export class Survey {
for (const q of questions) {
const oldQuestionId = q.id;
+ // This will create a new question with the same parameters
delete q.id;
+
+ // Also alter id_survey
q.id_survey = response.id;
- q.save().then((question) => {
- q.id = oldQuestionId;
- // Now recopy proposals
- if (q.kind == "mcq" || q.kind == "ucq") {
- q.getProposals().then((proposals) => {
- for (const p of proposals) {
- delete p.id;
- p.id_question = question.id;
- p.save();
- }
- });
+ // This save will create
+ const question = await q.save();
+
+ // Revert to the old question ID to perform the next retrievals
+ q.id = oldQuestionId;
+
+ // Now recopy proposals
+ if (q.kind == "mcq" || q.kind == "ucq") {
+ const proposals = await q.getProposals();
+ for (const p of proposals) {
+ delete p.id;
+ p.id_question = question.id;
+ await p.save();
}
+ }
- // Now recopy correction templates
- getCorrectionTemplates(oldQuestionId).then((cts) => {
- for (const ct of cts) {
- delete ct.id;
- ct.id_question = question.id;
- ct.save();
- }
- });
- });
+ // Now recopy correction templates
+ const cts = await getCorrectionTemplates(oldQuestionId);
+ for (const ct of cts) {
+ delete ct.id;
+ ct.id_question = question.id;
+ ct.save();
+ }
}
return response;