2023-03-16 15:35:44 +03:00

105 lines
2.9 KiB
TypeScript

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