UNPKG

autumn-js

Version:
141 lines (138 loc) 3.31 kB
"use client"; import { balanceToAllowed } from "./chunk-GSJF6P3Q.mjs"; import { customerToFeatures } from "./chunk-SEQHNPTF.mjs"; import { findCreditSystemsByFeature } from "./chunk-4TON573W.mjs"; import { getCreditCost } from "./chunk-D6DFRS3U.mjs"; // src/react/hooks/internal/getLocalCheckResponse.ts var getFeatureToUse = ({ featureId, features, feature, customer, requiredBalance }) => { const creditSystems = findCreditSystemsByFeature({ featureId, features }); if (creditSystems.length === 0) return feature; const mainBalance = customer.balances[feature.id]; if (mainBalance && balanceToAllowed({ balance: mainBalance, feature, requiredBalance })) { return feature; } for (const creditSystem of creditSystems) { const creditBalance = customer.balances[creditSystem.id]; if (!creditBalance) continue; const creditRequiredBalance = getCreditCost({ featureId: feature.id, creditSystem, amount: requiredBalance }); if (balanceToAllowed({ balance: creditBalance, feature: creditSystem, requiredBalance: creditRequiredBalance })) { return creditSystem; } } return creditSystems[0]; }; var getFeatureCheckResponse = ({ customer, params }) => { const { featureId, requiredBalance = 1 } = params; if (customer.flags[featureId]) { return { allowed: true, customerId: customer.id ?? "", entityId: params.entityId ?? null, requiredBalance, balance: null, flag: customer.flags[featureId] }; } const features = customerToFeatures({ customer }); const feature = features.find((item) => item.id === featureId); if (!feature) { return { allowed: false, customerId: customer.id ?? "", entityId: params.entityId ?? null, requiredBalance, balance: null, flag: null }; } const featureToUse = getFeatureToUse({ featureId, features, feature, customer, requiredBalance }); const balanceToUse = customer.balances[featureToUse.id]; if (!balanceToUse) { return { allowed: false, customerId: customer.id ?? "", entityId: params.entityId ?? null, requiredBalance, balance: null, flag: null }; } const requiredBalanceToUse = featureToUse.type === "credit_system" && featureToUse.id !== feature.id ? getCreditCost({ featureId: feature.id, creditSystem: featureToUse, amount: requiredBalance }) : requiredBalance; const allowed = balanceToAllowed({ balance: balanceToUse, feature: featureToUse, requiredBalance: requiredBalanceToUse }); return { allowed, customerId: customer.id ?? "", entityId: params.entityId ?? null, requiredBalance: requiredBalanceToUse, balance: balanceToUse, flag: null }; }; var getLocalCheckResponse = ({ customer, params }) => { if (!customer) { return { allowed: false, customerId: "", entityId: params.entityId ?? null, requiredBalance: params.requiredBalance ?? 1, balance: null, flag: null }; } if (!params.featureId) { throw new Error("check() requires featureId"); } return getFeatureCheckResponse({ customer, params }); }; export { getLocalCheckResponse };