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

Port a99179d31f and 09147186b7
to glitch-soc
shrike
Thibaut Girka 2018-08-18 20:53:46 +02:00 committed by ThibG
parent 484b9314e3
commit 432f6b88b0
2 changed files with 27 additions and 1 deletions

View File

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

View File

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