import { BarChart } from "@styled-icons/boxicons-regular"; import { observer } from "mobx-react-lite"; import styled from "styled-components"; import { Text } from "preact-i18n"; import { useMemo } from "preact/hooks"; import { voiceState, VoiceStatus } from "../../../lib/vortex/VoiceState"; import { useClient } from "../../../context/revoltjs/RevoltClient"; import UserIcon from "../../../components/common/user/UserIcon"; import Button from "../../../components/ui/Button"; import { Megaphone, Microphone, MicrophoneOff, PhoneOff, Speaker, VolumeFull, VolumeMute } from "@styled-icons/boxicons-solid"; import Tooltip from "../../../components/common/Tooltip"; import {Hashnode, Speakerdeck, Teamspeak} from "@styled-icons/simple-icons"; import VoiceClient from "../../../lib/vortex/VoiceClient"; 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; pointer-events: none; user-select: none; display: flex; gap: 16px; .disconnected { opacity: 0.5; } } .actions { display: flex; justify-content: center; gap: 10px; } `; export default observer(({ id }: Props) => { if (voiceState.roomId !== id) return null; 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 (
); }) : self !== undefined && (
)}
{voiceState.status === VoiceStatus.CONNECTED && ( )}
{voiceState.isProducing("audio") ? ( ) : ( )} {voiceState.isDeaf() ? ( ): ( ) }
); });