@digabi/exam-engine-core 22.2.0-alpha.3 → 22.2.0-alpha.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -26,8 +26,12 @@ interface Props {
26
26
  export default class RichTextAnswer extends React.PureComponent<Props> {
27
27
  static contextType: React.Context<CommonExamContext>;
28
28
  context: React.ContextType<typeof CommonExamContext>;
29
+ private editorRef;
30
+ private lastHTML;
31
+ constructor(props: Props);
29
32
  handleSaveError: (err: ErrorResponse) => void;
30
33
  handleChange: (answer: Answer) => void;
34
+ componentDidUpdate(): void;
31
35
  render(): React.ReactNode;
32
36
  }
33
37
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAuB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAMzD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,oBAAoB,GAAG,+BAA+B,GAAG,0BAA0B,CAAA;IACxF,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,KAAK,CAAA;AAE7D,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACzC,cAAc,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;IACpE,MAAM,CAAC,WAAW,mCAAoB;IAC9B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;IAE5D,eAAe,QAAS,aAAa,KAAG,IAAI,CAa3C;IAED,YAAY,WAAY,MAAM,KAAG,IAAI,CAIpC;IAED,MAAM,IAAI,KAAK,CAAC,SAAS;CA0C1B"}
1
+ {"version":3,"file":"RichTextAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAuB,EAAE,MAAM,EAAwB,MAAM,kBAAkB,CAAA;AAM/E,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,oBAAoB,GAAG,+BAA+B,GAAG,0BAA0B,CAAA;IACxF,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,KAAK,CAAA;AAE7D,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACzC,cAAc,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;IACpE,MAAM,CAAC,WAAW,mCAAoB;IAC9B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;IAC5D,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,KAAK,EAAE,KAAK;IAMxB,eAAe,QAAS,aAAa,KAAG,IAAI,CAa3C;IAED,YAAY,WAAY,MAAM,KAAG,IAAI,CAKpC;IAED,kBAAkB,IAAI,IAAI;IAY1B,MAAM,IAAI,KAAK,CAAC,SAAS;CA2C1B"}
@@ -7,8 +7,8 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
7
  import { faExpandAlt } from '@fortawesome/free-solid-svg-icons';
8
8
  import { useExamTranslation } from '../../i18n';
9
9
  class RichTextAnswer extends React.PureComponent {
10
- constructor() {
11
- super(...arguments);
10
+ constructor(props) {
11
+ super(props);
12
12
  this.handleSaveError = (err) => {
13
13
  const key = (() => {
14
14
  switch (_.get(err, 'response.status')) {
@@ -24,13 +24,27 @@ class RichTextAnswer extends React.PureComponent {
24
24
  };
25
25
  this.handleChange = (answer) => {
26
26
  const { onChange } = this.props;
27
+ this.lastHTML = answer.answerHtml;
27
28
  onChange(answer.answerHtml, answer.answerText);
28
29
  };
30
+ this.editorRef = React.createRef();
31
+ this.lastHTML = this.props.answer ? this.props.answer.value : '';
32
+ }
33
+ componentDidUpdate() {
34
+ /**
35
+ * Don't update element unless value has changed from last known value to prevent cursor jumping
36
+ * This implementation is _primarily_ intended to be used by AnswerToolbar's answerHistory, which
37
+ * will update the value of `answer` without the user making edits to the rich-text-editor input field
38
+ * */
39
+ if (this.editorRef.current && this.props.answer && this.props.answer.value !== this.lastHTML) {
40
+ this.lastHTML = this.props.answer.value;
41
+ this.editorRef.current.setValue(this.props.answer.value);
42
+ }
29
43
  }
30
44
  render() {
31
45
  const { questionId, className, labelledBy, answer, lang, invalid, saveScreenshot } = this.props;
32
46
  return (React.createElement(ExpandQuestionContext.Consumer, null, ({ expanded, toggleWriterMode }) => (React.createElement(React.Fragment, null,
33
- React.createElement(RichTextEditor, { baseUrl: '', initialValue: answer === null || answer === void 0 ? void 0 : answer.value, language: this.context.language.slice(0, 2).toUpperCase(), onValueChange: this.handleChange, getPasteSource: (file) => saveScreenshot(file).catch((err) => {
47
+ React.createElement(RichTextEditor, { ref: this.editorRef, baseUrl: '', initialValue: answer === null || answer === void 0 ? void 0 : answer.value, language: this.context.language.slice(0, 2).toUpperCase(), onValueChange: this.handleChange, getPasteSource: (file) => saveScreenshot(file).catch((err) => {
34
48
  this.handleSaveError(err);
35
49
  throw err; // Rethrow error so rich-text-editor can handle it.
36
50
  }), textAreaProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RichTextAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"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"}