import React from "react"; import { AccordionItem, AccordionHeader, AccordionPanel, Alert, Box, ButtonGroup, css, Flex, Text, useTheme, useColorMode } from "@chakra-ui/core"; import styled from "@emotion/styled"; import useAxios from "axios-hooks"; import strReplace from "react-string-replace"; import useConfig from "~/components/HyperglassProvider"; import CopyButton from "~/components/CopyButton"; import RequeryButton from "~/components/RequeryButton"; import ResultHeader from "~/components/ResultHeader"; const FormattedError = ({ keywords, message }) => { const patternStr = `(${keywords.join("|")})`; const pattern = new RegExp(patternStr, "gi"); const errorFmt = strReplace(message, pattern, match => ( {match} )); return {errorFmt}; }; const AccordionHeaderWrapper = styled(Flex)` justify-content: space-between; &:hover { background-color: ${props => props.hoverBg}; } &:focus { box-shadow: "outline"; } `; const Result = React.forwardRef( ({ device, timeout, queryLocation, queryType, queryVrf, queryTarget }, ref) => { const config = useConfig(); const theme = useTheme(); const { colorMode } = useColorMode(); const bg = { dark: theme.colors.gray[800], light: theme.colors.blackAlpha[100] }; const color = { dark: theme.colors.white, light: theme.colors.black }; const selectionBg = { dark: theme.colors.white, light: theme.colors.black }; const selectionColor = { dark: theme.colors.black, light: theme.colors.white }; const [{ data, loading, error }, refetch] = useAxios({ url: "/api/query/", method: "post", data: { query_location: queryLocation, query_type: queryType, query_vrf: queryVrf, query_target: queryTarget }, timeout: timeout }); const cleanOutput = data && data.output .split("\\n") .join("\n") .replace(/\n\n/g, ""); const errorKw = (error && error.response?.data?.keywords) || []; const errorMsg = (error && error.response?.data?.output) || (error && error.message) || config.messages.general; return ( {data && ( {cleanOutput} )} {error && ( )} ); } ); Result.displayName = "HyperglassQueryResult"; export default Result;