Skip to content

Commit 05333d7

Browse files
authored
Merge pull request #2685 from themeum/fix/v4-course-builder
🛠️ Add default quiz attempt and SVGIcon context
2 parents 307e0aa + 7813035 commit 05333d7

13 files changed

Lines changed: 110 additions & 58 deletions

File tree

assets/src/js/v3/@types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ declare global {
187187
enable_individual_tax_control: boolean;
188188
is_tax_included_in_price: boolean;
189189
pagination_per_page: string;
190+
quiz_attempts_allowed: string;
190191
};
191192
tutor_currency: {
192193
symbol: string;

assets/src/js/v3/entries/addon-list/components/App.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Global } from '@emotion/react';
22
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
33
import ToastProvider from '@TutorShared/atoms/Toast';
44
import RTLProvider from '@TutorShared/components/RTLProvider';
5+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
56
import { createGlobalCss } from '@TutorShared/utils/style-utils';
67
import { useState } from 'react';
78
import Main from './layout/Main';
@@ -27,10 +28,12 @@ function App() {
2728
return (
2829
<RTLProvider>
2930
<QueryClientProvider client={queryClient}>
30-
<ToastProvider position="bottom-center">
31-
<Global styles={createGlobalCss()} />
32-
<Main />
33-
</ToastProvider>
31+
<SVGIconConfigProvider>
32+
<ToastProvider position="bottom-center">
33+
<Global styles={createGlobalCss()} />
34+
<Main />
35+
</ToastProvider>
36+
</SVGIconConfigProvider>
3437
</QueryClientProvider>
3538
</RTLProvider>
3639
);

assets/src/js/v3/entries/coupon-details/components/App.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
33
import ToastProvider from '@TutorShared/atoms/Toast';
44
import { ModalProvider } from '@TutorShared/components/modals/Modal';
55
import RTLProvider from '@TutorShared/components/RTLProvider';
6+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
67
import { createGlobalCss } from '@TutorShared/utils/style-utils';
78
import { useState } from 'react';
89
import Main from './layout/Main';
@@ -27,12 +28,14 @@ function App() {
2728
return (
2829
<RTLProvider>
2930
<QueryClientProvider client={queryClient}>
30-
<ToastProvider position="bottom-center">
31-
<ModalProvider>
32-
<Global styles={createGlobalCss()} />
33-
<Main />
34-
</ModalProvider>
35-
</ToastProvider>
31+
<SVGIconConfigProvider>
32+
<ToastProvider position="bottom-center">
33+
<ModalProvider>
34+
<Global styles={createGlobalCss()} />
35+
<Main />
36+
</ModalProvider>
37+
</ToastProvider>
38+
</SVGIconConfigProvider>
3639
</QueryClientProvider>
3740
</RTLProvider>
3841
);

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { CourseBuilderSlotProvider } from '@CourseBuilderContexts/CourseBuilderS
33
import ToastProvider from '@TutorShared/atoms/Toast';
44
import RTLProvider from '@TutorShared/components/RTLProvider';
55
import { ModalProvider } from '@TutorShared/components/modals/Modal';
6+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
67
import { createGlobalCss } from '@TutorShared/utils/style-utils';
78
import { Global } from '@emotion/react';
89
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
@@ -32,14 +33,16 @@ const App = () => {
3233
return (
3334
<RTLProvider>
3435
<QueryClientProvider client={queryClient}>
35-
<ToastProvider position="bottom-center">
36-
<CourseBuilderSlotProvider>
37-
<ModalProvider>
38-
<Global styles={createGlobalCss()} />
39-
{routers}
40-
</ModalProvider>
41-
</CourseBuilderSlotProvider>
42-
</ToastProvider>
36+
<SVGIconConfigProvider>
37+
<ToastProvider position="bottom-center">
38+
<CourseBuilderSlotProvider>
39+
<ModalProvider>
40+
<Global styles={createGlobalCss()} />
41+
{routers}
42+
</ModalProvider>
43+
</CourseBuilderSlotProvider>
44+
</ToastProvider>
45+
</SVGIconConfigProvider>
4346
</QueryClientProvider>
4447
</RTLProvider>
4548
);

assets/src/js/v3/entries/course-builder/components/modals/QuizModal.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import { POPOVER_PLACEMENTS } from '@TutorShared/hooks/usePortalPopover';
4444
import { validateQuizQuestion } from '@TutorShared/utils/quiz';
4545
import { type ID, isDefined, type TopicContentType } from '@TutorShared/utils/types';
4646
import { findSlotFields } from '@TutorShared/utils/util';
47+
import { tutorConfig } from '@TutorShared/config/config';
4748

4849
interface QuizModalProps extends ModalProps {
4950
quizId?: ID;
@@ -56,6 +57,7 @@ interface QuizModalProps extends ModalProps {
5657
type QuizTabs = 'details' | 'settings';
5758

5859
const courseId = getCourseId();
60+
const defaultQuizAttemptsAllowed = tutorConfig.settings?.quiz_attempts_allowed ?? 10;
5961

6062
const QuizModal = ({
6163
closeModal,
@@ -89,7 +91,7 @@ const QuizModal = ({
8991
hide_quiz_time_display: false,
9092
limit_attempts_allowed: false,
9193
limit_questions_to_answer: false,
92-
attempts_allowed: 10,
94+
attempts_allowed: defaultQuizAttemptsAllowed,
9395
passing_grade: 80,
9496
max_questions_for_answer: contentType === 'tutor_h5p_quiz' ? 0 : 10,
9597
quiz_auto_start: false,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ interface QuizUpdateQuestionPayload {
165165
}
166166

167167
export const convertQuizResponseToFormData = (quiz: QuizDetailsResponse, slotFields: string[]): QuizForm => {
168+
const defaultQuizAttemptsAllowed = tutorConfig.settings?.quiz_attempts_allowed ?? 10;
168169
const legacyQuizOption = quiz.quiz_option as QuizDetailsResponse['quiz_option'] & {
169170
feedback_mode?: 'default' | 'reveal' | 'retry';
170171
};
@@ -184,7 +185,7 @@ export const convertQuizResponseToFormData = (quiz: QuizDetailsResponse, slotFie
184185
limit_attempts_allowed: isDefined(quiz.quiz_option.limit_attempts_allowed)
185186
? quiz.quiz_option.limit_attempts_allowed === '1'
186187
: legacyQuizOption.feedback_mode === 'retry',
187-
attempts_allowed: quiz.quiz_option.attempts_allowed ?? 10,
188+
attempts_allowed: quiz.quiz_option.attempts_allowed ?? defaultQuizAttemptsAllowed,
188189
pass_is_required: quiz.quiz_option.pass_is_required === '1',
189190
passing_grade: quiz.quiz_option.passing_grade ?? 80,
190191
limit_questions_to_answer: !!Number(quiz.quiz_option.max_questions_for_answer),

assets/src/js/v3/entries/import-export/components/App.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Main from '@ImportExport/components/Main';
66
import ToastProvider from '@TutorShared/atoms/Toast';
77
import RTLProvider from '@TutorShared/components/RTLProvider';
88
import { ModalProvider } from '@TutorShared/components/modals/Modal';
9+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
910
import { createGlobalCss } from '@TutorShared/utils/style-utils';
1011

1112
function App() {
@@ -29,12 +30,14 @@ function App() {
2930
return (
3031
<RTLProvider>
3132
<QueryClientProvider client={queryClient}>
32-
<ToastProvider position="bottom-right">
33-
<ModalProvider>
34-
<Global styles={createGlobalCss()} />
35-
<Main />
36-
</ModalProvider>
37-
</ToastProvider>
33+
<SVGIconConfigProvider>
34+
<ToastProvider position="bottom-right">
35+
<ModalProvider>
36+
<Global styles={createGlobalCss()} />
37+
<Main />
38+
</ModalProvider>
39+
</ToastProvider>
40+
</SVGIconConfigProvider>
3841
</QueryClientProvider>
3942
</RTLProvider>
4043
);

assets/src/js/v3/entries/order-details/components/App.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ToastProvider from '@TutorShared/atoms/Toast';
66

77
import RTLProvider from '@TutorShared/components/RTLProvider';
88
import { ModalProvider } from '@TutorShared/components/modals/Modal';
9+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
910

1011
import { createGlobalCss } from '@TutorShared/utils/style-utils';
1112
import Main from './layout/Main';
@@ -30,12 +31,14 @@ function App() {
3031
return (
3132
<RTLProvider>
3233
<QueryClientProvider client={queryClient}>
33-
<ToastProvider position="bottom-right">
34-
<ModalProvider>
35-
<Global styles={createGlobalCss()} />
36-
<Main />
37-
</ModalProvider>
38-
</ToastProvider>
34+
<SVGIconConfigProvider>
35+
<ToastProvider position="bottom-right">
36+
<ModalProvider>
37+
<Global styles={createGlobalCss()} />
38+
<Main />
39+
</ModalProvider>
40+
</ToastProvider>
41+
</SVGIconConfigProvider>
3942
</QueryClientProvider>
4043
</RTLProvider>
4144
);

assets/src/js/v3/entries/payment-settings/components/App.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useState } from 'react';
55
import ToastProvider from '@TutorShared/atoms/Toast';
66
import RTLProvider from '@TutorShared/components/RTLProvider';
77
import { ModalProvider } from '@TutorShared/components/modals/Modal';
8+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
89
import { createGlobalCss } from '@TutorShared/utils/style-utils';
910

1011
import { PaymentProvider } from '../contexts/payment-context';
@@ -31,14 +32,16 @@ function App() {
3132
return (
3233
<RTLProvider>
3334
<QueryClientProvider client={queryClient}>
34-
<ToastProvider position="bottom-right">
35-
<PaymentProvider>
36-
<ModalProvider>
37-
<Global styles={createGlobalCss()} />
38-
<PaymentSettings />
39-
</ModalProvider>
40-
</PaymentProvider>
41-
</ToastProvider>
35+
<SVGIconConfigProvider>
36+
<ToastProvider position="bottom-right">
37+
<PaymentProvider>
38+
<ModalProvider>
39+
<Global styles={createGlobalCss()} />
40+
<PaymentSettings />
41+
</ModalProvider>
42+
</PaymentProvider>
43+
</ToastProvider>
44+
</SVGIconConfigProvider>
4245
</QueryClientProvider>
4346
</RTLProvider>
4447
);

assets/src/js/v3/entries/tax-settings/components/App.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useState } from 'react';
55
import ToastProvider from '@TutorShared/atoms/Toast';
66
import RTLProvider from '@TutorShared/components/RTLProvider';
77
import { ModalProvider } from '@TutorShared/components/modals/Modal';
8+
import { SVGIconConfigProvider } from '@TutorShared/contexts/SVGIconConfigContext';
89
import { createGlobalCss } from '@TutorShared/utils/style-utils';
910

1011
import TaxSettingsPage from './TaxSettings';
@@ -30,12 +31,14 @@ function App() {
3031
return (
3132
<RTLProvider>
3233
<QueryClientProvider client={queryClient}>
33-
<ToastProvider position="bottom-right">
34-
<ModalProvider>
35-
<Global styles={createGlobalCss()} />
36-
<TaxSettingsPage />
37-
</ModalProvider>
38-
</ToastProvider>
34+
<SVGIconConfigProvider>
35+
<ToastProvider position="bottom-right">
36+
<ModalProvider>
37+
<Global styles={createGlobalCss()} />
38+
<TaxSettingsPage />
39+
</ModalProvider>
40+
</ToastProvider>
41+
</SVGIconConfigProvider>
3942
</QueryClientProvider>
4043
</RTLProvider>
4144
);

0 commit comments

Comments
 (0)