* FEAT: Implement Dub.co for conversion tracking * add link creation, @vercel/functions * use refer.cal.com/:username instead of go.cal.com/r/:username * sale conversion tracking * add copy referral link * limit to IS_CALCOM only * Update yarn.lock * fix DubAnalytics * use workaround for isNewUser * pass req to getOptions * Update next-auth-options.ts * fix ts errors * only show DubAnalytics outside EU * add Dub Analytics to /signup * use WEBSITE_URL instead * on-demand generate links * add migration * add check for existing link + change fetch method to poast * remove refer.cal.com from PoweredByCal * limit DubAnalytics to /signup only * simplify generate-referral-link * restore yarn.lock * add yarn with dub sdk in * add yarn with dub sdk in * yarn * Update yarn.lock --------- Co-authored-by: sean <sean@brydon.io> Co-authored-by: Peer Richelsen <peer@cal.com>
33 lines
890 B
TypeScript
33 lines
890 B
TypeScript
import { useState, useEffect } from "react";
|
|
|
|
export function useCopy() {
|
|
const [isCopied, setIsCopied] = useState(false);
|
|
|
|
const copyToClipboard = (text: string) => {
|
|
if (typeof navigator !== "undefined" && navigator.clipboard) {
|
|
navigator.clipboard
|
|
.writeText(text)
|
|
.then(() => setIsCopied(true))
|
|
.catch((error) => console.error("Copy to clipboard failed:", error));
|
|
} else {
|
|
console.warn(
|
|
"You need to use a secure context to use clipboard \n Please use the following link: ",
|
|
text
|
|
);
|
|
}
|
|
};
|
|
|
|
const resetCopyStatus = () => {
|
|
setIsCopied(false);
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (isCopied) {
|
|
const timer = setTimeout(resetCopyStatus, 3000); // Reset copy status after 3 seconds
|
|
return () => clearTimeout(timer);
|
|
}
|
|
}, [isCopied]);
|
|
|
|
return { isCopied, copyToClipboard, resetCopyStatus };
|
|
}
|