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',
|
||||
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
|
||||
|
||||
@@ -187,10 +187,6 @@ export function LineItemDetails(
|
||||
return <PerSeat key={item.id} />;
|
||||
|
||||
case 'metered': {
|
||||
if (item.cost > 0) {
|
||||
return <FlatFee key={item.id} />;
|
||||
}
|
||||
|
||||
return <Metered key={item.id} />;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,21 +79,6 @@ export function PlanPicker(
|
||||
}
|
||||
},
|
||||
{ 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: {
|
||||
|
||||
Reference in New Issue
Block a user