diff --git a/process/load-kp/reactions.ts b/process/load-kp/reactions.ts index a4a2aac..c63b60c 100644 --- a/process/load-kp/reactions.ts +++ b/process/load-kp/reactions.ts @@ -22,12 +22,20 @@ export default function loadKpReactions( const quoteName = $calculation.element('selectQuote').getOption()?.label; + const { lead, opportunity, quote } = toJS($calculation.$values.values); trpcClient.quote.getValues - .mutate({ - values: toJS($calculation.$values.values), + .query({ + values: { + lead, + opportunity, + quote, + }, }) .then(({ values }) => { - $calculation.$values.hydrate(values); + $calculation.$values.setValues({ + values, + exclude: ['leadUrl', 'opportunityUrl', 'quoteUrl'], + }); message.success({ content: `КП ${quoteName} загружено`, }); diff --git a/process/supplier-agent/get-data-from-kp.ts b/process/supplier-agent/get-data-from-kp.ts index e9ebc4e..fa0a71b 100644 --- a/process/supplier-agent/get-data-from-kp.ts +++ b/process/supplier-agent/get-data-from-kp.ts @@ -32,13 +32,17 @@ const QUERY_GET_AGENTS_DATA_FROM_QUOTE = gql` } `; +type InputData = { + quoteId: NonNullable; +}; + type SupplierData = { values: Partial; }; -export default async function getSupplierAgentsDataFromKP( - values: CalculationValues -): Promise { +export default async function getSupplierAgentsDataFromKP({ + quoteId, +}: InputData): Promise { const apolloClient = initializeApollo(); const { @@ -46,7 +50,7 @@ export default async function getSupplierAgentsDataFromKP( } = await apolloClient.query({ query: QUERY_GET_AGENTS_DATA_FROM_QUOTE, variables: { - quoteId: values.quote!, + quoteId, }, }); diff --git a/stores/calculation/values/index.ts b/stores/calculation/values/index.ts index 2213af8..a1b4112 100644 --- a/stores/calculation/values/index.ts +++ b/stores/calculation/values/index.ts @@ -1,6 +1,7 @@ /* eslint-disable object-curly-newline */ import defaultValues from 'config/default-values'; import { makeAutoObservable } from 'mobx'; +import { pick } from 'radash'; import type RootStore from '../../root'; import type { CalculationValues, Values } from './types'; @@ -17,6 +18,13 @@ export default class ValuesStore { this.values = initialValues; }; + setValues = (params: { values: CalculationValues; exclude: Values[] }) => { + const { values, exclude } = params; + + const savedValues = pick(this.values, exclude); + this.values = { ...values, ...savedValues }; + }; + getValue(valueName: V) { return this.values[valueName]; } diff --git a/trpc/routers/quote.ts b/trpc/routers/quote.ts index 7ce90fe..c01a1b6 100644 --- a/trpc/routers/quote.ts +++ b/trpc/routers/quote.ts @@ -8,7 +8,11 @@ const quoteRouter = t.router({ getValues: t.procedure .input( z.object({ - values: ValuesSchema, + values: ValuesSchema.pick({ + lead: true, + opportunity: true, + quote: true, + }), }) ) .output( @@ -16,20 +20,15 @@ const quoteRouter = t.router({ values: ValuesSchema, }) ) - .mutation(async ({ input }) => { - const { values } = await getSupplierAgentsDataFromKP(input.values); - - const { lead, opportunity, quote, leadUrl, opportunityUrl, quoteUrl } = input.values; + .query(async ({ input }) => { + const { values } = await getSupplierAgentsDataFromKP({ + quoteId: input.values.quote!, + }); return { values: { ...defaultValues, - lead, - leadUrl, - opportunity, - opportunityUrl, - quote, - quoteUrl, + ...input.values, ...values, }, };