diff --git a/src/App.jsx b/src/App.jsx index 00d3602..01314be 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -65,7 +65,7 @@ export default function App() { - + {authenticated ? ( ) : ( diff --git a/src/Home.jsx b/src/Home.jsx index f64693d..c3ee9d8 100644 --- a/src/Home.jsx +++ b/src/Home.jsx @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, { useCallback, useRef, useState } from "react"; +import React, { useCallback, useState } from "react"; import { useHistory, Link } from "react-router-dom"; import { useGroupCallRooms, @@ -33,11 +33,21 @@ import { Facepile } from "./Facepile"; const colorHash = new ColorHash({ lightness: 0.3 }); +function roomAliasFromRoomName(roomName) { + return roomName + .trim() + .replace(/\s/g, "-") + .replace(/[^\w-]/g, "") + .toLowerCase(); +} + export function Home({ client, onLogout }) { const history = useHistory(); - const roomNameRef = useRef(); - const guestAccessRef = useRef(); + const [roomName, setRoomName] = useState(""); + const [roomAlias, setRoomAlias] = useState(""); + const [guestAccess, setGuestAccess] = useState(false); const [createRoomError, setCreateRoomError] = useState(); + const [showAdvanced, setShowAdvanced] = useState(); const rooms = useGroupCallRooms(client); const publicRooms = usePublicRooms( client, @@ -49,11 +59,12 @@ export function Home({ client, onLogout }) { e.preventDefault(); setCreateRoomError(undefined); - async function createRoom(name, guestAccess) { - const { room_id } = await client.createRoom({ + async function createRoom(name, roomAlias, guestAccess) { + const { room_id, room_alias } = await client.createRoom({ visibility: "private", preset: "public_chat", name, + room_alias_name: roomAlias, power_level_content_override: { invite: 100, kick: 100, @@ -92,13 +103,18 @@ export function Home({ client, onLogout }) { GroupCallIntent.Prompt ); - history.push(`/room/${room_id}`); + history.push(`/room/${room_alias || room_id}`); } - createRoom( - roomNameRef.current.value, - guestAccessRef.current.checked - ).catch(setCreateRoomError); + const data = new FormData(e.target); + const roomName = data.get("roomName"); + const roomAlias = data.get("roomAlias"); + const guestAccess = data.get("guestAccess"); + + createRoom(roomName, roomAlias, guestAccess).catch((error) => { + setCreateRoomError(error); + setShowAdvanced(true); + }); }, [client] ); @@ -124,18 +140,35 @@ export function Home({ client, onLogout }) { required autoComplete="off" placeholder="Room Name" - ref={roomNameRef} - /> - - - setRoomName(e.target.value)} /> + + Advanced + + setRoomAlias(e.target.value)} + /> + + + setGuestAccess(e.target.checked)} + /> + + {createRoomError && ( {createRoomError.message} @@ -175,7 +208,7 @@ export function Home({ client, onLogout }) { :not(summary) { + margin-left: 16px; +} + +details[open] > summary { + margin-bottom: 16px; +}