@pie-element/placement-ordering 13.0.0-next.42 → 13.1.0-next.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["_cloneDeep","_interopRequireDefault","require","generateValidationMessage","answersMessage","exports","normalizeIndex","tile","ordering","type","response","findIndex","r","id","choices","c","updateResponseOrChoices","from","to","fromType","index","fromIndex","toType","placeAtIndex","updatedResponse","cloneDeep","movedItem","remainingItems","reduce","acc","item","push","slice","updatedChoices","toIndex","buildTiles","targets","map","respId","choice","find","undefined","draggable","editable","processedChoices","m","Object","assign","droppable","concat"],"sources":["../src/utils.js"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\n\nexport const generateValidationMessage = () => {\n const answersMessage =\n '\\nThere should be at least 3 tokens.' +\n '\\nThe tokens should not be empty and should be unique.' +\n '\\nThe correct ordering should not be identical to the initial ordering.';\n\n return 'Validation requirements:' + answersMessage;\n};\n\nexport function normalizeIndex(tile, ordering) {\n if (tile.type === 'target') {\n return ordering.response.findIndex(r => r.id === tile.id);\n }\n\n if (tile.type === 'choice') {\n return ordering.choices.findIndex(c => c.id === tile.id);\n }\n\n return -1;\n}\n\nexport function updateResponseOrChoices(response, choices, from, to) {\n const { type: fromType, index: fromIndex } = from;\n const { type: toType, index: placeAtIndex } = to;\n\n if (fromType === 'target' && toType === 'target') {\n const updatedResponse = cloneDeep(response) || [];\n\n const { movedItem, remainingItems } = updatedResponse.reduce(\n (acc, item, index) => {\n if (index === fromIndex) {\n acc.movedItem = item;\n } else {\n acc.remainingItems.push(item);\n }\n\n return acc;\n },\n { movedItem: null, remainingItems: [] },\n );\n\n return {\n response: [...remainingItems.slice(0, placeAtIndex), movedItem, ...remainingItems.slice(placeAtIndex)],\n choices,\n };\n }\n\n if (fromType === 'choice' && toType === 'choice') {\n const updatedChoices = cloneDeep(choices) || [];\n\n const { movedItem, remainingItems, toIndex } = updatedChoices.reduce(\n (acc, item, index) => {\n if (item.id === from.id) {\n acc.movedItem = item;\n } else {\n acc.remainingItems.push(item);\n }\n\n if (item.id === to.id) {\n acc.toIndex = index;\n }\n\n return acc;\n },\n { movedItem: null, remainingItems: [], toIndex: null },\n );\n\n return {\n response,\n choices: [...remainingItems.slice(0, toIndex), movedItem, ...remainingItems.slice(toIndex)],\n };\n }\n\n return { response, choices };\n}\n\nexport function buildTiles(choices, response) {\n const targets = response.map((r, index) => {\n const respId = r && r.id;\n const choice = choices.find((c) => respId !== undefined && respId !== null && c.id === respId);\n\n return {\n type: 'target',\n ...choice,\n draggable: true,\n index,\n editable: false,\n };\n });\n\n const processedChoices = choices.map((m) => {\n return Object.assign({}, m, {\n type: 'choice',\n droppable: false,\n draggable: true,\n editable: true,\n });\n });\n\n return processedChoices.concat(targets);\n}"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["_lodashEs","require","generateValidationMessage","answersMessage","exports","normalizeIndex","tile","ordering","type","response","findIndex","r","id","choices","c","updateResponseOrChoices","from","to","fromType","index","fromIndex","toType","placeAtIndex","updatedResponse","cloneDeep","movedItem","remainingItems","reduce","acc","item","push","slice","updatedChoices","toIndex","buildTiles","targets","map","respId","choice","find","undefined","draggable","editable","processedChoices","m","Object","assign","droppable","concat"],"sources":["../src/utils.js"],"sourcesContent":["import { cloneDeep } from 'lodash-es';\n\nexport const generateValidationMessage = () => {\n const answersMessage =\n '\\nThere should be at least 3 tokens.' +\n '\\nThe tokens should not be empty and should be unique.' +\n '\\nThe correct ordering should not be identical to the initial ordering.';\n\n return 'Validation requirements:' + answersMessage;\n};\n\nexport function normalizeIndex(tile, ordering) {\n if (tile.type === 'target') {\n return ordering.response.findIndex(r => r.id === tile.id);\n }\n\n if (tile.type === 'choice') {\n return ordering.choices.findIndex(c => c.id === tile.id);\n }\n\n return -1;\n}\n\nexport function updateResponseOrChoices(response, choices, from, to) {\n const { type: fromType, index: fromIndex } = from;\n const { type: toType, index: placeAtIndex } = to;\n\n if (fromType === 'target' && toType === 'target') {\n const updatedResponse = cloneDeep(response) || [];\n\n const { movedItem, remainingItems } = updatedResponse.reduce(\n (acc, item, index) => {\n if (index === fromIndex) {\n acc.movedItem = item;\n } else {\n acc.remainingItems.push(item);\n }\n\n return acc;\n },\n { movedItem: null, remainingItems: [] },\n );\n\n return {\n response: [...remainingItems.slice(0, placeAtIndex), movedItem, ...remainingItems.slice(placeAtIndex)],\n choices,\n };\n }\n\n if (fromType === 'choice' && toType === 'choice') {\n const updatedChoices = cloneDeep(choices) || [];\n\n const { movedItem, remainingItems, toIndex } = updatedChoices.reduce(\n (acc, item, index) => {\n if (item.id === from.id) {\n acc.movedItem = item;\n } else {\n acc.remainingItems.push(item);\n }\n\n if (item.id === to.id) {\n acc.toIndex = index;\n }\n\n return acc;\n },\n { movedItem: null, remainingItems: [], toIndex: null },\n );\n\n return {\n response,\n choices: [...remainingItems.slice(0, toIndex), movedItem, ...remainingItems.slice(toIndex)],\n };\n }\n\n return { response, choices };\n}\n\nexport function buildTiles(choices, response) {\n const targets = response.map((r, index) => {\n const respId = r && r.id;\n const choice = choices.find((c) => respId !== undefined && respId !== null && c.id === respId);\n\n return {\n type: 'target',\n ...choice,\n draggable: true,\n index,\n editable: false,\n };\n });\n\n const processedChoices = choices.map((m) => {\n return Object.assign({}, m, {\n type: 'choice',\n droppable: false,\n draggable: true,\n editable: true,\n });\n });\n\n return processedChoices.concat(targets);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/placement-ordering-configure",
3
- "version": "10.0.0-beta.1",
3
+ "version": "10.1.0-next.0",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
@@ -11,16 +11,16 @@
11
11
  "@mui/icons-material": "^7.3.4",
12
12
  "@mui/material": "^7.3.4",
13
13
  "@pie-framework/pie-configure-events": "^1.3.0",
14
- "@pie-lib/config-ui": "12.1.1-next.0",
15
- "@pie-lib/drag": "3.1.1-next.0",
16
- "@pie-lib/editable-html-tip-tap": "1.1.1-next.0",
17
- "@pie-lib/render-ui": "5.1.1-next.0",
14
+ "@pie-lib/config-ui": "12.1.1-next.3",
15
+ "@pie-lib/drag": "3.1.1-next.1",
16
+ "@pie-lib/editable-html-tip-tap": "1.1.1-next.3",
17
+ "@pie-lib/render-ui": "5.1.1-next.1",
18
18
  "debug": "^4.1.1",
19
- "lodash": "^4.17.23",
19
+ "lodash-es": "^4.17.23",
20
20
  "nested-property": "^0.0.7",
21
21
  "pluralize": "^8.0.0",
22
22
  "prop-types": "^15.8.1",
23
- "react": "18.2.0",
24
- "react-dom": "18.2.0"
23
+ "react": "18.3.1",
24
+ "react-dom": "18.3.1"
25
25
  }
26
26
  }
