Add refinement to ensure metered line items have zero cost
The billing schema has been updated to include a refinement that ensures metered line items have a cost of zero. To clarify, a different line item type should be added for a flat fee in Stripe. Additionally, unnecessary verifications and logic regarding item costs have been removed from the PlanPicker and LineItemDetails components.
This commit is contained in:
@@ -72,6 +72,20 @@ export const LineItemSchema = z
|
|||||||
message: 'Metered line items must have a unit and tiers',
|
message: 'Metered line items must have a unit and tiers',
|
||||||
path: ['type', 'unit', 'tiers'],
|
path: ['type', 'unit', 'tiers'],
|
||||||
},
|
},
|
||||||
|
)
|
||||||
|
.refine(
|
||||||
|
(data) => {
|
||||||
|
if (data.type === LineItemType.Metered) {
|
||||||
|
return data.cost === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
message:
|
||||||
|
'Metered line items must have a cost of 0. Please add a different line item type for a flat fee (Stripe)',
|
||||||
|
path: ['type', 'cost'],
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
export const PlanSchema = z
|
export const PlanSchema = z
|
||||||
|
|||||||
@@ -187,10 +187,6 @@ export function LineItemDetails(
|
|||||||
return <PerSeat key={item.id} />;
|
return <PerSeat key={item.id} />;
|
||||||
|
|
||||||
case 'metered': {
|
case 'metered': {
|
||||||
if (item.cost > 0) {
|
|
||||||
return <FlatFee key={item.id} />;
|
|
||||||
}
|
|
||||||
|
|
||||||
return <Metered key={item.id} />;
|
return <Metered key={item.id} />;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,21 +79,6 @@ export function PlanPicker(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ message: t('noPlanChosen'), path: ['planId'] },
|
{ message: t('noPlanChosen'), path: ['planId'] },
|
||||||
)
|
|
||||||
.refine(
|
|
||||||
(data) => {
|
|
||||||
try {
|
|
||||||
const { plan } = getProductPlanPair(props.config, data.planId);
|
|
||||||
|
|
||||||
return !(plan.paymentType === 'recurring' && !data.interval);
|
|
||||||
} catch {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
message: t('noIntervalPlanChosen'),
|
|
||||||
path: ['interval'],
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
defaultValues: {
|
defaultValues: {
|
||||||
|
|||||||
Reference in New Issue
Block a user