2024-02-28 16:33:15 +03:00

97 lines
2.5 KiB
TypeScript

/* eslint-disable no-negated-condition */
import type { Elements } from '@/Components/Calculation/config/map/values';
import * as CRMTypes from '@/graphql/crm.types';
import type { ProcessContext } from '@/process/types';
import type { DocumentNode } from '@apollo/client';
import { reaction } from 'mobx';
type LinkReactionParams = {
elementName: Elements;
entityName: string;
linkElementName: Elements;
query: DocumentNode;
variableName: string;
};
export default function reactions({ store, apolloClient }: ProcessContext) {
const { $calculation } = store;
/**
* При выборе Интереса, ЛС и Предложения скачиваем ссылку CRM
*/
function makeLinkReaction({
elementName,
linkElementName,
query,
variableName,
entityName,
}: LinkReactionParams) {
reaction(
() => $calculation.element(elementName).getValue(),
(id) => {
if (!id) {
$calculation.element(linkElementName).resetValue();
return;
}
const timeoutId = setTimeout(() => {
$calculation.$status.setStatus(linkElementName, 'Loading');
}, 1200);
apolloClient
.query({
query,
variables: {
[variableName]: id,
},
})
.then(({ data }) => {
clearTimeout(timeoutId);
if (data[entityName]?.link) {
$calculation.element(linkElementName).setValue(data[entityName]?.link);
}
})
.catch(() => {
clearTimeout(timeoutId);
$calculation.element(linkElementName).resetValue();
});
}
);
reaction(
() => $calculation.element(linkElementName).getValue(),
(url) => {
if (!url) {
$calculation.element(linkElementName).block();
} else {
$calculation.element(linkElementName).unblock();
}
}
);
}
makeLinkReaction({
elementName: 'selectLead',
entityName: 'lead',
linkElementName: 'linkLeadUrl',
query: CRMTypes.GetLeadDocument,
variableName: 'leadid',
});
makeLinkReaction({
elementName: 'selectOpportunity',
entityName: 'opportunity',
linkElementName: 'linkOpportunityUrl',
query: CRMTypes.GetOpportunityDocument,
variableName: 'opportunityid',
});
makeLinkReaction({
elementName: 'selectQuote',
entityName: 'quote',
linkElementName: 'linkQuoteUrl',
query: CRMTypes.GetQuoteDocument,
variableName: 'quoteId',
});
}