@pie-element/match 5.1.4 → 5.1.7
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/CHANGELOG.md +27 -0
- package/configure/CHANGELOG.md +16 -0
- package/configure/package.json +4 -4
- package/controller/CHANGELOG.md +17 -0
- package/controller/lib/index.js +11 -2
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,33 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [5.1.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.1.6...@pie-element/match@5.1.7) (2022-08-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/match
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [5.1.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.1.5...@pie-element/match@5.1.6) (2022-08-08)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/match
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [5.1.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.1.4...@pie-element/match@5.1.5) (2022-08-03)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* **match:** Scoring is broken for checkbox-based Match items where student has checked all the correct answers and also incorrect answers PD-1930 ([d471d0b](https://github.com/pie-framework/pie-elements/commit/d471d0b0d2ad1ff87a5509395478a431f0d69ce5))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
6
33
|
## [5.1.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.1.3...@pie-element/match@5.1.4) (2022-08-02)
|
|
7
34
|
|
|
8
35
|
**Note:** Version bump only for package @pie-element/match
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [5.1.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.1.5...@pie-element/match-configure@5.1.6) (2022-08-16)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/match-configure
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [5.1.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.1.4...@pie-element/match-configure@5.1.5) (2022-08-08)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/match-configure
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
## [5.1.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.1.3...@pie-element/match-configure@5.1.4) (2022-08-02)
|
|
7
23
|
|
|
8
24
|
**Note:** Version bump only for package @pie-element/match-configure
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/match-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "5.1.
|
|
4
|
+
"version": "5.1.6",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@material-ui/icons": "^3.0.1",
|
|
12
12
|
"@pie-framework/pie-configure-events": "^1.2.0",
|
|
13
|
-
"@pie-lib/config-ui": "^11.0.
|
|
13
|
+
"@pie-lib/config-ui": "^11.0.12",
|
|
14
14
|
"@pie-lib/drag": "^1.1.52",
|
|
15
|
-
"@pie-lib/editable-html": "^9.1.
|
|
16
|
-
"@pie-lib/scoring-config": "^3.5.
|
|
15
|
+
"@pie-lib/editable-html": "^9.1.2",
|
|
16
|
+
"@pie-lib/scoring-config": "^3.5.176",
|
|
17
17
|
"classnames": "^2.2.5",
|
|
18
18
|
"debug": "^3.1.0",
|
|
19
19
|
"prop-types": "^15.6.2",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [4.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.8...@pie-element/match-controller@4.5.0) (2022-08-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **match:** Scoring is broken for checkbox-based Match items where student has checked all the correct answers and also incorrect answers PD-1930 ([d471d0b](https://github.com/pie-framework/pie-elements/commit/d471d0b0d2ad1ff87a5509395478a431f0d69ce5))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **match:** added validation PD-1710 ([9a7ff92](https://github.com/pie-framework/pie-elements/commit/9a7ff928926219d82b33d6a97df271bdbafff17d))
|
|
17
|
+
* **match:** implement validation ui/ux PD-1711 ([85cdff1](https://github.com/pie-framework/pie-elements/commit/85cdff133bb3373c33733b0e627241bf6880a738))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
## [4.4.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.4.7...@pie-element/match-controller@4.4.8) (2022-05-16)
|
|
7
24
|
|
|
8
25
|
**Note:** Version bump only for package @pie-element/match-controller
|
package/controller/lib/index.js
CHANGED
|
@@ -49,9 +49,18 @@ var getResponseCorrectness = function getResponseCorrectness(model, answers) {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
var totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);
|
|
52
|
-
var correctAnswers
|
|
52
|
+
var correctAnswers;
|
|
53
|
+
var incorrectAnswers = 0;
|
|
54
|
+
|
|
55
|
+
if (checkboxMode) {
|
|
56
|
+
var checkboxes = getCheckboxes(rows, answers);
|
|
57
|
+
correctAnswers = checkboxes.correctAnswers;
|
|
58
|
+
incorrectAnswers = checkboxes.incorrectAnswers;
|
|
59
|
+
} else {
|
|
60
|
+
correctAnswers = getCorrectRadios(rows, answers);
|
|
61
|
+
}
|
|
53
62
|
|
|
54
|
-
if (totalCorrectAnswers === correctAnswers) {
|
|
63
|
+
if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {
|
|
55
64
|
return 'correct';
|
|
56
65
|
} else if (correctAnswers === 0) {
|
|
57
66
|
return 'incorrect';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","incorrectAnswers","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","validate","rowsErrors","hasCorrectResponse","errors","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n const correctAnswers = checkboxMode\n ? getCheckboxes(rows, answers).correctAnswers\n : getCorrectRadios(rows, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach(row => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v ) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v ){\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach(row => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = question => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = question => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach(row => {\n row.values.forEach(value => {\n if(value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if(checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = (correctAnswers + incorrectAnswers) - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers)\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise(resolve => {\n resolve({\n ...defaults,\n ...model\n });\n });\n}\n\nexport const normalize = question => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async resolve => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) *\n 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\n }\n\n normalizedQuestion.rows.forEach(row => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedback => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view'\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach(r => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode } = model;\n const rowsErrors = {};\n\n (rows || []).forEach(row => {\n const { id, values = [] } = row;\n let hasCorrectResponse = false;\n\n values.forEach(value => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] = 'No correct response defined.';\n }\n });\n\n const errors = {};\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError = choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","validate","rowsErrors","hasCorrectResponse","errors","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach(row => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach(row => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = question => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = question => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach(row => {\n row.values.forEach(value => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = (correctAnswers + incorrectAnswers) - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers)\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise(resolve => {\n resolve({\n ...defaults,\n ...model\n });\n });\n}\n\nexport const normalize = question => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async resolve => {\n const normalizedQuestion = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) *\n 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\n }\n\n normalizedQuestion.rows.forEach(row => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedback => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view'\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach(r => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode } = model;\n const rowsErrors = {};\n\n (rows || []).forEach(row => {\n const { id, values = [] } = row;\n let hasCorrectResponse = false;\n\n values.forEach(value => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] = 'No correct response defined.';\n }\n });\n\n const errors = {};\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError = choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "5.1.
|
|
7
|
+
"version": "5.1.7",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"description": "",
|
|
10
10
|
"scripts": {
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@material-ui/core": "^3.9.2",
|
|
16
16
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
17
|
-
"@pie-lib/correct-answer-toggle": "^2.3.
|
|
17
|
+
"@pie-lib/correct-answer-toggle": "^2.3.43",
|
|
18
18
|
"@pie-lib/math-rendering": "^2.4.5",
|
|
19
|
-
"@pie-lib/render-ui": "^4.13.
|
|
19
|
+
"@pie-lib/render-ui": "^4.13.3",
|
|
20
20
|
"classnames": "^2.2.5",
|
|
21
21
|
"debug": "^4.1.1",
|
|
22
22
|
"lodash": "^4.17.10",
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
},
|
|
27
27
|
"author": "",
|
|
28
28
|
"license": "ISC",
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "ede3dabf5cc1cb5c07cc275f2b27ac3e4e9eecae",
|
|
30
30
|
"module": "src/index.js"
|
|
31
31
|
}
|