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, 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, 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(); } } ); }