1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

76 lines
2.2 KiB
JavaScript
Raw Normal View History

2020-04-18 07:57:55 -07:00
import React, { useEffect } from "react";
2020-01-17 02:50:57 -07:00
import styled from "@emotion/styled";
2020-01-27 21:28:27 -07:00
import { Input, useColorMode } from "@chakra-ui/core";
2020-01-17 02:50:57 -07:00
const StyledInput = styled(Input)`
&::placeholder {
2020-04-18 07:57:55 -07:00
color: ${(props) => props.placeholderColor};
2020-01-17 02:50:57 -07:00
}
`;
2020-03-19 17:32:14 -07:00
const fqdnPattern = /^(?!:\/\/)([a-zA-Z0-9]+\.)?[a-zA-Z0-9][a-zA-Z0-9-]+\.[a-zA-Z]{2,6}?$/gim;
2020-01-27 21:28:27 -07:00
const bg = { dark: "whiteAlpha.100", light: "white" };
const color = { dark: "whiteAlpha.800", light: "gray.400" };
const border = { dark: "whiteAlpha.50", light: "gray.100" };
const placeholderColor = { dark: "whiteAlpha.400", light: "gray.400" };
const QueryTarget = ({
placeholder,
register,
2020-04-18 07:57:55 -07:00
unregister,
2020-01-27 21:28:27 -07:00
setFqdn,
name,
value,
2020-01-28 18:42:28 -10:00
setTarget,
2020-01-27 21:28:27 -07:00
resolveTarget,
displayValue,
2020-04-18 07:57:55 -07:00
setDisplayValue,
2020-01-27 21:28:27 -07:00
}) => {
2020-01-17 02:50:57 -07:00
const { colorMode } = useColorMode();
2020-01-27 21:28:27 -07:00
const handleBlur = () => {
if (resolveTarget && displayValue && fqdnPattern.test(displayValue)) {
setFqdn(displayValue);
} else if (resolveTarget && !displayValue) {
setFqdn(false);
}
};
2020-04-18 07:57:55 -07:00
const handleChange = (e) => {
2020-01-27 21:28:27 -07:00
setDisplayValue(e.target.value);
2020-01-28 18:42:28 -10:00
setTarget({ field: name, value: e.target.value });
2020-01-27 21:28:27 -07:00
};
2020-04-18 07:57:55 -07:00
const handleKeyDown = (e) => {
2020-01-27 21:28:27 -07:00
if ([9, 13].includes(e.keyCode)) {
handleBlur();
}
};
2020-04-18 07:57:55 -07:00
useEffect(() => {
register({ name });
return () => unregister(name);
}, [register, unregister, name]);
2020-01-17 02:50:57 -07:00
return (
2020-01-27 21:28:27 -07:00
<>
<input hidden readOnly name={name} ref={register} value={value} />
<StyledInput
size="lg"
name="query_target_display"
bg={bg[colorMode]}
onBlur={handleBlur}
onFocus={handleBlur}
onKeyDown={handleKeyDown}
value={displayValue}
borderRadius="0.25rem"
onChange={handleChange}
color={color[colorMode]}
placeholder={placeholder}
borderColor={border[colorMode]}
placeholderColor={placeholderColor[colorMode]}
/>
</>
2020-01-17 02:50:57 -07:00
);
};
2020-01-27 21:28:27 -07:00
QueryTarget.displayName = "QueryTarget";
export default QueryTarget;