diff --git a/framework/core/js/src/common/components/TextEditor.js b/framework/core/js/src/common/components/TextEditor.js index 2360df133..249d60eb8 100644 --- a/framework/core/js/src/common/components/TextEditor.js +++ b/framework/core/js/src/common/components/TextEditor.js @@ -21,6 +21,7 @@ import LoadingIndicator from './LoadingIndicator'; * - `placeholder` * - `disabled` * - `preview` + * - `onTextEditorBuilt` */ export default class TextEditor extends Component { oninit(vnode) { @@ -78,6 +79,7 @@ export default class TextEditor extends Component { onbuild() { this.attrs.composer.editor = this.buildEditor(this.$('.TextEditor-editorContainer')[0]); + this.attrs.onTextEditorBuilt?.(); } onupdate(vnode) { diff --git a/framework/core/js/src/forum/components/Composer.js b/framework/core/js/src/forum/components/Composer.js index 94c6a1686..562ac0e0b 100644 --- a/framework/core/js/src/forum/components/Composer.js +++ b/framework/core/js/src/forum/components/Composer.js @@ -31,6 +31,8 @@ export default class Composer extends Component { // Store the initial position so that we can trigger animations correctly. this.prevPosition = this.state.position; + + this.textEditorBuilt = false; } view() { @@ -53,7 +55,9 @@ export default class Composer extends Component {
- {ComposerBody && } + {ComposerBody && ( + + )}
); @@ -62,6 +66,17 @@ export default class Composer extends Component { onupdate(vnode) { super.onupdate(vnode); + if (this.textEditorBuilt) { + this.updateContainer(); + } + } + + onTextEditorBuilt() { + this.updateContainer(); + this.textEditorBuilt = true; + } + + updateContainer() { if (this.state.position === this.prevPosition) { // Set the height of the Composer element and its contents on each redraw, // so that they do not lose it if their DOM elements are recreated. diff --git a/framework/core/js/src/forum/components/ComposerBody.tsx b/framework/core/js/src/forum/components/ComposerBody.tsx index 5789d7640..08fa6bdb4 100644 --- a/framework/core/js/src/forum/components/ComposerBody.tsx +++ b/framework/core/js/src/forum/components/ComposerBody.tsx @@ -17,6 +17,7 @@ export interface IComposerBodyAttrs extends ComponentAttrs { user: any; confirmExit: string; disabled: boolean; + onTextEditorBuilt?: Function | null; } /** @@ -63,6 +64,7 @@ export default abstract class ComposerBody diff --git a/framework/core/js/src/forum/components/DiscussionComposer.js b/framework/core/js/src/forum/components/DiscussionComposer.js index 42eb77aeb..632a3c137 100644 --- a/framework/core/js/src/forum/components/DiscussionComposer.js +++ b/framework/core/js/src/forum/components/DiscussionComposer.js @@ -15,6 +15,8 @@ import Stream from '../../common/utils/Stream'; * - `titlePlaceholder` */ export default class DiscussionComposer extends ComposerBody { + static focusOnSelector = () => '.DiscussionComposer-title'; + static initAttrs(attrs) { super.initAttrs(attrs); @@ -47,7 +49,7 @@ export default class DiscussionComposer extends ComposerBody { 'discussionTitle',