11import { TypeBadge } from "@/components/TypeBadge"
22import { Button } from "@/components/ui/button"
33import { Skeleton } from "@/components/ui/skeleton"
4+ import { useForkPackageMutation } from "@/hooks/use-fork-package-mutation"
45import {
56 usePackageStarMutationByName ,
67 usePackageStarsByName ,
78} from "@/hooks/use-package-stars"
89import { LockClosedIcon } from "@radix-ui/react-icons"
910import { GitFork , Star } from "lucide-react"
11+ import { useToast } from "@/hooks/use-toast"
1012import { Link } from "wouter"
1113
1214interface PackageInfo {
@@ -18,42 +20,53 @@ interface PackageInfo {
1820 ai_description : string
1921 creator_account_id ?: string
2022 owner_org_id ?: string
23+ package_id : string
2124}
2225
2326interface PackageHeaderProps {
2427 packageInfo ?: PackageInfo
2528 isPrivate ?: boolean
26- onForkClick ?: ( ) => void
2729 isCurrentUserAuthor ?: boolean
2830}
2931
3032export default function PackageHeader ( {
3133 packageInfo,
3234 isPrivate = false ,
33- onForkClick,
3435 isCurrentUserAuthor = false ,
3536} : PackageHeaderProps ) {
3637 const author = packageInfo ?. owner_github_username
3738 const packageName = packageInfo ?. unscoped_name
3839
39- // Use the star hooks
40+ const { toast } = useToast ( )
41+
4042 const { data : starData , isLoading : isStarDataLoading } =
4143 usePackageStarsByName ( packageInfo ?. name ?? null )
4244 const { addStar, removeStar } = usePackageStarMutationByName (
4345 packageInfo ?. name ?? "" ,
4446 )
4547
48+ const { mutateAsync : forkPackage , isLoading : isForkLoading } =
49+ useForkPackageMutation ( )
50+
4651 const handleStarClick = async ( ) => {
4752 if ( ! packageInfo ?. name ) return
4853
49- console . log ( "starData" , starData )
5054 if ( starData ?. is_starred ) {
5155 await removeStar . mutateAsync ( )
5256 } else {
5357 await addStar . mutateAsync ( )
5458 }
5559 }
5660
61+ const handleForkClick = async ( ) => {
62+ if ( ! packageInfo ?. package_id ) return
63+ await forkPackage ( packageInfo . package_id )
64+ toast ( {
65+ title : "Forked package" ,
66+ description : "Package forked successfully" ,
67+ } )
68+ }
69+
5770 const isStarLoading =
5871 isStarDataLoading || addStar . isLoading || removeStar . isLoading
5972
@@ -111,11 +124,13 @@ export default function PackageHeader({
111124 < Button
112125 variant = "outline"
113126 size = "sm"
114- onClick = { onForkClick }
115- disabled = { ! onForkClick }
127+ onClick = { handleForkClick }
128+ disabled = {
129+ isCurrentUserAuthor || isForkLoading || ! packageInfo ?. package_id
130+ }
116131 >
117132 < GitFork className = "w-4 h-4 mr-2" />
118- { isCurrentUserAuthor ? "Save" : " Fork" }
133+ Fork
119134 </ Button >
120135 </ div >
121136 </ div >
0 commit comments