import { useId, useState } from "preact/hooks"; import { twMerge } from "tailwind-merge"; import Copy from "../../icons/Copy"; import useI18n from "../../utils/hooks/useI18n"; import IconButton from "../IconButton"; import Input from "../Input"; import type { HTMLAttributes, InputHTMLAttributes, PreactDOMAttributes, } from "preact"; export type InputCopyProps = { containerProps?: HTMLAttributes & PreactDOMAttributes; tooltipProps?: HTMLAttributes & PreactDOMAttributes; } & InputHTMLAttributes & PreactDOMAttributes; const emptyProps = {}; // avoid re-rendering function InputCopy({ containerProps = emptyProps, tooltipProps = emptyProps, ...props }: InputCopyProps) { const { t } = useI18n(); const [positionTooltip, setPositionTooltip] = useState(); const [isTooptipShowed, setIsTooltipShowed] = useState(false); const inputId = useId(); const [node, setNode] = useState(null); const handleCopyClick = (event) => { setPositionTooltip(event.currentTarget.getBoundingClientRect()); const input: HTMLInputElement | null = node.querySelector(`#${inputId}`); void navigator.clipboard.writeText(input?.value).then(() => { setIsTooltipShowed(true); setTimeout(() => { setIsTooltipShowed(false); }, 1000); }); input?.select(); }; const handleInputFocus = () => { const input: HTMLInputElement | null = node.querySelector(`#${inputId}`); input?.select(); }; return (
{ setNode(elt); }} {...containerProps} className={twMerge( "relative flex h-7 items-center", containerProps?.className as string, )} >
); } export default InputCopy;