diff --git a/src/Common.js b/src/Common.js index 5cf6bbf..647ec45 100644 --- a/src/Common.js +++ b/src/Common.js @@ -283,7 +283,7 @@ export class SafeTextarea extends Component { }; this.on_change_bound = this.on_change.bind(this); this.on_keydown_bound = this.on_keydown.bind(this); - this.clear = this.clear.bind(this); + this.clear_and_then = this.clear_and_then.bind(this); this.area_ref = React.createRef(); this.change_callback = props.on_change || (() => {}); this.submit_callback = props.on_submit || (() => {}); @@ -311,6 +311,7 @@ export class SafeTextarea extends Component { }); this.change_callback(event.target.value); } + on_keydown(event) { if (event.key === 'Enter' && event.ctrlKey && !event.altKey) { event.preventDefault(); @@ -318,20 +319,26 @@ export class SafeTextarea extends Component { } } - clear() { - this.setState({ - text: '', - }); + clear_and_then(callback = null) { + this.setState( + { + text: '', + }, + callback, + ); } + set(text) { this.change_callback(text); this.setState({ text: text, }); } + get() { return this.state.text; } + focus() { this.area_ref.current.focus(); } diff --git a/src/UserAction.js b/src/UserAction.js index 154807f..451901f 100644 --- a/src/UserAction.js +++ b/src/UserAction.js @@ -425,13 +425,16 @@ export class ReplyForm extends Component { save_attentions(); } - this.setState({ - loading_status: 'done', - text: '', - preview: false, - }); - this.area_ref.current.clear(); - this.props.on_complete(); + this.setState( + { + loading_status: 'done', + text: '', + preview: false, + }, + () => { + this.area_ref.current.clear_and_then(this.props.on_complete); + }, + ); }) .catch((e) => { console.error(e); @@ -602,15 +605,18 @@ export class PostForm extends Component { throw new Error(json.msg); } - this.setState({ - loading_status: 'done', - text: '', - preview: false, - }); - this.area_ref.current.clear(); - this.props.on_complete(); window.CW_BACKUP = ''; window.POLL_BACKUP = null; + this.setState( + { + loading_status: 'done', + text: '', + preview: false, + }, + () => { + this.area_ref.current.clear_and_then(this.props.on_complete); + }, + ); }) .catch((e) => { console.error(e);