@pie-element/placement-ordering 14.3.2-beta.5 → 14.3.2-beta.6
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 +4 -0
- package/configure/CHANGELOG.md +4 -0
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +4 -0
- package/controller/package.json +1 -1
- package/package.json +2 -2
- package/configure/lib/choice-editor.js +0 -252
- package/configure/lib/choice-editor.js.map +0 -1
- package/configure/lib/choice-tile.js +0 -206
- package/configure/lib/choice-tile.js.map +0 -1
- package/configure/lib/defaults.js +0 -211
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/design.js +0 -427
- package/configure/lib/design.js.map +0 -1
- package/configure/lib/help.js +0 -14
- package/configure/lib/help.js.map +0 -1
- package/configure/lib/index.js +0 -159
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/utils.js +0 -108
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/defaults.js +0 -29
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -285
- package/controller/lib/index.js.map +0 -1
- package/controller/lib/scoring.js +0 -109
- package/controller/lib/scoring.js.map +0 -1
- package/lib/index.js +0 -124
- package/lib/index.js.map +0 -1
- package/lib/main.js +0 -32
- package/lib/main.js.map +0 -1
- package/lib/ordering.js +0 -165
- package/lib/ordering.js.map +0 -1
- package/lib/placement-ordering.js +0 -419
- package/lib/placement-ordering.js.map +0 -1
- package/lib/tile.js +0 -259
- package/lib/tile.js.map +0 -1
- package/lib/tiler.js +0 -165
- package/lib/tiler.js.map +0 -1
- package/lib/utils.js +0 -18
- package/lib/utils.js.map +0 -1
package/lib/ordering.js
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.buildState = buildState;
|
|
8
|
-
exports.push = void 0;
|
|
9
|
-
exports.reducer = reducer;
|
|
10
|
-
exports.swap = void 0;
|
|
11
|
-
var _lodashEs = require("lodash-es");
|
|
12
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
13
|
-
const log = (0, _debug.default)('pie-elements:placement-ordering:ordering');
|
|
14
|
-
const push = (arr, fromIndex, toIndex) => {
|
|
15
|
-
const movedItem = arr.find((item, index) => index === fromIndex);
|
|
16
|
-
const remainingItems = arr.filter((item, index) => index !== fromIndex);
|
|
17
|
-
return [...remainingItems.slice(0, toIndex), movedItem, ...remainingItems.slice(toIndex)];
|
|
18
|
-
};
|
|
19
|
-
exports.push = push;
|
|
20
|
-
const swap = (arr, fromIndex, toIndex) => {
|
|
21
|
-
log('[swap]', arr, fromIndex, toIndex);
|
|
22
|
-
if (!arr || arr.length <= 1 || fromIndex === undefined || toIndex === undefined) {
|
|
23
|
-
throw new Error(`swap requires a non-empty array, fromIndex, toIndex: ${arr}, ${fromIndex} ${toIndex}`);
|
|
24
|
-
}
|
|
25
|
-
const update = (0, _lodashEs.cloneDeep)(arr);
|
|
26
|
-
const tmp = arr[toIndex];
|
|
27
|
-
update[toIndex] = update[fromIndex];
|
|
28
|
-
update[fromIndex] = tmp;
|
|
29
|
-
return update;
|
|
30
|
-
};
|
|
31
|
-
exports.swap = swap;
|
|
32
|
-
function removeResponse(state, targetTile) {
|
|
33
|
-
const update = (0, _lodashEs.cloneDeep)(state.response);
|
|
34
|
-
if (update[targetTile.index] === targetTile.id) {
|
|
35
|
-
update[targetTile.index] = undefined;
|
|
36
|
-
} else {
|
|
37
|
-
throw new Error(`Tried to remove from index: ${targetTile.index}, but the id doesn't match: array: ${update}, target: ${targetTile.id}`);
|
|
38
|
-
}
|
|
39
|
-
return update;
|
|
40
|
-
}
|
|
41
|
-
function updateResponse(state, from, to) {
|
|
42
|
-
const {
|
|
43
|
-
response,
|
|
44
|
-
opts
|
|
45
|
-
} = state;
|
|
46
|
-
const update = (0, _lodashEs.cloneDeep)(response);
|
|
47
|
-
if (opts.includeTargets) {
|
|
48
|
-
if (from.type === 'choice' && to.type === 'target') {
|
|
49
|
-
update[to.index] = from.id;
|
|
50
|
-
return update;
|
|
51
|
-
} else if (from.type === 'target' && to.type === 'choice') {
|
|
52
|
-
update[from.index] = undefined;
|
|
53
|
-
return update;
|
|
54
|
-
} else if (from.type === 'target' && to.type === 'target') {
|
|
55
|
-
return swap(response, from.index, to.index);
|
|
56
|
-
} else {
|
|
57
|
-
log('do nothing to the response');
|
|
58
|
-
return response;
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
const fromIndex = state.response.findIndex(r => r !== undefined && r === from.id);
|
|
62
|
-
const toIndex = state.response.findIndex(r => r !== undefined && r === to.id);
|
|
63
|
-
log('fromIndex: ', fromIndex, 'toIndex:', toIndex);
|
|
64
|
-
return push(state.response, fromIndex, toIndex);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function buildTiles(choices, response, outcomes, opts) {
|
|
68
|
-
if (opts.includeTargets) {
|
|
69
|
-
const targets = [];
|
|
70
|
-
for (let i = 0; i < response.length; i++) {
|
|
71
|
-
const r = response[i];
|
|
72
|
-
const choice = choices.find(c => r !== undefined && r !== null && c.id === r);
|
|
73
|
-
//TODO: index needs to match too!!
|
|
74
|
-
const outcome = outcomes[i];
|
|
75
|
-
const out = Object.assign({
|
|
76
|
-
type: 'target',
|
|
77
|
-
index: i,
|
|
78
|
-
empty: choice === undefined
|
|
79
|
-
}, choice, outcome, {
|
|
80
|
-
draggable: choice !== undefined
|
|
81
|
-
});
|
|
82
|
-
targets.push(out);
|
|
83
|
-
}
|
|
84
|
-
const processedChoices = choices.map(m => {
|
|
85
|
-
if (response.indexOf(m.id) !== -1 && !opts.allowSameChoiceInTargets) {
|
|
86
|
-
return {
|
|
87
|
-
type: 'choice',
|
|
88
|
-
empty: true,
|
|
89
|
-
droppable: true,
|
|
90
|
-
draggable: false
|
|
91
|
-
};
|
|
92
|
-
} else {
|
|
93
|
-
return Object.assign({}, m, {
|
|
94
|
-
type: 'choice',
|
|
95
|
-
droppable: false,
|
|
96
|
-
draggable: true
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
return processedChoices.concat(targets);
|
|
101
|
-
} else {
|
|
102
|
-
return response.reduce((acc, id, index) => {
|
|
103
|
-
const emptyTile = Object.assign({
|
|
104
|
-
type: 'empty',
|
|
105
|
-
draggable: false,
|
|
106
|
-
droppable: true
|
|
107
|
-
}, choices.find(m => m.id === id), outcomes[index]);
|
|
108
|
-
const choiceTile = Object.assign({
|
|
109
|
-
type: 'choice',
|
|
110
|
-
draggable: true,
|
|
111
|
-
droppable: true
|
|
112
|
-
}, choices.find(m => m.id === id), outcomes[index]);
|
|
113
|
-
if (index === 0) {
|
|
114
|
-
acc.push(emptyTile);
|
|
115
|
-
}
|
|
116
|
-
acc.push(choiceTile, emptyTile);
|
|
117
|
-
return acc;
|
|
118
|
-
}, []);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
function buildState(choices, response, outcomes, opts) {
|
|
122
|
-
opts = (0, _lodashEs.assign)({
|
|
123
|
-
includeTargets: true
|
|
124
|
-
}, opts);
|
|
125
|
-
outcomes = outcomes || [];
|
|
126
|
-
response = !response || (0, _lodashEs.isEmpty)(response) ? opts.includeTargets ? new Array(choices.length) : (0, _lodashEs.map)(choices, c => c.id) : response;
|
|
127
|
-
return {
|
|
128
|
-
choices,
|
|
129
|
-
response,
|
|
130
|
-
opts,
|
|
131
|
-
outcomes,
|
|
132
|
-
tiles: buildTiles(choices, response, outcomes, opts)
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
function reducer(action, state) {
|
|
136
|
-
switch (action.type) {
|
|
137
|
-
case 'move':
|
|
138
|
-
{
|
|
139
|
-
const {
|
|
140
|
-
from,
|
|
141
|
-
to
|
|
142
|
-
} = action;
|
|
143
|
-
const response = updateResponse(state, from, to);
|
|
144
|
-
const tiles = buildTiles(state.choices, response, state.outcomes, state.opts);
|
|
145
|
-
return Object.assign({}, state, {
|
|
146
|
-
response,
|
|
147
|
-
tiles
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
case 'remove':
|
|
151
|
-
{
|
|
152
|
-
const {
|
|
153
|
-
target
|
|
154
|
-
} = action;
|
|
155
|
-
const response = removeResponse(state, target);
|
|
156
|
-
const tiles = buildTiles(state.choices, response, state.outcomes, state.opts);
|
|
157
|
-
return Object.assign({}, state, {
|
|
158
|
-
response,
|
|
159
|
-
tiles
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return state;
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=ordering.js.map
|
package/lib/ordering.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,419 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = exports.PlacementOrdering = void 0;
|
|
8
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var _react = _interopRequireDefault(require("react"));
|
|
11
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
12
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
-
var _lodashEs = require("lodash-es");
|
|
15
|
-
var _styles = require("@mui/material/styles");
|
|
16
|
-
var _core = require("@dnd-kit/core");
|
|
17
|
-
var _renderUi = require("@pie-lib/render-ui");
|
|
18
|
-
var _mathRendering = require("@pie-lib/math-rendering");
|
|
19
|
-
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
20
|
-
var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
|
|
21
|
-
var _drag = require("@pie-lib/drag");
|
|
22
|
-
var _tiler = require("./tiler");
|
|
23
|
-
var _ordering = require("./ordering");
|
|
24
|
-
var _utils = require("./utils");
|
|
25
|
-
const {
|
|
26
|
-
translator
|
|
27
|
-
} = _translator.default;
|
|
28
|
-
const log = (0, _debug.default)('pie-elements:placement-ordering');
|
|
29
|
-
const PlacementOrderingContainer = (0, _styles.styled)('div')({
|
|
30
|
-
color: _renderUi.color.text(),
|
|
31
|
-
backgroundColor: _renderUi.color.background(),
|
|
32
|
-
display: 'flex',
|
|
33
|
-
flexDirection: 'column',
|
|
34
|
-
alignItems: 'center',
|
|
35
|
-
boxSizing: 'border-box'
|
|
36
|
-
});
|
|
37
|
-
const StyledPrompt = (0, _styles.styled)('div')(({
|
|
38
|
-
theme
|
|
39
|
-
}) => ({
|
|
40
|
-
paddingBottom: theme.spacing(1)
|
|
41
|
-
}));
|
|
42
|
-
const StyledNote = (0, _styles.styled)('div')(({
|
|
43
|
-
theme
|
|
44
|
-
}) => ({
|
|
45
|
-
paddingBottom: theme.spacing(2)
|
|
46
|
-
}));
|
|
47
|
-
const StyledToggle = (0, _styles.styled)(_correctAnswerToggle.default)(({
|
|
48
|
-
theme
|
|
49
|
-
}) => ({
|
|
50
|
-
paddingBottom: theme.spacing(1)
|
|
51
|
-
}));
|
|
52
|
-
const StyledCollapsible = (0, _styles.styled)(_renderUi.Collapsible)(({
|
|
53
|
-
theme
|
|
54
|
-
}) => ({
|
|
55
|
-
marginBottom: theme.spacing(2),
|
|
56
|
-
alignSelf: 'flex-start'
|
|
57
|
-
}));
|
|
58
|
-
const OrderingTiler = props => {
|
|
59
|
-
const {
|
|
60
|
-
tiler: Comp,
|
|
61
|
-
ordering,
|
|
62
|
-
onDropChoice,
|
|
63
|
-
onRemoveChoice,
|
|
64
|
-
...compProps
|
|
65
|
-
} = props;
|
|
66
|
-
return /*#__PURE__*/_react.default.createElement(Comp, (0, _extends2.default)({}, compProps, {
|
|
67
|
-
tiles: ordering.tiles,
|
|
68
|
-
onDropChoice: (t, s) => onDropChoice(t, s, ordering),
|
|
69
|
-
onRemoveChoice: t => onRemoveChoice(t, ordering)
|
|
70
|
-
}));
|
|
71
|
-
};
|
|
72
|
-
OrderingTiler.propTypes = {
|
|
73
|
-
tiler: _propTypes.default.func,
|
|
74
|
-
ordering: _propTypes.default.any,
|
|
75
|
-
onDropChoice: _propTypes.default.func,
|
|
76
|
-
onRemoveChoice: _propTypes.default.func
|
|
77
|
-
};
|
|
78
|
-
class PlacementOrdering extends _react.default.Component {
|
|
79
|
-
constructor(props) {
|
|
80
|
-
super(props);
|
|
81
|
-
(0, _defineProperty2.default)(this, "toggleCorrect", showingCorrect => this.setState({
|
|
82
|
-
showingCorrect
|
|
83
|
-
}));
|
|
84
|
-
(0, _defineProperty2.default)(this, "validateSession", ({
|
|
85
|
-
model,
|
|
86
|
-
session
|
|
87
|
-
}, areChoicesShuffled = false) => {
|
|
88
|
-
const {
|
|
89
|
-
config,
|
|
90
|
-
choices
|
|
91
|
-
} = model || {};
|
|
92
|
-
const {
|
|
93
|
-
includeTargets
|
|
94
|
-
} = config || {};
|
|
95
|
-
const choicesIds = choices.map(c => c.id);
|
|
96
|
-
let {
|
|
97
|
-
value
|
|
98
|
-
} = session || {};
|
|
99
|
-
let needsReset;
|
|
100
|
-
if (!includeTargets) {
|
|
101
|
-
// Use all choice IDs if choices were shuffled or session is missing/invalid
|
|
102
|
-
const sessionMissing = !value || !value.length;
|
|
103
|
-
if (sessionMissing || areChoicesShuffled) {
|
|
104
|
-
// if there's no value on session in No Targets Mode, we need to set an initial session
|
|
105
|
-
value = choicesIds;
|
|
106
|
-
} else {
|
|
107
|
-
// in No Targets Mode, all choice ids need to be used
|
|
108
|
-
const missingChoiceIds = (0, _lodashEs.difference)(choicesIds, value);
|
|
109
|
-
// this is the case that handles extra choice ids in session
|
|
110
|
-
const extraChoiceIds = (0, _lodashEs.difference)(value, choicesIds);
|
|
111
|
-
if (missingChoiceIds.length || extraChoiceIds.length) {
|
|
112
|
-
value = choicesIds;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
needsReset = !(0, _lodashEs.isEqual)(session.value, value);
|
|
116
|
-
} else {
|
|
117
|
-
// in Targets Area selected, it's important to check the length of session
|
|
118
|
-
const sessionIsMismatched = value && value.length !== choicesIds.length;
|
|
119
|
-
if (sessionIsMismatched) {
|
|
120
|
-
needsReset = true;
|
|
121
|
-
|
|
122
|
-
// if choices were added, add value in session
|
|
123
|
-
if (value.length < choicesIds.length) {
|
|
124
|
-
value = value.concat(new Array(choicesIds.length - value.length));
|
|
125
|
-
} else {
|
|
126
|
-
// if choices were removed, make sure to remove from session as well
|
|
127
|
-
value = value.filter(cId => choicesIds.includes(cId));
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (needsReset) {
|
|
132
|
-
// eslint-disable-next-line no-console
|
|
133
|
-
console.warn('This session is not valid anymore. It will be reset.');
|
|
134
|
-
}
|
|
135
|
-
return {
|
|
136
|
-
value,
|
|
137
|
-
needsReset
|
|
138
|
-
};
|
|
139
|
-
});
|
|
140
|
-
(0, _defineProperty2.default)(this, "onDropChoice", (target, source, ordering) => {
|
|
141
|
-
const {
|
|
142
|
-
onSessionChange,
|
|
143
|
-
session
|
|
144
|
-
} = this.props;
|
|
145
|
-
const from = ordering.tiles.find(t => t.id === source.id && t.type === source.type && t.index === source.index);
|
|
146
|
-
const to = target;
|
|
147
|
-
log('[onDropChoice] ', from, to);
|
|
148
|
-
const update = (0, _ordering.reducer)({
|
|
149
|
-
type: 'move',
|
|
150
|
-
from,
|
|
151
|
-
to
|
|
152
|
-
}, ordering);
|
|
153
|
-
const sessionUpdate = Object.assign({}, session, {
|
|
154
|
-
value: update.response
|
|
155
|
-
});
|
|
156
|
-
onSessionChange(sessionUpdate);
|
|
157
|
-
});
|
|
158
|
-
(0, _defineProperty2.default)(this, "onRemoveChoice", (target, ordering) => {
|
|
159
|
-
const {
|
|
160
|
-
onSessionChange,
|
|
161
|
-
session
|
|
162
|
-
} = this.props;
|
|
163
|
-
log('[onRemoveChoice]', target);
|
|
164
|
-
const update = (0, _ordering.reducer)({
|
|
165
|
-
type: 'remove',
|
|
166
|
-
target
|
|
167
|
-
}, ordering);
|
|
168
|
-
const sessionUpdate = Object.assign({}, session, {
|
|
169
|
-
value: update.response
|
|
170
|
-
});
|
|
171
|
-
onSessionChange(sessionUpdate);
|
|
172
|
-
});
|
|
173
|
-
(0, _defineProperty2.default)(this, "createOrdering", () => {
|
|
174
|
-
const {
|
|
175
|
-
model,
|
|
176
|
-
session
|
|
177
|
-
} = this.props;
|
|
178
|
-
const {
|
|
179
|
-
showingCorrect
|
|
180
|
-
} = this.state;
|
|
181
|
-
const config = model.config || {
|
|
182
|
-
orientation: 'vertical',
|
|
183
|
-
includeTargets: true
|
|
184
|
-
};
|
|
185
|
-
const {
|
|
186
|
-
includeTargets
|
|
187
|
-
} = config;
|
|
188
|
-
return showingCorrect ? (0, _ordering.buildState)(model.choices, model.correctResponse, model.correctResponse.map(id => ({
|
|
189
|
-
id,
|
|
190
|
-
outcome: 'correct'
|
|
191
|
-
})), {
|
|
192
|
-
includeTargets,
|
|
193
|
-
allowSameChoiceInTargets: model.config.allowSameChoiceInTargets
|
|
194
|
-
}) : (0, _ordering.buildState)(model.choices, session.value, model.outcomes, {
|
|
195
|
-
includeTargets,
|
|
196
|
-
allowSameChoiceInTargets: model.config.allowSameChoiceInTargets
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
(0, _defineProperty2.default)(this, "onDragEnd", event => {
|
|
200
|
-
const {
|
|
201
|
-
over,
|
|
202
|
-
active
|
|
203
|
-
} = event;
|
|
204
|
-
const ordering = this.createOrdering();
|
|
205
|
-
if (over && active) {
|
|
206
|
-
const draggedItem = active.data.current;
|
|
207
|
-
const droppedOnItem = over.data.current;
|
|
208
|
-
if (draggedItem && droppedOnItem && droppedOnItem.type === 'target') {
|
|
209
|
-
this.onDropChoice(droppedOnItem, draggedItem, ordering);
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
if (draggedItem && droppedOnItem) {
|
|
213
|
-
this.onDropChoice(droppedOnItem, draggedItem, ordering);
|
|
214
|
-
}
|
|
215
|
-
} else if (!over && active) {
|
|
216
|
-
const draggedItem = active.data.current;
|
|
217
|
-
if (draggedItem && draggedItem.type === 'target') {
|
|
218
|
-
this.onRemoveChoice(draggedItem, ordering);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
this.instanceId = (0, _lodashEs.uniqueId)();
|
|
223
|
-
const {
|
|
224
|
-
value: _value,
|
|
225
|
-
needsReset: _needsReset
|
|
226
|
-
} = this.validateSession(props);
|
|
227
|
-
this.state = {
|
|
228
|
-
showingCorrect: false
|
|
229
|
-
};
|
|
230
|
-
const {
|
|
231
|
-
model: _model
|
|
232
|
-
} = props || {};
|
|
233
|
-
const {
|
|
234
|
-
env
|
|
235
|
-
} = _model || {};
|
|
236
|
-
const {
|
|
237
|
-
mode
|
|
238
|
-
} = env || {};
|
|
239
|
-
if (_needsReset && mode === 'gather') {
|
|
240
|
-
this.props.onSessionChange({
|
|
241
|
-
...props.session,
|
|
242
|
-
value: _value
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
componentDidUpdate() {
|
|
247
|
-
//eslint-disable-next-line
|
|
248
|
-
const domNode = _reactDom.default.findDOMNode(this);
|
|
249
|
-
(0, _mathRendering.renderMath)(domNode);
|
|
250
|
-
}
|
|
251
|
-
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
252
|
-
const {
|
|
253
|
-
model: nextModel = {}
|
|
254
|
-
} = nextProps || {};
|
|
255
|
-
const {
|
|
256
|
-
model: currentModel = {}
|
|
257
|
-
} = this.props || {};
|
|
258
|
-
const {
|
|
259
|
-
correctResponse,
|
|
260
|
-
config,
|
|
261
|
-
choices: nextChoices = [],
|
|
262
|
-
env
|
|
263
|
-
} = nextModel;
|
|
264
|
-
const {
|
|
265
|
-
includeTargets
|
|
266
|
-
} = config || {};
|
|
267
|
-
const newState = {};
|
|
268
|
-
const isLanguageChanged = currentModel.language && currentModel.language !== nextModel.language;
|
|
269
|
-
const isDefaultNote = currentModel.note && currentModel.note === translator.t('common:commonCorrectAnswerWithAlternates', {
|
|
270
|
-
lng: currentModel.language
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
// check if the note is the default one for prev language and change to the default one for new language
|
|
274
|
-
// this check is necessary in order to diferanciate between default and authour defined note
|
|
275
|
-
// and only change between languages for default ones
|
|
276
|
-
if (isLanguageChanged && isDefaultNote) {
|
|
277
|
-
currentModel.note = translator.t('common:commonCorrectAnswerWithAlternates', {
|
|
278
|
-
lng: nextModel.language
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
if (!correctResponse) {
|
|
282
|
-
newState.showingCorrect = false;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
//PD-4924
|
|
286
|
-
// show student choices same order as in model when teacher changes student choices order
|
|
287
|
-
// for cases when student view and instructor view are on same page
|
|
288
|
-
const areChoicesShuffled = (0, _utils.haveSameValuesButDifferentOrder)(nextChoices, currentModel.choices);
|
|
289
|
-
const validatedSession = this.validateSession(nextProps, areChoicesShuffled);
|
|
290
|
-
let {
|
|
291
|
-
value,
|
|
292
|
-
needsReset
|
|
293
|
-
} = validatedSession;
|
|
294
|
-
const newSession = {
|
|
295
|
-
...nextProps.session,
|
|
296
|
-
value
|
|
297
|
-
};
|
|
298
|
-
const includeTargetsChanged = currentModel.config?.includeTargets !== includeTargets;
|
|
299
|
-
if (includeTargets && includeTargetsChanged) {
|
|
300
|
-
needsReset = true;
|
|
301
|
-
delete newSession.value;
|
|
302
|
-
}
|
|
303
|
-
this.setState(newState, () => {
|
|
304
|
-
const {
|
|
305
|
-
mode
|
|
306
|
-
} = env || {};
|
|
307
|
-
if (needsReset && mode === 'gather') {
|
|
308
|
-
this.props.onSessionChange(newSession);
|
|
309
|
-
}
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
render() {
|
|
313
|
-
const {
|
|
314
|
-
model
|
|
315
|
-
} = this.props;
|
|
316
|
-
const {
|
|
317
|
-
correctResponse,
|
|
318
|
-
correctness,
|
|
319
|
-
extraCSSRules,
|
|
320
|
-
prompt,
|
|
321
|
-
rationale,
|
|
322
|
-
feedback,
|
|
323
|
-
config: configs,
|
|
324
|
-
note,
|
|
325
|
-
showNote,
|
|
326
|
-
env,
|
|
327
|
-
disabled,
|
|
328
|
-
teacherInstructions,
|
|
329
|
-
language
|
|
330
|
-
} = model;
|
|
331
|
-
const showToggle = correctResponse && correctResponse.length > 0;
|
|
332
|
-
const {
|
|
333
|
-
showingCorrect
|
|
334
|
-
} = this.state;
|
|
335
|
-
const config = configs || {
|
|
336
|
-
orientation: 'vertical',
|
|
337
|
-
includeTargets: true
|
|
338
|
-
};
|
|
339
|
-
const {
|
|
340
|
-
orientation,
|
|
341
|
-
includeTargets
|
|
342
|
-
} = config;
|
|
343
|
-
const vertical = orientation === 'vertical';
|
|
344
|
-
const ordering = this.createOrdering();
|
|
345
|
-
const {
|
|
346
|
-
mode,
|
|
347
|
-
role
|
|
348
|
-
} = env || {};
|
|
349
|
-
const Tiler = vertical ? _tiler.VerticalTiler : _tiler.HorizontalTiler;
|
|
350
|
-
const displayNote = (showingCorrect || mode === 'view' && role === 'instructor') && showNote && note;
|
|
351
|
-
const showRationale = rationale && ((0, _renderUi.hasText)(rationale) || (0, _renderUi.hasMedia)(rationale));
|
|
352
|
-
const showTeacherInstructions = teacherInstructions && ((0, _renderUi.hasText)(teacherInstructions) || (0, _renderUi.hasMedia)(teacherInstructions));
|
|
353
|
-
const containerStyle = {
|
|
354
|
-
color: _renderUi.color.text(),
|
|
355
|
-
backgroundColor: _renderUi.color.background(),
|
|
356
|
-
display: 'flex',
|
|
357
|
-
flexDirection: 'column',
|
|
358
|
-
alignItems: 'center',
|
|
359
|
-
boxSizing: 'border-box'
|
|
360
|
-
};
|
|
361
|
-
return /*#__PURE__*/_react.default.createElement(_drag.DragProvider, {
|
|
362
|
-
onDragStart: () => {},
|
|
363
|
-
onDragEnd: this.onDragEnd,
|
|
364
|
-
collisionDetection: _core.closestCenter
|
|
365
|
-
}, /*#__PURE__*/_react.default.createElement(PlacementOrderingContainer, null, /*#__PURE__*/_react.default.createElement(_renderUi.UiLayout, {
|
|
366
|
-
extraCSSRules: extraCSSRules,
|
|
367
|
-
style: containerStyle
|
|
368
|
-
}, showTeacherInstructions && /*#__PURE__*/_react.default.createElement(StyledCollapsible, {
|
|
369
|
-
labels: {
|
|
370
|
-
hidden: 'Show Teacher Instructions',
|
|
371
|
-
visible: 'Hide Teacher Instructions'
|
|
372
|
-
},
|
|
373
|
-
className: "collapsible"
|
|
374
|
-
}, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
|
|
375
|
-
prompt: teacherInstructions
|
|
376
|
-
})), /*#__PURE__*/_react.default.createElement(StyledPrompt, null, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
|
|
377
|
-
prompt: prompt
|
|
378
|
-
})), /*#__PURE__*/_react.default.createElement(StyledToggle, {
|
|
379
|
-
show: showToggle,
|
|
380
|
-
toggled: showingCorrect,
|
|
381
|
-
onToggle: this.toggleCorrect,
|
|
382
|
-
language: language
|
|
383
|
-
}), /*#__PURE__*/_react.default.createElement(OrderingTiler, {
|
|
384
|
-
instanceId: this.instanceId,
|
|
385
|
-
choiceLabel: config.choiceLabel,
|
|
386
|
-
targetLabel: config.targetLabel,
|
|
387
|
-
ordering: ordering,
|
|
388
|
-
tiler: Tiler,
|
|
389
|
-
disabled: disabled,
|
|
390
|
-
addGuide: config.showOrdering,
|
|
391
|
-
tileSize: config.tileSize,
|
|
392
|
-
includeTargets: includeTargets,
|
|
393
|
-
choiceLabelEnabled: model.config && model.config.choiceLabelEnabled
|
|
394
|
-
}), displayNote && /*#__PURE__*/_react.default.createElement(StyledNote, {
|
|
395
|
-
dangerouslySetInnerHTML: {
|
|
396
|
-
__html: note
|
|
397
|
-
}
|
|
398
|
-
}), showRationale && /*#__PURE__*/_react.default.createElement(StyledCollapsible, {
|
|
399
|
-
labels: {
|
|
400
|
-
hidden: 'Show Rationale',
|
|
401
|
-
visible: 'Hide Rationale'
|
|
402
|
-
},
|
|
403
|
-
className: "collapsible"
|
|
404
|
-
}, /*#__PURE__*/_react.default.createElement(_renderUi.PreviewPrompt, {
|
|
405
|
-
prompt: rationale
|
|
406
|
-
})), !showingCorrect && /*#__PURE__*/_react.default.createElement(_renderUi.Feedback, {
|
|
407
|
-
correctness: correctness,
|
|
408
|
-
feedback: feedback
|
|
409
|
-
}))));
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
exports.PlacementOrdering = PlacementOrdering;
|
|
413
|
-
(0, _defineProperty2.default)(PlacementOrdering, "propTypes", {
|
|
414
|
-
onSessionChange: _propTypes.default.func.isRequired,
|
|
415
|
-
model: _propTypes.default.object.isRequired,
|
|
416
|
-
session: _propTypes.default.oneOfType([_propTypes.default.array.isRequired, _propTypes.default.object.isRequired])
|
|
417
|
-
});
|
|
418
|
-
var _default = exports.default = PlacementOrdering;
|
|
419
|
-
//# sourceMappingURL=placement-ordering.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"placement-ordering.js","names":["_react","_interopRequireDefault","require","_reactDom","_propTypes","_debug","_lodashEs","_styles","_core","_renderUi","_mathRendering","_translator","_correctAnswerToggle","_drag","_tiler","_ordering","_utils","translator","Translator","log","debug","PlacementOrderingContainer","styled","color","text","backgroundColor","background","display","flexDirection","alignItems","boxSizing","StyledPrompt","theme","paddingBottom","spacing","StyledNote","StyledToggle","CorrectAnswerToggle","StyledCollapsible","Collapsible","marginBottom","alignSelf","OrderingTiler","props","tiler","Comp","ordering","onDropChoice","onRemoveChoice","compProps","default","createElement","_extends2","tiles","t","s","propTypes","PropTypes","func","any","PlacementOrdering","React","Component","constructor","_defineProperty2","showingCorrect","setState","model","session","areChoicesShuffled","config","choices","includeTargets","choicesIds","map","c","id","value","needsReset","sessionMissing","length","missingChoiceIds","difference","extraChoiceIds","isEqual","sessionIsMismatched","concat","Array","filter","cId","includes","console","warn","target","source","onSessionChange","from","find","type","index","to","update","reducer","sessionUpdate","Object","assign","response","state","orientation","buildState","correctResponse","outcome","allowSameChoiceInTargets","outcomes","event","over","active","createOrdering","draggedItem","data","current","droppedOnItem","instanceId","uniqueId","validateSession","env","mode","componentDidUpdate","domNode","ReactDOM","findDOMNode","renderMath","UNSAFE_componentWillReceiveProps","nextProps","nextModel","currentModel","nextChoices","newState","isLanguageChanged","language","isDefaultNote","note","lng","haveSameValuesButDifferentOrder","validatedSession","newSession","includeTargetsChanged","render","correctness","extraCSSRules","prompt","rationale","feedback","configs","showNote","disabled","teacherInstructions","showToggle","vertical","role","Tiler","VerticalTiler","HorizontalTiler","displayNote","showRationale","hasText","hasMedia","showTeacherInstructions","containerStyle","DragProvider","onDragStart","onDragEnd","collisionDetection","closestCenter","UiLayout","style","labels","hidden","visible","className","PreviewPrompt","show","toggled","onToggle","toggleCorrect","choiceLabel","targetLabel","addGuide","showOrdering","tileSize","choiceLabelEnabled","dangerouslySetInnerHTML","__html","Feedback","exports","isRequired","object","oneOfType","array","_default"],"sources":["../src/placement-ordering.jsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { difference, isEqual, uniqueId } from 'lodash-es';\nimport { styled } from '@mui/material/styles';\nimport { closestCenter } from '@dnd-kit/core';\n\nimport { Collapsible, color, Feedback, hasMedia, hasText, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport Translator from '@pie-lib/translator';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { DragProvider } from '@pie-lib/drag';\n\nimport { HorizontalTiler, VerticalTiler } from './tiler';\nimport { buildState, reducer } from './ordering';\nimport { haveSameValuesButDifferentOrder } from './utils';\n\nconst { translator } = Translator;\n\nconst log = debug('pie-elements:placement-ordering');\n\nconst PlacementOrderingContainer = styled('div')({\n color: color.text(),\n backgroundColor: color.background(),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n boxSizing: 'border-box',\n});\n\nconst StyledPrompt = styled('div')(({ theme }) => ({\n paddingBottom: theme.spacing(1),\n}));\n\nconst StyledNote = styled('div')(({ theme }) => ({\n paddingBottom: theme.spacing(2),\n}));\n\nconst StyledToggle = styled(CorrectAnswerToggle)(({ theme }) => ({\n paddingBottom: theme.spacing(1),\n}));\n\nconst StyledCollapsible = styled(Collapsible)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n alignSelf: 'flex-start',\n}));\n\nconst OrderingTiler = (props) => {\n const { tiler: Comp, ordering, onDropChoice, onRemoveChoice, ...compProps } = props;\n\n return (\n <Comp\n {...compProps}\n tiles={ordering.tiles}\n onDropChoice={(t, s) => onDropChoice(t, s, ordering)}\n onRemoveChoice={(t) => onRemoveChoice(t, ordering)}\n />\n );\n};\n\nOrderingTiler.propTypes = {\n tiler: PropTypes.func,\n ordering: PropTypes.any,\n onDropChoice: PropTypes.func,\n onRemoveChoice: PropTypes.func,\n};\n\nexport class PlacementOrdering extends React.Component {\n static propTypes = {\n onSessionChange: PropTypes.func.isRequired,\n model: PropTypes.object.isRequired,\n session: PropTypes.oneOfType([PropTypes.array.isRequired, PropTypes.object.isRequired]),\n };\n\n constructor(props) {\n super(props);\n\n this.instanceId = uniqueId();\n\n const { value, needsReset } = this.validateSession(props);\n\n this.state = {\n showingCorrect: false,\n };\n\n const { model } = props || {};\n const { env } = model || {};\n const { mode } = env || {};\n\n if (needsReset && mode === 'gather') {\n this.props.onSessionChange({\n ...props.session,\n value,\n });\n }\n }\n\n toggleCorrect = (showingCorrect) => this.setState({ showingCorrect });\n\n componentDidUpdate() {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n validateSession = ({ model, session }, areChoicesShuffled = false) => {\n const { config, choices } = model || {};\n const { includeTargets } = config || {};\n const choicesIds = choices.map((c) => c.id);\n\n let { value } = session || {};\n let needsReset;\n\n if (!includeTargets) {\n // Use all choice IDs if choices were shuffled or session is missing/invalid\n const sessionMissing = !value || !value.length;\n if (sessionMissing || areChoicesShuffled) {\n // if there's no value on session in No Targets Mode, we need to set an initial session\n value = choicesIds;\n } else {\n // in No Targets Mode, all choice ids need to be used\n const missingChoiceIds = difference(choicesIds, value);\n // this is the case that handles extra choice ids in session\n const extraChoiceIds = difference(value, choicesIds);\n\n if (missingChoiceIds.length || extraChoiceIds.length) {\n value = choicesIds;\n }\n }\n\n needsReset = !isEqual(session.value, value);\n } else {\n // in Targets Area selected, it's important to check the length of session\n const sessionIsMismatched = value && value.length !== choicesIds.length;\n if (sessionIsMismatched) {\n needsReset = true;\n\n // if choices were added, add value in session\n if (value.length < choicesIds.length) {\n value = value.concat(new Array(choicesIds.length - value.length));\n } else {\n // if choices were removed, make sure to remove from session as well\n value = value.filter((cId) => choicesIds.includes(cId));\n }\n }\n }\n\n if (needsReset) {\n // eslint-disable-next-line no-console\n console.warn('This session is not valid anymore. It will be reset.');\n }\n\n return { value, needsReset };\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model: nextModel = {} } = nextProps || {};\n const { model: currentModel = {} } = this.props || {};\n const { correctResponse, config, choices: nextChoices = [], env } = nextModel;\n const { includeTargets } = config || {};\n\n const newState = {};\n\n const isLanguageChanged = currentModel.language && currentModel.language !== nextModel.language;\n const isDefaultNote =\n currentModel.note &&\n currentModel.note === translator.t('common:commonCorrectAnswerWithAlternates', { lng: currentModel.language });\n\n // check if the note is the default one for prev language and change to the default one for new language\n // this check is necessary in order to diferanciate between default and authour defined note\n // and only change between languages for default ones\n if (isLanguageChanged && isDefaultNote) {\n currentModel.note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: nextModel.language });\n }\n\n if (!correctResponse) {\n newState.showingCorrect = false;\n }\n\n //PD-4924\n // show student choices same order as in model when teacher changes student choices order\n // for cases when student view and instructor view are on same page\n const areChoicesShuffled = haveSameValuesButDifferentOrder(nextChoices, currentModel.choices);\n\n const validatedSession = this.validateSession(nextProps, areChoicesShuffled);\n let { value, needsReset } = validatedSession;\n\n const newSession = {\n ...nextProps.session,\n value,\n };\n const includeTargetsChanged = currentModel.config?.includeTargets !== includeTargets;\n\n if (includeTargets && includeTargetsChanged) {\n needsReset = true;\n\n delete newSession.value;\n }\n\n this.setState(newState, () => {\n const { mode } = env || {};\n\n if (needsReset && mode === 'gather') {\n this.props.onSessionChange(newSession);\n }\n });\n }\n\n onDropChoice = (target, source, ordering) => {\n const { onSessionChange, session } = this.props;\n const from = ordering.tiles.find((t) => t.id === source.id && t.type === source.type && t.index === source.index);\n const to = target;\n log('[onDropChoice] ', from, to);\n const update = reducer({ type: 'move', from, to }, ordering);\n const sessionUpdate = Object.assign({}, session, {\n value: update.response,\n });\n\n onSessionChange(sessionUpdate);\n };\n\n onRemoveChoice = (target, ordering) => {\n const { onSessionChange, session } = this.props;\n log('[onRemoveChoice]', target);\n const update = reducer({ type: 'remove', target }, ordering);\n const sessionUpdate = Object.assign({}, session, {\n value: update.response,\n });\n onSessionChange(sessionUpdate);\n };\n\n createOrdering = () => {\n const { model, session } = this.props;\n const { showingCorrect } = this.state;\n const config = model.config || {\n orientation: 'vertical',\n includeTargets: true,\n };\n const { includeTargets } = config;\n\n return showingCorrect\n ? buildState(\n model.choices,\n model.correctResponse,\n model.correctResponse.map((id) => ({ id, outcome: 'correct' })),\n {\n includeTargets,\n allowSameChoiceInTargets: model.config.allowSameChoiceInTargets,\n },\n )\n : buildState(model.choices, session.value, model.outcomes, {\n includeTargets,\n allowSameChoiceInTargets: model.config.allowSameChoiceInTargets,\n });\n };\n\n onDragEnd = (event) => {\n const { over, active } = event;\n const ordering = this.createOrdering();\n\n if (over && active) {\n const draggedItem = active.data.current;\n const droppedOnItem = over.data.current;\n\n if (draggedItem && droppedOnItem && droppedOnItem.type === 'target') {\n this.onDropChoice(droppedOnItem, draggedItem, ordering);\n return;\n }\n\n if (draggedItem && droppedOnItem) {\n this.onDropChoice(droppedOnItem, draggedItem, ordering);\n }\n } else if (!over && active) {\n const draggedItem = active.data.current;\n if (draggedItem && draggedItem.type === 'target') {\n this.onRemoveChoice(draggedItem, ordering);\n }\n }\n };\n\n render() {\n const { model } = this.props;\n const {\n correctResponse,\n correctness,\n extraCSSRules,\n prompt,\n rationale,\n feedback,\n config: configs,\n note,\n showNote,\n env,\n disabled,\n teacherInstructions,\n language,\n } = model;\n const showToggle = correctResponse && correctResponse.length > 0;\n const { showingCorrect } = this.state;\n const config = configs || {\n orientation: 'vertical',\n includeTargets: true,\n };\n const { orientation, includeTargets } = config;\n const vertical = orientation === 'vertical';\n const ordering = this.createOrdering();\n const { mode, role } = env || {};\n\n const Tiler = vertical ? VerticalTiler : HorizontalTiler;\n const displayNote = (showingCorrect || (mode === 'view' && role === 'instructor')) && showNote && note;\n const showRationale = rationale && (hasText(rationale) || hasMedia(rationale));\n const showTeacherInstructions =\n teacherInstructions && (hasText(teacherInstructions) || hasMedia(teacherInstructions));\n\n const containerStyle = {\n color: color.text(),\n backgroundColor: color.background(),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n boxSizing: 'border-box',\n };\n\n return (\n <DragProvider onDragStart={() => { }} onDragEnd={this.onDragEnd} collisionDetection={closestCenter}>\n <PlacementOrderingContainer>\n <UiLayout extraCSSRules={extraCSSRules} style={containerStyle}>\n {showTeacherInstructions && (\n <StyledCollapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n className=\"collapsible\"\n >\n <PreviewPrompt prompt={teacherInstructions} />\n </StyledCollapsible>\n )}\n\n <StyledPrompt>\n <PreviewPrompt prompt={prompt} />\n </StyledPrompt>\n\n <StyledToggle\n show={showToggle}\n toggled={showingCorrect}\n onToggle={this.toggleCorrect}\n language={language}\n />\n\n <OrderingTiler\n instanceId={this.instanceId}\n choiceLabel={config.choiceLabel}\n targetLabel={config.targetLabel}\n ordering={ordering}\n tiler={Tiler}\n disabled={disabled}\n addGuide={config.showOrdering}\n tileSize={config.tileSize}\n includeTargets={includeTargets}\n choiceLabelEnabled={model.config && model.config.choiceLabelEnabled}\n />\n\n {displayNote && <StyledNote dangerouslySetInnerHTML={{ __html: note }} />}\n\n {showRationale && (\n <StyledCollapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}\n className=\"collapsible\"\n >\n <PreviewPrompt prompt={rationale} />\n </StyledCollapsible>\n )}\n\n {!showingCorrect && <Feedback correctness={correctness} feedback={feedback} />}\n </UiLayout>\n </PlacementOrderingContainer>\n </DragProvider>\n );\n }\n}\n\nexport default PlacementOrdering;\n"],"mappings":"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","ignoreList":[]}
|