Skip to content

Commit

Permalink
Merge pull request #1419 from themeum/dev
Browse files Browse the repository at this point in the history
Tutor LMS v3.0.1 Release
  • Loading branch information
shewa12 authored Nov 25, 2024
2 parents 1107eb0 + 1336278 commit 3492b76
Show file tree
Hide file tree
Showing 62 changed files with 589 additions and 349 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ const styles = {
top: 50%;
left: 50%;
translate: -50% -50%;
:dir(rtl) {
translate: 50% -50%;
}
${Breakpoint.smallTablet} {
width: 90%;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import SVGIcon from '@Atoms/SVGIcon';
import { useToast } from '@Atoms/Toast';

import FormTextareaInput from '@Components/fields/FormTextareaInput';
import { Addons } from '@Config/constants';
import { Addons, isRTL } from '@Config/constants';
import { Breakpoint, borderRadius, colorTokens, spacing, zIndex } from '@Config/styles';
import { typography } from '@Config/typography';
import For from '@Controls/For';
Expand Down Expand Up @@ -212,7 +212,7 @@ const ContentGeneration = ({ onClose }: { onClose: () => void }) => {
disabled={pointer === 0 || isLoading}
onClick={() => setPointer((previous) => Math.max(0, previous - 1))}
>
<SVGIcon name="chevronLeft" width={20} height={20} />
<SVGIcon name={!isRTL ? 'chevronLeft' : 'chevronRight'} width={20} height={20} />
</Button>
<div css={styles.navigatorContent}>
<span>{pointer + 1}</span>
Expand All @@ -224,7 +224,7 @@ const ContentGeneration = ({ onClose }: { onClose: () => void }) => {
disabled={pointer >= contents.length - 1 || isLoading}
onClick={() => setPointer((previous) => Math.min(contents.length - 1, previous + 1))}
>
<SVGIcon name="chevronRight" width={20} height={20} />
<SVGIcon name={!isRTL ? 'chevronRight' : 'chevronLeft'} width={20} height={20} />
</Button>
</div>
</Show>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { typography } from '@Config/typography';
import Show from '@Controls/Show';
import { useQuizModalContext } from '@CourseBuilderContexts/QuizModalContext';
import {
type QuizDataStatus,
QuizDataStatus,
type QuizForm,
type QuizQuestionType,
calculateQuizDataStatus,
Expand Down Expand Up @@ -105,10 +105,10 @@ const QuestionConditions = () => {
{...controllerProps}
label={__('Multiple Correct Answer', 'tutor')}
onChange={() => {
calculateQuizDataStatus(activeDataStatus, 'update') &&
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(activeDataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand All @@ -127,10 +127,10 @@ const QuestionConditions = () => {
{...controllerProps}
label={__('Image Matching', 'tutor')}
onChange={() => {
calculateQuizDataStatus(activeDataStatus, 'update') &&
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(activeDataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand All @@ -148,10 +148,10 @@ const QuestionConditions = () => {
{...controllerProps}
label={__('Answer Required', 'tutor')}
onChange={() => {
calculateQuizDataStatus(activeDataStatus, 'update') &&
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(activeDataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand All @@ -168,10 +168,10 @@ const QuestionConditions = () => {
{...controllerProps}
label={__('Randomize Choice', 'tutor')}
onChange={() => {
calculateQuizDataStatus(activeDataStatus, 'update') &&
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(activeDataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand All @@ -198,10 +198,10 @@ const QuestionConditions = () => {
max-width: 80px;
`}
onChange={() => {
calculateQuizDataStatus(activeDataStatus, 'update') &&
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(activeDataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand All @@ -218,10 +218,10 @@ const QuestionConditions = () => {
{...controllerProps}
label={__('Display Points', 'tutor')}
onChange={() => {
calculateQuizDataStatus(activeDataStatus, 'update') &&
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(activeDataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(activeDataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import { borderRadius, colorTokens, spacing } from '@Config/styles';
import { typography } from '@Config/typography';
import Show from '@Controls/Show';
import {
type QuizDataStatus,
QuizDataStatus,
type QuizForm,
type QuizQuestionType,
calculateQuizDataStatus,
Expand Down Expand Up @@ -104,12 +104,13 @@ const QuestionForm = () => {
placeholder={__('Write your question here..', 'tutor')}
disabled={contentType === 'tutor_h5p_quiz'}
onChange={() => {
calculateQuizDataStatus(dataStatus, 'update') &&
calculateQuizDataStatus(dataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(dataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(dataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
selectOnFocus={questions[activeQuestionIndex]?._data_status === QuizDataStatus.NEW}
/>
)}
/>
Expand All @@ -133,10 +134,10 @@ const QuestionForm = () => {
placeholder={__('Description (optional)', 'tutor')}
disabled={contentType === 'tutor_h5p_quiz'}
onChange={() => {
calculateQuizDataStatus(dataStatus, 'update') &&
calculateQuizDataStatus(dataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(dataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(dataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand Down Expand Up @@ -167,10 +168,10 @@ const QuestionForm = () => {
label={__('Answer Explanation', 'tutor')}
placeholder={__('Write answer explanation...', 'tutor')}
onChange={() => {
calculateQuizDataStatus(dataStatus, 'update') &&
calculateQuizDataStatus(dataStatus, QuizDataStatus.UPDATE) &&
form.setValue(
`questions.${activeQuestionIndex}._data_status`,
calculateQuizDataStatus(dataStatus, 'update') as QuizDataStatus,
calculateQuizDataStatus(dataStatus, QuizDataStatus.UPDATE) as QuizDataStatus,
);
}}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,13 @@ import Show from '@Controls/Show';
import Question from '@CourseBuilderComponents/curriculum/Question';
import H5PContentListModal from '@CourseBuilderComponents/modals/H5PContentListModal';
import { useQuizModalContext } from '@CourseBuilderContexts/QuizModalContext';
import type { H5PContent, QuizForm, QuizQuestion, QuizQuestionType } from '@CourseBuilderServices/quiz';
import {
type H5PContent,
QuizDataStatus,
type QuizForm,
type QuizQuestion,
type QuizQuestionType,
} from '@CourseBuilderServices/quiz';
import { validateQuizQuestion } from '@CourseBuilderUtils/utils';
import { AnimationType } from '@Hooks/useAnimation';
import { styleUtils } from '@Utils/style-utils';
Expand Down Expand Up @@ -124,7 +130,7 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
distance: 10,
},
}),
useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates })
useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),
);

const activeSortItem = useMemo(() => {
Expand All @@ -147,7 +153,7 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {

const questionId = nanoid();
appendQuestion({
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
question_id: questionId,
question_title: questionType === 'h5p' ? content?.title : `Question ${questionFields.length + 1}`,
question_description: questionType === 'h5p' ? content?.id : '',
Expand All @@ -157,7 +163,7 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
? [
{
answer_id: nanoid(),
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
is_saved: true,
answer_title: __('True', 'tutor'),
is_correct: '1',
Expand All @@ -170,7 +176,7 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
{
answer_id: nanoid(),
is_saved: true,
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
answer_title: __('False', 'tutor'),
is_correct: '0',
answer_order: 2,
Expand All @@ -181,21 +187,21 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
},
]
: questionType === 'fill_in_the_blank'
? [
{
_data_status: 'new',
is_saved: false,
answer_id: nanoid(),
answer_title: '',
belongs_question_id: questionId,
belongs_question_type: 'fill_in_the_blank',
answer_two_gap_match: '',
answer_view_format: '',
answer_order: 0,
is_correct: '0',
},
]
: [],
? [
{
_data_status: QuizDataStatus.NEW,
is_saved: false,
answer_id: nanoid(),
answer_title: '',
belongs_question_id: questionId,
belongs_question_type: 'fill_in_the_blank',
answer_two_gap_match: '',
answer_view_format: '',
answer_order: 0,
is_correct: '0',
},
]
: [],
answer_explanation: '',
question_mark: 1,
question_order: questionFields.length + 1,
Expand Down Expand Up @@ -228,12 +234,12 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
const convertedQuestion: QuizQuestion = {
...data,
question_id: nanoid(),
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
question_title: `${currentQuestion.question_title} (copy)`,
question_answers: currentQuestion.question_answers.map((answer) => ({
...answer,
answer_id: nanoid(),
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
})),
};
const duplicateQuestionIndex = index + 1;
Expand All @@ -248,7 +254,7 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
setValidationError(null);
}

if (question._data_status !== 'new') {
if (question._data_status !== QuizDataStatus.NEW) {
form.setValue('deleted_question_ids', [...form.getValues('deleted_question_ids'), question.question_id]);
}
};
Expand Down Expand Up @@ -357,7 +363,7 @@ const QuestionList = ({ isEditing }: { isEditing: boolean }) => {
}}
</Show>
</DragOverlay>,
document.body
document.body,
)}
</DndContext>
</Show>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { styleUtils } from '@Utils/style-utils';
import { nanoid, noop } from '@Utils/util';

import { useQuizModalContext } from '@CourseBuilderContexts/QuizModalContext';
import type { QuizForm, QuizQuestionOption } from '@CourseBuilderServices/quiz';
import { QuizDataStatus, type QuizForm, type QuizQuestionOption } from '@CourseBuilderServices/quiz';

const ImageAnswering = () => {
const [activeSortId, setActiveSortId] = useState<UniqueIdentifier | null>(null);
Expand Down Expand Up @@ -65,7 +65,7 @@ const ImageAnswering = () => {
const handleDuplicateOption = (index: number, data: QuizQuestionOption) => {
const duplicateOption: QuizQuestionOption = {
...data,
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
is_saved: true,
answer_id: nanoid(),
answer_title: `${data.answer_title} (copy)`,
Expand All @@ -78,7 +78,7 @@ const ImageAnswering = () => {
const handleDeleteOption = (index: number, option: QuizQuestionOption) => {
removeOption(index);

if (option._data_status !== 'new') {
if (option._data_status !== QuizDataStatus.NEW) {
form.setValue('deleted_answer_ids', [...form.getValues('deleted_answer_ids'), option.answer_id]);
}
};
Expand Down Expand Up @@ -166,7 +166,7 @@ const ImageAnswering = () => {
onClick={() => {
appendOption(
{
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
is_saved: false,
answer_id: nanoid(),
answer_title: '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { colorTokens, spacing } from '@Config/styles';
import For from '@Controls/For';
import Show from '@Controls/Show';
import { useQuizModalContext } from '@CourseBuilderContexts/QuizModalContext';
import type { QuizForm, QuizQuestionOption } from '@CourseBuilderServices/quiz';
import { QuizDataStatus, type QuizForm, type QuizQuestionOption } from '@CourseBuilderServices/quiz';
import { styleUtils } from '@Utils/style-utils';
import { nanoid, noop } from '@Utils/util';

Expand Down Expand Up @@ -69,7 +69,7 @@ const Matching = () => {
const handleDuplicateOption = (index: number, data: QuizQuestionOption) => {
const duplicateOption: QuizQuestionOption = {
...data,
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
is_saved: true,
answer_id: nanoid(),
answer_title: `${data.answer_title} (copy)`,
Expand All @@ -82,7 +82,7 @@ const Matching = () => {
const handleDeleteOption = (index: number, option: QuizQuestionOption) => {
removeOption(index);

if (option._data_status !== 'new') {
if (option._data_status !== QuizDataStatus.NEW) {
form.setValue('deleted_answer_ids', [...form.getValues('deleted_answer_ids'), option.answer_id]);
}
};
Expand Down Expand Up @@ -170,7 +170,7 @@ const Matching = () => {
onClick={() => {
appendOption(
{
_data_status: 'new',
_data_status: QuizDataStatus.NEW,
is_saved: false,
answer_id: nanoid(),
answer_title: '',
Expand Down
Loading

0 comments on commit 3492b76

Please sign in to comment.