Normalise cancel behaviour for room avatar

This normalises the behaviour of the "Cancel" button for the room profile so
that it _always_ restores the existing value for all of room name, topic, and
avatar, instead of performing a mix of restore and remove.

Fixes https://github.com/vector-im/element-web/issues/16375
pull/21833/head
J. Ryan Stinnett 2021-02-05 13:47:20 +00:00
parent bffce8689a
commit bccfdde4ac
1 changed files with 12 additions and 7 deletions

View File

@ -69,22 +69,23 @@ export default class RoomProfileSettings extends React.Component {
// clear file upload field so same file can be selected // clear file upload field so same file can be selected
this._avatarUpload.current.value = ""; this._avatarUpload.current.value = "";
this.setState({ this.setState({
avatarUrl: undefined, avatarUrl: null,
avatarFile: undefined, avatarFile: null,
enableProfileSave: true, enableProfileSave: true,
}); });
}; };
_clearProfile = async (e) => { _cancelProfileChanges = async (e) => {
e.stopPropagation(); e.stopPropagation();
e.preventDefault(); e.preventDefault();
if (!this.state.enableProfileSave) return; if (!this.state.enableProfileSave) return;
this._removeAvatar();
this.setState({ this.setState({
enableProfileSave: false, enableProfileSave: false,
displayName: this.state.originalDisplayName, displayName: this.state.originalDisplayName,
topic: this.state.originalTopic, topic: this.state.originalTopic,
avatarUrl: this.state.originalAvatarUrl,
avatarFile: null,
}); });
}; };
@ -112,7 +113,7 @@ export default class RoomProfileSettings extends React.Component {
newState.originalAvatarUrl = newState.avatarUrl; newState.originalAvatarUrl = newState.avatarUrl;
newState.avatarFile = null; newState.avatarFile = null;
} else if (this.state.originalAvatarUrl !== this.state.avatarUrl) { } else if (this.state.originalAvatarUrl !== this.state.avatarUrl) {
await client.sendStateEvent(this.props.roomId, 'm.room.avatar', {url: undefined}, ''); await client.sendStateEvent(this.props.roomId, 'm.room.avatar', {}, '');
} }
if (this.state.originalTopic !== this.state.topic) { if (this.state.originalTopic !== this.state.topic) {
@ -168,11 +169,15 @@ export default class RoomProfileSettings extends React.Component {
const AvatarSetting = sdk.getComponent('settings.AvatarSetting'); const AvatarSetting = sdk.getComponent('settings.AvatarSetting');
let profileSettingsButtons; let profileSettingsButtons;
if (this.state.canSetTopic || this.state.canSetName) { if (
this.state.canSetName ||
this.state.canSetTopic ||
this.state.canSetAvatar
) {
profileSettingsButtons = ( profileSettingsButtons = (
<div className="mx_ProfileSettings_buttons"> <div className="mx_ProfileSettings_buttons">
<AccessibleButton <AccessibleButton
onClick={this._clearProfile} onClick={this._cancelProfileChanges}
kind="link" kind="link"
disabled={!this.state.enableProfileSave} disabled={!this.state.enableProfileSave}
> >