@pie-lib/rubric 0.8.32-next.0 → 0.8.32-next.1595

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/lib/authoring.js CHANGED
@@ -69,6 +69,8 @@ var _pointMenu = _interopRequireDefault(require("./point-menu"));
69
69
 
70
70
  var _range = _interopRequireDefault(require("lodash/range"));
71
71
 
72
+ var _configUi = require("@pie-lib/config-ui");
73
+
72
74
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
73
75
 
74
76
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -94,7 +96,8 @@ var RubricType = _propTypes["default"].shape({
94
96
  excludeZero: _propTypes["default"].bool,
95
97
  points: _propTypes["default"].arrayOf(_propTypes["default"].string),
96
98
  sampleAnswers: _propTypes["default"].arrayOf(_propTypes["default"].string),
97
- maxPoints: _propTypes["default"].number
99
+ maxPoints: _propTypes["default"].number,
100
+ rubriclessInstruction: _propTypes["default"].string
98
101
  });
99
102
 
100
103
  exports.RubricType = RubricType;
@@ -124,7 +127,7 @@ var MaxPoints = (0, _styles.withStyles)(function (theme) {
124
127
  input: /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], {
125
128
  labelWidth: 80
126
129
  })
127
- }, (0, _range["default"])(1, max).map(function (v) {
130
+ }, (0, _range["default"])(1, max + 1).map(function (v) {
128
131
  return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
129
132
  key: "".concat(v),
130
133
  value: v
@@ -164,6 +167,12 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
164
167
  pointMenu: {
165
168
  position: 'absolute',
166
169
  right: 0
170
+ },
171
+ errorText: {
172
+ fontSize: theme.typography.fontSize - 2,
173
+ color: theme.palette.error.main,
174
+ paddingLeft: theme.spacing.unit * 3,
175
+ paddingTop: theme.spacing.unit
167
176
  }
168
177
  };
169
178
  })(function (props) {
@@ -172,7 +181,10 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
172
181
  classes = props.classes,
173
182
  sampleAnswer = props.sampleAnswer,
174
183
  _props$mathMlOptions = props.mathMlOptions,
175
- mathMlOptions = _props$mathMlOptions === void 0 ? {} : _props$mathMlOptions;
184
+ mathMlOptions = _props$mathMlOptions === void 0 ? {} : _props$mathMlOptions,
185
+ error = props.error,
186
+ _props$pluginOpts = props.pluginOpts,
187
+ pluginOpts = _props$pluginOpts === void 0 ? {} : _props$pluginOpts;
176
188
  var pointsLabel = "".concat(points, " ").concat(points <= 1 ? 'pt' : 'pts');
177
189
  var showSampleAnswer = checkSampleAnswer(sampleAnswer);
178
190
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -186,6 +198,8 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
186
198
  className: classes.dragIndicator
187
199
  }), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
188
200
  className: classes.editor,
201
+ error: error,
202
+ pluginProps: pluginOpts,
189
203
  markup: content,
190
204
  onChange: props.onChange,
191
205
  mathMlOptions: mathMlOptions
@@ -195,7 +209,9 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
195
209
  },
196
210
  showSampleAnswer: showSampleAnswer,
197
211
  onChange: props.onMenuChange
198
- })), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement("div", {
212
+ })), error && /*#__PURE__*/_react["default"].createElement("div", {
213
+ className: classes.errorText
214
+ }, error), !showSampleAnswer && /*#__PURE__*/_react["default"].createElement("div", {
199
215
  className: classes.sampleAnswersEditor
200
216
  }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
201
217
  variant: "overline",
@@ -203,6 +219,7 @@ var PointConfig = (0, _styles.withStyles)(function (theme) {
203
219
  }, "Sample Response"), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
204
220
  className: classes.editor,
205
221
  markup: sampleAnswer,
222
+ pluginProps: pluginOpts,
206
223
  onChange: props.onSampleChange,
207
224
  mathMlOptions: mathMlOptions
208
225
  })));
@@ -239,10 +256,19 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
239
256
  sampleAnswers: sampleAnswers
240
257
  }));
241
258
  });
242
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMaxPoints", function (maxPoints) {
259
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeRubriclessInstruction", function (input) {
243
260
  var _this$props2 = _this.props,
244
261
  value = _this$props2.value,
245
262
  onChange = _this$props2.onChange;
263
+ onChange(_objectSpread(_objectSpread({}, value), {}, {
264
+ rubriclessInstruction: input
265
+ }));
266
+ });
267
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "changeMaxPoints", function (maxPoints) {
268
+ var _this$props3 = _this.props,
269
+ value = _this$props3.value,
270
+ onChange = _this$props3.onChange,
271
+ rubricless = _this$props3.rubricless;
246
272
  var currentMax = value.points.length - 1;
247
273
  log('current', currentMax, 'new: ', maxPoints);
248
274
  var points, sampleAnswers;
@@ -262,10 +288,15 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
262
288
  sampleAnswers = (0, _takeRight["default"])(value.sampleAnswers, maxPoints + 1);
263
289
  }
264
290
 
265
- if (points) {
291
+ if (points && !rubricless) {
266
292
  onChange(_objectSpread(_objectSpread({}, value), {}, {
267
293
  points: points,
268
- sampleAnswers: sampleAnswers
294
+ sampleAnswers: sampleAnswers,
295
+ maxPoints: maxPoints
296
+ }));
297
+ } else {
298
+ onChange(_objectSpread(_objectSpread({}, value), {}, {
299
+ maxPoints: maxPoints
269
300
  }));
270
301
  }
271
302
  });
@@ -277,18 +308,18 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
277
308
  return;
278
309
  }
279
310
 
280
- var _this$props3 = _this.props,
281
- value = _this$props3.value,
282
- onChange = _this$props3.onChange;
311
+ var _this$props4 = _this.props,
312
+ value = _this$props4.value,
313
+ onChange = _this$props4.onChange;
283
314
  var items = value[type] && Array.from(value[type]);
284
315
  items.splice(index, 1, content);
285
316
  log("changeModel[".concat(type, "]:"), items);
