elt/kasko: remove react-query

This commit is contained in:
vchikalkin 2023-09-15 13:28:03 +03:00
parent ae0b72aebd
commit d862c7b470
3 changed files with 32 additions and 58 deletions

View File

@ -9,9 +9,8 @@ import helper from '@/process/elt/lib/helper';
import { useStore } from '@/stores/hooks';
import { defaultRow } from '@/stores/tables/elt/default-values';
import { useApolloClient } from '@apollo/client';
import type { QueryFunctionContext } from '@tanstack/react-query';
import { useQueries } from '@tanstack/react-query';
import { observer } from 'mobx-react-lite';
import { sift } from 'radash';
import { Flex } from 'ui/grid';
const storeSelector: StoreSelector = ({ kasko }) => kasko;
@ -25,72 +24,43 @@ const initialData = {
kaskoSum: 0,
},
],
sum: 0,
};
export const Kasko = observer(() => {
const store = useStore();
const { $tables, $calculation } = store;
const apolloClient = useApolloClient();
const { init } = helper({ apolloClient, store });
const queries = useQueries({
queries: $tables.elt.kasko.getRows.map((row) => {
const { id, key, name } = row;
return {
enabled: false,
initialData: { ...initialData, id, key, name },
queryFn: async (context: QueryFunctionContext) => {
const payload = await makeEltKaskoRequest({ apolloClient, store }, row);
const res = await getEltKasko(payload, context);
if (res) {
const companyRes = res?.[id];
return { ...companyRes, id, key, name };
}
return { ...initialData, id, key, name };
},
queryKey: ['elt', 'kasko', id],
refetchOnWindowFocus: false,
retry: false,
};
}),
});
async function handleOnClick() {
const { kasko } = await init();
$tables.elt.kasko.setRows(kasko);
const kaskoCompanyIds = $tables.insurance
.row('kasko')
.getOptions('insuranceCompany')
.map((x) => x.value);
const kaskoCompanyIds = sift(
$tables.insurance
.row('kasko')
.getOptions('insuranceCompany')
.map((x) => x.value)
);
const values = $calculation.$values.getValues();
queries
.filter(({ data }) => data?.key && kaskoCompanyIds.includes(data.key))
.forEach(({ refetch, data, remove }) => {
remove();
if (data?.key) $tables.elt.kasko.setRow({ key: data?.key, status: 'fetching' });
refetch()
kaskoCompanyIds.forEach((key) => {
const row = $tables.elt.kasko.getRow(key);
if (row) {
$tables.elt.kasko.setRow({ key, status: 'fetching' });
makeEltKaskoRequest({ apolloClient, store }, row)
.then((payload) => getEltKasko(payload))
.then((res) => {
if (res.data) {
if (res) {
const companyRes = res?.[row.id];
const {
key,
kaskoSum = 0,
message,
skCalcId,
totalFranchise = 0,
requestId,
paymentPeriods,
} = res.data;
let { error } = res.data;
} = companyRes;
let { error } = companyRes;
if (totalFranchise > MAX_FRANCHISE) {
error ||= `Франшиза по страховке превышает максимально допустимое значение: ${Intl.NumberFormat(
@ -129,21 +99,21 @@ export const Kasko = observer(() => {
requestId,
skCalcId,
status: error ? 'error' : null,
sum: values.leasingPeriod <= 16 ? kaskoSum : paymentPeriods?.at(0)?.kaskoSum || 0,
sum: values.leasingPeriod <= 16 ? kaskoSum : paymentPeriods?.[0]?.kaskoSum || 0,
totalFranchise,
});
}
})
.catch((error) => {
if (data?.key)
$tables.elt.kasko.setRow({
...defaultRow,
key: data?.key,
message: error,
status: 'error',
});
$tables.elt.kasko.setRow({
...initialData,
key,
message: error,
status: 'error',
});
});
});
}
});
}
function handleOnSelectRow(row: Row) {

View File

@ -15,10 +15,10 @@ export async function getEltOsago(payload: ELT.RequestEltOsago, { signal }: Quer
);
}
export async function getEltKasko(payload: ELT.RequestEltKasko, { signal }: QueryFunctionContext) {
export async function getEltKasko(payload: ELT.RequestEltKasko) {
return withHandleError(
axios
.post<ELT.ResponseEltKasko>(URL_ELT_KASKO, payload, { signal, timeout: TIMEOUT })
.post<ELT.ResponseEltKasko>(URL_ELT_KASKO, payload, { timeout: TIMEOUT })
.then(({ data }) => data)
);
}

View File

@ -55,6 +55,10 @@ export default class PolicyStore {
if (index >= 0) this.rows[index] = { ...this.rows[index], ...row };
};
public getRow(key: string) {
return this.rows.find((x) => x.key === key);
}
public get getRows() {
return toJS(this.rows);
}