Merge pull request #4457 from matrix-org/bwindels/waitforxsignkeystoverify-rc

Fix: wait until cross-signing keys are fetched to show verify button
This commit is contained in:
Bruno Windels 2020-04-22 08:12:52 +00:00 committed by GitHub
commit 84552048e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -142,7 +142,7 @@ function useIsEncrypted(cli, room) {
function useHasCrossSigningKeys(cli, member, canVerify, setUpdating) { function useHasCrossSigningKeys(cli, member, canVerify, setUpdating) {
return useAsyncMemo(async () => { return useAsyncMemo(async () => {
if (!canVerify) { if (!canVerify) {
return false; return undefined;
} }
setUpdating(true); setUpdating(true);
try { try {
@ -153,7 +153,7 @@ function useHasCrossSigningKeys(cli, member, canVerify, setUpdating) {
} finally { } finally {
setUpdating(false); setUpdating(false);
} }
}, [cli, member, canVerify], false); }, [cli, member, canVerify], undefined);
} }
function DeviceItem({userId, device}) { function DeviceItem({userId, device}) {
@ -1307,18 +1307,28 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => {
const hasCrossSigningKeys = const hasCrossSigningKeys =
useHasCrossSigningKeys(cli, member, canVerify, setUpdating ); useHasCrossSigningKeys(cli, member, canVerify, setUpdating );
const showDeviceListSpinner = devices === undefined;
if (canVerify) { if (canVerify) {
verifyButton = ( if (hasCrossSigningKeys !== undefined) {
<AccessibleButton className="mx_UserInfo_field" onClick={() => { // Note: mx_UserInfo_verifyButton is for the end-to-end tests
if (hasCrossSigningKeys) { verifyButton = (
verifyUser(member); <AccessibleButton className="mx_UserInfo_field mx_UserInfo_verifyButton" onClick={() => {
} else { if (hasCrossSigningKeys) {
legacyVerifyUser(member); verifyUser(member);
} } else {
}}> legacyVerifyUser(member);
{_t("Verify")} }
</AccessibleButton> }}>
); {_t("Verify")}
</AccessibleButton>
);
} else if (!showDeviceListSpinner) {
// HACK: only show a spinner if the device section spinner is not shown,
// to avoid showing a double spinner
// We should ask for a design that includes all the different loading states here
const Spinner = sdk.getComponent('elements.Spinner');
verifyButton = <Spinner />;
}
} }
const securitySection = ( const securitySection = (
@ -1327,7 +1337,7 @@ const BasicUserInfo = ({room, member, groupId, devices, isRoomEncrypted}) => {
<p>{ text }</p> <p>{ text }</p>
{ verifyButton } { verifyButton }
<DevicesSection <DevicesSection
loading={devices === undefined} loading={showDeviceListSpinner}
devices={devices} devices={devices}
userId={member.userId} /> userId={member.userId} />
</div> </div>