import { BarChart } from "@styled-icons/boxicons-regular"; import { Megaphone, Microphone, MicrophoneOff, PhoneOff, Speaker, VolumeFull, VolumeMute, } from "@styled-icons/boxicons-solid"; import { Hashnode, Speakerdeck, Teamspeak } from "@styled-icons/simple-icons"; import { observer } from "mobx-react-lite"; import styled from "styled-components"; import { Text } from "preact-i18n"; import { useMemo } from "preact/hooks"; import VoiceClient from "../../../lib/vortex/VoiceClient"; import { voiceState, VoiceStatus } from "../../../lib/vortex/VoiceState"; import { useIntermediate } from "../../../context/intermediate/Intermediate"; import { useClient } from "../../../context/revoltjs/RevoltClient"; import Tooltip from "../../../components/common/Tooltip"; import UserIcon from "../../../components/common/user/UserIcon"; import Button from "../../../components/ui/Button"; interface Props { id: string; } const VoiceBase = styled.div` padding: 20px; background: var(--secondary-background); .status { flex: 1 0; display: flex; position: absolute; align-items: center; padding: 10px; font-size: 14px; font-weight: 600; user-select: none; color: var(--success); border-radius: var(--border-radius); background: var(--primary-background); svg { margin-inline-end: 4px; cursor: help; } } display: flex; flex-direction: column; .participants { margin: 20px 0; justify-content: center; user-select: none; display: flex; gap: 16px; div:hover img { opacity: 0.8; } .disconnected { opacity: 0.5; } } .actions { display: flex; justify-content: center; gap: 10px; } `; export default observer(({ id }: Props) => { if (voiceState.roomId !== id) return null; const { openScreen } = useIntermediate(); const client = useClient(); const self = client.users.get(client.user!._id); const keys = Array.from(voiceState.participants.keys()); const users = useMemo(() => { return keys.map((key) => client.users.get(key)); // eslint-disable-next-line }, [keys]); return (
{users && users.length !== 0 ? users.map((user, index) => { const id = keys![index]; return (
openScreen({ id: "profile", user_id: id, }) } />
); }) : self !== undefined && (
)}
{voiceState.status === VoiceStatus.CONNECTED && ( )}
{voiceState.isProducing("audio") ? ( ) : ( )} {voiceState.isDeaf() ? ( ) : ( )}
); });