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
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,27 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
};

const handleDeleteQuestion = (index: number, question: QuizQuestion) => {
if (question._data_status === QuizDataStatus.NEW) {
const isMaskQuestionType =
question.question_type === 'draw_image' ||
question.question_type === 'pin_image' ||
question.question_type === 'puzzle';

if (isMaskQuestionType) {
const tempMaskValues = (question.question_answers || [])
.flatMap((answer) => [answer.answer_two_gap_match, answer.image_url])
.map((value) => (typeof value === 'string' ? value.trim() : ''))
.filter(Boolean);

if (tempMaskValues.length > 0) {
form.setValue('deleted_temp_mask_values', [
...(form.getValues('deleted_temp_mask_values') || []),
...tempMaskValues,
]);
}
}
}

removeQuestion(index);

if (activeQuestionIndex === index) {
Expand Down
4 changes: 4 additions & 0 deletions assets/src/js/v3/entries/course-builder/services/quiz.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ interface QuizPayload {
payload: QuizResponseWithStatus;
deleted_question_ids?: ID[];
deleted_answer_ids?: ID[];
deleted_temp_mask_values?: string[];
'content_drip_settings[unlock_date]'?: string;
'content_drip_settings[after_xdays_of_enroll]'?: number;
'content_drip_settings[prerequisites]'?: ID[] | string;
Expand Down Expand Up @@ -148,6 +149,7 @@ export interface QuizForm {
questions: QuizQuestion[];
deleted_question_ids: ID[];
deleted_answer_ids: ID[];
deleted_temp_mask_values: string[];
}

interface QuizUpdateQuestionPayload {
Expand Down Expand Up @@ -213,6 +215,7 @@ export const convertQuizResponseToFormData = (quiz: QuizDetailsResponse, slotFie
questions: (quiz.questions || []).map((question) => convertedQuestion(question)),
deleted_question_ids: [],
deleted_answer_ids: [],
deleted_temp_mask_values: [],
...Object.fromEntries(slotFields.map((key) => [key, quiz[key as keyof QuizDetailsResponse]])),
};
};
Expand Down Expand Up @@ -362,6 +365,7 @@ export const convertQuizFormDataToPayload = (
},
deleted_question_ids: formData.deleted_question_ids,
deleted_answer_ids: deletedAnswerIds,
deleted_temp_mask_values: formData.deleted_temp_mask_values,
...(isAddonEnabled(Addons.CONTENT_DRIP) &&
contentDripType === 'unlock_by_date' && {
'content_drip_settings[unlock_date]': formData.quiz_option.content_drip_settings.unlock_date,
Expand Down
23 changes: 14 additions & 9 deletions assets/src/js/v3/shared/utils/quiz.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,23 @@ export const validateQuizQuestion = (
}
}

if (
currentQuestionType === 'draw_image' ||
currentQuestionType === 'pin_image' ||
currentQuestionType === 'puzzle'
) {
if (currentQuestionType === 'draw_image' || currentQuestionType === 'pin_image') {
const hasMarkedArea = answers.some((answer) => Boolean(answer.answer_two_gap_match));
if (!hasMarkedArea) {
return {
message:
currentQuestionType === 'puzzle'
? __('Please upload a valid puzzle image.', __TUTOR_TEXT_DOMAIN__)
: __('Please mark a valid area on the image.', __TUTOR_TEXT_DOMAIN__),
message: __('Please mark a valid area on the image.', __TUTOR_TEXT_DOMAIN__),
type: 'question',
};
}
}

if (currentQuestionType === 'puzzle') {
const hasPuzzleImage = answers.some(
(answer) => Boolean(answer.answer_two_gap_match) || Boolean(answer.image_url),
);
if (!hasPuzzleImage) {
return {
message: __('Please upload a valid puzzle image.', __TUTOR_TEXT_DOMAIN__),
type: 'question',
};
}
Expand Down
Loading
Loading