mirror of https://github.com/vector-im/riot-web
				
				
				
			Merge pull request #3788 from matrix-org/t3chguy/user_info_non-historical
User Info fetch latest RoomMember instead of showing historical datapull/21833/head
						commit
						6a1f4c41ce
					
				| 
						 | 
					@ -32,7 +32,7 @@ import SdkConfig from '../../../SdkConfig';
 | 
				
			||||||
import SettingsStore from "../../../settings/SettingsStore";
 | 
					import SettingsStore from "../../../settings/SettingsStore";
 | 
				
			||||||
import {EventTimeline} from "matrix-js-sdk";
 | 
					import {EventTimeline} from "matrix-js-sdk";
 | 
				
			||||||
import AutoHideScrollbar from "../../structures/AutoHideScrollbar";
 | 
					import AutoHideScrollbar from "../../structures/AutoHideScrollbar";
 | 
				
			||||||
import * as RoomViewStore from "../../../stores/RoomViewStore";
 | 
					import RoomViewStore from "../../../stores/RoomViewStore";
 | 
				
			||||||
import MultiInviter from "../../../utils/MultiInviter";
 | 
					import MultiInviter from "../../../utils/MultiInviter";
 | 
				
			||||||
import GroupStore from "../../../stores/GroupStore";
 | 
					import GroupStore from "../../../stores/GroupStore";
 | 
				
			||||||
import MatrixClientPeg from "../../../MatrixClientPeg";
 | 
					import MatrixClientPeg from "../../../MatrixClientPeg";
 | 
				
			||||||
