EvoCalculator.Client2/apps/web/process/init/get-initial-data.js
2023-03-12 11:37:12 +03:00

70 lines
2.0 KiB
JavaScript

/* eslint-disable @typescript-eslint/naming-convention */
import { getUser } from '@/api/user/query';
import { STALE_TIME } from '@/constants/request';
import * as CRMTypes from '@/graphql/crm.types';
import { useStore } from '@/stores/hooks';
import { useApolloClient } from '@apollo/client';
import { useQuery } from '@tanstack/react-query';
import { useEffect } from 'react';
import { normalizeOptions } from 'tools';
/**
* @param {import('@apollo/client').ApolloClient} apolloClient
* @param {import('@/api/user/types').User } user
* @param {*} onCompleted
*/
export function getInitialData({ query }, user, onCompleted) {
query({ query: CRMTypes.GetLeadsDocument, variables: { domainname: user.domainName } }).then(
({ data }) => {
onCompleted({
selectLead: data?.leads,
});
}
);
query({
query: CRMTypes.GetOpportunitiesDocument,
variables: { domainname: user.domainName },
}).then(({ data }) => {
onCompleted({
selectOpportunity: data?.opportunities,
});
});
query({
query: CRMTypes.GetTransactionCurrenciesDocument,
}).then(({ data }) => {
onCompleted({
selectSupplierCurrency: data?.transactioncurrencies,
});
const transactioncurrency_rub = data?.transactioncurrencies?.find(
(x) => x?.isocurrencycode === 'RUB'
);
onCompleted(null, {
supplierCurrency: transactioncurrency_rub?.value,
});
});
}
export function useInitialData() {
const { $calculation } = useStore();
const apolloClient = useApolloClient();
const { data: user } = useQuery(['user'], getUser, { staleTime: STALE_TIME });
function handleOnCompleted(options, values) {
if (options)
Object.keys(options).forEach((elementName) => {
const elementOptions = options[elementName];
$calculation.element(elementName).setOptions(normalizeOptions(elementOptions));
});
if (values) $calculation.$values.hydrate(values);
}
useEffect(() => {
if (user) getInitialData(apolloClient, user, handleOnCompleted);
}, [user]);
}