import { useEffect, useMemo } from 'react'; import dynamic from 'next/dynamic'; import { Button, chakra, Stack, Text, VStack } from '@chakra-ui/react'; import { useConfig, useColorValue } from '~/context'; import { useStrf, useLGState, useDNSQuery } from '~/hooks'; const RightArrow = chakra( dynamic(() => import('@meronex/icons/fa').then(i => i.FaArrowCircleRight)), ); const LeftArrow = chakra( dynamic(() => import('@meronex/icons/fa').then(i => i.FaArrowCircleLeft)), ); import type { DnsOverHttps } from '~/types'; import type { TResolvedTarget } from './types'; function findAnswer(data: DnsOverHttps.Response | undefined): string { let answer = ''; if (typeof data !== 'undefined') { answer = data?.Answer?.filter(answerData => answerData.type === data?.Question[0]?.type)[0] ?.data; } return answer; } export const ResolvedTarget: React.FC = (props: TResolvedTarget) => { const { setTarget, errorClose } = props; const { web } = useConfig(); const { displayTarget, isSubmitting, families, queryTarget } = useLGState(); const color = useColorValue('secondary.500', 'secondary.300'); const errorColor = useColorValue('red.500', 'red.300'); const query4 = Array.from(families.value).includes(4); const query6 = Array.from(families.value).includes(6); const tooltip4 = useStrf(web.text.fqdn_tooltip, { protocol: 'IPv4' }); const tooltip6 = useStrf(web.text.fqdn_tooltip, { protocol: 'IPv6' }); const [messageStart, messageEnd] = web.text.fqdn_message.split('{fqdn}'); const [errorStart, errorEnd] = web.text.fqdn_error.split('{fqdn}'); const { data: data4, isLoading: isLoading4, isError: isError4, error: error4 } = useDNSQuery( displayTarget.value, 4, ); const { data: data6, isLoading: isLoading6, isError: isError6, error: error6 } = useDNSQuery( displayTarget.value, 6, ); isError4 && console.error(error4); isError6 && console.error(error6); const answer4 = useMemo(() => findAnswer(data4), [data4]); const answer6 = useMemo(() => findAnswer(data6), [data6]); function handleOverride(value: string): void { setTarget({ field: 'query_target', value }); } function selectTarget(value: string): void { queryTarget.set(value); isSubmitting.set(true); } useEffect(() => { if (query6 && data6?.Answer) { handleOverride(findAnswer(data6)); } else if (query4 && data4?.Answer && !query6 && !data6?.Answer) { handleOverride(findAnswer(data4)); } else if (query4 && data4?.Answer) { handleOverride(findAnswer(data4)); } }, [data4, data6]); return ( {(answer4 || answer6) && ( {messageStart} {`${displayTarget.value}`.toLowerCase()} {messageEnd} )} {!isLoading4 && !isError4 && query4 && answer4 && ( )} {!isLoading6 && !isError6 && query6 && answer6 && ( )} {!answer4 && !answer6 && ( <> {errorStart} {`${displayTarget.value}`.toLowerCase()} {errorEnd} )} ); };