@@ -11,13 +11,11 @@ exports.normalize = void 0;
11
11
  exports.outcome = outcome;
12
12
  exports.validate = exports.questionError = void 0;
13
13
  var _scoring = require("./scoring");
14
- var _lodash = _interopRequireDefault(require("lodash"));
14
+ var _lodashEs = require("lodash-es");
15
15
  var _feedback = require("@pie-lib/feedback");
16
16
  var _controllerUtils = require("@pie-lib/controller-utils");
17
17
  var _debug = _interopRequireDefault(require("debug"));
18
18
  var _defaults = _interopRequireDefault(require("./defaults"));
19
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
20
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
21
19
  var _translator = _interopRequireDefault(require("@pie-lib/translator"));
22
20
  const log = (0, _debug.default)('@pie-element:placement-ordering:controller');
23
21
  const {
@@ -27,13 +25,13 @@ const questionError = () => new Error('Question is missing required array: corre
27
25
  exports.questionError = questionError;
28
26
  function outcome(question, session, env) {
29
27
  return new Promise((resolve, reject) => {
30
- if (!session || _lodash.default.isEmpty(session)) {
28
+ if (!session || (0, _lodashEs.isEmpty)(session)) {
31
29
  resolve({
32
30
  score: 0,
33
31
  empty: true
34
32
  });
35
33
  }
36
- if (!question || !question.correctResponse || _lodash.default.isEmpty(question.correctResponse)) {
34
+ if (!question || !question.correctResponse || (0, _lodashEs.isEmpty)(question.correctResponse)) {
37
35
  reject(questionError());
38
36
  } else {
39
37
  try {
@@ -76,7 +74,7 @@ exports.normalize = normalize;
76
74
  async function model(question, session, env) {
77
75
  const normalizedQuestion = normalize(question);
78
76
  const base = {};
79
- if (question.alternateResponses && _lodash.default.every(question.alternateResponses, _lodash.default.isArray)) {
77
+ if (question.alternateResponses && (0, _lodashEs.every)(question.alternateResponses, _lodashEs.isArray)) {
80
78
  log('Deprecated structure of alternateResponses is in use');
81
79
  // eslint-disable-next-line no-console
82
80
  console.error('Deprecated structure of alternateResponses is in use');
@@ -117,7 +115,7 @@ async function model(question, session, env) {
117
115
  const value = session && session.value || [];
118
116
  const allCorrectResponses = (0, _scoring.getAllCorrectResponses)(normalizedQuestion);
119
117
  const bestSetOfResponses = allCorrectResponses.reduce((info, cr) => {
120
- const currentScore = _lodash.default.reduce(value, (acc, c, idx) => acc + (Array.isArray(cr) && cr[idx] === c ? 1 : 0), 0);
118
+ const currentScore = (0, _lodashEs.reduce)(value, (acc, c, idx) => acc + (Array.isArray(cr) && cr[idx] === c ? 1 : 0), 0);
121
119
  if (currentScore > info.score) {
122
120
  return {
123
121
  arr: cr,
@@ -129,13 +127,13 @@ async function model(question, session, env) {
129
127
  arr: [],
130
128
  score: 0
131
129
  });
132
- base.outcomes = _lodash.default.map(value, (c, idx) => {
130
+ base.outcomes = (0, _lodashEs.map)(value, (c, idx) => {
133
131
  return {
134
132
  id: c,
135
133
  outcome: bestSetOfResponses.arr[idx] === c ? 'correct' : 'incorrect'
136
134
  };
137
135
  });
138
- const isResponseCorrect = allCorrectResponses.some(response => _lodash.default.isEqual(response, value));
136
+ const isResponseCorrect = allCorrectResponses.some(response => (0, _lodashEs.isEqual)(response, value));
139
137
  const responseScore = (0, _scoring.score)(question, session);
140
138
  const isCorrect = responseScore === 1;
141
139
  const isPartialCorrect = !isCorrect && _controllerUtils.partialScoring.enabled(normalizedQuestion, env || {}) && responseScore !== 0;
@@ -203,10 +201,10 @@ const validate = (model = {}, config = {}) => {
203
201
  });
204
202
  const choicesIds = (choices || []).map(choice => choice.id);
205
203
  const correctResponseIds = (correctResponse || []).map(response => response.id || response);
206
- if ((0, _isEqual.default)(choicesIds, correctResponseIds)) {
204
+ if ((0, _lodashEs.isEqual)(choicesIds, correctResponseIds)) {
207
205
  errors.orderError = 'The correct ordering should not be identical to the initial ordering.';
208
206
  }
209
- if (!(0, _isEmpty.default)(choicesErrors)) {
207
+ if (!(0, _lodashEs.isEmpty)(choicesErrors)) {
210
208
  errors.choicesErrors = choicesErrors;
211
209
  }
212
210
  return errors;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_scoring","require","_lodash","_interopRequireDefault","_feedback","_controllerUtils","_debug","_defaults","_isEqual","_isEmpty","_translator","log","debug","translator","Translator","questionError","Error","exports","outcome","question","session","env","Promise","resolve","reject","_","isEmpty","score","empty","correctResponse","s","finalScore","partialScoring","enabled","e","createDefaultModel","model","defaults","normalize","rationaleEnabled","feedbackEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","normalizedQuestion","base","alternateResponses","every","isArray","console","error","extraCSSRules","outcomes","completeLength","length","choices","filter","choice","label","note","showNote","language","prompt","config","orientation","includeTargets","placementArea","choiceLabelEnabled","targetLabel","choiceLabel","showOrdering","numberedGuides","allowSameChoiceInTargets","removeTilesAfterPlacing","disabled","mode","t","lng","role","rationale","teacherInstructions","value","allCorrectResponses","getAllCorrectResponses","bestSetOfResponses","reduce","info","cr","currentScore","acc","c","idx","Array","arr","map","id","isResponseCorrect","some","response","isEqual","responseScore","isCorrect","isPartialCorrect","correctness","flattenCorrect","feedback","getFeedbackForCorrectness","undefined","createCorrectResponseSession","getInnerText","html","replaceAll","getContent","replace","validate","errors","forEach","field","required","reversedChoices","reverse","choicesErrors","index","identicalAnswer","slice","choicesIds","correctResponseIds","orderError"],"sources":["../src/index.js"],"sourcesContent":["import { flattenCorrect, getAllCorrectResponses, score } from './scoring';\n\nimport _ from 'lodash';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nimport defaults from './defaults';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\n\nconst log = debug('@pie-element:placement-ordering:controller');\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nexport const questionError = () => new Error('Question is missing required array: correctResponse');\n\nexport function outcome(question, session, env) {\n return new Promise((resolve, reject) => {\n if (!session || _.isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (!question || !question.correctResponse || _.isEmpty(question.correctResponse)) {\n reject(questionError());\n } else {\n try {\n const s = score(question, session);\n const finalScore = partialScoring.enabled(question, env || {}) ? s : s === 1 ? 1 : 0;\n resolve({\n score: finalScore,\n });\n } catch (e) {\n reject(e);\n }\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 ...defaults,\n rationaleEnabled: true,\n feedbackEnabled: false,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const base = {};\n\n if (question.alternateResponses && _.every(question.alternateResponses, _.isArray)) {\n log('Deprecated structure of alternateResponses is in use');\n // eslint-disable-next-line no-console\n console.error('Deprecated structure of alternateResponses is in use');\n }\n\n base.env = env;\n base.extraCSSRules = normalizedQuestion.extraCSSRules;\n base.outcomes = [];\n base.completeLength = (normalizedQuestion.correctResponse || []).length;\n base.choices = (normalizedQuestion.choices || []).filter((choice) => choice.label);\n base.note = normalizedQuestion.note;\n base.showNote = normalizedQuestion.alternateResponses && normalizedQuestion.alternateResponses.length > 0;\n base.language = normalizedQuestion.language;\n\n log('[model] removing tileSize for the moment.');\n\n base.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n base.config = {\n orientation: normalizedQuestion.orientation || 'vertical',\n includeTargets: normalizedQuestion.placementArea,\n choiceLabelEnabled: normalizedQuestion.choiceLabelEnabled,\n targetLabel: normalizedQuestion.targetLabel,\n choiceLabel: normalizedQuestion.choiceLabel,\n showOrdering: normalizedQuestion.numberedGuides,\n allowSameChoiceInTargets: !normalizedQuestion.removeTilesAfterPlacing,\n };\n\n base.disabled = env.mode !== 'gather';\n\n if (!base.note) {\n base.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: normalizedQuestion.language });\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n base.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n base.rationale = null;\n base.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n const value = (session && session.value) || [];\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n\n const bestSetOfResponses = allCorrectResponses.reduce(\n (info, cr) => {\n const currentScore = _.reduce(value, (acc, c, idx) => acc + (Array.isArray(cr) && cr[idx] === c ? 1 : 0), 0);\n\n if (currentScore > info.score) {\n return {\n arr: cr,\n score: currentScore,\n };\n }\n\n return info;\n },\n { arr: [], score: 0 },\n );\n\n base.outcomes = _.map(value, (c, idx) => {\n return {\n id: c,\n outcome: bestSetOfResponses.arr[idx] === c ? 'correct' : 'incorrect',\n };\n });\n\n const isResponseCorrect = allCorrectResponses.some((response) => _.isEqual(response, value));\n const responseScore = score(question, session);\n const isCorrect = responseScore === 1;\n const isPartialCorrect =\n !isCorrect && partialScoring.enabled(normalizedQuestion, env || {}) && responseScore !== 0;\n\n base.correctness = isCorrect ? 'correct' : isPartialCorrect ? 'partial' : 'incorrect';\n\n if (!isResponseCorrect) {\n base.correctResponse = flattenCorrect(normalizedQuestion);\n }\n\n // requirement made in PD-2182\n if (!normalizedQuestion.feedback) {\n normalizedQuestion.feedbackEnabled = false;\n }\n\n const feedback = normalizedQuestion.feedbackEnabled\n ? await getFeedbackForCorrectness(base.correctness, normalizedQuestion.feedback)\n : undefined;\n\n base.feedback = feedback;\n return base;\n } else {\n return base;\n }\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n id: '1',\n value: flattenCorrect(question),\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices, correctResponse } = model;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const reversedChoices = [...(choices || [])].reverse();\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { id, label } = choice;\n\n if (!getContent(label)) {\n choicesErrors[id] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Content should be unique.';\n }\n }\n });\n\n const choicesIds = (choices || []).map((choice) => choice.id);\n const correctResponseIds = (correctResponse || []).map((response) => response.id || response);\n\n if (isEqual(choicesIds, correctResponseIds)) {\n errors.orderError = 'The correct ordering should not be identical to the initial ordering.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_scoring","require","_lodashEs","_feedback","_controllerUtils","_debug","_interopRequireDefault","_defaults","_translator","log","debug","translator","Translator","questionError","Error","exports","outcome","question","session","env","Promise","resolve","reject","isEmpty","score","empty","correctResponse","s","finalScore","partialScoring","enabled","e","createDefaultModel","model","defaults","normalize","rationaleEnabled","feedbackEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","normalizedQuestion","base","alternateResponses","every","isArray","console","error","extraCSSRules","outcomes","completeLength","length","choices","filter","choice","label","note","showNote","language","prompt","config","orientation","includeTargets","placementArea","choiceLabelEnabled","targetLabel","choiceLabel","showOrdering","numberedGuides","allowSameChoiceInTargets","removeTilesAfterPlacing","disabled","mode","t","lng","role","rationale","teacherInstructions","value","allCorrectResponses","getAllCorrectResponses","bestSetOfResponses","reduce","info","cr","currentScore","acc","c","idx","Array","arr","map","id","isResponseCorrect","some","response","isEqual","responseScore","isCorrect","isPartialCorrect","correctness","flattenCorrect","feedback","getFeedbackForCorrectness","undefined","createCorrectResponseSession","getInnerText","html","replaceAll","getContent","replace","validate","errors","forEach","field","required","reversedChoices","reverse","choicesErrors","index","identicalAnswer","slice","choicesIds","correctResponseIds","orderError"],"sources":["../src/index.js"],"sourcesContent":["import { flattenCorrect, getAllCorrectResponses, score } from './scoring';\n\nimport { every, isArray, isEmpty, isEqual, map, reduce } from 'lodash-es';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:placement-ordering:controller');\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nexport const questionError = () => new Error('Question is missing required array: correctResponse');\n\nexport function outcome(question, session, env) {\n return new Promise((resolve, reject) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (!question || !question.correctResponse || isEmpty(question.correctResponse)) {\n reject(questionError());\n } else {\n try {\n const s = score(question, session);\n const finalScore = partialScoring.enabled(question, env || {}) ? s : s === 1 ? 1 : 0;\n resolve({\n score: finalScore,\n });\n } catch (e) {\n reject(e);\n }\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 ...defaults,\n rationaleEnabled: true,\n feedbackEnabled: false,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n const base = {};\n\n if (question.alternateResponses && every(question.alternateResponses, isArray)) {\n log('Deprecated structure of alternateResponses is in use');\n // eslint-disable-next-line no-console\n console.error('Deprecated structure of alternateResponses is in use');\n }\n\n base.env = env;\n base.extraCSSRules = normalizedQuestion.extraCSSRules;\n base.outcomes = [];\n base.completeLength = (normalizedQuestion.correctResponse || []).length;\n base.choices = (normalizedQuestion.choices || []).filter((choice) => choice.label);\n base.note = normalizedQuestion.note;\n base.showNote = normalizedQuestion.alternateResponses && normalizedQuestion.alternateResponses.length > 0;\n base.language = normalizedQuestion.language;\n\n log('[model] removing tileSize for the moment.');\n\n base.prompt = normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null;\n base.config = {\n orientation: normalizedQuestion.orientation || 'vertical',\n includeTargets: normalizedQuestion.placementArea,\n choiceLabelEnabled: normalizedQuestion.choiceLabelEnabled,\n targetLabel: normalizedQuestion.targetLabel,\n choiceLabel: normalizedQuestion.choiceLabel,\n showOrdering: normalizedQuestion.numberedGuides,\n allowSameChoiceInTargets: !normalizedQuestion.removeTilesAfterPlacing,\n };\n\n base.disabled = env.mode !== 'gather';\n\n if (!base.note) {\n base.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: normalizedQuestion.language });\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n base.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n base.rationale = null;\n base.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n const value = (session && session.value) || [];\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n\n const bestSetOfResponses = allCorrectResponses.reduce(\n (info, cr) => {\n const currentScore = reduce(value, (acc, c, idx) => acc + (Array.isArray(cr) && cr[idx] === c ? 1 : 0), 0);\n\n if (currentScore > info.score) {\n return {\n arr: cr,\n score: currentScore,\n };\n }\n\n return info;\n },\n { arr: [], score: 0 },\n );\n\n base.outcomes = map(value, (c, idx) => {\n return {\n id: c,\n outcome: bestSetOfResponses.arr[idx] === c ? 'correct' : 'incorrect',\n };\n });\n\n const isResponseCorrect = allCorrectResponses.some((response) => isEqual(response, value));\n const responseScore = score(question, session);\n const isCorrect = responseScore === 1;\n const isPartialCorrect = !isCorrect && partialScoring.enabled(normalizedQuestion, env || {}) && responseScore !== 0;\n\n base.correctness = isCorrect ? 'correct' : isPartialCorrect ? 'partial' : 'incorrect';\n\n if (!isResponseCorrect) {\n base.correctResponse = flattenCorrect(normalizedQuestion);\n }\n\n // requirement made in PD-2182\n if (!normalizedQuestion.feedback) {\n normalizedQuestion.feedbackEnabled = false;\n }\n\n const feedback = normalizedQuestion.feedbackEnabled\n ? await getFeedbackForCorrectness(base.correctness, normalizedQuestion.feedback)\n : undefined;\n\n base.feedback = feedback;\n return base;\n } else {\n return base;\n }\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n id: '1',\n value: flattenCorrect(question),\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices, correctResponse } = model;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const reversedChoices = [...(choices || [])].reverse();\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { id, label } = choice;\n\n if (!getContent(label)) {\n choicesErrors[id] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Content should be unique.';\n }\n }\n });\n\n const choicesIds = (choices || []).map((choice) => choice.id);\n const correctResponseIds = (correctResponse || []).map((response) => response.id || response);\n\n if (isEqual(choicesIds, correctResponseIds)) {\n errors.orderError = 'The correct ordering should not be identical to the initial ordering.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.score = exports.pairwiseCombinationScore = exports.illegalArgumentError = exports.getAllCorrectResponses = exports.flattenCorrect = void 0;
8
- var _lodash = _interopRequireDefault(require("lodash"));
8
+ var _lodashEs = require("lodash-es");
9
9
  var _jsCombinatorics = require("js-combinatorics");
10
10
  var _debug = _interopRequireDefault(require("debug"));
11
11
  const log = (0, _debug.default)('pie-elements:placement-ordering:controller');
@@ -17,19 +17,19 @@ const pairwiseCombinationScore = (correct, answer, opts) => {
17
17
  orderMustBeComplete: false,
18
18
  ...opts
19
19
  };
20
- if (!opts.allowDuplicates && !_lodash.default.isEqual(_lodash.default.uniq(correct), correct)) {
20
+ if (!opts.allowDuplicates && !(0, _lodashEs.isEqual)((0, _lodashEs.uniq)(correct), correct)) {
21
21
  throw illegalArgumentError(answer);
22
22
  }
23
- if (opts.allowDuplicates === false && answer.length !== _lodash.default.uniq(answer).length) {
23
+ if (opts.allowDuplicates === false && answer.length !== (0, _lodashEs.uniq)(answer).length) {
24
24
  return 0;
25
25
  }
26
- answer = opts.allowDuplicates !== false ? answer : _lodash.default.uniq(answer);
26
+ answer = opts.allowDuplicates !== false ? answer : (0, _lodashEs.uniq)(answer);
27
27
  log('answer:', answer);
28
28
  if (!Array.isArray(correct) || correct.length === 0) {
29
29
  throw new Error('correct must be non empty an array');
30
30
  }
31
31
  if (correct.length === 1) {
32
- return _lodash.default.isEqual(correct, answer) ? 1 : 0;
32
+ return (0, _lodashEs.isEqual)(correct, answer) ? 1 : 0;
33
33
  }
34
34
  if (!Array.isArray(answer) || answer.length < 2) {
35
35
  return 0;
@@ -42,7 +42,7 @@ const pairwiseCombinationScore = (correct, answer, opts) => {
42
42
  }
43
43
  const correctCombo = (0, _jsCombinatorics.combination)(correct, 2).toArray();
44
44
  const answerCombo = (0, _jsCombinatorics.combination)(answer, 2).toArray();
45
- const diff = _lodash.default.differenceWith(answerCombo, correctCombo, _lodash.default.isEqual);
45
+ const diff = (0, _lodashEs.differenceWith)(answerCombo, correctCombo, _lodashEs.isEqual);
46
46
  const comboLengthDiff = correctCombo.length - answerCombo.length;
47
47
  const total = correctCombo.length;
48
48
  const actual = total - diff.length - comboLengthDiff;
@@ -1 +1 @@
1
- {"version":3,"file":"scoring.js","names":["_lodash","_interopRequireDefault","require","_jsCombinatorics","_debug","log","debug","illegalArgumentError","answer","Error","exports","pairwiseCombinationScore","correct","opts","allowDuplicates","orderMustBeComplete","_","isEqual","uniq","length","Array","isArray","correctCombo","combination","toArray","answerCombo","diff","differenceWith","comboLengthDiff","total","actual","n","toFixed","parseFloat","flattenCorrect","question","correctResponse","map","r","id","getAllCorrectResponses","alternates","alternateResponses","alternate","response","filter","item","undefined","score","session","value","allCorrectResponse","configure","removeTilesAfterPlacing","bestScore","forEach","cr","currentScore"],"sources":["../src/scoring.js"],"sourcesContent":["import _ from 'lodash';\nimport { combination } from 'js-combinatorics';\nimport debug from 'debug';\n\nconst log = debug('pie-elements:placement-ordering:controller');\n\nexport const illegalArgumentError = (answer) =>\n new Error(`Cant score answer: ${answer} it has duplicates and allowDuplicates is false`);\nexport const pairwiseCombinationScore = (correct, answer, opts) => {\n opts = { allowDuplicates: false, orderMustBeComplete: false, ...opts };\n\n if (!opts.allowDuplicates && !_.isEqual(_.uniq(correct), correct)) {\n throw illegalArgumentError(answer);\n }\n\n if (opts.allowDuplicates === false && answer.length !== _.uniq(answer).length) {\n return 0;\n }\n\n answer = opts.allowDuplicates !== false ? answer : _.uniq(answer);\n\n log('answer:', answer);\n if (!Array.isArray(correct) || correct.length === 0) {\n throw new Error('correct must be non empty an array');\n }\n\n if (correct.length === 1) {\n return _.isEqual(correct, answer) ? 1 : 0;\n }\n\n if (!Array.isArray(answer) || answer.length < 2) {\n return 0;\n }\n\n if (answer.length > correct.length) {\n return 0;\n }\n\n if (correct.length !== answer.length && opts.orderMustBeComplete) {\n return 0;\n }\n\n const correctCombo = combination(correct, 2).toArray();\n const answerCombo = combination(answer, 2).toArray();\n\n const diff = _.differenceWith(answerCombo, correctCombo, _.isEqual);\n\n const comboLengthDiff = correctCombo.length - answerCombo.length;\n\n const total = correctCombo.length;\n const actual = total - diff.length - comboLengthDiff;\n\n const n = (actual / total).toFixed(2);\n\n return parseFloat(n);\n};\n\n/**\n * Flattens the correctResponse into an array of ordered identifiers representing the\n * correct response.\n */\nexport const flattenCorrect = (question) =>\n question.correctResponse ? question.correctResponse.map((r) => (r && r.id ? r.id : r)) : [];\n\n/**\n * Returns all correct responses for this question\n * @param question - array\n */\nexport const getAllCorrectResponses = (question) => {\n const alternates = (question.alternateResponses || []).map((alternate) => {\n if (Array.isArray(alternate)) {\n return alternate;\n }\n\n return alternate.response;\n }).filter(item => item !== undefined);\n\n return [flattenCorrect(question), ...alternates];\n};\n\n/**\n * Returns the score for a session. If weighted scoring is present in the correctResponse\n * field for the question, this will be used. If partial scoring is present in the question\n * model, this will be used. Otherwise the default scoring mechanism (0 for any incorrect, 1\n * for all correct) will be used.\n */\n\nexport const score = (question, session) => {\n const { value } = session || {};\n\n if (!value) {\n return 0;\n }\n\n const allCorrectResponse = getAllCorrectResponses(question);\n const allowDuplicates = (question.configure && question.configure.removeTilesAfterPlacing) !== false;\n\n /**\n * We require this to be the case - locking\n */\n //const orderMustBeComplete = true;\n\n let bestScore = 0;\n\n allCorrectResponse.forEach((cr) => {\n const currentScore = pairwiseCombinationScore(cr, value, {\n allowDuplicates,\n });\n\n if (currentScore >= bestScore) {\n bestScore = currentScore;\n }\n });\n\n return bestScore;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"scoring.js","names":["_lodashEs","require","_jsCombinatorics","_debug","_interopRequireDefault","log","debug","illegalArgumentError","answer","Error","exports","pairwiseCombinationScore","correct","opts","allowDuplicates","orderMustBeComplete","isEqual","uniq","length","Array","isArray","correctCombo","combination","toArray","answerCombo","diff","differenceWith","comboLengthDiff","total","actual","n","toFixed","parseFloat","flattenCorrect","question","correctResponse","map","r","id","getAllCorrectResponses","alternates","alternateResponses","alternate","response","filter","item","undefined","score","session","value","allCorrectResponse","configure","removeTilesAfterPlacing","bestScore","forEach","cr","currentScore"],"sources":["../src/scoring.js"],"sourcesContent":["import { differenceWith, isEqual, uniq } from 'lodash-es';\nimport { combination } from 'js-combinatorics';\nimport debug from 'debug';\n\nconst log = debug('pie-elements:placement-ordering:controller');\n\nexport const illegalArgumentError = (answer) =>\n new Error(`Cant score answer: ${answer} it has duplicates and allowDuplicates is false`);\nexport const pairwiseCombinationScore = (correct, answer, opts) => {\n opts = { allowDuplicates: false, orderMustBeComplete: false, ...opts };\n\n if (!opts.allowDuplicates && !isEqual(uniq(correct), correct)) {\n throw illegalArgumentError(answer);\n }\n\n if (opts.allowDuplicates === false && answer.length !== uniq(answer).length) {\n return 0;\n }\n\n answer = opts.allowDuplicates !== false ? answer : uniq(answer);\n\n log('answer:', answer);\n if (!Array.isArray(correct) || correct.length === 0) {\n throw new Error('correct must be non empty an array');\n }\n\n if (correct.length === 1) {\n return isEqual(correct, answer) ? 1 : 0;\n }\n\n if (!Array.isArray(answer) || answer.length < 2) {\n return 0;\n }\n\n if (answer.length > correct.length) {\n return 0;\n }\n\n if (correct.length !== answer.length && opts.orderMustBeComplete) {\n return 0;\n }\n\n const correctCombo = combination(correct, 2).toArray();\n const answerCombo = combination(answer, 2).toArray();\n\n const diff = differenceWith(answerCombo, correctCombo, isEqual);\n\n const comboLengthDiff = correctCombo.length - answerCombo.length;\n\n const total = correctCombo.length;\n const actual = total - diff.length - comboLengthDiff;\n\n const n = (actual / total).toFixed(2);\n\n return parseFloat(n);\n};\n\n/**\n * Flattens the correctResponse into an array of ordered identifiers representing the\n * correct response.\n */\nexport const flattenCorrect = (question) =>\n question.correctResponse ? question.correctResponse.map((r) => (r && r.id ? r.id : r)) : [];\n\n/**\n * Returns all correct responses for this question\n * @param question - array\n */\nexport const getAllCorrectResponses = (question) => {\n const alternates = (question.alternateResponses || [])\n .map((alternate) => {\n if (Array.isArray(alternate)) {\n return alternate;\n }\n\n return alternate.response;\n })\n .filter((item) => item !== undefined);\n\n return [flattenCorrect(question), ...alternates];\n};\n\n/**\n * Returns the score for a session. If weighted scoring is present in the correctResponse\n * field for the question, this will be used. If partial scoring is present in the question\n * model, this will be used. Otherwise the default scoring mechanism (0 for any incorrect, 1\n * for all correct) will be used.\n */\n\nexport const score = (question, session) => {\n const { value } = session || {};\n\n if (!value) {\n return 0;\n }\n\n const allCorrectResponse = getAllCorrectResponses(question);\n const allowDuplicates = (question.configure && question.configure.removeTilesAfterPlacing) !== false;\n\n /**\n * We require this to be the case - locking\n */\n //const orderMustBeComplete = true;\n\n let bestScore = 0;\n\n allCorrectResponse.forEach((cr) => {\n const currentScore = pairwiseCombinationScore(cr, value, {\n allowDuplicates,\n });\n\n if (currentScore >= bestScore) {\n bestScore = currentScore;\n }\n });\n\n return bestScore;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@pie-element/placement-ordering-controller",
3
- "version": "10.0.0-beta.1",
3
+ "version": "10.1.0-next.0",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
7
7
  "dependencies": {
8
- "@pie-lib/controller-utils": "1.1.1-next.0",
9
- "@pie-lib/feedback": "1.1.1-next.0",
10
- "@pie-lib/translator": "3.1.1-next.0",
8
+ "@pie-lib/controller-utils": "1.1.1-next.1",
9
+ "@pie-lib/feedback": "1.1.1-next.1",
10
+ "@pie-lib/translator": "3.1.1-next.1",
11
11
  "debug": "^4.1.1",
12
12
  "js-combinatorics": "^0.5.4",
13
- "lodash": "^4.17.23"
13
+ "lodash-es": "^4.17.23"
14
14
  }
15
15
  }
package/lib/index.js CHANGED
@@ -8,7 +8,7 @@ exports.isValidSession = exports.default = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _client = require("react-dom/client");
11
- var _compact = _interopRequireDefault(require("lodash/compact"));
11
+ var _lodashEs = require("lodash-es");
12
12
  var _debug = _interopRequireDefault(require("debug"));
13
13
  var _mathRendering = require("@pie-lib/math-rendering");
14
14
  var _piePlayerEvents = require("@pie-framework/pie-player-events");
@@ -21,7 +21,7 @@ const isValidSession = ({
21
21
  const {
22
22
  config
23
23
  } = model;
24
- const compactSessionValues = session && (0, _compact.default)(session.value) || [];
24
+ const compactSessionValues = session && (0, _lodashEs.compact)(session.value) || [];
25
25
  const completeSession = compactSessionValues.length === model.choices.length;
26
26
 
27
27
  // if it includes targets, it doesn't have to contain all the choices selected (eg: only 2 targets were filled)
@@ -32,7 +32,7 @@ exports.isValidSession = isValidSession;
32
32
  class Ordering extends HTMLElement {
33
33
  constructor() {
34
34
  super();
35
- (0, _defineProperty2.default)(this, "isComplete", value => value && (0, _compact.default)(value).length === this._model.completeLength);
35
+ (0, _defineProperty2.default)(this, "isComplete", value => value && (0, _lodashEs.compact)(value).length === this._model.completeLength);
36
36
  (0, _defineProperty2.default)(this, "sessionChange", session => {
37
37
  this._session.value = session.value;
38
38
  this.render();
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_compact","_debug","_mathRendering","_piePlayerEvents","_main","log","debug","isValidSession","model","session","config","compactSessionValues","compact","value","completeSession","length","choices","includeTargets","exports","Ordering","HTMLElement","constructor","_defineProperty2","default","_model","completeLength","_session","render","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_root","newModel","CustomEvent","bubbles","detail","complete","newSession","element","React","createElement","Main","onSessionChange","sessionChange","createRoot","queueMicrotask","renderMath","disconnectedCallback","unmount"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport compact from 'lodash/compact';\nimport debug from 'debug';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nconst log = debug('pie-elements:placement-ordering');\n\nexport const isValidSession = ({ model, session }) => {\n const { config } = model;\n\n const compactSessionValues = (session && compact(session.value)) || [];\n const completeSession = compactSessionValues.length === model.choices.length;\n\n // if it includes targets, it doesn't have to contain all the choices selected (eg: only 2 targets were filled)\n // but if it does not include targets, it's a must to have all choices selected\n return config.includeTargets || completeSession;\n};\n\nexport default class Ordering extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n }\n\n isComplete = (value) => value && compact(value).length === this._model.completeLength;\n\n sessionChange = (session) => {\n this._session.value = session.value;\n this.render();\n this.dispatchEvent(\n new SessionChangedEvent(this.tagName.toLowerCase(), this._session && this.isComplete(this._session.value)),\n );\n };\n\n set model(newModel) {\n this._model = newModel;\n\n this.render();\n this.dispatchEvent(\n new CustomEvent('model-set', {\n bubbles: true,\n detail: {\n complete: false,\n },\n }),\n );\n }\n\n set session(newSession) {\n this._session = newSession;\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n render() {\n if (this._model && this._session) {\n log('[render] session: ', this._session.value);\n log('[render] model: ', this._model);\n\n const element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChange,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_lodashEs","_debug","_mathRendering","_piePlayerEvents","_main","log","debug","isValidSession","model","session","config","compactSessionValues","compact","value","completeSession","length","choices","includeTargets","exports","Ordering","HTMLElement","constructor","_defineProperty2","default","_model","completeLength","_session","render","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","isComplete","_root","newModel","CustomEvent","bubbles","detail","complete","newSession","element","React","createElement","Main","onSessionChange","sessionChange","createRoot","queueMicrotask","renderMath","disconnectedCallback","unmount"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { compact } from 'lodash-es';\nimport debug from 'debug';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nconst log = debug('pie-elements:placement-ordering');\n\nexport const isValidSession = ({ model, session }) => {\n const { config } = model;\n\n const compactSessionValues = (session && compact(session.value)) || [];\n const completeSession = compactSessionValues.length === model.choices.length;\n\n // if it includes targets, it doesn't have to contain all the choices selected (eg: only 2 targets were filled)\n // but if it does not include targets, it's a must to have all choices selected\n return config.includeTargets || completeSession;\n};\n\nexport default class Ordering extends HTMLElement {\n constructor() {\n super();\n this._root = null;\n }\n\n isComplete = (value) => value && compact(value).length === this._model.completeLength;\n\n sessionChange = (session) => {\n this._session.value = session.value;\n this.render();\n this.dispatchEvent(\n new SessionChangedEvent(this.tagName.toLowerCase(), this._session && this.isComplete(this._session.value)),\n );\n };\n\n set model(newModel) {\n this._model = newModel;\n\n this.render();\n this.dispatchEvent(\n new CustomEvent('model-set', {\n bubbles: true,\n detail: {\n complete: false,\n },\n }),\n );\n }\n\n set session(newSession) {\n this._session = newSession;\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n render() {\n if (this._model && this._session) {\n log('[render] session: ', this._session.value);\n log('[render] model: ', this._model);\n\n const element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChange,\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/ordering.js CHANGED
@@ -8,11 +8,8 @@ exports.buildState = buildState;
8
8
  exports.push = void 0;
9
9
  exports.reducer = reducer;
10
10
  exports.swap = void 0;
11
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
11
+ var _lodashEs = require("lodash-es");
12
12
  var _debug = _interopRequireDefault(require("debug"));
13
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
14
- var _map = _interopRequireDefault(require("lodash/map"));
15
- var _assign = _interopRequireDefault(require("lodash/assign"));
16
13
  const log = (0, _debug.default)('pie-elements:placement-ordering:ordering');
17
14
  const push = (arr, fromIndex, toIndex) => {
18
15
  const movedItem = arr.find((item, index) => index === fromIndex);
@@ -25,7 +22,7 @@ const swap = (arr, fromIndex, toIndex) => {
25
22
  if (!arr || arr.length <= 1 || fromIndex === undefined || toIndex === undefined) {
26
23
  throw new Error(`swap requires a non-empty array, fromIndex, toIndex: ${arr}, ${fromIndex} ${toIndex}`);
27
24
  }
28
- const update = (0, _cloneDeep.default)(arr);
25
+ const update = (0, _lodashEs.cloneDeep)(arr);
29
26
  const tmp = arr[toIndex];
30
27
  update[toIndex] = update[fromIndex];
31
28
  update[fromIndex] = tmp;
@@ -33,7 +30,7 @@ const swap = (arr, fromIndex, toIndex) => {
33
30
  };
34
31
  exports.swap = swap;
35
32
  function removeResponse(state, targetTile) {
36
- const update = (0, _cloneDeep.default)(state.response);
33
+ const update = (0, _lodashEs.cloneDeep)(state.response);
37
34
  if (update[targetTile.index] === targetTile.id) {
38
35
  update[targetTile.index] = undefined;
39
36
  } else {
@@ -46,7 +43,7 @@ function updateResponse(state, from, to) {
46
43
  response,
47
44
  opts
48
45
  } = state;
49
- const update = (0, _cloneDeep.default)(response);
46
+ const update = (0, _lodashEs.cloneDeep)(response);
50
47
  if (opts.includeTargets) {
51
48
  if (from.type === 'choice' && to.type === 'target') {
52
49
  update[to.index] = from.id;
@@ -122,11 +119,11 @@ function buildTiles(choices, response, outcomes, opts) {
122
119
  }
123
120
  }
124
121
  function buildState(choices, response, outcomes, opts) {
125
- opts = (0, _assign.default)({
122
+ opts = (0, _lodashEs.assign)({
126
123
  includeTargets: true
127
124
  }, opts);
128
125
  outcomes = outcomes || [];
129
- response = !response || (0, _isEmpty.default)(response) ? opts.includeTargets ? new Array(choices.length) : (0, _map.default)(choices, c => c.id) : response;
126
+ response = !response || (0, _lodashEs.isEmpty)(response) ? opts.includeTargets ? new Array(choices.length) : (0, _lodashEs.map)(choices, c => c.id) : response;
130
127
  return {
131
128
  choices,
132
129
  response,
@@ -1 +1 @@
1
- {"version":3,"file":"ordering.js","names":["_cloneDeep","_interopRequireDefault","require","_debug","_isEmpty","_map","_assign","log","debug","push","arr","fromIndex","toIndex","movedItem","find","item","index","remainingItems","filter","slice","exports","swap","length","undefined","Error","update","cloneDeep","tmp","removeResponse","state","targetTile","response","id","updateResponse","from","to","opts","includeTargets","type","findIndex","r","buildTiles","choices","outcomes","targets","i","choice","c","outcome","out","Object","assign","empty","draggable","processedChoices","map","m","indexOf","allowSameChoiceInTargets","droppable","concat","reduce","acc","emptyTile","choiceTile","buildState","isEmpty","Array","tiles","reducer","action","target"],"sources":["../src/ordering.js"],"sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport map from 'lodash/map';\nimport assign from 'lodash/assign';\n\nconst log = debug('pie-elements:placement-ordering:ordering');\n\nexport const push = (arr, fromIndex, toIndex) => {\n const movedItem = arr.find((item, index) => index === fromIndex);\n const remainingItems = arr.filter((item, index) => index !== fromIndex);\n\n return [...remainingItems.slice(0, toIndex), movedItem, ...remainingItems.slice(toIndex)];\n};\n\nexport const swap = (arr, fromIndex, toIndex) => {\n log('[swap]', arr, fromIndex, toIndex);\n if (!arr || arr.length <= 1 || fromIndex === undefined || toIndex === undefined) {\n throw new Error(`swap requires a non-empty array, fromIndex, toIndex: ${arr}, ${fromIndex} ${toIndex}`);\n }\n const update = cloneDeep(arr);\n const tmp = arr[toIndex];\n update[toIndex] = update[fromIndex];\n update[fromIndex] = tmp;\n return update;\n};\n\nfunction removeResponse(state, targetTile) {\n const update = cloneDeep(state.response);\n\n if (update[targetTile.index] === targetTile.id) {\n update[targetTile.index] = undefined;\n } else {\n throw new Error(\n `Tried to remove from index: ${targetTile.index}, but the id doesn't match: array: ${update}, target: ${targetTile.id}`,\n );\n }\n return update;\n}\n\nfunction updateResponse(state, from, to) {\n const { response, opts } = state;\n const update = cloneDeep(response);\n if (opts.includeTargets) {\n if (from.type === 'choice' && to.type === 'target') {\n update[to.index] = from.id;\n return update;\n } else if (from.type === 'target' && to.type === 'choice') {\n update[from.index] = undefined;\n return update;\n } else if (from.type === 'target' && to.type === 'target') {\n return swap(response, from.index, to.index);\n } else {\n log('do nothing to the response');\n return response;\n }\n } else {\n const fromIndex = state.response.findIndex((r) => r !== undefined && r === from.id);\n const toIndex = state.response.findIndex((r) => r !== undefined && r === to.id);\n log('fromIndex: ', fromIndex, 'toIndex:', toIndex);\n return push(state.response, fromIndex, toIndex);\n }\n}\n\nfunction buildTiles(choices, response, outcomes, opts) {\n if (opts.includeTargets) {\n const targets = [];\n for (let i = 0; i < response.length; i++) {\n const r = response[i];\n\n const choice = choices.find((c) => r !== undefined && r !== null && c.id === r);\n //TODO: index needs to match too!!\n const outcome = outcomes[i];\n\n const out = Object.assign({ type: 'target', index: i, empty: choice === undefined }, choice, outcome, {\n draggable: choice !== undefined,\n });\n\n targets.push(out);\n }\n\n const processedChoices = choices.map((m) => {\n if (response.indexOf(m.id) !== -1 && !opts.allowSameChoiceInTargets) {\n return {\n type: 'choice',\n empty: true,\n droppable: true,\n draggable: false,\n };\n } else {\n return Object.assign({}, m, {\n type: 'choice',\n droppable: false,\n draggable: true,\n });\n }\n });\n\n return processedChoices.concat(targets);\n } else {\n return response.reduce((acc, id, index) => {\n const emptyTile = Object.assign(\n { type: 'empty', draggable: false, droppable: true },\n choices.find((m) => m.id === id),\n outcomes[index],\n );\n const choiceTile = Object.assign(\n { type: 'choice', draggable: true, droppable: true },\n choices.find((m) => m.id === id),\n outcomes[index],\n );\n\n if (index === 0) {\n acc.push(emptyTile);\n }\n\n acc.push(choiceTile, emptyTile);\n\n return acc;\n }, []);\n }\n}\n\nexport function buildState(choices, response, outcomes, opts) {\n opts = assign({ includeTargets: true }, opts);\n\n outcomes = outcomes || [];\n response =\n !response || isEmpty(response)\n ? opts.includeTargets\n ? new Array(choices.length)\n : map(choices, (c) => c.id)\n : response;\n return {\n choices,\n response,\n opts,\n outcomes,\n tiles: buildTiles(choices, response, outcomes, opts),\n };\n}\n\nexport function reducer(action, state) {\n switch (action.type) {\n case 'move': {\n const { from, to } = action;\n const response = updateResponse(state, from, to);\n const tiles = buildTiles(state.choices, response, state.outcomes, state.opts);\n return Object.assign({}, state, { response, tiles });\n }\n case 'remove': {\n const { target } = action;\n const response = removeResponse(state, target);\n const tiles = buildTiles(state.choices, response, state.outcomes, state.opts);\n return Object.assign({}, state, { response, tiles });\n }\n }\n return state;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ordering.js","names":["_lodashEs","require","_debug","_interopRequireDefault","log","debug","push","arr","fromIndex","toIndex","movedItem","find","item","index","remainingItems","filter","slice","exports","swap","length","undefined","Error","update","cloneDeep","tmp","removeResponse","state","targetTile","response","id","updateResponse","from","to","opts","includeTargets","type","findIndex","r","buildTiles","choices","outcomes","targets","i","choice","c","outcome","out","Object","assign","empty","draggable","processedChoices","map","m","indexOf","allowSameChoiceInTargets","droppable","concat","reduce","acc","emptyTile","choiceTile","buildState","isEmpty","Array","tiles","reducer","action","target"],"sources":["../src/ordering.js"],"sourcesContent":["import { assign, cloneDeep, isEmpty, map } from 'lodash-es';\nimport debug from 'debug';\n\nconst log = debug('pie-elements:placement-ordering:ordering');\n\nexport const push = (arr, fromIndex, toIndex) => {\n const movedItem = arr.find((item, index) => index === fromIndex);\n const remainingItems = arr.filter((item, index) => index !== fromIndex);\n\n return [...remainingItems.slice(0, toIndex), movedItem, ...remainingItems.slice(toIndex)];\n};\n\nexport const swap = (arr, fromIndex, toIndex) => {\n log('[swap]', arr, fromIndex, toIndex);\n if (!arr || arr.length <= 1 || fromIndex === undefined || toIndex === undefined) {\n throw new Error(`swap requires a non-empty array, fromIndex, toIndex: ${arr}, ${fromIndex} ${toIndex}`);\n }\n const update = cloneDeep(arr);\n const tmp = arr[toIndex];\n update[toIndex] = update[fromIndex];\n update[fromIndex] = tmp;\n return update;\n};\n\nfunction removeResponse(state, targetTile) {\n const update = cloneDeep(state.response);\n\n if (update[targetTile.index] === targetTile.id) {\n update[targetTile.index] = undefined;\n } else {\n throw new Error(\n `Tried to remove from index: ${targetTile.index}, but the id doesn't match: array: ${update}, target: ${targetTile.id}`,\n );\n }\n return update;\n}\n\nfunction updateResponse(state, from, to) {\n const { response, opts } = state;\n const update = cloneDeep(response);\n if (opts.includeTargets) {\n if (from.type === 'choice' && to.type === 'target') {\n update[to.index] = from.id;\n return update;\n } else if (from.type === 'target' && to.type === 'choice') {\n update[from.index] = undefined;\n return update;\n } else if (from.type === 'target' && to.type === 'target') {\n return swap(response, from.index, to.index);\n } else {\n log('do nothing to the response');\n return response;\n }\n } else {\n const fromIndex = state.response.findIndex((r) => r !== undefined && r === from.id);\n const toIndex = state.response.findIndex((r) => r !== undefined && r === to.id);\n log('fromIndex: ', fromIndex, 'toIndex:', toIndex);\n return push(state.response, fromIndex, toIndex);\n }\n}\n\nfunction buildTiles(choices, response, outcomes, opts) {\n if (opts.includeTargets) {\n const targets = [];\n for (let i = 0; i < response.length; i++) {\n const r = response[i];\n\n const choice = choices.find((c) => r !== undefined && r !== null && c.id === r);\n //TODO: index needs to match too!!\n const outcome = outcomes[i];\n\n const out = Object.assign({ type: 'target', index: i, empty: choice === undefined }, choice, outcome, {\n draggable: choice !== undefined,\n });\n\n targets.push(out);\n }\n\n const processedChoices = choices.map((m) => {\n if (response.indexOf(m.id) !== -1 && !opts.allowSameChoiceInTargets) {\n return {\n type: 'choice',\n empty: true,\n droppable: true,\n draggable: false,\n };\n } else {\n return Object.assign({}, m, {\n type: 'choice',\n droppable: false,\n draggable: true,\n });\n }\n });\n\n return processedChoices.concat(targets);\n } else {\n return response.reduce((acc, id, index) => {\n const emptyTile = Object.assign(\n { type: 'empty', draggable: false, droppable: true },\n choices.find((m) => m.id === id),\n outcomes[index],\n );\n const choiceTile = Object.assign(\n { type: 'choice', draggable: true, droppable: true },\n choices.find((m) => m.id === id),\n outcomes[index],\n );\n\n if (index === 0) {\n acc.push(emptyTile);\n }\n\n acc.push(choiceTile, emptyTile);\n\n return acc;\n }, []);\n }\n}\n\nexport function buildState(choices, response, outcomes, opts) {\n opts = assign({ includeTargets: true }, opts);\n\n outcomes = outcomes || [];\n response =\n !response || isEmpty(response)\n ? opts.includeTargets\n ? new Array(choices.length)\n : map(choices, (c) => c.id)\n : response;\n return {\n choices,\n response,\n opts,\n outcomes,\n tiles: buildTiles(choices, response, outcomes, opts),\n };\n}\n\nexport function reducer(action, state) {\n switch (action.type) {\n case 'move': {\n const { from, to } = action;\n const response = updateResponse(state, from, to);\n const tiles = buildTiles(state.choices, response, state.outcomes, state.opts);\n return Object.assign({}, state, { response, tiles });\n }\n case 'remove': {\n const { target } = action;\n const response = removeResponse(state, target);\n const tiles = buildTiles(state.choices, response, state.outcomes, state.opts);\n return Object.assign({}, state, { response, tiles });\n }\n }\n return state;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,10 +11,9 @@ var _react = _interopRequireDefault(require("react"));
11
11
  var _reactDom = _interopRequireDefault(require("react-dom"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
  var _debug = _interopRequireDefault(require("debug"));
14
- var _uniqueId = _interopRequireDefault(require("lodash/uniqueId"));
15
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
16
- var _difference = _interopRequireDefault(require("lodash/difference"));
14
+ var _lodashEs = require("lodash-es");
17
15
  var _styles = require("@mui/material/styles");
16
+ var _core = require("@dnd-kit/core");
18
17
  var _renderUi = require("@pie-lib/render-ui");
19
18
  var _mathRendering = require("@pie-lib/math-rendering");
20
19
  var _translator = _interopRequireDefault(require("@pie-lib/translator"));
@@ -106,14 +105,14 @@ class PlacementOrdering extends _react.default.Component {
106
105
  value = choicesIds;
107
106
  } else {
108
107
  // in No Targets Mode, all choice ids need to be used
109
- const missingChoiceIds = (0, _difference.default)(choicesIds, value);
108
+ const missingChoiceIds = (0, _lodashEs.difference)(choicesIds, value);
110
109
  // this is the case that handles extra choice ids in session
111
- const extraChoiceIds = (0, _difference.default)(value, choicesIds);
110
+ const extraChoiceIds = (0, _lodashEs.difference)(value, choicesIds);
112
111
  if (missingChoiceIds.length || extraChoiceIds.length) {
113
112
  value = choicesIds;
114
113
  }
115
114
  }
116
- needsReset = !(0, _isEqual.default)(session.value, value);
115
+ needsReset = !(0, _lodashEs.isEqual)(session.value, value);
117
116
  } else {
118
117
  // in Targets Area selected, it's important to check the length of session
119
118
  const sessionIsMismatched = value && value.length !== choicesIds.length;
@@ -220,7 +219,7 @@ class PlacementOrdering extends _react.default.Component {
220
219
  }
221
220
  }
222
221
  });
223
- this.instanceId = (0, _uniqueId.default)();
222
+ this.instanceId = (0, _lodashEs.uniqueId)();
224
223
  const {
225
224
  value: _value,
226
225
  needsReset: _needsReset
@@ -361,7 +360,8 @@ class PlacementOrdering extends _react.default.Component {
361
360
  };
362
361
  return /*#__PURE__*/_react.default.createElement(_drag.DragProvider, {
363
362
  onDragStart: () => {},
364
- onDragEnd: this.onDragEnd
363
+ onDragEnd: this.onDragEnd,
364
+ collisionDetection: _core.closestCenter
365
365
  }, /*#__PURE__*/_react.default.createElement(PlacementOrderingContainer, null, /*#__PURE__*/_react.default.createElement(_renderUi.UiLayout, {
366
366
  extraCSSRules: extraCSSRules,
367
367
  style: containerStyle
@@ -376,7 +376,6 @@ class PlacementOrdering extends _react.default.Component {
376
376
  })), /*#__PURE__*/_react.default.createElement(StyledPrompt, null, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
377
377
  prompt: prompt
378
378
  })), /*#__PURE__*/_react.default.createElement(StyledToggle, {
379
- className: "toggle",
380
379
  show: showToggle,
381
380
  toggled: showingCorrect,
382
381
  onToggle: this.toggleCorrect,