Fix start DM via right panel (#10278)
This commit is contained in:
parent
8d9fdc3b41
commit
6746ce2da3
2 changed files with 46 additions and 29 deletions
|
@ -121,13 +121,17 @@ export const getE2EStatus = (cli: MatrixClient, userId: string, devices: IDevice
|
|||
return anyDeviceUnverified ? E2EStatus.Warning : E2EStatus.Verified;
|
||||
};
|
||||
|
||||
async function openDMForUser(matrixClient: MatrixClient, user: RoomMember): Promise<void> {
|
||||
const startDMUser = new DirectoryMember({
|
||||
/**
|
||||
* Converts the member to a DirectoryMember and starts a DM with them.
|
||||
*/
|
||||
async function openDmForUser(matrixClient: MatrixClient, user: Member): Promise<void> {
|
||||
const avatarUrl = user instanceof User ? user.avatarUrl : user.getMxcAvatarUrl();
|
||||
const startDmUser = new DirectoryMember({
|
||||
user_id: user.userId,
|
||||
display_name: user.rawDisplayName,
|
||||
avatar_url: user.getMxcAvatarUrl(),
|
||||
avatar_url: avatarUrl,
|
||||
});
|
||||
startDmOnFirstMessage(matrixClient, [startDMUser]);
|
||||
startDmOnFirstMessage(matrixClient, [startDmUser]);
|
||||
}
|
||||
|
||||
type SetUpdating = (updating: boolean) => void;
|
||||
|
@ -310,7 +314,7 @@ function DevicesSection({
|
|||
);
|
||||
}
|
||||
|
||||
const MessageButton = ({ member }: { member: RoomMember }): JSX.Element => {
|
||||
const MessageButton = ({ member }: { member: Member }): JSX.Element => {
|
||||
const cli = useContext(MatrixClientContext);
|
||||
const [busy, setBusy] = useState(false);
|
||||
|
||||
|
@ -320,7 +324,7 @@ const MessageButton = ({ member }: { member: RoomMember }): JSX.Element => {
|
|||
onClick={async () => {
|
||||
if (busy) return;
|
||||
setBusy(true);
|
||||
await openDMForUser(cli, member);
|
||||
await openDmForUser(cli, member);
|
||||
setBusy(false);
|
||||
}}
|
||||
className="mx_UserInfo_field"
|
||||
|
@ -332,7 +336,7 @@ const MessageButton = ({ member }: { member: RoomMember }): JSX.Element => {
|
|||
};
|
||||
|
||||
export const UserOptionsSection: React.FC<{
|
||||
member: RoomMember;
|
||||
member: Member;
|
||||
isIgnored: boolean;
|
||||
canInvite: boolean;
|
||||
isSpace?: boolean;
|
||||
|
@ -360,8 +364,9 @@ export const UserOptionsSection: React.FC<{
|
|||
}, [cli, member]);
|
||||
|
||||
const ignore = useCallback(async () => {
|
||||
const name = (member instanceof User ? member.displayName : member.name) || member.userId;
|
||||
const { finished } = Modal.createDialog(QuestionDialog, {
|
||||
title: _t("Ignore %(user)s", { user: member.name }),
|
||||
title: _t("Ignore %(user)s", { user: name }),
|
||||
description: (
|
||||
<div>
|
||||
{_t(
|
||||
|
@ -394,7 +399,7 @@ export const UserOptionsSection: React.FC<{
|
|||
</AccessibleButton>
|
||||
);
|
||||
|
||||
if (member.roomId && !isSpace) {
|
||||
if (member instanceof RoomMember && member.roomId && !isSpace) {
|
||||
const onReadReceiptButton = function (): void {
|
||||
const room = cli.getRoom(member.roomId);
|
||||
dis.dispatch<ViewRoomPayload>({
|
||||
|
@ -415,7 +420,7 @@ export const UserOptionsSection: React.FC<{
|
|||
});
|
||||
};
|
||||
|
||||
const room = cli.getRoom(member.roomId);
|
||||
const room = member instanceof RoomMember ? cli.getRoom(member.roomId) : undefined;
|
||||
if (room?.getEventReadUpTo(member.userId)) {
|
||||
readReceiptButton = (
|
||||
<AccessibleButton kind="link" onClick={onReadReceiptButton} className="mx_UserInfo_field">
|
||||
|
@ -431,7 +436,12 @@ export const UserOptionsSection: React.FC<{
|
|||
);
|
||||
}
|
||||
|
||||
if (canInvite && (member?.membership ?? "leave") === "leave" && shouldShowComponent(UIComponent.InviteUsers)) {
|
||||
if (
|
||||
member instanceof RoomMember &&
|
||||
canInvite &&
|
||||
(member?.membership ?? "leave") === "leave" &&
|
||||
shouldShowComponent(UIComponent.InviteUsers)
|
||||
) {
|
||||
const roomId = member && member.roomId ? member.roomId : SdkContextClass.instance.roomViewStore.getRoomId();
|
||||
const onInviteUserButton = async (ev: ButtonEvent): Promise<void> => {
|
||||
try {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue