Skip to content

Commit 9767a0d

Browse files
authored
Merge pull request #8408 from michaelchadwick/remove-html-editor-render-modifier
Remove HtmlEditor render modifier
2 parents fe48275 + 04e333e commit 9767a0d

File tree

3 files changed

+36
-35
lines changed

3 files changed

+36
-35
lines changed

packages/ilios-common/.lint-todo

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
add|ember-template-lint|no-at-ember-render-modifiers|2|2|2|2|ad17d66e0fe1720bc8ddedc12dff3a105709765c|1731542400000|1762646400000|1793750400000|addon/components/html-editor.hbs
2-
add|ember-template-lint|no-at-ember-render-modifiers|3|2|3|2|d39abab22a3e75d93f69335da422e7ef73b36283|1731542400000|1762646400000|1793750400000|addon/components/html-editor.hbs
31
add|ember-template-lint|no-at-ember-render-modifiers|3|2|3|2|1fb6f249958ee245e6abc413681c9fe096120cef|1731542400000|1762646400000|1793750400000|addon/components/session-copy.hbs
42
add|ember-template-lint|no-at-ember-render-modifiers|4|2|4|2|856162ce473b112534763bb641aae7a4422d8e2e|1731542400000|1762646400000|1793750400000|addon/components/session-copy.hbs
53
add|ember-template-lint|no-at-ember-render-modifiers|3|2|3|2|23cd787c79c34a628dadb6e96dd4004d42eebb79|1731542400000|1762646400000|1793750400000|addon/components/session-offerings-list.hbs
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
<div
2-
{{did-insert (perform this.loadEditor) this.options}}
3-
{{did-update (perform this.loadEditor) this.options}}
4-
id={{this.editorId}}
5-
class="html-editor"
6-
data-test-html-editor
7-
data-test-load-finished={{this.loadFinished}}>
8-
</div>
1+
{{#if this.loadFroalaData.isResolved}}
2+
<div
3+
{{this.editorInserted this.options}}
4+
id={{this.editorId}}
5+
class="html-editor"
6+
data-test-html-editor
7+
data-test-load-finished={{this.loadFinished}}>
8+
</div>
9+
{{/if}}

packages/ilios-common/addon/components/html-editor.js

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import Component from '@glimmer/component';
22
import { service } from '@ember/service';
3-
import { tracked } from '@glimmer/tracking';
4-
import { restartableTask } from 'ember-concurrency';
3+
import { cached, tracked } from '@glimmer/tracking';
54
import { loadFroalaEditor } from 'ilios-common/utils/load-froala-editor';
65
import { guidFor } from '@ember/object/internals';
6+
import { modifier } from 'ember-modifier';
7+
import { TrackedAsyncData } from 'ember-async-data';
78

89
export default class HtmlEditorComponent extends Component {
910
@service intl;
10-
@tracked editor = null;
1111
@tracked editorId = null;
1212
@tracked loadFinished = false;
1313

14+
editor = null;
1415
defaultButtons = {
1516
moreText: {
1617
buttons: ['bold', 'italic', 'subscript', 'superscript', 'formatOL', 'formatUL', 'insertLink'],
@@ -27,6 +28,29 @@ export default class HtmlEditorComponent extends Component {
2728
this.editorId = guidFor(this);
2829
}
2930

31+
@cached
32+
get loadFroalaData() {
33+
return new TrackedAsyncData(loadFroalaEditor());
34+
}
35+
36+
editorInserted = modifier((element, [options]) => {
37+
if (!this.editor) {
38+
const { FroalaEditor } = this.loadFroalaData.value;
39+
const component = this;
40+
// getting the Froala instance inside its constructor callback
41+
// https://froala.com/wysiwyg-editor/examples/getHTML/
42+
this.editor = new FroalaEditor(element, options, function () {
43+
this.html.set(component.args.content);
44+
if (component.args.autoFocus) {
45+
this.events.focus();
46+
}
47+
component.loadFinished = true;
48+
});
49+
}
50+
51+
return true;
52+
});
53+
3054
get options() {
3155
return {
3256
key: 'Kb3A3pE2E2A1E4G4I4oCd2ZSb1XHi1Cb2a1KIWCWMJHXCLSwG1G1B2C1B1C7F6E1E4F4==',
@@ -73,26 +97,4 @@ export default class HtmlEditorComponent extends Component {
7397
this.editor = null;
7498
}
7599
}
76-
createEditor(element, options) {
77-
return new Promise((resolve) => {
78-
loadFroalaEditor().then(({ FroalaEditor }) => {
79-
new FroalaEditor(element, options, function () {
80-
resolve(this);
81-
});
82-
});
83-
});
84-
}
85-
86-
loadEditor = restartableTask(async (element, [options]) => {
87-
if (!this.editor) {
88-
this.editor = await this.createEditor(element, options);
89-
this.editor.html.set(this.args.content);
90-
if (this.args.autofocus) {
91-
this.editor.events.focus();
92-
}
93-
this.loadFinished = true;
94-
}
95-
96-
return true;
97-
});
98100
}

0 commit comments

Comments
 (0)