/* eslint-disable sonarjs/cognitive-complexity */ import { message } from '@/Components/Common/Notification'; import getUrls from '@/config/urls'; import { ApolloLink, from, HttpLink } from '@apollo/client'; import { onError } from '@apollo/client/link/error'; import { getCurrentScope } from '@sentry/nextjs'; import { isServer } from 'tools'; const { URL_CRM_GRAPHQL } = getUrls(); const modifyDataLink = new ApolloLink((operation, forward) => { const context = operation?.getContext(); return forward(operation).map((response) => { if (!context?.disableModify) { if (Object.keys(response?.data).includes('evo_addproduct_types')) { response.data.evo_addproduct_types = response.data.evo_addproduct_types.map( (evo_addproduct_type) => { if (evo_addproduct_type.evo_graph_price) return { ...evo_addproduct_type, label: `${evo_addproduct_type.label} (${evo_addproduct_type.evo_graph_price} руб.)`, }; return evo_addproduct_type; } ); } if (Object.keys(response?.data).includes('evo_equipments')) { response.data.evo_equipments = response.data.evo_equipments.map((evo_equipment) => { if (evo_equipment.evo_start_production_year) return { ...evo_equipment, label: `${evo_equipment.label} (${evo_equipment.evo_start_production_year})`, }; return evo_equipment; }); } if (operation.operationName === 'GetInsuranceCompanies') { response.data.accounts = response.data.accounts.map((account) => { const substring = account.label.match(/"(.+)"/u); if (substring) return { ...account, label: substring ? substring[1].replaceAll('"', '').trim() : account.label, }; return account; }); } } return response; }); }); const httpLink = new HttpLink({ uri: URL_CRM_GRAPHQL, }); const errorLink = onError(({ graphQLErrors, networkError, operation, response }) => { const scope = getCurrentScope(); scope.setTag('operationName', operation.operationName); if (!isServer()) { message.error({ content: `Ошибка во время загрузки данных из CRM`, key: 'APOLLO_GRAPHQL', }); } scope.setExtras({ graphQLErrors, networkError, operation, response, }); }); export const link = from([errorLink, modifyDataLink, httpLink]);