import { Accordion, AccordionDetails, AccordionSummary, Button, Dialog, DialogActions, DialogContent, DialogTitle, Divider, Stack, Typography } from '@mui/material'; import CircularProgress from '@mui/material/CircularProgress'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import { Box } from '@mui/system'; import { useObjectDiscovery } from '@hyper-hyper-space/react'; import { Hash, Identity, ObjectDiscoveryReply } from '@hyper-hyper-space/core'; import { Fragment, useState, useEffect } from 'react'; import { SpaceDisplayInfo, supportedSpaces } from '../../../model/SupportedSpaces'; import { useNavigate, useParams } from 'react-router'; function LookupSpaceDialog() { const navigate = useNavigate(); const params = useParams(); const discovered = useObjectDiscovery(params.words, 'en', 10, true); const wait = discovered === undefined || discovered.size === 0; const errors = discovered? Array.from(discovered.values()).filter((r: ObjectDiscoveryReply) => (r.object === undefined || (!(r.object instanceof Identity) && supportedSpaces.get(r.object.getClassName()) === undefined))) : []; const results = discovered? Array.from(discovered.values()).filter((r: ObjectDiscoveryReply) => r.object !== undefined && (r.object instanceof Identity || supportedSpaces.get(r.object.getClassName()) !== undefined)) : []; const closeLookupDialog = () => { navigate('/start'); } const openSpace = (entryPointHash: Hash) => { window.open('./#/space/' + encodeURIComponent(entryPointHash), '_blank'); } const [discoveryTimeout, setDiscoveryTimeout] = useState(undefined); const [showTimeoutMessage, setShowTimeoutMessage] = useState(false); const discoveryTimeoutCallback = () => { setShowTimeoutMessage(true); setDiscoveryTimeout(undefined); } useEffect(() => { setDiscoveryTimeout(window.setTimeout(discoveryTimeoutCallback, 8000)); return () => { if (discoveryTimeout !== undefined) { window.clearTimeout(discoveryTimeout); setDiscoveryTimeout(undefined); } }; }, []); return ( Looking up {params.words} {wait && { showTimeoutMessage && This is taking longer than expected. Are your 3-words correct? Poke someone to open this space then. } } {!wait && {errors.length > 0 && } aria-controls="lookup errors" id="lookup-errors" sx={{bgColor: 'red'}}> {errors.length} {'error' + (errors.length > 1? 's' : '') + ' during look-up'} {errors.map((r:ObjectDiscoveryReply, idx: number) => {r.object !== undefined? ('Class ' + r.object.getClassName() + ' is not a supported Space type.') : r.error })} } {results.length > 0 && }> {results.map((r: ObjectDiscoveryReply) => {r.object instanceof Identity && {(r.object as Identity)?.info?.type || 'Identity'} named {(r.object as Identity)?.info?.name} } {!(r.object instanceof Identity) && Found a {(supportedSpaces.get(r.object?.getClassName() as string) as SpaceDisplayInfo).name}{r.object?.getAuthor()?.info?.name && space by {r.object?.getAuthor()?.info?.name} } } )} } } ); } export default LookupSpaceDialog;