import { useMemo } from 'react'; import { Button, Stack, Text, VStack, useDisclosure } from '@chakra-ui/react'; import { Prompt } from '~/components'; import { useConfig } from '~/context'; import { DynamicIcon } from '~/elements'; import { useStrf, useWtf, useColorValue } from '~/hooks'; interface UserIPProps { setTarget(target: string): void; } export const UserIP = (props: UserIPProps): JSX.Element => { const { setTarget } = props; const { onOpen, ...disclosure } = useDisclosure(); const strF = useStrf(); const { web } = useConfig(); const errorColor = useColorValue('red.500', 'red.300'); const noIPv4 = strF(web.text.noIp, { protocol: 'IPv4' }); const noIPv6 = strF(web.text.noIp, { protocol: 'IPv6' }); const [ipv4, ipv6, query] = useWtf(); const hasResult = useMemo( () => (!ipv4.isError || !ipv6.isError) && (ipv4.data?.ip !== null || ipv6.data?.ip !== null), [ipv4, ipv6], ); const show4 = useMemo(() => !ipv4.isError && ipv4.data?.ip !== null, [ipv4]); const show6 = useMemo(() => !ipv6.isError && ipv6.data?.ip !== null, [ipv6]); function handleOpen(): void { onOpen(); query(); } return ( {web.text.ipButton} } onOpen={handleOpen} {...disclosure} > {hasResult && ( {web.text.ipSelect} )} {show4 && ( )} {show6 && ( )} {!hasResult && ( {web.text.ipError} )} ); };