trpc/quote: reduce request size

This commit is contained in:
Chika 2022-11-02 14:43:08 +03:00
parent aa3adef0da
commit 98915374af
4 changed files with 37 additions and 18 deletions

View File

@ -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} загружено`,
});

View File

@ -32,13 +32,17 @@ const QUERY_GET_AGENTS_DATA_FROM_QUOTE = gql`
}
`;
type InputData = {
quoteId: NonNullable<CalculationValues['quote']>;
};
type SupplierData = {
values: Partial<CalculationValues>;
};
export default async function getSupplierAgentsDataFromKP(
values: CalculationValues
): Promise<SupplierData> {
export default async function getSupplierAgentsDataFromKP({
quoteId,
}: InputData): Promise<SupplierData> {
const apolloClient = initializeApollo();
const {
@ -46,7 +50,7 @@ export default async function getSupplierAgentsDataFromKP(
} = await apolloClient.query<GetAgentsDataFromQuoteQuery, GetAgentsDataFromQuoteQueryVariables>({
query: QUERY_GET_AGENTS_DATA_FROM_QUOTE,
variables: {
quoteId: values.quote!,
quoteId,
},
});

View File

@ -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<V extends Values>(valueName: V) {
return this.values[valueName];
}

View File

@ -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,
},
};