import type { AgentsFields, AgentsRewardConditionsFields, AgentsSumFields } from './types'; import * as CRMTypes from '@/graphql/crm.types'; import type RootStore from '@/stores/root'; import type { ApolloClient } from '@apollo/client'; import dayjs from 'dayjs'; import utc from 'dayjs/plugin/utc'; import { reaction } from 'mobx'; import { normalizeOptions } from 'tools/entity'; import { makeDisposable } from 'tools/mobx'; dayjs.extend(utc); export function fillAgentRewardReaction( store: RootStore, apolloClient: ApolloClient, agentParams: { agentField: AgentsFields; rewardConditionField: AgentsRewardConditionsFields; } ) { const { $calculation } = store; const { agentField, rewardConditionField } = agentParams; reaction( () => $calculation.element(agentField).getValue(), async (agentid) => { if (!agentid) { $calculation.element(rewardConditionField).reset(); return; } const { data: { evo_reward_conditions }, } = await apolloClient.query({ query: CRMTypes.GetRewardConditionsDocument, variables: { agentid, currentDate: dayjs().utc(false).format('YYYY-MM-DD'), }, }); if (evo_reward_conditions?.length) { $calculation .element(rewardConditionField) .setOptions(normalizeOptions(evo_reward_conditions)); } else { $calculation.element(rewardConditionField).reset(); } } ); } export function fillAgentRewardSummReaction( store: RootStore, apolloClient: ApolloClient, agentParams: { rewardConditionField: AgentsRewardConditionsFields; rewardSummField: AgentsSumFields; } ) { const { $calculation, $process } = store; const { rewardConditionField, rewardSummField } = agentParams; makeDisposable( () => reaction( () => $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(); } } ), () => $process.has('LoadKP') ); reaction( () => $calculation.element(rewardConditionField).getValue(), (rewardConditionId) => { if (rewardConditionId) { $calculation.element(rewardSummField).unblock(); } else { $calculation.element(rewardSummField).block(); } } ); }