UNPKG

autumn-js

Version:

Autumn JS Library

68 lines (64 loc) 1.76 kB
"use client"; // src/libraries/react/hooks/handleAllowed.ts var getCusFeature = ({ customer, featureId, requiredBalance = 1 }) => { let creditSchema = Object.values(customer.features).find( (f) => f.credit_schema && f.credit_schema.some((c) => c.feature_id === featureId) ); if (creditSchema) { let schemaItem = creditSchema.credit_schema?.find( (c) => c.feature_id === featureId ); return { feature: creditSchema, requiredBalance: schemaItem.credit_amount * requiredBalance }; } return { cusFeature: customer.features[featureId], requiredBalance }; }; var handleFeatureAllowed = ({ customer, params }) => { let { cusFeature, requiredBalance } = getCusFeature({ customer, featureId: params.featureId }); if (!cusFeature) return false; if (cusFeature.type == "static") return true; if (cusFeature.unlimited || cusFeature.overage_allowed) return true; if (cusFeature.usage_limit) { let extraUsage = (cusFeature.usage_limit || 0) - (cusFeature.included_usage || 0); return (cusFeature.balance || 0) + extraUsage >= requiredBalance; } return (cusFeature.balance || 0) >= requiredBalance; }; var handleAllowed = ({ customer, params }) => { if (!customer) return false; if (!params.featureId && !params.productId) { throw new Error("allowed() requires either featureId or productId"); } if (params.featureId) { return handleFeatureAllowed({ customer, params }); } if (params.productId) { let product = customer.products.find((p) => p.id == params.productId); if (!product) return false; let status = product.status; if (status == "scheduled") return false; return true; } return false; }; export { handleAllowed };