97 lines
2.5 KiB
TypeScript
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',
|
|
});
|
|
}
|