| 
						 | 
					@ -1000,6 +1000,8 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load room if we are given a room id and memoize it
 | 
					    // Load room if we are given a room id and memoize it
 | 
				
			||||||
    const room = useMemo(() => roomId ? cli.getRoom(roomId) : null, [cli, roomId]);
 | 
					    const room = useMemo(() => roomId ? cli.getRoom(roomId) : null, [cli, roomId]);
 | 
				
			||||||
 | 
					    // fetch latest room member if we have a room, so we don't show historical information
 | 
				
			||||||
 | 
					    const member = useMemo(() => room ? room.getMember(user.userId) : user, [room, user]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // only display the devices list if our client supports E2E
 | 
					    // only display the devices list if our client supports E2E
 | 
				
			||||||
    const _enableDevices = cli.isCryptoEnabled();
 | 
					    const _enableDevices = cli.isCryptoEnabled();
 | 
				
			||||||
| 
						 | 
					@ -1031,7 +1033,7 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
        setPendingUpdateCount(pendingUpdateCount - 1);
 | 
					        setPendingUpdateCount(pendingUpdateCount - 1);
 | 
				
			||||||
    }, [pendingUpdateCount]);
 | 
					    }, [pendingUpdateCount]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const roomPermissions = useRoomPermissions(cli, room, user);
 | 
					    const roomPermissions = useRoomPermissions(cli, room, member);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const onSynapseDeactivate = useCallback(async () => {
 | 
					    const onSynapseDeactivate = useCallback(async () => {
 | 
				
			||||||
        const QuestionDialog = sdk.getComponent('views.dialogs.QuestionDialog');
 | 
					        const QuestionDialog = sdk.getComponent('views.dialogs.QuestionDialog');
 | 
				
			||||||
| 
						 | 
					@ -1064,7 +1066,6 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
    }, [cli, user.userId]);
 | 
					    }, [cli, user.userId]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const onMemberAvatarClick = useCallback(() => {
 | 
					    const onMemberAvatarClick = useCallback(() => {
 | 
				
			||||||
        const member = user;
 | 
					 | 
				
			||||||
        const avatarUrl = member.getMxcAvatarUrl ? member.getMxcAvatarUrl() : member.avatarUrl;
 | 
					        const avatarUrl = member.getMxcAvatarUrl ? member.getMxcAvatarUrl() : member.avatarUrl;
 | 
				
			||||||
        if (!avatarUrl) return;
 | 
					        if (!avatarUrl) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1076,7 +1077,7 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Modal.createDialog(ImageView, params, "mx_Dialog_lightbox");
 | 
					        Modal.createDialog(ImageView, params, "mx_Dialog_lightbox");
 | 
				
			||||||
    }, [cli, user]);
 | 
					    }, [cli, member]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let synapseDeactivateButton;
 | 
					    let synapseDeactivateButton;
 | 
				
			||||||
    let spinner;
 | 
					    let spinner;
 | 
				
			||||||
| 
						 | 
					@ -1093,11 +1094,11 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let adminToolsContainer;
 | 
					    let adminToolsContainer;
 | 
				
			||||||
    if (room && user.roomId) {
 | 
					    if (room && member.roomId) {
 | 
				
			||||||
        adminToolsContainer = (
 | 
					        adminToolsContainer = (
 | 
				
			||||||
            <RoomAdminToolsContainer
 | 
					            <RoomAdminToolsContainer
 | 
				
			||||||
                powerLevels={powerLevels}
 | 
					                powerLevels={powerLevels}
 | 
				
			||||||
                member={user}
 | 
					                member={member}
 | 
				
			||||||
                room={room}
 | 
					                room={room}
 | 
				
			||||||
                startUpdating={startUpdating}
 | 
					                startUpdating={startUpdating}
 | 
				
			||||||
                stopUpdating={stopUpdating}>
 | 
					                stopUpdating={stopUpdating}>
 | 
				
			||||||
| 
						 | 
					@ -1127,20 +1128,20 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
        spinner = <Loader imgClassName="mx_ContextualMenu_spinner" />;
 | 
					        spinner = <Loader imgClassName="mx_ContextualMenu_spinner" />;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const displayName = user.name || user.displayname;
 | 
					    const displayName = member.name || member.displayname;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let presenceState;
 | 
					    let presenceState;
 | 
				
			||||||
    let presenceLastActiveAgo;
 | 
					    let presenceLastActiveAgo;
 | 
				
			||||||
    let presenceCurrentlyActive;
 | 
					    let presenceCurrentlyActive;
 | 
				
			||||||
    let statusMessage;
 | 
					    let statusMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (user instanceof RoomMember && user.user) {
 | 
					    if (member instanceof RoomMember && member.user) {
 | 
				
			||||||
        presenceState = user.user.presence;
 | 
					        presenceState = member.user.presence;
 | 
				
			||||||
        presenceLastActiveAgo = user.user.lastActiveAgo;
 | 
					        presenceLastActiveAgo = member.user.lastActiveAgo;
 | 
				
			||||||
        presenceCurrentlyActive = user.user.currentlyActive;
 | 
					        presenceCurrentlyActive = member.user.currentlyActive;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (SettingsStore.isFeatureEnabled("feature_custom_status")) {
 | 
					        if (SettingsStore.isFeatureEnabled("feature_custom_status")) {
 | 
				
			||||||
            statusMessage = user.user._unstable_statusMessage;
 | 
					            statusMessage = member.user._unstable_statusMessage;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1170,13 +1171,13 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
                <div>
 | 
					                <div>
 | 
				
			||||||
                    <MemberAvatar
 | 
					                    <MemberAvatar
 | 
				
			||||||
                        member={user}
 | 
					                        member={member}
 | 
				
			||||||
                        width={2 * 0.3 * window.innerHeight} // 2x@30vh
 | 
					                        width={2 * 0.3 * window.innerHeight} // 2x@30vh
 | 
				
			||||||
                        height={2 * 0.3 * window.innerHeight} // 2x@30vh
 | 
					                        height={2 * 0.3 * window.innerHeight} // 2x@30vh
 | 
				
			||||||
                        resizeMethod="scale"
 | 
					                        resizeMethod="scale"
 | 
				
			||||||
                        fallbackUserId={user.userId}
 | 
					                        fallbackUserId={member.userId}
 | 
				
			||||||
                        onClick={onMemberAvatarClick}
 | 
					                        onClick={onMemberAvatarClick}
 | 
				
			||||||
                        urls={user.avatarUrl ? [user.avatarUrl] : undefined} />
 | 
					                        urls={member.avatarUrl ? [member.avatarUrl] : undefined} />
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
| 
						 | 
					@ -1190,10 +1191,14 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
            title={_t('Close')} />;
 | 
					            title={_t('Close')} />;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const memberDetails = <PowerLevelSection
 | 
					    const memberDetails = (
 | 
				
			||||||
        powerLevels={powerLevels}
 | 
					        <PowerLevelSection
 | 
				
			||||||
        user={user} room={room} roomPermissions={roomPermissions}
 | 
					            powerLevels={powerLevels}
 | 
				
			||||||
    />;
 | 
					            user={member}
 | 
				
			||||||
 | 
					            room={room}
 | 
				
			||||||
 | 
					            roomPermissions={roomPermissions}
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const isRoomEncrypted = useIsEncrypted(cli, room);
 | 
					    const isRoomEncrypted = useIsEncrypted(cli, room);
 | 
				
			||||||
    // undefined means yet to be loaded, null means failed to load, otherwise list of devices
 | 
					    // undefined means yet to be loaded, null means failed to load, otherwise list of devices
 | 
				
			||||||
| 
						 | 
					@ -1329,7 +1334,7 @@ const UserInfo = ({user, groupId, roomId, onClose}) => {
 | 
				
			||||||
                    devices={devices}
 | 
					                    devices={devices}
 | 
				
			||||||
                    canInvite={roomPermissions.canInvite}
 | 
					                    canInvite={roomPermissions.canInvite}
 | 
				
			||||||
                    isIgnored={isIgnored}
 | 
					                    isIgnored={isIgnored}
 | 
				
			||||||
                    member={user} />
 | 
					                    member={member} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                { adminToolsContainer }
 | 
					                { adminToolsContainer }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue