2023-02-06 12:19:39 +03:00

86 lines
2.4 KiB
TypeScript

/* eslint-disable no-negated-condition */
import type { Elements } from '@/Components/Calculation/config/map/values';
import type { ReactionsContext } from '@/process/types';
import type { DocumentNode } from '@apollo/client';
import { gql } from '@apollo/client';
import { reaction } from 'mobx';
export default function urlsReactions({ store, apolloClient }: ReactionsContext) {
const { $calculation } = store;
/**
* При выборе Интереса, ЛС и Предложения скачиваем ссылку CRM
*/
function makeLinkReaction(elementName: Elements, linkElementName: Elements, query: DocumentNode) {
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: {
id,
},
})
.then(({ data }) => {
clearTimeout(timeoutId);
if (data.entity?.link) {
$calculation.element(linkElementName).setValue(data.entity?.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();
}
}
);
}
const QUERY_GET_LEAD_URL = gql`
query GetLeadUrl($id: Uuid!) {
entity: lead(leadid: $id) {
link
}
}
`;
makeLinkReaction('selectLead', 'linkLeadUrl', QUERY_GET_LEAD_URL);
const QUERY_GET_OPPORTUNITY_URL = gql`
query GetOpportunityUrl($id: Uuid!) {
entity: opportunity(opportunityid: $id) {
link
}
}
`;
makeLinkReaction('selectOpportunity', 'linkOpportunityUrl', QUERY_GET_OPPORTUNITY_URL);
const QUERY_GET_QUOTE_URL = gql`
query GetQuoteUrl($id: Uuid!) {
entity: quote(quoteId: $id) {
link
}
}
`;
makeLinkReaction('selectQuote', 'linkQuoteUrl', QUERY_GET_QUOTE_URL);
}