import React, { useCallback, useState } from 'react'; import { Box, Text, IconButton, Icon, Icons, Scroll, Switch, Button, MenuItem, config, color, } from 'folds'; import { Page, PageContent, PageHeader } from '../../../components/page'; import { SequenceCard } from '../../../components/sequence-card'; import { SequenceCardStyle } from '../styles.css'; import { SettingTile } from '../../../components/setting-tile'; import { useSetting } from '../../../state/hooks/settings'; import { settingsAtom } from '../../../state/settings'; import { copyToClipboard } from '../../../utils/dom'; import { useRoom } from '../../../hooks/useRoom'; import { useRoomState } from '../../../hooks/useRoomState'; import { StateEventEditor, StateEventInfo } from './StateEventEditor'; import { SendRoomEvent } from './SendRoomEvent'; import { useRoomAccountData } from '../../../hooks/useRoomAccountData'; import { CutoutCard } from '../../../components/cutout-card'; import { AccountDataEditor, AccountDataSubmitCallback, } from '../../../components/AccountDataEditor'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; type DeveloperToolsProps = { requestClose: () => void; }; export function DeveloperTools({ requestClose }: DeveloperToolsProps) { const [developerTools, setDeveloperTools] = useSetting(settingsAtom, 'developerTools'); const mx = useMatrixClient(); const room = useRoom(); const roomState = useRoomState(room); const accountData = useRoomAccountData(room); const [expandState, setExpandState] = useState(false); const [expandStateType, setExpandStateType] = useState(); const [openStateEvent, setOpenStateEvent] = useState(); const [composeEvent, setComposeEvent] = useState<{ type?: string; stateKey?: string }>(); const [expandAccountData, setExpandAccountData] = useState(false); const [accountDataType, setAccountDataType] = useState(); const handleClose = useCallback(() => { setOpenStateEvent(undefined); setComposeEvent(undefined); setAccountDataType(undefined); }, []); const submitAccountData: AccountDataSubmitCallback = useCallback( async (type, content) => { await mx.setRoomAccountData(room.roomId, type, content); }, [mx, room.roomId] ); if (accountDataType !== undefined) { return ( ); } if (composeEvent) { return ; } if (openStateEvent) { return ; } return ( Developer Tools Options } /> {developerTools && ( copyToClipboard(room.roomId ?? '')} variant="Secondary" fill="Soft" size="300" radii="300" outlined > Copy } /> )} {developerTools && ( Data setComposeEvent({})} variant="Secondary" fill="Soft" size="300" radii="300" outlined > Compose } /> setExpandState(!expandState)} variant="Secondary" fill="Soft" size="300" radii="300" outlined before={ } > {expandState ? 'Collapse' : 'Expand'} } /> {expandState && ( Events Total: {roomState.size} setComposeEvent({ stateKey: '' })} variant="Surface" fill="None" size="300" radii="0" before={} > Add New {Array.from(roomState.keys()) .sort() .map((eventType) => { const expanded = eventType === expandStateType; const stateKeyToEvents = roomState.get(eventType); if (!stateKeyToEvents) return null; return ( setExpandStateType(expanded ? undefined : eventType) } variant="Surface" fill="None" size="300" radii="0" before={ } after={{stateKeyToEvents.size}} > {eventType} {expanded && (
setComposeEvent({ type: eventType, stateKey: '' }) } variant="Surface" fill="None" size="300" radii="0" before={} > Add New {Array.from(stateKeyToEvents.keys()) .sort() .map((stateKey) => ( { setOpenStateEvent({ type: eventType, stateKey, }); }} key={stateKey} variant="Surface" fill="None" size="300" radii="0" after={} > {stateKey ? `"${stateKey}"` : 'Default'} ))}
)}
); })}
)}
setExpandAccountData(!expandAccountData)} variant="Secondary" fill="Soft" size="300" radii="300" outlined before={ } > {expandAccountData ? 'Collapse' : 'Expand'} } /> {expandAccountData && ( Events Total: {accountData.size} } onClick={() => setAccountDataType(null)} > Add New {Array.from(accountData.keys()) .sort() .map((type) => ( } onClick={() => setAccountDataType(type)} > {type} ))} )}
)}
); }