286
317
  onChange(_objectSpread(_objectSpread({}, value), {}, (0, _defineProperty2["default"])({}, type, items)));
287
318
  });
288
319
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "excludeZeros", function () {
289
- var _this$props4 = _this.props,
290
- value = _this$props4.value,
291
- onChange = _this$props4.onChange;
320
+ var _this$props5 = _this.props,
321
+ value = _this$props5.value,
322
+ onChange = _this$props5.onChange;
292
323
  onChange(_objectSpread(_objectSpread({}, value), {}, {
293
324
  excludeZero: !value.excludeZero
294
325
  }));
@@ -328,24 +359,48 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
328
359
  value: function render() {
329
360
  var _this2 = this;
330
361
 
331
- var _this$props5 = this.props,
332
- classes = _this$props5.classes,
333
- className = _this$props5.className,
334
- value = _this$props5.value,
335
- _this$props5$mathMlOp = _this$props5.mathMlOptions,
336
- mathMlOptions = _this$props5$mathMlOp === void 0 ? {} : _this$props5$mathMlOp;
362
+ var _this$props6 = this.props,
363
+ classes = _this$props6.classes,
364
+ className = _this$props6.className,
365
+ value = _this$props6.value,
366
+ _this$props6$mathMlOp = _this$props6.mathMlOptions,
367
+ mathMlOptions = _this$props6$mathMlOp === void 0 ? {} : _this$props6$mathMlOp,
368
+ _this$props6$config = _this$props6.config,
369
+ config = _this$props6$config === void 0 ? {} : _this$props6$config,
370
+ _this$props6$rubricle = _this$props6.rubricless,
371
+ rubricless = _this$props6$rubricle === void 0 ? false : _this$props6$rubricle,
372
+ _this$props6$pluginOp = _this$props6.pluginOpts,
373
+ pluginOpts = _this$props6$pluginOp === void 0 ? {} : _this$props6$pluginOp;
337
374
 
338
375
  var _ref = value || {},
339
376
  _ref$excludeZeroEnabl = _ref.excludeZeroEnabled,
340
377
  excludeZeroEnabled = _ref$excludeZeroEnabl === void 0 ? true : _ref$excludeZeroEnabl,
341
378
  _ref$maxPointsEnabled = _ref.maxPointsEnabled,
342
- maxPointsEnabled = _ref$maxPointsEnabled === void 0 ? true : _ref$maxPointsEnabled;
379
+ maxPointsEnabled = _ref$maxPointsEnabled === void 0 ? true : _ref$maxPointsEnabled,
380
+ _ref$errors = _ref.errors,
381
+ errors = _ref$errors === void 0 ? {} : _ref$errors,
382
+ _ref$rubriclessInstru = _ref.rubriclessInstructionEnabled,
383
+ rubriclessInstructionEnabled = _ref$rubriclessInstru === void 0 ? false : _ref$rubriclessInstru,
384
+ _ref$maxPoints = _ref.maxPoints,
385
+ maxPoints = _ref$maxPoints === void 0 ? 10 : _ref$maxPoints; // rubric will contain a max value for maxPoints
386
+
387
+
388
+ var _ref2 = config || {},
389
+ _ref2$rubriclessInstr = _ref2.rubriclessInstruction,
390
+ rubriclessInstruction = _ref2$rubriclessInstr === void 0 ? {} : _ref2$rubriclessInstr,
391
+ _ref2$maxMaxPoints = _ref2.maxMaxPoints,
392
+ maxMaxPoints = _ref2$maxMaxPoints === void 0 ? 10 : _ref2$maxMaxPoints;
393
+
394
+ var _ref3 = errors || {},
395
+ pointsDescriptorsErrors = _ref3.pointsDescriptorsErrors;
343
396
 
344
397
  if (value && Number.isFinite(value.maxPoints)) {
345
398
  // eslint-disable-next-line no-console
346
399
  console.warn('maxPoints is deprecated - remove from model');
347
- }
400
+ } // for rubric value is computed based on points
348
401
 
402
+
403
+ var maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;
349
404
  return /*#__PURE__*/_react["default"].createElement("div", {
350
405
  className: (0, _classnames["default"])(classes["class"], className)
351
406
  }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
@@ -354,17 +409,34 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
354
409
  }, "Rubric"), /*#__PURE__*/_react["default"].createElement(_FormGroup["default"], {
355
410
  row: true
356
411
  }, maxPointsEnabled && /*#__PURE__*/_react["default"].createElement(MaxPoints, {
357
- max: 10,
358
- value: value.points.length - 1,
359
- onChange: this.changeMaxPoints
412
+ max: maxMaxPoints < 100 ? maxMaxPoints : 100,
413
+ value: maxPointsValue,
414
+ onChange: this.changeMaxPoints,
415
+ pluginOpts: pluginOpts
360
416
  }), excludeZeroEnabled && /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
361
417
  label: "Exclude zeros",
362
418
  control: /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
363
419
  checked: value.excludeZero,
364
420
  onChange: this.excludeZeros
365
421
  })
422
+ })), rubriclessInstructionEnabled && rubricless && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
423
+ label: rubriclessInstruction.label,
424
+ className: classes.inputContainer
425
+ }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
426
+ className: classes.input,
427
+ markup: value.rubriclessInstruction || '',
428
+ onChange: this.changeRubriclessInstruction,
429
+ pluginProps: pluginOpts,
430
+ nonEmpty: false,
431
+ disableUnderline: true,
432
+ languageCharactersProps: [{
433
+ language: 'spanish'
434
+ }, {
435
+ language: 'special'
436
+ }],
437
+ mathMlOptions: mathMlOptions
366
438
  })), /*#__PURE__*/_react["default"].createElement("div", {
367
- className: classes.container
439
+ className: rubricless ? classes.rubricless : classes.container
368
440
  }, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.DragDropContext, {
369
441
  onDragEnd: this.dragEnd
370
442
  }, /*#__PURE__*/_react["default"].createElement(_reactBeautifulDnd.Droppable, {
@@ -384,6 +456,7 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
384
456
  }, provided.draggableProps, provided.dragHandleProps), /*#__PURE__*/_react["default"].createElement(PointConfig, {
385
457
  points: value.points.length - 1 - index,
386
458
  content: p,
459
+ error: pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index],
387
460
  sampleAnswer: value.sampleAnswers && value.sampleAnswers[index],
388
461
  onChange: function onChange(content) {
389
462
  return _this2.changeContent(index, content, 'points');
@@ -394,7 +467,8 @@ var RawAuthoring = /*#__PURE__*/function (_React$Component) {
394
467
  onMenuChange: function onMenuChange(clickedItem) {
395
468
  return _this2.onPointMenuChange(index, clickedItem);
396
469
  },
397
- mathMlOptions: mathMlOptions
470
+ mathMlOptions: mathMlOptions,
471
+ pluginOpts: pluginOpts
398
472
  }));
399
473
  });
