import React, { useEffect, useState } from "react"; import { Button, Icon, Spinner, Stack, Tag, Text, Tooltip, useColorMode } from "@chakra-ui/core"; import useAxios from "axios-hooks"; import format from "string-format"; import useConfig from "~/components/HyperglassProvider"; import useMedia from "~/components/MediaProvider"; format.extend(String.prototype, {}); const labelBg = { dark: "secondary", light: "secondary" }; const labelBgSuccess = { dark: "success", light: "success" }; const ResolvedTarget = React.forwardRef(({ fqdnTarget, setTarget, queryTarget }, ref) => { const { colorMode } = useColorMode(); const { mediaSize } = useMedia(); const config = useConfig(); const labelBgStatus = { true: labelBgSuccess[colorMode], false: labelBg[colorMode] }; const dnsUrl = config.web.dns_provider.url; const params4 = { url: dnsUrl, params: { name: fqdnTarget, type: "A" }, headers: { accept: "application/dns-json" }, timeout: 1000 }; const params6 = { url: dnsUrl, params: { name: fqdnTarget, type: "AAAA" }, headers: { accept: "application/dns-json" }, timeout: 1000 }; const [{ data: data4, loading: loading4, error: error4 }] = useAxios(params4); const [{ data: data6, loading: loading6, error: error6 }] = useAxios(params6); const handleOverride = overridden => { setTarget({ field: "query_target", value: overridden }); }; const isSelected = value => { return labelBgStatus[value === queryTarget]; }; const findAnswer = data => { return data?.Answer?.filter(answerData => answerData.type === data.Question[0].type)[0] .data; }; useEffect(() => { if (data6 && data6.Answer) { handleOverride(findAnswer(data6)); } else if (data4 && data4.Answer && !data6?.Answer) { handleOverride(findAnswer(data4)); } }, [data4, data6]); return ( {loading4 || error4 || (findAnswer(data4) && ( {loading4 && } {error4 && } {findAnswer(data4) && ( {findAnswer(data4)} )} ))} {loading6 || error6 || (findAnswer(data6) && ( {loading6 && } {error6 && } {findAnswer(data6) && ( {findAnswer(data6)} )} ))} ); }); ResolvedTarget.displayName = "ResolvedTarget"; export default ResolvedTarget;