Skip to content

Commit

Permalink
Merge pull request #2618 from Johennes/johannes/remove-call
Browse files Browse the repository at this point in the history
Add button to remove call from recents
  • Loading branch information
fkwp committed Sep 13, 2024
2 parents 41a0887 + d2fb1e5 commit eb6719d
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 15 deletions.
5 changes: 5 additions & 0 deletions src/home/CallList.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
64 changes: 49 additions & 15 deletions src/home/CallList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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);
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>
<IconButton
onClick={onRemove}
disabled={isLeaving}
aria-label={t("action.remove")}
>
<CloseIcon />
</IconButton>
</>
);

return (
<div className={styles.callTile}>
<Link
to={getRelativeRoomUrl(room.roomId, roomEncryptionSystem, room.name)}
className={styles.callTileLink}
>
<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} />
</Link>
{isLeaving ? (
<span className={classNames(styles.callTileLink, styles.disabled)}>
{body}
</span>
) : (
<Link
to={getRelativeRoomUrl(room.roomId, roomEncryptionSystem, room.name)}
className={styles.callTileLink}
>
{body}
</Link>
)}
</div>
);
};

0 comments on commit eb6719d

Please sign in to comment.