400
474
  }), provided.placeholder);
@@ -409,6 +483,9 @@ exports.RawAuthoring = RawAuthoring;
409
483
  classes: _propTypes["default"].object.isRequired,
410
484
  className: _propTypes["default"].string,
411
485
  value: RubricType,
486
+ config: _propTypes["default"].object,
487
+ pluginOpts: _propTypes["default"].object,
488
+ rubricless: _propTypes["default"].bool,
412
489
  onChange: _propTypes["default"].func
413
490
  });
414
491
  (0, _defineProperty2["default"])(RawAuthoring, "defaultProps", {});
@@ -423,6 +500,14 @@ var styles = function styles(theme) {
423
500
  padding: theme.spacing.unit * 2,
424
501
  margin: theme.spacing.unit
425
502
  },
503
+ inputContainer: {
504
+ width: '100%',
505
+ paddingTop: theme.spacing.unit * 2,
506
+ marginBottom: theme.spacing.unit * 2
507
+ },
508
+ rubricless: {
509
+ display: 'none'
510
+ },
426
511
  configHolder: {
427
512
  paddingTop: theme.spacing.unit,
428
513
  paddingBottom: theme.spacing.unit
@@ -437,6 +522,14 @@ var styles = function styles(theme) {
437
522
  var StyledRawAuthoring = (0, _styles.withStyles)(styles)(RawAuthoring);
438
523
 
439
524
  var Reverse = function Reverse(props) {
525
+ var _ref4 = props || {},
526
+ _ref4$rubricless = _ref4.rubricless,
527
+ rubricless = _ref4$rubricless === void 0 ? false : _ref4$rubricless,
528
+ _ref4$config = _ref4.config,
529
+ config = _ref4$config === void 0 ? {} : _ref4$config,
530
+ _ref4$pluginOpts = _ref4.pluginOpts,
531
+ pluginOpts = _ref4$pluginOpts === void 0 ? {} : _ref4$pluginOpts;
532
+
440
533
  var points = Array.from(props.value.points || []).reverse();
441
534
  var sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();
442
535
 
@@ -460,12 +553,18 @@ var Reverse = function Reverse(props) {
460
553
 
461
554
  return /*#__PURE__*/_react["default"].createElement(StyledRawAuthoring, {
462
555
  value: value,
463
- onChange: onChange
556
+ config: config,
557
+ onChange: onChange,
558
+ rubricless: rubricless,
559
+ pluginOpts: pluginOpts
464
560
  });
465
561
  };
466
562
 
467
563
  Reverse.propTypes = {
468
564
  value: RubricType,
565
+ config: _propTypes["default"].object,
566
+ pluginOpts: _propTypes["default"].object,
567
+ rubricless: _propTypes["default"].bool,
469
568
  getIndex: _propTypes["default"].func,
470
569
  onChange: _propTypes["default"].func
471
570
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/authoring.jsx"],"names":["log","reorder","list","startIndex","endIndex","result","Array","from","splice","removed","RubricType","PropTypes","shape","excludeZero","bool","points","arrayOf","string","sampleAnswers","maxPoints","number","MaxPoints","theme","formControl","minWidth","margin","spacing","unit","props","value","onChange","max","classes","e","target","map","v","checkSampleAnswer","sampleAnswer","PointConfig","pointConfig","row","display","width","position","editor","backgroundColor","palette","common","white","dragIndicator","paddingTop","color","grey","pointsLabel","paddingBottom","textTransform","sampleAnswersEditor","paddingLeft","pointMenu","right","content","mathMlOptions","showSampleAnswer","icon","onMenuChange","onSampleChange","RawAuthoring","destination","source","index","currentMax","length","concat","type","items","clickedItem","changeContent","className","excludeZeroEnabled","maxPointsEnabled","Number","isFinite","console","warn","rubricTitle","changeMaxPoints","excludeZeros","container","dragEnd","provided","droppableProps","innerRef","p","shouldRenderPoint","toString","configHolder","draggableProps","dragHandleProps","onPointMenuChange","placeholder","React","Component","object","isRequired","func","styles","borderWidth","borderStyle","borderColor","padding","StyledRawAuthoring","Reverse","reverse","propTypes","getIndex"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport FormControl from '@material-ui/core/FormControl';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport times from 'lodash/times';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport grey from '@material-ui/core/colors/grey';\nimport Typography from '@material-ui/core/Typography';\nimport DragIndicator from '@material-ui/icons/DragIndicator';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport debug from 'debug';\nimport takeRight from 'lodash/takeRight';\nimport PointMenu from './point-menu';\n\nimport range from 'lodash/range';\nconst log = debug('pie-lib:rubric:authoring');\n\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n\n result.splice(endIndex, 0, removed);\n\n return result;\n};\n\nexport const RubricType = PropTypes.shape({\n excludeZero: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.string),\n sampleAnswers: PropTypes.arrayOf(PropTypes.string),\n maxPoints: PropTypes.number,\n});\n\nconst MaxPoints = withStyles((theme) => ({\n formControl: {\n minWidth: '120px',\n margin: theme.spacing.unit,\n },\n}))((props) => {\n const { value, onChange, max, classes } = props;\n\n return (\n <FormControl className={classes.formControl} variant=\"outlined\">\n <InputLabel width={100} htmlFor=\"...\">\n Max Points\n </InputLabel>\n <Select value={value} onChange={(e) => onChange(e.target.value)} input={<OutlinedInput labelWidth={80} />}>\n {range(1, max).map((v) => (\n <MenuItem key={`${v}`} value={v}>\n {v}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n});\n\n// if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed\n// if the value is '', the Sample Answer input field will be empty\nconst checkSampleAnswer = (sampleAnswer) => sampleAnswer === null || sampleAnswer === 'null';\n\nexport const PointConfig = withStyles((theme) => ({\n pointConfig: {},\n row: {\n display: 'flex',\n width: '100%',\n position: 'relative',\n },\n editor: {\n width: '100%',\n backgroundColor: `${theme.palette.common.white} !important`,\n },\n dragIndicator: {\n paddingTop: theme.spacing.unit,\n color: grey[500],\n },\n pointsLabel: {\n color: grey[500],\n paddingBottom: theme.spacing.unit,\n textTransform: 'uppercase',\n },\n sampleAnswersEditor: {\n paddingLeft: theme.spacing.unit * 3,\n },\n pointMenu: {\n position: 'absolute',\n right: 0,\n },\n}))((props) => {\n const { points, content, classes, sampleAnswer, mathMlOptions = {} } = props;\n const pointsLabel = `${points} ${points <= 1 ? 'pt' : 'pts'}`;\n const showSampleAnswer = checkSampleAnswer(sampleAnswer);\n\n return (\n <div className={classes.pointConfig}>\n <Typography variant=\"overline\" className={classes.pointsLabel}>\n {pointsLabel}\n </Typography>\n\n <div className={classes.row}>\n <DragIndicator className={classes.dragIndicator} />\n <EditableHtml\n className={classes.editor}\n markup={content}\n onChange={props.onChange}\n mathMlOptions={mathMlOptions}\n />\n <PointMenu\n classes={{\n icon: classes.pointMenu,\n }}\n showSampleAnswer={showSampleAnswer}\n onChange={props.onMenuChange}\n />\n </div>\n\n {!showSampleAnswer && (\n <div className={classes.sampleAnswersEditor}>\n <Typography variant=\"overline\" className={classes.dragIndicator}>\n Sample Response\n </Typography>\n <EditableHtml\n className={classes.editor}\n markup={sampleAnswer}\n onChange={props.onSampleChange}\n mathMlOptions={mathMlOptions}\n />\n </div>\n )}\n </div>\n );\n});\n\nexport class RawAuthoring extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n value: RubricType,\n onChange: PropTypes.func,\n };\n\n static defaultProps = {};\n\n dragEnd = (result) => {\n if (!result.destination) {\n return;\n }\n\n const { value, onChange } = this.props;\n\n const points = reorder(value.points, result.source.index, result.destination.index);\n const sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);\n\n onChange({ ...value, points, sampleAnswers });\n };\n\n changeMaxPoints = (maxPoints) => {\n const { value, onChange } = this.props;\n const currentMax = value.points.length - 1;\n\n log('current', currentMax, 'new: ', maxPoints);\n\n let points, sampleAnswers;\n if (maxPoints > currentMax) {\n points = times(maxPoints - currentMax)\n .map(() => '')\n .concat(value.points);\n sampleAnswers = times(maxPoints - currentMax)\n .map(() => null)\n .concat(value.sampleAnswers);\n }\n\n if (maxPoints < currentMax) {\n log('less than');\n points = takeRight(value.points, maxPoints + 1);\n sampleAnswers = takeRight(value.sampleAnswers, maxPoints + 1);\n }\n\n if (points) {\n onChange({ ...value, points, sampleAnswers });\n }\n };\n\n changeContent = (index, content, type) => {\n // type could be 'points' or 'sampleAnswers'\n log(`changeModel[${type}]:`, index, content);\n\n if (type !== 'points' && type !== 'sampleAnswers') {\n return;\n }\n\n const { value, onChange } = this.props;\n const items = value[type] && Array.from(value[type]);\n\n items.splice(index, 1, content);\n log(`changeModel[${type}]:`, items);\n\n onChange({ ...value, [type]: items });\n };\n\n excludeZeros = () => {\n const { value, onChange } = this.props;\n\n onChange({ ...value, excludeZero: !value.excludeZero });\n };\n\n shouldRenderPoint = (index, value) => {\n if (!value.excludeZero) {\n return true;\n } else {\n if (index < value.points.length - 1) {\n return true;\n } else if (index === value.points.length - 1) {\n return false;\n }\n\n return true;\n }\n };\n\n onPointMenuChange = (index, clickedItem) => {\n if (clickedItem === 'sample') {\n const { value } = this.props;\n const sampleAnswers = Array.from(value.sampleAnswers || []);\n\n if (checkSampleAnswer(sampleAnswers[index])) {\n // an empty string will display an empty Sample Answer input field\n this.changeContent(index, '', 'sampleAnswers');\n } else {\n // when the content is null or 'null', the Sample Answer input field will not be displayed\n this.changeContent(index, null, 'sampleAnswers');\n }\n }\n };\n\n render() {\n const { classes, className, value, mathMlOptions = {} } = this.props;\n let { excludeZeroEnabled = true, maxPointsEnabled = true } = value || {};\n\n if (value && Number.isFinite(value.maxPoints)) {\n // eslint-disable-next-line no-console\n console.warn('maxPoints is deprecated - remove from model');\n }\n\n return (\n <div className={classNames(classes.class, className)}>\n <Typography variant=\"h5\" className={classes.rubricTitle}>\n Rubric\n </Typography>\n <FormGroup row>\n {maxPointsEnabled && <MaxPoints max={10} value={value.points.length - 1} onChange={this.changeMaxPoints} />}\n {excludeZeroEnabled && (\n <FormControlLabel\n label=\"Exclude zeros\"\n control={<Checkbox checked={value.excludeZero} onChange={this.excludeZeros} />}\n />\n )}\n </FormGroup>\n\n <div className={classes.container}>\n <DragDropContext onDragEnd={this.dragEnd}>\n <Droppable droppableId=\"droppable\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {value.points.map(\n (p, index) =>\n this.shouldRenderPoint(index, value) && (\n <Draggable key={`${p.points}-${index}`} index={index} draggableId={index.toString()}>\n {(provided) => (\n <div\n className={classes.configHolder}\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n >\n <PointConfig\n points={value.points.length - 1 - index}\n content={p}\n sampleAnswer={value.sampleAnswers && value.sampleAnswers[index]}\n onChange={(content) => this.changeContent(index, content, 'points')}\n onSampleChange={(content) => this.changeContent(index, content, 'sampleAnswers')}\n onMenuChange={(clickedItem) => this.onPointMenuChange(index, clickedItem)}\n mathMlOptions={mathMlOptions}\n />\n </div>\n )}\n </Draggable>\n ),\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n container: {\n backgroundColor: grey[200],\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: grey[300],\n padding: theme.spacing.unit * 2,\n margin: theme.spacing.unit,\n },\n configHolder: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n },\n rubricTitle: {\n paddingLeft: theme.spacing.unit,\n margin: theme.spacing.unit,\n },\n});\n\nconst StyledRawAuthoring = withStyles(styles)(RawAuthoring);\n\nconst Reverse = (props) => {\n const points = Array.from(props.value.points || []).reverse();\n let sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();\n\n if (points.length > sampleAnswers.length) {\n sampleAnswers = times(points.length - sampleAnswers.length)\n .map(() => null)\n .concat(sampleAnswers);\n }\n\n const value = { ...props.value, points, sampleAnswers };\n\n const onChange = (value) => {\n props.onChange({\n ...value,\n points: Array.from(value.points || []).reverse(),\n sampleAnswers: Array.from(value.sampleAnswers || []).reverse(),\n });\n };\n\n return <StyledRawAuthoring value={value} onChange={onChange} />;\n};\n\nReverse.propTypes = {\n value: RubricType,\n getIndex: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default Reverse;\n"],"file":"authoring.js"}
1
+ {"version":3,"sources":["../src/authoring.jsx"],"names":["log","reorder","list","startIndex","endIndex","result","Array","from","splice","removed","RubricType","PropTypes","shape","excludeZero","bool","points","arrayOf","string","sampleAnswers","maxPoints","number","rubriclessInstruction","MaxPoints","theme","formControl","minWidth","margin","spacing","unit","props","value","onChange","max","classes","e","target","map","v","checkSampleAnswer","sampleAnswer","PointConfig","pointConfig","row","display","width","position","editor","backgroundColor","palette","common","white","dragIndicator","paddingTop","color","grey","pointsLabel","paddingBottom","textTransform","sampleAnswersEditor","paddingLeft","pointMenu","right","errorText","fontSize","typography","error","main","content","mathMlOptions","pluginOpts","showSampleAnswer","icon","onMenuChange","onSampleChange","RawAuthoring","destination","source","index","input","rubricless","currentMax","length","concat","type","items","clickedItem","changeContent","className","config","excludeZeroEnabled","maxPointsEnabled","errors","rubriclessInstructionEnabled","maxMaxPoints","pointsDescriptorsErrors","Number","isFinite","console","warn","maxPointsValue","rubricTitle","changeMaxPoints","excludeZeros","label","inputContainer","changeRubriclessInstruction","language","container","dragEnd","provided","droppableProps","innerRef","p","shouldRenderPoint","toString","configHolder","draggableProps","dragHandleProps","onPointMenuChange","placeholder","React","Component","object","isRequired","func","styles","borderWidth","borderStyle","borderColor","padding","marginBottom","StyledRawAuthoring","Reverse","reverse","propTypes","getIndex"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport OutlinedInput from '@material-ui/core/OutlinedInput';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from '@material-ui/core/Select';\nimport FormControl from '@material-ui/core/FormControl';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport times from 'lodash/times';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport grey from '@material-ui/core/colors/grey';\nimport Typography from '@material-ui/core/Typography';\nimport DragIndicator from '@material-ui/icons/DragIndicator';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport debug from 'debug';\nimport takeRight from 'lodash/takeRight';\nimport PointMenu from './point-menu';\n\nimport range from 'lodash/range';\nimport { InputContainer } from '@pie-lib/config-ui';\n\nconst log = debug('pie-lib:rubric:authoring');\n\nconst reorder = (list, startIndex, endIndex) => {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n\n result.splice(endIndex, 0, removed);\n\n return result;\n};\n\nexport const RubricType = PropTypes.shape({\n excludeZero: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.string),\n sampleAnswers: PropTypes.arrayOf(PropTypes.string),\n maxPoints: PropTypes.number,\n rubriclessInstruction: PropTypes.string,\n});\n\nconst MaxPoints = withStyles((theme) => ({\n formControl: {\n minWidth: '120px',\n margin: theme.spacing.unit,\n },\n}))((props) => {\n const { value, onChange, max, classes } = props;\n\n return (\n <FormControl className={classes.formControl} variant=\"outlined\">\n <InputLabel width={100} htmlFor=\"...\">\n Max Points\n </InputLabel>\n <Select value={value} onChange={(e) => onChange(e.target.value)} input={<OutlinedInput labelWidth={80} />}>\n {range(1, max + 1).map((v) => (\n <MenuItem key={`${v}`} value={v}>\n {v}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n});\n\n// if the value is null or 'null', the Sample Answer input field for that point will not be dispalyed\n// if the value is '', the Sample Answer input field will be empty\nconst checkSampleAnswer = (sampleAnswer) => sampleAnswer === null || sampleAnswer === 'null';\n\nexport const PointConfig = withStyles((theme) => ({\n pointConfig: {},\n row: {\n display: 'flex',\n width: '100%',\n position: 'relative',\n },\n editor: {\n width: '100%',\n backgroundColor: `${theme.palette.common.white} !important`,\n },\n dragIndicator: {\n paddingTop: theme.spacing.unit,\n color: grey[500],\n },\n pointsLabel: {\n color: grey[500],\n paddingBottom: theme.spacing.unit,\n textTransform: 'uppercase',\n },\n sampleAnswersEditor: {\n paddingLeft: theme.spacing.unit * 3,\n },\n pointMenu: {\n position: 'absolute',\n right: 0,\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingLeft: theme.spacing.unit * 3,\n paddingTop: theme.spacing.unit,\n },\n}))((props) => {\n const { points, content, classes, sampleAnswer, mathMlOptions = {}, error, pluginOpts = {} } = props;\n const pointsLabel = `${points} ${points <= 1 ? 'pt' : 'pts'}`;\n const showSampleAnswer = checkSampleAnswer(sampleAnswer);\n\n return (\n <div className={classes.pointConfig}>\n <Typography variant=\"overline\" className={classes.pointsLabel}>\n {pointsLabel}\n </Typography>\n\n <div className={classes.row}>\n <DragIndicator className={classes.dragIndicator} />\n <EditableHtml\n className={classes.editor}\n error={error}\n pluginProps={pluginOpts}\n markup={content}\n onChange={props.onChange}\n mathMlOptions={mathMlOptions}\n />\n <PointMenu\n classes={{\n icon: classes.pointMenu,\n }}\n showSampleAnswer={showSampleAnswer}\n onChange={props.onMenuChange}\n />\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n {!showSampleAnswer && (\n <div className={classes.sampleAnswersEditor}>\n <Typography variant=\"overline\" className={classes.dragIndicator}>\n Sample Response\n </Typography>\n <EditableHtml\n className={classes.editor}\n markup={sampleAnswer}\n pluginProps={pluginOpts}\n onChange={props.onSampleChange}\n mathMlOptions={mathMlOptions}\n />\n </div>\n )}\n </div>\n );\n});\n\nexport class RawAuthoring extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n onChange: PropTypes.func,\n };\n\n static defaultProps = {};\n\n dragEnd = (result) => {\n if (!result.destination) {\n return;\n }\n\n const { value, onChange } = this.props;\n\n const points = reorder(value.points, result.source.index, result.destination.index);\n const sampleAnswers = reorder(value.sampleAnswers, result.source.index, result.destination.index);\n\n onChange({ ...value, points, sampleAnswers });\n };\n\n changeRubriclessInstruction = (input) => {\n const { value, onChange } = this.props;\n onChange({ ...value, rubriclessInstruction: input });\n };\n\n changeMaxPoints = (maxPoints) => {\n const { value, onChange, rubricless } = this.props;\n const currentMax = value.points.length - 1;\n\n log('current', currentMax, 'new: ', maxPoints);\n\n let points, sampleAnswers;\n if (maxPoints > currentMax) {\n points = times(maxPoints - currentMax)\n .map(() => '')\n .concat(value.points);\n sampleAnswers = times(maxPoints - currentMax)\n .map(() => null)\n .concat(value.sampleAnswers);\n }\n\n if (maxPoints < currentMax) {\n log('less than');\n points = takeRight(value.points, maxPoints + 1);\n sampleAnswers = takeRight(value.sampleAnswers, maxPoints + 1);\n }\n\n if (points && !rubricless) {\n onChange({ ...value, points, sampleAnswers, maxPoints });\n } else {\n onChange({ ...value, maxPoints });\n }\n };\n\n changeContent = (index, content, type) => {\n // type could be 'points' or 'sampleAnswers'\n log(`changeModel[${type}]:`, index, content);\n\n if (type !== 'points' && type !== 'sampleAnswers') {\n return;\n }\n\n const { value, onChange } = this.props;\n const items = value[type] && Array.from(value[type]);\n\n items.splice(index, 1, content);\n log(`changeModel[${type}]:`, items);\n\n onChange({ ...value, [type]: items });\n };\n\n excludeZeros = () => {\n const { value, onChange } = this.props;\n\n onChange({ ...value, excludeZero: !value.excludeZero });\n };\n\n shouldRenderPoint = (index, value) => {\n if (!value.excludeZero) {\n return true;\n } else {\n if (index < value.points.length - 1) {\n return true;\n } else if (index === value.points.length - 1) {\n return false;\n }\n\n return true;\n }\n };\n\n onPointMenuChange = (index, clickedItem) => {\n if (clickedItem === 'sample') {\n const { value } = this.props;\n const sampleAnswers = Array.from(value.sampleAnswers || []);\n\n if (checkSampleAnswer(sampleAnswers[index])) {\n // an empty string will display an empty Sample Answer input field\n this.changeContent(index, '', 'sampleAnswers');\n } else {\n // when the content is null or 'null', the Sample Answer input field will not be displayed\n this.changeContent(index, null, 'sampleAnswers');\n }\n }\n };\n\n render() {\n const {\n classes,\n className,\n value,\n mathMlOptions = {},\n config = {},\n rubricless = false,\n pluginOpts = {},\n } = this.props;\n let {\n excludeZeroEnabled = true,\n maxPointsEnabled = true,\n errors = {},\n rubriclessInstructionEnabled = false,\n maxPoints = 10,\n } = value || {};\n // rubric will contain a max value for maxPoints\n const { rubriclessInstruction = {}, maxMaxPoints = 10 } = config || {};\n const { pointsDescriptorsErrors } = errors || {};\n if (value && Number.isFinite(value.maxPoints)) {\n // eslint-disable-next-line no-console\n console.warn('maxPoints is deprecated - remove from model');\n }\n\n // for rubric value is computed based on points\n const maxPointsValue = !rubricless ? value.points.length - 1 : maxPoints;\n\n return (\n <div className={classNames(classes.class, className)}>\n <Typography variant=\"h5\" className={classes.rubricTitle}>\n Rubric\n </Typography>\n <FormGroup row>\n {maxPointsEnabled && (\n <MaxPoints\n max={maxMaxPoints < 100 ? maxMaxPoints : 100}\n value={maxPointsValue}\n onChange={this.changeMaxPoints}\n pluginOpts={pluginOpts}\n />\n )}\n {excludeZeroEnabled && (\n <FormControlLabel\n label=\"Exclude zeros\"\n control={<Checkbox checked={value.excludeZero} onChange={this.excludeZeros} />}\n />\n )}\n </FormGroup>\n\n {rubriclessInstructionEnabled && rubricless && (\n <InputContainer label={rubriclessInstruction.label} className={classes.inputContainer}>\n <EditableHtml\n className={classes.input}\n markup={value.rubriclessInstruction || ''}\n onChange={this.changeRubriclessInstruction}\n pluginProps={pluginOpts}\n nonEmpty={false}\n disableUnderline\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n )}\n\n <div className={rubricless ? classes.rubricless : classes.container}>\n <DragDropContext onDragEnd={this.dragEnd}>\n <Droppable droppableId=\"droppable\">\n {(provided) => (\n <div {...provided.droppableProps} ref={provided.innerRef}>\n {value.points.map(\n (p, index) =>\n this.shouldRenderPoint(index, value) && (\n <Draggable key={`${p.points}-${index}`} index={index} draggableId={index.toString()}>\n {(provided) => (\n <div\n className={classes.configHolder}\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n >\n <PointConfig\n points={value.points.length - 1 - index}\n content={p}\n error={\n pointsDescriptorsErrors && pointsDescriptorsErrors[value.points.length - 1 - index]\n }\n sampleAnswer={value.sampleAnswers && value.sampleAnswers[index]}\n onChange={(content) => this.changeContent(index, content, 'points')}\n onSampleChange={(content) => this.changeContent(index, content, 'sampleAnswers')}\n onMenuChange={(clickedItem) => this.onPointMenuChange(index, clickedItem)}\n mathMlOptions={mathMlOptions}\n pluginOpts={pluginOpts}\n />\n </div>\n )}\n </Draggable>\n ),\n )}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n </div>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n container: {\n backgroundColor: grey[200],\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: grey[300],\n padding: theme.spacing.unit * 2,\n margin: theme.spacing.unit,\n },\n inputContainer: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n rubricless: {\n display: 'none',\n },\n configHolder: {\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n },\n rubricTitle: {\n paddingLeft: theme.spacing.unit,\n margin: theme.spacing.unit,\n },\n});\n\nconst StyledRawAuthoring = withStyles(styles)(RawAuthoring);\n\nconst Reverse = (props) => {\n const { rubricless = false, config = {}, pluginOpts = {} } = props || {};\n const points = Array.from(props.value.points || []).reverse();\n let sampleAnswers = Array.from(props.value.sampleAnswers || []).reverse();\n\n if (points.length > sampleAnswers.length) {\n sampleAnswers = times(points.length - sampleAnswers.length)\n .map(() => null)\n .concat(sampleAnswers);\n }\n\n const value = { ...props.value, points, sampleAnswers };\n\n const onChange = (value) => {\n props.onChange({\n ...value,\n points: Array.from(value.points || []).reverse(),\n sampleAnswers: Array.from(value.sampleAnswers || []).reverse(),\n });\n };\n\n return (\n <StyledRawAuthoring\n value={value}\n config={config}\n onChange={onChange}\n rubricless={rubricless}\n pluginOpts={pluginOpts}\n />\n );\n};\n\nReverse.propTypes = {\n value: RubricType,\n config: PropTypes.object,\n pluginOpts: PropTypes.object,\n rubricless: PropTypes.bool,\n getIndex: PropTypes.func,\n onChange: PropTypes.func,\n};\n\nexport default Reverse;\n"],"file":"authoring.js"}
package/lib/index.js CHANGED
@@ -17,7 +17,8 @@ var _authoring = _interopRequireDefault(require("./authoring"));
17
17
 
18
18
  var RUBRIC_TYPES = {
19
19
  SIMPLE_RUBRIC: 'simpleRubric',
20
- MULTI_TRAIT_RUBRIC: 'multiTraitRubric'
20
+ MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
21
+ RUBRICLESS: 'rubricless'
21
22
  };
22
23
  exports.RUBRIC_TYPES = RUBRIC_TYPES;
23
24
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["RUBRIC_TYPES","SIMPLE_RUBRIC","MULTI_TRAIT_RUBRIC"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,aAAa,EAAE,cADI;AAEnBC,EAAAA,kBAAkB,EAAE;AAFD,CAArB","sourcesContent":["import Authoring from './authoring';\n\nconst RUBRIC_TYPES = {\n SIMPLE_RUBRIC: 'simpleRubric',\n MULTI_TRAIT_RUBRIC: 'multiTraitRubric',\n};\n\nexport { Authoring, RUBRIC_TYPES };\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["RUBRIC_TYPES","SIMPLE_RUBRIC","MULTI_TRAIT_RUBRIC","RUBRICLESS"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAEA,IAAMA,YAAY,GAAG;AACnBC,EAAAA,aAAa,EAAE,cADI;AAEnBC,EAAAA,kBAAkB,EAAE,kBAFD;AAGnBC,EAAAA,UAAU,EAAE;AAHO,CAArB","sourcesContent":["import Authoring from './authoring';\n\nconst RUBRIC_TYPES = {\n SIMPLE_RUBRIC: 'simpleRubric',\n MULTI_TRAIT_RUBRIC: 'multiTraitRubric',\n RUBRICLESS: 'rubricless',\n};\n\nexport { Authoring, RUBRIC_TYPES };\n"],"file":"index.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/rubric",
3
- "version": "0.8.32-next.0+30707508",
3
+ "version": "0.8.32-next.1595+4ac095ca",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -9,14 +9,14 @@
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.3",
11
11
  "@material-ui/icons": "^3.0.2",
12
- "@pie-lib/editable-html": "^11.1.2-next.0+30707508",
12
+ "@pie-lib/editable-html": "^11.1.2-next.1595+4ac095ca",
13
+ "classnames": "^2.2.6",
13
14
  "debug": "^4.1.1",
14
- "editable-html": "npm:@pie-lib/editable-html@^7.21.0",
15
15
  "lodash": "^4.17.11",
16
16
  "prop-types": "^15.7.2",
17
17
  "react": "^16.8.1",
18
18
  "react-beautiful-dnd": "^11.0.2",
19
19
  "react-dom": "^16.9.0"
20
20
  },
21
- "gitHead": "30707508d803994b5af7f1d82940c3442f3a3f89"
21
+ "gitHead": "4ac095ca931e5fe8f131f28f41dd61093bd55d98"
22
22
  }
@@ -0,0 +1,48 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Rubric render snapshot 1`] = `
4
+ <div
5
+ className="className"
6
+ >
7
+ <WithStyles(Typography)
8
+ variant="h5"
9
+ >
10
+ Rubric
11
+ </WithStyles(Typography)>
12
+ <WithStyles(FormGroup)
13
+ row={true}
14
+ >
15
+ <WithStyles(Component)
16
+ max={10}
17
+ onChange={[Function]}
18
+ pluginOpts={Object {}}
19
+ value={3}
20
+ />
21
+ <WithStyles(WithFormControlContext(FormControlLabel))
22
+ control={
23
+ <WithStyles(Checkbox)
24
+ checked={false}
25
+ onChange={[Function]}
26
+ />
27
+ }
28
+ label="Exclude zeros"
29
+ />
30
+ </WithStyles(FormGroup)>
31
+ <div>
32
+ <DragDropContext
33
+ onDragEnd={[Function]}
34
+ >
35
+ <Connect(Droppable)
36
+ direction="vertical"
37
+ droppableId="droppable"
38
+ ignoreContainerClipping={false}
39
+ isCombineEnabled={false}
40
+ isDropDisabled={false}
41
+ type="DEFAULT"
42
+ >
43
+ <Component />
44
+ </Connect(Droppable)>
45
+ </DragDropContext>
46
+ </div>
47
+ </div>
48
+ `;
@@ -0,0 +1,91 @@
1
+ import { shallow, mount } from 'enzyme';
2
+ import React from 'react';
3
+ import { RawAuthoring } from '../authoring';
4
+ import { Draggable } from 'react-beautiful-dnd';
5
+ import _ from 'lodash';
6
+
7
+ jest.mock('@pie-lib/editable-html', () => () => <div />);
8
+
9
+ describe('Rubric', () => {
10
+ let w;
11
+
12
+ const points = ['nothing right', 'a teeny bit right', 'mostly right', 'bingo'];
13
+ const sampleAnswers = [null, 'just right', 'not left', null];
14
+ const wrapper = (value, opts) => {
15
+ const props = {
16
+ classes: {},
17
+ onChange: jest.fn(),
18
+ className: 'className',
19
+ value: {
20
+ excludeZero: false,
21
+ points,
22
+ sampleAnswers,
23
+ ...value,
24
+ },
25
+ };
26
+ const fn = opts && opts.mount ? mount : shallow;
27
+ return fn(<RawAuthoring {...props} />, opts);
28
+ };
29
+
30
+ describe('render', () => {
31
+ it('snapshot', () => {
32
+ w = wrapper();
33
+ expect(w).toMatchSnapshot();
34
+ });
35
+
36
+ describe('draggable', () => {
37
+ it('renders correctly for excluded zeroes', () => {
38
+ let w = wrapper({ excludeZero: true }, { mount: true });
39
+ expect(w.find(Draggable).length).toEqual(3);
40
+ });
41
+ it('renders correctly for excluded zeroes', () => {
42
+ let w = wrapper({ excludeZero: false }, { mount: true });
43
+ expect(w.find(Draggable).length).toEqual(4);
44
+ });
45
+ });
46
+ });
47
+
48
+ describe('logic', () => {
49
+ describe('rendering', () => {});
50
+
51
+ describe('changeMaxPoints', () => {
52
+ const assertChangeMax = (points, excludeZero, expectedPoints, expectedSampleAnswers) => {
53
+ it(`${points} calls onChange with: ${expectedPoints} and ${expectedSampleAnswers}`, () => {
54
+ let w = wrapper({ excludeZero });
55
+ w.instance().changeMaxPoints(points);
56
+ expect(w.instance().props.onChange).toHaveBeenCalledWith({
57
+ excludeZero,
58
+ points: expectedPoints,
59
+ sampleAnswers: expectedSampleAnswers,
60
+ maxPoints: expectedPoints.length - 1,
61
+ });
62
+ });
63
+ };
64
+
65
+ assertChangeMax(1, false, _.takeRight(points, 2), _.takeRight(sampleAnswers, 2));
66
+ assertChangeMax(1, true, _.takeRight(points, 2), _.takeRight(sampleAnswers, 2));
67
+ assertChangeMax(2, true, _.takeRight(points, 3), _.takeRight(sampleAnswers, 3));
68
+ assertChangeMax(2, false, _.takeRight(points, 3), _.takeRight(sampleAnswers, 3));
69
+ assertChangeMax(5, false, ['', ''].concat(points), [null, null].concat(sampleAnswers));
70
+ });
71
+
72
+ describe('changeSampleResponse', () => {
73
+ const assertChangeSample = (index, clickedItem, excludeZero, expectedPoints, expectedSampleAnswers) => {
74
+ it(`Point ${index} calls onChange with: ${expectedPoints} and ${expectedSampleAnswers}`, () => {
75
+ let w = wrapper({ excludeZero });
76
+ w.instance().onPointMenuChange(index, clickedItem);
77
+ expect(w.instance().props.onChange).toHaveBeenCalledWith({
78
+ excludeZero,
79
+ points: expectedPoints,
80
+ sampleAnswers: expectedSampleAnswers,
81
+ });
82
+ });
83
+ };
84
+
85
+ assertChangeSample(0, 'sample', false, points, ['', 'just right', 'not left', null]);
86
+ assertChangeSample(3, 'sample', false, points, [null, 'just right', 'not left', '']);
87
+ assertChangeSample(1, 'sample', true, points, [null, null, 'not left', null]);
88
+ assertChangeSample(3, 'sample', true, points, [null, 'just right', 'not left', '']);
89
+ });
90
+ });
91
+ });