import { addPropertyControls, ControlType } from "framer"
import { useEffect, useState } from "react"
export default function DynamicPromoButton(props) {
const { text, baseURL, parameterName, defaultPromoCode } = props
const [promoCode, setPromoCode] = useState(defaultPromoCode || "")
const [isHovered, setIsHovered] = useState(false)
useEffect(() => {
// Fetch promo code from the current URL query parameters
const params = new URLSearchParams(window.location.search)
const promo = params.get(parameterName)
// Use default if no promo is provided
setPromoCode(promo || defaultPromoCode)
}, [parameterName, defaultPromoCode])
const handleClick = () => {
const url = new URL(baseURL || window.location.origin)
if (parameterName && promoCode) {
url.searchParams.append(parameterName, promoCode)
}
// Open in new tab
// window.open(url.toString(), "_blank")
// Open the URL in the same tab
window.location.href = url.toString()
}
return (
<button
style={{
...props.style,
display: "flex",
width: "104",
height: "32px",
justifyContent: "center",
alignItems: "center",
padding: "4px 24px",
fontSize: "16px",
lineHeight: "150%",
fontWeight: "600",
fontFamily: "'IBM Plex Sans', sans-serif",
color: "#032B49",
backgroundColor: isHovered ? "#D5F7F8" : "#8EE3E9",
border: "1px solid #032B49",
borderRadius: "128px",
cursor: "pointer",
textAlign: "center",
outline: "none",
transition: "transform 0.2s, background-color 0.2s",
}}
onClick={handleClick}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
>
{text || "Sign up"}
</button>
)
}
DynamicPromoButton.displayName = "Dynamic Promo Button"
// Framer UI controls
addPropertyControls(DynamicPromoButton, {
text: {
type: ControlType.String,
defaultValue: "Sign up",
},
baseURL: {
type: ControlType.Link,
defaultValue: "https://www.duckbill.ai",
},
parameterName: {
type: ControlType.String,
title: "Param Name",
defaultValue: "promo",
},
})