Merge pull request #1447 from matrix-org/luke/feature-flair-related-only
Restrict Flair in the timeline to related groups of the room
This commit is contained in:
commit
a400c03768
2 changed files with 37 additions and 1 deletions
|
@ -183,10 +183,12 @@ export default class Flair extends React.Component {
|
||||||
this.state = {
|
this.state = {
|
||||||
profiles: [],
|
profiles: [],
|
||||||
};
|
};
|
||||||
|
this.onRoomStateEvents = this.onRoomStateEvents.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
this._unmounted = true;
|
this._unmounted = true;
|
||||||
|
this.context.matrixClient.removeListener('RoomState.events', this.onRoomStateEvents);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
|
@ -194,6 +196,13 @@ export default class Flair extends React.Component {
|
||||||
if (UserSettingsStore.isFeatureEnabled('feature_groups') && groupSupport) {
|
if (UserSettingsStore.isFeatureEnabled('feature_groups') && groupSupport) {
|
||||||
this._generateAvatars();
|
this._generateAvatars();
|
||||||
}
|
}
|
||||||
|
this.context.matrixClient.on('RoomState.events', this.onRoomStateEvents);
|
||||||
|
}
|
||||||
|
|
||||||
|
onRoomStateEvents(event) {
|
||||||
|
if (event.getType() === 'm.room.related_groups' && groupSupport) {
|
||||||
|
this._generateAvatars();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async _getGroupProfiles(groups) {
|
async _getGroupProfiles(groups) {
|
||||||
|
@ -224,6 +233,21 @@ export default class Flair extends React.Component {
|
||||||
}
|
}
|
||||||
console.error('Could not get groups for user', this.props.userId, err);
|
console.error('Could not get groups for user', this.props.userId, err);
|
||||||
}
|
}
|
||||||
|
if (this.props.roomId && this.props.showRelated) {
|
||||||
|
const relatedGroupsEvent = this.context.matrixClient
|
||||||
|
.getRoom(this.props.roomId)
|
||||||
|
.currentState
|
||||||
|
.getStateEvents('m.room.related_groups', '');
|
||||||
|
const relatedGroups = relatedGroupsEvent ?
|
||||||
|
relatedGroupsEvent.getContent().groups || [] : [];
|
||||||
|
if (relatedGroups && relatedGroups.length > 0) {
|
||||||
|
groups = groups.filter((groupId) => {
|
||||||
|
return relatedGroups.includes(groupId);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
groups = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!groups || groups.length === 0) {
|
if (!groups || groups.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -250,6 +274,12 @@ export default class Flair extends React.Component {
|
||||||
|
|
||||||
Flair.propTypes = {
|
Flair.propTypes = {
|
||||||
userId: PropTypes.string,
|
userId: PropTypes.string,
|
||||||
|
|
||||||
|
// Whether to show only the flair associated with related groups of the given room,
|
||||||
|
// or all flair associated with a user.
|
||||||
|
showRelated: PropTypes.bool,
|
||||||
|
// The room that this flair will be displayed in. Optional. Only applies when showRelated = true.
|
||||||
|
roomId: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: We've decided that all components should follow this pattern, which means removing withMatrixClient and using
|
// TODO: We've decided that all components should follow this pattern, which means removing withMatrixClient and using
|
||||||
|
|
|
@ -33,7 +33,13 @@ export default function SenderProfile(props) {
|
||||||
return (
|
return (
|
||||||
<div className="mx_SenderProfile" dir="auto" onClick={props.onClick}>
|
<div className="mx_SenderProfile" dir="auto" onClick={props.onClick}>
|
||||||
<EmojiText className="mx_SenderProfile_name">{ name || '' }</EmojiText>
|
<EmojiText className="mx_SenderProfile_name">{ name || '' }</EmojiText>
|
||||||
{ props.enableFlair ? <Flair userId={mxEvent.getSender()} /> : null }
|
{ props.enableFlair ?
|
||||||
|
<Flair
|
||||||
|
userId={mxEvent.getSender()}
|
||||||
|
roomId={mxEvent.getRoomId()}
|
||||||
|
showRelated={true} />
|
||||||
|
: null
|
||||||
|
}
|
||||||
{ props.aux ? <EmojiText className="mx_SenderProfile_aux"> { props.aux }</EmojiText> : null }
|
{ props.aux ? <EmojiText className="mx_SenderProfile_aux"> { props.aux }</EmojiText> : null }
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue