@cuemath/leap 3.5.46 → 3.5.47-gg10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/line-icons/icons/bulb.js +10 -10
- package/dist/assets/line-icons/icons/bulb.js.map +1 -1
- package/dist/assets/line-icons/icons/chevron-up.js +28 -0
- package/dist/assets/line-icons/icons/chevron-up.js.map +1 -0
- package/dist/assets/line-icons/icons/close.js +28 -0
- package/dist/assets/line-icons/icons/close.js.map +1 -0
- package/dist/assets/line-icons/icons/cursor2.js +24 -0
- package/dist/assets/line-icons/icons/cursor2.js.map +1 -0
- package/dist/assets/line-icons/icons/hand.js.map +1 -1
- package/dist/assets/line-icons/icons/hints.js +25 -0
- package/dist/assets/line-icons/icons/hints.js.map +1 -0
- package/dist/assets/line-icons/icons/question-feedback.js +30 -0
- package/dist/assets/line-icons/icons/question-feedback.js.map +1 -0
- package/dist/assets/line-icons/icons/scribble.js +13 -36
- package/dist/assets/line-icons/icons/scribble.js.map +1 -1
- package/dist/assets/line-icons/icons/sticker.js +9 -9
- package/dist/assets/line-icons/icons/sticker.js.map +1 -1
- package/dist/assets/line-icons/icons/teaching-tools.js +40 -0
- package/dist/assets/line-icons/icons/teaching-tools.js.map +1 -0
- package/dist/assets/line-icons/icons/tval-question.js +32 -0
- package/dist/assets/line-icons/icons/tval-question.js.map +1 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js +4 -7
- package/dist/features/circle-games/hooks/use-circle-sounds/constants.js.map +1 -1
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js +19 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/helper.js.map +1 -0
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js +110 -51
- package/dist/features/circle-games/hooks/use-circle-sounds/use-circle-sounds.js.map +1 -1
- package/dist/features/cue-canvas/sidebar/puzzles/api/get-puzzles.js.map +1 -1
- package/dist/features/hooks/use-audio-player.js +54 -0
- package/dist/features/hooks/use-audio-player.js.map +1 -0
- package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js +6 -6
- package/dist/features/journey/hooks/use-home-page-journey/home-page-homeworks-mock.js.map +1 -1
- package/dist/features/journey/hooks/use-home-page-journey/recent-chapters-mock.js +2 -2
- package/dist/features/journey/hooks/use-home-page-journey/recent-chapters-mock.js.map +1 -1
- package/dist/features/journey/mocks/chapter-page-journey-mock-data.js +64 -29
- package/dist/features/journey/mocks/chapter-page-journey-mock-data.js.map +1 -1
- package/dist/features/milestone/milestone-tests/tests-creation/test-stages/test-preview/test-preview.js +9 -9
- package/dist/features/milestone/milestone-tests/tests-creation/test-stages/test-preview/test-preview.js.map +1 -1
- package/dist/features/puzzles/app/puzzle-app-view.js +40 -40
- package/dist/features/puzzles/app/puzzle-app-view.js.map +1 -1
- package/dist/features/ui/tabs/tabs.js +15 -15
- package/dist/features/ui/tabs/tabs.js.map +1 -1
- package/dist/features/worksheet/learnosity-preloader/learnosity-preloader.js +0 -1
- package/dist/features/worksheet/learnosity-preloader/learnosity-preloader.js.map +1 -1
- package/dist/features/worksheet/worksheet/constants.js +12 -13
- package/dist/features/worksheet/worksheet/constants.js.map +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-create-imperative-handle.js +120 -101
- package/dist/features/worksheet/worksheet/hooks/use-create-imperative-handle.js.map +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-worksheet-store.js +1 -1
- package/dist/features/worksheet/worksheet/hooks/use-worksheet-store.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js +40 -109
- package/dist/features/worksheet/worksheet/worksheet-action-bar/worksheet-action-bar.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-behavior-helper.js +49 -46
- package/dist/features/worksheet/worksheet/worksheet-behavior-helper.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-calculator/worksheet-calculator.js +4 -4
- package/dist/features/worksheet/worksheet/worksheet-calculator/worksheet-calculator.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-helpers.js +127 -274
- package/dist/features/worksheet/worksheet/worksheet-helpers.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-navigation/worksheet-navigation.js +25 -25
- package/dist/features/worksheet/worksheet/worksheet-navigation/worksheet-navigation.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-provider.js +1 -1
- package/dist/features/worksheet/worksheet/worksheet-provider.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/subjective-styled.js +17 -22
- package/dist/features/worksheet/worksheet/worksheet-question/subjective-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question-styled.js +25 -29
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js +319 -259
- package/dist/features/worksheet/worksheet/worksheet-question/worksheet-question.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-allow-retry-button-click.js +15 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-allow-retry-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-back-button-click.js +18 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-back-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-check-button-click.js +21 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-check-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-next-button-click.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-next-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-ready-button-click.js +34 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-ready-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-response-change.js +38 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-response-change.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-retry-button-click.js +16 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-retry-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-button-click.js +35 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-section-button-click.js +12 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-skip-section-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-start-button-click.js +44 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-start-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-submit-quiz.js +51 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-submit-quiz.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-validate-button-click.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-handle-validate-button-click.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-play-validation-audio.js +23 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-play-validation-audio.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-validate-question.js +36 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/hooks/use-validate-question.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3.js +184 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3_1.js +258 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller-lesson-v3_1.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller.js +180 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/student/controller.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3.js +77 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3_1.js +103 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller-lesson-v3_1.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller.js +21 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/teacher/controller.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller-view.js +22 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller-view.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js +20 -345
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/worksheet-questions-controller.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar-styled.js +49 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar-styled.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar.js +184 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/questions-toolbar/questions-toolbar.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/scribble-switch.js +65 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/scribble-switch.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-styled.js +9 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-styled.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-tools.js +38 -0
- package/dist/features/worksheet/worksheet/worksheet-questions-tools/worksheet-questions-tools.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-sidebar/navigator.js +33 -20
- package/dist/features/worksheet/worksheet/worksheet-sidebar/navigator.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-computed-properties.js +73 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-computed-properties.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-derived-blocker.js +20 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-derived-blocker.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-attemptable-question-index.js +69 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-attemptable-question-index.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-unlocked-question-index.js +18 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-last-unlocked-question-index.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-questions-from-items.js +138 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-questions-from-items.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-renderable-questions.js +9 -0
- package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-renderable-questions.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-store/worksheet-store.js +230 -0
- package/dist/features/worksheet/worksheet/worksheet-store/worksheet-store.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-styled.js +29 -83
- package/dist/features/worksheet/worksheet/worksheet-styled.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-summary-controller/worksheet-summary-controller.js +45 -24
- package/dist/features/worksheet/worksheet/worksheet-summary-controller/worksheet-summary-controller.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools-styled.js +19 -0
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools-styled.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools.js +66 -0
- package/dist/features/worksheet/worksheet/worksheet-teaching-tools/worksheet-teaching-tools.js.map +1 -0
- package/dist/features/worksheet/worksheet/worksheet-types.js +3 -2
- package/dist/features/worksheet/worksheet/worksheet-types.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet-view.js +89 -100
- package/dist/features/worksheet/worksheet/worksheet-view.js.map +1 -1
- package/dist/features/worksheet/worksheet/worksheet.js +126 -117
- package/dist/features/worksheet/worksheet/worksheet.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/dynamic-worksheet-preview/dynamic-worksheet-preview.js +29 -29
- package/dist/features/worksheet/worksheet-preview/dynamic-worksheet-preview/dynamic-worksheet-preview.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js +16 -16
- package/dist/features/worksheet/worksheet-preview/hooks/use-worksheet-layout.js.map +1 -1
- package/dist/features/worksheet/worksheet-preview/worksheet-preview-view.js +24 -24
- package/dist/features/worksheet/worksheet-preview/worksheet-preview-view.js.map +1 -1
- package/dist/index.d.ts +67 -28
- package/dist/index.js +760 -745
- package/dist/index.js.map +1 -1
- package/dist/types/models/worksheet.js +2 -1
- package/dist/types/models/worksheet.js.map +1 -1
- package/package.json +2 -2
- package/dist/features/hooks/use-audio-player/use-audio-player.js +0 -164
- package/dist/features/hooks/use-audio-player/use-audio-player.js.map +0 -1
- package/dist/features/worksheet/worksheet/question-tips.js +0 -100
- package/dist/features/worksheet/worksheet/question-tips.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/scribble-switch.js +0 -53
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/scribble-switch.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js +0 -195
- package/dist/features/worksheet/worksheet/worksheet-questions-controller/use-handler-callbacks.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/question-guide.js +0 -112
- package/dist/features/worksheet/worksheet/worksheet-sidebar/question-guide.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/sidebar.js +0 -61
- package/dist/features/worksheet/worksheet/worksheet-sidebar/sidebar.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-sidebar/worksheet-sidebar-styled.js +0 -91
- package/dist/features/worksheet/worksheet/worksheet-sidebar/worksheet-sidebar-styled.js.map +0 -1
- package/dist/features/worksheet/worksheet/worksheet-store.js +0 -289
- package/dist/features/worksheet/worksheet/worksheet-store.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-last-attemptable-question-index.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-store/helpers/get-last-attemptable-question-index.ts"],"sourcesContent":["import { isTeacherInterventionNeeded } from '../../worksheet-helpers';\nimport type {\n IWorksheetBehavior,\n IWorksheetQuestion,\n IWorksheetResponse,\n} from '../../worksheet-types';\nimport type { TUserTypes } from '../../../../ui/types';\n\ninterface IGetLastAttemptableQuestionIndex {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n behavior: IWorksheetBehavior;\n userType: TUserTypes;\n inClass: boolean;\n }): number;\n}\n\ninterface IGetLastAttemptableIndexTeacherValidation {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n userType: TUserTypes;\n }): number;\n}\n\ninterface IGetLastAttemptableIndexTeacherDiscussion {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n behavior: IWorksheetBehavior;\n inClass: boolean;\n }): number;\n}\n\ninterface IGetLastAttemptableIndexDefault {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n behavior: IWorksheetBehavior;\n }): number;\n}\n\n/**\n * Handles finding last attemptable question when teacher validation is enabled\n */\nconst getLastAttemptableIndexTeacherValidation: IGetLastAttemptableIndexTeacherValidation = ({\n questions,\n responses,\n userType,\n}) => {\n const questionIndex = [...questions].reverse().findIndex(q => {\n const qResp = responses[q.response_id];\n const { validatedByTeacher, assignStatus } = qResp ?? {};\n\n if (validatedByTeacher) {\n return true;\n }\n\n if (assignStatus === 'skipped') {\n return true;\n }\n\n return false;\n });\n\n if (questionIndex === -1) {\n return 0;\n }\n\n if (questionIndex === 0) {\n const unskippedQuestionIndex = [...questions].reverse().findIndex(q => {\n return responses[q.response_id]?.assignStatus !== 'skipped';\n });\n\n return questions.length - unskippedQuestionIndex - 1;\n }\n\n if (userType === 'STUDENT') {\n const lastUnlockedQuestionIndex = questions.length - questionIndex;\n const lastUnlockedQuestion = questions[lastUnlockedQuestionIndex]!;\n const { assignStatus } = responses[lastUnlockedQuestion.response_id] ?? {};\n\n if (lastUnlockedQuestion.is_optional && !assignStatus) {\n return lastUnlockedQuestionIndex - 1;\n }\n\n return lastUnlockedQuestionIndex;\n }\n\n return questions.length - questionIndex;\n};\n\n/**\n * Handles finding last attemptable question when teacher discussion is enabled\n */\nconst getLastAttemptableIndexTeacherDiscussion: IGetLastAttemptableIndexTeacherDiscussion = ({\n questions,\n responses,\n behavior,\n inClass,\n}) => {\n const { attemptsAfterTeacherInterventionNeeded } = behavior;\n\n // Find the first non-attemptable question from the start\n const firstNonAttemptableIndex = questions.findIndex(q => {\n const qResp = responses[q.response_id];\n const { attemptsHistory } = qResp ?? {};\n\n if (q.is_non_question) {\n return qResp?.responseGiven !== true;\n }\n\n if (q.item_type === 'exit-ticket') {\n return qResp?.skipped !== true && qResp?.response === undefined;\n }\n\n const lastAttemptScore = attemptsHistory?.slice(-1)[0]?.score;\n\n if (lastAttemptScore) {\n if ((lastAttemptScore.score ?? 0) === lastAttemptScore.max_score) {\n // Special handling for teacher discussion mode\n if (inClass && q.metadata.acknowledgements && !qResp?.validatedByTeacher) {\n return true;\n }\n\n return false;\n }\n\n const teacherInterventionNeeded = isTeacherInterventionNeeded({\n attemptsAfterTeacherInterventionNeeded,\n attemptsHistory,\n });\n\n if (!teacherInterventionNeeded) return true;\n\n return inClass;\n }\n\n return true;\n });\n\n // If all questions are attempted\n if (firstNonAttemptableIndex === -1) {\n return questions.length - 1;\n }\n\n // If first question is attemptable\n if (firstNonAttemptableIndex === 0) {\n return 0;\n }\n\n // Return the index before the first non-attemptable question\n return firstNonAttemptableIndex;\n};\n\n/**\n * Handles finding last attemptable question for default cases\n */\nconst getLastAttemptableIndexDefault: IGetLastAttemptableIndexDefault = ({\n questions,\n responses,\n behavior,\n}) => {\n const { maximumAttempts, validation, navigationMode } = behavior;\n\n const questionIndex = [...questions].reverse().findIndex(q => {\n const qResp = responses[q.response_id];\n const { attemptsHistory } = qResp ?? {};\n const lastAttemptScore = attemptsHistory?.slice(-1)[0]?.score;\n\n if (lastAttemptScore) {\n if ((lastAttemptScore.score ?? 0) === lastAttemptScore.max_score) return true;\n\n const maximumAttemptsReached = (attemptsHistory?.length ?? 0) >= maximumAttempts;\n\n if (maximumAttemptsReached) return true;\n\n return false;\n }\n\n if (!validation && navigationMode === 'LINEAR' && (qResp?.response || qResp?.skipped)) {\n return true;\n }\n\n return false;\n });\n\n if (questionIndex === -1) {\n return 0;\n }\n\n if (questionIndex === 0) {\n return questions.length - 1;\n }\n\n return questions.length - questionIndex;\n};\n\n/**\n * Main function that delegates to specialized functions based on behavior flags\n */\nexport const getLastAttemptableQuestionIndex: IGetLastAttemptableQuestionIndex = ({\n questions,\n responses,\n behavior,\n userType,\n inClass,\n}) => {\n const { teacherValidationEnabled, teacherDiscussionEnabled } = behavior;\n\n // Teacher validation mode takes precedence\n if (teacherValidationEnabled) {\n return getLastAttemptableIndexTeacherValidation({ questions, responses, userType });\n }\n\n // Teacher discussion mode\n if (teacherDiscussionEnabled) {\n return getLastAttemptableIndexTeacherDiscussion({ questions, responses, behavior, inClass });\n }\n\n // Default behavior\n return getLastAttemptableIndexDefault({ questions, responses, behavior });\n};\n"],"names":["getLastAttemptableIndexTeacherValidation","questions","responses","userType","questionIndex","q","qResp","validatedByTeacher","assignStatus","unskippedQuestionIndex","_a","lastUnlockedQuestionIndex","lastUnlockedQuestion","getLastAttemptableIndexTeacherDiscussion","behavior","inClass","attemptsAfterTeacherInterventionNeeded","firstNonAttemptableIndex","attemptsHistory","lastAttemptScore","isTeacherInterventionNeeded","getLastAttemptableIndexDefault","maximumAttempts","validation","navigationMode","getLastAttemptableQuestionIndex","teacherValidationEnabled","teacherDiscussionEnabled"],"mappings":";AA8CA,MAAMA,IAAsF,CAAC;AAAA,EAC3F,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACE,QAAAC,IAAgB,CAAC,GAAGH,CAAS,EAAE,UAAU,UAAU,CAAKI,MAAA;AACtD,UAAAC,IAAQJ,EAAUG,EAAE,WAAW,GAC/B,EAAE,oBAAAE,GAAoB,cAAAC,MAAiBF,KAAS,CAAA;AAMtD,WAJI,GAAAC,KAIAC,MAAiB;AAAA,EAId,CACR;AAED,MAAIJ,MAAkB;AACb,WAAA;AAGT,MAAIA,MAAkB,GAAG;AACjB,UAAAK,IAAyB,CAAC,GAAGR,CAAS,EAAE,UAAU,UAAU,CAAKI,MAAA;;AACrE,eAAOK,IAAAR,EAAUG,EAAE,WAAW,MAAvB,gBAAAK,EAA0B,kBAAiB;AAAA,IAAA,CACnD;AAEM,WAAAT,EAAU,SAASQ,IAAyB;AAAA,EACrD;AAEA,MAAIN,MAAa,WAAW;AACpB,UAAAQ,IAA4BV,EAAU,SAASG,GAC/CQ,IAAuBX,EAAUU,CAAyB,GAC1D,EAAE,cAAAH,EAAa,IAAIN,EAAUU,EAAqB,WAAW,KAAK;AAEpE,WAAAA,EAAqB,eAAe,CAACJ,IAChCG,IAA4B,IAG9BA;AAAA,EACT;AAEA,SAAOV,EAAU,SAASG;AAC5B,GAKMS,IAAsF,CAAC;AAAA,EAC3F,WAAAZ;AAAA,EACA,WAAAC;AAAA,EACA,UAAAY;AAAA,EACA,SAAAC;AACF,MAAM;AACE,QAAA,EAAE,wCAAAC,EAA2C,IAAAF,GAG7CG,IAA2BhB,EAAU,UAAU,CAAKI,MAAA;;AAClD,UAAAC,IAAQJ,EAAUG,EAAE,WAAW,GAC/B,EAAE,iBAAAa,EAAA,IAAoBZ,KAAS;AAErC,QAAID,EAAE;AACJ,cAAOC,KAAA,gBAAAA,EAAO,mBAAkB;AAG9B,QAAAD,EAAE,cAAc;AAClB,cAAOC,KAAA,gBAAAA,EAAO,aAAY,OAAQA,KAAA,gBAAAA,EAAO,cAAa;AAGxD,UAAMa,KAAmBT,IAAAQ,KAAA,gBAAAA,EAAiB,MAAM,IAAI,OAA3B,gBAAAR,EAA+B;AAExD,WAAIS,KACGA,EAAiB,SAAS,OAAOA,EAAiB,YAEjD,GAAAJ,KAAWV,EAAE,SAAS,oBAAoB,EAACC,KAAA,QAAAA,EAAO,uBAOtBc,EAA4B;AAAA,MAC5D,wCAAAJ;AAAA,MACA,iBAAAE;AAAA,IAAA,CACD,IAIMH,IAFgC,KAKlC;AAAA,EAAA,CACR;AAGD,SAAIE,MAA6B,KACxBhB,EAAU,SAAS,IAIxBgB,MAA6B,IACxB,IAIFA;AACT,GAKMI,IAAkE,CAAC;AAAA,EACvE,WAAApB;AAAA,EACA,WAAAC;AAAA,EACA,UAAAY;AACF,MAAM;AACJ,QAAM,EAAE,iBAAAQ,GAAiB,YAAAC,GAAY,gBAAAC,EAAA,IAAmBV,GAElDV,IAAgB,CAAC,GAAGH,CAAS,EAAE,UAAU,UAAU,CAAKI,MAAA;;AACtD,UAAAC,IAAQJ,EAAUG,EAAE,WAAW,GAC/B,EAAE,iBAAAa,EAAA,IAAoBZ,KAAS,IAC/Ba,KAAmBT,IAAAQ,KAAA,gBAAAA,EAAiB,MAAM,IAAI,OAA3B,gBAAAR,EAA+B;AAExD,WAAIS,KACGA,EAAiB,SAAS,OAAOA,EAAiB,eAEvBD,KAAA,gBAAAA,EAAiB,WAAU,MAAMI,IAO/D,IAACC,KAAcC,MAAmB,aAAalB,KAAA,QAAAA,EAAO,YAAYA,KAAA,QAAAA,EAAO;AAAA,EAItE,CACR;AAED,SAAIF,MAAkB,KACb,IAGLA,MAAkB,IACbH,EAAU,SAAS,IAGrBA,EAAU,SAASG;AAC5B,GAKaqB,IAAoE,CAAC;AAAA,EAChF,WAAAxB;AAAA,EACA,WAAAC;AAAA,EACA,UAAAY;AAAA,EACA,UAAAX;AAAA,EACA,SAAAY;AACF,MAAM;AACE,QAAA,EAAE,0BAAAW,GAA0B,0BAAAC,EAA6B,IAAAb;AAG/D,SAAIY,IACK1B,EAAyC,EAAE,WAAAC,GAAW,WAAAC,GAAW,UAAAC,EAAU,CAAA,IAIhFwB,IACKd,EAAyC,EAAE,WAAAZ,GAAW,WAAAC,GAAW,UAAAY,GAAU,SAAAC,GAAS,IAItFM,EAA+B,EAAE,WAAApB,GAAW,WAAAC,GAAW,UAAAY,EAAU,CAAA;AAC1E;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getLastAttemptableQuestionIndex as a } from "./get-last-attemptable-question-index.js";
|
|
2
|
+
const g = ({
|
|
3
|
+
questions: t,
|
|
4
|
+
responses: n,
|
|
5
|
+
behavior: e,
|
|
6
|
+
userType: o,
|
|
7
|
+
inClass: r
|
|
8
|
+
}) => e.navigationMode === "OPEN" ? t.length - 1 : a({
|
|
9
|
+
questions: t,
|
|
10
|
+
responses: n,
|
|
11
|
+
behavior: e,
|
|
12
|
+
userType: o,
|
|
13
|
+
inClass: r
|
|
14
|
+
});
|
|
15
|
+
export {
|
|
16
|
+
g as getLastUnlockedQuestionIndex
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=get-last-unlocked-question-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-last-unlocked-question-index.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-store/helpers/get-last-unlocked-question-index.ts"],"sourcesContent":["import type {\n IWorksheetBehavior,\n IWorksheetQuestion,\n IWorksheetResponse,\n} from '../../worksheet-types';\nimport type { TUserTypes } from '../../../../ui/types';\nimport { getLastAttemptableQuestionIndex } from './get-last-attemptable-question-index';\n\ninterface IGetLastUnlockedQuestionIndex {\n (options: {\n questions: IWorksheetQuestion[];\n responses: Record<string, IWorksheetResponse>;\n behavior: IWorksheetBehavior;\n userType: TUserTypes;\n inClass: boolean;\n }): number;\n}\n\nexport const getLastUnlockedQuestionIndex: IGetLastUnlockedQuestionIndex = ({\n questions,\n responses,\n behavior,\n userType,\n inClass,\n}) => {\n if (behavior.navigationMode === 'OPEN') {\n return questions.length - 1;\n }\n\n return getLastAttemptableQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n inClass,\n });\n};\n"],"names":["getLastUnlockedQuestionIndex","questions","responses","behavior","userType","inClass","getLastAttemptableQuestionIndex"],"mappings":";AAkBO,MAAMA,IAA8D,CAAC;AAAA,EAC1E,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AACF,MACMF,EAAS,mBAAmB,SACvBF,EAAU,SAAS,IAGrBK,EAAgC;AAAA,EACrC,WAAAL;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,CACD;"}
|
package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getQuestionMetadata as s } from "../../worksheet-helpers.js";
|
|
2
|
+
const i = (e, o, r) => {
|
|
3
|
+
const n = s(e.questions, o);
|
|
4
|
+
return n ? {
|
|
5
|
+
...e,
|
|
6
|
+
responses: {
|
|
7
|
+
...e.responses,
|
|
8
|
+
[o]: {
|
|
9
|
+
...n,
|
|
10
|
+
...e.responses[o],
|
|
11
|
+
...r
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
} : e;
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
i as getMergedResponseState
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=get-merged-response-state.js.map
|
package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-merged-response-state.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-store/helpers/get-merged-response-state.ts"],"sourcesContent":["import { getQuestionMetadata } from '../../worksheet-helpers';\nimport type { IWorksheetResponse, IWorksheetStore } from '../../worksheet-types';\n\ninterface IGetMergedResponseState {\n (\n state: IWorksheetStore,\n responseId: string,\n newResponse: Partial<IWorksheetResponse>,\n ): IWorksheetStore;\n}\nexport const getMergedResponseState: IGetMergedResponseState = (state, responseId, newResponse) => {\n const questionMeta = getQuestionMetadata(state.questions, responseId);\n\n if (!questionMeta) return state;\n\n return {\n ...state,\n responses: {\n ...state.responses,\n [responseId]: {\n ...questionMeta,\n ...state.responses[responseId],\n ...newResponse,\n },\n },\n };\n};\n"],"names":["getMergedResponseState","state","responseId","newResponse","questionMeta","getQuestionMetadata"],"mappings":";AAUO,MAAMA,IAAkD,CAACC,GAAOC,GAAYC,MAAgB;AACjG,QAAMC,IAAeC,EAAoBJ,EAAM,WAAWC,CAAU;AAEhE,SAACE,IAEE;AAAA,IACL,GAAGH;AAAA,IACH,WAAW;AAAA,MACT,GAAGA,EAAM;AAAA,MACT,CAACC,CAAU,GAAG;AAAA,QACZ,GAAGE;AAAA,QACH,GAAGH,EAAM,UAAUC,CAAU;AAAA,QAC7B,GAAGC;AAAA,MACL;AAAA,IACF;AAAA,EAAA,IAXwBF;AAa5B;"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { EWorksheetActivity as S } from "../../../../../types/models/worksheet.js";
|
|
2
|
+
import { OPTIONAL_ITEM_TYPES as T } from "../../constants.js";
|
|
3
|
+
import { isConceptIntroWidget as I } from "../../worksheet-helpers.js";
|
|
4
|
+
import { QUESTION_TAGS as f } from "../../worksheet-types.js";
|
|
5
|
+
const L = (c) => {
|
|
6
|
+
switch (c) {
|
|
7
|
+
case "overview":
|
|
8
|
+
return "overview";
|
|
9
|
+
case "learning":
|
|
10
|
+
case "learning-we-do":
|
|
11
|
+
case "learning-your-turn":
|
|
12
|
+
case "learning-explore":
|
|
13
|
+
return "learning";
|
|
14
|
+
case "practice":
|
|
15
|
+
return "practice";
|
|
16
|
+
case "practice-basic":
|
|
17
|
+
case "practice-basic-optional":
|
|
18
|
+
return "practice-basic";
|
|
19
|
+
case "practice-regular":
|
|
20
|
+
case "practice-regular-optional":
|
|
21
|
+
return "practice-regular";
|
|
22
|
+
case "exit-ticket":
|
|
23
|
+
return "exit-ticket";
|
|
24
|
+
case "advanced-explore":
|
|
25
|
+
case "advanced-we-do":
|
|
26
|
+
case "advanced-your-turn":
|
|
27
|
+
case "advanced-practice":
|
|
28
|
+
return "advanced";
|
|
29
|
+
default:
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}, w = (c) => c.reduce((h, m) => {
|
|
33
|
+
const [l, g] = m.split(":"), s = l == null ? void 0 : l.trim(), t = g == null ? void 0 : g.trim();
|
|
34
|
+
return !s || !t ? h : {
|
|
35
|
+
...h,
|
|
36
|
+
[s.toLowerCase()]: t
|
|
37
|
+
};
|
|
38
|
+
}, {}), V = (c, { nodeType: h, activityType: m }) => {
|
|
39
|
+
const l = c.reduce(
|
|
40
|
+
(s, t, o) => t.questions.reduce((n, e, i) => (n[e.response_id] = {
|
|
41
|
+
...e,
|
|
42
|
+
// Some questions are set to limited number of attempts which can show feedback which is causing the question to be stuck in the errored state
|
|
43
|
+
feedback_attempts: void 0,
|
|
44
|
+
item_reference: t.reference,
|
|
45
|
+
item_number: o,
|
|
46
|
+
item_display_number: o + 1,
|
|
47
|
+
item_tags: t.tags ?? [],
|
|
48
|
+
item_tags_map: w(t.tags ?? []),
|
|
49
|
+
question_number: i,
|
|
50
|
+
total_questions: t.questions.length
|
|
51
|
+
}, n), s),
|
|
52
|
+
{}
|
|
53
|
+
);
|
|
54
|
+
if (h === "LEARNING" && (m === S.LESSON_V3 || m == S.LESSON_V3_1))
|
|
55
|
+
return c.reduce((s, t, o) => {
|
|
56
|
+
var N;
|
|
57
|
+
let n = !1, e;
|
|
58
|
+
const { content: i, itemType: r } = t, d = L(r), a = s[s.length - 1], v = d === (a == null ? void 0 : a.section_name) && (a != null && a.item_display_number) ? a.item_display_number + 1 : 1, O = i.match(/question-[^"]*/g), p = O == null ? void 0 : O.reduce(
|
|
59
|
+
(_, u, b) => {
|
|
60
|
+
const E = l[u.replace("question-", "")];
|
|
61
|
+
if (!E)
|
|
62
|
+
throw new Error(`Question not found for the response id: ${u}`);
|
|
63
|
+
const q = I(E.instructor_stimulus);
|
|
64
|
+
return n = n || q, q && m === S.LESSON_V3_1 ? (e = E.stimulus, _) : (_.push({
|
|
65
|
+
...E,
|
|
66
|
+
concept_intro_stimulus: e,
|
|
67
|
+
is_non_question: m === S.LESSON_V3_1 && r === "overview",
|
|
68
|
+
item_display_number: v,
|
|
69
|
+
section_name: d,
|
|
70
|
+
item_type: r,
|
|
71
|
+
is_optional: r ? T.includes(r) : !1,
|
|
72
|
+
question_number: b - (n ? 1 : 0),
|
|
73
|
+
total_questions: O.length
|
|
74
|
+
}), e && (e = void 0), _);
|
|
75
|
+
},
|
|
76
|
+
[]
|
|
77
|
+
);
|
|
78
|
+
if (n = !1, p != null && p[0] && o > 0 && c.length > 0) {
|
|
79
|
+
const _ = (N = c[o - 1]) == null ? void 0 : N.itemType, u = r != null && r.startsWith("advanced-") ? "advanced" : r, b = _ != null && _.startsWith("advanced-") ? "advanced" : _;
|
|
80
|
+
if ((u === "practice" || u === "practice-basic" || u === "practice-regular" || u === "exit-ticket" || u === "advanced") && u !== b)
|
|
81
|
+
return [
|
|
82
|
+
...s,
|
|
83
|
+
{
|
|
84
|
+
...p[0],
|
|
85
|
+
metadata: {
|
|
86
|
+
...p[0].metadata,
|
|
87
|
+
teacher_tips: void 0,
|
|
88
|
+
hints: void 0,
|
|
89
|
+
solution: void 0
|
|
90
|
+
},
|
|
91
|
+
instructor_stimulus: "SystemIntro",
|
|
92
|
+
response_id: `${r}-system-intro`,
|
|
93
|
+
is_optional: r == null ? void 0 : r.startsWith("advanced-"),
|
|
94
|
+
is_non_question: m === S.LESSON_V3_1
|
|
95
|
+
},
|
|
96
|
+
...p ?? []
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
return [...s, ...p ?? []];
|
|
100
|
+
}, []);
|
|
101
|
+
const g = c.reduce((s, t) => {
|
|
102
|
+
const { content: o } = t, n = o.match(/question-[^"]*/g), e = n == null ? void 0 : n.map(
|
|
103
|
+
(i, r) => {
|
|
104
|
+
const d = l[i.replace("question-", "")];
|
|
105
|
+
if (!d)
|
|
106
|
+
throw new Error(`Question not found for the response id: ${i}`);
|
|
107
|
+
return {
|
|
108
|
+
...d,
|
|
109
|
+
question_number: r,
|
|
110
|
+
total_questions: n.length
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
return [...s, ...e ?? []];
|
|
115
|
+
}, []);
|
|
116
|
+
if (h === "TRIAL_DIAGNOSTIC") {
|
|
117
|
+
const s = [], t = {};
|
|
118
|
+
return g.sort((o, n) => {
|
|
119
|
+
var a, v;
|
|
120
|
+
const e = o.item_tags_map[f.TRIAL_TOPIC], i = n.item_tags_map[f.TRIAL_TOPIC];
|
|
121
|
+
if (e && t[e] === void 0 && (t[e] = s.length, s.push(e)), i && t[i] === void 0 && (t[i] = s.length, s.push(i)), !e || !i)
|
|
122
|
+
return 0;
|
|
123
|
+
const r = `${t[e]}-${((a = o.item_tags_map[f.QUESTION_CODE]) == null ? void 0 : a.length) ?? 0}`, d = `${t[i]}-${((v = n.item_tags_map[f.QUESTION_CODE]) == null ? void 0 : v.length) ?? 0}`;
|
|
124
|
+
return r > d ? 1 : -1;
|
|
125
|
+
}).map((o) => {
|
|
126
|
+
const n = t[o.item_tags_map[f.TRIAL_TOPIC] ?? ""] ?? 0, e = o.item_tags_map[f.QUESTION_CODE] ?? "";
|
|
127
|
+
return {
|
|
128
|
+
...o,
|
|
129
|
+
item_display_number: n * 3 + e.length
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return g;
|
|
134
|
+
};
|
|
135
|
+
export {
|
|
136
|
+
V as getQuestionsFromItems
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=get-questions-from-items.js.map
|
package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-questions-from-items.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-questions-from-items.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-store/helpers/get-questions-from-items.ts"],"sourcesContent":["import { EWorksheetActivity, type TNodeTypes } from '../../../../../types/models/worksheet';\nimport { OPTIONAL_ITEM_TYPES } from '../../constants';\nimport { isConceptIntroWidget } from '../../worksheet-helpers';\nimport {\n QUESTION_TAGS,\n type ILearnosityItem,\n type IWorksheetProps,\n type IWorksheetQuestion,\n type TItemType,\n type TSectionName,\n} from '../../worksheet-types';\n\ninterface IGetSectionNameFromItemType {\n (itemType?: TItemType): TSectionName | undefined;\n}\n\nconst getSectionNameFromItemType: IGetSectionNameFromItemType = itemType => {\n switch (itemType) {\n case 'overview':\n return 'overview';\n case 'learning':\n case 'learning-we-do':\n case 'learning-your-turn':\n case 'learning-explore':\n return 'learning';\n case 'practice':\n return 'practice';\n case 'practice-basic':\n case 'practice-basic-optional':\n return 'practice-basic';\n case 'practice-regular':\n case 'practice-regular-optional':\n return 'practice-regular';\n case 'exit-ticket':\n return 'exit-ticket';\n case 'advanced-explore':\n case 'advanced-we-do':\n case 'advanced-your-turn':\n case 'advanced-practice':\n return 'advanced';\n default:\n return undefined;\n }\n};\n\nconst getTagsMap = (tags: string[]): Record<string, string> => {\n return tags.reduce((acc, tag) => {\n const [key, value] = tag.split(':');\n const trimmedKey = key?.trim();\n const trimmedValue = value?.trim();\n\n if (!trimmedKey || !trimmedValue) {\n return acc;\n }\n\n return {\n ...acc,\n [trimmedKey.toLowerCase()]: trimmedValue,\n };\n }, {});\n};\n\ninterface IGetQuestionsFromItems {\n (\n items: ILearnosityItem[],\n options: {\n nodeType: TNodeTypes;\n activityType: IWorksheetProps['activityType'];\n },\n ): IWorksheetQuestion[];\n}\nconst getQuestionsFromItems: IGetQuestionsFromItems = (items, { nodeType, activityType }) => {\n const questionsMap: Record<string, IWorksheetQuestion> = (() => {\n return items.reduce(\n (acc, item, itemIndex) =>\n item.questions.reduce((accInner, question, questionIndex) => {\n accInner[question.response_id] = {\n ...question,\n // Some questions are set to limited number of attempts which can show feedback which is causing the question to be stuck in the errored state\n feedback_attempts: undefined,\n item_reference: item.reference,\n item_number: itemIndex,\n item_display_number: itemIndex + 1,\n item_tags: item.tags ?? [],\n item_tags_map: getTagsMap(item.tags ?? []),\n question_number: questionIndex,\n total_questions: item.questions.length,\n };\n\n return accInner;\n }, acc),\n {} as Record<string, IWorksheetQuestion>,\n );\n })();\n\n if (\n nodeType === 'LEARNING' &&\n (activityType === EWorksheetActivity.LESSON_V3 ||\n activityType == EWorksheetActivity.LESSON_V3_1)\n ) {\n return items.reduce((acc, item, itemIndex) => {\n let hasIntroWidget = false;\n let conceptIntroStimulus: string | undefined;\n const { content, itemType } = item;\n const sectionName = getSectionNameFromItemType(itemType);\n const prevItem = acc[acc.length - 1];\n const itemDisplayNumber =\n sectionName === prevItem?.section_name && prevItem?.item_display_number\n ? prevItem.item_display_number + 1\n : 1;\n const orderedQuestionIds = content.match(/question-[^\"]*/g);\n const orderedQuestions = orderedQuestionIds?.reduce(\n (accQuestions, responseId, widgetIndex) => {\n const question = questionsMap[responseId.replace('question-', '')];\n\n if (!question) {\n throw new Error(`Question not found for the response id: ${responseId}`);\n }\n\n const isConceptIntro = isConceptIntroWidget(question.instructor_stimulus);\n\n hasIntroWidget = hasIntroWidget || isConceptIntro;\n\n if (isConceptIntro && activityType === EWorksheetActivity.LESSON_V3_1) {\n conceptIntroStimulus = question.stimulus;\n\n return accQuestions;\n }\n\n accQuestions.push({\n ...question,\n concept_intro_stimulus: conceptIntroStimulus,\n is_non_question:\n activityType === EWorksheetActivity.LESSON_V3_1 && itemType === 'overview',\n item_display_number: itemDisplayNumber,\n section_name: sectionName,\n item_type: itemType,\n is_optional: itemType ? OPTIONAL_ITEM_TYPES.includes(itemType) : false,\n question_number: widgetIndex - (hasIntroWidget ? 1 : 0),\n total_questions: orderedQuestionIds.length,\n } as IWorksheetQuestion);\n\n if (conceptIntroStimulus) conceptIntroStimulus = undefined;\n\n return accQuestions;\n },\n [] as IWorksheetQuestion[],\n );\n\n hasIntroWidget = false;\n\n if (orderedQuestions?.[0] && itemIndex > 0 && items.length > 0) {\n const prevItemType = items[itemIndex - 1]?.itemType;\n const itemTypeDerived = itemType?.startsWith('advanced-') ? 'advanced' : itemType;\n const prevItemTypeDerived = prevItemType?.startsWith('advanced-')\n ? 'advanced'\n : prevItemType;\n\n if (\n (itemTypeDerived === 'practice' ||\n itemTypeDerived === 'practice-basic' ||\n itemTypeDerived === 'practice-regular' ||\n itemTypeDerived === 'exit-ticket' ||\n itemTypeDerived === 'advanced') &&\n itemTypeDerived !== prevItemTypeDerived\n ) {\n return [\n ...acc,\n {\n ...orderedQuestions[0],\n metadata: {\n ...orderedQuestions[0].metadata,\n teacher_tips: undefined,\n hints: undefined,\n solution: undefined,\n },\n instructor_stimulus: 'SystemIntro',\n response_id: `${itemType}-system-intro`,\n is_optional: itemType?.startsWith('advanced-'),\n is_non_question: activityType === EWorksheetActivity.LESSON_V3_1,\n },\n ...(orderedQuestions ?? []),\n ];\n }\n }\n\n return [...acc, ...(orderedQuestions ?? [])];\n }, [] as IWorksheetQuestion[]);\n }\n\n const finalQuestions = items.reduce((acc, item) => {\n const { content } = item;\n const orderedQuestionIds = content.match(/question-[^\"]*/g);\n const orderedQuestions = orderedQuestionIds?.map<IWorksheetQuestion>(\n (responseId, widgetIndex) => {\n const question = questionsMap[responseId.replace('question-', '')];\n\n if (!question) {\n throw new Error(`Question not found for the response id: ${responseId}`);\n }\n\n return {\n ...question,\n question_number: widgetIndex,\n total_questions: orderedQuestionIds.length,\n };\n },\n );\n\n return [...acc, ...(orderedQuestions ?? [])];\n }, [] as IWorksheetQuestion[]);\n\n if (nodeType === 'TRIAL_DIAGNOSTIC') {\n const topics: string[] = [];\n const topicsOrder: Record<string, number> = {};\n\n return finalQuestions\n .sort((a, b) => {\n const aTopic = a.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC];\n const bTopic = b.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC];\n\n if (aTopic && topicsOrder[aTopic] === undefined) {\n topicsOrder[aTopic] = topics.length;\n topics.push(aTopic);\n }\n\n if (bTopic && topicsOrder[bTopic] === undefined) {\n topicsOrder[bTopic] = topics.length;\n topics.push(bTopic);\n }\n\n if (!aTopic || !bTopic) {\n return 0;\n }\n\n const aSortKey = `${topicsOrder[aTopic]}-${\n a.item_tags_map[QUESTION_TAGS.QUESTION_CODE]?.length ?? 0\n }`;\n const bSortKey = `${topicsOrder[bTopic]}-${\n b.item_tags_map[QUESTION_TAGS.QUESTION_CODE]?.length ?? 0\n }`;\n\n return aSortKey > bSortKey ? 1 : -1;\n })\n .map(question => {\n const topicOrder =\n topicsOrder[question.item_tags_map[QUESTION_TAGS.TRIAL_TOPIC] ?? ''] ?? 0;\n const questionCode = question.item_tags_map[QUESTION_TAGS.QUESTION_CODE] ?? '';\n\n return {\n ...question,\n item_display_number: topicOrder * 3 + questionCode.length,\n };\n });\n }\n\n return finalQuestions;\n};\n\nexport { getQuestionsFromItems };\n"],"names":["getSectionNameFromItemType","itemType","getTagsMap","tags","acc","tag","key","value","trimmedKey","trimmedValue","getQuestionsFromItems","items","nodeType","activityType","questionsMap","item","itemIndex","accInner","question","questionIndex","EWorksheetActivity","hasIntroWidget","conceptIntroStimulus","content","sectionName","prevItem","itemDisplayNumber","orderedQuestionIds","orderedQuestions","accQuestions","responseId","widgetIndex","isConceptIntro","isConceptIntroWidget","OPTIONAL_ITEM_TYPES","prevItemType","_a","itemTypeDerived","prevItemTypeDerived","finalQuestions","topics","topicsOrder","a","b","aTopic","QUESTION_TAGS","bTopic","aSortKey","bSortKey","_b","topicOrder","questionCode"],"mappings":";;;;AAgBA,MAAMA,IAA0D,CAAYC,MAAA;AAC1E,UAAQA,GAAU;AAAA,IAChB,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS;AAAA,EACX;AACF,GAEMC,IAAa,CAACC,MACXA,EAAK,OAAO,CAACC,GAAKC,MAAQ;AAC/B,QAAM,CAACC,GAAKC,CAAK,IAAIF,EAAI,MAAM,GAAG,GAC5BG,IAAaF,KAAA,gBAAAA,EAAK,QAClBG,IAAeF,KAAA,gBAAAA,EAAO;AAExB,SAAA,CAACC,KAAc,CAACC,IACXL,IAGF;AAAA,IACL,GAAGA;AAAA,IACH,CAACI,EAAW,YAAY,CAAC,GAAGC;AAAA,EAAA;AAEhC,GAAG,CAAE,CAAA,GAYDC,IAAgD,CAACC,GAAO,EAAE,UAAAC,GAAU,cAAAC,QAAmB;AAC3F,QAAMC,IACGH,EAAM;AAAA,IACX,CAACP,GAAKW,GAAMC,MACVD,EAAK,UAAU,OAAO,CAACE,GAAUC,GAAUC,OAChCF,EAAAC,EAAS,WAAW,IAAI;AAAA,MAC/B,GAAGA;AAAA;AAAA,MAEH,mBAAmB;AAAA,MACnB,gBAAgBH,EAAK;AAAA,MACrB,aAAaC;AAAA,MACb,qBAAqBA,IAAY;AAAA,MACjC,WAAWD,EAAK,QAAQ,CAAC;AAAA,MACzB,eAAeb,EAAWa,EAAK,QAAQ,CAAA,CAAE;AAAA,MACzC,iBAAiBI;AAAA,MACjB,iBAAiBJ,EAAK,UAAU;AAAA,IAAA,GAG3BE,IACNb,CAAG;AAAA,IACR,CAAC;AAAA,EAAA;AAIL,MACEQ,MAAa,eACZC,MAAiBO,EAAmB,aACnCP,KAAgBO,EAAmB;AAErC,WAAOT,EAAM,OAAO,CAACP,GAAKW,GAAMC,MAAc;;AAC5C,UAAIK,IAAiB,IACjBC;AACE,YAAA,EAAE,SAAAC,GAAS,UAAAtB,EAAa,IAAAc,GACxBS,IAAcxB,EAA2BC,CAAQ,GACjDwB,IAAWrB,EAAIA,EAAI,SAAS,CAAC,GAC7BsB,IACJF,OAAgBC,KAAA,gBAAAA,EAAU,kBAAgBA,KAAA,QAAAA,EAAU,uBAChDA,EAAS,sBAAsB,IAC/B,GACAE,IAAqBJ,EAAQ,MAAM,iBAAiB,GACpDK,IAAmBD,KAAA,gBAAAA,EAAoB;AAAA,QAC3C,CAACE,GAAcC,GAAYC,MAAgB;AACzC,gBAAMb,IAAWJ,EAAagB,EAAW,QAAQ,aAAa,EAAE,CAAC;AAEjE,cAAI,CAACZ;AACH,kBAAM,IAAI,MAAM,2CAA2CY,CAAU,EAAE;AAGnE,gBAAAE,IAAiBC,EAAqBf,EAAS,mBAAmB;AAIpE,iBAFJG,IAAiBA,KAAkBW,GAE/BA,KAAkBnB,MAAiBO,EAAmB,eACxDE,IAAuBJ,EAAS,UAEzBW,MAGTA,EAAa,KAAK;AAAA,YAChB,GAAGX;AAAA,YACH,wBAAwBI;AAAA,YACxB,iBACET,MAAiBO,EAAmB,eAAenB,MAAa;AAAA,YAClE,qBAAqByB;AAAA,YACrB,cAAcF;AAAA,YACd,WAAWvB;AAAA,YACX,aAAaA,IAAWiC,EAAoB,SAASjC,CAAQ,IAAI;AAAA,YACjE,iBAAiB8B,KAAeV,IAAiB,IAAI;AAAA,YACrD,iBAAiBM,EAAmB;AAAA,UAAA,CACf,GAEnBL,MAA6CA,IAAA,SAE1CO;AAAA,QACT;AAAA,QACA,CAAC;AAAA;AAKH,UAFiBR,IAAA,IAEbO,KAAA,QAAAA,EAAmB,MAAMZ,IAAY,KAAKL,EAAM,SAAS,GAAG;AAC9D,cAAMwB,KAAeC,IAAAzB,EAAMK,IAAY,CAAC,MAAnB,gBAAAoB,EAAsB,UACrCC,IAAkBpC,KAAA,QAAAA,EAAU,WAAW,eAAe,aAAaA,GACnEqC,IAAsBH,KAAA,QAAAA,EAAc,WAAW,eACjD,aACAA;AAGD,aAAAE,MAAoB,cACnBA,MAAoB,oBACpBA,MAAoB,sBACpBA,MAAoB,iBACpBA,MAAoB,eACtBA,MAAoBC;AAEb,iBAAA;AAAA,YACL,GAAGlC;AAAA,YACH;AAAA,cACE,GAAGwB,EAAiB,CAAC;AAAA,cACrB,UAAU;AAAA,gBACR,GAAGA,EAAiB,CAAC,EAAE;AAAA,gBACvB,cAAc;AAAA,gBACd,OAAO;AAAA,gBACP,UAAU;AAAA,cACZ;AAAA,cACA,qBAAqB;AAAA,cACrB,aAAa,GAAG3B,CAAQ;AAAA,cACxB,aAAaA,KAAA,gBAAAA,EAAU,WAAW;AAAA,cAClC,iBAAiBY,MAAiBO,EAAmB;AAAA,YACvD;AAAA,YACA,GAAIQ,KAAoB,CAAC;AAAA,UAAA;AAAA,MAG/B;AAEA,aAAO,CAAC,GAAGxB,GAAK,GAAIwB,KAAoB,CAAG,CAAA;AAAA,IAC7C,GAAG,CAA0B,CAAA;AAG/B,QAAMW,IAAiB5B,EAAM,OAAO,CAACP,GAAKW,MAAS;AAC3C,UAAA,EAAE,SAAAQ,EAAY,IAAAR,GACdY,IAAqBJ,EAAQ,MAAM,iBAAiB,GACpDK,IAAmBD,KAAA,gBAAAA,EAAoB;AAAA,MAC3C,CAACG,GAAYC,MAAgB;AAC3B,cAAMb,IAAWJ,EAAagB,EAAW,QAAQ,aAAa,EAAE,CAAC;AAEjE,YAAI,CAACZ;AACH,gBAAM,IAAI,MAAM,2CAA2CY,CAAU,EAAE;AAGlE,eAAA;AAAA,UACL,GAAGZ;AAAA,UACH,iBAAiBa;AAAA,UACjB,iBAAiBJ,EAAmB;AAAA,QAAA;AAAA,MAExC;AAAA;AAGF,WAAO,CAAC,GAAGvB,GAAK,GAAIwB,KAAoB,CAAG,CAAA;AAAA,EAC7C,GAAG,CAA0B,CAAA;AAE7B,MAAIhB,MAAa,oBAAoB;AACnC,UAAM4B,IAAmB,CAAA,GACnBC,IAAsC,CAAA;AAE5C,WAAOF,EACJ,KAAK,CAACG,GAAGC,MAAM;;AACd,YAAMC,IAASF,EAAE,cAAcG,EAAc,WAAW,GAClDC,IAASH,EAAE,cAAcE,EAAc,WAAW;AAYpD,UAVAD,KAAUH,EAAYG,CAAM,MAAM,WACxBH,EAAAG,CAAM,IAAIJ,EAAO,QAC7BA,EAAO,KAAKI,CAAM,IAGhBE,KAAUL,EAAYK,CAAM,MAAM,WACxBL,EAAAK,CAAM,IAAIN,EAAO,QAC7BA,EAAO,KAAKM,CAAM,IAGhB,CAACF,KAAU,CAACE;AACP,eAAA;AAGT,YAAMC,IAAW,GAAGN,EAAYG,CAAM,CAAC,MACrCR,IAAAM,EAAE,cAAcG,EAAc,aAAa,MAA3C,gBAAAT,EAA8C,WAAU,CAC1D,IACMY,IAAW,GAAGP,EAAYK,CAAM,CAAC,MACrCG,IAAAN,EAAE,cAAcE,EAAc,aAAa,MAA3C,gBAAAI,EAA8C,WAAU,CAC1D;AAEO,aAAAF,IAAWC,IAAW,IAAI;AAAA,IAAA,CAClC,EACA,IAAI,CAAY9B,MAAA;AACT,YAAAgC,IACJT,EAAYvB,EAAS,cAAc2B,EAAc,WAAW,KAAK,EAAE,KAAK,GACpEM,IAAejC,EAAS,cAAc2B,EAAc,aAAa,KAAK;AAErE,aAAA;AAAA,QACL,GAAG3B;AAAA,QACH,qBAAqBgC,IAAa,IAAIC,EAAa;AAAA,MAAA;AAAA,IACrD,CACD;AAAA,EACL;AAEO,SAAAZ;AACT;"}
|
package/dist/features/worksheet/worksheet/worksheet-store/helpers/get-renderable-questions.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-renderable-questions.js","sources":["../../../../../../src/features/worksheet/worksheet/worksheet-store/helpers/get-renderable-questions.ts"],"sourcesContent":["import type { IWorksheetStore } from '../../worksheet-types';\n\ninterface IGetRenderableQuestions {\n (\n options: Pick<IWorksheetStore, 'questions' | 'lastUnlockedQuestionIndex' | 'userType'>,\n ): IWorksheetStore['questions'];\n}\nexport const getRenderableQuestions: IGetRenderableQuestions = ({\n userType,\n questions,\n lastUnlockedQuestionIndex,\n}) => {\n return questions.filter((_, index) => {\n const isUnlocked = userType === 'TEACHER' ? true : index <= lastUnlockedQuestionIndex;\n\n if (!isUnlocked) return false;\n\n return true;\n });\n};\n"],"names":["getRenderableQuestions","userType","questions","lastUnlockedQuestionIndex","_","index"],"mappings":"AAOO,MAAMA,IAAkD,CAAC;AAAA,EAC9D,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,2BAAAC;AACF,MACSD,EAAU,OAAO,CAACE,GAAGC,MACPJ,MAAa,YAAY,KAAOI,KAASF,CAK7D;"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { createContext as R } from "react";
|
|
2
|
+
import { createStore as U } from "zustand";
|
|
3
|
+
import { subscribeWithSelector as q } from "../../../../node_modules/zustand/esm/middleware.js";
|
|
4
|
+
import { scrollToQuestion as g } from "../worksheet-helpers.js";
|
|
5
|
+
import { getComputedProperties as v } from "./helpers/get-computed-properties.js";
|
|
6
|
+
import { getDerivedBlocker as S } from "./helpers/get-derived-blocker.js";
|
|
7
|
+
import { getLastUnlockedQuestionIndex as T } from "./helpers/get-last-unlocked-question-index.js";
|
|
8
|
+
import { getMergedResponseState as f } from "./helpers/get-merged-response-state.js";
|
|
9
|
+
import { getRenderableQuestions as V } from "./helpers/get-renderable-questions.js";
|
|
10
|
+
const F = (k) => {
|
|
11
|
+
const d = /* @__PURE__ */ new Set(), Q = (r, e) => {
|
|
12
|
+
const o = setTimeout(() => {
|
|
13
|
+
d.delete(o), r();
|
|
14
|
+
}, e);
|
|
15
|
+
return d.add(o), o;
|
|
16
|
+
}, x = () => {
|
|
17
|
+
d.forEach((r) => clearTimeout(r)), d.clear();
|
|
18
|
+
};
|
|
19
|
+
return U()(
|
|
20
|
+
q((r) => ({
|
|
21
|
+
// Initialize with exact props passed in
|
|
22
|
+
...k,
|
|
23
|
+
...v(k),
|
|
24
|
+
// Actions
|
|
25
|
+
mergeWorksheetProps: (e) => {
|
|
26
|
+
r((o) => ({
|
|
27
|
+
...o,
|
|
28
|
+
...e,
|
|
29
|
+
...v(e, o)
|
|
30
|
+
}));
|
|
31
|
+
},
|
|
32
|
+
setResponses: (e) => {
|
|
33
|
+
r((o) => {
|
|
34
|
+
var u;
|
|
35
|
+
const i = {
|
|
36
|
+
...o,
|
|
37
|
+
responses: typeof e == "function" ? e(o.responses) : e
|
|
38
|
+
}, { questions: t, responses: n, behavior: s, userType: c } = i, l = T({
|
|
39
|
+
questions: t,
|
|
40
|
+
responses: n,
|
|
41
|
+
behavior: s,
|
|
42
|
+
userType: c,
|
|
43
|
+
inClass: !!i.inClass
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
...i,
|
|
47
|
+
lastUnlockedQuestionIndex: l,
|
|
48
|
+
renderableQuestions: V({
|
|
49
|
+
questions: t,
|
|
50
|
+
lastUnlockedQuestionIndex: l,
|
|
51
|
+
userType: c
|
|
52
|
+
}),
|
|
53
|
+
blocker: S({
|
|
54
|
+
currentBlocker: o == null ? void 0 : o.blocker,
|
|
55
|
+
teacherValidationEnabled: s.teacherValidationEnabled,
|
|
56
|
+
userType: c,
|
|
57
|
+
lastUnlockedQuestion: t[l],
|
|
58
|
+
lastUnlockedQuestionResponse: n[((u = t[l]) == null ? void 0 : u.response_id) ?? ""]
|
|
59
|
+
})
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
updateResponse: ({ responseId: e, response: o, score: i, answerChecked: t, timeSpent: n }) => {
|
|
64
|
+
r((s) => {
|
|
65
|
+
var C;
|
|
66
|
+
const c = !!t, l = s.responses[e], u = f(s, e, {
|
|
67
|
+
response: o,
|
|
68
|
+
score: i,
|
|
69
|
+
responseEdited: !c,
|
|
70
|
+
attemptsHistory: c ? [...(l == null ? void 0 : l.attemptsHistory) ?? [], { response: o, score: i }] : l == null ? void 0 : l.attemptsHistory,
|
|
71
|
+
skipped: !o,
|
|
72
|
+
timeSpent: n,
|
|
73
|
+
retryEnabled: c ? !1 : l == null ? void 0 : l.retryEnabled
|
|
74
|
+
}), { questions: a, responses: b, behavior: h, userType: p } = u, m = T({
|
|
75
|
+
questions: a,
|
|
76
|
+
responses: b,
|
|
77
|
+
behavior: h,
|
|
78
|
+
userType: p,
|
|
79
|
+
inClass: !!u.inClass
|
|
80
|
+
}), y = b[e];
|
|
81
|
+
return y && s.onResponseChange && s.onResponseChange({
|
|
82
|
+
responseId: e,
|
|
83
|
+
response: y,
|
|
84
|
+
question: a.find((E) => E.response_id === e),
|
|
85
|
+
isNewAttempt: c
|
|
86
|
+
}), {
|
|
87
|
+
...u,
|
|
88
|
+
lastUnlockedQuestionIndex: m,
|
|
89
|
+
renderableQuestions: V({
|
|
90
|
+
questions: a,
|
|
91
|
+
userType: p,
|
|
92
|
+
lastUnlockedQuestionIndex: m
|
|
93
|
+
}),
|
|
94
|
+
blocker: S({
|
|
95
|
+
currentBlocker: s == null ? void 0 : s.blocker,
|
|
96
|
+
teacherValidationEnabled: h.teacherValidationEnabled,
|
|
97
|
+
userType: p,
|
|
98
|
+
lastUnlockedQuestion: a[m],
|
|
99
|
+
lastUnlockedQuestionResponse: b[((C = a[m]) == null ? void 0 : C.response_id) ?? ""]
|
|
100
|
+
})
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
},
|
|
104
|
+
updateMediaState: (e, o, i) => {
|
|
105
|
+
const t = o === "SIMULATION" ? "simState" : void 0;
|
|
106
|
+
t && r((n) => {
|
|
107
|
+
if (n.onResponseChange) {
|
|
108
|
+
const s = f(n, e, { [t]: i }), c = s == null ? void 0 : s.responses[e];
|
|
109
|
+
return c && n.onResponseChange({
|
|
110
|
+
responseId: e,
|
|
111
|
+
response: c,
|
|
112
|
+
isNewAttempt: !1,
|
|
113
|
+
question: n.questions.find((l) => l.response_id === e)
|
|
114
|
+
}), s;
|
|
115
|
+
}
|
|
116
|
+
return n.onMediaStateChange && n.onMediaStateChange(
|
|
117
|
+
n.questions.find((s) => s.response_id === e),
|
|
118
|
+
o,
|
|
119
|
+
i
|
|
120
|
+
), n;
|
|
121
|
+
});
|
|
122
|
+
},
|
|
123
|
+
setDiscussionQuestionOffset: (e, o) => {
|
|
124
|
+
r((i) => {
|
|
125
|
+
const t = f(i, e, {
|
|
126
|
+
discussionQuestionOffset: o
|
|
127
|
+
});
|
|
128
|
+
if (i.onResponseChange) {
|
|
129
|
+
const n = t == null ? void 0 : t.responses[e];
|
|
130
|
+
n && i.onResponseChange({
|
|
131
|
+
responseId: e,
|
|
132
|
+
response: n,
|
|
133
|
+
isNewAttempt: !1,
|
|
134
|
+
question: i.questions.find((s) => s.response_id === e)
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return t;
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
showSummary: () => {
|
|
141
|
+
r((e) => ({
|
|
142
|
+
...e,
|
|
143
|
+
summaryVisible: !0
|
|
144
|
+
}));
|
|
145
|
+
},
|
|
146
|
+
hideSummary: () => {
|
|
147
|
+
r((e) => ({
|
|
148
|
+
...e,
|
|
149
|
+
summaryVisible: !1
|
|
150
|
+
}));
|
|
151
|
+
},
|
|
152
|
+
toggleSummary: () => {
|
|
153
|
+
r((e) => ({
|
|
154
|
+
...e,
|
|
155
|
+
summaryVisible: !e.summaryVisible
|
|
156
|
+
}));
|
|
157
|
+
},
|
|
158
|
+
toggleCalculator: () => {
|
|
159
|
+
r((e) => ({
|
|
160
|
+
...e,
|
|
161
|
+
calculatorVisible: !e.calculatorVisible
|
|
162
|
+
}));
|
|
163
|
+
},
|
|
164
|
+
toggleScribble: () => {
|
|
165
|
+
r((e) => ({
|
|
166
|
+
...e,
|
|
167
|
+
scribblingEnabled: !e.scribblingEnabled
|
|
168
|
+
}));
|
|
169
|
+
},
|
|
170
|
+
setBlocker: (e) => {
|
|
171
|
+
r((o) => ({
|
|
172
|
+
...o,
|
|
173
|
+
blocker: e
|
|
174
|
+
}));
|
|
175
|
+
},
|
|
176
|
+
removeBlocker: () => {
|
|
177
|
+
r((e) => {
|
|
178
|
+
var o;
|
|
179
|
+
if (e.blocker) {
|
|
180
|
+
const i = (o = e.questions[e.lastUnlockedQuestionIndex]) == null ? void 0 : o.response_id;
|
|
181
|
+
i && Q(() => {
|
|
182
|
+
g(i);
|
|
183
|
+
}, 50);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
...e,
|
|
187
|
+
blocker: void 0
|
|
188
|
+
};
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
markForReview: (e, o) => {
|
|
192
|
+
r((i) => f(i, e, { markedForReview: o }));
|
|
193
|
+
},
|
|
194
|
+
changeQuestion: (e, o = !0, i = 0) => {
|
|
195
|
+
r((t) => {
|
|
196
|
+
var s;
|
|
197
|
+
const n = {
|
|
198
|
+
...t,
|
|
199
|
+
summaryVisible: !1
|
|
200
|
+
};
|
|
201
|
+
return o && t.layout.questionsScrollable ? i > 0 ? Q(() => {
|
|
202
|
+
g(e);
|
|
203
|
+
}, i) : requestAnimationFrame(() => g(e)) : t.activeQuestionId !== e && (n.activeQuestionId = e, n.activeQuestionIndex = n.questions.findIndex(
|
|
204
|
+
(c) => c.response_id === e
|
|
205
|
+
), n.activeQuestionTool = void 0, (s = n.onActiveQuestionChange) == null || s.call(n, n.questions[n.activeQuestionIndex])), n;
|
|
206
|
+
});
|
|
207
|
+
},
|
|
208
|
+
setActiveQuestionTool(e) {
|
|
209
|
+
r((o) => ({
|
|
210
|
+
...o,
|
|
211
|
+
activeQuestionTool: e
|
|
212
|
+
}));
|
|
213
|
+
},
|
|
214
|
+
unsetActiveQuestionTool() {
|
|
215
|
+
r((e) => ({
|
|
216
|
+
...e,
|
|
217
|
+
activeQuestionTool: void 0
|
|
218
|
+
}));
|
|
219
|
+
},
|
|
220
|
+
destroy: () => {
|
|
221
|
+
x();
|
|
222
|
+
}
|
|
223
|
+
}))
|
|
224
|
+
);
|
|
225
|
+
}, L = R(null);
|
|
226
|
+
export {
|
|
227
|
+
L as WorksheetContext,
|
|
228
|
+
F as createWorksheetStore
|
|
229
|
+
};
|
|
230
|
+
//# sourceMappingURL=worksheet-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worksheet-store.js","sources":["../../../../../src/features/worksheet/worksheet/worksheet-store/worksheet-store.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { createStore } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\n\nimport { scrollToQuestion } from '../worksheet-helpers';\nimport type { IWorksheetStore, TWorksheetStoreProps } from '../worksheet-types';\nimport { getComputedProperties } from './helpers/get-computed-properties';\nimport { getDerivedBlocker } from './helpers/get-derived-blocker';\nimport { getLastUnlockedQuestionIndex } from './helpers/get-last-unlocked-question-index';\nimport { getMergedResponseState } from './helpers/get-merged-response-state';\nimport { getRenderableQuestions } from './helpers/get-renderable-questions';\n\n// Store creator function with strict typing\nexport const createWorksheetStore = (initProps: TWorksheetStoreProps) => {\n // Register store instance for memory leak monitoring\n\n // Track active timeouts to enable cleanup\n const activeTimeouts = new Set<NodeJS.Timeout>();\n\n const createManagedTimeout = (callback: () => void, delay: number): NodeJS.Timeout => {\n const timeoutId = setTimeout(() => {\n activeTimeouts.delete(timeoutId);\n callback();\n }, delay);\n\n activeTimeouts.add(timeoutId);\n\n return timeoutId;\n };\n\n const clearAllTimeouts = () => {\n activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n activeTimeouts.clear();\n };\n\n return createStore<IWorksheetStore>()(\n subscribeWithSelector(set => {\n return {\n // Initialize with exact props passed in\n ...initProps,\n ...getComputedProperties(initProps),\n\n // Actions\n mergeWorksheetProps: (data: TWorksheetStoreProps) => {\n set(state => ({\n ...state,\n ...data,\n ...getComputedProperties(data, state),\n }));\n },\n\n setResponses: responses => {\n set(state => {\n const newState = {\n ...state,\n responses: typeof responses === 'function' ? responses(state.responses) : responses,\n };\n const { questions, responses: newResponses, behavior, userType } = newState;\n const lastUnlockedQuestionIndex = getLastUnlockedQuestionIndex({\n questions,\n responses: newResponses,\n behavior,\n userType,\n inClass: !!newState.inClass,\n });\n\n return {\n ...newState,\n lastUnlockedQuestionIndex,\n renderableQuestions: getRenderableQuestions({\n questions,\n lastUnlockedQuestionIndex,\n userType,\n }),\n blocker: getDerivedBlocker({\n currentBlocker: state?.blocker,\n teacherValidationEnabled: behavior.teacherValidationEnabled,\n userType,\n lastUnlockedQuestion: questions[lastUnlockedQuestionIndex]!,\n lastUnlockedQuestionResponse:\n newResponses[questions[lastUnlockedQuestionIndex]?.response_id ?? ''],\n }),\n };\n });\n },\n\n updateResponse: ({ responseId, response, score, answerChecked, timeSpent }) => {\n set(state => {\n const isNewAttempt = !!answerChecked;\n const prevResponse = state.responses[responseId];\n\n const newState = getMergedResponseState(state, responseId, {\n response,\n score,\n responseEdited: !isNewAttempt,\n attemptsHistory: isNewAttempt\n ? [...(prevResponse?.attemptsHistory ?? []), { response, score }]\n : prevResponse?.attemptsHistory,\n skipped: !response,\n timeSpent,\n retryEnabled: isNewAttempt ? false : prevResponse?.retryEnabled,\n });\n const { questions, responses, behavior, userType } = newState;\n const lastUnlockedQuestionIndex = getLastUnlockedQuestionIndex({\n questions,\n responses,\n behavior,\n userType,\n inClass: !!newState.inClass,\n });\n const newResponse = responses[responseId];\n\n if (newResponse && state.onResponseChange) {\n state.onResponseChange({\n responseId,\n response: newResponse,\n question: questions.find(q => q.response_id === responseId)!,\n isNewAttempt,\n });\n }\n\n return {\n ...newState,\n lastUnlockedQuestionIndex,\n renderableQuestions: getRenderableQuestions({\n questions,\n userType,\n lastUnlockedQuestionIndex,\n }),\n blocker: getDerivedBlocker({\n currentBlocker: state?.blocker,\n teacherValidationEnabled: behavior.teacherValidationEnabled,\n userType,\n lastUnlockedQuestion: questions[lastUnlockedQuestionIndex]!,\n lastUnlockedQuestionResponse:\n responses[questions[lastUnlockedQuestionIndex]?.response_id ?? ''],\n }),\n };\n });\n },\n\n updateMediaState: (responseId, mediaType, mediaState) => {\n const key = mediaType === 'SIMULATION' ? 'simState' : undefined;\n\n if (!key) return;\n\n set(state => {\n if (state.onResponseChange) {\n const newState = getMergedResponseState(state, responseId, { [key]: mediaState });\n const response = newState?.responses[responseId];\n\n if (response) {\n state.onResponseChange({\n responseId,\n response,\n isNewAttempt: false,\n question: state.questions.find(q => q.response_id === responseId)!,\n });\n }\n\n return newState;\n }\n\n if (state.onMediaStateChange) {\n state.onMediaStateChange(\n state.questions.find(q => q.response_id === responseId)!,\n mediaType,\n mediaState,\n );\n }\n\n return state;\n });\n },\n\n setDiscussionQuestionOffset: (responseId, offset) => {\n set(state => {\n const newState = getMergedResponseState(state, responseId, {\n discussionQuestionOffset: offset,\n });\n\n if (state.onResponseChange) {\n const response = newState?.responses[responseId];\n\n if (response) {\n state.onResponseChange({\n responseId,\n response,\n isNewAttempt: false,\n question: state.questions.find(q => q.response_id === responseId)!,\n });\n }\n }\n\n return newState;\n });\n },\n\n showSummary: () => {\n set(state => ({\n ...state,\n summaryVisible: true,\n }));\n },\n\n hideSummary: () => {\n set(state => ({\n ...state,\n summaryVisible: false,\n }));\n },\n\n toggleSummary: () => {\n set(state => ({\n ...state,\n summaryVisible: !state.summaryVisible,\n }));\n },\n\n toggleCalculator: () => {\n set(state => ({\n ...state,\n calculatorVisible: !state.calculatorVisible,\n }));\n },\n\n toggleScribble: () => {\n set(state => ({\n ...state,\n scribblingEnabled: !state.scribblingEnabled,\n }));\n },\n\n setBlocker: blocker => {\n set(state => ({\n ...state,\n blocker,\n }));\n },\n\n removeBlocker: () => {\n set(state => {\n if (state.blocker) {\n const lastUnlockedQuestionId =\n state.questions[state.lastUnlockedQuestionIndex]?.response_id;\n\n if (lastUnlockedQuestionId) {\n createManagedTimeout(() => {\n scrollToQuestion(lastUnlockedQuestionId);\n }, 50);\n }\n }\n\n return {\n ...state,\n blocker: undefined,\n };\n });\n },\n\n markForReview: (responseId: string, markedForReview: boolean) => {\n set(state => getMergedResponseState(state, responseId, { markedForReview }));\n },\n\n changeQuestion: (questionId, shouldScroll = true, scrollDelay = 0) => {\n set(state => {\n const newState = {\n ...state,\n summaryVisible: false,\n };\n\n if (shouldScroll && state.layout.questionsScrollable) {\n if (scrollDelay > 0) {\n createManagedTimeout(() => {\n scrollToQuestion(questionId);\n }, scrollDelay);\n } else {\n requestAnimationFrame(() => scrollToQuestion(questionId));\n }\n } else if (state.activeQuestionId !== questionId) {\n newState.activeQuestionId = questionId;\n newState.activeQuestionIndex = newState.questions.findIndex(\n question => question.response_id === questionId,\n );\n newState.activeQuestionTool = undefined;\n\n newState.onActiveQuestionChange?.(newState.questions[newState.activeQuestionIndex]!);\n }\n\n return newState;\n });\n },\n\n setActiveQuestionTool(tool) {\n set(state => ({\n ...state,\n activeQuestionTool: tool,\n }));\n },\n\n unsetActiveQuestionTool() {\n set(state => ({\n ...state,\n activeQuestionTool: undefined,\n }));\n },\n\n destroy: () => {\n clearAllTimeouts();\n },\n };\n }),\n );\n};\n\n// Create context with store type\nexport const WorksheetContext = createContext<ReturnType<typeof createWorksheetStore> | null>(null);\n"],"names":["createWorksheetStore","initProps","activeTimeouts","createManagedTimeout","callback","delay","timeoutId","clearAllTimeouts","createStore","subscribeWithSelector","set","getComputedProperties","data","state","responses","newState","questions","newResponses","behavior","userType","lastUnlockedQuestionIndex","getLastUnlockedQuestionIndex","getRenderableQuestions","getDerivedBlocker","_a","responseId","response","score","answerChecked","timeSpent","isNewAttempt","prevResponse","getMergedResponseState","newResponse","q","mediaType","mediaState","key","offset","blocker","lastUnlockedQuestionId","scrollToQuestion","markedForReview","questionId","shouldScroll","scrollDelay","question","tool","WorksheetContext","createContext"],"mappings":"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"}
|