import React, { useEffect, useMemo } from 'react'; import { FunctionComponent, useState } from 'react'; import { TouchableOpacity, View } from 'react-native'; import { Input } from '../../ui/input'; import { ChevronRight } from '../../../lib/icons/ChevronRight'; import { ChevronsRight } from '../../../lib/icons/ChevronsRight'; import { TextCursorInput } from '../../../lib/icons/TextCursorInput'; import { RefreshCw } from '../../../lib/icons/RefreshCw'; import { ArrowRight } from '../../../lib/icons/ArrowRight'; import { Button } from '../../../components/ui/button'; import { Text } from '../../ui/text'; import { useTargetResource } from '../../TargetResourceProvider'; export const AddressBox: FunctionComponent = () => { const [isTextMode, setIsTextMode] = useState(false); const { targetUri, refresh, navigateTo, targetResource } = useTargetResource(); const [textBoxValue, setTextBoxValue] = useState(targetUri ?? ''); useEffect(() => { setTextBoxValue(targetUri ?? ''); }, [targetUri]); const breadcrumbInfo = useMemo<{ name: string; uri: string }[]>(() => { if (!targetUri) return []; try { const uri = new URL(targetUri); const pathSplit = uri.pathname.split('/').filter((val) => val !== ''); const endsInSlash = uri.pathname.endsWith('/'); let curUri = `${uri.origin}/`; const info: { name: string; uri: string }[] = [ { name: uri.host, uri: curUri, }, ]; pathSplit.forEach((name, index) => { curUri += index === pathSplit.length - 1 && !endsInSlash ? name : `${name}/`; info.push({ uri: curUri, name, }); }); return info; } catch { return []; } }, [targetUri]); return ( setIsTextMode(true)} onBlur={() => setTimeout(() => setIsTextMode(false), 100)} onChangeText={setTextBoxValue} value={isTextMode ? textBoxValue : ''} onSubmitEditing={() => { if (textBoxValue) { navigateTo(textBoxValue); } }} /> ); })()} {!isTextMode && breadcrumbInfo.map((item, index) => ( {index !== breadcrumbInfo.length - 1 ? ( ) : ( )} navigateTo(item.uri)}> {item.name} ))} ); };