Fix upload file input being re-rendered needlessly
This commit is contained in:
		
							parent
							
								
									7d53ee73f3
								
							
						
					
					
						commit
						1a33e4042e
					
				
					 3 changed files with 9 additions and 6 deletions
				
			
		|  | @ -12,7 +12,8 @@ const UploadButton = React.createClass({ | |||
|     disabled: React.PropTypes.bool, | ||||
|     onSelectFile: React.PropTypes.func.isRequired, | ||||
|     style: React.PropTypes.object, | ||||
|     key: React.PropTypes.number | ||||
|     resetFileKey: React.PropTypes.number, | ||||
|     intl: React.PropTypes.object.isRequired | ||||
|   }, | ||||
| 
 | ||||
|   mixins: [PureRenderMixin], | ||||
|  | @ -32,12 +33,12 @@ const UploadButton = React.createClass({ | |||
|   }, | ||||
| 
 | ||||
|   render () { | ||||
|     const { intl } = this.props; | ||||
|     const { intl, resetFileKey, disabled } = this.props; | ||||
| 
 | ||||
|     return ( | ||||
|       <div style={this.props.style}> | ||||
|         <IconButton icon='photo' title={intl.formatMessage(messages.upload)} disabled={this.props.disabled} onClick={this.handleClick} size={24} /> | ||||
|         <input key={this.props.key} ref={this.setRef} type='file' multiple={false} onChange={this.handleChange} disabled={this.props.disabled} style={{ display: 'none' }} /> | ||||
|         <IconButton icon='photo' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} size={24} /> | ||||
|         <input key={resetFileKey} ref={this.setRef} type='file' multiple={false} onChange={this.handleChange} disabled={disabled} style={{ display: 'none' }} /> | ||||
|       </div> | ||||
|     ); | ||||
|   } | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import { uploadCompose } from '../../../actions/compose'; | |||
| 
 | ||||
| const mapStateToProps = state => ({ | ||||
|   disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')), | ||||
|   key: Math.floor((Math.random() * 0x10000)) | ||||
|   resetFileKey: state.getIn(['compose', 'resetFileKey']) | ||||
| }); | ||||
| 
 | ||||
| const mapDispatchToProps = dispatch => ({ | ||||
|  |  | |||
|  | @ -38,7 +38,8 @@ const initialState = Immutable.Map({ | |||
|   media_attachments: Immutable.List(), | ||||
|   suggestion_token: null, | ||||
|   suggestions: Immutable.List(), | ||||
|   me: null | ||||
|   me: null, | ||||
|   resetFileKey: Math.floor((Math.random() * 0x10000)) | ||||
| }); | ||||
| 
 | ||||
| function statusToTextMentions(state, status) { | ||||
|  | @ -65,6 +66,7 @@ function appendMedia(state, media) { | |||
|   return state.withMutations(map => { | ||||
|     map.update('media_attachments', list => list.push(media)); | ||||
|     map.set('is_uploading', false); | ||||
|     map.set('resetFileKey', Math.floor((Math.random() * 0x10000))); | ||||
|     map.update('text', oldText => `${oldText} ${media.get('text_url')}`.trim()); | ||||
|   }); | ||||
| }; | ||||
|  |  | |||
		Reference in a new issue