diff --git a/server/routes/room.py b/server/routes/room.py index 83e75ad..1ccb8a8 100644 --- a/server/routes/room.py +++ b/server/routes/room.py @@ -51,6 +51,11 @@ class RoomId(BaseModel, TrpcMixin): id: uuid.UUID +class RoomPublishRequest(BaseModel): + id: uuid.UUID + publish: bool + + @router.get("/room.readMany") @requires("authenticated", status_code=401) async def read_many( @@ -310,7 +315,7 @@ async def room_update( async def publish( request: fastapi.Request, user: Annotated[User, Depends(authenticated_user)], - room: RoomId, + room: RoomPublishRequest, session: Annotated[AsyncSession, Depends(db_session)], ) -> TrpcResponse[RoomQuery]: async with session.begin(): @@ -318,7 +323,7 @@ async def publish( update(WaitingRoom) .where(WaitingRoom.id == str(room.id)) .where(WaitingRoom.owner_id == user.id) - .values(published=True) + .values(published=room.publish) .returning(WaitingRoom) ) result = (await session.execute(statement)).scalar_one() diff --git a/website/components/WaitingRoomDashboardCard.tsx b/website/components/WaitingRoomDashboardCard.tsx index 0874bde..2067a65 100644 --- a/website/components/WaitingRoomDashboardCard.tsx +++ b/website/components/WaitingRoomDashboardCard.tsx @@ -2,6 +2,7 @@ import Countdown from "./Countdown"; import moment, { type Moment } from "moment"; import { Link } from "../renderer/Link"; import { useQuery } from "@tanstack/react-query"; +import { trpc } from "../utils/trpc"; type WaitingRoomDashboardCardProps = { room: { @@ -9,6 +10,7 @@ type WaitingRoomDashboardCardProps = { title: string; opensAt: Moment; closesAt: Moment; + published: boolean; }; }; export default function WaitingRoomDashboardCard({ @@ -21,7 +23,7 @@ export default function WaitingRoomDashboardCard({ : "closed"; const headline = room.title || `Waiting Room ${room.id}`; - + const utils = trpc.useUtils(); const roomLiveQuery = useQuery<{ urlReady: boolean; }>({ @@ -42,6 +44,18 @@ export default function WaitingRoomDashboardCard({ }, }); + const publishApi = trpc.room.publish.useMutation({ + mutationKey: ["room.publish", room.id], + networkMode: "online", + retry: false, + onSuccess: async () => { + await Promise.all([ + utils.room.readUnique.invalidate({ id: room.id }), + utils.room.readMany.invalidate(), + ]); + }, + }); + return (