Skip to content

Instantly share code, notes, and snippets.

@HonbraDev
Created March 13, 2021 01:14
Show Gist options
  • Save HonbraDev/d18121aa207c75a85ed9f8b888c311d8 to your computer and use it in GitHub Desktop.
Save HonbraDev/d18121aa207c75a85ed9f8b888c311d8 to your computer and use it in GitHub Desktop.
All TypeScript of DogeHouse front-end combined
import React from "react";
import ReactDOM from "react-dom";
import * as Sentry from "@sentry/react";
import ReactModal from "react-modal";
import "react-toastify/dist/ReactToastify.css";
import "./index.css";
import { init_i18n } from "./i18n";
import { Providers } from "./Providers";
import { App } from "./app/App";
init_i18n();
ReactModal.setAppElement("#root");
Sentry.init({
dsn: process.env.REACT_APP_SENTRY_DSN,
enabled: !!process.env.REACT_APP_SENTRY_DSN,
});
ReactDOM.render(
<React.StrictMode>
<Providers>
<App />
</Providers>
</React.StrictMode>,
document.getElementById("root")
);
import React, { useLayoutEffect, useState } from "react";
import { useQuery } from "react-query";
import { BrowserRouter } from "react-router-dom";
import {
auth_query,
createWebSocket,
wsAuthFetch,
wsend,
} from "../createWebsocket";
import { useCurrentRoomStore } from "../webrtc/stores/useCurrentRoomStore";
import { useMuteStore } from "../webrtc/stores/useMuteStore";
import { useSocketStatus } from "../webrtc/stores/useSocketStatus";
import { useVoiceStore } from "../webrtc/stores/useVoiceStore";
import { WebRtcApp } from "../webrtc/WebRtcApp";
import { CenterLayout } from "./components/CenterLayout";
import { DeviceNotSupported } from "./components/DeviceNotSupported";
import { MicPermissionBanner } from "./components/MicPermissionBanner";
import { PageWrapper } from "./components/PageWrapper";
import { WsKilledMessage } from "./components/WsKilledMessage";
import { RoomChat } from "./modules/room-chat/RoomChat";
import { Routes } from "./Routes";
import { roomToCurrentRoom } from "./utils/roomToCurrentRoom";
import { useSaveTokensFromQueryParams } from "./utils/useSaveTokensFromQueryParams";
import { useTokenStore } from "./utils/useTokenStore";
interface AppProps {}
export const App: React.FC<AppProps> = () => {
const isDeviceSupported = useVoiceStore((s) => !!s.device);
const hasTokens = useTokenStore((s) => !!s.accessToken && !!s.refreshToken);
const authIsGood = useSocketStatus((s) => s.status === "auth-good");
const wsKilledByServer = useSocketStatus(
(s) => s.status === "closed-by-server"
);
useState(() => (hasTokens ? createWebSocket() : null));
useLayoutEffect(() => {
if (hasTokens) {
createWebSocket();
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [hasTokens]);
const { isLoading } = useQuery<any>(
auth_query,
() => {
const { accessToken, refreshToken } = useTokenStore.getState();
// I think this will probably only run in dev
console.log(
"AUTH_QUERY RUNNING, I HOPE YOU ARE NOT IN PROD LOL (nothing bad happens if you are, probably)"
);
return wsAuthFetch({
op: auth_query,
d: {
accessToken,
refreshToken,
reconnectToVoice: false,
currentRoomId: useCurrentRoomStore.getState().currentRoom?.id,
muted: useMuteStore.getState().muted,
platform: "web",
},
});
},
{
onSuccess: (d) => {
if (d?.currentRoom) {
useCurrentRoomStore
.getState()
.setCurrentRoom(() => roomToCurrentRoom(d.currentRoom));
wsend({ op: "get_current_room_users", d: {} });
}
},
enabled: hasTokens && authIsGood,
staleTime: Infinity,
}
);
useSaveTokensFromQueryParams();
if (isLoading) {
return null;
}
if (!isDeviceSupported) {
return <DeviceNotSupported />;
}
if (wsKilledByServer) {
return <WsKilledMessage />;
}
return (
<BrowserRouter>
<WebRtcApp />
<PageWrapper>
<CenterLayout>
<Routes />
<MicPermissionBanner />
</CenterLayout>
<RoomChat sidebar />
</PageWrapper>
</BrowserRouter>
);
};
import * as React from "react";
const paths = {
megaphone:
"M2 6.77l12.33-3.43.67.53v8.6l-.67.53-6.089-1.595a2.16 2.16 0 1 1-4.178-1.095L2 9.77l-.42-.53V7.3L2 6.77zm3.006 3.787a1.13 1.13 0 0 0-.04.242 1.17 1.17 0 0 0 2.288.347l-2.248-.589zM2.58 8.82L14 11.83V4.5L2.58 7.72v1.1z",
mute:
"M1.5 5h2.79l3.86-3.83.85.35v13l-.85.33L4.29 11H1.5l-.5-.5v-5l.5-.5zm3.35 5.17L8 13.31V2.73L4.85 5.85 4.5 6H2v4h2.5l.35.17zm9.381-4.108l.707.707L13.207 8.5l1.731 1.732-.707.707L12.5 9.207l-1.732 1.732-.707-.707L11.793 8.5 10.06 6.77l.707-.707 1.733 1.73 1.731-1.731z",
person:
"M8 2a1 1 0 110 2 1 1 0 010-2zm0-1a2 2 0 100 4 2 2 0 000-4zm1.23 4.49H6.77A1.77 1.77 0 005 7.26V9.9A1.06 1.06 0 006 11v2.33a1.2 1.2 0 001.2 1.2h1.6a1.2 1.2 0 001.2-1.24V11a1.06 1.06 0 001-1.1V7.26a1.77 1.77 0 00-1.77-1.77zM6 10V7.26a.76.76 0 01.77-.77h2.46a.76.76 0 01.77.77V10H9v3.31a.2.2 0 01-.2.2H7.2a.2.2 0 01-.2-.2V10H6z",
arrowLeft:
"M7 3.093l-5 5V8.8l5 5 .707-.707-4.146-4.147H14v-1H3.56L7.708 3.8 7 3.093z",
plus: "M14 7v1H8v6H7V8H1V7h6V1h1v6h6z",
close:
"M8 8.707l3.646 3.647.708-.707L8.707 8l3.647-3.646-.707-.708L8 7.293 4.354 3.646l-.707.708L7.293 8l-3.646 3.646.707.708L8 8.707z",
cog:
"M19.85 8.75l4.15.83v4.84l-4.15.83 2.35 3.52-3.43 3.43-3.52-2.35-.83 4.15H9.58l-.83-4.15-3.52 2.35-3.43-3.43 2.35-3.52L0 14.42V9.58l4.15-.83L1.8 5.23 5.23 1.8l3.52 2.35L9.58 0h4.84l.83 4.15 3.52-2.35 3.43 3.43-2.35 3.52zm-1.57 5.07l4-.81v-2l-4-.81-.54-1.3 2.29-3.43-1.43-1.43-3.43 2.29-1.3-.54-.81-4h-2l-.81 4-1.3.54-3.43-2.29-1.43 1.43L6.38 8.9l-.54 1.3-4 .81v2l4 .81.54 1.3-2.29 3.43 1.43 1.43 3.43-2.29 1.3.54.81 4h2l.81-4 1.3-.54 3.43 2.29 1.43-1.43-2.29-3.43.54-1.3zm-8.186-4.672A3.43 3.43 0 0 1 12 8.57 3.44 3.44 0 0 1 15.43 12a3.43 3.43 0 1 1-5.336-2.852zm.956 4.274c.281.188.612.288.95.288A1.7 1.7 0 0 0 13.71 12a1.71 1.71 0 1 0-2.66 1.422z",
triangle: "M8 4l4 6.905H4L8 4z",
dot: "M10 8a2 2 0 1 1-4 0 2 2 0 0 1 4 0z",
feedback:
"M7.549 10.078c.46.182.88.424 1.258.725.378.3.701.65.97 1.046a4.829 4.829 0 0 1 .848 2.714V15H9.75v-.438a3.894 3.894 0 0 0-1.155-2.782 4.054 4.054 0 0 0-1.251-.84 3.898 3.898 0 0 0-1.532-.315A3.894 3.894 0 0 0 3.03 11.78a4.06 4.06 0 0 0-.84 1.251c-.206.474-.31.985-.315 1.531V15H1v-.438a4.724 4.724 0 0 1 .848-2.713 4.918 4.918 0 0 1 2.229-1.77 2.994 2.994 0 0 1-.555-.493 3.156 3.156 0 0 1-.417-.602 2.942 2.942 0 0 1-.26-.683 3.345 3.345 0 0 1-.095-.739c0-.423.08-.82.24-1.189a3.095 3.095 0 0 1 1.626-1.627 3.067 3.067 0 0 1 2.386-.007 3.095 3.095 0 0 1 1.627 1.627 3.067 3.067 0 0 1 .157 1.928c-.06.237-.148.465-.266.684a3.506 3.506 0 0 1-.417.608c-.16.187-.345.35-.554.492zM5.812 9.75c.301 0 .584-.057.848-.17a2.194 2.194 0 0 0 1.162-1.163c.119-.269.178-.554.178-.854a2.138 2.138 0 0 0-.643-1.538 2.383 2.383 0 0 0-.697-.472 2.048 2.048 0 0 0-.848-.178c-.3 0-.583.057-.847.17a2.218 2.218 0 0 0-1.17 1.17c-.113.264-.17.547-.17.848 0 .3.057.583.17.847.115.264.27.497.466.697a2.168 2.168 0 0 0 1.552.643zM15 1v7h-1.75l-2.625 2.625V8H9.75v-.875h1.75v1.388l1.388-1.388h1.237v-5.25h-8.75v1.572a7.255 7.255 0 0 0-.438.069 2.62 2.62 0 0 0-.437.123V1H15z",
search:
"M15.25 0a8.25 8.25 0 0 0-6.18 13.72L1 22.88l1.12 1 8.05-9.12A8.251 8.251 0 1 0 15.25.01V0zm0 15a6.75 6.75 0 1 1 0-13.5 6.75 6.75 0 0 1 0 13.5z",
refresh:
"M5.563 2.516A6.001 6.001 0 0 0 8 14 6 6 0 0 0 9.832 2.285l-.302.953A5.002 5.002 0 0 1 8 13a5 5 0 0 1-2.88-9.088l.443-1.396z",
arrowRight:
"M9 13.887l5-5V8.18l-5-5-.707.707 4.146 4.147H2v1h10.44L8.292 13.18l.707.707z",
};
export function Codicon({
name,
...props
}: React.SVGProps<SVGSVGElement> & { name: keyof typeof paths }) {
return (
<svg
width={24}
height={24}
viewBox={name === "cog" || name === "search" ? "0 0 24 24" : "0 0 16 16"}
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
{...props}
>
<path d={paths[name]} />
</svg>
);
}
import * as React from "react";
export function PawPrint(props: React.SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 480.004 480.004"
width={24}
height={24}
fill="currentColor"
{...props}
>
<path d="M242.458 173.571c-52.852 0-94.947 25.925-121.733 74.971C92.922 299.45 89.92 358.941 89.92 382.156c0 23.728 4.575 45.537 12.882 61.41 10.223 19.534 26.238 30.292 45.095 30.292 34.276 0 51.596-17.422 65.512-31.42 11.417-11.485 18.441-17.983 30.007-17.983 13.339 0 19.57 6.163 29.002 15.49 13.483 13.335 30.263 29.93 72.095 29.93 31.152 0 50.505-33.612 50.505-87.719.001-80.644-41.418-208.585-152.56-208.585zm132.561 208.585c0 33.707-9.433 67.719-30.505 67.719-33.613 0-46.027-12.277-58.032-24.15-10.081-9.97-21.507-21.27-43.065-21.27-20.449 0-32.519 12.141-44.191 23.882-13.047 13.124-25.371 25.521-51.329 25.521-26.234 0-37.977-36.012-37.977-71.702 0-21.68 2.763-77.164 28.358-124.027 23.395-42.837 58.446-64.558 104.18-64.558 52.886 0 84.163 35.204 101.088 64.737 19.708 34.385 31.473 80.684 31.473 123.848zM132.998 186.134c-.821-17.752-8.14-36.206-20.609-51.964-17.141-21.66-40.882-34.591-63.508-34.591-11.521 0-22.034 3.498-30.405 10.118C5.728 119.78-.805 135.786.079 154.765c.827 17.746 8.151 36.197 20.622 51.956 17.145 21.664 40.894 34.598 63.527 34.598 11.507 0 22.007-3.49 30.38-10.104 12.737-10.1 19.267-26.11 18.39-45.081zm-30.801 29.397c-4.861 3.84-10.907 5.787-17.969 5.787-16.326 0-34.659-10.349-47.844-27.009-9.895-12.502-15.692-26.877-16.327-40.475-.576-12.369 3.268-22.473 10.825-28.45 4.871-3.852 10.926-5.805 17.999-5.805 16.319 0 34.644 10.347 47.825 27.001 19.32 24.416 21.828 55.997 5.491 68.951z" />
<path d="M461.54 109.696c-8.37-6.619-18.886-10.117-30.412-10.117-22.644 0-46.39 12.932-63.52 34.591-12.47 15.759-19.789 34.214-20.607 51.965-.875 18.974 5.662 34.984 18.414 45.088 8.355 6.604 18.855 10.095 30.366 10.095 22.309 0 46.656-13.259 63.533-34.598 12.468-15.754 19.788-34.207 20.611-51.957.881-18.973-5.646-34.976-18.385-45.067zm-17.909 84.614c-13.176 16.659-31.51 27.007-47.848 27.007-7.064 0-13.108-1.946-17.955-5.778-16.359-12.962-13.856-44.542 5.466-68.962 13.171-16.654 31.501-26.999 47.835-26.999 7.078 0 13.135 1.953 18 5.799 16.343 12.949 13.826 44.515-5.498 68.933zm-151.068-25.942c1.981.275 4.005.415 6.014.415h.004c30.268 0 58.456-31.354 65.568-72.932 4.49-26.235-.355-52.185-12.962-69.415-8.25-11.276-19.17-18.147-31.563-19.868a43.792 43.792 0 00-6.059-.422c-30.207 0-58.37 31.331-65.51 72.885-4.488 26.24.354 52.199 12.954 69.44 8.241 11.279 19.149 18.159 31.554 19.897zm-24.796-85.956c5.421-31.55 25.538-56.265 45.798-56.265 1.097 0 2.201.077 3.295.23 8.741 1.214 14.714 7.125 18.186 11.87 9.476 12.95 12.985 33.224 9.39 54.232-5.401 31.575-25.544 56.307-45.857 56.305-1.092 0-2.189-.076-3.251-.224-8.732-1.224-14.701-7.14-18.171-11.888-9.475-12.964-12.984-33.25-9.39-54.26zm-82.509 86.372c2.009 0 4.033-.14 6.031-.417 12.374-1.735 23.268-8.607 31.504-19.871 12.606-17.239 17.463-43.204 12.99-69.47-7.139-41.547-35.304-72.878-65.515-72.878-2.023 0-4.061.142-6.046.42-12.404 1.722-23.319 8.59-31.566 19.861-12.605 17.229-17.449 43.181-12.958 69.422 7.111 41.578 35.296 72.933 65.56 72.933zM148.796 38.239c3.469-4.742 9.438-10.648 18.189-11.863a23.65 23.65 0 013.282-.229c20.264 0 40.383 24.714 45.802 56.25 3.581 21.032.06 41.328-9.42 54.293-3.467 4.741-9.428 10.648-18.125 11.869a23.885 23.885 0 01-3.266.225c-20.308 0-40.446-24.732-45.847-56.306-3.597-21.015-.088-41.292 9.385-54.239z" />
</svg>
);
}
import * as React from "react";
export function Logo(props: React.SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
xmlnsXlink="http://www.w3.org/1999/xlink"
viewBox="0 0 494.28 131.12"
{...props}
>
<g data-name="Layer 2">
<g data-name="Layer 1">
<path
d="M135.08 66.6h13.61c7.77 0 13 1.59 17.28 5.33 4.89 4.32 7.56 10.59 7.56 18.15s-2.74 14.61-7.63 19c-4 3.6-9.72 5.54-16.64 5.54h-14.18zm9.86 39.89h1.87c5.26 0 8.5-.93 11.31-3.31 3.46-3 5.4-7.49 5.4-12.82 0-9.57-5.83-15.76-15-15.76h-3.6zM215.07 98.29c0 9.79-8 17.49-18.22 17.49-10.51 0-18.07-7.41-18.07-17.78 0-10.59 7.42-17.86 18.22-17.86 10.51 0 18.07 7.63 18.07 18.15zM188 98c0 5.76 3.6 9.65 8.93 9.65s8.92-4 8.92-9.51c0-6-3.38-9.79-8.85-9.79s-9 3.81-9 9.65zM246.68 81.29h9v30.89c0 6.84-1.3 10.8-4.47 13.9s-8.13 5-13.82 5A22.24 22.24 0 01221 124.5l5.69-5.77a13.13 13.13 0 0010.3 4.61c6.12 0 9.65-3.6 9.65-9.86v-3.39a14.23 14.23 0 01-11.74 5.69c-9.14 0-15.77-7.41-15.77-17.57 0-10.8 6.7-18.07 16.71-18.07a12.51 12.51 0 0110.8 5.26zm-17.79 16.49c0 5.76 3.75 9.87 9 9.87a9.19 9.19 0 006.92-3.1 9.31 9.31 0 001.72-5.91c0-3.59-.79-6-2.44-7.77a9.25 9.25 0 00-6.27-2.59c-5.26 0-8.93 3.96-8.93 9.5zM272 100.16a8.9 8.9 0 0016.42 3.17l8.42 2.3a17.68 17.68 0 01-16.2 10.15c-10.58 0-18.14-7.49-18.14-17.85s7.27-17.79 17.56-17.79c10.66 0 18.08 7.49 18.08 18.22l-.07 1.8zm16.71-5.26a8.14 8.14 0 00-8.5-7.06c-4.39 0-7.35 2.52-8.21 7.06zM315.08 114.63h-9.87v-48h9.87v20.28h18.21V66.6h9.87v48h-9.87V95h-18.21zM386.86 98.29c0 9.79-8 17.49-18.22 17.49-10.51 0-18.07-7.41-18.07-17.78 0-10.59 7.42-17.86 18.22-17.86 10.51 0 18.07 7.63 18.07 18.15zM359.79 98c0 5.76 3.6 9.65 8.93 9.65s8.92-4 8.92-9.51c0-6-3.38-9.79-8.85-9.79s-9 3.81-9 9.65zM422.21 81.29v21.1c0 4.9-1 7.63-3.74 9.94a16.62 16.62 0 01-10.8 3.45c-4.61 0-8.57-1.29-11.16-3.67-2.38-2.16-3.53-5.33-3.53-9.72v-21.1h9.14v20.52c0 3.75 2.24 6.27 5.55 6.27s5.4-2.16 5.4-5.69v-21.1zM444.89 90.94v-.58c0-2-1.8-3.45-4.25-3.45-2.23 0-3.67 1.22-3.67 3a2.74 2.74 0 00.94 2.16c1 .8 1.08.8 5.68 2.23C451.08 96.63 454 99.58 454 105c0 6.48-5.19 10.8-13 10.8s-12.74-4-13.1-10.94h8.78c.44 2.88 1.73 4.17 4.4 4.17 2.16 0 3.67-1.29 3.67-3.16s-1.3-3-6.19-4.47c-7.2-2.16-10.44-5.4-10.44-10.65 0-6.34 5.11-10.59 12.88-10.59s12.25 4 12.46 10.8zM468.15 100.16a8.89 8.89 0 0016.41 3.17l8.43 2.3a17.69 17.69 0 01-16.2 10.15c-10.59 0-18.15-7.49-18.15-17.85s7.27-17.79 17.57-17.79c10.66 0 18.07 7.49 18.07 18.22l-.07 1.8zm16.7-5.26a8.13 8.13 0 00-8.5-7.06c-4.39 0-7.34 2.52-8.2 7.06zM129 53.63S106.59 46.59 65.28 0C53.63 8.38 33.52 39.22 0 53l6 8.33c2.5-.59 8.47-3.64 8.47-3.64l15.08 57H50.7S32.19 63 67 63c32.52 0 13.16 51.59 13.16 51.59h21.45l14.27-57.42a66.22 66.22 0 008.44 4.08z"
fill="#6b6659"
/>
<image
data-name="Layer 0"
width={474}
height={492}
transform="matrix(.13 0 0 .13 34.41 50.05)"
xlinkHref="data:image/png;base64,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"
/>
</g>
</g>
</svg>
);
}
import * as React from "react";
/* SVG from iconmonstr, https://iconmonstr.com/license/ */
export function TwitterIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
fill="white"
viewBox="0 0 24 24"
>
<path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z" />
</svg>
);
}
import * as React from "react";
export function PeopleIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={18}
height={18}
{...props}
>
<path d="M0 0h24v24H0z" fill="none" />
<path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z" />
</svg>
);
}
import * as React from "react";
export function MuteIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 58 58" {...props}>
<path d="M44.5 28a1 1 0 00-1 1v6c0 7.72-6.28 14-14 14s-14-6.28-14-14v-6a1 1 0 10-2 0v6c0 8.485 6.644 15.429 15 15.949V56h-5a1 1 0 100 2h12a1 1 0 100-2h-5v-5.051c8.356-.52 15-7.465 15-15.949v-6a1 1 0 00-1-1z" />
<path d="M29.5 46c6.065 0 11-4.935 11-11V11c0-6.065-4.935-11-11-11s-11 4.935-11 11v24c0 6.065 4.935 11 11 11zm-9-35c0-4.963 4.038-9 9-9s9 4.037 9 9v24c0 4.963-4.038 9-9 9s-9-4.037-9-9V11zm31.707-6.707a.999.999 0 00-1.414 0l-9 9a.999.999 0 101.414 1.414l9-9a.999.999 0 000-1.414z" />
<path d="M37.207 20.707a.999.999 0 10-1.414-1.414l-14 14a.999.999 0 101.414 1.414l14-14zM12.793 42.293l-7 7a.999.999 0 101.414 1.414l7-7a.999.999 0 10-1.414-1.414z" />
</svg>
);
}
import * as React from "react";
/* SVG from iconmonstr, https://iconmonstr.com/license/ */
export function GitHubIcon(props: React.SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
fill="white"
viewBox="0 0 24 24"
>
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
</svg>
);
}
import React from "react";
import { Volume2 } from "react-feather";
import {
PossibleSoundEffect,
useSoundEffectStore,
} from "../modules/sound-effects/useSoundEffectStore";
import { Checkbox } from "./Checkbox";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface ChatSettingsProps {}
const capitalize = (s: string) =>
s.length ? s[0].toUpperCase() + s.slice(1) : s;
const camelToReg = (str: string) =>
str.replace(/[A-Z]/g, (letter) => ` ${letter}`);
export const SoundEffectSettings: React.FC<ChatSettingsProps> = () => {
const [
soundEffectSettings,
setSetting,
playSoundEffect,
] = useSoundEffectStore((x) => [x.settings, x.setSetting, x.playSoundEffect]);
const { t } = useTypeSafeTranslation();
return (
<>
<h1 className={`py-8 text-4xl`}>
{t("pages.soundEffectSettings.header")}
</h1>
{Object.keys(soundEffectSettings).map((k) => {
return (
<div className={`flex`} key={k}>
<Checkbox
value={soundEffectSettings[k as PossibleSoundEffect]}
label={capitalize(camelToReg(k))}
onChange={() =>
setSetting(
k as PossibleSoundEffect,
!soundEffectSettings[k as PossibleSoundEffect]
)
}
/>
<button
onClick={() => playSoundEffect(k as PossibleSoundEffect, true)}
className={`ml-2`}
>
<Volume2 />
</button>
</div>
);
})}
</>
);
};
import React from "react";
interface CircleButtonProps {
size?: number;
onClick: () => void;
title?: string;
}
export const CircleButton: React.FC<CircleButtonProps> = ({
size = 60,
title,
onClick,
children,
}) => {
return (
<button
style={{
height: size,
width: size,
}}
title={title}
className={`rounded-full border border-simple-gray-80 bg-simple-gray-2b flex items-center justify-center`}
onClick={onClick}
>
{children}
</button>
);
};
import React from "react";
import { MicOff } from "react-feather";
import { BaseUser } from "../types";
import { Avatar } from "./Avatar";
import GlassesDoge from "../../assets/glasses-doge.png";
import RegularDoge from "../../assets/regular-doge.png";
interface UserNodeProps {
u: BaseUser;
isMuted: boolean;
isMod: boolean;
isCreator: boolean;
isSpeaker: boolean;
isSpeaking?: boolean;
onClick: () => void;
}
export const UserNode: React.FC<UserNodeProps> = ({
u,
isMuted,
onClick,
isMod,
isSpeaker,
isCreator,
isSpeaking,
}) => {
let prefix = null;
if (isCreator) {
prefix = (
<img
src={GlassesDoge}
alt="room creator"
style={{ marginLeft: 4, marginBottom: 6 }}
className={`w-4 h-4 ml-1 mb-1.5`}
/>
);
} else if (isMod) {
prefix = (
<img
src={RegularDoge}
alt="room mod"
style={{ marginLeft: 4, marginBottom: 6 }}
className={`w-4 h-4 ml-1 mb-1.5`}
/>
);
}
return (
<button
className={`flex flex-col items-center`}
onClick={onClick}
key={u.id}
>
<div className={`relative`}>
<Avatar
usernameForErrorImg={u.username}
circle
size={70}
active={isSpeaking}
src={u.avatarUrl}
/>
{isMuted && (isCreator || isSpeaker) ? (
<div
className={`absolute -bottom-2 -right-2 bg-blue-500 rounded-full p-1`}
>
<MicOff color="white" size={16} name="mute" />
</div>
) : null}
</div>
<div className={`mt-2 flex w-full justify-center items-center truncate`}>
<span className={`text-sm truncate`}>
{(u.displayName || u.username).trim().split(" ")[0]}
</span>
{prefix}
</div>
</button>
);
};
import normalizeUrl from "normalize-url";
import React, { useEffect, useState } from "react";
import { useHistory } from "react-router-dom";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { linkRegex } from "../constants";
import { BaseUser, RoomUser } from "../types";
import { onFollowUpdater } from "../utils/onFollowUpdater";
import { useMeQuery } from "../utils/useMeQuery";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
import { Avatar } from "./Avatar";
import { Button } from "./Button";
import { EditProfileModal } from "./EditProfileModal";
interface UserProfileProps {
profile: RoomUser;
}
export const UserProfile: React.FC<UserProfileProps> = ({
profile: userProfile,
}) => {
const history = useHistory();
const { me } = useMeQuery();
const { setCurrentRoom } = useCurrentRoomStore();
// if you edit your profile, me will be updated so we want to use that
const profile: BaseUser | RoomUser =
me?.id === userProfile.id ? me : userProfile;
const [youAreFollowing, setYouAreFollowing] = useState(
"youAreFollowing" in profile ? profile.youAreFollowing : false
);
const _youAreFollowing =
"youAreFollowing" in profile && profile.youAreFollowing;
useEffect(() => {
if (_youAreFollowing) {
setYouAreFollowing(_youAreFollowing);
}
}, [_youAreFollowing]);
const [editProfileModalOpen, setEditProfileModalOpen] = useState(false);
const { t } = useTypeSafeTranslation();
return (
<>
<EditProfileModal
user={profile}
isOpen={editProfileModalOpen}
onRequestClose={() => setEditProfileModalOpen(false)}
/>
<div className={`mb-4 flex justify-between align-center`}>
<Avatar src={profile.avatarUrl} />
{me?.id === profile.id ? (
<div>
<Button
onClick={() => {
setEditProfileModalOpen(true);
}}
variant="small"
>
{t("pages.viewUser.editProfile")}
</Button>
</div>
) : null}
{me?.id === profile.id ||
userProfile.youAreFollowing === null ||
userProfile.youAreFollowing === undefined ? null : (
<div>
<Button
onClick={() => {
wsend({
op: "follow",
d: {
userId: profile.id,
value: !youAreFollowing,
},
});
setYouAreFollowing(!youAreFollowing);
onFollowUpdater(setCurrentRoom, me, profile);
}}
variant="small"
>
{youAreFollowing ? "following" : "follow"}
</Button>
</div>
)}
</div>
<div className={`font-semibold`}>{profile.displayName}</div>
<div className={`my-1 flex`}>
<div>@{profile.username}</div>
{me?.id !== profile.id && userProfile.followsYou ? (
<div className={`ml-2 text-simple-gray-3d`}>
{t("pages.viewUser.followsYou")}
</div>
) : null}
</div>
<div className={`flex my-4`}>
<button
onClick={() => {
wsend({
op: `fetch_follow_list`,
d: { isFollowing: false, userId: profile.id, cursor: 0 },
});
history.push(`/followers/${profile.id}`);
}}
className={`mr-3`}
>
<span className={`font-bold`}>{profile.numFollowers}</span>{" "}
{t("pages.viewUser.followers")}
</button>
<button
onClick={() => {
wsend({
op: `fetch_follow_list`,
d: { isFollowing: true, userId: profile.id, cursor: 0 },
});
history.push(`/following/${profile.id}`);
}}
>
<span className={`font-bold`}>{profile.numFollowing}</span>{" "}
{t("pages.viewUser.following")}
</button>
</div>
<div className="mb-4 whitespace-pre-wrap break-all">
{profile.bio?.split(" ").map((chunk, i) => {
if (linkRegex.test(chunk)) {
try {
return (
<a
key={i}
href={normalizeUrl(chunk)}
target="_blank"
rel="noreferrer"
className="text-blue-500 p-0 hover:underline"
>
{chunk}{" "}
</a>
);
} catch {}
}
return <span key={i}>{chunk} </span>;
})}
</div>
</>
);
};
import React, { useState } from "react";
import { Button } from "./Button";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface InviteButtonProps {
onClick: () => void;
}
export const InviteButton: React.FC<InviteButtonProps> = ({ onClick }) => {
const [invited, setInvited] = useState(false);
const { t } = useTypeSafeTranslation();
return (
<Button
onClick={() => {
onClick();
setInvited(true);
}}
disabled={invited}
variant="small"
>
{invited
? t("components.inviteButton.invited")
: t("components.inviteButton.inviteToRoom")}
</Button>
);
};
import React from "react";
import { useMutation, useQuery, useQueryClient } from "react-query";
import { wsFetch, wsMutation } from "../../createWebsocket";
import { PaginatedBaseUsers } from "../types";
import { Avatar } from "./Avatar";
import { Button } from "./Button";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface BlockedFromRoomUsersProps {}
export const GET_BLOCKED_FROM_ROOM_USERS = "get_blocked_from_room_users";
const UnbanButton = ({
userId,
offset,
}: {
userId: string;
offset: number;
}) => {
const queryClient = useQueryClient();
const { mutateAsync, isLoading } = useMutation(wsMutation, {
onSuccess: () => {
queryClient.setQueryData<PaginatedBaseUsers | undefined>(
[GET_BLOCKED_FROM_ROOM_USERS, offset],
(d) => {
if (!d) {
return d;
}
return {
...d,
users: d.users.filter((x) => x.id !== userId),
};
}
);
},
});
const { t } = useTypeSafeTranslation();
return (
<Button
loading={isLoading}
onClick={() => {
mutateAsync({ op: "unban_from_room", d: { userId } });
}}
variant={`small`}
>
{t("components.blockedFromRoomUsers.unban")}
</Button>
);
};
export const BlockedFromRoomUsersPage: React.FC<{
offset: number;
onLoadMore: (newOffset: number) => void;
isLastPage: boolean;
isOnlyPage: boolean;
}> = ({ offset, onLoadMore, isOnlyPage, isLastPage }) => {
const queryClient = useQueryClient();
const { isLoading, data } = useQuery<PaginatedBaseUsers>(
[GET_BLOCKED_FROM_ROOM_USERS, offset],
() =>
wsFetch<PaginatedBaseUsers>({
op: GET_BLOCKED_FROM_ROOM_USERS,
d: { offset },
}),
{ enabled: false }
);
const { t } = useTypeSafeTranslation();
if (isLoading) {
return <div className={`mt-8`}>{t("common.loading")}</div>;
}
if (isOnlyPage && data?.users.length === 0) {
return (
<div className={`mt-2`}>
{t("components.blockedFromRoomUsers.noBans")}
</div>
);
}
if (!data) {
return null;
}
return (
<>
{data.users.map((profile) => (
<div
className={`border-b border-solid border-simple-gray-3c flex py-4 px-2 items-center`}
key={profile.id}
>
<div>
<Avatar size={60} src={profile.avatarUrl} />
</div>
<div className={`ml-4 flex-1 mr-4`}>
<div className={`text-lg`}>{profile.displayName}</div>
<div style={{ color: "" }}>@{profile.username}</div>
</div>
<UnbanButton offset={offset} userId={profile.id} />
</div>
))}
{isLastPage && data.nextCursor ? (
<div className={`flex items-center justify-center mt-4`}>
<Button
variant="small"
onClick={() => {
queryClient.prefetchQuery(
[GET_BLOCKED_FROM_ROOM_USERS, data.nextCursor],
() =>
wsFetch<PaginatedBaseUsers>({
op: GET_BLOCKED_FROM_ROOM_USERS,
d: { offset: data.nextCursor },
}),
{ staleTime: 0 }
);
onLoadMore(data.nextCursor!);
}}
>
{t("common.loadMore")}
</Button>
</div>
) : null}
</>
);
};
export const BlockedFromRoomUsers: React.FC<BlockedFromRoomUsersProps> = ({}) => {
const [offsets, setOffsets] = React.useState([0]);
const { t } = useTypeSafeTranslation();
return (
<>
<div className={`mt-4`}>
<h1 className={`text-xl`}>
{t("components.blockedFromRoomUsers.header")}
</h1>
<div>
{offsets.map((offset, i) => (
<BlockedFromRoomUsersPage
key={offset}
offset={offset}
isLastPage={i === offsets.length - 1}
isOnlyPage={offsets.length === 1}
onLoadMore={(o) => setOffsets([...offsets, o])}
/>
))}
</div>
</div>
</>
);
};
import React from "react";
interface BodyWrapperProps {}
export const BodyWrapper: React.FC<BodyWrapperProps> = ({
children
}) => {
return (
<div className={`px-5`}>
{children}
</div>
);
};
import React from "react";
interface InputErrorMsgProps {}
export const InputErrorMsg: React.FC<InputErrorMsgProps> = ({ children }) => {
return <div className={`text-red-600`}>{children}</div>;
};
import React from "react";
import { Codicon } from "../svgs/Codicon";
import { CurrentRoom, Room } from "../types";
import { useMeQuery } from "../utils/useMeQuery";
interface RoomProps {
active?: boolean;
onClick: () => void;
room: Room | CurrentRoom;
currentRoomId: string | undefined;
}
export const RoomCard: React.FC<RoomProps> = ({
room,
onClick,
active,
currentRoomId,
}) => {
const { me } = useMeQuery();
let n = room.numPeopleInside;
const previewNodes = [];
let userList = room.peoplePreviewList;
if (currentRoomId === room.id && "users" in room) {
n = room.users.length;
userList = room.users;
}
for (let i = 0; i < Math.min(6, userList.length); i++) {
const p = userList[i];
if (p.id === me?.id && currentRoomId !== room.id) {
n--;
continue;
}
previewNodes.push(
<div
key={p.id}
className={`text-left text-simple-gray-d9 ${!i ? "mt-1.5" : "mt-0.5"}`}
>
{p.displayName?.slice(0, 50)}
</div>
);
if (i >= 4 && previewNodes.length >= 5) {
break;
}
}
return (
<div>
<button
onClick={onClick}
className={`w-full ${
active ? "bg-simple-gray-4d" : "bg-simple-gray-33"
} hover:bg-simple-gray-69 active:bg-simple-gray-23 py-2.5 px-5 rounded-lg`}
>
<div className={`flex text-white`}>
<div
style={{
display: "-webkit-box",
WebkitBoxOrient: "vertical",
WebkitLineClamp: 3,
}}
className={`text-left flex-1 text-xl text-simple-gray-d9 text-ellipsis overflow-hidden break-all`}
>
{room.name?.slice(0, 100)}
</div>
<div className={`flex items-center`}>
<Codicon name="person" /> {n}
</div>
</div>
{previewNodes}
</button>
</div>
);
};
import React from "react";
import { createWebSocket } from "../../createWebsocket";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
import { Button } from "./Button";
import { CenterLayout } from "./CenterLayout";
import { Wrapper } from "./Wrapper";
interface WsKilledMessageProps {}
export const WsKilledMessage: React.FC<WsKilledMessageProps> = ({}) => {
const { t } = useTypeSafeTranslation();
return (
<div className="flex items-center h-full justify-around">
<CenterLayout>
<Wrapper>
<div className={`px-4`}>
<div className={`mb-4 mt-8 text-xl`}>
{t("components.wsKilled.description")}
</div>
<Button
onClick={() => {
createWebSocket(true);
}}
>
{t("components.wsKilled.reconnect")}
</Button>
</div>
</Wrapper>
</CenterLayout>
</div>
);
};
import React from "react";
import { X } from "react-feather";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { renameRoomAndMakePrivate } from "../../webrtc/utils/renameRoomAndMakePrivate";
import { renameRoomAndMakePublic } from "../../webrtc/utils/renameRoomAndMakePublic";
import { BlockedFromRoomUsers } from "./BlockedFromRoomUsers";
import { Button } from "./Button";
import { Modal } from "./Modal";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface RoomSettingsModalProps {
open: boolean;
onRequestClose: () => void;
}
export const RoomSettingsModal: React.FC<RoomSettingsModalProps> = ({
open,
onRequestClose,
}) => {
const { currentRoom, setCurrentRoom } = useCurrentRoomStore();
const { t } = useTypeSafeTranslation();
return (
<Modal isOpen={open} onRequestClose={onRequestClose}>
<button
onClick={() => {
onRequestClose();
}}
className={`p-2 -ml-3`}
>
<X />
</button>
{currentRoom ? (
<>
<label className={`flex items-center my-8`} htmlFor="auto-speaker">
<input
checked={!currentRoom.autoSpeaker}
onChange={(e) => {
setCurrentRoom((cr) =>
!cr
? cr
: {
...cr,
autoSpeaker: !e.target.checked,
}
);
wsend({
op: "set_auto_speaker",
d: { value: !e.target.checked },
});
}}
id="auto-speaker"
type="checkbox"
/>
<span className={`ml-2`}>
{t("components.modals.roomSettingsModal.requirePermission")}
</span>
</label>
{currentRoom.isPrivate ? (
<Button
onClick={() => {
renameRoomAndMakePublic(currentRoom.name);
onRequestClose();
}}
>
{t("components.modals.roomSettingsModal.makePublic")}
</Button>
) : (
<Button
onClick={() => {
renameRoomAndMakePrivate(currentRoom.name);
onRequestClose();
}}
>
{t("components.modals.roomSettingsModal.makePrivate")}
</Button>
)}
{open ? <BlockedFromRoomUsers /> : null}
</>
) : null}
</Modal>
);
};
import * as React from "react";
import { Modal } from "./Modal";
import create from "zustand";
import { combine } from "zustand/middleware";
import { Button } from "./Button";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface Props {}
type Fn = () => void;
const useConfirmModalStore = create(
combine(
{
message: "",
onConfirm: undefined as undefined | Fn,
},
(set) => ({
close: () => set({ onConfirm: undefined, message: "" }),
set,
})
)
);
export const modalConfirm = (message: string, onConfirm: Fn) => {
useConfirmModalStore.getState().set({ onConfirm, message });
};
export const ConfirmModal: React.FC<Props> = () => {
const { onConfirm, message, close } = useConfirmModalStore();
const { t } = useTypeSafeTranslation();
return (
<Modal isOpen={!!onConfirm} onRequestClose={() => close()}>
<div>{message}</div>
<div className={`flex mt-12`}>
<Button
type="button"
onClick={close}
className={`mr-1.5`}
color="secondary"
>
{t("common.cancel")}
</Button>
<Button
onClick={() => {
close();
onConfirm?.();
}}
type="submit"
className={`ml-1.5`}
>
{t("common.yes")}
</Button>
</div>
</Modal>
);
};
import React from "react";
import { useHistory } from "react-router-dom";
import DogeHouse from "../../assets/dogehouse.png";
import { ArrowLeft } from "react-feather";
interface BackbarProps {
actuallyGoBack?: boolean;
}
export const Backbar: React.FC<BackbarProps> = ({
children,
actuallyGoBack,
}) => {
const history = useHistory();
return (
<div className={`sticky top-0 z-10 flex py-4 mb-12 border-b border-simple-gray-80 bg-simple-gray-26 h-20`}>
{actuallyGoBack ? (
<button
className={`hover:bg-blue-700 px-2`}
onClick={() => {
history.goBack();
}}
>
<ArrowLeft color="#fff" size={30} />
</button>
) : (
<button
className={`hover:bg-blue-700 px-2`}
onClick={() => {
history.push("/");
}}
>
<img className={`w-12`} src={DogeHouse} alt="dogehouse" />
</button>
)}
{children}
</div>
);
};
import React, { useState } from "react";
import { useMicPermErrorStore } from "../../webrtc/stores/useMicPermErrorStore";
import { sendVoice } from "../../webrtc/utils/sendVoice";
import { isIOS } from "../utils/isIOS";
import { Button } from "./Button";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface MicPermissionBannerProps {}
export const MicPermissionBanner: React.FC<MicPermissionBannerProps> = () => {
const { error, set } = useMicPermErrorStore();
const [count, setCount] = useState(0);
const { t } = useTypeSafeTranslation();
if (!error) {
return null;
}
return (
<div className={`p-4 bg-simple-gray-3c`}>
<div className={`font-semibold text-xl mb-4 bg-red-400`}>
{t("components.micPermissionBanner.permissionDenied")}
</div>
<div className="flex space-x-2">
<Button color="secondary" onClick={() => set({ error: false })}>
{t("components.micPermissionBanner.dismiss")}
</Button>
<Button
onClick={() => {
if (count < 2 && !isIOS()) {
sendVoice();
setCount((c) => c + 1);
} else {
window.location.reload();
}
}}
>
{t("components.micPermissionBanner.tryAgain")}
</Button>
</div>
</div>
);
};
import React, { useState } from "react";
import {
MessageSquare,
Mic,
MicOff,
PhoneMissed,
Settings,
UserPlus,
} from "react-feather";
import { useQueryClient } from "react-query";
import { useHistory, useLocation } from "react-router-dom";
import { wsend, wsFetch } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { useMuteStore } from "../../webrtc/stores/useMuteStore";
import { useCurrentRoomInfo } from "../atoms";
import { RoomChat } from "../modules/room-chat/RoomChat";
import { useRoomChatMentionStore } from "../modules/room-chat/useRoomChatMentionStore";
import { useRoomChatStore } from "../modules/room-chat/useRoomChatStore";
import { useShouldFullscreenChat } from "../modules/room-chat/useShouldFullscreenChat";
import { PaginatedBaseUsers } from "../types";
import { GET_BLOCKED_FROM_ROOM_USERS } from "./BlockedFromRoomUsers";
import { modalConfirm } from "./ConfirmModal";
import { Footer } from "./Footer";
import { RoomSettingsModal } from "./RoomSettingsModal";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
import { KeybindListener } from './KeybindListener';
interface BottomVoiceControlProps {}
const iconSize = 24;
const iconColor = "#8C8C8C";
const buttonStyle = `px-2.5 text-simple-gray-8c text-sm flex-1`;
export const BottomVoiceControl: React.FC<BottomVoiceControlProps> = ({
children,
}) => {
const queryClient = useQueryClient();
const location = useLocation();
const history = useHistory();
const { currentRoom } = useCurrentRoomStore();
const { muted, setMute } = useMuteStore();
const { canSpeak, isCreator } = useCurrentRoomInfo();
const [settingsOpen, setSettingsOpen] = useState(false);
const [toggleOpen, newUnreadMessages] = useRoomChatStore((s) => [
s.toggleOpen,
s.newUnreadMessages,
]);
const { iAmMentioned } = useRoomChatMentionStore();
const fullscreenChatOpen = useShouldFullscreenChat();
const buttons = [];
const { t } = useTypeSafeTranslation();
if (currentRoom) {
buttons.push(
<button
className={buttonStyle}
key="leave-room"
onClick={() => {
modalConfirm(
t("components.bottomVoiceControl.confirmLeaveRoom"),
() => {
wsend({ op: "leave_room", d: {} });
if (location.pathname.startsWith("/room")) {
history.push("/");
}
}
);
}}
title={t("components.bottomVoiceControl.leaveCurrentRoomBtn")}
>
<PhoneMissed
className={`m-auto mb-1`}
size={iconSize}
color={iconColor}
/>
{t("components.bottomVoiceControl.leave")}
</button>,
<button
className={buttonStyle}
key="chat"
onClick={() => {
toggleOpen();
}}
>
<div className={`flex justify-center`}>
<div className={`relative`}>
<MessageSquare
className={`m-auto mb-1`}
size={iconSize}
color={iconColor}
/>
{newUnreadMessages ? (
<span
className={`absolute rounded-full w-2.5 h-2.5`}
style={{
backgroundColor: iAmMentioned ? "#ff3c00" : "#FF9900",
right: -2,
top: -1,
}}
/>
) : null}
</div>
</div>
Chat
</button>,
<button
className={buttonStyle}
key="invite"
onClick={() => {
wsend({ op: "fetch_invite_list", d: { cursor: 0 } });
history.push("/invite");
}}
title={t("components.bottomVoiceControl.inviteUsersToRoomBtn")}
>
<UserPlus className={`m-auto mb-1`} size={iconSize} color={iconColor} />
{t("components.bottomVoiceControl.invite")}
</button>
);
if (isCreator || canSpeak) {
buttons.push(
<button
className={buttonStyle}
key="mute"
onClick={() => {
wsend({
op: "mute",
d: { value: !muted },
});
setMute(!muted);
}}
title={t("components.bottomVoiceControl.toggleMuteMicBtn")}
>
{muted ? (
<MicOff
className={`m-auto mb-1`}
size={iconSize}
color={iconColor}
/>
) : (
<Mic className={`m-auto mb-1`} size={iconSize} color={iconColor} />
)}
{muted
? t("components.bottomVoiceControl.unmute")
: t("components.bottomVoiceControl.mute")}
</button>
);
}
if (isCreator) {
buttons.push(
<button
className={buttonStyle}
key="to-public-room"
onClick={() => {
queryClient.prefetchQuery(
[GET_BLOCKED_FROM_ROOM_USERS, 0],
() =>
wsFetch<PaginatedBaseUsers>({
op: GET_BLOCKED_FROM_ROOM_USERS,
d: { offset: 0 },
}),
{ staleTime: 0 }
);
setSettingsOpen(true);
}}
title={t("components.bottomVoiceControl.makeRoomPublicBtn")}
>
<Settings
className={`m-auto mb-1`}
size={iconSize}
color={iconColor}
/>
{t("components.bottomVoiceControl.settings")}
</button>
);
}
}
return (
<>
<RoomSettingsModal
open={settingsOpen}
onRequestClose={() => setSettingsOpen(false)}
/>
<div
className={`${
fullscreenChatOpen
? `fixed top-0 left-0 right-0 flex-col flex h-full`
: `sticky`
} bottom-0 w-full`}
>
{fullscreenChatOpen ? null : children}
<RoomChat sidebar={false} />
{currentRoom &&
!fullscreenChatOpen &&
!location.pathname.startsWith("/room") ? (
<button
onClick={() => history.push(`/room/${currentRoom.id}`)}
className={`bg-simple-gray-26 py-5 px-10 w-full flex`}
>
<span
className={`text-simple-gray-a6 overflow-hidden overflow-ellipsis font-semibold`}
>
{currentRoom.name}{" "}
</span>
<span className={`text-blue-500 ml-2`}>
{canSpeak
? t("components.bottomVoiceControl.speaker")
: t("components.bottomVoiceControl.listener")}
</span>
</button>
) : null}
<div
className={`border-simple-gray-80 bg-simple-gray-26 border-t w-full mt-auto p-5`}
>
{currentRoom ? (
<>
<KeybindListener />
<div className={`flex justify-around`}>{buttons}</div>
</>
) : (
<div className={`px-5`}>
<Footer />
</div>
)}
</div>
</div>
</>
);
};
import * as React from "react";
import { Modal } from "./Modal";
import create from "zustand";
import { combine } from "zustand/middleware";
import { Button } from "./Button";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface Props {}
const useAlertModalStore = create(
combine(
{
message: "",
isOpen: false,
},
(set) => ({
close: () => set({ isOpen: false, message: "" }),
set,
})
)
);
export const modalAlert = (message: string) => {
useAlertModalStore.getState().set({ isOpen: true, message });
};
export const AlertModal: React.FC<Props> = () => {
const { isOpen, message, close } = useAlertModalStore();
const { t } = useTypeSafeTranslation();
return (
<Modal isOpen={isOpen} onRequestClose={() => close()}>
<div>{message}</div>
<form
onSubmit={(e) => {
e.preventDefault();
close();
}}
>
<div className={`flex mt-12`}>
<Button type="submit">{t("common.ok")}</Button>
</div>
</form>
</Modal>
);
};
import React from "react";
interface VolumeSliderProps {
label?: boolean;
max?: string;
volume: number;
onVolume: (n: number) => void;
}
export const VolumeSlider: React.FC<VolumeSliderProps> = ({
label,
max = "100",
volume,
onVolume,
}) => {
return (
<div>
{label ? "volume: " : ""}
{volume}
<input
type="range"
min="1"
max={max}
value={volume}
onChange={(e) => {
const n = parseInt(e.target.value);
onVolume(n);
}}
/>
</div>
);
};
import React from "react";
import ReactModal from "react-modal";
import { wsend } from "../../createWebsocket";
import {
RoomChatMessage,
useRoomChatStore,
} from "../modules/room-chat/useRoomChatStore";
import { Codicon } from "../svgs/Codicon";
import { CurrentRoom, RoomUser } from "../types";
import { Button } from "./Button";
import { modalConfirm } from "./ConfirmModal";
import { UserProfile } from "./UserProfile";
import { UserVolumeSlider } from "./UserVolumeSlider";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface ProfileModalProps {
onClose: () => void;
profile: RoomUser | null | undefined;
isMe: boolean;
iAmCreator: boolean;
iAmMod: boolean;
room: CurrentRoom;
messageToBeDeleted?: RoomChatMessage | null;
}
const customStyles = {
overlay: {
backgroundColor: "rgba(0,0,0,.5)",
zIndex: 999,
},
content: {
top: "50%",
left: "50%",
right: "auto",
bottom: "auto",
marginRight: "-50%",
transform: "translate(-50%, -50%)",
backgroundColor: "#3c3c3c",
border: "none",
width: "100%",
maxWidth: 500,
},
};
export const ProfileModal: React.FC<ProfileModalProps> = ({
profile,
onClose,
isMe,
iAmCreator,
iAmMod,
room,
messageToBeDeleted,
}) => {
const bannedUserIdMap = useRoomChatStore((s) => s.bannedUserIdMap);
const { t } = useTypeSafeTranslation();
return (
<ReactModal
isOpen={!!profile}
contentLabel="profile"
style={customStyles}
onRequestClose={() => onClose()}
>
{profile ? (
<>
<div className={`mb-4 flex`}>
<button
onClick={() => {
onClose();
}}
className={`p-2 -ml-2`}
>
<Codicon width={24} height={24} name="close" />
</button>
{iAmCreator && !isMe ? (
<div className={`ml-auto`}>
<Button
variant="small"
onClick={() => {
modalConfirm(
t("components.modals.profileModal.blockUserConfirm"),
() => {
onClose();
wsend({
op: "block_user_and_from_room",
d: {
userId: profile.id,
},
});
}
);
}}
>
{t("components.modals.profileModal.blockUser")}
</Button>
</div>
) : null}
</div>
{/* Profile */}
<UserProfile profile={profile} />
{/* User volume */}
{!isMe && profile.roomPermissions?.isSpeaker ? (
<div className={`mb-4`}>
<UserVolumeSlider userId={profile.id} />
</div>
) : null}
{/* Make mod button */}
{!isMe && iAmCreator ? (
<>
<div className={`mb-4`}>
<Button
onClick={() => {
onClose();
wsend({
op: "change_mod_status",
d: {
userId: profile.id,
value: !profile.roomPermissions?.isMod,
},
});
}}
>
{profile.roomPermissions?.isMod
? t("components.modals.profileModal.unmod")
: t("components.modals.profileModal.makeMod")}
</Button>
</div>
</>
) : null}
{/* Add speaker button */}
{!isMe && (iAmCreator || iAmMod) && profile.id !== room.creatorId ? (
<>
{!profile.roomPermissions?.isSpeaker &&
profile.roomPermissions?.askedToSpeak ? (
<div className={`mb-4`}>
<Button
onClick={() => {
onClose();
wsend({
op: "add_speaker",
d: {
userId: profile.id,
},
});
}}
>
{t("components.modals.profileModal.addAsSpeaker")}
</Button>
</div>
) : null}
{/* Set listener */}
{profile.roomPermissions?.isSpeaker ? (
<div className={`mb-4`}>
<Button
onClick={() => {
onClose();
wsend({
op: "set_listener",
d: {
userId: profile.id,
},
});
}}
>
{t("components.modals.profileModal.moveToListener")}
</Button>
</div>
) : null}
{/* Ban from chat */}
{!(profile.id in bannedUserIdMap) ? (
<div className={`mb-4`}>
<Button
onClick={() => {
onClose();
wsend({
op: "ban_from_room_chat",
d: {
userId: profile.id,
},
});
}}
>
{t("components.modals.profileModal.banFromChat")}
</Button>
</div>
) : null}
{/* Block from room */}
<div className="mb-4">
<Button
onClick={() => {
onClose();
wsend({
op: "block_from_room",
d: {
userId: profile.id,
},
});
}}
>
{t("components.modals.profileModal.banFromRoom")}
</Button>
</div>
</>
) : null}
{isMe &&
!iAmCreator &&
(profile.roomPermissions?.askedToSpeak ||
profile.roomPermissions?.isSpeaker) ? (
<div className={`mb-4`}>
<Button
onClick={() => {
onClose();
wsend({
op: "set_listener",
d: {
userId: profile.id,
},
});
}}
>
{t("components.modals.profileModal.goBackToListener")}
</Button>
</div>
) : null}
{/* Delete message */}
{messageToBeDeleted ? (
<Button
color="red"
onClick={() => {
wsend({
op: "delete_room_chat_message",
d: {
messageId: messageToBeDeleted.id,
userId: messageToBeDeleted.userId,
},
});
!onClose || onClose();
}}
>
{t("components.modals.profileModal.deleteMessage")}
</Button>
) : null}
</>
) : null}
</ReactModal>
);
};
import React from "react";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
import { LanguageSelector } from "./LanguageSelector";
import { RegularAnchor } from "./RegularAnchor";
interface FooterProps {
isLogin?: boolean;
}
export const Footer: React.FC<FooterProps> = ({ isLogin }) => {
const { t } = useTypeSafeTranslation();
return (
<div className={`justify-between flex text-center`}>
{isLogin ? (
<RegularAnchor href="https://www.youtube.com/watch?v=hy-EhJ_tTQo">
{t("footer.link_1")}
</RegularAnchor>
) : null}
<RegularAnchor href="https://discord.gg/wCbKBZF9cV">
{t("footer.link_2")}
</RegularAnchor>
<RegularAnchor href="https://github.com/benawad/dogehouse/issues">
{t("footer.link_3")}
</RegularAnchor>
{/* cramps footer on mobile @todo think about how to incorporate this without cramping footer and making the footer really tall */}
{/* <RegularAnchor
href="https://github.com/benawad/dogehouse/blob/prod/CHANGELOG.md"
target="_blank"
rel="noreferrer"
>
What's new?
</RegularAnchor> */}
<LanguageSelector />
</div>
);
};
import React from "react";
import { CenterLayout } from "./CenterLayout";
import { RegularAnchor } from "./RegularAnchor";
import { Wrapper } from "./Wrapper";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface DeviceNotSupportedProps {}
export const DeviceNotSupported: React.FC<DeviceNotSupportedProps> = ({}) => {
const { t } = useTypeSafeTranslation();
return (
<div className="flex items-center h-full justify-around">
<CenterLayout>
<Wrapper>
<div className={`mb-4 mt-8 text-xl`}>
{t("components.deviceNotSupported.notSupported")}{" "}
<RegularAnchor href="https://github.com/benawad/dogehouse/issues">
{t("components.deviceNotSupported.linkText")}
</RegularAnchor>{" "}
{t("components.deviceNotSupported.addSupport")}
</div>
</Wrapper>
</CenterLayout>
</div>
);
};
import { useAtom } from "jotai";
import React, { useCallback, useEffect, useState } from "react";
import { volumeAtom } from "../shared-atoms";
import { useMicIdStore } from "../shared-stores";
import { Button } from "./Button";
import { MuteKeybind, PTTKeybind, ChatKeybind } from "./keyboard-shortcuts";
import { VolumeSlider } from "./VolumeSlider";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface VoiceSettingsProps {}
export const VoiceSettings: React.FC<VoiceSettingsProps> = () => {
const { micId, setMicId } = useMicIdStore();
const [volume, setVolume] = useAtom(volumeAtom);
const [devices, setDevices] = useState<Array<{ id: string; label: string }>>(
[]
);
const fetchMics = useCallback(() => {
navigator.mediaDevices.getUserMedia({ audio: true }).then(() => {
navigator.mediaDevices
?.enumerateDevices()
.then((devices) =>
setDevices(
devices
.filter(
(device) => device.kind === "audioinput" && device.deviceId
)
.map((device) => ({ id: device.deviceId, label: device.label }))
)
);
});
}, []);
const { t } = useTypeSafeTranslation();
useEffect(() => {
fetchMics();
}, [fetchMics]);
return (
<>
<div className={`mb-2`}>{t("pages.voiceSettings.mic")} </div>
{devices.length ? (
<select
className={`mb-4`}
value={micId}
onChange={(e) => setMicId(e.target.value)}
>
{devices.map(({ id, label }) => (
<option key={id} value={id}>
{label}
</option>
))}
</select>
) : (
<div className={`mb-4`}>{t("pages.voiceSettings.permissionError")}</div>
)}
<div>
<Button
variant="small"
onClick={() => {
fetchMics();
}}
>
{t("pages.voiceSettings.refresh")}
</Button>
</div>
<div className={`mt-8 mb-2`}>{t("pages.voiceSettings.volume")} </div>
<div className={`mb-8`}>
<VolumeSlider volume={volume} onVolume={(n) => setVolume(n)} />
</div>
<MuteKeybind className={`mb-4`} />
<PTTKeybind className={`mb-4`} />
<ChatKeybind />
</>
);
};
import React from "react";
interface PageWrapperProps {}
export const PageWrapper: React.FC<PageWrapperProps> = ({ children }) => {
return (
<div className={`mx-auto max-w-5xl w-full h-full flex relative`}>
{children}
</div>
);
};
import React, { useMemo } from "react";
import { GlobalHotKeys } from "react-hotkeys";
import { wsend } from "../../createWebsocket";
import { useKeyMapStore } from "../../webrtc/stores/useKeyMapStore";
import { useMuteStore } from "../../webrtc/stores/useMuteStore";
import { useRoomChatStore } from "../modules/room-chat/useRoomChatStore";
interface KeybindListenerProps {}
export const KeybindListener: React.FC<KeybindListenerProps> = ({}) => {
const { keyMap } = useKeyMapStore();
const [toggleOpen, newUnreadMessages] = useRoomChatStore((s) => [
s.toggleOpen,
s.newUnreadMessages,
]);
return (
<GlobalHotKeys
allowChanges={true}
keyMap={keyMap}
handlers={useMemo(
() => ({
MUTE: () => {
const { muted, setMute } = useMuteStore.getState();
wsend({
op: "mute",
d: { value: !muted },
});
setMute(!muted);
},
PTT: (e) => {
if (!e) return;
const { setMute } = useMuteStore.getState();
const mute = e.type === "keyup";
wsend({
op: "mute",
d: { value: mute },
});
setMute(mute);
},
CHAT: toggleOpen,
}),
[]
)}
/>
);
};
import * as React from "react";
import { Modal } from "./Modal";
import create from "zustand";
import { combine } from "zustand/middleware";
import { Button } from "./Button";
import { Input } from "./Input";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface Props {}
type Fn = (v: string) => void;
const usePromptModalStore = create(
combine(
{
message: "",
value: "",
onConfirm: undefined as undefined | Fn,
},
(set) => ({
close: () => set({ onConfirm: undefined, message: "", value: "" }),
set,
})
)
);
export const modalPrompt = (
message: string,
onConfirm: Fn,
defaultValue = ""
) => {
usePromptModalStore
.getState()
.set({ onConfirm, message, value: defaultValue });
};
export const PromptModal: React.FC<Props> = () => {
const { onConfirm, message, close, value, set } = usePromptModalStore();
const { t } = useTypeSafeTranslation();
return (
<Modal isOpen={!!onConfirm} onRequestClose={() => close()}>
<div className={`mb-4`}>{message}</div>
<form
onSubmit={(e) => {
e.preventDefault();
close();
onConfirm?.(value);
}}
>
<Input
autoFocus
value={value}
onChange={(e) => set({ value: e.target.value })}
/>
<div className={`flex mt-12`}>
<Button
type="button"
onClick={close}
className={`mr-3`}
color="secondary"
>
{t("common.cancel")}
</Button>
<Button type="submit" className={`ml-3`}>
{t("common.ok")}
</Button>
</div>
</form>
</Modal>
);
};
import React from "react";
import { wsend } from "../../createWebsocket";
import { CurrentRoom, BaseUser, RoomUser } from "../types";
import { UserNode } from "./UserNode";
interface RoomUserNodeProps {
u: RoomUser;
me?: BaseUser | null;
profile?: BaseUser | null;
room: CurrentRoom;
setUserProfileId: (s: string) => void;
muted: boolean;
}
export const RoomUserNode: React.FC<RoomUserNodeProps> = ({
u,
room,
me,
profile,
muted,
setUserProfileId,
}) => {
const isCreator = u.id === room.creatorId;
const isSpeaker = !!u.roomPermissions?.isSpeaker;
const canSpeak = isCreator || isSpeaker;
const isMuted = me?.id === u.id ? muted : room.muteMap[u.id];
return (
<UserNode
u={u}
isMuted={canSpeak && isMuted}
isCreator={isCreator}
isSpeaking={
canSpeak && u.id in room.activeSpeakerMap && !room.muteMap[u.id]
}
isMod={!!u.roomPermissions?.isMod}
isSpeaker={isSpeaker}
onClick={() => {
if (u.id === profile?.id) {
setUserProfileId("");
} else {
if (
(u.youAreFollowing === undefined || u.youAreFollowing === null) &&
me?.id !== u.id
) {
wsend({ op: "follow_info", d: { userId: u.id } });
}
setUserProfileId(u.id);
}
}}
/>
);
};
import { useField } from "formik";
import React from "react";
import { Input } from "../Input";
import { InputErrorMsg } from "../InputErrorMsg";
export const InputField: React.FC<
React.DetailedHTMLProps<
React.InputHTMLAttributes<HTMLInputElement>,
HTMLInputElement
> & {
name: string;
errorMsg?: string;
label?: string;
textarea?: boolean;
altErrorMsg?: string;
}
> = ({ label, textarea, errorMsg, ref: _, ...props }) => {
const [field, meta] = useField(props);
return (
<div>
{label ? <div className={`mb-2`}>{label}</div> : null}
<Input textarea={textarea} {...field} {...props} />
{meta.error && meta.touched ? (
<div className={`mt-1`}>
<InputErrorMsg>{errorMsg || meta.error}</InputErrorMsg>
</div>
) : null}
</div>
);
};
import React from "react";
interface FieldSpacerProps {}
export const FieldSpacer: React.FC<FieldSpacerProps> = ({}) => {
return <div className={`my-6`} />;
};
import React, { useState } from "react";
interface AvatarProps {
src: string;
size?: number;
active?: boolean;
circle?: boolean;
usernameForErrorImg?: string;
className?: string;
isOnline?: boolean;
}
export const Avatar: React.FC<AvatarProps> = ({
src,
size = 70,
active,
circle,
usernameForErrorImg,
className,
isOnline,
}) => {
const [error, setError] = useState(false);
return (
<div className="relative inline-block">
<img
alt="avatar"
onError={() => setError(true)}
width={size}
height={size}
style={active ? { boxShadow: "0 0 0 3px #60A5FA" } : undefined}
className={`${circle ? `rounded-full` : `rounded-3xl`} ${className}`}
src={
error && usernameForErrorImg
? `https://ui-avatars.com/api/?name=${usernameForErrorImg}`
: src
}
/>
{isOnline ? (
<span className="rounded-full w-4 h-4 bg-green-500 absolute right-0 bottom-0"></span>
) : null}
</div>
);
};
import React from "react";
import { useTranslation } from "react-i18next";
interface LanguageSelectorProps {
options?: Array<{ value: string; label: string }>;
}
export const LanguageSelector: React.FC<LanguageSelectorProps> = ({
options = [
{ value: "en", label: "en" },
{ value: "de", label: "de" },
{ value: "es", label: "es" },
{ value: "fr", label: "fr" },
{ value: "he", label: "he" },
{ value: "hu", label: "hu" },
{ value: "nb", label: "nb" },
{ value: "pt-BR", label: "pt-br" },
{ value: "pt-PT", label: "pt-pt" },
{ value: "tr", label: "tr" },
{ value: "zh-CN", label: "zh-cn" }
],
}) => {
const { i18n } = useTranslation();
return (
<select
value={i18n.language}
onChange={(e) => {
i18n.changeLanguage(e.target.value);
}}
>
{options.map((o) => (
<option key={o.value} value={o.value}>
{o.label}
</option>
))}
</select>
);
};
import { Form, Formik } from "formik";
import React from "react";
import { useHistory } from "react-router-dom";
import { wsend, wsFetch } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { useRoomChatStore } from "../modules/room-chat/useRoomChatStore";
import { roomToCurrentRoom } from "../utils/roomToCurrentRoom";
import { showErrorToast } from "../utils/showErrorToast";
import { Button } from "./Button";
import { InputField } from "./form-fields/InputField";
import { Modal } from "./Modal";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface CreateRoomModalProps {
onRequestClose: () => void;
name?: string;
description?: string;
isPrivate?: boolean;
edit?: boolean;
}
export const CreateRoomModal: React.FC<CreateRoomModalProps> = ({
onRequestClose,
name: currentName,
description: currentDescription,
isPrivate,
edit,
}) => {
const { t } = useTypeSafeTranslation();
const history = useHistory();
return (
<Modal isOpen onRequestClose={onRequestClose}>
<Formik<{
name: string;
privacy: string;
description: string;
}>
initialValues={{
name: currentName || "",
description: currentDescription || "",
privacy: isPrivate ? "private" : "public",
}}
validateOnChange={false}
validateOnBlur={false}
validate={({ name, description }) => {
const errors: Record<string, string> = {};
if (name.length < 2 || name.length > 60) {
return {
name: t("components.modals.createRoomModal.nameError"),
};
} else if (description.length > 500) {
return {
description: t(
"components.modals.createRoomModal.descriptionError"
),
};
}
return errors;
}}
onSubmit={async ({ name, privacy, description }) => {
const resp = await wsFetch<any>({
op: edit ? "edit_room" : "create_room",
d: { name, privacy, description },
});
if (resp.error) {
showErrorToast(resp.error);
return;
} else if (resp.room) {
const { room } = resp;
console.log("new room voice server id: " + room.voiceServerId);
useRoomChatStore.getState().clearChat();
wsend({ op: "get_current_room_users", d: {} });
history.push("/room/" + room.id);
useCurrentRoomStore
.getState()
.setCurrentRoom(() => roomToCurrentRoom(room));
}
onRequestClose();
}}
>
{({ setFieldValue, values, isSubmitting }) => (
<Form>
<InputField
name="name"
maxLength={60}
placeholder={t("components.modals.createRoomModal.roomName")}
autoFocus
/>
<div className="mt-3">
<InputField
name="description"
maxLength={500}
placeholder={t(
"components.modals.createRoomModal.roomDescription"
)}
textarea
/>
</div>
<div className={`grid mt-8 items-start grid-cols-1`}>
<select
className={`border border-simple-gray-3c`}
value={values.privacy}
onChange={(e) => {
const v = e.target.value;
setFieldValue("privacy", v);
}}
>
<option value="public" className={`bg-simple-gray-3c`}>
{t("components.modals.createRoomModal.public")}
</option>
<option value="private" className={`bg-simple-gray-3c`}>
{t("components.modals.createRoomModal.private")}
</option>
</select>
</div>
<div className={`flex mt-12`}>
<Button
type="button"
onClick={onRequestClose}
className={`mr-1.5`}
color="secondary"
>
{t("common.cancel")}
</Button>
<Button loading={isSubmitting} type="submit" className={`ml-1.5`}>
{t("common.ok")}
</Button>
</div>
</Form>
)}
</Formik>
</Modal>
);
};
import React from "react";
export const CenterLayout: React.FC = ({ children }) => {
return (
<div
className={`max-w-screen-sm mx-auto w-full h-full flex flex-col relative`}
>
{children}
</div>
);
};
import React, { useEffect } from "react";
import { useMuteStore } from "../../webrtc/stores/useMuteStore";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
interface MuteTitleUpdaterProps {}
export const MuteTitleUpdater: React.FC<MuteTitleUpdaterProps> = ({}) => {
const { muted } = useMuteStore();
const { currentRoom } = useCurrentRoomStore();
const { t } = useTypeSafeTranslation();
useEffect(() => {
if (muted && currentRoom) {
document.title = t("header.mutedTitle");
} else {
document.title = t("header.title");
}
}, [muted, t, currentRoom]);
return null;
};
import React, { useEffect, useMemo, useRef, useState } from "react";
import makeUrls, { CalendarEvent } from "./makeUrls";
type CalendarURLs = ReturnType<typeof makeUrls>;
const useAutoFocus = () => {
const elementRef = useRef<HTMLElement>(null);
useEffect(() => {
const previous = document.activeElement;
const element = elementRef.current;
if (element) {
element.focus();
}
if (previous instanceof HTMLElement) {
return () => previous.focus();
}
return undefined;
}, []);
return elementRef;
};
type OpenStateToggle = (event?: React.MouseEvent) => void;
const useOpenState = (initialOpen: boolean): [boolean, OpenStateToggle] => {
const [open, setOpen] = useState<boolean>(initialOpen);
const onToggle = () => setOpen((current) => !current);
useEffect(() => {
if (open) {
const onClose = () => setOpen(false);
document.addEventListener("click", onClose);
return () => document.removeEventListener("click", onClose);
}
return undefined;
}, [open, setOpen]);
return [open, onToggle];
};
type CalendarRef = HTMLAnchorElement;
type CalendarProps = {
children: React.ReactNode;
filename?: string;
href: string;
};
const Calendar = React.forwardRef<CalendarRef, CalendarProps>(
({ children, filename = false, href }, ref) => (
<a
ref={ref}
download={filename}
href={href}
target="_blank"
rel="noopener noreferrer"
>
{children}
</a>
)
);
type DropdownProps = {
filename: string;
onToggle: OpenStateToggle;
urls: CalendarURLs;
};
const Dropdown: React.FC<DropdownProps> = ({ filename, onToggle, urls }) => {
const ref = useAutoFocus() as React.RefObject<HTMLAnchorElement>;
const onKeyDown = (event: React.KeyboardEvent) => {
if (event.key === "Escape") {
onToggle();
}
};
return (
<div
className="chq-atc--dropdown"
onKeyDown={onKeyDown}
role="presentation"
>
<Calendar href={urls.ics} filename={filename} ref={ref}>
Apple Calendar
</Calendar>
<Calendar href={urls.google}>Google</Calendar>
<Calendar href={urls.ics} filename={filename}>
Outlook
</Calendar>
<Calendar href={urls.outlook}>Outlook Web App</Calendar>
<Calendar href={urls.yahoo}>Yahoo</Calendar>
</div>
);
};
type AddToCalendarProps = {
event: CalendarEvent;
open?: boolean;
filename?: string;
};
const AddToCalendar: React.FC<AddToCalendarProps> = ({
children = "Add to My Calendar",
event,
filename = "download",
open: initialOpen = false,
}) => {
const [open, onToggle] = useOpenState(initialOpen);
const urls = useMemo<CalendarURLs>(() => makeUrls(event), [event]);
return (
<div className="chq-atc">
{event && (
<button
type="button"
className="chq-atc--button inline"
onClick={onToggle}
>
<svg
className="chq-atc--button-svg"
width="20px"
height="20px"
viewBox="0 0 1024 1024"
>
<path d="M704 192v-64h-32v64h-320v-64h-32v64h-192v704h768v-704h-192z M864 864h-704v-480h704v480z M864 352h-704v-128h160v64h32v-64h320v64h32v-64h160v128z" />
</svg>{" "}
{children}
</button>
)}
{open && <Dropdown filename={filename} onToggle={onToggle} urls={urls} />}
</div>
);
};
export default AddToCalendar;
import * as React from "react";
import AddToCalendar from "./AddToCalendar";
import "../../../css/add-to-calendar-button.css";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
interface ScheduledEvent {
event: ScheduledEventProps;
}
interface ScheduledEventProps {
name: string;
details: string;
location: string;
startsAt: string;
endsAt: string;
}
export const AddToCalendarButton: React.FC<ScheduledEvent> = ({ event }) => {
const { t } = useTypeSafeTranslation();
return (
<AddToCalendar
children={t("components.addToCalendar.add")}
event={event}
filename={event.name}
/>
);
};
import React from "react";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface LoadingProps {}
export const Loading: React.FC<LoadingProps> = () => {
const { t } = useTypeSafeTranslation();
return <div>{t("common.loading")}</div>;
};
import React from "react";
import { Check } from "react-feather";
interface ListItemProps {}
export const ListItem: React.FC<ListItemProps> = ({ children }) => {
return (
<li className={`my-2`}>
<span className={`inline-flex items-center`}>
<Check className={`h-6 w-6`} />
<p className={`ml-3`}>{children}</p>
</span>
</li>
);
};
import React, { useState } from "react";
import { Spinner } from "./Spinner";
import "../../css/doge-button.css";
export const Button: React.FC<
React.DetailedHTMLProps<
React.ButtonHTMLAttributes<HTMLButtonElement>,
HTMLButtonElement
> & {
variant?: "default" | "small" | "slim" | "follow";
color?: "default" | "red" | "secondary";
loading?: boolean;
dogeProbability?: number;
}
> = ({
children,
loading,
disabled,
color = "default",
variant = "default",
dogeProbability,
...props
}) => {
const [hasDoge, setHasDoge] = useState(false);
const [dogeXAnchor, setDogeXAnchor] = useState(0);
const [dogeHideTimeout, setDogeHideTimeout] = useState<NodeJS.Timeout | null>(
null
);
const [useTopDoge, setUseTopDoge] = useState(false);
const [useGlassesDoge, setUseGlassesDoge] = useState(false);
const maybeShowDoge = () => {
if (hasDoge) return;
if (dogeHideTimeout) {
clearTimeout(dogeHideTimeout);
setDogeHideTimeout(null);
setHasDoge(true);
} else if ((dogeProbability ?? 0) > Math.random()) {
setDogeXAnchor(Math.random() * 0.8 + 0.1);
setHasDoge(true);
setUseTopDoge(Math.random() < 0.5);
setUseGlassesDoge(Math.random() < 0.2);
}
};
const hideDoge = () => {
if (!hasDoge) return;
setHasDoge(false);
const timeout = setTimeout(() => {
setDogeHideTimeout(null);
}, 200);
setDogeHideTimeout(timeout);
};
const onMouseOver =
(dogeProbability ?? 0) > 0
? (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
maybeShowDoge();
if (props.onMouseOver) props.onMouseOver(event);
}
: props.onMouseOver;
const onMouseLeave =
(dogeProbability ?? 0) > 0
? (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {
hideDoge();
if (props.onMouseLeave) props.onMouseLeave(event);
}
: props.onMouseLeave;
return (
<button
{...props}
onMouseOver={onMouseOver}
onMouseLeave={onMouseLeave}
disabled={loading || disabled}
className={`
rounded capitalize outline-none w-full flex items-center justify-center text-center text-white button-fix
${
color === "secondary"
? "bg-simple-gray-3a hover:bg-simple-gray-45"
: color === "red"
? "bg-red-600 hover:bg-red-400"
: "bg-blue-500 hover:bg-blue-400"
}
${
variant === "small"
? "py-1 px-2 w-max"
: variant === "slim"
? "max-w-md ml-auto mr-auto py-2.5 px-12"
: "py-2.5 px-1"
}
${props.className}
`}
>
{loading ? <Spinner /> : null}
{children}
{(dogeProbability ?? 0) > 0 ? (
<>
<div
className={`button-doge button-doge-top ${
hasDoge && useTopDoge ? "button-doge-shown" : ""
} ${useGlassesDoge ? "button-doge-cooler" : ""}`}
style={{
left: `${dogeXAnchor * 100}%`,
}}
/>
<div
className={`button-doge button-doge-bottom ${
hasDoge && !useTopDoge ? "button-doge-shown" : ""
} ${useGlassesDoge ? "button-doge-cooler" : ""}`}
style={{
left: `${dogeXAnchor * 100}%`,
}}
/>
</>
) : (
<></>
)}
</button>
);
};
import React from "react";
import ReactModal from "react-modal";
const customStyles = {
overlay: {
backgroundColor: "rgba(0,0,0,.5)",
zIndex: 999,
},
content: {
top: "50%",
left: "50%",
right: "auto",
bottom: "auto",
marginRight: "-50%",
transform: "translate(-50%, -50%)",
backgroundColor: "#262626",
border: "none",
maxHeight: "80vh",
width: "90%",
maxWidth: 500,
},
};
export const Modal: React.FC<ReactModal["props"]> = ({
children,
...props
}) => {
return (
<ReactModal shouldCloseOnEsc style={customStyles} {...props}>
{children}
</ReactModal>
);
};
import { Formik } from "formik";
import React from "react";
import { useMutation, useQueryClient } from "react-query";
import { object, pattern, size, string } from "superstruct";
import { auth_query, wsMutation } from "../../createWebsocket";
import { BaseUser } from "../types";
import { showErrorToast } from "../utils/showErrorToast";
import { validateStruct } from "../utils/validateStruct";
import { Button } from "./Button";
import { FieldSpacer } from "./form-fields/FieldSpacer";
import { InputField } from "./form-fields/InputField";
import { Modal } from "./Modal";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
const profileStruct = object({
displayName: size(string(), 2, 50),
username: pattern(string(), /^(\w){4,15}$/),
bio: size(string(), 0, 160),
avatarUrl: pattern(
string(),
/https?:\/\/(www\.|)(pbs.twimg.com\/profile_images\/(.*)\.(jpg|png|jpeg|webp)|avatars\.githubusercontent\.com\/u\/)/
),
});
interface Shared {
user: BaseUser;
onRequestClose: () => void;
}
interface EditProfileModalProps extends Shared {
isOpen: boolean;
}
const validateFn = validateStruct(profileStruct);
export const EditProfileModal: React.FC<EditProfileModalProps> = ({
isOpen,
onRequestClose,
user,
}) => {
const { mutateAsync, isLoading } = useMutation(wsMutation);
const queryClient = useQueryClient();
const { t } = useTypeSafeTranslation();
return (
<Modal isOpen={isOpen} onRequestClose={onRequestClose}>
{isOpen ? (
<Formik
initialValues={{
displayName: user.displayName,
username: user.username,
bio: user.bio,
avatarUrl: user.avatarUrl,
}}
validateOnChange={false}
validate={(values) => {
return validateFn({
...values,
displayName: values.displayName.trim(),
});
}}
onSubmit={async (data) => {
const { isUsernameTaken } = ((await mutateAsync({
op: "edit_profile",
d: { data },
})) as unknown) as { isUsernameTaken: boolean };
if (isUsernameTaken) {
showErrorToast(
t("components.modals.editProfileModal.usernameTaken")
);
} else {
queryClient.setQueryData<{ user: BaseUser } | undefined>(
auth_query,
(x) =>
!x
? x
: {
...x,
user: {
...x.user,
...data,
displayName: data.displayName.trim(),
},
}
);
onRequestClose();
}
}}
>
{({ handleSubmit }) => (
<div>
<InputField
errorMsg={t(
"components.modals.editProfileModal.avatarUrlError"
)}
label={t("components.modals.editProfileModal.avatarUrlLabel")}
name="avatarUrl"
/>
<FieldSpacer />
<InputField
errorMsg={t(
"components.modals.editProfileModal.displayNameError"
)}
label={t("components.modals.editProfileModal.displayNameLabel")}
name="displayName"
/>
<FieldSpacer />
<InputField
errorMsg={t("components.modals.editProfileModal.usernameError")}
label={t("components.modals.editProfileModal.usernameLabel")}
name="username"
/>
<FieldSpacer />
<InputField
errorMsg={t("components.modals.editProfileModal.bioError")}
label={t("components.modals.editProfileModal.bioLabel")}
textarea
name="bio"
/>
<div className={`flex mt-12`}>
<Button
type="button"
onClick={onRequestClose}
className={`mr-2`}
color="secondary"
>
{t("common.cancel")}
</Button>
<Button
type="button"
loading={isLoading}
onClick={() => handleSubmit()}
className={`ml-2`}
>
{t("common.save")}
</Button>
</div>
</div>
)}
</Formik>
) : null}
</Modal>
);
};
import React from "react";
interface CheckboxProps {
className?: string;
value?: boolean | undefined;
label?: string;
onChange?: (e?: any) => void;
}
export const Checkbox: React.FC<CheckboxProps> = ({
className,
value,
label,
...props
}) => {
return (
<div className={className}>
<label>
<input type="checkbox" checked={value} {...props} className={`mr-3`} />
{label}
</label>
</div>
);
};
import * as React from "react";
import { History } from "history";
import { Modal } from "./Modal";
import create from "zustand";
import { combine } from "zustand/middleware";
import { Button } from "./Button";
import { Avatar } from "./Avatar";
import { useSoundEffectStore } from "../modules/sound-effects/useSoundEffectStore";
import { wsend } from "../../createWebsocket";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface Props {}
type Fn = () => void;
export type JoinRoomModalType = "invite" | "someone_you_follow_created_a_room";
export type UserPreviewInfo = {
username: string;
displayName: string;
avatarUrl: string;
};
type Options = {
type: JoinRoomModalType;
roomId: string;
roomName: string;
onConfirm: Fn;
} & UserPreviewInfo;
const useConfirmModalStore = create(
combine(
{
options: null as null | Options,
},
(set) => ({
close: () => set({ options: null }),
set,
})
)
);
export const invitedToRoomConfirm = (
options: Omit<Options, "onConfirm">,
history: History
) => {
useSoundEffectStore.getState().playSoundEffect("roomInvite");
useConfirmModalStore.getState().set({
options: {
...options,
onConfirm: () => {
wsend({ op: "join_room", d: { roomId: options.roomId } });
history.push("/room/" + options.roomId);
},
},
});
};
export const InvitedToJoinRoomModal: React.FC<Props> = () => {
const { options, close } = useConfirmModalStore();
const { t } = useTypeSafeTranslation();
return (
<Modal isOpen={!!options} onRequestClose={() => close()}>
{options ? (
<>
<h1 className={`text-2xl mb-2`}>
{options.type === "someone_you_follow_created_a_room"
? t("components.modals.invitedToJoinRoomModal.newRoomCreated")
: t("components.modals.invitedToJoinRoomModal.roomInviteFrom")}
</h1>
<div className={`flex items-center`}>
<Avatar src={options.avatarUrl} />
<div className={`ml-2`}>
<div className={`font-semibold`}>{options.displayName}</div>
<div className={`my-1 flex`}>
<div>@{options.username}</div>
</div>
</div>
</div>
<div className={`mt-4`}>
{options.type === "someone_you_follow_created_a_room"
? t("components.modals.invitedToJoinRoomModal.justStarted")
: t(
"components.modals.invitedToJoinRoomModal.inviteReceived"
)}{" "}
<span className={`font-semibold`}>{options.roomName}</span>
{t("components.modals.invitedToJoinRoomModal.likeToJoin")}
</div>
</>
) : null}
<div className={`flex mt-8`}>
<Button
type="button"
onClick={close}
className={`mr-1.5`}
color="secondary"
>
{t("common.cancel")}
</Button>
<Button
onClick={() => {
close();
options?.onConfirm();
}}
type="submit"
className={`ml-1.5`}
>
{t("common.yes")}
</Button>
</div>
</Modal>
);
};
import React from "react";
import { useConsumerStore } from "../../webrtc/stores/useConsumerStore";
import { VolumeSlider } from "./VolumeSlider";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface UserVolumeSliderProps {
userId: string;
}
export const UserVolumeSlider: React.FC<UserVolumeSliderProps> = ({
userId,
}) => {
const { consumerMap, setVolume } = useConsumerStore();
const consumerInfo = consumerMap[userId];
const { t } = useTypeSafeTranslation();
if (!consumerInfo) {
return <div>{t("components.userVolumeSlider.noAudioMessage")}</div>;
}
return (
<VolumeSlider
label
max="200"
volume={consumerInfo.volume}
onVolume={(n) => setVolume(userId, n)}
/>
);
};
import React from "react";
import "../../css/spinner.css";
interface SpinnerProps {
centered?: boolean
}
export const Spinner: React.FC<SpinnerProps> = ({
centered
}) => {
return (
<svg
className={`${centered && `center-spinner`} animate-spin -ml-1 mr-3 h-5 w-5 text-white`}
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
>
<circle
className={`opacity-25`}
cx="12"
cy="12"
r="10"
stroke="currentColor"
strokeWidth="4"
></circle>
<path
className={`opacity-75`}
fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
></path>
</svg>
);
};
import React from "react";
import { useHistory } from "react-router-dom";
import { useMeQuery } from "../utils/useMeQuery";
import { Avatar } from "./Avatar";
interface ProfileButtonProps {
size?: number;
circle?: boolean;
}
export const ProfileButton: React.FC<ProfileButtonProps> = ({
size = 41,
circle,
}) => {
const { me } = useMeQuery();
const history = useHistory();
return me ? (
<button onClick={() => history.push("/me")} className={`px-2.5`}>
<Avatar circle={circle} size={size} src={me.avatarUrl} />
</button>
) : null;
};
import React from "react";
interface WrapperProps {}
export const Wrapper: React.FC<WrapperProps> = ({ children }) => {
return <div className={`mb-auto`}>{children}</div>;
};
import React from "react";
export const RegularAnchor: React.FC<
React.DetailedHTMLProps<
React.AnchorHTMLAttributes<HTMLAnchorElement>,
HTMLAnchorElement
>
> = ({ children, ...props }) => {
return (
<a {...props} className={`text-blue-400 flex items-center`}>
{children}
</a>
);
};
import React, { forwardRef } from "react";
export const Input = forwardRef<
HTMLInputElement,
React.DetailedHTMLProps<
React.InputHTMLAttributes<HTMLInputElement>,
HTMLInputElement
> & { textarea?: boolean }
>(({ textarea, ...props }, ref) => {
const cn = `w-full py-2 px-3 text-white bg-simple-gray-3c`;
return textarea ? (
<textarea ref={ref as any} className={cn} {...(props as any)} />
) : (
<input ref={ref} className={cn} {...props} />
);
});
import React, { useEffect, useState } from "react";
import { recordKeyCombination } from "react-hotkeys";
import { useKeyMapStore } from "../../../webrtc/stores/useKeyMapStore";
import { Button } from "../Button";
interface ChatKeybindProps {
className?: string;
}
export const ChatKeybind: React.FC<ChatKeybindProps> = ({ className }) => {
const [count, setCount] = useState(0);
const [active, setActive] = useState(false);
const {
keyNames: { CHAT },
setChatKeybind,
} = useKeyMapStore();
useEffect(() => {
if (count > 0) {
const unsub = recordKeyCombination(({ id }) => {
setActive(false);
setChatKeybind(id as string);
});
return () => unsub();
}
}, [count, setChatKeybind]);
return (
<div className={`flex items-center ${className}`}>
<Button
variant="small"
onClick={() => {
setCount((c) => c + 1);
setActive(true);
}}
>
set keybind
</Button>
<div className={`ml-4`}>
toggle chat keybind:{" "}
<span className={`font-bold text-lg`}>
{active ? "listening" : CHAT}
</span>
</div>
</div>
);
};
import React, { useEffect, useState } from "react";
import { recordKeyCombination } from "react-hotkeys";
import { useKeyMapStore } from "../../../webrtc/stores/useKeyMapStore";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { Button } from "../Button";
interface MuteKeybindProps {
className?: string;
}
export const MuteKeybind: React.FC<MuteKeybindProps> = ({ className }) => {
const [count, setCount] = useState(0);
const [active, setActive] = useState(false);
const { t } = useTypeSafeTranslation();
const {
keyNames: { MUTE },
setMuteKeybind,
} = useKeyMapStore();
useEffect(() => {
if (count > 0) {
const unsub = recordKeyCombination(({ id }) => {
setActive(false);
setMuteKeybind(id as string);
});
return () => unsub();
}
}, [count, setMuteKeybind]);
return (
<div className={`flex items-center ${className}`}>
<Button
variant="small"
onClick={() => {
setCount((c) => c + 1);
setActive(true);
}}
>
{t("components.keyboardShortcuts.setKeybind")}
</Button>
<div className={`ml-4`}>
{t("components.keyboardShortcuts.toggleMuteKeybind")}:{" "}
<span className={`font-bold text-lg`}>
{active ? t("components.keyboardShortcuts.listening") : MUTE}
</span>
</div>
</div>
);
};
import React, { useEffect, useState } from "react";
import { recordKeyCombination } from "react-hotkeys";
import { useKeyMapStore } from "../../../webrtc/stores/useKeyMapStore";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { Button } from "../Button";
interface PTTKeybindProps {
className?: string;
}
export const PTTKeybind: React.FC<PTTKeybindProps> = ({ className }) => {
const [count, setCount] = useState(0);
const [active, setActive] = useState(false);
const { t } = useTypeSafeTranslation();
const {
keyNames: { PTT },
setPTTKeybind,
} = useKeyMapStore();
useEffect(() => {
if (count > 0) {
const unsub = recordKeyCombination(({ id }) => {
setActive(false);
setPTTKeybind(id as string);
});
return () => unsub();
}
}, [count, setPTTKeybind]);
return (
<div className={`flex items-center ${className}`}>
<Button
variant="small"
onClick={() => {
setCount((c) => c + 1);
setActive(true);
}}
>
{t("components.keyboardShortcuts.setKeybind")}
</Button>
<div className={`ml-4`}>
{t("components.keyboardShortcuts.togglePushToTalkKeybind")}:{" "}
<span className={`font-bold text-lg`}>
{active ? t("components.keyboardShortcuts.listening") : PTT}
</span>
</div>
</div>
);
};
import React from "react";
import { useTranslation } from "react-i18next";
import { Route, Switch } from "react-router-dom";
import { ScheduledRoomsPage } from "./modules/scheduled-rooms/ScheduledRoomsPage";
import { ViewScheduledRoomPage } from "./modules/scheduled-rooms/ViewScheduledRoomPage";
import { BanUsersPage } from "./pages/BanUsersPage";
import { FollowingOnlineList } from "./pages/FollowingOnlineList";
import { FollowListPage } from "./pages/FollowListPage";
import { Home } from "./pages/Home";
import { InviteList } from "./pages/InviteList";
import { Login } from "./pages/Login";
import { MyProfilePage } from "./pages/MyProfilePage";
import { NotFoundPage } from "./pages/NotFoundPage";
import { RoomPage } from "./pages/RoomPage";
import { SearchUsersPage } from "./pages/SearchUsersPage";
import { SoundEffectSettingsPage } from "./pages/SoundEffectSettingsPage";
import { ViewUserPage } from "./pages/ViewUserPage";
import { VoiceSettingsPage } from "./pages/VoiceSettingsPage";
import { useMainWsHandler } from "./useMainWsHandler";
import { useTokenStore } from "./utils/useTokenStore";
interface RoutesProps {}
export const Routes: React.FC<RoutesProps> = () => {
const hasTokens = useTokenStore((s) => !!s.accessToken && !!s.refreshToken);
useMainWsHandler();
const [, , ready] = useTranslation();
if (!ready) {
// this could become loading indicator
return null;
}
return (
<Switch>
{/* PUBLIC ROUTES */}
<Route
exact
path="/scheduled-room/:id"
component={ViewScheduledRoomPage}
/>
{/* PRIVATE ROUTES - login required */}
<Route path="/">
{!hasTokens ? (
<Login />
) : (
<Switch>
<Route exact path="/" component={Home} />
<Route
exact
path="/scheduled-rooms"
component={ScheduledRoomsPage}
/>
<Route exact path="/room/:id" component={RoomPage} />
<Route exact path="/user" component={ViewUserPage} />
<Route exact path="/me" component={MyProfilePage} />
<Route exact path="/invite" component={InviteList} />
<Route exact path="/search/users" component={SearchUsersPage} />
<Route exact path="/ban/users" component={BanUsersPage} />
<Route exact path="/voice-settings" component={VoiceSettingsPage} />
<Route
exact
path="/sound-effect-settings"
component={SoundEffectSettingsPage}
/>
<Route
exact
path="/following-online"
component={FollowingOnlineList}
/>
<Route
exact
path={["/followers/:userId", "/following/:userId"]}
component={FollowListPage}
/>
<Route component={NotFoundPage} />
</Switch>
)}
</Route>
</Switch>
);
};
import React, { useEffect } from "react";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { Avatar } from "../../components/Avatar";
import { BaseUser } from "../../types";
import { useMeQuery } from "../../utils/useMeQuery";
import { useRoomChatMentionStore } from "./useRoomChatMentionStore";
import { useRoomChatStore } from "./useRoomChatStore";
interface RoomChatMentionsProps {}
export const RoomChatMentions: React.FC<RoomChatMentionsProps> = ({}) => {
const { currentRoom } = useCurrentRoomStore();
const { me } = useMeQuery();
const { message, setMessage } = useRoomChatStore();
const {
activeUsername,
setActiveUsername,
queriedUsernames,
setQueriedUsernames,
mentions,
setMentions,
} = useRoomChatMentionStore();
function addMention(m: BaseUser) {
setMentions([...mentions, m]);
setMessage(
message.substring(0, message.lastIndexOf("@") + 1) + m.username + " "
);
setQueriedUsernames([]);
// Re-focus input after mention was clicked
document.getElementById("room-chat-input")?.focus();
}
useEffect(() => {
// regex to match mention patterns
const mentionMatches = message.match(/^(?!.*\bRT\b)(?:.+\s)?#?@\w+/i);
// query usernames for matched patterns
if (mentionMatches && me && currentRoom) {
const mentionsList = mentionMatches[0].replace(/@|#/g, "").split(" ");
const useMention = mentionsList[mentionsList.length - 1];
// hide usernames list if user continues typing without selecting
if (message[message.lastIndexOf(useMention) + useMention.length]) {
setQueriedUsernames([]);
} else {
const usernameMatches = currentRoom.users.filter(
({ id, username, displayName }) =>
(username?.toLowerCase().includes(useMention?.toLowerCase()) ||
displayName?.toLowerCase().includes(useMention?.toLowerCase())) &&
!mentions.find((m: BaseUser) => m.id === id) &&
me.id !== id
);
const firstFive = usernameMatches.slice(0, 5);
setQueriedUsernames(firstFive);
if (firstFive.length) setActiveUsername(firstFive[0].id);
}
} else {
// Hide mentions when message is sent
setQueriedUsernames([]);
}
// Remove mention if user deleted text
setMentions(
mentions.filter((u) => {
return message.toLowerCase().indexOf(u.username?.toLowerCase()) !== -1;
})
);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [message]);
if (queriedUsernames.length) {
return (
<div className={`flex flex-col pb-1 bg-simple-gray-26`}>
{queriedUsernames.map((m) => (
<button
className={`flex py-3 items-center px-8 focus:outline-none ${
activeUsername === m.id ? "bg-blue-800" : ""
}`}
key={m.id}
onClick={() => addMention(m)}
>
<span className={`pr-3 inline`}>
<Avatar size={20} src={m.avatarUrl} />
</span>
<p className={`m-0 mt-1`}>
{m.displayName}
{m.displayName !== m.username ? `(${m.username})` : null}
</p>
</button>
))}
</div>
);
}
return <></>;
};
import React, { useState } from "react";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { truncate } from "../../utils/truncate";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
const MAX_COLLAPSED_CHARACTERS = 100;
interface RoomDescriptionProps {}
export const RoomDescription: React.FC<RoomDescriptionProps> = () => {
const [expanded, setExpanded] = useState(false);
const { currentRoom } = useCurrentRoomStore();
const { t } = useTypeSafeTranslation();
return currentRoom?.description ? (
<div className="p-3 rounded-lg m-3 bg-simple-gray-3a">
<p className="text-gray-400 mb-1">
{t("modules.roomChat.roomDescription")}
</p>
<p className="whitespace-pre-wrap break-all">
{expanded
? currentRoom.description
: truncate(currentRoom.description, MAX_COLLAPSED_CHARACTERS)}
<button
className="ml-1 text-blue-400 cursor-pointer hover:text-blue-300"
onClick={() => setExpanded(!expanded)}
>
{currentRoom.description?.length > MAX_COLLAPSED_CHARACTERS
? "show " + (expanded ? "less" : "more")
: null}
</button>
</p>
</div>
) : null;
};
import { Picker } from "emoji-mart";
import "emoji-mart/css/emoji-mart.css";
import React, { useRef, useState } from "react";
import { Smile } from "react-feather";
import { toast } from "react-toastify";
import { wsend } from "../../../createWebsocket";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { modalAlert } from "../../components/AlertModal";
import { Button } from "../../components/Button";
import { Codicon } from "../../svgs/Codicon";
import { createChatMessage } from "../../utils/createChatMessage";
import { useMeQuery } from "../../utils/useMeQuery";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { useRoomChatMentionStore } from "./useRoomChatMentionStore";
import { useRoomChatStore } from "./useRoomChatStore";
interface ChatInputProps {}
export const RoomChatInput: React.FC<ChatInputProps> = () => {
const { message, setMessage } = useRoomChatStore();
const {
setQueriedUsernames,
queriedUsernames,
mentions,
setMentions,
activeUsername,
setActiveUsername,
} = useRoomChatMentionStore();
const { currentRoom } = useCurrentRoomStore();
const { me } = useMeQuery();
const [isEmoji, setIsEmoji] = useState<boolean>(false);
const inputRef = useRef<HTMLInputElement>(null);
const [lastMessageTimestamp, setLastMessageTimestamp] = useState<number>(0);
const { t } = useTypeSafeTranslation();
let position: number = 0;
const navigateThroughQueriedUsers = (e: any) => {
// Use dom method, GlobalHotkeys apparently don't catch arrow-key events on inputs
if (
!["ArrowUp", "ArrowDown", "Enter"].includes(e.code) ||
!queriedUsernames.length
)
return;
e.preventDefault();
let changeToIndex = null;
const activeIndex = queriedUsernames.findIndex(
(username) => username.id === activeUsername
);
if (e.code === "ArrowUp") {
changeToIndex =
activeIndex === 0 ? queriedUsernames.length - 1 : activeIndex - 1;
} else if (e.code === "ArrowDown") {
changeToIndex =
activeIndex === queriedUsernames.length - 1 ? 0 : activeIndex + 1;
} else if (e.code === "Enter") {
const selected = queriedUsernames[activeIndex];
setMentions([...mentions, selected]);
setMessage(
`${message.substring(0, message.lastIndexOf("@") + 1)}${
selected.username
} `
);
setQueriedUsernames([]);
}
// navigate to next/prev mention suggestion item
if (changeToIndex !== null) {
setActiveUsername(queriedUsernames[changeToIndex]?.id);
}
};
const addEmoji = (emoji: any) => {
position =
(position === 0 ? inputRef!.current!.selectionStart : position + 2) || 0;
const newMsg = [
message.slice(0, position),
emoji.native,
message.slice(position),
].join("");
setMessage(newMsg);
};
const handleSubmit = (
e: React.FormEvent<HTMLFormElement> | React.MouseEvent<HTMLButtonElement>
) => {
e.preventDefault();
if (
!message ||
!message.trim() ||
!message.replace(/[\u200B-\u200D\uFEFF]/g, "")
)
return;
if (!me) return;
if (me.id in useRoomChatStore.getState().bannedUserIdMap) {
modalAlert(t("modules.roomChat.bannedAlert"));
return;
}
if (Date.now() - lastMessageTimestamp <= 1000) {
if (!toast.isActive("message-timeout")) {
toast(t("modules.roomChat.waitAlert"), {
toastId: "message-timeout",
type: "warning",
autoClose: 3000,
});
}
return;
}
const tmp = message;
setMessage("");
wsend({
op: "send_room_chat_msg",
d: createChatMessage(tmp, mentions, currentRoom?.users),
});
setQueriedUsernames([]);
setLastMessageTimestamp(Date.now());
};
return (
<form
onSubmit={handleSubmit}
className={`bg-simple-gray-26 pb-5 px-8 pt-1 flex flex-col`}
>
{isEmoji ? (
<Picker
set="apple"
onSelect={(emoji) => {
addEmoji(emoji);
}}
style={{
position: "relative",
width: "100%",
minWidth: "278px",
right: 0,
overflowY: "hidden",
outline: "none",
alignSelf: "flex-end",
margin: "0 0 8px 0",
}}
sheetSize={32}
theme="dark"
emojiTooltip={true}
showPreview={false}
showSkinTones={false}
i18n={{
search: t("modules.roomChat.search"),
categories: {
search: t("modules.roomChat.searchResults"),
recent: t("modules.roomChat.recent"),
},
}}
/>
) : null}
<div className="flex items-stretch">
<div className="flex-1 mr-2 lg:mr-0 items-end">
<input
maxLength={512}
placeholder={t("modules.roomChat.sendMessage")}
value={message}
onChange={(e) => setMessage(e.target.value)}
ref={inputRef}
className={`w-full white bg-simple-gray-59 px-4 py-2 rounded text-lg focus:outline-none pr-12`}
autoComplete="off"
onKeyDown={navigateThroughQueriedUsers}
onFocus={() => {
setIsEmoji(false);
position = 0;
}}
id="room-chat-input"
/>
<div
style={{
color: "rgb(167, 167, 167)",
display: "flex",
marginRight: 13,
marginTop: -35,
flexDirection: "row-reverse",
}}
className={`mt-3 right-12 cursor-pointer`}
onClick={() => {
setIsEmoji(!isEmoji);
position = 0;
}}
>
<Smile style={{ inlineSize: "23px" }}></Smile>
</div>
</div>
{/* Send button (mobile only) */}
<Button
onClick={handleSubmit}
variant="small"
className="lg:hidden"
style={{ padding: "10px 12px" }}
>
<Codicon name="arrowRight" />
</Button>
</div>
</form>
);
};
import React, { useEffect } from "react";
import { useMediaQuery } from "react-responsive";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { RoomChatInput } from "./RoomChatInput";
import { RoomChatList } from "./RoomChatList";
import { RoomChatMentions } from "./RoomChatMentions";
import { RoomDescription } from "./RoomDescription";
import { useRoomChatStore } from "./useRoomChatStore";
interface ChatProps {
sidebar: boolean;
}
export const roomChatMediaQuery = "(min-width: 980px)";
export const RoomChat: React.FC<ChatProps> = ({ sidebar }) => {
const chatShouldBeSidebar = useMediaQuery({ query: roomChatMediaQuery });
const { currentRoom: room } = useCurrentRoomStore();
const [open, reset, toggleOpen] = useRoomChatStore((s) => [
s.open,
s.reset,
s.toggleOpen,
]);
const { t } = useTypeSafeTranslation();
useEffect(() => {
if (!room) {
reset();
}
}, [reset, room]);
if (
!open ||
(!chatShouldBeSidebar && sidebar) ||
(chatShouldBeSidebar && !sidebar)
) {
return null;
}
return (
<div
style={{
width: sidebar ? 340 : "100%",
}}
className={`flex flex-1 w-full overflow-y-auto`}
>
<div
style={{
width: sidebar ? 340 : "100%",
height: sidebar ? "100%" : undefined,
}}
className={`bg-simple-gray-26 flex flex-1 w-full flex-col ${
sidebar ? `fixed bottom-0` : ``
}`}
>
<button
onClick={() => toggleOpen()}
className={`bg-simple-gray-26 border-b border-simple-gray-80 text-white py-4 px-8 text-2xl flex items-center h-20`}
>
{t("modules.roomChat.title")}{" "}
<span className={`ml-2 text-simple-gray-a6`}>
{t("modules.roomChat.emotesSoon")}
</span>
</button>
<RoomDescription />
<RoomChatList />
<RoomChatMentions />
<RoomChatInput />
</div>
</div>
);
};
import normalizeUrl from "normalize-url";
import React, { useEffect, useRef, useState } from "react";
import ReactTooltip from "react-tooltip";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { useCurrentRoomInfo } from "../../atoms";
import { Avatar } from "../../components/Avatar";
import { dateFormat } from "../../utils/dateFormat";
import { useMeQuery } from "../../utils/useMeQuery";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { ProfileModalFetcher } from "./ProfileModalFetcher";
import { useRoomChatMentionStore } from "./useRoomChatMentionStore";
import { RoomChatMessage, useRoomChatStore } from "./useRoomChatStore";
interface ChatListProps {}
export const RoomChatList: React.FC<ChatListProps> = ({}) => {
const [profileId, setProfileId] = useState("");
const messages = useRoomChatStore((s) => s.messages);
const { me } = useMeQuery();
const { currentRoom: room } = useCurrentRoomStore();
const { isMod: iAmMod, isCreator: iAmCreator } = useCurrentRoomInfo();
const [
messageToBeDeleted,
setMessageToBeDeleted,
] = useState<RoomChatMessage | null>(null);
const bottomRef = useRef<null | HTMLDivElement>(null);
const chatListRef = useRef<null | HTMLDivElement>(null);
const {
isRoomChatScrolledToTop,
setIsRoomChatScrolledToTop,
} = useRoomChatStore();
const { t } = useTypeSafeTranslation();
// Only scroll into view if not manually scrolled to top
useEffect(() => {
isRoomChatScrolledToTop || bottomRef.current?.scrollIntoView();
});
return (
<div
className={`bg-simple-gray-26 px-8 pt-8 flex-1 overflow-y-auto flex-col flex chat-message-container`}
ref={chatListRef}
onScroll={() => {
if (!chatListRef.current) return;
const { scrollTop, offsetHeight, scrollHeight } = chatListRef.current;
const isOnBottom = scrollTop + offsetHeight === scrollHeight;
setIsRoomChatScrolledToTop(!isOnBottom);
if (isOnBottom) {
useRoomChatMentionStore.getState().resetIAmMentioned();
}
}}
>
{profileId ? (
<ProfileModalFetcher
userId={profileId}
messageToBeDeleted={messageToBeDeleted}
onClose={() => {
setProfileId("");
setMessageToBeDeleted(null);
}}
/>
) : null}
{messages
.slice()
.reverse()
.map((m) => (
<div
className="flex flex-col flex-shrink-0"
key={m.id}
data-tip={dateFormat(m.sentAt)}
>
{/* Whisper label */}
{m.isWhisper ? (
<p className="mb-0 text-xs text-gray-400 px-2 bg-simple-gray-3a w-16 rounded-t mt-1 text-center">
{t("modules.roomChat.whisper")}
</p>
) : null}
<div
className={`flex items-center px-1 ${
m.isWhisper
? "bg-simple-gray-3a py-1 rounded-b-lg rounded-tr-lg mb-1"
: ""
}`}
>
<div
className={`py-1 block break-words max-w-full items-start flex-1`}
key={m.id}
>
<span className={`pr-2`}>
<Avatar size={20} src={m.avatarUrl} className="inline" />
</span>
<button
onClick={() => {
setProfileId(m.userId);
setMessageToBeDeleted(
(me?.id === m.userId ||
iAmCreator ||
(iAmMod && room?.creatorId !== m.userId)) &&
!m.deleted
? m
: null
);
}}
className={`hover:underline focus:outline-none`}
style={{ textDecorationColor: m.color, color: m.color }}
>
{m.displayName}
</button>
<span className={`mr-1`}>: </span>
{m.deleted ? (
<span className="text-gray-500">
[message{" "}
{m.deleterId === m.userId ? "retracted" : "deleted"}]
</span>
) : (
m.tokens.map(({ t, v }, i) => {
switch (t) {
case "text":
return (
<span className={`flex-1 m-0`} key={i}>
{v}{" "}
</span>
);
case "mention":
return (
<button
onClick={() => {
setProfileId(v);
}}
key={i}
className={`hover:underline flex-1 focus:outline-none ml-1 mr-2 ${
v === me?.username
? "bg-blue-500 text-white px-2 rounded text-md"
: ""
}`}
style={{
textDecorationColor: m.color,
color: v === me?.username ? "" : m.color,
}}
>
@{v}{" "}
</button>
);
case "link":
return (
<a
target="_blank"
rel="noreferrer"
href={v}
className={`flex-1 hover:underline text-blue-500`}
key={i}
>
{normalizeUrl(v, { stripProtocol: true })}{" "}
</a>
);
default:
return null;
}
})
)}
</div>
</div>
<ReactTooltip />
</div>
))}
{messages.length === 0 ? (
<div>{t("modules.roomChat.welcomeMessage")}</div>
) : null}
<div className={`pb-6`} ref={bottomRef} />
<style>{`
.chat-message-container > :first-child {
margin-top: auto;
}
`}</style>
</div>
);
};
import React, { useLayoutEffect } from "react";
import { useQuery } from "react-query";
import { wsend, wsFetch } from "../../../createWebsocket";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { useCurrentRoomInfo } from "../../atoms";
import { ProfileModal } from "../../components/ProfileModal";
import { RoomUser, UserWithFollowInfo } from "../../types";
import { useMeQuery } from "../../utils/useMeQuery";
import { RoomChatMessage } from "./useRoomChatStore";
interface ProfileModalFetcherProps {
userId: string;
onClose: () => void;
messageToBeDeleted?: RoomChatMessage | null;
}
export const ProfileModalFetcher: React.FC<ProfileModalFetcherProps> = ({
userId,
onClose,
messageToBeDeleted,
}) => {
const { currentRoom: room } = useCurrentRoomStore();
const { me } = useMeQuery();
const { isMod: iAmMod, isCreator: iAmCreator } = useCurrentRoomInfo();
const profileFromRoom: RoomUser | undefined = room?.users.find((x) =>
[x.id, x.username].includes(userId)
);
const { data: profileFromDB } = useQuery<UserWithFollowInfo>(
["get_user_profile", userId],
() =>
wsFetch<any>({
op: "get_user_profile",
d: { userId },
}),
{ enabled: !profileFromRoom }
);
const profile = profileFromRoom || profileFromDB;
useLayoutEffect(() => {
if (
profile &&
me &&
profile.id !== me.id &&
(profile.youAreFollowing === undefined ||
profile.youAreFollowing === null)
) {
wsend({ op: "follow_info", d: { userId: profile.id } });
}
}, [me, profile]);
if (!room) {
return null;
}
if (!profile) {
return null;
}
return (
<ProfileModal
iAmCreator={iAmCreator}
iAmMod={iAmMod}
isMe={profile?.id === me?.id}
room={room}
onClose={onClose}
profile={profile}
messageToBeDeleted={messageToBeDeleted}
/>
);
};
import React, { useState } from "react";
import { useQuery, useQueryClient } from "react-query";
import { useParams } from "react-router";
import { Link } from "react-router-dom";
import { BodyWrapper } from "../../components/BodyWrapper";
import { Wrapper } from "../../components/Wrapper";
import { NotFoundPage } from "../../pages/NotFoundPage";
import { Logo } from "../../svgs/Logo";
import { ScheduledRoom } from "../../types";
import { EditScheduleRoomModalController } from "./EditScheduleRoomModalController";
import { ScheduledRoomCard } from "./ScheduledRoomCard";
interface ViewScheduledRoomPageProps {}
type GetScheduledRoomById = { room: ScheduledRoom | null };
export const ViewScheduledRoomPage: React.FC<ViewScheduledRoomPageProps> = ({}) => {
const queryClient = useQueryClient();
const [deleted, setDeleted] = useState(false);
const { id } = useParams<{ id: string }>();
const key = `/scheduled-room/${id}`;
const { data, isLoading } = useQuery<
GetScheduledRoomById | { error: string }
>(key);
if (isLoading) {
return null;
}
if (!data || "error" in data || !data.room) {
return <NotFoundPage />;
}
return (
<div className={`flex flex-col flex-1`}>
<Wrapper>
<BodyWrapper>
<div className={`mb-10 mt-8`}>
<Link to="/">
<Logo />
</Link>
</div>
</BodyWrapper>
{deleted ? (
<div>deleted</div>
) : (
<EditScheduleRoomModalController
onScheduledRoom={(_editInfo, values, _resp) => {
queryClient.setQueryData<GetScheduledRoomById>(key, {
room: {
...data.room!,
name: values.name,
description: values.description,
scheduledFor: values.scheduledFor.toISOString(),
},
});
}}
>
{({ onEdit }) => (
<ScheduledRoomCard
info={data.room!}
onDeleteComplete={() => setDeleted(true)}
noCopyLinkButton
onEdit={() =>
onEdit({ scheduleRoomToEdit: data.room!, cursor: "" })
}
/>
)}
</EditScheduleRoomModalController>
)}
</Wrapper>
</div>
);
};
import React, { useState } from "react";
import { Link2 } from "react-feather";
import { copyTextToClipboard } from "../../utils/copyToClipboard";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
interface CopyLinkButtonProps {
text: string;
}
export const CopyScheduleRoomLinkButton: React.FC<CopyLinkButtonProps> = ({
text,
}) => {
const [copied, setCopied] = useState(false);
const { t } = useTypeSafeTranslation();
return (
<button
type="button"
className="chq-atc--button flex"
onClick={() => {
if (copyTextToClipboard(text)) {
setCopied(true);
}
}}
>
<Link2 className="mr-2" />
{copied ? t("common.copied") : t("common.copyLink")}
</button>
);
};
import DateFnsUtils from "@date-io/date-fns";
import { createMuiTheme, ThemeProvider } from "@material-ui/core/styles";
import { DateTimePicker, MuiPickersUtilsProvider } from "@material-ui/pickers";
import { add } from "date-fns";
import { Form, Formik } from "formik";
import React from "react";
import { wsFetch } from "../../../createWebsocket";
import { Button } from "../../components/Button";
import { InputField } from "../../components/form-fields/InputField";
import { InputErrorMsg } from "../../components/InputErrorMsg";
import { Modal } from "../../components/Modal";
import { BaseUser } from "../../types";
import { showErrorToast } from "../../utils/showErrorToast";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
export interface ScheduleRoomFormData {
name: string;
description: string;
cohosts: BaseUser[];
scheduledFor: Date;
}
interface CreateRoomModalProps {
editInfo?: { intialValues: ScheduleRoomFormData; id: string };
onScheduledRoom: (data: ScheduleRoomFormData, resp: any) => void;
onRequestClose: () => void;
}
const theme = createMuiTheme({
palette: {
type: "dark",
},
});
export const ScheduleRoomModal: React.FC<CreateRoomModalProps> = ({
onScheduledRoom,
onRequestClose,
editInfo,
}) => {
const { t } = useTypeSafeTranslation();
return (
<ThemeProvider theme={theme}>
<MuiPickersUtilsProvider utils={DateFnsUtils}>
<Modal isOpen onRequestClose={onRequestClose}>
<Formik<ScheduleRoomFormData>
initialValues={
editInfo?.intialValues || {
name: "",
description: "",
cohosts: [] as BaseUser[],
scheduledFor: add(new Date(), { days: 1 }),
}
}
validateOnChange={false}
validateOnBlur={false}
validate={({ name, scheduledFor }) => {
const errors: Record<string, string> = {};
if (name.length < 2) {
return {
name: t("modules.scheduledRooms.modal.minLength"),
};
}
if (scheduledFor.getTime() < new Date().getTime()) {
return {
scheduledFor: t("modules.scheduledRooms.modal.needsFuture"),
};
}
return errors;
}}
onSubmit={async (allData) => {
const { name, scheduledFor, ...data } = allData;
const scheduledForISO = scheduledFor.toISOString();
const resp = await wsFetch<any>(
editInfo
? {
op: "edit_scheduled_room",
d: {
id: editInfo.id,
data: {
name,
scheduledFor: scheduledForISO,
...data,
},
},
}
: {
op: "schedule_room",
d: {
name,
scheduledFor: scheduledForISO,
...data,
},
}
);
if (resp.error) {
showErrorToast(resp.d);
return;
} else {
onScheduledRoom(allData, resp);
}
onRequestClose();
}}
>
{({ setFieldValue, values, errors, isSubmitting }) => (
<Form>
<InputField
name="name"
maxLength={60}
placeholder={t("modules.scheduledRooms.modal.roomName")}
autoFocus
/>
<div className={`mt-8`}>
<DateTimePicker
value={values.scheduledFor}
minDate={new Date()}
maxDate={add(new Date(), { months: 1 })}
onChange={(x) => {
if (x) {
setFieldValue("scheduledFor", x);
}
}}
/>
{errors.scheduledFor ? (
<div className={`mt-1`}>
<InputErrorMsg>{errors.scheduledFor}</InputErrorMsg>
</div>
) : null}
<div className={`mt-8`}>
<InputField
textarea
placeholder="description"
name="description"
maxLength={200}
/>
</div>
</div>
<div className={`flex mt-12`}>
<Button
type="button"
onClick={onRequestClose}
className={`mr-1.5`}
color="secondary"
>
{t("common.cancel")}
</Button>
<Button
loading={isSubmitting}
type="submit"
className={`ml-1.5`}
>
{t("common.ok")}
</Button>
</div>
</Form>
)}
</Formik>
</Modal>
</MuiPickersUtilsProvider>
</ThemeProvider>
);
};
import React, { useState } from "react";
import { useQuery, useQueryClient } from "react-query";
import { wsFetch } from "../../../createWebsocket";
import { useSocketStatus } from "../../../webrtc/stores/useSocketStatus";
import { Backbar } from "../../components/Backbar";
import { BodyWrapper } from "../../components/BodyWrapper";
import { BottomVoiceControl } from "../../components/BottomVoiceControl";
import { Button } from "../../components/Button";
import { ProfileButton } from "../../components/ProfileButton";
import { Spinner } from "../../components/Spinner";
import { Wrapper } from "../../components/Wrapper";
import { ScheduledRoom, ScheduledRoomsInfo } from "../../types";
import { useMeQuery } from "../../utils/useMeQuery";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { EditScheduleRoomModalController } from "./EditScheduleRoomModalController";
import { ScheduledRoomCard } from "./ScheduledRoomCard";
import { ScheduleRoomModal } from "./ScheduleRoomModal";
interface ScheduledRoomsPageProps {}
export const GET_SCHEDULED_ROOMS = "get_scheduled_rooms";
const Page = ({
onLoadMore,
cursor,
isLastPage,
isOnlyPage,
getOnlyMyScheduledRooms,
onEdit,
}: {
onEdit: (sr: { scheduleRoomToEdit: ScheduledRoom; cursor: string }) => void;
getOnlyMyScheduledRooms: boolean;
cursor: string;
isLastPage: boolean;
isOnlyPage: boolean;
onLoadMore: (o: string) => void;
}) => {
const queryClient = useQueryClient();
const { status } = useSocketStatus();
const { isLoading, data } = useQuery<ScheduledRoomsInfo>(
[GET_SCHEDULED_ROOMS, cursor, getOnlyMyScheduledRooms],
() =>
wsFetch<any>({
op: GET_SCHEDULED_ROOMS,
d: { cursor, getOnlyMyScheduledRooms },
}),
{ staleTime: Infinity, enabled: status === "auth-good" }
);
const { t } = useTypeSafeTranslation();
if (isLoading) {
return <Spinner />;
}
if (!data) {
return null;
}
if (isOnlyPage && data.scheduledRooms.length === 0) {
return (
<div className={`mt-8 text-xl ml-4`}>
{t("modules.scheduledRooms.noneFound")}
</div>
);
}
return (
<>
{data.scheduledRooms.map((r) => (
<div className={`mt-4`} key={r.id}>
<ScheduledRoomCard
onDeleteComplete={() => {
queryClient.setQueryData<ScheduledRoomsInfo>(
[GET_SCHEDULED_ROOMS, cursor, getOnlyMyScheduledRooms],
(d) => {
return {
scheduledRooms: (d?.scheduledRooms || []).filter(
(x) => x.id !== r.id
),
nextCursor: d?.nextCursor,
};
}
);
}}
onEdit={() => onEdit({ cursor, scheduleRoomToEdit: r })}
info={r}
/>
</div>
))}
{isLastPage && data.nextCursor ? (
<div className={`flex justify-center my-10`}>
<Button variant="small" onClick={() => onLoadMore(data.nextCursor!)}>
{t("common.loadMore")}
</Button>
</div>
) : null}
</>
);
};
export const ScheduledRoomsPage: React.FC<ScheduledRoomsPageProps> = ({}) => {
const queryClient = useQueryClient();
const [showScheduleRoomModal, setShowScheduleRoomModal] = useState(false);
const [{ cursors, getOnlyMyScheduledRooms }, setQueryState] = useState<{
cursors: string[];
getOnlyMyScheduledRooms: boolean;
}>({ cursors: [""], getOnlyMyScheduledRooms: false });
const { me } = useMeQuery();
const { t } = useTypeSafeTranslation();
return (
<div className={`flex flex-col flex-1`}>
<Wrapper>
<BodyWrapper>
<Backbar>
<h1
className={`font-xl flex-1 text-center flex items-center justify-center text-2xl`}
>
{t("modules.scheduledRooms.title")}
</h1>
<ProfileButton />
</Backbar>
<select
onChange={(e) => {
const newGetOnlyMyScheduledRooms = e.target.value === "true";
if (newGetOnlyMyScheduledRooms === getOnlyMyScheduledRooms) {
return;
}
queryClient.prefetchQuery(
[GET_SCHEDULED_ROOMS, "", newGetOnlyMyScheduledRooms],
() =>
wsFetch({
op: GET_SCHEDULED_ROOMS,
d: {
cursor: "",
getOnlyMyScheduledRooms: newGetOnlyMyScheduledRooms,
},
}),
{ staleTime: 0 }
);
setQueryState({
cursors: [""],
getOnlyMyScheduledRooms: newGetOnlyMyScheduledRooms,
});
}}
value={"" + getOnlyMyScheduledRooms}
>
<option value="false">
{t("modules.scheduledRooms.allRooms")}
</option>
<option value="true">{t("modules.scheduledRooms.myRooms")}</option>
</select>
<EditScheduleRoomModalController
onScheduledRoom={(editInfo, data, _resp) => {
queryClient.setQueryData<ScheduledRoomsInfo>(
[GET_SCHEDULED_ROOMS, editInfo.cursor, getOnlyMyScheduledRooms],
(d) => {
return {
scheduledRooms: (d?.scheduledRooms || []).map((x) =>
x.id === editInfo.scheduleRoomToEdit.id
? {
...x,
name: data.name,
description: data.description,
scheduledFor: data.scheduledFor.toISOString(),
}
: x
),
nextCursor: d?.nextCursor,
};
}
);
}}
>
{({ onEdit }) =>
cursors.map((cursor, i) => (
<Page
getOnlyMyScheduledRooms={getOnlyMyScheduledRooms}
onLoadMore={(o) =>
setQueryState({
cursors: [...cursors, o],
getOnlyMyScheduledRooms,
})
}
onEdit={onEdit}
isOnlyPage={cursors.length === 1}
isLastPage={cursors.length - 1 === i}
key={cursor}
cursor={cursor}
/>
))
}
</EditScheduleRoomModalController>
<div style={{ height: 40 }} />
</BodyWrapper>
</Wrapper>
<BottomVoiceControl>
<div className={`mb-8 flex px-5`}>
<Button
variant="slim"
dogeProbability={0.01}
onClick={() => {
setShowScheduleRoomModal(true);
}}
>
<h3 className={`text-2xl`}>
{t("modules.scheduledRooms.scheduleRoomHeader")}
</h3>
</Button>
</div>
</BottomVoiceControl>
{showScheduleRoomModal ? (
<ScheduleRoomModal
onScheduledRoom={(data, resp) => {
queryClient.setQueryData<ScheduledRoomsInfo>(
[GET_SCHEDULED_ROOMS, "", getOnlyMyScheduledRooms],
(d) => {
return {
scheduledRooms: [
{
roomId: null,
creator: me!,
creatorId: me!.id,
description: data.description,
id: resp.scheduledRoom.id,
name: data.name,
numAttending: 0,
scheduledFor: data.scheduledFor.toISOString(),
},
...(d?.scheduledRooms || []),
],
nextCursor: d?.nextCursor,
};
}
);
}}
onRequestClose={() => setShowScheduleRoomModal(false)}
/>
) : null}
</div>
);
};
import React, { useState } from "react";
import { ScheduledRoom } from "../../types";
import { ScheduleRoomFormData, ScheduleRoomModal } from "./ScheduleRoomModal";
type State = {
scheduleRoomToEdit: ScheduledRoom;
cursor: string;
};
interface EditScheduleRoomModalControllerProps {
onScheduledRoom: (
editInfo: State,
data: ScheduleRoomFormData,
resp: any
) => void;
children: (x: { onEdit: (y: State) => void }) => React.ReactNode;
}
export const EditScheduleRoomModalController: React.FC<EditScheduleRoomModalControllerProps> = ({
onScheduledRoom,
children,
}) => {
const [editInfo, setScheduleRoomToEdit] = useState<State | null>(null);
return (
<>
{editInfo ? (
<ScheduleRoomModal
editInfo={{
id: editInfo.scheduleRoomToEdit.id,
intialValues: {
cohosts: [],
description: editInfo.scheduleRoomToEdit.description,
name: editInfo.scheduleRoomToEdit.name,
scheduledFor: new Date(editInfo.scheduleRoomToEdit.scheduledFor),
},
}}
onScheduledRoom={(...vals) => onScheduledRoom(editInfo, ...vals)}
onRequestClose={() => setScheduleRoomToEdit(null)}
/>
) : null}
{children({ onEdit: setScheduleRoomToEdit })}
</>
);
};
import { differenceInMilliseconds, isPast, isToday } from "date-fns";
import React, { useEffect, useMemo, useState } from "react";
import { useMutation } from "react-query";
import { useHistory } from "react-router-dom";
import {
wsend,
wsMutation,
wsMutationThrowError,
} from "../../../createWebsocket";
import { useCurrentRoomStore } from "../../../webrtc/stores/useCurrentRoomStore";
import { AddToCalendarButton } from "../../components/add-to-calendar/AddToCalendarButton";
import { Avatar } from "../../components/Avatar";
import { Button } from "../../components/Button";
import { modalConfirm } from "../../components/ConfirmModal";
import { ScheduledRoom } from "../../types";
import { roomToCurrentRoom } from "../../utils/roomToCurrentRoom";
import { useMeQuery } from "../../utils/useMeQuery";
import { useTypeSafeTranslation } from "../../utils/useTypeSafeTranslation";
import { useRoomChatStore } from "../room-chat/useRoomChatStore";
import { CopyScheduleRoomLinkButton } from "./CopyScheduleRoomLinkButton";
interface ScheduledRoomCardProps {
onEdit: () => void;
onDeleteComplete: () => void;
info: ScheduledRoom;
noCopyLinkButton?: boolean;
}
export const ScheduledRoomCard: React.FC<ScheduledRoomCardProps> = ({
onEdit,
onDeleteComplete,
noCopyLinkButton,
info: { id, name, scheduledFor, creator, description, roomId },
}) => {
const history = useHistory();
const {
mutateAsync: mutateAsyncStartRoom,
isLoading: isLoadingStartRoom,
} = useMutation(wsMutationThrowError, {
onSuccess: ({ room }) => {
console.log("new room voice server id: " + room.voiceServerId);
useRoomChatStore.getState().clearChat();
wsend({ op: "get_current_room_users", d: {} });
history.push("/room/" + room.id);
useCurrentRoomStore
.getState()
.setCurrentRoom(() => roomToCurrentRoom(room));
},
});
const { mutateAsync, isLoading } = useMutation(wsMutation, {
onSuccess: () => {
onDeleteComplete();
},
});
const [, rerender] = useState(0);
const dt = useMemo(() => new Date(scheduledFor), [scheduledFor]);
useEffect(() => {
let done = false;
const id = setTimeout(() => {
done = true;
rerender((x) => x + 1);
}, differenceInMilliseconds(dt, new Date()) + 1000); // + 1 second to be safe
return () => {
if (!done) {
clearTimeout(id);
}
};
}, [dt]);
const { me } = useMeQuery();
const { t } = useTypeSafeTranslation();
const isCreator = me?.id === creator.id;
const url = window.location.origin + `/scheduled-room/${id}`;
return (
<div>
<div className={`w-full bg-simple-gray-33 py-2.5 px-5 rounded-lg`}>
<div className={`text-white`}>
<div className={`flex justify-between`}>
<div>
{isToday(dt)
? t("common.formattedIntlTime", { time: dt })
: t("common.formattedIntlDate", { date: dt })
}
</div>
<AddToCalendarButton
event={{
name: name,
details: description,
location: url,
startsAt: dt.toISOString(),
endsAt: new Date(
dt.getTime() + 1 * 60 * 60 * 1000
).toISOString(),
}}
/>
{isCreator ? (
<div className={`flex`}>
<Button variant="small" onClick={() => onEdit()}>
{t("common.edit")}
</Button>
<div className={`ml-4`}>
<Button
loading={isLoading}
variant="small"
onClick={() =>
modalConfirm(
"Are you sure you want to delete this scheduled room?",
() => {
mutateAsync({
op: "delete_scheduled_room",
d: { id },
});
}
)
}
>
{t("common.delete")}
</Button>
</div>
</div>
) : null}
</div>
<div className={`flex items-center my-4`}>
<Avatar size={25} src={creator.avatarUrl} />
<div
style={{
display: "-webkit-box",
WebkitBoxOrient: "vertical",
WebkitLineClamp: 3,
}}
className={`ml-2 text-left flex-1 text-xl text-simple-gray-d9 text-ellipsis overflow-hidden break-all`}
>
{name.slice(0, 100)}
</div>
{noCopyLinkButton ? null : (
<CopyScheduleRoomLinkButton text={url} />
)}
</div>
<div className={`break-all`}>
{creator.displayName}
{description ? ` | ` + description : ``}
</div>
{isPast(dt) ? (
<div className={`mt-4`}>
{isCreator ? (
<Button
loading={isLoadingStartRoom}
onClick={() => {
mutateAsyncStartRoom({
op: "create_room_from_scheduled_room",
d: {
id,
name,
description,
},
});
}}
>
{t("modules.scheduledRooms.startRoom")}
</Button>
) : (
roomId && (
<Button
loading={isLoadingStartRoom}
onClick={() => {
wsend({ op: "join_room", d: { roomId } });
history.push("/room/" + roomId);
}}
>
{t("common.joinRoom")}
</Button>
)
)}
</div>
) : null}
</div>
</div>
</div>
);
};
import React, { createContext } from "react";
import { soundEffects, useSoundEffectStore } from "./useSoundEffectStore";
const soundKeys = Object.keys(soundEffects);
export const SoundEffectContext = createContext<{
playSoundEffect: (name: keyof typeof soundEffects) => void;
}>({ playSoundEffect: () => {} });
export const SoundEffectPlayer: React.FC = ({}) => {
const add = useSoundEffectStore((x) => x.add);
return (
<>
{soundKeys.map((key) => (
<audio
preload="none"
controls={false}
key={key}
ref={(ref) => {
if (ref) {
ref.volume = 0.7;
add(key, ref);
}
}}
src={`/sound-effects/${
soundEffects[key as keyof typeof soundEffects]
}`}
/>
))}
</>
);
};
import React from "react";
import { useLocation } from "react-router-dom";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { UserProfile } from "../components/UserProfile";
import { Wrapper } from "../components/Wrapper";
import { RoomUser } from "../types";
export const ViewUserPage = () => {
const { state } = useLocation<RoomUser>();
return (
<Wrapper>
<Backbar actuallyGoBack />
<BodyWrapper>
<UserProfile profile={state} />
</BodyWrapper>
</Wrapper>
);
};
import React, { useEffect } from "react";
import { Button } from "../components/Button";
import { Footer } from "../components/Footer";
import { Wrapper } from "../components/Wrapper";
import { apiBaseUrl, __prod__, __staging__ } from "../constants";
import { Logo } from "../svgs/Logo";
import { useTokenStore } from "../utils/useTokenStore";
import qs from "query-string";
import { showErrorToast } from "../utils/showErrorToast";
import { CenterLayout } from "../components/CenterLayout";
import { modalPrompt, PromptModal } from "../components/PromptModal";
import { AlertModal } from "../components/AlertModal";
import { ConfirmModal } from "../components/ConfirmModal";
import { BodyWrapper } from "../components/BodyWrapper";
import { ListItem } from "../components/ListItem";
import { GitHubIcon } from "../svgs/GitHubIcon";
import { TwitterIcon } from "../svgs/TwitterIcon";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface LoginProps {}
export const Login: React.FC<LoginProps> = () => {
const { t } = useTypeSafeTranslation();
useEffect(() => {
const { error } = qs.parse(window.location.search);
if (error && typeof error === "string") {
showErrorToast(error);
}
}, []);
return (
<CenterLayout>
<Wrapper>
<BodyWrapper>
<div className={`my-8`}>
<Logo />
</div>
<div className={`text-4xl mb-4 tracking-tight font-extrabold`}>
{t("pages.login.headerText")}
</div>
<ul className={`my-4 mb-10 text-xl`}>
<ListItem>{t("pages.login.featureText_1")}</ListItem>
<ListItem>{t("pages.login.featureText_2")}</ListItem>
<ListItem>{t("pages.login.featureText_3")}</ListItem>
<ListItem>
<a
href="https://github.com/benawad/dogehouse"
className={`p-0 text-blue-400`}
>
{t("pages.login.featureText_4")}
</a>
</ListItem>
<ListItem>{t("pages.login.featureText_5")}</ListItem>
<ListItem>{t("pages.login.featureText_6")}</ListItem>
</ul>
<div className={`mb-8`}>
<Button
variant="slim"
style={{ backgroundColor: "#333" }}
onClick={() =>
(window.location.href =
apiBaseUrl +
"/auth/github/web" +
(__staging__
? "?redirect_after_base=" + window.location.origin
: ""))
}
>
<span className={`inline-flex items-center`}>
<GitHubIcon className={`h-6 w-6`} />
<p className={`ml-3`}>{t("pages.login.loginGithub")}</p>
</span>
</Button>
</div>
{!__staging__ ? (
<Button
variant="slim"
style={{ backgroundColor: "#0C84CF" }}
onClick={() =>
(window.location.href =
apiBaseUrl +
"/auth/twitter/web" +
(process.env.REACT_APP_IS_STAGING === "true"
? "?redirect_after_base=" + window.location.origin
: ""))
}
>
<span className={`inline-flex items-center`}>
<TwitterIcon className={`h-6 w-6`} />
<p className={`ml-3`}>{t("pages.login.loginTwitter")}</p>
</span>
</Button>
) : null}
{!__prod__ ? (
<Button
variant="slim"
className={`m-8`}
onClick={() => {
modalPrompt("username", async (name) => {
if (!name) {
return;
}
const r = await fetch(
`${apiBaseUrl}/dev/test-info?username=` + name
);
const d = await r.json();
useTokenStore.getState().setTokens({
accessToken: d.accessToken,
refreshToken: d.refreshToken,
});
});
}}
>
{t("pages.login.createTestUser")}
</Button>
) : null}
</BodyWrapper>
</Wrapper>
<div className={`mb-6 px-5`}>
<Footer isLogin />
</div>
<AlertModal />
<PromptModal />
<ConfirmModal />
</CenterLayout>
);
};
import { useAtom } from "jotai";
import React from "react";
import { useHistory } from "react-router-dom";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { followingOnlineAtom } from "../atoms";
import { Avatar } from "../components/Avatar";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { Button } from "../components/Button";
import { Wrapper } from "../components/Wrapper";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface FriendListProps {}
export const FollowingOnlineList: React.FC<FriendListProps> = () => {
const history = useHistory();
const [{ users, nextCursor }] = useAtom(followingOnlineAtom);
const { currentRoom } = useCurrentRoomStore();
const { t } = useTypeSafeTranslation();
return (
<Wrapper>
<Backbar />
<BodyWrapper>
<div className={`mb-4 text-2xl`}>
{t("pages.followingOnlineList.listHeader")}
</div>
{users.length === 0 ? <div>{t("common.noUsersFound")}</div> : null}
{users.map((u) => (
<div
className={`border-b border-solid border-simple-gray-3c flex py-4 px-2 items-center`}
key={u.id}
>
<button onClick={() => history.push(`/user`, u)}>
<Avatar src={u.avatarUrl} isOnline={u.online} />
</button>
<button
onClick={() => {
if (u.currentRoom) {
if (u.currentRoom.id !== currentRoom?.id) {
wsend({ op: "join_room", d: { roomId: u.currentRoom.id } });
}
history.push("/room/" + u.currentRoom.id);
}
}}
className={`ml-4 flex-1 text-left`}
>
<div className={`text-lg`}>
{u.displayName || "@" + u.username}
</div>
<div style={{ color: "" }}>
{u.currentRoom ? (
<span>
{t("pages.followingOnlineList.currentRoom")}{" "}
<b>{u.currentRoom.name}</b>
</span>
) : null}
</div>
</button>
{u.followsYou ? (
<div className={`ml-auto`}>
<Button
onClick={() => {
wsend({
op: "create-room",
d: {
roomName: "My Private Room",
value: "private",
userIdToInvite: u.id,
},
});
}}
variant="small"
>
{t("pages.followingOnlineList.startPrivateRoom")}
</Button>
</div>
) : null}
</div>
))}
{nextCursor ? (
<div className={`flex justify-center my-10`}>
<Button
variant="small"
onClick={() =>
wsend({
op: "fetch_following_online",
d: { cursor: nextCursor },
})
}
>
{t("common.loadMore")}
</Button>
</div>
) : null}
</BodyWrapper>
</Wrapper>
);
};
import React from "react";
import { useHistory } from "react-router-dom";
import { closeWebSocket, wsend } from "../../createWebsocket";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { Button } from "../components/Button";
import { modalConfirm } from "../components/ConfirmModal";
import { UserProfile } from "../components/UserProfile";
import { Wrapper } from "../components/Wrapper";
import { useMeQuery } from "../utils/useMeQuery";
import { useTokenStore } from "../utils/useTokenStore";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface MyProfilePageProps {}
export const MyProfilePage: React.FC<MyProfilePageProps> = ({}) => {
const { me } = useMeQuery();
const history = useHistory();
const { t } = useTypeSafeTranslation();
return (
<Wrapper>
<Backbar actuallyGoBack>
<div className={`ml-auto flex items-center`}>
<Button
className={`m-2.5`}
onClick={() => {
modalConfirm("Are you sure you want to logout?", () => {
history.push("/");
closeWebSocket();
useTokenStore
.getState()
.setTokens({ accessToken: "", refreshToken: "" });
});
}}
variant="small"
>
{t("pages.myProfile.logout")}
</Button>
</div>
</Backbar>
<BodyWrapper>
{me ? (
<UserProfile profile={me} />
) : (
<div>{t("pages.myProfile.probablyLoading")}</div>
)}
<div className={`pt-6 flex`}>
<Button
style={{ marginRight: "10px" }}
variant="small"
onClick={() => history.push(`/voice-settings`)}
>
{t("pages.myProfile.voiceSettings")}
</Button>
<Button
variant="small"
onClick={() => history.push(`/sound-effect-settings`)}
>
{t("pages.myProfile.soundSettings")}
</Button>
</div>
<div className={`pt-6 flex`}>
<Button
variant="small"
color="red"
onClick={() => {
modalConfirm(
"Are you sure you want to permanently delete your account?",
() => {
wsend({ op: "delete_account", d: {} });
}
);
}}
>
{t("pages.myProfile.deleteAccount")}
</Button>
</div>
</BodyWrapper>
</Wrapper>
);
};
import React from "react";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { VoiceSettings } from "../components/VoiceSettings";
import { Wrapper } from "../components/Wrapper";
interface VoiceSettingsPageProps {}
export const VoiceSettingsPage: React.FC<VoiceSettingsPageProps> = () => {
return (
<Wrapper>
<Backbar actuallyGoBack />
<BodyWrapper>
<VoiceSettings />
</BodyWrapper>
</Wrapper>
);
};
import { useAtom } from "jotai";
import React, { useRef } from "react";
import { useHistory } from "react-router-dom";
import { toast } from "react-toastify";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { inviteListAtom } from "../atoms";
import { Avatar } from "../components/Avatar";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { Button } from "../components/Button";
import { Input } from "../components/Input";
import { InviteButton } from "../components/InviteButton";
import { Wrapper } from "../components/Wrapper";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface InviteListProps {}
export const InviteList: React.FC<InviteListProps> = () => {
const history = useHistory();
const [{ nextCursor, users }] = useAtom(inviteListAtom);
const { currentRoom: room } = useCurrentRoomStore();
const path = `/room/${room?.id}`;
const url = window.location.origin + path;
const inputRef = useRef<HTMLInputElement>(null);
const { t } = useTypeSafeTranslation();
if (!room) {
return (
<Wrapper>
<Backbar />
<BodyWrapper>
<Button onClick={() => history.push("/")}>
{t("pages.inviteList.roomGone")}
</Button>
</BodyWrapper>
</Wrapper>
);
}
return (
<Wrapper>
<Backbar actuallyGoBack />
<BodyWrapper>
{room.isPrivate ? null : (
<>
{!navigator.share ? (
<div className={`text-2xl mb-2`}>
{t("pages.inviteList.shareRoomLink")}
</div>
) : null}
<div className={`mb-8 flex`}>
<Input readOnly ref={inputRef} value={url} />
<Button
variant="small"
onClick={() => {
if (navigator.share) {
navigator.share({ url });
} else {
inputRef.current?.select();
document.execCommand("copy");
toast("copied to clipboard", { type: "success" });
}
}}
>
{!navigator.share ? "copy" : "share link to room"}
</Button>
</div>
</>
)}
{users.length ? (
<div className={`my-4 text-2xl`}>
{t("pages.inviteList.inviteFollowers")}
</div>
) : (
<div className={`my-4 text-2xl`}>
{t("pages.inviteList.whenFollowersOnline")}
</div>
)}
{users.map((u) => (
<div
className={`border-b border-solid border-simple-gray-3c flex py-4 px-2 items-center`}
key={u.id}
>
<button onClick={() => history.push(`/user`, u)}>
<Avatar src={u.avatarUrl} />
</button>
<button
onClick={() => {
history.push(`/user`, u);
}}
className={`ml-4`}
>
<div className={`text-lg`}>{u.displayName}</div>
<div>@{u.username}</div>
</button>
<div className={`ml-auto`}>
<InviteButton
onClick={() => {
wsend({
op: "invite_to_room",
d: {
userId: u.id,
},
});
}}
/>
</div>
</div>
))}
{nextCursor ? (
<div className={`flex justify-center my-10`}>
<Button
variant="small"
onClick={() =>
wsend({
op: "fetch_invite_list",
d: { cursor: nextCursor },
})
}
>
{t("common.loadMore")}
</Button>
</div>
) : null}
</BodyWrapper>
</Wrapper>
);
};
import React, { useState } from "react";
import { Calendar } from "react-feather";
import { useQuery, useQueryClient } from "react-query";
import { useHistory } from "react-router-dom";
import { wsend, wsFetch } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { useSocketStatus } from "../../webrtc/stores/useSocketStatus";
import { BodyWrapper } from "../components/BodyWrapper";
import { BottomVoiceControl } from "../components/BottomVoiceControl";
import { Button } from "../components/Button";
import { CircleButton } from "../components/CircleButton";
import { CreateRoomModal } from "../components/CreateRoomModal";
import { ProfileButton } from "../components/ProfileButton";
import { RoomCard } from "../components/RoomCard";
import { Spinner } from "../components/Spinner";
import { Wrapper } from "../components/Wrapper";
import { EditScheduleRoomModalController } from "../modules/scheduled-rooms/EditScheduleRoomModalController";
import { ScheduledRoomCard } from "../modules/scheduled-rooms/ScheduledRoomCard";
import { GET_SCHEDULED_ROOMS } from "../modules/scheduled-rooms/ScheduledRoomsPage";
import { Logo } from "../svgs/Logo";
import { PeopleIcon } from "../svgs/PeopleIcon";
import { CurrentRoom, PublicRoomsQuery, ScheduledRoom } from "../types";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface HomeProps {}
const get_top_public_rooms = "get_top_public_rooms";
const Page = ({
currentRoom,
cursor,
isLastPage,
isOnlyPage,
}: {
currentRoom: CurrentRoom | null;
cursor: number;
isLastPage: boolean;
isOnlyPage: boolean;
onLoadMore: (o: number) => void;
}) => {
const { t } = useTypeSafeTranslation();
const history = useHistory();
const { status } = useSocketStatus();
const { isLoading, data } = useQuery<PublicRoomsQuery>(
[get_top_public_rooms, cursor],
() =>
wsFetch<any>({
op: get_top_public_rooms,
d: { cursor },
}),
{
staleTime: Infinity,
enabled: status === "auth-good",
refetchOnMount: "always",
}
);
if (isLoading) {
return <Spinner centered={true} />;
}
if (!data) {
return null;
}
if (isOnlyPage && data.rooms.length === 0) {
return null;
}
return (
<>
{data.rooms.map((r) =>
r.id === currentRoom?.id ? null : (
<div className={`mt-4`} key={r.id}>
<RoomCard
onClick={() => {
wsend({ op: "join_room", d: { roomId: r.id } });
history.push("/room/" + r.id);
}}
room={r}
currentRoomId={currentRoom?.id}
/>
</div>
)
)}
{isLastPage && data.nextCursor ? (
<div className={`flex justify-center my-10`}>
<Button
variant="small"
onClick={() =>
wsend({
op: "get_top_public_rooms",
d: { cursor: data.nextCursor },
})
}
>
{t("common.loadMore")}
</Button>
</div>
) : null}
</>
);
};
const get_my_scheduled_rooms_about_to_start =
"get_my_scheduled_rooms_about_to_start";
export type GetMyScheduledRoomsAboutToStartQuery = {
scheduledRooms: ScheduledRoom[];
};
export const Home: React.FC<HomeProps> = () => {
const { t } = useTypeSafeTranslation();
const history = useHistory();
const { currentRoom } = useCurrentRoomStore();
const [cursors, setCursors] = useState([0]);
const [showCreateRoomModal, setShowCreateRoomModal] = useState(false);
const queryClient = useQueryClient();
const { status } = useSocketStatus();
const { data } = useQuery<GetMyScheduledRoomsAboutToStartQuery>(
get_my_scheduled_rooms_about_to_start,
() => wsFetch<any>({ op: get_my_scheduled_rooms_about_to_start, d: {} }),
{
staleTime: Infinity,
enabled: status === "auth-good",
refetchOnMount: "always",
}
);
return (
<div className={`flex flex-col flex-1`}>
<Wrapper>
<BodyWrapper>
<div className={`mb-10 mt-8`}>
<Logo />
</div>
<div className={`mb-6 flex justify-center`}>
<div className={`mr-4`}>
<CircleButton
onClick={() => {
wsend({ op: "fetch_following_online", d: { cursor: 0 } });
history.push("/following-online");
}}
>
<PeopleIcon width={30} height={30} fill="#fff" />
</CircleButton>
</div>
<div className={`ml-2`}>
<CircleButton
onClick={() => {
queryClient.prefetchQuery(
[GET_SCHEDULED_ROOMS, "", false],
() =>
wsFetch({
op: GET_SCHEDULED_ROOMS,
d: {
cursor: "",
getOnlyMyScheduledRooms: false,
},
}),
{ staleTime: 0 }
);
history.push("/scheduled-rooms");
}}
>
<Calendar width={30} height={30} color="#fff" />
</CircleButton>
</div>
<div className={`ml-2`}>
<ProfileButton circle size={60} />
</div>
</div>
<EditScheduleRoomModalController
onScheduledRoom={(editInfo, data, _resp) => {
queryClient.setQueryData<GetMyScheduledRoomsAboutToStartQuery>(
get_my_scheduled_rooms_about_to_start,
(d) => {
return {
scheduledRooms: (d?.scheduledRooms || []).map((x) =>
x.id === editInfo.scheduleRoomToEdit.id
? {
...x,
name: data.name,
description: data.description,
scheduledFor: data.scheduledFor.toISOString(),
}
: x
),
};
}
);
}}
>
{({ onEdit }) =>
data?.scheduledRooms.map((sr) => (
<ScheduledRoomCard
key={sr.id}
info={sr}
onEdit={() => onEdit({ scheduleRoomToEdit: sr, cursor: "" })}
onDeleteComplete={() => {
queryClient.setQueryData<GetMyScheduledRoomsAboutToStartQuery>(
get_my_scheduled_rooms_about_to_start,
(d) => {
return {
scheduledRooms: d?.scheduledRooms.filter(
(x) => x.id !== sr.id
) as ScheduledRoom[],
};
}
);
}}
/>
))
}
</EditScheduleRoomModalController>
{currentRoom ? (
<div className={`my-8`}>
<RoomCard
active
onClick={() => history.push("/room/" + currentRoom.id)}
room={currentRoom}
currentRoomId={currentRoom.id}
/>
</div>
) : null}
{cursors.map((cursor, i) => (
<Page
key={cursor}
currentRoom={currentRoom}
cursor={cursor}
isOnlyPage={cursors.length === 1}
onLoadMore={(c) => setCursors([...cursors, c])}
isLastPage={i === cursors.length - 1}
/>
))}
<div style={{ height: 40 }} />
</BodyWrapper>
</Wrapper>
<BottomVoiceControl>
<div className={`mb-8 flex px-5`}>
<Button
variant="slim"
dogeProbability={0.01}
onClick={() => {
setShowCreateRoomModal(true);
}}
>
<h3 className={`text-2xl`}>{t("pages.home.createRoom")}</h3>
</Button>
</div>
</BottomVoiceControl>
{showCreateRoomModal ? (
<CreateRoomModal onRequestClose={() => setShowCreateRoomModal(false)} />
) : null}
</div>
);
};
import React from "react";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { SoundEffectSettings } from "../components/SoundEffectSettings";
import { Wrapper } from "../components/Wrapper";
export const SoundEffectSettingsPage: React.FC = () => {
return (
<Wrapper>
<Backbar actuallyGoBack />
<BodyWrapper>
<SoundEffectSettings />
</BodyWrapper>
</Wrapper>
);
};
import React, { useState } from "react";
import { Redirect } from "react-router-dom";
import { wsend } from "../../createWebsocket";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { Button } from "../components/Button";
import { Wrapper } from "../components/Wrapper";
import { useMeQuery } from "../utils/useMeQuery";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface SearchUsersProps {}
export const BanUsersPage: React.FC<SearchUsersProps> = ({}) => {
const { me } = useMeQuery();
const [username, setUsername] = useState("");
const [reason, setReason] = useState("");
const { t } = useTypeSafeTranslation();
if (!me) {
return null;
}
if (me.username !== "benawad") {
return <Redirect to="/" />;
}
return (
<Wrapper>
<Backbar />
<BodyWrapper>
<input
className={`mb-8`}
autoFocus
placeholder="username to ban..."
value={username}
onChange={(e) => setUsername(e.target.value)}
/>
<input
className={`mb-16`}
autoFocus
placeholder="reason"
value={reason}
onChange={(e) => setReason(e.target.value)}
/>
<Button
onClick={() => {
if (username && reason) {
wsend({
op: "ban",
d: {
username,
reason,
},
});
}
}}
>
{t("pages.banUser.ban")}
</Button>
</BodyWrapper>
</Wrapper>
);
};
import React, { useState } from "react";
import { useAtom } from "jotai";
import { userSearchAtom } from "../atoms";
import { Backbar } from "../components/Backbar";
import { Button } from "../components/Button";
import { Wrapper } from "../components/Wrapper";
import { Codicon } from "../svgs/Codicon";
import { BodyWrapper } from "../components/BodyWrapper";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface SearchUsersProps {}
export const SearchUsersPage: React.FC<SearchUsersProps> = ({}) => {
const [{ loading }] = useAtom(userSearchAtom);
const [query, setQuery] = useState("");
const { t } = useTypeSafeTranslation();
return (
<Wrapper>
<Backbar />
<BodyWrapper>
<form
onSubmit={(e) => {
e.preventDefault();
if (query) {
}
}}
className={`flex`}
>
<input
autoFocus
placeholder={t("pages.searchUser.search")}
value={query}
onChange={(e) => setQuery(e.target.value)}
/>
<Button type="submit" variant="small">
<Codicon name="search" />
</Button>
</form>
{loading ? <div className={`my-8`}>{t("common.loading")}</div> : null}
</BodyWrapper>
</Wrapper>
);
};
import { useAtom } from "jotai";
import React from "react";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
import { useHistory, useLocation, useRouteMatch } from "react-router-dom";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { followerMapAtom, followingMapAtom } from "../atoms";
import { Avatar } from "../components/Avatar";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { Button } from "../components/Button";
import { Wrapper } from "../components/Wrapper";
import { onFollowUpdater } from "../utils/onFollowUpdater";
import { useMeQuery } from "../utils/useMeQuery";
interface FollowListPageProps {}
export const FollowListPage: React.FC<FollowListPageProps> = () => {
const { pathname } = useLocation();
const {
params: { userId },
} = useRouteMatch<{ userId: string }>();
const [followerMap, setFollowerMap] = useAtom(followerMapAtom);
const [followingMap, setFollowingMap] = useAtom(followingMapAtom);
const { me } = useMeQuery();
const { setCurrentRoom } = useCurrentRoomStore();
const history = useHistory();
const { t } = useTypeSafeTranslation();
const isFollowing = pathname.startsWith("/following");
const users = isFollowing
? followingMap[userId]?.users || []
: followerMap[userId]?.users || [];
const nextCursor = isFollowing
? followingMap[userId]?.nextCursor
: followerMap[userId]?.nextCursor;
return (
<Wrapper>
<Backbar actuallyGoBack />
<BodyWrapper>
{!users.length ? <div>{t("common.noUsersFound")}</div> : null}
{users.map((profile) => (
<div
className={`border-b border-solid border-simple-gray-3c flex py-4 px-2 items-center`}
key={profile.id}
>
<button onClick={() => history.push(`/user`, profile)}>
<Avatar src={profile.avatarUrl} />
</button>
<button
onClick={() => history.push(`/user`, profile)}
className={`ml-8`}
>
<div className={`text-lg`}>{profile.displayName}</div>
<div style={{ color: "" }}>@{profile.username}</div>
</button>
{me?.id === profile.id ||
profile.youAreFollowing === undefined ||
profile.youAreFollowing === null ? null : (
<div className={`ml-auto`}>
<Button
onClick={() => {
wsend({
op: "follow",
d: {
userId: profile.id,
value: !profile.youAreFollowing,
},
});
onFollowUpdater(setCurrentRoom, me, profile);
const fn = isFollowing ? setFollowingMap : setFollowerMap;
fn((m) => ({
...m,
[userId]: {
users: m[userId].users.map((u) => {
if (profile.id === u.id) {
return {
...u,
youAreFollowing: !profile.youAreFollowing,
};
}
return u;
}),
nextCursor: m[userId].nextCursor,
},
}));
}}
variant="small"
>
{profile.youAreFollowing ? "following" : "follow"}
</Button>
</div>
)}
</div>
))}
{nextCursor ? (
<div className={`flex justify-center my-10`}>
<Button
variant="small"
onClick={() =>
wsend({
op: `fetch_follow_list`,
d: { isFollowing, userId, cursor: nextCursor },
})
}
>
{t("common.loadMore")}
</Button>
</div>
) : null}
</BodyWrapper>
</Wrapper>
);
};
import React from "react";
import { Wrapper } from "../components/Wrapper";
import { Logo } from "../svgs/Logo";
import { Link } from "react-router-dom";
import { BodyWrapper } from "../components/BodyWrapper";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface NotFoundPageProps {}
export const NotFoundPage: React.FC<NotFoundPageProps> = () => {
const { t } = useTypeSafeTranslation();
return (
<Wrapper>
<BodyWrapper>
<div className={`mb-10 mt-8`}>
<Logo />
</div>
<div className={`text-2xl`}>{t("pages.notFound.whoopsError")}</div>
{t("pages.notFound.goHomeMessage")}
<Link to="/" className={`text-blue-400 ml-2`}>
{t("pages.notFound.goHomeLinkText")}
</Link>
</BodyWrapper>
</Wrapper>
);
};
import React, { useState } from "react";
import { Redirect, useRouteMatch } from "react-router-dom";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../../webrtc/stores/useCurrentRoomStore";
import { useMuteStore } from "../../webrtc/stores/useMuteStore";
import { useCurrentRoomInfo } from "../atoms";
import { Backbar } from "../components/Backbar";
import { BodyWrapper } from "../components/BodyWrapper";
import { BottomVoiceControl } from "../components/BottomVoiceControl";
import { CircleButton } from "../components/CircleButton";
import { modalConfirm } from "../components/ConfirmModal";
import { CreateRoomModal } from "../components/CreateRoomModal";
import { ProfileButton } from "../components/ProfileButton";
import { ProfileModal } from "../components/ProfileModal";
import { RoomUserNode } from "../components/RoomUserNode";
import { Wrapper } from "../components/Wrapper";
import { useShouldFullscreenChat } from "../modules/room-chat/useShouldFullscreenChat";
import { Codicon } from "../svgs/Codicon";
import { BaseUser } from "../types";
import { isUuid } from "../utils/isUuid";
import { useMeQuery } from "../utils/useMeQuery";
import { useTypeSafeTranslation } from "../utils/useTypeSafeTranslation";
interface RoomPageProps {}
export const RoomPage: React.FC<RoomPageProps> = () => {
const {
params: { id },
} = useRouteMatch<{ id: string }>();
const [userProfileId, setUserProfileId] = useState("");
const { currentRoom: room } = useCurrentRoomStore();
const { muted } = useMuteStore();
const { me } = useMeQuery();
const {
isMod: iAmMod,
isCreator: iAmCreator,
canSpeak: iCanSpeak,
} = useCurrentRoomInfo();
const fullscreenChatOpen = useShouldFullscreenChat();
const [showCreateRoomModal, setShowCreateRoomModal] = useState(false);
const { t } = useTypeSafeTranslation();
// useEffect(() => {
// if (room?.users.length) {
// setUserProfileId(room.users[0].id);
// wsend({ op: "follow_info", d: { userId: room.users[0].id } });
// }
// }, []);
if (!isUuid(id)) {
return <Redirect to="/" />;
}
if (!room) {
return (
<Wrapper>
<Backbar />
<BodyWrapper>
<div>{t("common.loading")}</div>
</BodyWrapper>
</Wrapper>
);
}
const profile = room.users.find((x) => x.id === userProfileId);
const speakers: BaseUser[] = [];
const unansweredHands: BaseUser[] = [];
const listeners: BaseUser[] = [];
let canIAskToSpeak = false;
room.users.forEach((u) => {
if (u.id === room.creatorId || u.roomPermissions?.isSpeaker) {
speakers.push(u);
} else if (u.roomPermissions?.askedToSpeak) {
unansweredHands.push(u);
} else {
canIAskToSpeak = true;
listeners.push(u);
}
});
return (
<>
<ProfileModal
iAmCreator={iAmCreator}
iAmMod={iAmMod}
isMe={profile?.id === me?.id}
room={room}
onClose={() => setUserProfileId("")}
profile={profile}
/>
{fullscreenChatOpen ? null : (
<Backbar>
<button
disabled={!iAmCreator}
onClick={() => setShowCreateRoomModal(true)}
className={`font-xl truncate flex-1 text-center flex items-center justify-center text-2xl`}
>
<span className={"px-2 truncate"}>{room.name}</span>
</button>
<ProfileButton />
</Backbar>
)}
<Wrapper>
<BodyWrapper>
<div
style={{
gridTemplateColumns: "repeat(auto-fit, 90px)",
}}
className={`w-full grid gap-5`}
>
<div className={`col-span-full text-xl ml-2.5 text-white`}>
{t("pages.room.speakers")} ({speakers.length})
</div>
{speakers.map((u) => (
<RoomUserNode
key={u.id}
room={room}
u={u}
muted={muted}
setUserProfileId={setUserProfileId}
me={me}
profile={profile}
/>
))}
{!iCanSpeak && me && canIAskToSpeak ? (
<div className={`flex flex-col items-center`}>
<CircleButton
title="Request to speak"
size={70}
onClick={() => {
modalConfirm("Would you like to ask to speak?", () => {
wsend({ op: "ask_to_speak", d: {} });
});
}}
>
<Codicon width={36} height={36} name="megaphone" />
</CircleButton>
</div>
) : null}
{unansweredHands.length ? (
<div className={`col-span-full text-xl ml-2.5 text-white`}>
{t("pages.room.requestingToSpeak")} ({unansweredHands.length})
</div>
) : null}
{unansweredHands.map((u) => (
<RoomUserNode
key={u.id}
room={room}
u={u}
muted={muted}
setUserProfileId={setUserProfileId}
me={me}
profile={profile}
/>
))}
{listeners.length ? (
<div className={`col-span-full text-xl mt-2.5 ml-2.5 text-white`}>
{t("pages.room.listeners")} ({listeners.length})
</div>
) : null}
{listeners.map((u) => (
<RoomUserNode
key={u.id}
room={room}
u={u}
muted={muted}
setUserProfileId={setUserProfileId}
me={me}
profile={profile}
/>
))}
</div>
</BodyWrapper>
</Wrapper>
<BottomVoiceControl />
{/* Edit room */}
{showCreateRoomModal ? (
<CreateRoomModal
onRequestClose={() => setShowCreateRoomModal(false)}
name={room.name}
description={room.description}
isPrivate={room.isPrivate}
edit={true}
/>
) : null}
</>
);
};
import React, { useEffect, useRef } from "react";
import { useHistory } from "react-router-dom";
import { useMicIdStore } from "../app/shared-stores";
import { ActiveSpeakerListener } from "./components/ActiveSpeakerListener";
import { AudioRender } from "./components/AudioRender";
import { useCurrentRoomStore } from "./stores/useCurrentRoomStore";
import { useMuteStore } from "./stores/useMuteStore";
import { useVoiceStore } from "./stores/useVoiceStore";
import { useWsHandlerStore } from "./stores/useWsHandlerStore";
import { consumeAudio } from "./utils/consumeAudio";
import { createTransport } from "./utils/createTransport";
import { joinRoom } from "./utils/joinRoom";
import { receiveVoice } from "./utils/receiveVoice";
import { sendVoice } from "./utils/sendVoice";
interface App2Props {}
function closeVoiceConnections(_roomId: string | null) {
const { roomId, mic, nullify } = useVoiceStore.getState();
if (_roomId === null || _roomId === roomId) {
if (mic) {
console.log("stopping mic");
mic.stop();
}
console.log("nulling transports");
nullify();
}
}
export const WebRtcApp: React.FC<App2Props> = () => {
const addMultipleWsListener = useWsHandlerStore(
(s) => s.addMultipleWsListener
);
const { mic } = useVoiceStore();
const { micId } = useMicIdStore();
const { muted } = useMuteStore();
const { setCurrentRoom } = useCurrentRoomStore();
const initialLoad = useRef(true);
const history = useHistory();
useEffect(() => {
if (micId && !initialLoad.current) {
sendVoice();
}
initialLoad.current = false;
}, [micId]);
const consumerQueue = useRef<{ roomId: string; d: any }[]>([]);
async function flushConsumerQueue(_roomId: string) {
try {
for (const {
roomId,
d: { peerId, consumerParameters },
} of consumerQueue.current) {
if (_roomId === roomId) {
await consumeAudio(consumerParameters, peerId);
}
}
} catch (err) {
console.log(err);
} finally {
consumerQueue.current = [];
}
}
useEffect(() => {
if (mic) {
mic.enabled = !muted;
}
}, [mic, muted]);
useEffect(() => {
return addMultipleWsListener({
you_left_room: (d) => {
// assumes you don't rejoin the same room really quickly before websocket fires
setCurrentRoom((cr) => {
if (cr && cr.id === d.roomId) {
history.replace("/");
return null;
}
return cr;
});
closeVoiceConnections(d.roomId);
},
"new-peer-speaker": async (d) => {
const { roomId, recvTransport } = useVoiceStore.getState();
if (recvTransport && roomId === d.roomId) {
await consumeAudio(d.consumerParameters, d.peerId);
} else {
consumerQueue.current = [...consumerQueue.current, { roomId, d: d }];
}
},
"you-are-now-a-speaker": async (d) => {
if (d.roomId !== useVoiceStore.getState().roomId) {
return;
}
// setStatus("connected-speaker");
try {
await createTransport(d.roomId, "send", d.sendTransportOptions);
} catch (err) {
console.log(err);
return;
}
console.log("sending voice");
try {
await sendVoice();
} catch (err) {
console.log(err);
return;
}
},
"you-joined-as-peer": async (d) => {
closeVoiceConnections(null);
useVoiceStore.getState().set({ roomId: d.roomId });
// setStatus("connected-listener");
consumerQueue.current = [];
console.log("creating a device");
try {
await joinRoom(d.routerRtpCapabilities);
} catch (err) {
console.log("error creating a device | ", err);
return;
}
try {
await createTransport(d.roomId, "recv", d.recvTransportOptions);
} catch (err) {
console.log("error creating recv transport | ", err);
return;
}
receiveVoice(() => flushConsumerQueue(d.roomId));
},
"you-joined-as-speaker": async (d) => {
closeVoiceConnections(null);
useVoiceStore.getState().set({ roomId: d.roomId });
// setStatus("connected-speaker");
consumerQueue.current = [];
console.log("creating a device");
try {
await joinRoom(d.routerRtpCapabilities);
} catch (err) {
console.log("error creating a device | ", err);
return;
}
try {
await createTransport(d.roomId, "send", d.sendTransportOptions);
} catch (err) {
console.log("error creating send transport | ", err);
return;
}
console.log("sending voice");
try {
await sendVoice();
} catch (err) {
console.log("error sending voice | ", err);
return;
}
await createTransport(d.roomId, "recv", d.recvTransportOptions);
receiveVoice(() => flushConsumerQueue(d.roomId));
},
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<>
<AudioRender />
<ActiveSpeakerListener />
</>
);
};
import { useAtom } from "jotai";
import React, { useEffect, useRef, useState } from "react";
import { Button } from "../../app/components/Button";
import { volumeAtom } from "../../app/shared-atoms";
import { useConsumerStore } from "../stores/useConsumerStore";
interface AudioRenderProps {}
const MyAudio = ({
volume,
onRef,
...props
}: React.DetailedHTMLProps<
React.AudioHTMLAttributes<HTMLAudioElement>,
HTMLAudioElement
> & {
onRef: (a: HTMLAudioElement) => void;
volume: number;
}) => {
const myRef = useRef<HTMLAudioElement>(null);
useEffect(() => {
if (myRef.current) {
myRef.current.volume = volume;
}
}, [volume]);
return (
<audio
ref={(r) => {
// @todo
if (r && !myRef.current) {
(myRef as any).current = r;
onRef(r);
}
}}
{...props}
/>
);
};
export const AudioRender: React.FC<AudioRenderProps> = () => {
const notAllowedErrorCountRef = useRef(0);
const [showAutoPlayModal, setShowAutoPlayModal] = useState(false);
const [globalVolume] = useAtom(volumeAtom);
const { consumerMap } = useConsumerStore();
const audioRefs = useRef<HTMLAudioElement[]>([]);
return (
<>
<div
className={`absolute w-full h-full flex z-50 bg-simple-gray-80 ${
showAutoPlayModal ? "" : "hidden"
}`}
>
<div className={`p-8 rounded m-auto bg-simple-gray-3c`}>
<div className={`text-center mb-4`}>
Browsers require user interaction before they will play audio. Just
click okay to continue.
</div>
<Button
onClick={() => {
setShowAutoPlayModal(false);
audioRefs.current.forEach((a) => {
a.play().catch((err) => {
console.warn(err);
});
});
}}
>
okay
{Object.keys(consumerMap).map((k) => {
const { consumer, volume: userVolume } = consumerMap[k];
return (
<MyAudio
volume={(userVolume / 200) * (globalVolume / 100)}
// autoPlay
playsInline
controls={false}
key={consumer.id}
onRef={(a) => {
console.log(a.duration, a.paused);
audioRefs.current.push(a);
a.srcObject = new MediaStream([consumer.track]);
// prevent modal from showing up more than once in a single render cycle
const notAllowedErrorCount =
notAllowedErrorCountRef.current;
a.play()
.then((x) => console.log({ x }))
.catch((error) => {
if (
error.name === "NotAllowedError" &&
notAllowedErrorCountRef.current ===
notAllowedErrorCount
) {
notAllowedErrorCountRef.current++;
setShowAutoPlayModal(true);
}
console.warn("audioElem.play() failed:%o", error);
});
}}
/>
);
})}
</Button>
</div>
</div>
</>
);
};
import React, { useEffect, useState } from "react";
import { useMicIdStore } from "../../app/shared-stores";
interface MicPickerProps {}
export const MicPicker: React.FC<MicPickerProps> = () => {
const { micId, setMicId } = useMicIdStore();
const [options, setOptions] = useState<
Array<{ id: string; label: string } | null>
>([]);
useEffect(() => {
navigator.mediaDevices
.enumerateDevices()
.then((x) =>
setOptions(
x.map((y) =>
y.kind !== "audioinput" ? null : { id: y.deviceId, label: y.label }
)
)
);
}, []);
return (
<>
{options.length === 0 ? <div>no mics available</div> : null}
{options.length ? (
<select
value={micId}
onChange={(e) => {
const id = e.target.value;
setMicId(id);
}}
>
{options.map((x) =>
!x ? null : (
<option key={x.id} value={x.id}>
{x.label}
</option>
)
)}
</select>
) : null}
</>
);
};
import hark from "hark";
import React, { useEffect } from "react";
import { wsend } from "../../createWebsocket";
import { useCurrentRoomStore } from "../stores/useCurrentRoomStore";
import { useVoiceStore } from "../stores/useVoiceStore";
interface ActiveSpeakerListenerProps {}
export const ActiveSpeakerListener: React.FC<ActiveSpeakerListenerProps> = ({}) => {
const { micStream } = useVoiceStore();
const { currentRoom: room } = useCurrentRoomStore();
const roomId = room?.id;
useEffect(() => {
if (!roomId || !micStream) {
return;
}
const harker = hark(micStream, { threshold: -65, interval: 75 });
harker.on("speaking", () => {
wsend({ op: "speaking_change", d: { value: true } });
});
harker.on("stopped_speaking", () => {
wsend({ op: "speaking_change", d: { value: false } });
});
return () => {
harker.stop();
};
}, [micStream, roomId]);
return null;
};
import { Provider } from "jotai";
import React from "react";
import { QueryClientProvider } from "react-query";
import { ToastContainer } from "react-toastify";
import { AlertModal } from "./app/components/AlertModal";
import { ConfirmModal } from "./app/components/ConfirmModal";
import { InvitedToJoinRoomModal } from "./app/components/InvitedToJoinRoomModal";
import { MuteTitleUpdater } from "./app/components/MuteTitleUpdater";
import { PromptModal } from "./app/components/PromptModal";
import { SoundEffectPlayer } from "./app/modules/sound-effects/SoundEffectPlayer";
import { queryClient } from "./app/queryClient";
interface ProvidersProps {}
export const Providers: React.FC<ProvidersProps> = ({ children }) => {
return (
<Provider>
<QueryClientProvider client={queryClient}>
{children}
<SoundEffectPlayer />
<ToastContainer />
<MuteTitleUpdater />
<InvitedToJoinRoomModal />
<AlertModal />
<PromptModal />
<ConfirmModal />
</QueryClientProvider>
</Provider>
);
};
import translations from "../public/locales/en/translation.json";
const keys: string[] = [];
type TranslationRecord = {
[P in string]: string | TranslationRecord;
};
const _traverseTranslations = (obj: TranslationRecord, path: string[]) => {
Object.keys(obj).forEach((key) => {
if (key.startsWith("_")) {
return;
}
const objOrString = obj[key];
if (typeof objOrString === "string") {
keys.push([...path, key].join("."));
} else {
_traverseTranslations(objOrString, [...path, key]);
}
});
};
export const traverseTranslations = () => {
_traverseTranslations(translations, []);
return keys;
};
import fs from "fs";
import { join } from "path";
import prettier from "prettier";
import { traverseTranslations } from "./traverseTranslations";
const s = `
// this is autogenerated by running \`npm run gen:i18:keys\`
export type TranslationKeys =
${traverseTranslations()
.map((k) => ` "${k}"`)
.join("|\n")}
`;
fs.writeFileSync(
join(__dirname, "../src/generated/translationKeys.ts"),
prettier.format(s, { parser: "babel", useTabs: true })
);
// @ts-ignore
import config from "../../.prettierrc.js";
import english from "../public/locales/en/translation.json";
import fs from "fs";
import { join } from "path";
import prettier from "prettier";
import { traverseTranslations } from "./traverseTranslations";
import { get, set } from "lodash";
const paths = traverseTranslations();
fs.readdirSync(join(__dirname, "../public/locales")).forEach((locale) => {
if (locale === "en") {
return;
}
const filename = join(
__dirname,
"../public/locales",
locale,
"translation.json"
);
const data = JSON.parse(fs.readFileSync(filename, { encoding: "utf-8" }));
paths.forEach((p) => {
if (get(data, p, null) === null) {
set(data, p, get(english, p));
}
});
fs.writeFileSync(
filename,
prettier.format(JSON.stringify(data), {
parser: "json",
useTabs: true,
...config,
})
);
});
// this is autogenerated by running `npm run gen:i18:keys`
export type TranslationKeys =
| "common.loadMore"
| "common.loading"
| "common.noUsersFound"
| "common.ok"
| "common.yes"
| "common.no"
| "common.cancel"
| "common.save"
| "common.edit"
| "common.delete"
| "common.joinRoom"
| "common.copyLink"
| "common.copied"
| "common.formattedIntlDate"
| "common.formattedIntlTime"
| "header.title"
| "header.mutedTitle"
| "footer.link_1"
| "footer.link_2"
| "footer.link_3"
| "pages.banUser.ban"
| "pages.followingOnlineList.listHeader"
| "pages.followingOnlineList.currentRoom"
| "pages.followingOnlineList.startPrivateRoom"
| "pages.home.createRoom"
| "pages.inviteList.roomGone"
| "pages.inviteList.shareRoomLink"
| "pages.inviteList.inviteFollowers"
| "pages.inviteList.whenFollowersOnline"
| "pages.login.headerText"
| "pages.login.featureText_1"
| "pages.login.featureText_2"
| "pages.login.featureText_3"
| "pages.login.featureText_4"
| "pages.login.featureText_5"
| "pages.login.featureText_6"
| "pages.login.loginGithub"
| "pages.login.loginTwitter"
| "pages.login.createTestUser"
| "pages.myProfile.logout"
| "pages.myProfile.probablyLoading"
| "pages.myProfile.voiceSettings"
| "pages.myProfile.soundSettings"
| "pages.myProfile.deleteAccount"
| "pages.notFound.whoopsError"
| "pages.notFound.goHomeMessage"
| "pages.notFound.goHomeLinkText"
| "pages.room.speakers"
| "pages.room.requestingToSpeak"
| "pages.room.listeners"
| "pages.searchUser.search"
| "pages.soundEffectSettings.header"
| "pages.viewUser.editProfile"
| "pages.viewUser.followsYou"
| "pages.viewUser.followers"
| "pages.viewUser.following"
| "pages.voiceSettings.header"
| "pages.voiceSettings.mic"
| "pages.voiceSettings.permissionError"
| "pages.voiceSettings.refresh"
| "pages.voiceSettings.volume"
| "components.blockedFromRoomUsers.header"
| "components.blockedFromRoomUsers.unban"
| "components.blockedFromRoomUsers.noBans"
| "components.bottomVoiceControl.leaveCurrentRoomBtn"
| "components.bottomVoiceControl.confirmLeaveRoom"
| "components.bottomVoiceControl.leave"
| "components.bottomVoiceControl.inviteUsersToRoomBtn"
| "components.bottomVoiceControl.invite"
| "components.bottomVoiceControl.toggleMuteMicBtn"
| "components.bottomVoiceControl.mute"
| "components.bottomVoiceControl.unmute"
| "components.bottomVoiceControl.makeRoomPublicBtn"
| "components.bottomVoiceControl.settings"
| "components.bottomVoiceControl.speaker"
| "components.bottomVoiceControl.listener"
| "components.deviceNotSupported.notSupported"
| "components.deviceNotSupported.linkText"
| "components.deviceNotSupported.addSupport"
| "components.inviteButton.invited"
| "components.inviteButton.inviteToRoom"
| "components.micPermissionBanner.permissionDenied"
| "components.micPermissionBanner.dismiss"
| "components.micPermissionBanner.tryAgain"
| "components.keyboardShortcuts.setKeybind"
| "components.keyboardShortcuts.listening"
| "components.keyboardShortcuts.toggleMuteKeybind"
| "components.keyboardShortcuts.togglePushToTalkKeybind"
| "components.userVolumeSlider.noAudioMessage"
| "components.addToCalendar.add"
| "components.wsKilled.description"
| "components.wsKilled.reconnect"
| "components.modals.createRoomModal.public"
| "components.modals.createRoomModal.private"
| "components.modals.createRoomModal.roomName"
| "components.modals.createRoomModal.roomDescription"
| "components.modals.createRoomModal.descriptionError"
| "components.modals.createRoomModal.nameError"
| "components.modals.invitedToJoinRoomModal.newRoomCreated"
| "components.modals.invitedToJoinRoomModal.roomInviteFrom"
| "components.modals.invitedToJoinRoomModal.justStarted"
| "components.modals.invitedToJoinRoomModal.likeToJoin"
| "components.modals.invitedToJoinRoomModal.inviteReceived"
| "components.modals.editProfileModal.usernameTaken"
| "components.modals.editProfileModal.avatarUrlError"
| "components.modals.editProfileModal.avatarUrlLabel"
| "components.modals.editProfileModal.displayNameError"
| "components.modals.editProfileModal.displayNameLabel"
| "components.modals.editProfileModal.usernameError"
| "components.modals.editProfileModal.usernameLabel"
| "components.modals.editProfileModal.bioError"
| "components.modals.editProfileModal.bioLabel"
| "components.modals.profileModal.blockUserConfirm"
| "components.modals.profileModal.blockUser"
| "components.modals.profileModal.makeMod"
| "components.modals.profileModal.unmod"
| "components.modals.profileModal.addAsSpeaker"
| "components.modals.profileModal.moveToListener"
| "components.modals.profileModal.banFromChat"
| "components.modals.profileModal.banFromRoom"
| "components.modals.profileModal.goBackToListener"
| "components.modals.profileModal.deleteMessage"
| "components.modals.roomSettingsModal.requirePermission"
| "components.modals.roomSettingsModal.makePublic"
| "components.modals.roomSettingsModal.makePrivate"
| "modules.scheduledRooms.title"
| "modules.scheduledRooms.noneFound"
| "modules.scheduledRooms.allRooms"
| "modules.scheduledRooms.myRooms"
| "modules.scheduledRooms.scheduleRoomHeader"
| "modules.scheduledRooms.startRoom"
| "modules.scheduledRooms.modal.needsFuture"
| "modules.scheduledRooms.modal.roomName"
| "modules.scheduledRooms.modal.minLength"
| "modules.roomChat.title"
| "modules.roomChat.emotesSoon"
| "modules.roomChat.bannedAlert"
| "modules.roomChat.waitAlert"
| "modules.roomChat.search"
| "modules.roomChat.searchResults"
| "modules.roomChat.recent"
| "modules.roomChat.sendMessage"
| "modules.roomChat.whisper"
| "modules.roomChat.welcomeMessage"
| "modules.roomChat.roomDescription";
import { PureComponent } from "react";
declare module "react-datetime-picker";
// declare module "react-datetime-picker" {
// export interface DateTimePickerProps {
// amPmAriaLabel?: string;
// autoFocus?: boolean;
// calendarAriaLabel?: string;
// calendarClassName?: string | string[];
// calendarIcon?: React.ReactNode;
// className?: string | string[];
// clearAriaLabel?: string;
// clearIcon?: React.ReactNode;
// clockClassName?: string | string[];
// closeWidgets?: boolean;
// dayAriaLabel?: string;
// dayPlaceholder?: string;
// disableCalendar?: boolean;
// disableClock?: boolean;
// disabled?: boolean;
// format?: string;
// hourAriaLabel?: string;
// hourPlaceholder?: string;
// isCalendarOpen?: boolean;
// isClockOpen?: boolean;
// locale?: string;
// maxDate?: Date;
// maxDetail?: "hour" | "minute" | "second";
// minDate?: Date;
// minuteAriaLabel?: string;
// minutePlaceholder?: string;
// monthAriaLabel?: string;
// monthPlaceholder?: string;
// name?: string;
// nativeInputAriaLabel?: string;
// onCalendarClose?: () => void;
// onCalendarOpen?: () => void;
// onChange?: (value: Date | null) => void;
// onClockClose?: () => void;
// onClockOpen?: () => void;
// onFocus?: (event: React.FocusEvent<HTMLDivElement>) => void;
// required?: boolean;
// secondAriaLabel?: string;
// secondPlaceholder?: string;
// showLeadingZeros?: boolean;
// value?: string | Date | (string | Date)[];
// yearAriaLabel?: string;
// yearPlaceholder?: string;
// }
// declare class DateTimePicker extends PureComponent<DateTimePickerProps> {
// constructor(props: DateTimePickerProps);
// render(): React.ReactNode;
// }
// export default DateTimePicker;
// }
// export {};
import { atom, WritableAtom } from "jotai";
import { useCurrentRoomStore } from "../webrtc/stores/useCurrentRoomStore";
import { Room, BaseUser, UserWithFollowInfo } from "./types";
import { useMeQuery } from "./utils/useMeQuery";
const createSetter = <T>(a: WritableAtom<T, any>) =>
atom(null, (get, set, fn: (x: T) => T) => {
set(a, typeof fn === "function" ? fn(get(a)) : fn);
});
export const voiceBrowserStatusAtom = atom(-1);
export const setVoiceBrowserStatusAtom = createSetter(voiceBrowserStatusAtom);
export const inviteListAtom = atom<{
users: BaseUser[];
nextCursor: number | null;
}>({ users: [], nextCursor: null });
export const setInviteListAtom = createSetter(inviteListAtom);
export const followingOnlineAtom = atom<{
users: UserWithFollowInfo[];
nextCursor: number | null;
}>({ users: [], nextCursor: null });
export const userSearchAtom = atom<{
loading: boolean;
users: BaseUser[];
nextCursor: number | null;
}>({ users: [], loading: false, nextCursor: null });
export const setFollowingOnlineAtom = createSetter(followingOnlineAtom);
export const followerMapAtom = atom<
Record<
string,
{
users: UserWithFollowInfo[];
nextCursor: number | null;
}
>
>({});
export const followingMapAtom = atom<
Record<
string,
{
users: UserWithFollowInfo[];
nextCursor: number | null;
}
>
>({});
export const setFollowingMapAtom = createSetter(followingMapAtom);
export const setFollowerMapAtom = createSetter(followerMapAtom);
export const publicRoomsAtom = atom<{
publicRooms: Room[];
nextCursor: number | null;
}>({ publicRooms: [], nextCursor: null });
export const setPublicRoomsAtom = createSetter(publicRoomsAtom);
export const useCurrentRoomInfo = () => {
const { currentRoom: room } = useCurrentRoomStore();
const { me } = useMeQuery();
if (!room || !me) {
return {
isMod: false,
isCreator: false,
isSpeaker: false,
canSpeak: false,
};
}
let isMod = false;
let isSpeaker = false;
for (const u of room.users) {
if (u.id === me.id) {
if (u.roomPermissions?.isSpeaker) {
isSpeaker = true;
}
if (u.roomPermissions?.isMod) {
isMod = true;
}
break;
}
}
const isCreator = me.id === room.creatorId;
return {
isCreator,
isMod,
isSpeaker,
canSpeak: isCreator || isSpeaker,
};
};
import { toast } from "react-toastify";
export const showErrorToast = (m: string) => {
toast(m, {
type: "error",
});
};
import { useQuery } from "react-query";
import { auth_query } from "../../createWebsocket";
import { BaseUser } from "../types";
export const useMeQuery = () => {
const { data } = useQuery<{ user: BaseUser }>(auth_query, {
notifyOnChangeProps: ["data"],
enabled: false,
});
return { me: data?.user };
};
import create from "zustand";
import { combine } from "zustand/middleware";
import { __prod__ } from "../constants";
const accessTokenKey = "@toum/token" + (__prod__ ? "" : "dev");
const refreshTokenKey = "@toum/refresh-token" + (__prod__ ? "" : "dev");
const getDefaultValues = () => {
try {
return {
accessToken: localStorage.getItem(accessTokenKey) || "",
refreshToken: localStorage.getItem(refreshTokenKey) || "",
};
} catch {
return {
accessToken: "",
refreshToken: "",
};
}
};
export const useTokenStore = create(
combine(getDefaultValues(), (set) => ({
setTokens: (x: { accessToken: string; refreshToken: string }) => {
try {
localStorage.setItem(accessTokenKey, x.accessToken);
localStorage.setItem(refreshTokenKey, x.refreshToken);
} catch {}
set(x);
},
}))
);
import { format } from "date-fns";
// This auto converts UTC to local
export const dateFormat = (timestamp: string, formatString = "hh:mm aaa") => {
const date = new Date(timestamp);
return format(date, formatString);
};
import { useTranslation } from "react-i18next";
import { TranslationKeys } from "../../generated/translationKeys";
interface DateTranslationType {
time?: Date,
date?: Date
}
export const useTypeSafeTranslation = () => {
const { t } = useTranslation();
return {
t: (s: TranslationKeys, f?: DateTranslationType) => t(s, f)
};
};
import { useEffect } from "react";
import { useTokenStore } from "./useTokenStore";
import queryString from "query-string";
import { createWebSocket } from "../../createWebsocket";
export const useSaveTokensFromQueryParams = () => {
useEffect(() => {
const params = queryString.parse(window.location.search);
if (
typeof params.accessToken === "string" &&
typeof params.refreshToken === "string" &&
params.accessToken &&
params.refreshToken
) {
useTokenStore.getState().setTokens({
accessToken: params.accessToken,
refreshToken: params.refreshToken,
});
createWebSocket();
window.history.replaceState({}, document.title, "/");
}
}, []);
};
import { CurrentRoom, Room } from "../types";
export const roomToCurrentRoom = (r: Room): CurrentRoom =>
r
? {
...r,
muteMap: {},
users: [],
activeSpeakerMap: {},
autoSpeaker: false,
}
: r;
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
export const isUuid = (s: string) => regex.test(s);
import { Struct } from "superstruct";
export const validateStruct = <T>(struct: Struct<T>) => (values: T) => {
let errors: Record<string, string> = {};
const [result] = struct.validate(values);
for (const failure of result?.failures() || []) {
errors[failure.path[0]] = failure.message;
}
return errors;
};
// https://stackoverflow.com/questions/9038625/detect-if-device-is-ios
export function isIOS() {
return (
[
"iPad Simulator",
"iPhone Simulator",
"iPod Simulator",
"iPad",
"iPhone",
"iPod",
].includes(navigator.platform) ||
// iPad on iOS 13 detection
(navigator.userAgent.includes("Mac") && "ontouchend" in document)
);
}
import { linkRegex } from "./../constants";
import { BaseUser } from "../types";
// @ts-ignore
import normalizeUrl from "normalize-url";
export const createChatMessage = (
message: string,
mentions: BaseUser[],
roomUsers: BaseUser[] = []
) => {
const tokens = ([] as unknown) as [
{
t: string;
v: string;
}
];
const whisperedToUsernames: string[] = [];
message.split(" ").forEach((item) => {
const isLink = linkRegex.test(item);
const withoutAt = item.replace(/@|#/g, "");
const isMention = mentions.find((m) => withoutAt === m.username);
// whisperedTo users list
!isMention ||
item.indexOf("#@") !== 0 ||
whisperedToUsernames.push(withoutAt);
if (isLink || isMention) {
tokens.push({
t: isLink ? "link" : "mention",
v: isMention ? withoutAt : normalizeUrl(item),
});
} else {
const lastToken = tokens[tokens.length - 1];
if (lastToken && lastToken.t === "text") {
tokens[tokens.length - 1].v = lastToken.v + " " + item;
} else {
tokens.push({
t: "text",
v: item,
});
}
}
});
return {
tokens,
whisperedTo: roomUsers
.filter((u) =>
whisperedToUsernames
.map((u) => u?.toLowerCase())
.includes(u.username?.toLowerCase())
)
.map((u) => u.id),
};
};
import { showErrorToast } from "./showErrorToast";
// https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript
export function copyTextToClipboard(text: string) {
var textArea = document.createElement("textarea");
textArea.value = text;
// Avoid scrolling to bottom
textArea.style.top = "0";
textArea.style.left = "0";
textArea.style.position = "fixed";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
let good = true;
try {
good = document.execCommand("copy");
} catch (err) {
console.error(err);
showErrorToast(err);
good = false;
}
document.body.removeChild(textArea);
return good;
}
import { auth_query } from "../../createWebsocket";
import { queryClient } from "../queryClient";
import { CurrentRoom, BaseUser, UserWithFollowInfo } from "../types";
export const onFollowUpdater = (
setRoom: (update: (x: CurrentRoom | null) => CurrentRoom | null) => void,
me: BaseUser | null | undefined,
profile: UserWithFollowInfo
) => {
setRoom((r) =>
!r
? r
: {
...r,
users: r.users.map((x) => {
if (x.id === profile.id) {
return {
...x,
numFollowers:
x.numFollowers + (profile.youAreFollowing ? -1 : 1),
youAreFollowing: !profile.youAreFollowing,
};
} else if (x.id === me?.id) {
return {
...x,
numFollowing:
x.numFollowing + (profile.youAreFollowing ? -1 : 1),
};
}
return x;
}),
}
);
queryClient.setQueryData<{ user: BaseUser } | null | undefined>(
auth_query,
(x) =>
!x
? x
: {
...x,
user: {
...x.user,
numFollowing:
x.user.numFollowing + (profile.youAreFollowing ? -1 : 1),
},
}
);
};
export const truncate = (string: string, max: number = 100) =>
string.length > max ? string.substring(0, max) + "..." : string;
export type Room = {
id: string;
name: string;
description?: string;
isPrivate: boolean;
numPeopleInside: number;
creatorId: string;
peoplePreviewList: Array<{
id: string;
displayName: string;
numFollowers: number;
}>;
};
export type BaseUser = {
username: string;
online: boolean;
lastOnline: Date;
id: string;
bio: string;
displayName: string;
avatarUrl: string;
numFollowing: number;
numFollowers: number;
currentRoom?: Room;
};
export type PaginatedBaseUsers = {
users: BaseUser[];
nextCursor: number | null;
};
export type RoomPermissions = {
askedToSpeak: boolean;
isSpeaker: boolean;
isMod: boolean;
};
export type UserWithFollowInfo = BaseUser & {
followsYou?: boolean;
youAreFollowing?: boolean;
};
export type RoomUser = {
roomPermissions?: RoomPermissions | null;
} & UserWithFollowInfo;
export type CurrentRoom = Room & {
users: RoomUser[];
muteMap: Record<string, boolean>;
activeSpeakerMap: Record<string, boolean>;
autoSpeaker: boolean;
};
export type WsParam = {
op: string;
d: any;
};
export interface ScheduledRoom {
roomId: string | null;
description: string;
scheduledFor: string;
numAttending: number;
name: string;
id: string;
creatorId: string;
creator: BaseUser;
}
export interface ScheduledRoomsInfo {
scheduledRooms: ScheduledRoom[];
nextCursor?: string | null;
}
export interface PublicRoomsQuery {
rooms: Room[];
nextCursor: number | null;
}
export interface CalendarEvent {
name: string;
details: string | null;
location: string | null;
startsAt: string;
endsAt: string;
}
const makeDuration = (event: CalendarEvent) => {
const minutes = Math.floor((+new Date(event.endsAt) - +new Date(event.startsAt)) / 60 / 1000);
return `${`0${Math.floor(minutes / 60)}`.slice(-2)}${`0${minutes % 60}`.slice(-2)}`;
};
const makeTime = (time: string) => new Date(time).toISOString().replace(/[-:]|\.\d{3}/g, "");
type Query = { [key: string]: null | boolean | number | string };
const makeUrl = (base: string, query: Query) => Object.keys(query).reduce(
(accum, key, index) => {
const value = query[key];
if (value !== null) {
return `${accum}${index === 0 ? "?" : "&"}${key}=${encodeURIComponent(value)}`;
}
return accum;
},
base
);
const makeGoogleCalendarUrl = (event: CalendarEvent) => makeUrl("https://calendar.google.com/calendar/render", {
action: "TEMPLATE",
dates: `${makeTime(event.startsAt)}/${makeTime(event.endsAt)}`,
location: event.location,
text: event.name,
details: event.details
});
const makeOutlookCalendarUrl = (event: CalendarEvent) => makeUrl("https://outlook.live.com/owa", {
rru: "addevent",
startdt: event.startsAt,
enddt: event.endsAt,
subject: event.name,
location: event.location,
body: event.details,
allday: false,
uid: new Date().getTime().toString(),
path: "/calendar/view/Month"
});
const makeYahooCalendarUrl = (event: CalendarEvent) => makeUrl("https://calendar.yahoo.com", {
v: 60,
view: "d",
type: 20,
title: event.name,
st: makeTime(event.startsAt),
dur: makeDuration(event),
desc: event.details,
in_loc: event.location
});
const makeICSCalendarUrl = (event: CalendarEvent) => {
const components = [
"BEGIN:VCALENDAR",
"VERSION:2.0",
"BEGIN:VEVENT"
];
// In case of SSR, document won't be defined
if (typeof document !== "undefined") {
components.push(`URL:${document.URL}`);
}
components.push(
`DTSTART:${makeTime(event.startsAt)}`,
`DTEND:${makeTime(event.endsAt)}`,
`SUMMARY:${event.name}`,
`DESCRIPTION:${event.details}`,
`LOCATION:${event.location}`,
"END:VEVENT",
"END:VCALENDAR"
);
return encodeURI(`data:text/calendar;charset=utf8,${components.join("\n")}`);
};
type URLSet = { [key: string]: string };
const makeUrls = (event: CalendarEvent): URLSet => ({
google: makeGoogleCalendarUrl(event),
outlook: makeOutlookCalendarUrl(event),
yahoo: makeYahooCalendarUrl(event),
ics: makeICSCalendarUrl(event)
});
export default makeUrls;
export { MuteKeybind } from './MuteKeybind'
export { ChatKeybind } from './ChatKeybind'
export { PTTKeybind } from './PTTKeybind'
export const __prod__ = process.env.NODE_ENV === "production";
export const __staging__ = process.env.REACT_APP_IS_STAGING === "true";
export const apiBaseUrl =
process.env.REACT_APP_API_BASE_URL ||
(__prod__ ? "https://api.dogehouse.tv" : "http://192.168.1.165:4001");
export const linkRegex = /(https?:\/\/)(www\.)?([-a-z0-9]{1,63}\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\.[a-z]{1,6}(\/[-\\w@\\+\\.~#\\?&/=%]*)?[^\s()]+/;
import create from "zustand";
import { combine } from "zustand/middleware";
export const MIC_KEY = "micId";
export const useMicIdStore = create(
combine(
{
micId: localStorage.getItem(MIC_KEY) || "",
},
(set) => ({
setMicId: (id: string) => {
try {
localStorage.setItem(MIC_KEY, id);
} catch {}
set({ micId: id });
},
})
)
);
import { QueryClient } from "react-query";
import { apiBaseUrl } from "./constants";
import { showErrorToast } from "./utils/showErrorToast";
import { useTokenStore } from "./utils/useTokenStore";
export const defaultQueryFn = async ({ queryKey }: { queryKey: string }) => {
const { accessToken, refreshToken } = useTokenStore.getState();
const r = await fetch(`${apiBaseUrl}${queryKey[0]}`, {
headers: {
"X-Access-Token": accessToken,
"X-Refresh-Token": refreshToken,
},
});
if (r.status !== 200) {
throw new Error(await r.text());
}
const _accessToken = r.headers.get("access-token");
const _refreshToken = r.headers.get("refresh-token");
if (_accessToken && _refreshToken) {
useTokenStore.getState().setTokens({
accessToken: _accessToken,
refreshToken: _refreshToken,
});
}
return await r.json();
};
export const queryClient = new QueryClient({
defaultOptions: {
mutations: {
onError: (e) => {
if ("message" in (e as Error)) {
showErrorToast((e as Error).message);
}
},
},
queries: {
retry: false,
staleTime: 60 * 1000 * 5,
onError: (e) => {
if ("message" in (e as Error)) {
showErrorToast((e as Error).message);
}
},
queryFn: defaultQueryFn,
},
},
});
import { useAtom } from "jotai";
import { useRef, useEffect } from "react";
import { useLocation, useHistory } from "react-router-dom";
import { toast } from "react-toastify";
import { closeWebSocket, wsend } from "../createWebsocket";
import { useCurrentRoomStore } from "../webrtc/stores/useCurrentRoomStore";
import { useMuteStore } from "../webrtc/stores/useMuteStore";
import { useWsHandlerStore } from "../webrtc/stores/useWsHandlerStore";
import { mergeRoomPermission } from "../webrtc/utils/mergeRoomPermission";
import {
setPublicRoomsAtom,
setFollowerMapAtom,
setFollowingMapAtom,
setFollowingOnlineAtom,
setInviteListAtom,
} from "./atoms";
import { invitedToRoomConfirm } from "./components/InvitedToJoinRoomModal";
import { useRoomChatMentionStore } from "./modules/room-chat/useRoomChatMentionStore";
import {
useRoomChatStore,
RoomChatMessageToken,
} from "./modules/room-chat/useRoomChatStore";
import { useShouldBeSidebar } from "./modules/room-chat/useShouldFullscreenChat";
import { RoomUser } from "./types";
import { isUuid } from "./utils/isUuid";
import { roomToCurrentRoom } from "./utils/roomToCurrentRoom";
import { showErrorToast } from "./utils/showErrorToast";
import { useMeQuery } from "./utils/useMeQuery";
import { useTokenStore } from "./utils/useTokenStore";
export const useMainWsHandler = () => {
const location = useLocation();
const history = useHistory();
const addMultipleWsListener = useWsHandlerStore(
(s) => s.addMultipleWsListener
);
const [, setPublicRooms] = useAtom(setPublicRoomsAtom);
const [, setFollowerMap] = useAtom(setFollowerMapAtom);
const [, setFollowingMap] = useAtom(setFollowingMapAtom);
const [, setFollowingOnline] = useAtom(setFollowingOnlineAtom);
const [, setInviteList] = useAtom(setInviteListAtom);
const setCurrentRoom = useCurrentRoomStore((x) => x.setCurrentRoom);
const { me } = useMeQuery();
const meRef = useRef(me);
meRef.current = me;
const shouldBeSidebar = useShouldBeSidebar();
const shouldBeSidebarRef = useRef(shouldBeSidebar);
shouldBeSidebarRef.current = shouldBeSidebar;
useEffect(() => {
addMultipleWsListener({
new_room_details: ({ name, description, isPrivate, roomId }) => {
setCurrentRoom((cr) =>
!cr || cr.id !== roomId
? cr
: {
...cr,
name,
description,
isPrivate,
}
);
},
chat_user_banned: ({ userId }) => {
useRoomChatStore.getState().addBannedUser(userId);
},
new_chat_msg: ({ msg }) => {
const { open } = useRoomChatStore.getState();
useRoomChatStore.getState().addMessage(msg);
const { isRoomChatScrolledToTop } = useRoomChatStore.getState();
if (
(!open || !document.hasFocus() || isRoomChatScrolledToTop) &&
!!msg.tokens.filter(
(t: RoomChatMessageToken) =>
t.t === "mention" &&
t.v?.toLowerCase() === meRef?.current?.username?.toLowerCase()
).length
) {
useRoomChatMentionStore.getState().incrementIAmMentioned();
}
},
message_deleted({ messageId, deleterId }) {
const { messages, setMessages } = useRoomChatStore.getState();
setMessages(
messages.map((m) => ({
...m,
deleted: m.id === messageId || !!m.deleted,
deleterId: m.id === messageId ? deleterId : m.deleterId,
}))
);
},
room_privacy_change: ({ roomId, isPrivate, name }) => {
setCurrentRoom((cr) =>
!cr || cr.id !== roomId ? cr : { ...cr, name, isPrivate }
);
toast(`Room is now ${isPrivate ? "private" : "public"}`, {
type: "info",
});
},
banned: () => {
toast("you got banned", { type: "error" });
closeWebSocket();
useTokenStore
.getState()
.setTokens({ accessToken: "", refreshToken: "" });
},
ban_done: ({ worked }) => {
if (worked) {
toast("ban worked", { type: "success" });
} else {
toast("ban failed", { type: "error" });
}
},
someone_you_follow_created_a_room: (value) => {
invitedToRoomConfirm(value, history);
},
invitation_to_room: (value) => {
invitedToRoomConfirm(value, history);
},
fetch_invite_list_done: ({ users, nextCursor, initial }) => {
setInviteList((x) => ({
users: initial ? users : [...x.users, ...users],
nextCursor,
}));
},
fetch_following_online_done: ({ users, nextCursor, initial }) => {
setFollowingOnline((x) => ({
users: initial ? users : [...x.users, ...users],
nextCursor,
}));
},
get_top_public_rooms_done: ({ rooms, nextCursor, initial }) => {
setPublicRooms((r) => ({
publicRooms: initial ? rooms : [...r.publicRooms, ...rooms],
nextCursor,
}));
},
fetch_follow_list_done: ({
userId,
users,
isFollowing,
nextCursor,
initial,
}) => {
const fn = isFollowing ? setFollowingMap : setFollowerMap;
fn((m) => ({
...m,
[userId]: {
users: initial ? users : [...m[userId].users, ...users],
nextCursor,
},
}));
},
follow_info_done: ({ userId, followsYou, youAreFollowing }) => {
setCurrentRoom((c) =>
!c
? c
: {
...c,
users: c.users.map((x) =>
x.id === userId ? { ...x, followsYou, youAreFollowing } : x
),
}
);
},
active_speaker_change: ({ roomId, activeSpeakerMap }) => {
setCurrentRoom((c) =>
!c || c.id !== roomId ? c : { ...c, activeSpeakerMap }
);
},
room_destroyed: ({ roomId }) => {
setCurrentRoom((c) => {
if (c && c.id === roomId) {
history.replace("/");
return null;
}
return c;
});
},
new_room_creator: ({ userId, roomId }) => {
setCurrentRoom((cr) =>
cr && cr.id === roomId ? { ...cr, creatorId: userId } : cr
);
},
speaker_removed: ({ userId, roomId, muteMap }) => {
setCurrentRoom((c) =>
!c || c.id !== roomId
? c
: {
...c,
muteMap,
users: c.users.map((x) =>
userId === x.id
? {
...x,
roomPermissions: mergeRoomPermission(
x.roomPermissions,
{ isSpeaker: false, askedToSpeak: false }
),
}
: x
),
}
);
},
speaker_added: ({ userId, roomId, muteMap }) => {
// Mute user upon added as speaker
if (meRef.current?.id === userId) {
const { setMute } = useMuteStore.getState();
wsend({
op: "mute",
d: { value: true },
});
setMute(true);
}
setCurrentRoom((c) =>
!c || c.id !== roomId
? c
: {
...c,
muteMap,
users: c.users.map((x) =>
userId === x.id
? {
...x,
roomPermissions: mergeRoomPermission(
x.roomPermissions,
{
isSpeaker: true,
}
),
}
: x
),
}
);
},
mod_changed: ({ userId, roomId }) => {
setCurrentRoom((c) =>
!c || c.id !== roomId
? c
: {
...c,
users: c.users.map((x) =>
userId === x.id
? {
...x,
roomPermissions: mergeRoomPermission(
x.roomPermissions,
{ isMod: true }
),
}
: x
),
}
);
},
user_left_room: ({ userId }) => {
setCurrentRoom((cr) => {
if (!cr) {
return cr;
}
const { [userId]: _, ...asm } = cr.activeSpeakerMap;
return {
...cr,
activeSpeakerMap: asm,
peoplePreviewList: cr.peoplePreviewList.filter(
(x) => x.id !== userId
),
numPeopleInside: cr.numPeopleInside - 1,
users: cr.users.filter((x) => x.id !== userId),
};
});
},
new_user_join_room: ({ user, muteMap }) => {
setCurrentRoom((cr) =>
!cr || cr.users.some((u) => u.id === user.id)
? cr
: {
...cr,
muteMap,
peoplePreviewList:
cr.peoplePreviewList.length < 10
? [
...cr.peoplePreviewList,
{
id: user.id,
displayName: user.displayName,
numFollowers: user.numFollowers,
},
]
: cr.peoplePreviewList,
numPeopleInside: cr.numPeopleInside + 1,
users: [...cr.users.filter((x) => x.id !== user.id), user],
}
);
},
hand_raised: ({ roomId, userId }) => {
setCurrentRoom((c) => {
if (!c || c.id !== roomId) {
return c;
}
return {
...c,
users: c.users.map((u) =>
u.id === userId
? {
...u,
roomPermissions: mergeRoomPermission(u.roomPermissions, {
askedToSpeak: true,
}),
}
: u
),
};
});
},
mute_changed: ({ userId, value, roomId }) => {
setCurrentRoom((c) => {
if (!c || c.id !== roomId) {
return c;
}
if (value) {
return {
...c,
muteMap: { ...c.muteMap, [userId]: true },
};
} else {
const { [userId]: _, ...newMm } = c.muteMap;
return {
...c,
muteMap: newMm,
};
}
});
},
get_current_room_users_done: ({
users,
muteMap,
roomId,
activeSpeakerMap,
autoSpeaker,
}) => {
// Mute when rejoin and if speaker
if (
!!users.find(
(u: RoomUser) =>
u.id === meRef.current?.id && u.roomPermissions?.isSpeaker
)
) {
const { setMute } = useMuteStore.getState();
wsend({
op: "mute",
d: { value: true },
});
setMute(true);
}
setCurrentRoom((c) => {
if (!c || c.id !== roomId) {
return c;
}
return {
...c,
activeSpeakerMap,
users,
muteMap,
autoSpeaker,
};
});
},
new_current_room: ({ room }) => {
if (room) {
console.log("new room voice server id: " + room.voiceServerId);
useRoomChatStore.getState().clearChat();
wsend({ op: "get_current_room_users", d: {} });
history.push("/room/" + room.id);
}
setCurrentRoom(() => roomToCurrentRoom(room));
},
join_room_done: (d) => {
// Auto open chat to show description and if mobile
if (shouldBeSidebarRef.current) {
useRoomChatStore.getState().setOpen(true);
}
if (d.error) {
if (window.location.pathname.startsWith("/room")) {
history.push("/");
}
showErrorToast(d.error);
} else if (d.room) {
console.log("join with voice server id: " + d.room.voiceServerId);
useRoomChatStore.getState().clearChat();
setCurrentRoom(() => roomToCurrentRoom(d.room));
wsend({ op: "get_current_room_users", d: {} });
}
},
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
if (location.pathname.startsWith("/room/")) {
let found = false;
const parts = location.pathname.split("/");
const id = parts.find((x) => {
if (found) {
return true;
}
if (x === "room") {
found = true;
}
return false;
});
if (id && isUuid(id)) {
wsend({ op: "join_room", d: { roomId: id } });
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
};
import create from "zustand";
import { combine } from "zustand/middleware";
import { BaseUser } from "../../types";
import { useSoundEffectStore } from "../sound-effects/useSoundEffectStore";
export const useRoomChatMentionStore = create(
combine(
{
mentions: [] as BaseUser[],
queriedUsernames: [] as BaseUser[],
activeUsername: "",
iAmMentioned: 0,
},
(set) => ({
setMentions: (mentions: BaseUser[]) =>
set({
mentions,
}),
setQueriedUsernames: (queriedUsernames: BaseUser[]) =>
set({
queriedUsernames,
}),
setActiveUsername: (activeUsername: string) => {
return set({
activeUsername,
});
},
resetIAmMentioned: () =>
set({
iAmMentioned: 0,
}),
incrementIAmMentioned: () => {
useSoundEffectStore.getState().playSoundEffect("roomChatMention");
set((x) => ({ iAmMentioned: x.iAmMentioned + 1 }));
},
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
import { useRoomChatMentionStore } from "./useRoomChatMentionStore";
interface TextToken {
t: "text";
v: string;
}
interface MentionToken {
t: "mention";
v: string;
}
interface LinkToken {
t: "link";
v: string;
}
export type RoomChatMessageToken = TextToken | MentionToken | LinkToken;
const colors = [
"#ff2366",
"#fd51d9",
"#face15",
"#8d4de8",
"#6859ea",
"#7ed321",
"#56b2ba",
"#00CCFF",
"#FF9900",
"#FFFF66",
];
function generateColorFromString(str: string) {
let sum = 0;
for (let x = 0; x < str.length; x++) sum += x * str.charCodeAt(x);
return colors[sum % colors.length];
}
export interface RoomChatMessage {
id: string;
userId: string;
avatarUrl: string;
color: string;
displayName: string;
tokens: RoomChatMessageToken[];
deleted?: boolean;
deleterId?: string;
sentAt: string;
isWhisper?: boolean;
}
export const useRoomChatStore = create(
combine(
{
open: false,
bannedUserIdMap: {} as Record<string, boolean>,
messages: [] as RoomChatMessage[],
newUnreadMessages: false,
message: "" as string,
isRoomChatScrolledToTop: false,
},
(set) => ({
addBannedUser: (userId: string) =>
set((s) => ({
messages: s.messages.filter((m) => m.userId !== userId),
bannedUserIdMap: { ...s.bannedUserIdMap, [userId]: true },
})),
addMessage: (m: RoomChatMessage) =>
set((s) => ({
newUnreadMessages: !s.open,
messages: [
{ ...m, color: generateColorFromString(m.userId) },
...(s.messages.length > 100
? s.messages.slice(0, 100)
: s.messages),
],
})),
setMessages: (messages: RoomChatMessage[]) =>
set((s) => ({
messages,
})),
clearChat: () =>
set({
messages: [],
newUnreadMessages: false,
bannedUserIdMap: {},
}),
reset: () =>
set({
messages: [],
newUnreadMessages: false,
open: false,
bannedUserIdMap: {},
}),
toggleOpen: () =>
set((s) => {
// Reset mention state
useRoomChatMentionStore.getState().resetIAmMentioned();
if (s.open) {
return {
open: false,
newUnreadMessages: false,
};
} else {
return {
open: true,
newUnreadMessages: false,
};
}
}),
setMessage: (message: string) =>
set({
message,
}),
setOpen: (open: boolean) => set((s) => ({ ...s, open })),
setIsRoomChatScrolledToTop: (isRoomChatScrolledToTop: boolean) =>
set({
isRoomChatScrolledToTop,
}),
})
)
);
import { useMediaQuery } from "react-responsive";
import { roomChatMediaQuery } from "./RoomChat";
import { useRoomChatStore } from "./useRoomChatStore";
export const useShouldFullscreenChat = () => {
const chatShouldBeSidebar = useMediaQuery({ query: roomChatMediaQuery });
const open = useRoomChatStore((s) => s.open);
return !chatShouldBeSidebar && open;
};
export const useShouldBeSidebar = () => {
return useMediaQuery({ query: roomChatMediaQuery });
};
import create from "zustand";
import { combine } from "zustand/middleware";
export const soundEffects = {
roomChatMention: "roomChatMention.ogg",
unmute: "unmute.wav",
mute: "mute.wav",
roomInvite: "roomInvite.wav",
};
export type PossibleSoundEffect = keyof typeof soundEffects;
const keyToLocalStorageKey = (s: string) => `@sound-effect/${s}`;
function getInitialSettings() {
const soundEffectSettings: Record<PossibleSoundEffect, boolean> = {
roomChatMention: true,
unmute: true,
mute: true,
roomInvite: true,
};
try {
Object.keys(soundEffects).forEach((key) => {
const v = localStorage.getItem(keyToLocalStorageKey(key)) || "";
soundEffectSettings[key as PossibleSoundEffect] = !v || v === "true";
});
} catch {}
return soundEffectSettings;
}
export const useSoundEffectStore = create(
combine(
{
audioRefMap: {} as Record<string, HTMLAudioElement>,
settings: getInitialSettings(),
},
(set, get) => ({
setSetting: (key: PossibleSoundEffect, value: boolean) => {
try {
localStorage.setItem(keyToLocalStorageKey(key), value.toString());
} catch {}
set((x) => ({
settings: { ...x.settings, [key]: value },
}));
},
playSoundEffect: (se: keyof typeof soundEffects, force = false) => {
const { audioRefMap, settings } = get();
if (force || settings[se]) {
audioRefMap[se]?.play();
}
},
add: (key: string, audio: HTMLAudioElement) =>
set((s) => ({ audioRefMap: { ...s.audioRefMap, [key]: audio } })),
})
)
);
import { atom } from "jotai";
export const volumeAtom = atom(100);
import i18n from "i18next";
import Backend from "i18next-http-backend";
import LanguageDetector from "i18next-browser-languagedetector";
import { initReactI18next } from "react-i18next";
import { __prod__ } from "./app/constants";
import { isDate } from "lodash";
export const init_i18n = () => {
i18n
// import & load translations from -> /public/locales
.use(Backend)
// https://github.com/i18next/i18next-browser-languageDetector
.use(LanguageDetector)
// pass the i18n instance to react-i18next.
.use(initReactI18next)
// init i18next
// see opts @ https://www.i18next.com/overview/configuration-options
.init({
fallbackLng: "en",
debug: __prod__ ? false : true,
interpolation: {
escapeValue: false,
format: (value, format, lng) => {
return isDate(value) && format ? new Intl.DateTimeFormat(lng,
createDateFormatOptions(format)).format(value).toString()
: value;
}
},
react: {
useSuspense: false, // fixes 'no fallback UI was specified' in react i18next when using hooks
},
});
};
function createDateFormatOptions(format: string): Intl.DateTimeFormatOptions {
switch (format) {
case 'intlDate': {
// EN returns 3/16/2021, 5:45 PM
return {
year: 'numeric', month: 'numeric', day: 'numeric',
hour: 'numeric', minute: 'numeric'
}
}
case 'intlTime': {
// EN returns 05:45 PM
return {
hour: 'numeric', minute: 'numeric'
}
}
default: {
// EN returns Tuesday, March 16, 2021, 5:45 PM
return {
weekday: 'long', year: 'numeric', month: 'long',
day: 'numeric', hour: 'numeric', minute: 'numeric'
}
}
}
}
import ReconnectingWebSocket from "reconnecting-websocket";
import { useTokenStore } from "./app/utils/useTokenStore";
import { showErrorToast } from "./app/utils/showErrorToast";
import { apiBaseUrl } from "./app/constants";
import { useSocketStatus } from "./webrtc/stores/useSocketStatus";
import { useWsHandlerStore } from "./webrtc/stores/useWsHandlerStore";
import { useVoiceStore } from "./webrtc/stores/useVoiceStore";
import { useMuteStore } from "./webrtc/stores/useMuteStore";
import { uuidv4 } from "./webrtc/utils/uuidv4";
import { WsParam } from "./app/types";
import { useCurrentRoomStore } from "./webrtc/stores/useCurrentRoomStore";
import { toast } from "react-toastify";
import { queryClient } from "./app/queryClient";
let ws: ReconnectingWebSocket | null;
let authGood = false;
let lastMsg = "";
export const auth_query = "auth";
window.addEventListener("online", () => {
if (ws && ws.readyState === ws.CLOSED) {
toast("reconnecting...", { type: "info" });
console.log("online triggered, calling ws.reconnect()");
ws.reconnect();
}
});
export const closeWebSocket = () => {
ws?.close();
};
export const createWebSocket = (force?: boolean) => {
console.log("createWebSocket ");
if (!force && ws) {
console.log("ws already connected");
return;
} else {
console.log("new ws instance incoming");
}
const { accessToken, refreshToken } = useTokenStore.getState();
if (!accessToken || !refreshToken) {
return;
}
useSocketStatus.getState().setStatus("connecting");
ws = new ReconnectingWebSocket(
apiBaseUrl.replace("http", "ws") + "/socket",
undefined,
{ connectionTimeout: 15000 }
);
ws.addEventListener("close", ({ code, reason }) => {
const { setStatus } = useSocketStatus.getState();
authGood = false;
if (code === 4001) {
console.log("clearing tokens");
useWsHandlerStore.getState().authHandler?.(null);
useTokenStore.getState().setTokens({ accessToken: "", refreshToken: "" });
ws?.close();
ws = null;
setStatus("closed");
} else if (code === 4003) {
ws?.close();
ws = null;
setStatus("closed-by-server");
} else if (code === 4004) {
ws?.close();
ws = null;
} else {
// @todo do more of a status bar thing
setStatus("closed");
}
console.log("ws closed", code, reason);
});
ws.addEventListener("open", () => {
useSocketStatus.getState().setStatus("open");
const { recvTransport, sendTransport } = useVoiceStore.getState();
const reconnectToVoice = !recvTransport
? true
: recvTransport.connectionState !== "connected" &&
sendTransport?.connectionState !== "connected";
console.log({
reconnectToVoice,
recvState: recvTransport?.connectionState,
sendState: sendTransport?.connectionState,
});
queryClient.prefetchQuery(
auth_query,
() =>
wsAuthFetch({
op: auth_query,
d: {
accessToken,
refreshToken,
reconnectToVoice,
currentRoomId: useCurrentRoomStore.getState().currentRoom?.id,
muted: useMuteStore.getState().muted,
platform: "web",
},
}),
{ staleTime: 0 }
);
// @todo do more of a status bar thing
// toast("connected", { type: "success" });
console.log("ws opened");
const id = setInterval(() => {
if (ws && ws.readyState !== ws.CLOSED) {
ws.send("ping");
} else {
clearInterval(id);
}
}, 8000);
});
ws.addEventListener("message", (e) => {
// console.log(e.data);
const json = JSON.parse(e.data as string);
if (e.data === '"pong"') {
return;
}
switch (json.op) {
case "new-tokens": {
useTokenStore.getState().setTokens({
accessToken: json.d.accessToken,
refreshToken: json.d.refreshToken,
});
break;
}
case "error": {
showErrorToast(json.d);
break;
}
default: {
const {
handlerMap,
fetchResolveMap,
authHandler,
} = useWsHandlerStore.getState();
if (json.op === "auth-good") {
if (lastMsg) {
ws?.send(lastMsg);
lastMsg = "";
}
authGood = true;
useSocketStatus.getState().setStatus("auth-good");
if (authHandler) {
authHandler(json.d);
} else {
console.error("something went wrong, authHandler is null");
}
}
// console.log("ws: ", json.op);
if (json.op in handlerMap) {
handlerMap[json.op](json.d);
} else if (
json.op === "fetch_done" &&
json.fetchId &&
json.fetchId in fetchResolveMap
) {
fetchResolveMap[json.fetchId](json.d);
}
break;
}
}
});
};
export const wsend = (d: { op: string; d: any }) => {
if (!authGood || !ws || ws.readyState !== ws.OPEN) {
console.log("ws not ready");
lastMsg = JSON.stringify(d);
} else {
ws?.send(JSON.stringify(d));
}
};
export const wsAuthFetch = <T>(d: WsParam) => {
return new Promise<T>((res, rej) => {
if (!ws || ws.readyState !== ws.OPEN) {
rej(new Error("can't connect to server"));
} else {
setTimeout(() => {
rej(new Error("request timed out"));
}, 10000); // 10 secs
useWsHandlerStore.getState().addAuthHandler((d) => {
if (d) {
res(d);
}
});
ws?.send(JSON.stringify(d));
}
});
};
export const wsFetch = <T>(d: WsParam) => {
return new Promise<T>((res, rej) => {
if (!authGood || !ws || ws.readyState !== ws.OPEN) {
rej(new Error("can't connect to server"));
} else {
const fetchId = uuidv4();
setTimeout(() => {
useWsHandlerStore.getState().clearFetchListener(fetchId);
rej(new Error("request timed out"));
}, 10000); // 10 secs
useWsHandlerStore.getState().addFetchListener(fetchId, (d) => {
res(d);
});
ws?.send(JSON.stringify({ ...d, fetchId }));
}
});
};
export const wsMutation = (d: WsParam) => wsFetch(d);
export const wsMutationThrowError = (d: WsParam) =>
wsFetch(d).then((x: any) => {
if (x.error) {
throw new Error(x.error);
}
return x;
});
/// <reference types="react-scripts" />
import create from "zustand";
import { combine } from "zustand/middleware";
export const useAudioTracks = create(
combine(
{
tracks: [] as MediaStreamTrack[],
},
(set) => ({
add: (track: MediaStreamTrack) =>
set((s) => ({ tracks: [...s.tracks, track] })),
})
)
);
import { Consumer } from "mediasoup-client/lib/types";
import create from "zustand";
import { combine } from "zustand/middleware";
export const useConsumerStore = create(
combine(
{
consumerMap: {} as Record<string, { consumer: Consumer; volume: number }>,
},
(set) => ({
setVolume: (userId: string, volume: number) => {
set((s) =>
userId in s.consumerMap
? {
consumerMap: {
...s.consumerMap,
[userId]: {
...s.consumerMap[userId],
volume,
},
},
}
: s
);
},
add: (c: Consumer, userId: string) =>
set((s) => {
let volume = 100;
if (userId in s.consumerMap) {
const x = s.consumerMap[userId];
volume = x.volume;
x.consumer.close();
}
return {
consumerMap: {
...s.consumerMap,
[userId]: { consumer: c, volume },
},
};
}),
closeAll: () =>
set((s) => {
Object.values(s.consumerMap).forEach(
({ consumer: c }) => !c.closed && c.close()
);
return {
consumerMap: {},
};
}),
})
)
);
import { Producer } from "mediasoup-client/lib/types";
import create from "zustand";
import { combine } from "zustand/middleware";
export const useProducerStore = create(
combine(
{
producer: null as Producer | null,
},
(set) => ({
add: (p: Producer) =>
set((s) => {
if (s.producer && !s.producer.closed) {
s.producer.close();
}
return { producer: p };
}),
close: () =>
set((s) => {
if (s.producer && !s.producer.closed) {
s.producer.close();
}
return {
producer: null,
};
}),
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
import { CurrentRoom } from "../../app/types";
export const useCurrentRoomStore = create(
combine(
{
currentRoom: null as CurrentRoom | null,
},
(set) => ({
set,
setCurrentRoom: (fn: (cr: CurrentRoom | null) => CurrentRoom | null) =>
set((s) => ({ currentRoom: fn(s.currentRoom) })),
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
type Handler = (d: any) => void;
export const useWsHandlerStore = create(
combine(
{
handlerMap: {} as Record<string, Handler>,
fetchResolveMap: {} as Record<string, Handler>,
authHandler: null as null | Handler,
},
(set) => ({
addAuthHandler: (authHandler: Handler | null) => set({ authHandler }),
addMultipleWsListener: (x: Record<string, Handler>) => {
set((s) => ({
handlerMap: {
...s.handlerMap,
...x,
},
}));
return () =>
set((s) => {
const newMap = { ...s.handlerMap };
Object.keys(x).forEach((k) => {
delete newMap[k];
});
return {
handlerMap: newMap,
};
});
},
addWsListener: (op: string, fn: (d: any) => void) => {
return set((s) => ({
handlerMap: {
...s.handlerMap,
[op]: fn,
},
}));
},
addWsListenerOnce: (op: string, fn: (d: any) => void) => {
return set((s) => ({
handlerMap: {
...s.handlerMap,
[op]: (dx: any) => {
fn(dx);
set(({ handlerMap: { [op]: _, ...handlerMap } }) => ({
handlerMap,
}));
},
},
}));
},
clearFetchListener: (id: string) => {
return set(({ fetchResolveMap: { [id]: _, ...fetchResolveMap } }) => ({
fetchResolveMap,
}));
},
addFetchListener: (id: string, fn: (d: any) => void) => {
return set((s) => ({
fetchResolveMap: {
...s.fetchResolveMap,
[id]: (dx: any) => {
fn(dx);
set(({ fetchResolveMap: { [id]: _, ...fetchResolveMap } }) => ({
fetchResolveMap,
}));
},
},
}));
},
set,
})
)
);
import { Device } from "mediasoup-client";
import { detectDevice, Transport } from "mediasoup-client/lib/types";
import create from "zustand";
import { combine } from "zustand/middleware";
export const getDevice = () => {
try {
let handlerName = detectDevice();
if (!handlerName) {
console.warn(
"mediasoup does not recognize this device, so ben has defaulted it to Chrome74"
);
handlerName = "Chrome74";
}
return new Device({ handlerName });
} catch {
return null;
}
};
export const useVoiceStore = create(
combine(
{
roomId: "",
micStream: null as MediaStream | null,
mic: null as MediaStreamTrack | null,
recvTransport: null as Transport | null,
sendTransport: null as Transport | null,
device: getDevice(),
},
(set) => ({
nullify: () =>
set({
recvTransport: null,
sendTransport: null,
roomId: "",
mic: null,
micStream: null,
}),
set,
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
export const useMicPermErrorStore = create(
combine(
{
error: false,
},
(set) => ({
set,
})
)
);
import { KeyMap } from "react-hotkeys";
import create from "zustand";
import { combine } from "zustand/middleware";
const MUTE_KEY = "@keybind/mute";
const CHAT_KEY = "@keybind/chat";
const PTT_KEY = "@keybind/ptt";
function getMuteKeybind() {
let v = "";
try {
v = localStorage.getItem(MUTE_KEY) || "";
} catch {}
return v || "Control+m";
}
function getChatKeybind() {
let v = "";
try {
v = localStorage.getItem(CHAT_KEY) || "";
} catch {}
return v || "Control+9";
}
function getPTTKeybind() {
let v = "";
try {
v = localStorage.getItem(PTT_KEY) || "";
} catch {}
return v || "Control+0";
}
const keyMap: KeyMap = {
MUTE: getMuteKeybind(),
CHAT: getChatKeybind(),
PTT: [
{ sequence: getPTTKeybind(), action: "keydown" },
{ sequence: getPTTKeybind(), action: "keyup" },
],
};
const keyNames: KeyMap = {
MUTE: getMuteKeybind(),
CHAT: getChatKeybind(),
PTT: getPTTKeybind(),
};
export const useKeyMapStore = create(
combine(
{
keyMap,
keyNames,
},
(set) => ({
setMuteKeybind: (id: string) => {
try {
localStorage.setItem(MUTE_KEY, id);
} catch {}
set((x) => ({
keyMap: { ...x.keyMap, MUTE: id },
keyNames: { ...x.keyNames, MUTE: id },
}));
},
setChatKeybind: (id: string) => {
try {
localStorage.setItem(CHAT_KEY, id);
} catch {}
set((x) => ({
keyMap: { ...x.keyMap, CHAT: id },
keyNames: { ...x.keyNames, CHAT: id },
}));
},
setPTTKeybind: (id: string) => {
try {
localStorage.setItem(PTT_KEY, id);
} catch {}
set((x) => ({
keyMap: {
...x.keyMap,
PTT: [
{ sequence: id, action: "keydown" },
{ sequence: id, action: "keyup" },
],
},
keyNames: { ...x.keyNames, PTT: id },
}));
},
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
export const useAskForMicStore = create(
combine(
{
hasAsked: false,
},
(set) => ({
set,
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
type State =
| "init"
| "ws-disconnected"
| "voice-server-disconnected"
| "connected-no-room"
| "connected-listener"
| "bad-auth"
| "killed"
| "connected-speaker";
export const useStatus = create(
combine(
{
status: "init" as State,
},
(set) => ({
setStatus: (status: State) => set({ status }),
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
type State =
| "auth-good"
| "open"
| "connecting"
| "closed-by-server"
| "closed";
export const useSocketStatus = create(
combine(
{
status: "connecting" as State,
},
(set) => ({
setStatus: (status: State) => set({ status }),
})
)
);
import create from "zustand";
import { combine } from "zustand/middleware";
import { useSoundEffectStore } from "../../app/modules/sound-effects/useSoundEffectStore";
export const useMuteStore = create(
combine(
{
muted: false,
},
(set) => ({
setMute: (muted: boolean) => {
if (muted) {
useSoundEffectStore.getState().playSoundEffect("mute");
} else {
useSoundEffectStore.getState().playSoundEffect("unmute");
}
set({ muted });
},
})
)
);
import { RtpCapabilities } from "mediasoup-client/lib/types";
import { useVoiceStore } from "../stores/useVoiceStore";
export const joinRoom = async (routerRtpCapabilities: RtpCapabilities) => {
const { device } = useVoiceStore.getState();
if (!device!.loaded) {
await device!.load({ routerRtpCapabilities });
}
};
import { wsend } from "../../createWebsocket";
import { modalPrompt } from "../../app/components/PromptModal";
export const renameRoomAndMakePrivate = (currentName: string) => {
modalPrompt(
"Set private room name",
(roomName) => {
if (roomName) {
wsend({ op: "make_room_private", d: { newName: roomName } });
}
},
currentName
);
};
import { useConsumerStore } from "../stores/useConsumerStore";
import { useVoiceStore } from "../stores/useVoiceStore";
export const consumeAudio = async (consumerParameters: any, peerId: string) => {
const { recvTransport } = useVoiceStore.getState();
if (!recvTransport) {
console.log("skipping consumeAudio because recvTransport is null");
return false;
}
const consumer = await recvTransport.consume({
...consumerParameters,
appData: {
peerId,
producerId: consumerParameters.producerId,
mediaTag: "cam-audio",
},
});
useConsumerStore.getState().add(consumer, peerId);
return true;
};
import { wsend } from "../../createWebsocket";
import { modalPrompt } from "../../app/components/PromptModal";
export const renameRoomAndMakePublic = (currentName: string) => {
modalPrompt(
"Set public room name",
(roomName) => {
if (roomName) {
wsend({ op: "make_room_public", d: { newName: roomName } });
}
},
currentName
);
};
import { wsend } from "../../createWebsocket";
import { useVoiceStore } from "../stores/useVoiceStore";
import { useWsHandlerStore } from "../stores/useWsHandlerStore";
import { consumeAudio } from "./consumeAudio";
export const receiveVoice = (flushQueue: () => void) => {
useWsHandlerStore
.getState()
.addWsListenerOnce(
"@get-recv-tracks-done",
async ({ consumerParametersArr }) => {
try {
for (const { peerId, consumerParameters } of consumerParametersArr) {
if (!(await consumeAudio(consumerParameters, peerId))) {
break;
}
}
} catch (err) {
console.log(err);
} finally {
flushQueue();
}
}
);
wsend({
op: "@get-recv-tracks",
d: {
rtpCapabilities: useVoiceStore.getState().device!.rtpCapabilities,
},
});
};
import { useMicIdStore } from "../../app/shared-stores";
import { useMicPermErrorStore } from "../stores/useMicPermErrorStore";
import { useProducerStore } from "../stores/useProducerStore";
import { useVoiceStore } from "../stores/useVoiceStore";
export const sendVoice = async () => {
const { micId } = useMicIdStore.getState();
const { sendTransport, set, mic } = useVoiceStore.getState();
if (!sendTransport) {
console.log("no sendTransport in sendVoice");
return;
}
mic?.stop();
let micStream: MediaStream;
try {
micStream = await navigator.mediaDevices.getUserMedia({
audio: micId ? { deviceId: micId } : true,
});
useMicPermErrorStore.getState().set({ error: false });
} catch (err) {
set({ mic: null, micStream: null });
console.log(err);
useMicPermErrorStore.getState().set({ error: true });
return;
}
const audioTracks = micStream.getAudioTracks();
if (audioTracks.length) {
console.log("creating producer...");
const track = audioTracks[0];
useProducerStore.getState().add(
await sendTransport.produce({
track: track,
appData: { mediaTag: "cam-audio" },
})
);
set({ mic: track, micStream });
return;
}
set({ mic: null, micStream: null });
};
import { TransportOptions } from "mediasoup-client/lib/types";
import { wsend } from "../../createWebsocket";
import { useVoiceStore } from "../stores/useVoiceStore";
import { useWsHandlerStore } from "../stores/useWsHandlerStore";
export async function createTransport(
_roomId: string,
direction: "recv" | "send",
transportOptions: TransportOptions
) {
console.log(`create ${direction} transport`);
const { device, set } = useVoiceStore.getState();
// ask the server to create a server-side transport object and send
// us back the info we need to create a client-side transport
console.log("transport options", transportOptions);
let transport =
direction === "recv"
? await device!.createRecvTransport(transportOptions)
: await device!.createSendTransport(transportOptions);
// mediasoup-client will emit a connect event when media needs to
// start flowing for the first time. send dtlsParameters to the
// server, then call callback() on success or errback() on failure.
transport.on("connect", async ({ dtlsParameters }, callback, errback) => {
useWsHandlerStore
.getState()
.addWsListenerOnce(`@connect-transport-${direction}-done`, (d) => {
if (d.error) {
console.log(`connect-transport ${direction} failed`, d.error);
if (d.error.includes("already called")) {
callback();
} else {
errback();
}
} else {
console.log(`connect-transport ${direction} success`);
callback();
}
});
wsend({
op: "@connect-transport",
d: { transportId: transportOptions.id, dtlsParameters, direction },
});
});
if (direction === "send") {
// sending transports will emit a produce event when a new track
// needs to be set up to start sending. the producer's appData is
// passed as a parameter
transport.on(
"produce",
async ({ kind, rtpParameters, appData }, callback, errback) => {
console.log("transport produce event", appData.mediaTag);
// we may want to start out paused (if the checkboxes in the ui
// aren't checked, for each media type. not very clean code, here
// but, you know, this isn't a real application.)
let paused = false;
// if (appData.mediaTag === "cam-video") {
// paused = getCamPausedState();
// } else if (appData.mediaTag === "cam-audio") {
// paused = getMicPausedState();
// }
// tell the server what it needs to know from us in order to set
// up a server-side producer object, and get back a
// producer.id. call callback() on success or errback() on
// failure.
useWsHandlerStore
.getState()
.addWsListenerOnce(`@send-track-${direction}-done`, (d) => {
if (d.error) {
console.log(`send-track ${direction} failed`, d.error);
errback();
} else {
console.log(`send-track-transport ${direction} success`);
callback({ id: d.id });
}
});
wsend({
op: "@send-track",
d: {
transportId: transportOptions.id,
kind,
rtpParameters,
rtpCapabilities: device!.rtpCapabilities,
paused,
appData,
direction,
},
});
}
);
}
// for this simple demo, any time a transport transitions to closed,
// failed, or disconnected, leave the room and reset
//
transport.on("connectionstatechange", async (state) => {
console.log(
`${direction} transport ${transport.id} connectionstatechange ${state}`
);
});
if (direction === "recv") {
set({ recvTransport: transport });
} else {
set({ sendTransport: transport });
}
}
import { RoomPermissions } from "../../app/types";
export const mergeRoomPermission = (
currentRoomPermission: RoomPermissions | null | undefined,
newRoomPermissions: Partial<RoomPermissions>
) => {
return {
...(currentRoomPermission || {
askedToSpeak: false,
isMod: false,
isSpeaker: false,
}),
...newRoomPermissions,
};
};
// https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid
export function uuidv4(): string {
// @ts-ignore
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
(
c ^
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
).toString(16)
);
}
export type AddWsListenerOnce = (op: string, fn: (d: any) => void) => void;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment