@@ -24,6 +24,7 @@ import {
2424 getPricePerUnit ,
2525} from "@/marketplace/utils" ;
2626import { zodResolver } from "@hookform/resolvers/zod" ;
27+ import { parseClaimOrFractionId } from "@hypercerts-org/sdk" ;
2728import { useForm } from "react-hook-form" ;
2829import { parseUnits } from "viem" ;
2930import z from "zod" ;
@@ -80,7 +81,14 @@ export const BuyFractionalOrderForm = ({
8081 const { minUnitAmount, maxUnitAmount, minUnitsToKeep } =
8182 decodeFractionalOrderParams ( order . additionalParameters ) ;
8283
83- const availableUnits = BigInt ( hypercert ?. units || 0 ) - BigInt ( minUnitsToKeep ) ;
84+ const fractionTokenId = BigInt ( order . itemIds [ 0 ] ) ;
85+ const fraction = hypercert . fractions ?. data ?. find (
86+ ( fraction ) =>
87+ parseClaimOrFractionId ( fraction . fraction_id || "" ) . id === fractionTokenId ,
88+ ) ;
89+ const fractionUnits = BigInt ( fraction ?. units || 0 ) ;
90+
91+ const availableUnits = fractionUnits - BigInt ( minUnitsToKeep ) ;
8492 const maxUnitAmountToBuy =
8593 availableUnits > maxUnitAmount ? maxUnitAmount : availableUnits ;
8694
@@ -124,6 +132,7 @@ export const BuyFractionalOrderForm = ({
124132 const form = useForm < BuyFractionalOrderFormValues > ( {
125133 resolver : zodResolver ( formSchema ) ,
126134 reValidateMode : "onChange" ,
135+ mode : "onChange" ,
127136 defaultValues : {
128137 minPercentageAmount,
129138 maxPercentageAmount,
@@ -143,6 +152,7 @@ export const BuyFractionalOrderForm = ({
143152 }
144153
145154 const unitAmount = getUnitsToBuy ( values . percentageAmount ) ;
155+
146156 const pricePerUnit = getPricePerUnit (
147157 values . pricePerPercent ,
148158 hypercertUnits ,
0 commit comments