Disable send icon until valid message or file counts (#5214)
Этот коммит содержится в:
коммит произвёл
enahum
родитель
17d1ed114c
Коммит
0dae6d015a
@@ -76,7 +76,8 @@ export default class CreatePost extends React.Component {
|
|||||||
ctrlSend: PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'),
|
ctrlSend: PreferenceStore.getBool(Constants.Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'),
|
||||||
fullWidthTextBox: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.CHANNEL_DISPLAY_MODE, Preferences.CHANNEL_DISPLAY_MODE_DEFAULT) === Preferences.CHANNEL_DISPLAY_MODE_FULL_SCREEN,
|
fullWidthTextBox: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.CHANNEL_DISPLAY_MODE, Preferences.CHANNEL_DISPLAY_MODE_DEFAULT) === Preferences.CHANNEL_DISPLAY_MODE_FULL_SCREEN,
|
||||||
showTutorialTip: false,
|
showTutorialTip: false,
|
||||||
showPostDeletedModal: false
|
showPostDeletedModal: false,
|
||||||
|
enableSendButton: false
|
||||||
};
|
};
|
||||||
|
|
||||||
this.lastBlurAt = 0;
|
this.lastBlurAt = 0;
|
||||||
@@ -116,7 +117,7 @@ export default class CreatePost extends React.Component {
|
|||||||
const isReaction = REACTION_PATTERN.exec(post.message);
|
const isReaction = REACTION_PATTERN.exec(post.message);
|
||||||
if (post.message.indexOf('/') === 0) {
|
if (post.message.indexOf('/') === 0) {
|
||||||
PostStore.storeDraft(this.state.channelId, null);
|
PostStore.storeDraft(this.state.channelId, null);
|
||||||
this.setState({message: '', postError: null, fileInfos: []});
|
this.setState({message: '', postError: null, fileInfos: [], enableSendButton: false});
|
||||||
|
|
||||||
const args = {};
|
const args = {};
|
||||||
args.channel_id = this.state.channelId;
|
args.channel_id = this.state.channelId;
|
||||||
@@ -152,7 +153,14 @@ export default class CreatePost extends React.Component {
|
|||||||
this.sendMessage(post);
|
this.sendMessage(post);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setState({message: '', submitting: false, postError: null, fileInfos: [], serverError: null});
|
this.setState({
|
||||||
|
message: '',
|
||||||
|
submitting: false,
|
||||||
|
postError: null,
|
||||||
|
fileInfos: [],
|
||||||
|
serverError: null,
|
||||||
|
enableSendButton: false
|
||||||
|
});
|
||||||
|
|
||||||
const fasterThanHumanWillClick = 150;
|
const fasterThanHumanWillClick = 150;
|
||||||
const forceFocus = (Date.now() - this.lastBlurAt < fasterThanHumanWillClick);
|
const forceFocus = (Date.now() - this.lastBlurAt < fasterThanHumanWillClick);
|
||||||
@@ -224,7 +232,12 @@ export default class CreatePost extends React.Component {
|
|||||||
|
|
||||||
handleChange(e) {
|
handleChange(e) {
|
||||||
const message = e.target.value;
|
const message = e.target.value;
|
||||||
this.setState({message});
|
const enableSendButton = this.handleEnableSendButton(message, this.state.fileInfos);
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
message,
|
||||||
|
enableSendButton
|
||||||
|
});
|
||||||
|
|
||||||
const draft = PostStore.getCurrentDraft();
|
const draft = PostStore.getCurrentDraft();
|
||||||
draft.message = message;
|
draft.message = message;
|
||||||
@@ -264,7 +277,11 @@ export default class CreatePost extends React.Component {
|
|||||||
PostStore.storeDraft(channelId, draft);
|
PostStore.storeDraft(channelId, draft);
|
||||||
|
|
||||||
if (channelId === this.state.channelId) {
|
if (channelId === this.state.channelId) {
|
||||||
this.setState({uploadsInProgress: draft.uploadsInProgress, fileInfos: draft.fileInfos});
|
this.setState({
|
||||||
|
uploadsInProgress: draft.uploadsInProgress,
|
||||||
|
fileInfos: draft.fileInfos,
|
||||||
|
enableSendButton: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,18 +334,21 @@ export default class CreatePost extends React.Component {
|
|||||||
draft.fileInfos = fileInfos;
|
draft.fileInfos = fileInfos;
|
||||||
draft.uploadsInProgress = uploadsInProgress;
|
draft.uploadsInProgress = uploadsInProgress;
|
||||||
PostStore.storeCurrentDraft(draft);
|
PostStore.storeCurrentDraft(draft);
|
||||||
|
const enableSendButton = this.handleEnableSendButton(this.state.message, fileInfos);
|
||||||
|
|
||||||
this.setState({fileInfos, uploadsInProgress});
|
this.setState({fileInfos, uploadsInProgress, enableSendButton});
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
const tutorialStep = PreferenceStore.getInt(Preferences.TUTORIAL_STEP, UserStore.getCurrentId(), 999);
|
const tutorialStep = PreferenceStore.getInt(Preferences.TUTORIAL_STEP, UserStore.getCurrentId(), 999);
|
||||||
|
const enableSendButton = this.handleEnableSendButton(this.state.message, this.state.fileInfos);
|
||||||
|
|
||||||
// wait to load these since they may have changed since the component was constructed (particularly in the case of skipping the tutorial)
|
// wait to load these since they may have changed since the component was constructed (particularly in the case of skipping the tutorial)
|
||||||
this.setState({
|
this.setState({
|
||||||
ctrlSend: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'),
|
ctrlSend: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'send_on_ctrl_enter'),
|
||||||
fullWidthTextBox: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.CHANNEL_DISPLAY_MODE, Preferences.CHANNEL_DISPLAY_MODE_DEFAULT) === Preferences.CHANNEL_DISPLAY_MODE_FULL_SCREEN,
|
fullWidthTextBox: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.CHANNEL_DISPLAY_MODE, Preferences.CHANNEL_DISPLAY_MODE_DEFAULT) === Preferences.CHANNEL_DISPLAY_MODE_FULL_SCREEN,
|
||||||
showTutorialTip: tutorialStep === TutorialSteps.POST_POPOVER
|
showTutorialTip: tutorialStep === TutorialSteps.POST_POPOVER,
|
||||||
|
enableSendButton
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -479,6 +499,10 @@ export default class CreatePost extends React.Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleEnableSendButton(message, fileInfos) {
|
||||||
|
return message.trim().length !== 0 || fileInfos.length !== 0;
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let serverError = null;
|
let serverError = null;
|
||||||
if (this.state.serverError) {
|
if (this.state.serverError) {
|
||||||
@@ -521,6 +545,11 @@ export default class CreatePost extends React.Component {
|
|||||||
centerClass = 'center';
|
centerClass = 'center';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let sendButtonClass = 'send-button theme';
|
||||||
|
if (!this.state.enableSendButton) {
|
||||||
|
sendButtonClass += ' disabled';
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form
|
<form
|
||||||
id='create_post'
|
id='create_post'
|
||||||
@@ -556,7 +585,7 @@ export default class CreatePost extends React.Component {
|
|||||||
channelId=''
|
channelId=''
|
||||||
/>
|
/>
|
||||||
<a
|
<a
|
||||||
className='send-button theme'
|
className={sendButtonClass}
|
||||||
onClick={this.handleSubmit}
|
onClick={this.handleSubmit}
|
||||||
>
|
>
|
||||||
<i className='fa fa-paper-plane'/>
|
<i className='fa fa-paper-plane'/>
|
||||||
|
|||||||
@@ -405,6 +405,10 @@
|
|||||||
&:active {
|
&:active {
|
||||||
@include opacity(.75);
|
@include opacity(.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.custom-textarea {
|
.custom-textarea {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user