autumn-js
Version:
Autumn JS Library
68 lines (64 loc) • 1.76 kB
JavaScript
"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
};