element-call/src/home/CallList.jsx

70 lines
2 KiB
React
Raw Normal View History

2022-01-05 01:09:27 +00:00
import React from "react";
2021-12-08 01:59:55 +00:00
import { Link } from "react-router-dom";
2022-01-05 01:09:27 +00:00
import { CopyButton } from "../button";
import { Facepile } from "../Facepile";
import { Avatar } from "../Avatar";
import { ReactComponent as VideoIcon } from "../icons/Video.svg";
2021-12-09 20:58:30 +00:00
import styles from "./CallList.module.css";
2022-01-06 01:19:03 +00:00
import { getRoomUrl } from "../matrix-utils";
2022-01-05 01:09:27 +00:00
import { Body, Caption } from "../typography/Typography";
2021-12-08 01:59:55 +00:00
2022-01-05 01:09:27 +00:00
export function CallList({ rooms, client }) {
2021-12-09 20:58:30 +00:00
return (
<>
<div className={styles.callList}>
2021-12-10 21:44:06 +00:00
{rooms.map(({ roomId, roomName, avatarUrl, participants }) => (
2021-12-09 20:58:30 +00:00
<CallTile
key={roomId}
2021-12-20 17:12:28 +00:00
client={client}
2021-12-09 20:58:30 +00:00
name={roomName}
avatarUrl={avatarUrl}
2021-12-10 21:44:06 +00:00
roomId={roomId}
2021-12-09 20:58:30 +00:00
participants={participants}
/>
))}
2022-01-06 00:12:58 +00:00
{rooms.length > 3 && (
<>
<div className={styles.callTileSpacer} />
<div className={styles.callTileSpacer} />
</>
)}
2021-12-09 20:58:30 +00:00
</div>
</>
);
}
2021-12-20 17:12:28 +00:00
function CallTile({ name, avatarUrl, roomId, participants, client }) {
2021-12-08 01:59:55 +00:00
return (
2021-12-10 22:01:55 +00:00
<div className={styles.callTile}>
<Link to={`/room/${roomId}`} className={styles.callTileLink}>
<Avatar
2022-01-05 01:09:27 +00:00
size="lg"
2021-12-10 22:01:55 +00:00
bgKey={name}
src={avatarUrl}
fallback={<VideoIcon width={16} height={16} />}
className={styles.avatar}
/>
<div className={styles.callInfo}>
2022-01-05 01:09:27 +00:00
<Body overflowEllipsis fontWeight="semiBold">
{name}
</Body>
<Caption overflowEllipsis>{getRoomUrl(roomId)}</Caption>
2021-12-20 17:12:28 +00:00
{participants && (
2022-01-05 01:09:27 +00:00
<Facepile
className={styles.facePile}
client={client}
participants={participants}
/>
2021-12-20 17:12:28 +00:00
)}
2021-12-10 22:01:55 +00:00
</div>
<div className={styles.copyButtonSpacer} />
</Link>
2021-12-08 01:59:55 +00:00
<CopyButton
className={styles.copyButton}
variant="icon"
2021-12-10 21:44:06 +00:00
value={getRoomUrl(roomId)}
2021-12-08 01:59:55 +00:00
/>
2021-12-10 22:01:55 +00:00
</div>
2021-12-08 01:59:55 +00:00
);
}