mirror of
https://github.com/vector-im/element-call.git
synced 2024-11-21 00:28:08 +08:00
Merge pull request #2618 from Johennes/johannes/remove-call
Add button to remove call from recents
This commit is contained in:
commit
eb6719d32e
@ -70,3 +70,8 @@ Please see LICENSE in the repository root for full details.
|
||||
justify-content: center;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
cursor: not-allowed;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
@ -9,8 +9,11 @@ import { Link } from "react-router-dom";
|
||||
import { MatrixClient } from "matrix-js-sdk/src/client";
|
||||
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
|
||||
import { Room } from "matrix-js-sdk/src/models/room";
|
||||
import { FC } from "react";
|
||||
import { Text } from "@vector-im/compound-web";
|
||||
import { FC, useCallback, MouseEvent, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { IconButton, Text } from "@vector-im/compound-web";
|
||||
import { CloseIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
import classNames from "classnames";
|
||||
|
||||
import { Avatar, Size } from "../Avatar";
|
||||
import styles from "./CallList.module.css";
|
||||
@ -55,22 +58,53 @@ interface CallTileProps {
|
||||
client: MatrixClient;
|
||||
}
|
||||
|
||||
const CallTile: FC<CallTileProps> = ({ name, avatarUrl, room }) => {
|
||||
const CallTile: FC<CallTileProps> = ({ name, avatarUrl, room, client }) => {
|
||||
const { t } = useTranslation();
|
||||
const roomEncryptionSystem = useRoomEncryptionSystem(room.roomId);
|
||||
return (
|
||||
<div className={styles.callTile}>
|
||||
<Link
|
||||
to={getRelativeRoomUrl(room.roomId, roomEncryptionSystem, room.name)}
|
||||
className={styles.callTileLink}
|
||||
>
|
||||
const [isLeaving, setIsLeaving] = useState(false);
|
||||
|
||||
const onRemove = useCallback(
|
||||
(e: MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
setIsLeaving(true);
|
||||
client.leave(room.roomId).catch(() => setIsLeaving(false));
|
||||
},
|
||||
[room, client],
|
||||
);
|
||||
|
||||
const body = (
|
||||
<>
|
||||
<Avatar id={room.roomId} name={name} size={Size.LG} src={avatarUrl} />
|
||||
<div className={styles.callInfo}>
|
||||
<Text weight="semibold" className={styles.callName}>
|
||||
{name}
|
||||
</Text>
|
||||
</div>
|
||||
<div className={styles.copyButtonSpacer} />
|
||||
<IconButton
|
||||
onClick={onRemove}
|
||||
disabled={isLeaving}
|
||||
aria-label={t("action.remove")}
|
||||
>
|
||||
<CloseIcon />
|
||||
</IconButton>
|
||||
</>
|
||||
);
|
||||
|
||||
return (
|
||||
<div className={styles.callTile}>
|
||||
{isLeaving ? (
|
||||
<span className={classNames(styles.callTileLink, styles.disabled)}>
|
||||
{body}
|
||||
</span>
|
||||
) : (
|
||||
<Link
|
||||
to={getRelativeRoomUrl(room.roomId, roomEncryptionSystem, room.name)}
|
||||
className={styles.callTileLink}
|
||||
>
|
||||
{body}
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user