Skip to content

Commit 307e0aa

Browse files
authored
Merge pull request #2643 from themeum/fix/new-quiz-type-url-full-path-issue
Fix: New quiz types full url isue
2 parents ed0372b + c6d4f3f commit 307e0aa

5 files changed

Lines changed: 341 additions & 30 deletions

File tree

assets/src/js/v3/entries/course-builder/components/curriculum/QuestionList.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,27 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
431431
};
432432

433433
const handleDeleteQuestion = (index: number, question: QuizQuestion) => {
434+
if (question._data_status === QuizDataStatus.NEW) {
435+
const isMaskQuestionType =
436+
question.question_type === 'draw_image' ||
437+
question.question_type === 'pin_image' ||
438+
question.question_type === 'puzzle';
439+
440+
if (isMaskQuestionType) {
441+
const tempMaskValues = (question.question_answers || [])
442+
.flatMap((answer) => [answer.answer_two_gap_match, answer.image_url])
443+
.map((value) => (typeof value === 'string' ? value.trim() : ''))
444+
.filter(Boolean);
445+
446+
if (tempMaskValues.length > 0) {
447+
form.setValue('deleted_temp_mask_values', [
448+
...(form.getValues('deleted_temp_mask_values') || []),
449+
...tempMaskValues,
450+
]);
451+
}
452+
}
453+
}
454+
434455
removeQuestion(index);
435456

436457
if (activeQuestionIndex === index) {

assets/src/js/v3/entries/course-builder/services/quiz.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ interface QuizPayload {
6767
payload: QuizResponseWithStatus;
6868
deleted_question_ids?: ID[];
6969
deleted_answer_ids?: ID[];
70+
deleted_temp_mask_values?: string[];
7071
'content_drip_settings[unlock_date]'?: string;
7172
'content_drip_settings[after_xdays_of_enroll]'?: number;
7273
'content_drip_settings[prerequisites]'?: ID[] | string;
@@ -148,6 +149,7 @@ export interface QuizForm {
148149
questions: QuizQuestion[];
149150
deleted_question_ids: ID[];
150151
deleted_answer_ids: ID[];
152+
deleted_temp_mask_values: string[];
151153
}
152154

153155
interface QuizUpdateQuestionPayload {
@@ -214,6 +216,7 @@ export const convertQuizResponseToFormData = (quiz: QuizDetailsResponse, slotFie
214216
questions: (quiz.questions || []).map((question) => convertedQuestion(question)),
215217
deleted_question_ids: [],
216218
deleted_answer_ids: [],
219+
deleted_temp_mask_values: [],
217220
...Object.fromEntries(slotFields.map((key) => [key, quiz[key as keyof QuizDetailsResponse]])),
218221
};
219222
};
@@ -363,6 +366,7 @@ export const convertQuizFormDataToPayload = (
363366
},
364367
deleted_question_ids: formData.deleted_question_ids,
365368
deleted_answer_ids: deletedAnswerIds,
369+
deleted_temp_mask_values: formData.deleted_temp_mask_values,
366370
...(isAddonEnabled(Addons.CONTENT_DRIP) &&
367371
contentDripType === 'unlock_by_date' && {
368372
'content_drip_settings[unlock_date]': formData.quiz_option.content_drip_settings.unlock_date,

assets/src/js/v3/shared/utils/quiz.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -183,18 +183,23 @@ export const validateQuizQuestion = (
183183
}
184184
}
185185

186-
if (
187-
currentQuestionType === 'draw_image' ||
188-
currentQuestionType === 'pin_image' ||
189-
currentQuestionType === 'puzzle'
190-
) {
186+
if (currentQuestionType === 'draw_image' || currentQuestionType === 'pin_image') {
191187
const hasMarkedArea = answers.some((answer) => Boolean(answer.answer_two_gap_match));
192188
if (!hasMarkedArea) {
193189
return {
194-
message:
195-
currentQuestionType === 'puzzle'
196-
? __('Please upload a valid puzzle image.', __TUTOR_TEXT_DOMAIN__)
197-
: __('Please mark a valid area on the image.', __TUTOR_TEXT_DOMAIN__),
190+
message: __('Please mark a valid area on the image.', __TUTOR_TEXT_DOMAIN__),
191+
type: 'question',
192+
};
193+
}
194+
}
195+
196+
if (currentQuestionType === 'puzzle') {
197+
const hasPuzzleImage = answers.some(
198+
(answer) => Boolean(answer.answer_two_gap_match) || Boolean(answer.image_url),
199+
);
200+
if (!hasPuzzleImage) {
201+
return {
202+
message: __('Please upload a valid puzzle image.', __TUTOR_TEXT_DOMAIN__),
198203
type: 'question',
199204
};
200205
}

0 commit comments

Comments
 (0)