import { Identity, ObjectDiscoveryReply, Resources, WordCode } from "@hyper-hyper-space/core"; import { useObjectDiscoveryWithResources } from "@hyper-hyper-space/react"; import { CircularProgress, Divider, TextField, Typography, Stack } from "@mui/material"; import { Box } from "@mui/system"; import { Fragment, ReactElement, useEffect, useRef, useState } from "react"; type LookupThreeWordCodeProps = { resourcesForDiscovery: Resources, renderIdentity?: (id?: Identity) => ReactElement } export default function LookupThreeWordCode({ resourcesForDiscovery, renderIdentity }: LookupThreeWordCodeProps) { const [wordsForDiscovery, setWordsForDiscovery] = useState(undefined); const discovered = useObjectDiscoveryWithResources(resourcesForDiscovery, wordsForDiscovery, 'en', 10, false); const discoveredIds = discovered ? Array.from(discovered.values()).filter((r: ObjectDiscoveryReply) => r.object !== undefined && r.object.getClassName() === Identity.className).map((r: ObjectDiscoveryReply) => (r.object as Identity)) : []; const [discoveryTrigger, setDiscoveryTrigger] = useState(undefined); const [word1, setWord1] = useState(''); const [word2, setWord2] = useState(''); const [word3, setWord3] = useState(''); const word2Ref = useRef(null); const word3Ref = useRef(null); const [word1Error, setWord1Error] = useState(false); const [word2Error, setWord2Error] = useState(false); const [word3Error, setWord3Error] = useState(false); const onChangeWord1 = (event: React.ChangeEvent) => { setWord1(event.target.value); }; const onChangeWord2 = (event: React.ChangeEvent) => { setWord2(event.target.value); }; const onChangeWord3 = (event: React.ChangeEvent) => { setWord3(event.target.value); }; const onKeypressWord1 = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault(); word2Ref.current?.focus(); } } const onKeypressWord2 = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { e.preventDefault(); word3Ref.current?.focus(); } } useEffect(() => { if (discoveryTrigger !== undefined) { window.clearTimeout(discoveryTrigger); } const word1OK = WordCode.english.check(word1); const word2OK = WordCode.english.check(word2); const word3OK = WordCode.english.check(word3); setWord1Error(word1.length > 0 && !word1OK); setWord2Error(word2.length > 0 && !word2OK); setWord3Error(word3.length > 0 && !word3OK); if (word1OK && word2OK && word3OK) { setWordsForDiscovery(word1 + '-' + word2 + '-' + word3); } else { setWordsForDiscovery(undefined); } }, [word1, word2, word3]); // const cancel = () => { // close(); // }; return ( Code: {wordsForDiscovery !== undefined && discoveredIds.length === 0 && {false && This is taking longer than expected. Are your 3-words correct? Poke someone to open this space then. } } {wordsForDiscovery !== undefined && discoveredIds.length > 0 && } style={{ marginTop: '1rem' }} > {discoveredIds.map((id: Identity) => ( {id.info?.type || 'Identity'} named {id.info?.name} { renderIdentity && renderIdentity(id) } ))} } ) }