@@ -1632,6 +1652,8 @@
selectedContact: null,
muted: undefined,
access: null,
+ modeGiven: null,
+ modeWant: null,
auth: null,
anon: null,
contactList: [],
@@ -1689,6 +1711,8 @@
address: topic.name,
groupTopic: (topic.getType() === "grp"),
access: acs.getMode(),
+ modeGiven: acs.getGiven(),
+ modeWant: acs.getWant(),
auth: defacs.auth,
anon: defacs.anon
});
@@ -1740,25 +1764,64 @@
this.props.onChangePermissions(this.props.topic, checked ? "-P" : "+P");
},
- handlePermissionsChanged: function(perm) {
- if (this.state.showPermissionEditorFor === 'auth') {
- this.props.onTopicDescUpdate(this.props.topic, null, null, {auth: perm});
- } else if (this.state.showPermissionEditorFor === 'anon') {
- this.props.onTopicDescUpdate(this.props.topic, null, null, {anon: perm});
- } else if (this.state.showPermissionEditorFor === 'mode') {
- this.props.onChangePermissions(this.props.topic, perm);
+ handlePermissionsChanged: function(perm, uid) {
+ switch (this.state.showPermissionEditorFor) {
+ case 'auth':
+ this.props.onTopicDescUpdate(this.props.topic, null, null, {auth: perm});
+ break;
+ case 'anon':
+ this.props.onTopicDescUpdate(this.props.topic, null, null, {anon: perm});
+ break;
+ case 'mode':
+ case 'want':
+ this.props.onChangePermissions(this.props.topic, perm);
+ break;
+ case 'given':
+ this.props.onChangePermissions(this.props.topic, perm, uid);
+ break;
}
this.setState({showPermissionEditorFor: undefined});
},
handleLaunchPermissionsEditor: function(which) {
+ var toEdit, toCompare, toSkip, titleEdit, titleCompare;
+ switch (which) {
+ case 'mode':
+ toEdit = this.state.access;
+ break;
+ case 'want':
+ toEdit = this.state.modeWant;
+ toCompare = this.state.modeGiven;
+ toSkip ='O';
+ titleEdit = 'Requested';
+ titleCompare = 'Granted';
+ break;
+ case 'given':
+ toEdit = this.state.modeGiven;
+ toCompare = this.state.modeWant;
+ titleEdit = 'Granted';
+ titleCompare = 'Requested';
+ break;
+ case 'auth':
+ toEdit = this.state.auth;
+ toSkip = 'O';
+ break;
+ case 'anon':
+ toEdit = this.state.auth;
+ toSkip = 'O';
+ break;
+ default:
+ console.log("Unknown permission editing mode '" + which + "'");
+ break;
+ }
this.setState({
showPermissionEditorFor: which,
- editedPermissions: which === 'mode' ?
- this.state.access :
- which === 'auth' ? this.state.auth : this.state.anon,
- editedPermissionsSkipped: "O"
+ editedPermissions: toEdit,
+ immutablePermissions: toCompare,
+ editedPermissionsTitle: titleEdit,
+ immutablePermissionsTitle: titleCompare,
+ editedPermissionsSkipped: toSkip
});
},
@@ -1813,6 +1876,10 @@
this.state.showPermissionEditorFor ?
+ onClick={this.handleLaunchPermissionsEditor.bind(this, 'want')}>
{this.state.access}
@@ -2619,12 +2686,18 @@
}
},
- handleChangePermissions: function(topicName, want) {
+ handleChangePermissions: function(topicName, mode, uid) {
var topic = Tinode.getTopic(topicName);
if (topic) {
var am = topic.getAccessMode();
- am.updateWant(want);
- topic.setMeta({sub: {mode: am.getWant()}});
+ if (uid) {
+ am.updateGiven(mode);
+ mode = am.getGiven();
+ } else {
+ am.updateWant(mode);
+ mode = am.getWant();
+ }
+ topic.setMeta({sub: {user: uid, mode: mode}});
}
},