@@ -26,11 +26,19 @@ import { TagSelect } from "@/ui/links/link-builder/tag-select";
2626import { useLinkBuilderSubmit } from "@/ui/links/link-builder/use-link-builder-submit" ;
2727import { useMetatags } from "@/ui/links/link-builder/use-metatags" ;
2828import { LinkControls } from "@/ui/links/link-controls" ;
29- import { useKeyboardShortcut , useMediaQuery } from "@dub/ui" ;
29+ import {
30+ Button ,
31+ CircleCheck ,
32+ Copy ,
33+ useCopyToClipboard ,
34+ useKeyboardShortcut ,
35+ useMediaQuery ,
36+ } from "@dub/ui" ;
3037import { cn } from "@dub/utils" ;
3138import { notFound , useParams , useRouter } from "next/navigation" ;
3239import { memo , useEffect , useRef , useState } from "react" ;
3340import { useFormContext , useFormState } from "react-hook-form" ;
41+ import { toast } from "sonner" ;
3442
3543export function LinkPageClient ( ) {
3644 const params = useParams < { link : string | string [ ] } > ( ) ;
@@ -78,7 +86,8 @@ function LinkBuilder({ link }: { link: ExpandedLinkProps }) {
7886 const router = useRouter ( ) ;
7987 const workspace = useWorkspace ( ) ;
8088
81- const { isDesktop } = useMediaQuery ( ) ;
89+ const { isDesktop, isMobile } = useMediaQuery ( ) ;
90+ const [ copied , copyToClipboard ] = useCopyToClipboard ( ) ;
8291
8392 const { control, handleSubmit, reset, getValues } =
8493 useFormContext < LinkFormData > ( ) ;
@@ -155,6 +164,23 @@ function LinkBuilder({ link }: { link: ExpandedLinkProps }) {
155164 < div className = "shrink-0" >
156165 < LinkAnalyticsBadge link = { link } />
157166 </ div >
167+ < Button
168+ variant = "secondary"
169+ className = "h-7 w-fit px-2"
170+ text = { isMobile ? undefined : "Copy" }
171+ icon = {
172+ copied ? (
173+ < CircleCheck className = "size-4" />
174+ ) : (
175+ < Copy className = "size-4" />
176+ )
177+ }
178+ onClick = { ( ) =>
179+ toast . promise ( copyToClipboard ( link . shortLink ) , {
180+ success : "Copied to clipboard!" ,
181+ } )
182+ }
183+ />
158184 < Controls link = { link } />
159185 </ div >
160186 </ LinkBuilderHeader >
0 commit comments