Spaces:
Sleeping
Sleeping
File size: 3,126 Bytes
76b9248 1e8ff3b b3de037 1e8ff3b 76b9248 1e8ff3b 76b9248 1e8ff3b b3de037 76b9248 b3de037 76b9248 b3de037 1e8ff3b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import { Button } from "@mantine/core";
import { IconArrowRight, IconChevronRight } from "@tabler/icons-react";
import { useState } from "react";
import { apiUrl } from "../utils";
export default function CreateRoom({ onCreateRoom }) {
const [fetching, setFetching] = useState(false);
const [roomUrl, setRoomUrl] = useState();
const [showManual, setShowManual] = useState(false);
async function create() {
setFetching(true);
const resp = await fetch(`${apiUrl}/create`, {
method: "POST",
mode: "cors",
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/json",
},
});
const data = await resp.json();
if (!data.room_url) {
setFetching(false);
console.log("error creating room");
}
onCreateRoom(data.room_url);
}
return (
<div className="bg-white shadow sm:rounded-lg max-w-xl mx-auto">
<div className="px-4 py-5 sm:p-6">
<h3 className="text-base font-semibold leading-6 text-gray-900">
What is this
</h3>
<div className="mt-2 text-sm text-gray-500">
<p>Explanation goes here</p>
</div>
<div className="mt-5">
<Button
rightSection={<IconArrowRight stroke={2} className="h-5 w-5" />}
size="md"
loading={fetching}
onClick={() => create()}
>
Join
</Button>
</div>
<hr className="my-6" />
<div
className="inline-flex items-center gap-1 text-sm text-gray-500 cursor-pointer"
onClick={() => setShowManual(!showManual)}
>
Join an existing room
<IconChevronRight
stoke={2}
className={`w-4 h-4 text-gray-300 transition-transform ${
showManual && "rotate-90"
}`}
/>
</div>
{showManual && (
<div className="mt-5 sm:flex sm:items-center">
<div className="w-full">
<label htmlFor="room" className="sr-only">
Daily Room URL
</label>
<input
type="text"
name="room"
id="room"
className="block w-full rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
placeholder="https://..."
onChange={(e) => setRoomUrl(e.target.value)}
/>
</div>
<button
type="submit"
onClick={() => onCreateRoom(roomUrl)}
className="mt-3 inline-flex w-full items-center justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 sm:ml-3 sm:mt-0 sm:w-auto"
>
Join
</button>
</div>
)}
</div>
</div>
);
}
|