import React, { useCallback } from 'react'; import { Box, Button, Header, Text, config } from 'folds'; import { Room } from 'matrix-js-sdk'; import { Page } from '../../components/page'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { useStateEvent } from '../../hooks/useStateEvent'; import { useRoomName } from '../../hooks/useRoomMeta'; import { MessageEvent, PaarrotUiActionContent, StateEvent, } from '../../../types/matrix/room'; import { parsePaarrotUiContent } from '../../utils/room'; import { RoomAppSchema } from './RoomAppSchema'; import * as css from './RoomAppView.css'; type RoomAppViewProps = { room: Room; onShowChat: () => void; }; export function RoomAppView({ room, onShowChat }: RoomAppViewProps) { const mx = useMatrixClient(); const useAuthentication = useMediaAuthentication(); const roomName = useRoomName(room); const uiEvent = useStateEvent(room, StateEvent.PaarrotUi); const content = parsePaarrotUiContent(uiEvent?.getContent()); const title = content?.title || roomName || 'Room App'; const handleAction = useCallback( async (payload: PaarrotUiActionContent) => { await mx.sendEvent(room.roomId, MessageEvent.PaarrotUiAction as any, payload); }, [mx, room.roomId] ); return (
{title}
{content ? ( ) : ( This room’s app UI is missing or invalid. )}
); }