Compare commits
2 Commits
dev
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e623ed0726 | ||
|
|
30ad0d3efb |
@ -20,6 +20,7 @@
|
|||||||
"@trpc/next": "^10.13.0",
|
"@trpc/next": "^10.13.0",
|
||||||
"@trpc/react-query": "^10.13.0",
|
"@trpc/react-query": "^10.13.0",
|
||||||
"@trpc/server": "^10.13.0",
|
"@trpc/server": "^10.13.0",
|
||||||
|
"async-await-queue": "^2.1.4",
|
||||||
"axios": "^1.3.4",
|
"axios": "^1.3.4",
|
||||||
"dayjs": "^1.11.7",
|
"dayjs": "^1.11.7",
|
||||||
"less": "^4.1.3",
|
"less": "^4.1.3",
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/* eslint-disable sonarjs/cognitive-complexity */
|
/* eslint-disable sonarjs/cognitive-complexity */
|
||||||
import eltHelper from '../elt/lib/helper';
|
import eltHelper from '../elt/lib/helper';
|
||||||
import type { ProcessContext } from '@/process/types';
|
import type { ProcessContext } from '@/process/types';
|
||||||
import { reaction } from 'mobx';
|
import { queueReaction } from '@/utils/mobx';
|
||||||
import { omit } from 'radash';
|
import { omit } from 'radash';
|
||||||
import { message } from 'ui/elements';
|
import { message } from 'ui/elements';
|
||||||
|
|
||||||
@ -12,9 +12,9 @@ export function common({ store, trpcClient, apolloClient }: ProcessContext) {
|
|||||||
|
|
||||||
const { init: initElt } = eltHelper({ apolloClient, store });
|
const { init: initElt } = eltHelper({ apolloClient, store });
|
||||||
|
|
||||||
reaction(
|
queueReaction(
|
||||||
() => $calculation.$values.getValue('quote'),
|
() => $calculation.$values.getValue('quote'),
|
||||||
() => {
|
async () => {
|
||||||
const quote = $calculation.element('selectQuote').getOption();
|
const quote = $calculation.element('selectQuote').getOption();
|
||||||
|
|
||||||
if (!quote || $process.has('LoadKP') || $process.has('Calculate') || $process.has('CreateKP'))
|
if (!quote || $process.has('LoadKP') || $process.has('Calculate') || $process.has('CreateKP'))
|
||||||
@ -27,74 +27,76 @@ export function common({ store, trpcClient, apolloClient }: ProcessContext) {
|
|||||||
key,
|
key,
|
||||||
});
|
});
|
||||||
|
|
||||||
trpcClient.getQuote
|
try {
|
||||||
.query({
|
const { fingap, insurance, payments, values, elt } = await trpcClient.getQuote.query({
|
||||||
values: {
|
values: {
|
||||||
quote: quote.value,
|
quote: quote.value,
|
||||||
...$calculation.$values.getValues(['lead', 'opportunity', 'recalcWithRevision']),
|
...$calculation.$values.getValues(['lead', 'opportunity', 'recalcWithRevision']),
|
||||||
},
|
},
|
||||||
})
|
|
||||||
.then(({ values, payments, insurance, fingap, elt }) => {
|
|
||||||
$calculation.$values.setValues(
|
|
||||||
omit(values, [
|
|
||||||
'lead',
|
|
||||||
'opportunity',
|
|
||||||
'quote',
|
|
||||||
'leadUrl',
|
|
||||||
'opportunityUrl',
|
|
||||||
'quoteUrl',
|
|
||||||
'recalcWithRevision',
|
|
||||||
'plPriceRub',
|
|
||||||
'discountRub',
|
|
||||||
'user',
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
$tables.payments.setValues(payments.values);
|
|
||||||
|
|
||||||
if (insurance.values.osago) {
|
|
||||||
$tables.insurance.row('osago').setValues(insurance.values.osago);
|
|
||||||
}
|
|
||||||
if (insurance.values.kasko) {
|
|
||||||
$tables.insurance.row('kasko').setValues(insurance.values.kasko);
|
|
||||||
}
|
|
||||||
if (insurance.values.fingap) {
|
|
||||||
$tables.insurance.row('fingap').setValues(insurance.values.fingap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fingap) $tables.fingap.setSelectedKeys(fingap.keys);
|
|
||||||
|
|
||||||
initElt().then((initialValues) => {
|
|
||||||
if (initialValues) {
|
|
||||||
$tables.elt.kasko.setRows(initialValues.kasko);
|
|
||||||
$tables.elt.osago.setRows(initialValues.osago);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (elt?.kasko) {
|
|
||||||
$tables.elt.kasko.setRow(elt.kasko);
|
|
||||||
$tables.elt.kasko.setSelectedKey(elt.kasko.key);
|
|
||||||
}
|
|
||||||
if (elt?.osago) {
|
|
||||||
$tables.elt.osago.setRow(elt.osago);
|
|
||||||
$tables.elt.osago.setSelectedKey(elt.osago.key);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
message.success({
|
|
||||||
content: `КП ${quote.label} загружено`,
|
|
||||||
key,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
message.error({
|
|
||||||
content: `Ошибка во время загрузки КП ${quote.label}`,
|
|
||||||
key,
|
|
||||||
});
|
|
||||||
$calculation.element('selectQuote').resetValue();
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
$process.delete('LoadKP');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$calculation.$values.setValues(
|
||||||
|
omit(values, [
|
||||||
|
'lead',
|
||||||
|
'opportunity',
|
||||||
|
'quote',
|
||||||
|
'leadUrl',
|
||||||
|
'opportunityUrl',
|
||||||
|
'quoteUrl',
|
||||||
|
'recalcWithRevision',
|
||||||
|
'plPriceRub',
|
||||||
|
'discountRub',
|
||||||
|
'user',
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
$tables.payments.setValues(payments.values);
|
||||||
|
|
||||||
|
if (insurance.values.osago) {
|
||||||
|
$tables.insurance.row('osago').setValues(insurance.values.osago);
|
||||||
|
}
|
||||||
|
if (insurance.values.kasko) {
|
||||||
|
$tables.insurance.row('kasko').setValues(insurance.values.kasko);
|
||||||
|
}
|
||||||
|
if (insurance.values.fingap) {
|
||||||
|
$tables.insurance.row('fingap').setValues(insurance.values.fingap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fingap) $tables.fingap.setSelectedKeys(fingap.keys);
|
||||||
|
|
||||||
|
initElt().then((initialValues) => {
|
||||||
|
if (initialValues) {
|
||||||
|
$tables.elt.kasko.setRows(initialValues.kasko);
|
||||||
|
$tables.elt.osago.setRows(initialValues.osago);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elt?.kasko) {
|
||||||
|
$tables.elt.kasko.setRow(elt.kasko);
|
||||||
|
$tables.elt.kasko.setSelectedKey(elt.kasko.key);
|
||||||
|
}
|
||||||
|
if (elt?.osago) {
|
||||||
|
$tables.elt.osago.setRow(elt.osago);
|
||||||
|
$tables.elt.osago.setSelectedKey(elt.osago.key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
message.success({
|
||||||
|
content: `КП ${quote.label} загружено`,
|
||||||
|
key,
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
message.error({
|
||||||
|
content: `Ошибка во время загрузки КП ${quote.label}`,
|
||||||
|
key,
|
||||||
|
});
|
||||||
|
$calculation.element('selectQuote').resetValue();
|
||||||
|
} finally {
|
||||||
|
$process.delete('LoadKP');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'load-kp',
|
||||||
|
priority: -1,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,9 @@
|
|||||||
import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types';
|
import type { GetQuoteInputData, GetQuoteProcessData } from '../load-kp/types';
|
||||||
import helper from './lib/helper';
|
|
||||||
import initializeApollo from '@/apollo/client';
|
import initializeApollo from '@/apollo/client';
|
||||||
import defaultValues from '@/config/default-values';
|
import defaultValues from '@/config/default-values';
|
||||||
import * as CRMTypes from '@/graphql/crm.types';
|
import * as CRMTypes from '@/graphql/crm.types';
|
||||||
import { getKPData as getKPDataPrice } from '@/process/price/get-kp-data';
|
|
||||||
import { createCurrencyUtility } from '@/utils/currency';
|
|
||||||
import { gql } from '@apollo/client';
|
import { gql } from '@apollo/client';
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
const QUERY_GET_QUOTE_SUBSIDY_DATA = gql`
|
const QUERY_GET_QUOTE_SUBSIDY_DATA = gql`
|
||||||
query GetQuoteSubsidyData($quoteId: Uuid!) {
|
query GetQuoteSubsidyData($quoteId: Uuid!) {
|
||||||
quote(quoteId: $quoteId) {
|
quote(quoteId: $quoteId) {
|
||||||
@ -17,11 +13,11 @@ const QUERY_GET_QUOTE_SUBSIDY_DATA = gql`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export async function getKPData({ values }: GetQuoteInputData): Promise<GetQuoteProcessData> {
|
export async function getKPData({
|
||||||
|
values: { quote: quoteId },
|
||||||
|
}: GetQuoteInputData): Promise<GetQuoteProcessData> {
|
||||||
const apolloClient = initializeApollo();
|
const apolloClient = initializeApollo();
|
||||||
|
|
||||||
const { quote: quoteId } = values;
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: { quote },
|
data: { quote },
|
||||||
} = await apolloClient.query({
|
} = await apolloClient.query({
|
||||||
@ -31,55 +27,10 @@ export async function getKPData({ values }: GetQuoteInputData): Promise<GetQuote
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const kpDataPrice = await getKPDataPrice({ values });
|
|
||||||
const { RUB } = createCurrencyUtility({ apolloClient });
|
|
||||||
|
|
||||||
const supplierCurrency = kpDataPrice.values?.supplierCurrency ?? defaultValues.supplierCurrency;
|
|
||||||
const leaseObjectPrice = kpDataPrice.values?.leaseObjectPrice ?? defaultValues.leaseObjectPrice;
|
|
||||||
const supplierDiscountRub =
|
|
||||||
kpDataPrice.values?.supplierDiscountRub ?? defaultValues.supplierDiscountRub;
|
|
||||||
|
|
||||||
let plPriceRub = 0;
|
|
||||||
if (supplierCurrency && leaseObjectPrice) {
|
|
||||||
plPriceRub = await RUB({
|
|
||||||
currencyid: supplierCurrency,
|
|
||||||
value: leaseObjectPrice,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
let discountRub = 0;
|
|
||||||
if (supplierCurrency && supplierDiscountRub) {
|
|
||||||
discountRub = await RUB({
|
|
||||||
currencyid: supplierCurrency,
|
|
||||||
value: supplierDiscountRub,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const importProgram = quote?.evo_program_import_subsidyid ?? defaultValues.importProgram;
|
|
||||||
const subsidy = quote?.evo_subsidyid ?? defaultValues.subsidy;
|
|
||||||
|
|
||||||
const { getSubsidySum } = helper({ apolloClient });
|
|
||||||
const subsidySum = await getSubsidySum({
|
|
||||||
addEquipmentPrice: kpDataPrice.values?.addEquipmentPrice ?? 0,
|
|
||||||
discountRub,
|
|
||||||
importProgramSum: kpDataPrice.values?.importProgramSum ?? 0,
|
|
||||||
plPriceRub,
|
|
||||||
subsidy: quote?.evo_subsidyid ?? defaultValues.subsidy,
|
|
||||||
});
|
|
||||||
|
|
||||||
const { getImportProgramSum } = helper({ apolloClient });
|
|
||||||
const importProgramSum = await getImportProgramSum({
|
|
||||||
discountRub,
|
|
||||||
importProgram,
|
|
||||||
plPriceRub,
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
values: {
|
values: {
|
||||||
importProgram,
|
importProgram: quote?.evo_program_import_subsidyid ?? defaultValues.importProgram,
|
||||||
importProgramSum,
|
subsidy: quote?.evo_subsidyid ?? defaultValues.subsidy,
|
||||||
subsidy,
|
|
||||||
subsidySum,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,80 +0,0 @@
|
|||||||
import type { ProcessContext } from '../../types';
|
|
||||||
import * as CRMTypes from '@/graphql/crm.types';
|
|
||||||
import type { CalculationValues } from '@/stores/calculation/values/types';
|
|
||||||
|
|
||||||
type GetSubsidySumInput = Pick<
|
|
||||||
CalculationValues,
|
|
||||||
'addEquipmentPrice' | 'discountRub' | 'importProgramSum' | 'plPriceRub' | 'subsidy'
|
|
||||||
>;
|
|
||||||
|
|
||||||
type GetImportProgramSumInput = Pick<
|
|
||||||
CalculationValues,
|
|
||||||
'discountRub' | 'importProgram' | 'plPriceRub'
|
|
||||||
>;
|
|
||||||
|
|
||||||
export default function helper({ apolloClient }: Pick<ProcessContext, 'apolloClient'>) {
|
|
||||||
return {
|
|
||||||
async getImportProgramSum({
|
|
||||||
importProgram: importProgramId,
|
|
||||||
plPriceRub,
|
|
||||||
discountRub,
|
|
||||||
}: GetImportProgramSumInput) {
|
|
||||||
if (!importProgramId) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const {
|
|
||||||
data: { evo_subsidy: importProgram },
|
|
||||||
} = await apolloClient.query({
|
|
||||||
query: CRMTypes.GetSubsidyDocument,
|
|
||||||
variables: {
|
|
||||||
subsidyId: importProgramId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (importProgram?.evo_subsidy_summ && importProgram?.evo_subsidy_summ > 0) {
|
|
||||||
return importProgram?.evo_subsidy_summ;
|
|
||||||
} else {
|
|
||||||
const subsidyPercent = (importProgram?.evo_percent_subsidy || 0) / 100;
|
|
||||||
|
|
||||||
const sum = (plPriceRub - discountRub) * subsidyPercent;
|
|
||||||
const maxSum = importProgram?.evo_max_subsidy_summ || 0;
|
|
||||||
|
|
||||||
return Math.min(sum, maxSum);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async getSubsidySum({
|
|
||||||
subsidy: subsidyId,
|
|
||||||
plPriceRub,
|
|
||||||
discountRub,
|
|
||||||
addEquipmentPrice,
|
|
||||||
importProgramSum,
|
|
||||||
}: GetSubsidySumInput) {
|
|
||||||
if (!subsidyId) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const {
|
|
||||||
data: { evo_subsidy },
|
|
||||||
} = await apolloClient.query({
|
|
||||||
query: CRMTypes.GetSubsidyDocument,
|
|
||||||
variables: {
|
|
||||||
subsidyId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (evo_subsidy?.evo_subsidy_summ) {
|
|
||||||
return evo_subsidy?.evo_subsidy_summ;
|
|
||||||
}
|
|
||||||
|
|
||||||
const price = plPriceRub - discountRub - importProgramSum + addEquipmentPrice;
|
|
||||||
|
|
||||||
let sum = (price * (evo_subsidy?.evo_percent_subsidy ?? 0)) / 100;
|
|
||||||
const maxSum = evo_subsidy?.evo_max_subsidy_summ ?? 0;
|
|
||||||
if (sum > maxSum) sum = maxSum;
|
|
||||||
|
|
||||||
return sum;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
import helper from './lib/helper';
|
import * as CRMTypes from '@/graphql/crm.types';
|
||||||
import type { ProcessContext } from '@/process/types';
|
import type { ProcessContext } from '@/process/types';
|
||||||
import { disposableReaction } from '@/utils/mobx';
|
import { queueReaction } from '@/utils/mobx';
|
||||||
import { comparer } from 'mobx';
|
import { comparer } from 'mobx';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -20,28 +20,43 @@ import { comparer } from 'mobx';
|
|||||||
*/
|
*/
|
||||||
/* eslint-enable */
|
/* eslint-enable */
|
||||||
|
|
||||||
export function common(context: ProcessContext) {
|
export function common({ store, apolloClient }: ProcessContext) {
|
||||||
const { store } = context;
|
const { $calculation } = store;
|
||||||
const { $calculation, $process } = store;
|
|
||||||
|
|
||||||
const { getSubsidySum, getImportProgramSum } = helper(context);
|
queueReaction(
|
||||||
|
() => $calculation.$values.getValues(['importProgram', 'plPriceRub', 'supplierDiscountRub']),
|
||||||
|
async ({ importProgram: importProgramId, plPriceRub, supplierDiscountRub }) => {
|
||||||
|
if (importProgramId) {
|
||||||
|
const {
|
||||||
|
data: { evo_subsidy: importProgram },
|
||||||
|
} = await apolloClient.query({
|
||||||
|
query: CRMTypes.GetSubsidyDocument,
|
||||||
|
variables: {
|
||||||
|
subsidyId: importProgramId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
disposableReaction(
|
if (importProgram?.evo_subsidy_summ && importProgram?.evo_subsidy_summ > 0) {
|
||||||
() => $process.has('LoadKP'),
|
$calculation.element('tbxImportProgramSum').setValue(importProgram?.evo_subsidy_summ);
|
||||||
() => $calculation.$values.getValues(['importProgram', 'plPriceRub', 'discountRub']),
|
} else {
|
||||||
async (values) => {
|
const subsidyPercent = (importProgram?.evo_percent_subsidy || 0) / 100;
|
||||||
const importProgramSum = await getImportProgramSum(values);
|
|
||||||
|
|
||||||
$calculation.element('tbxImportProgramSum').setValue(importProgramSum);
|
const sum = (plPriceRub - supplierDiscountRub) * subsidyPercent;
|
||||||
|
const maxSum = importProgram?.evo_max_subsidy_summ || 0;
|
||||||
|
|
||||||
|
$calculation.element('tbxImportProgramSum').setValue(Math.min(sum, maxSum));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$calculation.element('tbxImportProgramSum').setValue(0);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
delay: 5,
|
name: 'tbxImportProgramSum',
|
||||||
equals: comparer.shallow,
|
priority: 1,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
disposableReaction(
|
queueReaction(
|
||||||
() => $process.has('LoadKP'),
|
|
||||||
() =>
|
() =>
|
||||||
$calculation.$values.getValues([
|
$calculation.$values.getValues([
|
||||||
'subsidy',
|
'subsidy',
|
||||||
@ -51,13 +66,47 @@ export function common(context: ProcessContext) {
|
|||||||
'importProgramSum',
|
'importProgramSum',
|
||||||
'quote',
|
'quote',
|
||||||
]),
|
]),
|
||||||
async (values) => {
|
async ({
|
||||||
const subsidySum = await getSubsidySum(values);
|
subsidy: subsidyId,
|
||||||
$calculation.element('tbxSubsidySum').setValue(subsidySum);
|
plPriceRub,
|
||||||
|
discountRub,
|
||||||
|
addEquipmentPrice,
|
||||||
|
importProgramSum,
|
||||||
|
}) => {
|
||||||
|
if (!subsidyId) {
|
||||||
|
$calculation.element('tbxSubsidySum').resetValue();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: { evo_subsidy: subsidy },
|
||||||
|
} = await apolloClient.query({
|
||||||
|
query: CRMTypes.GetSubsidyDocument,
|
||||||
|
variables: {
|
||||||
|
subsidyId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (subsidy?.evo_subsidy_summ) {
|
||||||
|
$calculation.element('tbxSubsidySum').setValue(subsidy?.evo_subsidy_summ);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const price = plPriceRub - discountRub - importProgramSum + addEquipmentPrice;
|
||||||
|
|
||||||
|
let sum = (price * (subsidy?.evo_percent_subsidy ?? 0)) / 100;
|
||||||
|
const maxSum = subsidy?.evo_max_subsidy_summ ?? 0;
|
||||||
|
if (sum > maxSum) sum = maxSum;
|
||||||
|
|
||||||
|
$calculation.element('tbxSubsidySum').setValue(sum);
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
delay: 5,
|
delay: 5,
|
||||||
equals: comparer.shallow,
|
equals: comparer.shallow,
|
||||||
|
name: 'tbxSubsidySum',
|
||||||
|
priority: 1,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { Queue } from 'async-await-queue';
|
||||||
import type { IReactionDisposer, IReactionOptions, IReactionPublic } from 'mobx';
|
import type { IReactionDisposer, IReactionOptions, IReactionPublic } from 'mobx';
|
||||||
import { reaction } from 'mobx';
|
import { reaction } from 'mobx';
|
||||||
import { debounce, omit } from 'radash';
|
import { debounce, omit } from 'radash';
|
||||||
@ -51,3 +52,40 @@ export function debouncedReaction<T, FireImmediately extends boolean = false>(
|
|||||||
|
|
||||||
return reaction(expression, debouncedEffect, reactionOpts);
|
return reaction(expression, debouncedEffect, reactionOpts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const queue = new Queue(1, 10);
|
||||||
|
|
||||||
|
export function queueReaction<T, FireImmediately extends boolean = false>(
|
||||||
|
expression: (r: IReactionPublic) => T,
|
||||||
|
effect: (
|
||||||
|
arg: T,
|
||||||
|
prev: FireImmediately extends true ? T | undefined : T,
|
||||||
|
r: IReactionPublic
|
||||||
|
) => Promise<void>,
|
||||||
|
{
|
||||||
|
priority,
|
||||||
|
name,
|
||||||
|
...reactionOpts
|
||||||
|
}: IReactionOptions<T, FireImmediately> & { name: string; priority: number }
|
||||||
|
): IReactionDisposer {
|
||||||
|
const me = Symbol(name);
|
||||||
|
|
||||||
|
async function queueEffect(
|
||||||
|
arg: T,
|
||||||
|
prev: FireImmediately extends true ? T | undefined : T,
|
||||||
|
r: IReactionPublic
|
||||||
|
) {
|
||||||
|
await queue.wait(me, priority);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await effect(arg, prev, r);
|
||||||
|
} catch (error) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.error(error);
|
||||||
|
} finally {
|
||||||
|
queue.end(me);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return reaction(expression, queueEffect, reactionOpts);
|
||||||
|
}
|
||||||
|
|||||||
@ -2669,6 +2669,11 @@ astral-regex@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||||
|
|
||||||
|
async-await-queue@^2.1.4:
|
||||||
|
version "2.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/async-await-queue/-/async-await-queue-2.1.4.tgz#0c44a405cd31369b561f6ac663b74b4b4ffb99ad"
|
||||||
|
integrity sha512-3DpDtxkKO0O/FPlWbk/CrbexjuSxWm1CH1bXlVNVyMBIkKHhT5D85gzHmGJokG3ibNGWQ7pHBmStxUW/z/0LYQ==
|
||||||
|
|
||||||
async-validator@^4.1.0:
|
async-validator@^4.1.0:
|
||||||
version "4.2.5"
|
version "4.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
|
resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user