diff --git a/src/components/views/room_settings/RelatedGroupSettings.js b/src/components/views/room_settings/RelatedGroupSettings.js index 5b2810d837..e1fc7cd80d 100644 --- a/src/components/views/room_settings/RelatedGroupSettings.js +++ b/src/components/views/room_settings/RelatedGroupSettings.js @@ -19,6 +19,7 @@ import {MatrixEvent, MatrixClient} from 'matrix-js-sdk'; import sdk from '../../../index'; import { _t } from '../../../languageHandler'; import Modal from '../../../Modal'; +import isEqual from 'lodash/isEqual'; const GROUP_ID_REGEX = /\+\S+\:\S+/; @@ -43,13 +44,25 @@ module.exports = React.createClass({ getInitialState: function() { return { - newGroupsList: this.props.relatedGroupsEvent ? - (this.props.relatedGroupsEvent.getContent().groups || []) : [], + newGroupsList: this.getInitialGroupList(), newGroupId: null, }; }, + getInitialGroupList: function() { + return this.props.relatedGroupsEvent ? (this.props.relatedGroupsEvent.getContent().groups || []) : []; + }, + + needsSaving: function() { + const cli = this.context.matrixClient; + const room = cli.getRoom(this.props.roomId); + if (!room.currentState.maySendStateEvent('m.room.related_groups', cli.getUserId())) return false; + return isEqual(this.getInitialGroupList(), this.state.newGroupsList); + }, + saveSettings: function() { + if (!this.needsSaving()) return Promise.resolve(); + return this.context.matrixClient.sendStateEvent( this.props.roomId, 'm.room.related_groups', @@ -97,7 +110,7 @@ module.exports = React.createClass({ onGroupDeleted: function(index) { const newGroupsList = this.state.newGroupsList.slice(); - newGroupsList.splice(index, 1), + newGroupsList.splice(index, 1); this.setState({ newGroupsList }); },