Spaces:
Running
Running
import { useRef, useState } from "react"; | |
import { ChevronDownIcon } from "@heroicons/react/solid"; | |
import classNames from "classnames"; | |
import { useClickAway } from "react-use"; | |
export const DownloadButton = ({ | |
onSave, | |
}: { | |
onSave: (e?: boolean) => void; | |
}) => { | |
const [dropdown, setDropdown] = useState(false); | |
const ref = useRef(null); | |
useClickAway(ref, () => { | |
setDropdown(false); | |
}); | |
return ( | |
<div | |
ref={ref} | |
className="flex justify-start mt-5 bg-darkGreen rounded-md relative" | |
> | |
<button | |
onClick={() => onSave()} | |
className="bg-darkGreen w-full text-white font-semibold p-2 rounded-l-md text-sm font-title relative overflow-hidden group" | |
> | |
<div className="absolute top-0 left-0 h-0 bg-blue transition-all duration-300 w-full group-hover:h-1/2" /> | |
<div className="absolute bottom-0 left-0 h-0 bg-blue transition-all duration-300 w-full group-hover:h-1/2" /> | |
<span className="relative z-1">Download as .zip</span> | |
</button> | |
<div | |
className="bg-dark-600 bg-opacity-10 px-1.5 border-l border-dark-600 border-opacity-20 flex items-center hover:bg-opacity-20 cursor-pointer" | |
onClick={(e) => { | |
e.preventDefault(); | |
e.stopPropagation(); | |
setDropdown(!dropdown); | |
}} | |
> | |
<ChevronDownIcon className="w-5 h-5 text-white" /> | |
</div> | |
<div | |
className={classNames( | |
"bg-darkGreen w-full rounded-md absolute bottom-0 left-0 translate-y-[calc(100%+8px)] transition-all duration-200", | |
{ | |
"pointer-events-none opacity-0 !-translate-y-1/2": !dropdown, | |
} | |
)} | |
> | |
<button | |
onClick={() => onSave(true)} | |
className="bg-darkGreen w-full text-white font-semibold p-2 rounded-md text-sm font-title relative overflow-hidden group" | |
> | |
<div className="absolute top-0 left-0 h-0 bg-blue transition-all duration-300 w-full group-hover:h-1/2" /> | |
<div className="absolute bottom-0 left-0 h-0 bg-blue transition-all duration-300 w-full group-hover:h-1/2" /> | |
<span className="relative z-1">Download as Image</span> | |
</button> | |
</div> | |
</div> | |
); | |
}; | |