Focus CW field when enabling it, focus compose textarea when disabling it

Port a99179d31f and 09147186b7
to glitch-soc
master
Thibaut Girka 6 years ago committed by ThibG
parent 484b9314e3
commit 432f6b88b0
  1. 21
      app/javascript/flavours/glitch/features/composer/index.js
  2. 7
      app/javascript/flavours/glitch/features/composer/spoiler/index.js

@ -237,6 +237,13 @@ const handlers = {
this.textarea = textareaComponent.textarea; this.textarea = textareaComponent.textarea;
} }
}, },
// Sets a reference to the CW field.
handleRefSpoilerText (spoilerComponent) {
if (spoilerComponent) {
this.spoilerText = spoilerComponent.spoilerText;
}
}
}; };
// The component. // The component.
@ -249,6 +256,7 @@ class Composer extends React.Component {
// Instance variables. // Instance variables.
this.textarea = null; this.textarea = null;
this.spoilerText = null;
} }
// Tells our state the composer has been mounted. // Tells our state the composer has been mounted.
@ -277,6 +285,7 @@ class Composer extends React.Component {
componentDidUpdate (prevProps) { componentDidUpdate (prevProps) {
const { const {
textarea, textarea,
spoilerText,
} = this; } = this;
const { const {
focusDate, focusDate,
@ -308,6 +317,16 @@ class Composer extends React.Component {
// Refocuses the textarea after submitting. // Refocuses the textarea after submitting.
} else if (textarea && prevProps.isSubmitting && !isSubmitting) { } else if (textarea && prevProps.isSubmitting && !isSubmitting) {
textarea.focus(); textarea.focus();
} else if (this.props.spoiler !== prevProps.spoiler) {
if (this.props.spoiler) {
if (spoilerText) {
spoilerText.focus();
}
} else {
if (textarea) {
textarea.focus();
}
}
} }
} }
@ -319,6 +338,7 @@ class Composer extends React.Component {
handleSelect, handleSelect,
handleSubmit, handleSubmit,
handleRefTextarea, handleRefTextarea,
handleRefSpoilerText,
} = this.handlers; } = this.handlers;
const { const {
acceptContentTypes, acceptContentTypes,
@ -378,6 +398,7 @@ class Composer extends React.Component {
onChange={handleChangeSpoiler} onChange={handleChangeSpoiler}
onSubmit={handleSubmit} onSubmit={handleSubmit}
text={spoilerText} text={spoilerText}
ref={handleRefSpoilerText}
/> />
<ComposerTextarea <ComposerTextarea
advancedOptions={advancedOptions} advancedOptions={advancedOptions}

@ -33,6 +33,10 @@ const handlers = {
onSubmit(); onSubmit();
} }
}, },
handleRefSpoilerText (spoilerText) {
this.spoilerText = spoilerText;
},
}; };
// The component. // The component.
@ -46,7 +50,7 @@ export default class ComposerSpoiler extends React.PureComponent {
// Rendering. // Rendering.
render () { render () {
const { handleKeyDown } = this.handlers; const { handleKeyDown, handleRefSpoilerText } = this.handlers;
const { const {
hidden, hidden,
intl, intl,
@ -68,6 +72,7 @@ export default class ComposerSpoiler extends React.PureComponent {
placeholder={intl.formatMessage(messages.placeholder)} placeholder={intl.formatMessage(messages.placeholder)}
type='text' type='text'
value={text} value={text}
ref={handleRefSpoilerText}
/> />
</label> </label>
</div> </div>

Loading…
Cancel
Save