2024-07-15 11:04:47 +03:00

121 lines
3.3 KiB
TypeScript

import type { AgentsFields, AgentsRewardConditionsFields, AgentsSumFields } from './types';
import * as CRMTypes from '@/graphql/crm.types';
import type RootStore from '@/stores/root';
import { getCurrentDateString } from '@/utils/date';
import { normalizeOptions } from '@/utils/entity';
import { disposableReaction } from '@/utils/mobx';
import type { ApolloClient } from '@apollo/client';
import { comparer, reaction } from 'mobx';
export function fillAgentRewardReaction(
store: RootStore,
apolloClient: ApolloClient<object>,
agentParams: {
agentField: AgentsFields;
rewardConditionField: AgentsRewardConditionsFields;
}
) {
const { $calculation } = store;
const { agentField, rewardConditionField } = agentParams;
reaction(
() => {
const agentid = $calculation.element(agentField).getValue();
const leaseObjectUsed = $calculation.element('cbxLeaseObjectUsed').getValue();
return {
agentid,
leaseObjectUsed,
};
},
async ({ agentid, leaseObjectUsed }) => {
if (!agentid) {
$calculation.element(rewardConditionField).reset();
return;
}
let {
data: { evo_reward_conditions },
} = await apolloClient.query({
query: CRMTypes.GetRewardConditionsDocument,
variables: {
agentid,
currentDate: getCurrentDateString(),
},
});
if (evo_reward_conditions) {
evo_reward_conditions = evo_reward_conditions?.filter(
(x) =>
x?.evo_pl_type &&
(leaseObjectUsed ? [100_000_000, 100_000_002] : [100_000_000, 100_000_001]).includes(
x?.evo_pl_type
)
);
}
if (evo_reward_conditions?.length) {
$calculation
.element(rewardConditionField)
.setOptions(normalizeOptions(evo_reward_conditions));
} else {
$calculation.element(rewardConditionField).reset();
}
},
{
equals: comparer.shallow,
}
);
}
export function fillAgentRewardSummReaction(
store: RootStore,
apolloClient: ApolloClient<object>,
agentParams: {
rewardConditionField: AgentsRewardConditionsFields;
rewardSummField: AgentsSumFields;
}
) {
const { $calculation, $process } = store;
const { rewardConditionField, rewardSummField } = agentParams;
disposableReaction(
() => $process.has('LoadKP'),
() => $calculation.element(rewardConditionField).getValue(),
async (rewardConditionId) => {
if (!rewardConditionId) {
$calculation.element(rewardSummField).reset();
return;
}
const {
data: { evo_reward_condition },
} = await apolloClient.query({
query: CRMTypes.GetRewardConditionDocument,
variables: {
conditionId: rewardConditionId,
},
});
if (evo_reward_condition?.evo_reward_summ) {
$calculation.element(rewardSummField).setValue(evo_reward_condition.evo_reward_summ);
} else {
$calculation.element(rewardSummField).resetValue();
}
}
);
reaction(
() => $calculation.element(rewardConditionField).getValue(),
(rewardConditionId) => {
if (rewardConditionId) {
$calculation.element(rewardSummField).unblock();
} else {
$calculation.element(rewardSummField).block();
}
}
);
}