Skip to content

Commit e844b7a

Browse files
committed
UI to set Room Avatars
1 parent d66427d commit e844b7a

File tree

3 files changed

+39
-4
lines changed

3 files changed

+39
-4
lines changed

src/skins/vector/views/atoms/RoomAvatar.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,13 @@ module.exports = React.createClass({
4343
},
4444

4545
render: function() {
46+
var style = {
47+
'max-width': this.props.width,
48+
'max-height': this.props.height,
49+
};
4650
return (
4751
<img className="mx_RoomAvatar" src={this.state.imageUrl} onError={this.onError}
48-
width={this.props.width} height={this.props.height}
52+
style={style}
4953
/>
5054
);
5155
}

src/skins/vector/views/molecules/ChangeAvatar.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ limitations under the License.
1818

1919
var React = require('react');
2020

21+
var sdk = require('matrix-react-sdk')
2122
var ChangeAvatarController = require('matrix-react-sdk/lib/controllers/molecules/ChangeAvatar')
2223

2324
var Loader = require("react-loader");
@@ -28,6 +29,7 @@ module.exports = React.createClass({
2829
mixins: [ChangeAvatarController],
2930

3031
onFileSelected: function(ev) {
32+
this.avatarSet = true;
3133
this.setAvatarFromFile(ev.target.files[0]);
3234
},
3335

@@ -38,13 +40,23 @@ module.exports = React.createClass({
3840
},
3941

4042
render: function() {
43+
var RoomAvatar = sdk.getComponent('atoms.RoomAvatar');
44+
var avatarImg;
45+
// Having just set an avatar we just display that since it will take a little
46+
// time to propagate through to the RoomAvatar.
47+
if (this.props.room && !this.avatarSet) {
48+
avatarImg = <RoomAvatar room={this.props.room} width='320' height='240' resizeMethod='scale' />;
49+
} else {
50+
avatarImg = <img src={this.state.avatarUrl}/>;
51+
}
52+
4153
switch (this.state.phase) {
4254
case this.Phases.Display:
4355
case this.Phases.Error:
4456
return (
4557
<div>
4658
<div className="mx_Dialog_content">
47-
<img src={this.state.avatarUrl}/>
59+
{avatarImg}
4860
</div>
4961
<div className="mx_Dialog_content">
5062
Upload new:

src/skins/vector/views/molecules/RoomSettings.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ limitations under the License.
1818

1919
var React = require('react');
2020
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
21+
var sdk = require('matrix-react-sdk');
2122

2223
var RoomSettingsController = require('matrix-react-sdk/lib/controllers/molecules/RoomSettings')
2324

@@ -65,6 +66,8 @@ module.exports = React.createClass({
6566
},
6667

6768
render: function() {
69+
var ChangeAvatar = sdk.getComponent('molecules.ChangeAvatar');
70+
6871
var topic = this.props.room.currentState.getStateEvents('m.room.topic', '');
6972
if (topic) topic = topic.getContent().topic;
7073

@@ -76,6 +79,8 @@ module.exports = React.createClass({
7679

7780
var power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', '');
7881

82+
var events_levels = power_levels.events || {};
83+
7984
if (power_levels) {
8085
power_levels = power_levels.getContent();
8186

@@ -91,8 +96,7 @@ module.exports = React.createClass({
9196
if (power_levels.kick == undefined) kick_level = 50;
9297
if (power_levels.redact == undefined) redact_level = 50;
9398

94-
var user_levels = power_levels.users || [];
95-
var events_levels = power_levels.events || [];
99+
var user_levels = power_levels.users || {};
96100

97101
var user_id = MatrixClientPeg.get().credentials.userId;
98102

@@ -124,6 +128,20 @@ module.exports = React.createClass({
124128
var can_change_levels = false;
125129
}
126130

131+
var room_avatar_level = parseInt(power_levels.state_default || 0);
132+
if (events_levels['m.room.avatar'] !== undefined) {
133+
room_avatar_level = events_levels['m.room.avatar'];
134+
}
135+
var can_set_room_avatar = current_user_level >= room_avatar_level;
136+
137+
var change_avatar;
138+
if (can_set_room_avatar) {
139+
change_avatar = <div>
140+
<h3>Room Icon</h3>
141+
<ChangeAvatar room={this.props.room} />
142+
</div>;
143+
}
144+
127145
var banned = this.props.room.getMembersWithMemership("ban");
128146

129147
return (
@@ -207,6 +225,7 @@ module.exports = React.createClass({
207225
);
208226
})}
209227
</div>
228+
{change_avatar}
210229
</div>
211230
);
212231
}

0 commit comments

Comments
 (0)