From e983ae6c1448a445fdd570fd3473c5b33e282cdd Mon Sep 17 00:00:00 2001 From: iPegii <51372604+iPegii@users.noreply.github.com> Date: Thu, 29 Jul 2021 19:30:41 +0300 Subject: [PATCH 1/3] add prefaceTitle to quizItem --- packages/backendv2/src/models/quiz_item.ts | 1 + packages/backendv2/tests/data.ts | 18 ++++++++++++++++++ .../src/components/MultipleChoice.tsx | 13 +++++++++++-- .../src/components/QuizImpl/index.tsx | 1 - packages/moocfi-quizzes/src/modelTypes.ts | 1 + .../MultipleChoiceDropdownModalContent.tsx | 12 ++++++++++++ .../store/editor/items/itemAction.ts | 6 ++++++ .../types/NormalizedQuiz.d.ts | 1 + packages/quizzes-dashboard/types/Quiz.d.ts | 1 + 9 files changed, 51 insertions(+), 3 deletions(-) diff --git a/packages/backendv2/src/models/quiz_item.ts b/packages/backendv2/src/models/quiz_item.ts index 74092b1f9..81b14a33d 100644 --- a/packages/backendv2/src/models/quiz_item.ts +++ b/packages/backendv2/src/models/quiz_item.ts @@ -39,6 +39,7 @@ class QuizItem extends mixin(BaseModel, [ allAnswersCorrect!: string deleted!: boolean direction!: "row" | "column" + prefaceText!: string static get tableName() { return "quiz_item" diff --git a/packages/backendv2/tests/data.ts b/packages/backendv2/tests/data.ts index 6559da764..600f8dc68 100644 --- a/packages/backendv2/tests/data.ts +++ b/packages/backendv2/tests/data.ts @@ -30,6 +30,7 @@ export const input = { failureMessage: "boo!", sharedOptionFeedbackMessage: null, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", options: [ { order: 1, @@ -51,6 +52,7 @@ export const input = { allAnswersCorrect: false, sharedOptionFeedbackMessage: null, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", }, ], peerReviewCollections: [ @@ -102,6 +104,7 @@ export const input = { failureMessage: "boo!", sharedOptionFeedbackMessage: null, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", }, { id: "707195a3-aafe-4c06-bf23-854e54e084db", @@ -116,6 +119,7 @@ export const input = { failureMessage: "boo!", sharedOptionFeedbackMessage: null, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", }, ], peerReviewCollections: [ @@ -283,6 +287,7 @@ export const validation = { usesSharedOptionFeedbackMessage: false, title: "multiple-choice", feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", body: "item", successMessage: "yay!", failureMessage: "boo!", @@ -320,6 +325,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "essay", body: "item", successMessage: "yay!", @@ -396,6 +402,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "essay", body: "item", successMessage: "yay!", @@ -421,6 +428,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "open", body: "item", successMessage: "yay!", @@ -496,6 +504,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "multiple-choice", body: "item", successMessage: "yay!", @@ -534,6 +543,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "essay", body: "item", successMessage: "yay!", @@ -610,6 +620,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", options: [], title: "open", body: "item", @@ -635,6 +646,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "open", body: "item", successMessage: "yay!", @@ -684,6 +696,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "essay", body: "item", successMessage: "yay!", @@ -709,6 +722,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "open", body: "item", successMessage: "yay!", @@ -758,6 +772,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "essay", body: "item", successMessage: "yay!", @@ -783,6 +798,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", title: "open", body: "item", successMessage: "yay!", @@ -1292,6 +1308,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", createdAt: expect.stringMatching(dateTime), updatedAt: expect.stringMatching(dateTime), options: [], @@ -1317,6 +1334,7 @@ export const validation = { maxValue: null, usesSharedOptionFeedbackMessage: false, feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceText: "prefaceText", createdAt: expect.stringMatching(dateTime), updatedAt: expect.stringMatching(dateTime), allAnswersCorrect: false, diff --git a/packages/moocfi-quizzes/src/components/MultipleChoice.tsx b/packages/moocfi-quizzes/src/components/MultipleChoice.tsx index 74c983c05..fd47b6fcf 100644 --- a/packages/moocfi-quizzes/src/components/MultipleChoice.tsx +++ b/packages/moocfi-quizzes/src/components/MultipleChoice.tsx @@ -96,6 +96,11 @@ const LeftAlignedMarkdownText = styled(MarkdownText)` const justADiv = styled.div`` +const PrefaceMarkdown = styled(MarkdownText)` + padding-top: 1em; + padding-bottom: 1em; +` + type MultipleChoiceProps = { item: QuizItem } @@ -108,11 +113,10 @@ const MultipleChoice: React.FunctionComponent = ({ const quizDisabled = useTypedSelector(state => state.quizAnswer.quizDisabled) const answer = useTypedSelector(state => state.quizAnswer.quizAnswer) const options = item.options - + // preface_text if (!quiz) { return
} - const itemAnswer = answer.itemAnswers.find(ia => ia.quizItemId === item.id) if (!itemAnswer && !quizDisabled) { return @@ -130,6 +134,11 @@ const MultipleChoice: React.FunctionComponent = ({ return (
+ {item.prefaceText.length > 1 ? ( + + {item.prefaceText} + + ) : null} = ({ }) if (fatal) { - console.log("quiz") courseStatusProvider.notifyError && courseStatusProvider.notifyError(messageState.message) return ( diff --git a/packages/moocfi-quizzes/src/modelTypes.ts b/packages/moocfi-quizzes/src/modelTypes.ts index a9c6d12da..1dbb86082 100644 --- a/packages/moocfi-quizzes/src/modelTypes.ts +++ b/packages/moocfi-quizzes/src/modelTypes.ts @@ -127,6 +127,7 @@ export type QuizItem = { sharedOptionFeedbackMessage?: string direction: QuizItemDirection feedbackDisplayPolicy: QuizItemFeedbackDisplayPolicy + prefaceText: string } export type PeerReviewQuestion = { diff --git a/packages/quizzes-dashboard/components/QuizEditForms/QuizItem/MultipleChoiceDropdownContent/MultipleChoiceDropdownModalContent.tsx b/packages/quizzes-dashboard/components/QuizEditForms/QuizItem/MultipleChoiceDropdownContent/MultipleChoiceDropdownModalContent.tsx index e55ce0b01..6d06cdd25 100644 --- a/packages/quizzes-dashboard/components/QuizEditForms/QuizItem/MultipleChoiceDropdownContent/MultipleChoiceDropdownModalContent.tsx +++ b/packages/quizzes-dashboard/components/QuizEditForms/QuizItem/MultipleChoiceDropdownContent/MultipleChoiceDropdownModalContent.tsx @@ -15,6 +15,7 @@ import { editedSharedOptionsFeedbackMessage, editedItemSuccessMessage, editedItemFailureMessage, + editedQuizItemPrefaceTitle, } from "../../../../store/editor/items/itemAction" import { useTypedSelector } from "../../../../store/store" import { useDispatch } from "react-redux" @@ -159,6 +160,17 @@ export const MultipleChoiceModalContent = ({ item }: EditorModalProps) => { )} + + + dispatch( + editedQuizItemPrefaceTitle(event.target.value, storeItem.id), + ) + } + /> + ) } diff --git a/packages/quizzes-dashboard/store/editor/items/itemAction.ts b/packages/quizzes-dashboard/store/editor/items/itemAction.ts index c5451a982..51ebab714 100644 --- a/packages/quizzes-dashboard/store/editor/items/itemAction.ts +++ b/packages/quizzes-dashboard/store/editor/items/itemAction.ts @@ -146,6 +146,11 @@ export const editedQuizItemFeedbackDisplayPolicy = createAction( newPolicy: "DisplayFeedbackOnQuizItem" | "DisplayFeedbackOnAllOptions" }>() +export const editedQuizItemPrefaceTitle = createAction( + "EDITED_QUIZ_ITEM_PREFACE_TITLE", + (itemId: string, newPrefaceTitle: string) => ({ itemId, newPrefaceTitle }), +)<{ itemId: string; newPrefaceTitle: string }>() + export const itemActions = [ editedQuizItemBody, editedQuizItemTitle, @@ -167,6 +172,7 @@ export const itemActions = [ toggledAllAnswersCorrect, editedItemDirection, editedQuizItemFeedbackDisplayPolicy, + editedQuizItemPrefaceTitle, ] export default itemActions diff --git a/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts b/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts index c647f97c3..77778c7a0 100644 --- a/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts +++ b/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts @@ -67,6 +67,7 @@ export interface NormalizedItem { feedbackDisplayPolicy: | "DisplayFeedbackOnQuizItem" | "DisplayFeedbackOnAllOptions" + prefaceTitle: string } export interface NormalizedOption { diff --git a/packages/quizzes-dashboard/types/Quiz.d.ts b/packages/quizzes-dashboard/types/Quiz.d.ts index 06dd2eda4..2cca5a9d0 100644 --- a/packages/quizzes-dashboard/types/Quiz.d.ts +++ b/packages/quizzes-dashboard/types/Quiz.d.ts @@ -50,6 +50,7 @@ export interface Item { feedbackDisplayPolicy: | "DisplayFeedbackOnQuizItem" | "DisplayFeedbackOnAllOptions" + prefaceTitle: string } export interface Option { From bbdeb3c13bd829a8972f5a7d1634dbf412e536c9 Mon Sep 17 00:00:00 2001 From: iPegii <51372604+iPegii@users.noreply.github.com> Date: Fri, 30 Jul 2021 14:57:41 +0300 Subject: [PATCH 2/3] =?UTF-8?q?add=20reducer=20and=20change=20type=20to=20?= =?UTF-8?q?string=20|=C2=A0null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quizzes-dashboard/store/editor/items/itemReducer.ts | 9 +++++++++ packages/quizzes-dashboard/types/NormalizedQuiz.d.ts | 2 +- packages/quizzes-dashboard/types/Quiz.d.ts | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/quizzes-dashboard/store/editor/items/itemReducer.ts b/packages/quizzes-dashboard/store/editor/items/itemReducer.ts index 1d167a021..77cfb32b8 100644 --- a/packages/quizzes-dashboard/store/editor/items/itemReducer.ts +++ b/packages/quizzes-dashboard/store/editor/items/itemReducer.ts @@ -19,6 +19,7 @@ import { toggledAllAnswersCorrect, editedItemDirection, editedQuizItemFeedbackDisplayPolicy, + editedQuizItemPrefaceTitle, } from "./itemAction" import { initializedEditor, @@ -132,6 +133,13 @@ export const itemReducer = createReducer< }) }) + .handleAction(editedQuizItemPrefaceTitle, (state, action) => { + return produce(state, draftState => { + draftState[action.payload.itemId].prefaceTitle = + action.payload.newPrefaceTitle + }) + }) + .handleAction(createdNewItem, (state, action) => { return produce(state, draftState => { const newItem: NormalizedItem = { @@ -158,6 +166,7 @@ export const itemReducer = createReducer< allAnswersCorrect: false, direction: "row", feedbackDisplayPolicy: "DisplayFeedbackOnQuizItem", + prefaceTitle: null, } draftState[action.payload.itemId] = newItem }) diff --git a/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts b/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts index 77778c7a0..3ae256e53 100644 --- a/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts +++ b/packages/quizzes-dashboard/types/NormalizedQuiz.d.ts @@ -67,7 +67,7 @@ export interface NormalizedItem { feedbackDisplayPolicy: | "DisplayFeedbackOnQuizItem" | "DisplayFeedbackOnAllOptions" - prefaceTitle: string + prefaceTitle: string | null } export interface NormalizedOption { diff --git a/packages/quizzes-dashboard/types/Quiz.d.ts b/packages/quizzes-dashboard/types/Quiz.d.ts index 2cca5a9d0..2127ddf14 100644 --- a/packages/quizzes-dashboard/types/Quiz.d.ts +++ b/packages/quizzes-dashboard/types/Quiz.d.ts @@ -50,7 +50,7 @@ export interface Item { feedbackDisplayPolicy: | "DisplayFeedbackOnQuizItem" | "DisplayFeedbackOnAllOptions" - prefaceTitle: string + prefaceTitle: string | null } export interface Option { From 413402148cf9f4e94258443f0f37d85efc6d49f2 Mon Sep 17 00:00:00 2001 From: iPegii <51372604+iPegii@users.noreply.github.com> Date: Wed, 11 Aug 2021 12:17:29 +0300 Subject: [PATCH 3/3] change prefaceTItle type --- packages/quizzes-dashboard/types/Quiz.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/quizzes-dashboard/types/Quiz.d.ts b/packages/quizzes-dashboard/types/Quiz.d.ts index 2127ddf14..dd660d249 100644 --- a/packages/quizzes-dashboard/types/Quiz.d.ts +++ b/packages/quizzes-dashboard/types/Quiz.d.ts @@ -50,7 +50,7 @@ export interface Item { feedbackDisplayPolicy: | "DisplayFeedbackOnQuizItem" | "DisplayFeedbackOnAllOptions" - prefaceTitle: string | null + prefaceTitle: null } export interface Option {