Как сократить количество кода Thank-ов в reudx-toolkit?

На проекте огромнное количетсво фанков, потому что так устроена апишка бэка. Вопрос как мне лучше сгруппировать эти фанки? Я долго думал, но кроме try catch блок кинуть все фанки больше идей не приходило. Ниже как раз они и это только 1\4 часть их...

export const addProductInCart = createAsyncThunk('bascket/addProductInCart', async (product_id: string) => {
    try {
        const response = await ClientAPI({
            url: 'gpnntc_mp.cart.product.add',
            params: {
                product_id,
            },
        })

        return response.data.result
    } catch (err) {}
})

export const setCartProductTopic = createAsyncThunk<'success', { product_id: string; topic: string }>(
    'bascket/setCartProductTopic',
    async ({ product_id, topic }) => {
        try {
            const response = await ClientAPI({
                method: 'POST',
                url: 'gpnntc_mp.cart.product.topic.set',
                data: { product_id, topic },
            })

            return response.data.result
        } catch (err) {}
    }
)

export const setCartProductComment = createAsyncThunk<'success', { product_id: string; comment: string }>(
    'bascket/setCartProductTopic',
    async ({ product_id, comment }) => {
        try {
            const response = await ClientAPI({
                method: 'POST',
                url: 'gpnntc_mp.cart.product.comment.set',
                data: { product_id, comment },
            })

            return response.data.result
        } catch (err) {}
    }
)

export const setCartProductManager = createAsyncThunk<'success', { productId: string; productManagerId: string }>(
    'bascket/setCartProductManager',
    async ({ productId, productManagerId }) => {
        try {
            const response = await ClientAPI({
                method: 'POST',
                url: 'gpnntc_mp.cart.product.manager.set',
                data: {
                    product_id: productId,
                    product_manager_id: productManagerId,
                },
            })

            return response.data.result
        } catch (err) {}
    }
)

export const addCartProductPart = createAsyncThunk<'success', { partId: string; productId: string }>(
    'bascket/setCartProductPart',
    async ({ partId, productId }) => {
        try {
            const response = await ClientAPI({
                method: 'POST',
                url: 'gpnntc_mp.cart.product.part.add',
                data: {
                    product_id: productId,
                    part_id: partId,
                },
            })

            return response.data.result
        } catch (err) {}
    }
)

export const delCartProductPart = createAsyncThunk<'success', { partId: string | undefined; productId: string }>(
    'bascket/delCartProductPart',
    async ({ partId, productId }) => {
        if (partId === undefined) return false

        try {
            const response = await ClientAPI({
                method: 'POST',
                url: 'gpnntc_mp.cart.product.part.del',
                data: {
                    product_id: productId,
                    part_id: partId,
                },
            })

            return response.data.result
        } catch (err) {}
    }
)

export const getInstanceProducts = createAsyncThunk<InstanceProduct[]>('bascket/getInstanceProducts', async () => {
    try {
        const response = await ClientAPI({
            url: 'gpnntc_mp.cart.product.list',
        })

        return response.data.result
    } catch (err) {}
})

export const getInstanceProductByID = createAsyncThunk<InstanceProduct[], { productId: string }>(
    'bascket/getInstanceProductByID',
    async ({ productId }) => {
        try {
            const response = await ClientAPI({
                url: 'gpnntc_mp.cart.product.item',
                params: { product_id: productId },
            })

            return response.data.result
        } catch (err) {}
    }
)
  • Вопрос задан
  • 25 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы