diff --git a/.gitignore b/.gitignore index 6964989f1..da7dcee8d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,4 @@ /.eslintcache /.env /deploy.sh -/.vs/slnx.sqlite -/.vs/slnx.sqlite-journal +/.vs/ diff --git a/app/gabsocial/actions/compose.js b/app/gabsocial/actions/compose.js index 5a9de9051..0c9939bb0 100644 --- a/app/gabsocial/actions/compose.js +++ b/app/gabsocial/actions/compose.js @@ -73,7 +73,7 @@ export const ensureComposeIsVisible = (getState, routerHistory) => { } }; -export function changeCompose(text) { +export function changeCompose(text, caretPosition) { return { type: COMPOSE_CHANGE, text: text, diff --git a/app/gabsocial/components/autosuggest_textarea.js b/app/gabsocial/components/autosuggest_textarea.js index cae6116d4..a9fc1f6ad 100644 --- a/app/gabsocial/components/autosuggest_textarea.js +++ b/app/gabsocial/components/autosuggest_textarea.js @@ -74,7 +74,6 @@ export default class AutosuggestTextarea extends ImmutablePureComponent { this.setState({ lastToken: null }); this.props.onSuggestionsClearRequested(); } - this.props.onChange(e); } diff --git a/app/gabsocial/features/compose/components/compose_form.js b/app/gabsocial/features/compose/components/compose_form.js index 8888c1a38..7e0e18b27 100644 --- a/app/gabsocial/features/compose/components/compose_form.js +++ b/app/gabsocial/features/compose/components/compose_form.js @@ -44,6 +44,7 @@ class ComposeForm extends ImmutablePureComponent { state = { composeFocused: false, + caretPosition: 0, } static contextTypes = { @@ -86,6 +87,9 @@ class ComposeForm extends ImmutablePureComponent { handleChange = (e) => { this.props.onChange(e.target.value); + this.setState({ + caretPosition: e.target.selectionStart, + }); } handleComposeFocus = () => { @@ -180,23 +184,25 @@ class ComposeForm extends ImmutablePureComponent { // - Replying to zero or one users, places the cursor at the end of the textbox. // - Replying to more than one user, selects any usernames past the first; // this provides a convenient shortcut to drop everyone else from the conversation. - //if (this.props.focusDate !== prevProps.focusDate) { - let selectionEnd, selectionStart; + let selectionEnd, selectionStart; + if (this.props.focusDate !== prevProps.focusDate) { if (this.props.preselectDate !== prevProps.preselectDate) { - selectionEnd = this.props.text.length; + selectionEnd = this.props.text.length; selectionStart = this.props.text.search(/\s/) + 1; - } else if (typeof this.props.caretPosition === 'number') { - selectionStart = this.props.caretPosition; - selectionEnd = this.props.caretPosition; - } else { - selectionEnd = this.props.text.length; - selectionStart = selectionEnd; + } else if (typeof this.state.caretPosition === 'number') { + selectionStart = this.state.caretPosition; + selectionEnd = this.state.caretPosition; } - this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd); this.autosuggestTextarea.textarea.focus(); - //} + } else { + if (this.props.preselectDate !== this.props.focusDate) { + selectionStart = selectionEnd = this.props.text.length + 1; + this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd); + this.autosuggestTextarea.textarea.focus(); + } + } } setAutosuggestTextarea = (c) => { diff --git a/app/gabsocial/reducers/compose.js b/app/gabsocial/reducers/compose.js index 930909a3b..d7a9e5613 100644 --- a/app/gabsocial/reducers/compose.js +++ b/app/gabsocial/reducers/compose.js @@ -237,7 +237,8 @@ export default function compose(state = initialState, action) { case COMPOSE_CHANGE: return state .set('text', action.text) - .set('idempotencyKey', uuid()); + .set('idempotencyKey', uuid()) + .set('focusDate', new Date()); case COMPOSE_COMPOSING_CHANGE: return state.set('is_composing', action.value); case COMPOSE_REPLY: