diff options
Diffstat (limited to 'web/react')
-rw-r--r-- | web/react/components/admin_console/ldap_settings.jsx | 6 | ||||
-rw-r--r-- | web/react/components/admin_console/license_settings.jsx | 53 | ||||
-rw-r--r-- | web/react/components/file_attachment.jsx | 2 | ||||
-rw-r--r-- | web/react/components/post.jsx | 6 | ||||
-rw-r--r-- | web/react/components/post_body.jsx | 3 | ||||
-rw-r--r-- | web/react/components/posts_view.jsx | 1 | ||||
-rw-r--r-- | web/react/components/posts_view_container.jsx | 10 | ||||
-rw-r--r-- | web/react/components/search_results_item.jsx | 1 | ||||
-rw-r--r-- | web/react/components/view_image_popover_bar.jsx | 1 | ||||
-rw-r--r-- | web/react/stores/admin_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/analytics_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/channel_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/file_store.jsx | 7 | ||||
-rw-r--r-- | web/react/stores/modal_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/post_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/search_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/suggestion_store.jsx | 7 | ||||
-rw-r--r-- | web/react/stores/team_store.jsx | 4 | ||||
-rw-r--r-- | web/react/stores/user_store.jsx | 4 |
19 files changed, 98 insertions, 31 deletions
diff --git a/web/react/components/admin_console/ldap_settings.jsx b/web/react/components/admin_console/ldap_settings.jsx index 535c264dd..4cd19c886 100644 --- a/web/react/components/admin_console/ldap_settings.jsx +++ b/web/react/components/admin_console/ldap_settings.jsx @@ -20,7 +20,7 @@ var holders = defineMessages({ }, baseEx: { id: 'admin.ldap.baseEx', - defaultMessage: 'Ex "dc=mydomain,dc=com"' + defaultMessage: 'Ex "ou=Unit Name,dc=corp,dc=example,dc=com"' }, firstnameAttrEx: { id: 'admin.ldap.firstnameAttrEx', @@ -32,7 +32,7 @@ var holders = defineMessages({ }, emailAttrEx: { id: 'admin.ldap.emailAttrEx', - defaultMessage: 'Ex "mail"' + defaultMessage: 'Ex "mail" or "userPrincipalName"' }, usernameAttrEx: { id: 'admin.ldap.usernameAttrEx', @@ -581,4 +581,4 @@ LdapSettings.propTypes = { config: React.PropTypes.object }; -export default injectIntl(LdapSettings);
\ No newline at end of file +export default injectIntl(LdapSettings); diff --git a/web/react/components/admin_console/license_settings.jsx b/web/react/components/admin_console/license_settings.jsx index d4dfa13f2..9d2ec8030 100644 --- a/web/react/components/admin_console/license_settings.jsx +++ b/web/react/components/admin_console/license_settings.jsx @@ -27,6 +27,7 @@ class LicenseSettings extends React.Component { this.state = { fileSelected: false, + fileName: null, serverError: null }; } @@ -34,7 +35,7 @@ class LicenseSettings extends React.Component { handleChange() { const element = $(ReactDOM.findDOMNode(this.refs.fileInput)); if (element.prop('files').length > 0) { - this.setState({fileSelected: true}); + this.setState({fileSelected: true, fileName: element.prop('files')[0].name}); } } @@ -56,13 +57,13 @@ class LicenseSettings extends React.Component { () => { Utils.clearFileInput(element[0]); $('#upload-button').button('reset'); - this.setState({serverError: null}); + this.setState({fileSelected: false, fileName: null, serverError: null}); window.location.reload(true); }, (error) => { Utils.clearFileInput(element[0]); $('#upload-button').button('reset'); - this.setState({serverError: error.message}); + this.setState({fileSelected: false, fileName: null, serverError: error.message}); } ); } @@ -75,12 +76,12 @@ class LicenseSettings extends React.Component { Client.removeLicenseFile( () => { $('#remove-button').button('reset'); - this.setState({serverError: null}); + this.setState({fileSelected: false, fileName: null, serverError: null}); window.location.reload(true); }, (error) => { $('#remove-button').button('reset'); - this.setState({serverError: error.message}); + this.setState({fileSelected: false, fileName: null, serverError: error.message}); } ); } @@ -172,17 +173,36 @@ class LicenseSettings extends React.Component { /> ); + let fileName; + if (this.state.fileName) { + fileName = this.state.fileName; + } else { + fileName = ( + <FormattedMessage + id='admin.license.noFile' + defaultMessage='No file uploaded' + /> + ); + } + licenseKey = ( <div className='col-sm-8'> - <input - className='pull-left' - ref='fileInput' - type='file' - accept='.mattermost-license' - onChange={this.handleChange} - /> + <div className='file__upload'> + <button className='btn btn-default'> + <FormattedMessage + id='admin.license.choose' + defaultMessage='Choose File' + /> + </button> + <input + ref='fileInput' + type='file' + accept='.mattermost-license' + onChange={this.handleChange} + /> + </div> <button - className={btnClass + ' pull-left'} + className={btnClass} disabled={!this.state.fileSelected} onClick={this.handleSubmit} id='upload-button' @@ -193,11 +213,12 @@ class LicenseSettings extends React.Component { defaultMessage='Upload' /> </button> - <br/> - <br/> + <div className='help-text no-margin'> + {fileName} + </div> <br/> {serverError} - <p className='help-text'> + <p className='help-text no-margin'> <FormattedHTMLMessage id='admin.license.uploadDesc' defaultMessage='Upload a license key for Mattermost Enterprise Edition to upgrade this server. <a href="http://mattermost.com" target="_blank">Visit us online</a> to learn more about the benefits of Enterprise Edition or to purchase a key.' diff --git a/web/react/components/file_attachment.jsx b/web/react/components/file_attachment.jsx index c719c6c7d..2f6067b86 100644 --- a/web/react/components/file_attachment.jsx +++ b/web/react/components/file_attachment.jsx @@ -185,6 +185,7 @@ class FileAttachment extends React.Component { data-toggle='tooltip' title={this.props.intl.formatMessage(holders.download) + ' \"' + filenameString + '\"'} className='post-image__name' + target='_blank' > {trimmedFilename} </a> @@ -193,6 +194,7 @@ class FileAttachment extends React.Component { href={fileUrl} download={filenameString} className='post-image__download' + target='_blank' > <span className='fa fa-download' diff --git a/web/react/components/post.jsx b/web/react/components/post.jsx index 889d4311e..57e919e45 100644 --- a/web/react/components/post.jsx +++ b/web/react/components/post.jsx @@ -98,7 +98,7 @@ export default class Post extends React.Component { return true; } - if (nextProps.hasProfiles !== this.props.hasProfiles) { + if (!Utils.areObjectsEqual(nextProps.user, this.props.user)) { return true; } @@ -226,7 +226,6 @@ export default class Post extends React.Component { posts={posts} handleCommentClick={this.handleCommentClick} retryPost={this.retryPost} - hasProfiles={this.props.hasProfiles} /> </div> </div> @@ -246,6 +245,5 @@ Post.propTypes = { hideProfilePic: React.PropTypes.bool, isLastComment: React.PropTypes.bool, shouldHighlight: React.PropTypes.bool, - displayNameType: React.PropTypes.string, - hasProfiles: React.PropTypes.bool + displayNameType: React.PropTypes.string }; diff --git a/web/react/components/post_body.jsx b/web/react/components/post_body.jsx index 70cf86748..854cb095a 100644 --- a/web/react/components/post_body.jsx +++ b/web/react/components/post_body.jsx @@ -215,8 +215,7 @@ PostBody.propTypes = { post: React.PropTypes.object.isRequired, parentPost: React.PropTypes.object, retryPost: React.PropTypes.func.isRequired, - handleCommentClick: React.PropTypes.func.isRequired, - hasProfiles: React.PropTypes.bool + handleCommentClick: React.PropTypes.func.isRequired }; export default injectIntl(PostBody); diff --git a/web/react/components/posts_view.jsx b/web/react/components/posts_view.jsx index 9a1673483..c2c739e9a 100644 --- a/web/react/components/posts_view.jsx +++ b/web/react/components/posts_view.jsx @@ -250,7 +250,6 @@ export default class PostsView extends React.Component { shouldHighlight={shouldHighlight} onClick={() => EventHelpers.emitPostFocusEvent(post.id)} //eslint-disable-line no-loop-func displayNameType={this.state.displayNameType} - hasProfiles={profiles && Object.keys(profiles).length > 1} user={profile} /> ); diff --git a/web/react/components/posts_view_container.jsx b/web/react/components/posts_view_container.jsx index 92d658b55..976e03fab 100644 --- a/web/react/components/posts_view_container.jsx +++ b/web/react/components/posts_view_container.jsx @@ -149,11 +149,15 @@ export default class PostsViewContainer extends React.Component { } } shouldComponentUpdate(nextProps, nextState) { - if (Utils.areObjectsEqual(this.state, nextState)) { - return false; + if (!Utils.areObjectsEqual(this.state, nextState)) { + return true; } - return true; + if (!Utils.areObjectsEqual(this.props, nextProps)) { + return true; + } + + return false; } render() { const postLists = this.state.postLists; diff --git a/web/react/components/search_results_item.jsx b/web/react/components/search_results_item.jsx index 05292b7b3..5ab864b7c 100644 --- a/web/react/components/search_results_item.jsx +++ b/web/react/components/search_results_item.jsx @@ -123,6 +123,7 @@ export default class SearchResultsItem extends React.Component { </ul> <div className='search-item-snippet'> <span + onClick={TextFormatting.handleClick} dangerouslySetInnerHTML={{__html: TextFormatting.formatText(this.props.post.message, formattingOptions)}} /> </div> diff --git a/web/react/components/view_image_popover_bar.jsx b/web/react/components/view_image_popover_bar.jsx index 819df76d8..18be5a3c5 100644 --- a/web/react/components/view_image_popover_bar.jsx +++ b/web/react/components/view_image_popover_bar.jsx @@ -51,6 +51,7 @@ export default class ViewImagePopoverBar extends React.Component { href={this.props.fileURL} download={this.props.filename} className='text' + target='_blank' > <FormattedMessage id='view_image_popover.download' diff --git a/web/react/stores/admin_store.jsx b/web/react/stores/admin_store.jsx index eb3254cfe..5c911e94b 100644 --- a/web/react/stores/admin_store.jsx +++ b/web/react/stores/admin_store.jsx @@ -156,3 +156,7 @@ AdminStoreClass.dispatchToken = AppDispatcher.register((payload) => { }); export default AdminStore; + +if (window.mm_config.EnableDeveloper === 'true') { + window.AdminStore = AdminStore; +} diff --git a/web/react/stores/analytics_store.jsx b/web/react/stores/analytics_store.jsx index ec827f6d7..0ad989206 100644 --- a/web/react/stores/analytics_store.jsx +++ b/web/react/stores/analytics_store.jsx @@ -83,3 +83,7 @@ AnalyticsStore.dispatchToken = AppDispatcher.register((payload) => { }); export default AnalyticsStore; + +if (window.mm_config.EnableDeveloper === 'true') { + window.AnalyticsStore = AnalyticsStore; +} diff --git a/web/react/stores/channel_store.jsx b/web/react/stores/channel_store.jsx index 60cb10de7..eac24b071 100644 --- a/web/react/stores/channel_store.jsx +++ b/web/react/stores/channel_store.jsx @@ -350,3 +350,7 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => { }); export default ChannelStore; + +if (window.mm_config.EnableDeveloper === 'true') { + window.ChannelStore = ChannelStore; +} diff --git a/web/react/stores/file_store.jsx b/web/react/stores/file_store.jsx index 6d7e0f354..c1fd0ef74 100644 --- a/web/react/stores/file_store.jsx +++ b/web/react/stores/file_store.jsx @@ -57,4 +57,9 @@ class FileStore extends EventEmitter { } } -export default new FileStore(); +const instance = new FileStore(); +export default instance; + +if (window.mm_config.EnableDeveloper === 'true') { + window.FileStore = instance; +} diff --git a/web/react/stores/modal_store.jsx b/web/react/stores/modal_store.jsx index 5ea38030b..1819fffc0 100644 --- a/web/react/stores/modal_store.jsx +++ b/web/react/stores/modal_store.jsx @@ -45,3 +45,7 @@ class ModalStoreClass extends EventEmitter { const ModalStore = new ModalStoreClass(); export default ModalStore; + +if (window.mm_config.EnableDeveloper === 'true') { + window.ModalStore = ModalStore; +} diff --git a/web/react/stores/post_store.jsx b/web/react/stores/post_store.jsx index a6dfcd46f..5cc3f300d 100644 --- a/web/react/stores/post_store.jsx +++ b/web/react/stores/post_store.jsx @@ -608,3 +608,7 @@ function isPostListNull(pl) { return false; } + +if (window.mm_config.EnableDeveloper === 'true') { + window.PostStore = PostStore; +} diff --git a/web/react/stores/search_store.jsx b/web/react/stores/search_store.jsx index 549f355ef..96071665c 100644 --- a/web/react/stores/search_store.jsx +++ b/web/react/stores/search_store.jsx @@ -135,3 +135,7 @@ SearchStore.dispatchToken = AppDispatcher.register((payload) => { }); export default SearchStore; + +if (window.mm_config.EnableDeveloper === 'true') { + window.SearchStore = SearchStore; +} diff --git a/web/react/stores/suggestion_store.jsx b/web/react/stores/suggestion_store.jsx index efd2b76ed..487bae843 100644 --- a/web/react/stores/suggestion_store.jsx +++ b/web/react/stores/suggestion_store.jsx @@ -258,4 +258,9 @@ class SuggestionStore extends EventEmitter { } } -export default new SuggestionStore(); +const instance = new SuggestionStore(); +export default instance; + +if (window.mm_config.EnableDeveloper === 'true') { + window.SuggestionStore = instance; +} diff --git a/web/react/stores/team_store.jsx b/web/react/stores/team_store.jsx index 7a1a2ef42..493d6bc4d 100644 --- a/web/react/stores/team_store.jsx +++ b/web/react/stores/team_store.jsx @@ -126,3 +126,7 @@ TeamStore.dispatchToken = AppDispatcher.register((payload) => { }); export default TeamStore; + +if (window.mm_config.EnableDeveloper === 'true') { + window.TeamStore = TeamStore; +} diff --git a/web/react/stores/user_store.jsx b/web/react/stores/user_store.jsx index 75a87d424..9fcd2440e 100644 --- a/web/react/stores/user_store.jsx +++ b/web/react/stores/user_store.jsx @@ -325,3 +325,7 @@ UserStore.dispatchToken = AppDispatcher.register((payload) => { }); export {UserStore as default}; + +if (window.mm_config.EnableDeveloper === 'true') { + window.UserStore = UserStore; +} |