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