diff options
Diffstat (limited to 'webapp')
-rw-r--r-- | webapp/components/admin_console/users_and_teams_settings.jsx | 24 | ||||
-rw-r--r-- | webapp/components/user_list_row.jsx | 13 | ||||
-rw-r--r-- | webapp/components/user_settings/user_settings_display.jsx | 154 | ||||
-rwxr-xr-x | webapp/i18n/en.json | 7 | ||||
-rw-r--r-- | webapp/utils/constants.jsx | 9 | ||||
-rw-r--r-- | webapp/utils/utils.jsx | 20 |
6 files changed, 50 insertions, 177 deletions
diff --git a/webapp/components/admin_console/users_and_teams_settings.jsx b/webapp/components/admin_console/users_and_teams_settings.jsx index 4535aec7b..9d33f0648 100644 --- a/webapp/components/admin_console/users_and_teams_settings.jsx +++ b/webapp/components/admin_console/users_and_teams_settings.jsx @@ -31,6 +31,7 @@ export default class UsersAndTeamsSettings extends AdminSettings { config.TeamSettings.MaxUsersPerTeam = this.parseIntNonZero(this.state.maxUsersPerTeam, Constants.DEFAULT_MAX_USERS_PER_TEAM); config.TeamSettings.RestrictCreationToDomains = this.state.restrictCreationToDomains; config.TeamSettings.RestrictDirectMessage = this.state.restrictDirectMessage; + config.TeamSettings.TeammateNameDisplay = this.state.teammateNameDisplay; config.TeamSettings.MaxChannelsPerTeam = this.parseIntNonZero(this.state.maxChannelsPerTeam, Constants.DEFAULT_MAX_CHANNELS_PER_TEAM); config.TeamSettings.MaxNotificationsPerChannel = this.parseIntNonZero(this.state.maxNotificationsPerChannel, Constants.DEFAULT_MAX_NOTIFICATIONS_PER_CHANNEL); @@ -44,6 +45,7 @@ export default class UsersAndTeamsSettings extends AdminSettings { maxUsersPerTeam: config.TeamSettings.MaxUsersPerTeam, restrictCreationToDomains: config.TeamSettings.RestrictCreationToDomains, restrictDirectMessage: config.TeamSettings.RestrictDirectMessage, + teammateNameDisplay: config.TeamSettings.TeammateNameDisplay, maxChannelsPerTeam: config.TeamSettings.MaxChannelsPerTeam, maxNotificationsPerChannel: config.TeamSettings.MaxNotificationsPerChannel }; @@ -188,6 +190,28 @@ export default class UsersAndTeamsSettings extends AdminSettings { value={this.state.restrictDirectMessage} onChange={this.handleChange} /> + <DropdownSetting + id='teammateNameDisplay' + values={[ + {value: Constants.TEAMMATE_NAME_DISPLAY.SHOW_USERNAME, text: Utils.localizeMessage('admin.team.showUsername', 'Show username')}, + {value: Constants.TEAMMATE_NAME_DISPLAY.SHOW_NICKNAME_FULLNAME, text: Utils.localizeMessage('admin.team.showNickname', 'Show nickname if one exists, otherwise show first and last name')}, + {value: Constants.TEAMMATE_NAME_DISPLAY.SHOW_FULLNAME, text: Utils.localizeMessage('admin.team.showFullname', 'Show first and last name (default)')} + ]} + label={ + <FormattedMessage + id='admin.team.teammateNameDisplay' + defaultMessage='Teammate Name Display:' + /> + } + helpText={ + <FormattedHTMLMessage + id='admin.team.teammateNameDisplayDesc' + defaultMessage="Set how to display users' names in posts and the Direct Messages list." + /> + } + value={this.state.teammateNameDisplay} + onChange={this.handleChange} + /> </SettingsGroup> ); } diff --git a/webapp/components/user_list_row.jsx b/webapp/components/user_list_row.jsx index ac26aace7..c8a4ac7ba 100644 --- a/webapp/components/user_list_row.jsx +++ b/webapp/components/user_list_row.jsx @@ -4,9 +4,7 @@ import ProfilePicture from 'components/profile_picture.jsx'; import UserStore from 'stores/user_store.jsx'; -import PreferenceStore from 'stores/preference_store.jsx'; -import Constants from 'utils/constants.jsx'; import * as Utils from 'utils/utils.jsx'; import {Client4} from 'mattermost-redux/client'; @@ -16,13 +14,10 @@ import React from 'react'; import {FormattedHTMLMessage} from 'react-intl'; export default function UserListRow({user, extraInfo, actions, actionProps, actionUserProps, userCount}) { - const nameFormat = PreferenceStore.get(Constants.Preferences.CATEGORY_DISPLAY_SETTINGS, 'name_format', ''); - - let name = user.username; - if (user.nickname && nameFormat === Constants.Preferences.DISPLAY_PREFER_NICKNAME) { - name = `${user.nickname} (@${user.username})`; - } else if ((user.first_name || user.last_name) && (nameFormat === Constants.Preferences.DISPLAY_PREFER_NICKNAME || nameFormat === Constants.Preferences.DISPLAY_PREFER_FULL_NAME)) { - name = `${Utils.getFullName(user)} (@${user.username})`; + const displayName = Utils.displayUsernameForUser(user); + let name = `${displayName} (@${user.username})`; + if (displayName === user.username) { + name = user.username; } let buttons = null; diff --git a/webapp/components/user_settings/user_settings_display.jsx b/webapp/components/user_settings/user_settings_display.jsx index 9311f6b45..a2132f3f7 100644 --- a/webapp/components/user_settings/user_settings_display.jsx +++ b/webapp/components/user_settings/user_settings_display.jsx @@ -21,7 +21,6 @@ import {FormattedMessage} from 'react-intl'; function getDisplayStateFromStores() { return { militaryTime: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, 'use_military_time', 'false'), - nameFormat: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, 'name_format', 'username'), selectedFont: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, 'selected_font', Constants.DEFAULT_FONT), channelDisplayMode: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.CHANNEL_DISPLAY_MODE, Preferences.CHANNEL_DISPLAY_MODE_DEFAULT), messageDisplay: PreferenceStore.get(Preferences.CATEGORY_DISPLAY_SETTINGS, Preferences.MESSAGE_DISPLAY, Preferences.MESSAGE_DISPLAY_DEFAULT), @@ -38,7 +37,6 @@ export default class UserSettingsDisplay extends React.Component { this.handleSubmit = this.handleSubmit.bind(this); this.handleClockRadio = this.handleClockRadio.bind(this); - this.handleNameRadio = this.handleNameRadio.bind(this); this.handleFont = this.handleFont.bind(this); this.updateSection = this.updateSection.bind(this); this.updateState = this.updateState.bind(this); @@ -60,12 +58,6 @@ export default class UserSettingsDisplay extends React.Component { name: 'use_military_time', value: this.state.militaryTime }; - const namePreference = { - user_id: userId, - category: Preferences.CATEGORY_DISPLAY_SETTINGS, - name: 'name_format', - value: this.state.nameFormat - }; const fontPreference = { user_id: userId, category: Preferences.CATEGORY_DISPLAY_SETTINGS, @@ -91,7 +83,7 @@ export default class UserSettingsDisplay extends React.Component { value: this.state.collapseDisplay }; - savePreferences([timePreference, namePreference, fontPreference, channelDisplayModePreference, messageDisplayPreference, collapseDisplayPreference], + savePreferences([timePreference, fontPreference, channelDisplayModePreference, messageDisplayPreference, collapseDisplayPreference], () => { this.updateSection(''); } @@ -102,10 +94,6 @@ export default class UserSettingsDisplay extends React.Component { this.setState({militaryTime}); } - handleNameRadio(nameFormat) { - this.setState({nameFormat}); - } - handleChannelDisplayModeRadio(channelDisplayMode) { this.setState({channelDisplayMode}); } @@ -251,7 +239,6 @@ export default class UserSettingsDisplay extends React.Component { render() { const serverError = this.state.serverError || null; let clockSection; - let nameFormatSection; let channelDisplayModeSection; let fontSection; let languagesSection; @@ -366,143 +353,6 @@ export default class UserSettingsDisplay extends React.Component { ); } - const showUsername = ( - <FormattedMessage - id='user.settings.display.showUsername' - defaultMessage='Show username (default)' - /> - ); - const showNickname = ( - <FormattedMessage - id='user.settings.display.showNickname' - defaultMessage='Show nickname if one exists, otherwise show first and last name' - /> - ); - const showFullName = ( - <FormattedMessage - id='user.settings.display.showFullname' - defaultMessage='Show first and last name' - /> - ); - if (this.props.activeSection === 'name_format') { - const nameFormat = [false, false, false]; - if (this.state.nameFormat === 'nickname_full_name') { - nameFormat[0] = true; - } else if (this.state.nameFormat === 'full_name') { - nameFormat[2] = true; - } else { - nameFormat[1] = true; - } - - const inputs = [ - <div key='userDisplayNameOptions'> - <div className='radio'> - <label> - <input - id='nameFormatUsername' - type='radio' - name='nameFormat' - checked={nameFormat[1]} - onChange={this.handleNameRadio.bind(this, 'username')} - /> - {showUsername} - </label> - <br/> - </div> - <div className='radio'> - <label> - <input - id='nameFormatNickname' - type='radio' - name='nameFormat' - checked={nameFormat[0]} - onChange={this.handleNameRadio.bind(this, 'nickname_full_name')} - /> - {showNickname} - </label> - <br/> - </div> - <div className='radio'> - <label> - <input - id='nameFormatFullName' - type='radio' - name='nameFormat' - checked={nameFormat[2]} - onChange={this.handleNameRadio.bind(this, 'full_name')} - /> - {showFullName} - </label> - <br/> - </div> - <div> - <br/> - <FormattedMessage - id='user.settings.display.nameOptsDesc' - defaultMessage="Set how to display other user's names in posts and the Direct Messages list." - /> - </div> - </div> - ]; - - nameFormatSection = ( - <SettingItemMax - title={ - <FormattedMessage - id='user.settings.display.teammateDisplay' - defaultMessage='Teammate Name Display' - /> - } - inputs={inputs} - submit={this.handleSubmit} - server_error={serverError} - updateSection={(e) => { - this.updateSection(''); - e.preventDefault(); - }} - /> - ); - } else { - let describe; - if (this.state.nameFormat === 'username') { - describe = ( - <FormattedMessage - id='user.settings.display.showUsername' - defaultMessage='Show username (default)' - /> - ); - } else if (this.state.nameFormat === 'full_name') { - describe = ( - <FormattedMessage - id='user.settings.display.showFullname' - defaultMessage='Show first and last name' - /> - ); - } else { - describe = ( - <FormattedMessage - id='user.settings.display.showNickname' - defaultMessage='Show nickname if one exists, otherwise show first and last name' - /> - ); - } - - nameFormatSection = ( - <SettingItemMin - title={ - <FormattedMessage - id='user.settings.display.teammateDisplay' - defaultMessage='Teammate Name Display' - /> - } - describe={describe} - updateSection={() => { - this.props.updateSection('name_format'); - }} - /> - ); - } - if (this.props.activeSection === Preferences.MESSAGE_DISPLAY) { const messageDisplay = [false, false]; if (this.state.messageDisplay === Preferences.MESSAGE_DISPLAY_CLEAN) { @@ -884,8 +734,6 @@ export default class UserSettingsDisplay extends React.Component { <div className='divider-dark'/> {clockSection} <div className='divider-dark'/> - {nameFormatSection} - <div className='divider-dark'/> {collapseSection} <div className='divider-dark'/> {messageDisplaySection} diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json index 878c6cdea..ea989ea65 100755 --- a/webapp/i18n/en.json +++ b/webapp/i18n/en.json @@ -875,8 +875,13 @@ "admin.team.siteNameDescription": "Name of service shown in login screens and UI.", "admin.team.siteNameExample": "E.g.: \"Mattermost\"", "admin.team.siteNameTitle": "Site Name:", + "admin.team.showFullname": "Show first and last name (default)", + "admin.team.showNickname": "Show nickname if one exists, otherwise show first and last name", + "admin.team.showUsername": "Show username", "admin.team.teamCreationDescription": "When false, only System Administrators can create teams.", "admin.team.teamCreationTitle": "Enable Team Creation: ", + "admin.team.teammateNameDisplay": "Teammate Name Display:", + "admin.team.teammateNameDisplayDesc": "Set how to display users' names in posts and the Direct Messages list.", "admin.team.upload": "Upload", "admin.team.uploadDesc": "Customize your user experience by adding a custom image to your login screen. Recommended maximum image size is less than 2 MB.", "admin.team.uploaded": "Uploaded!", @@ -2188,7 +2193,7 @@ "user.settings.display.showFullname": "Show first and last name", "user.settings.display.showNickname": "Show nickname if one exists, otherwise show first and last name", "user.settings.display.showUsername": "Show username (default)", - "user.settings.display.teammateDisplay": "Teammate Name Display", + "user.settings.display.teammateNameDisplay": "Teammate Name Display", "user.settings.display.theme.applyToAllTeams": "Apply new theme to all my teams", "user.settings.display.theme.customTheme": "Custom Theme", "user.settings.display.theme.describe": "Open to manage your theme", diff --git a/webapp/utils/constants.jsx b/webapp/utils/constants.jsx index b111a9900..212eedda4 100644 --- a/webapp/utils/constants.jsx +++ b/webapp/utils/constants.jsx @@ -37,8 +37,6 @@ export const Preferences = { CATEGORY_DIRECT_CHANNEL_SHOW: 'direct_channel_show', CATEGORY_GROUP_CHANNEL_SHOW: 'group_channel_show', CATEGORY_DISPLAY_SETTINGS: 'display_settings', - DISPLAY_PREFER_NICKNAME: 'nickname_full_name', - DISPLAY_PREFER_FULL_NAME: 'full_name', CATEGORY_ADVANCED_SETTINGS: 'advanced_settings', TUTORIAL_STEP: 'tutorial_step', CHANNEL_DISPLAY_MODE: 'channel_display_mode', @@ -970,7 +968,12 @@ export const Constants = { TEST_ID_COUNT: 10, CENTER: 'center', RHS: 'rhs', - RHS_ROOT: 'rhsroot' + RHS_ROOT: 'rhsroot', + TEAMMATE_NAME_DISPLAY: { + SHOW_USERNAME: 'username', + SHOW_NICKNAME_FULLNAME: 'nickname_full_name', + SHOW_FULLNAME: 'full_name' + } }; export default Constants; diff --git a/webapp/utils/utils.jsx b/webapp/utils/utils.jsx index f35e8cd0f..16edbecdc 100644 --- a/webapp/utils/utils.jsx +++ b/webapp/utils/utils.jsx @@ -1015,21 +1015,19 @@ export function displayUsername(userId) { } export function displayUsernameForUser(user) { - const nameFormat = PreferenceStore.get(Constants.Preferences.CATEGORY_DISPLAY_SETTINGS, 'name_format', 'false'); - - let username = ''; if (user) { - if (nameFormat === Constants.Preferences.DISPLAY_PREFER_NICKNAME) { - username = user.nickname || getFullName(user); - } else if (nameFormat === Constants.Preferences.DISPLAY_PREFER_FULL_NAME) { - username = getFullName(user); - } - if (!username.trim().length) { - username = user.username; + const nameFormat = global.window.mm_config.TeammateNameDisplay; + let name = user.username; + if (nameFormat === Constants.TEAMMATE_NAME_DISPLAY.SHOW_NICKNAME_FULLNAME && user.nickname && user.nickname !== '') { + name = user.nickname; + } else if ((user.first_name || user.last_name) && (nameFormat === Constants.TEAMMATE_NAME_DISPLAY.SHOW_NICKNAME_FULLNAME || nameFormat === Constants.TEAMMATE_NAME_DISPLAY.SHOW_FULLNAME)) { + name = getFullName(user); } + + return name; } - return username; + return null; } // Converts a file size in bytes into a human-readable string of the form '123MB'. |