Skip to content

Commit 6f5db76

Browse files
committed
fix(ebsr,extended-text-entry): render print view correctly on role switch PIE-216
1 parent 1d44abd commit 6f5db76

2 files changed

Lines changed: 53 additions & 48 deletions

File tree

packages/ebsr/src/print.js

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,30 @@ const log = debug('pie-element:ebsr:print');
2020

2121
const preparePrintModel = (model, opts) => {
2222
const instr = opts.role === 'instructor';
23-
24-
model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
25-
model.teacherInstructions =
26-
instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
27-
model.showTeacherInstructions = instr;
28-
model.alwaysShowCorrect = instr;
29-
model.mode = instr ? 'evaluate' : 'gather';
30-
31-
model.disabled = true;
32-
model.animationsDisabled = true;
33-
model.lockChoiceOrder = true;
34-
model.choicesLayout = model.choicesLayout || 'vertical';
35-
36-
const choices = cloneDeep(model.choices);
37-
38-
model.choices = choices.map((c) => {
39-
c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;
23+
const printModel = cloneDeep(model);
24+
25+
printModel.prompt = printModel.promptEnabled !== false ? printModel.prompt : undefined;
26+
printModel.teacherInstructions =
27+
instr && printModel.teacherInstructionsEnabled !== false ? printModel.teacherInstructions : undefined;
28+
printModel.showTeacherInstructions = instr;
29+
printModel.alwaysShowCorrect = instr;
30+
printModel.mode = instr ? 'evaluate' : 'gather';
31+
32+
printModel.disabled = true;
33+
printModel.animationsDisabled = true;
34+
printModel.lockChoiceOrder = true;
35+
printModel.choicesLayout = printModel.choicesLayout || 'vertical';
36+
37+
printModel.choices = (printModel.choices || []).map((c) => {
38+
c.rationale = instr && printModel.rationaleEnabled !== false ? c.rationale : undefined;
4039
c.hideTick = instr;
4140
c.feedback = undefined;
4241
return c;
4342
});
4443

45-
model.keyMode = model.choicePrefix || 'letters';
44+
printModel.keyMode = printModel.choicePrefix || 'letters';
4645

47-
return model;
46+
return printModel;
4847
};
4948

5049
class EbsrMC extends MultipleChoice {}
@@ -97,11 +96,7 @@ export default class Ebsr extends HTMLElement {
9796

9897
set model(m) {
9998
this._model = m;
100-
101-
customElements.whenDefined(MC_TAG_NAME).then(() => {
102-
this.setPartModel(this.partA, 'partA');
103-
this.setPartModel(this.partB, 'partB');
104-
});
99+
this._updateParts();
105100
}
106101

107102
set session(s) {
@@ -113,8 +108,15 @@ export default class Ebsr extends HTMLElement {
113108
});
114109
}
115110

111+
_updateParts() {
112+
customElements.whenDefined(MC_TAG_NAME).then(() => {
113+
this.setPartModel(this.partA, 'partA');
114+
this.setPartModel(this.partB, 'partB');
115+
});
116+
}
117+
116118
setPartModel(part, key) {
117-
if (this._model && this._model[key] && part) {
119+
if (this._model && this._model[key] && part && this._options) {
118120
let labels = {
119121
partA: undefined,
120122
partB: undefined,
@@ -155,6 +157,8 @@ export default class Ebsr extends HTMLElement {
155157

156158
set options(o) {
157159
this._options = o;
160+
// re-render parts so role changes (student/instructor) propagate to each part
161+
this._updateParts();
158162
}
159163

160164
setPartSession(part, key) {

packages/extended-text-entry/src/print.js

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { createRoot } from 'react-dom/client';
3-
import { debounce } from 'lodash-es';
3+
import { cloneDeep, debounce } from 'lodash-es';
44
import Main from './main';
55
import { renderMath } from '@pie-lib/math-rendering';
66

@@ -10,25 +10,26 @@ const log = debug('pie-element:extended-text-entry:print');
1010

1111
const preparePrintModel = (model, opts) => {
1212
const instr = opts.role === 'instructor';
13+
const printModel = cloneDeep(model);
1314

14-
model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
15-
model.teacherInstructions =
16-
instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
17-
model.showTeacherInstructions = instr;
18-
model.mode = instr ? 'evaluate' : model.mode;
15+
printModel.prompt = printModel.promptEnabled !== false ? printModel.prompt : undefined;
16+
printModel.teacherInstructions =
17+
instr && printModel.teacherInstructionsEnabled !== false ? printModel.teacherInstructions : undefined;
18+
printModel.showTeacherInstructions = instr;
19+
printModel.mode = instr ? 'evaluate' : printModel.mode;
1920

2021
const defaultDimensions = { height: 100, width: 500 };
2122

22-
model.dimensions = {
23+
printModel.dimensions = {
2324
...defaultDimensions,
24-
...model.dimensions,
25+
...printModel.dimensions,
2526
};
2627

27-
model.disabled = true;
28-
model.feedback = undefined;
29-
model.animationsDisabled = true;
28+
printModel.disabled = true;
29+
printModel.feedback = undefined;
30+
printModel.animationsDisabled = true;
3031

31-
return model;
32+
return printModel;
3233
};
3334

3435
export default class ExtendedTextEntryPrint extends HTMLElement {
@@ -40,19 +41,17 @@ export default class ExtendedTextEntryPrint extends HTMLElement {
4041
this._root = null;
4142
this._rerender = debounce(
4243
() => {
43-
if (this._model && this._session) {
44+
if (this._model && this._session && this._options) {
4445
const printModel = preparePrintModel(this._model, this._options);
4546

46-
const element =
47-
this._options &&
48-
React.createElement(Main, {
49-
model: printModel,
50-
session: {},
51-
onChange: () => {},
52-
onValueChange: () => {},
53-
onAnnotationsChange: () => {},
54-
onCommentChange: () => {},
55-
});
47+
const element = React.createElement(Main, {
48+
model: printModel,
49+
session: {},
50+
onChange: () => {},
51+
onValueChange: () => {},
52+
onAnnotationsChange: () => {},
53+
onCommentChange: () => {},
54+
});
5655

5756
if (!this._root) {
5857
this._root = createRoot(this);
@@ -72,6 +71,8 @@ export default class ExtendedTextEntryPrint extends HTMLElement {
7271
}
7372
set options(o) {
7473
this._options = o;
74+
// re-render so role changes (student/instructor) propagate
75+
this._rerender();
7576
}
7677

7778
set model(s) {

0 commit comments

Comments
 (0)