121 lines
3.3 KiB
TypeScript
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();
|
|
}
|
|
}
|
|
);
|
|
}
|