import { Basket, FindInStoreFormType, ProductResult, StockResultType } from '../../types'; import { buildClientRequestUrl } from '../../utils'; import { api } from './api'; import { product } from '../urls'; export type AddProductResponse = { basket: Basket; osessionid: string; }; export type AddProductRequest = { product: number; quantity: number; attributes: any; }; type GetProduct = { pk: number; searchParams?: URLSearchParams; groupProduct?: boolean; [key: string]: any; }; export const productApi = api.injectEndpoints({ endpoints: (build) => ({ getProductByPk: build.query({ query: (pk) => ({ url: buildClientRequestUrl(product.getProductByPk(pk)) }) }), getProductByParams: build.query({ query: ({ pk, searchParams, groupProduct, ...params }) => { let url = groupProduct ? product.getGroupProductByPk(pk) : product.getProductByPk(pk); if (params) { url = `${url}?${new URLSearchParams(params).toString()}`; } return { url: buildClientRequestUrl(url) }; } }), getRetailStoreStock: build.mutation({ query: (body) => { const { productPk, queryString } = body; return { url: buildClientRequestUrl( product.getRetailStoreStock(productPk, queryString), { contentType: 'application/json' } ), method: 'GET' }; } }), addProduct: build.mutation({ query: (body) => ({ url: buildClientRequestUrl(product.addProduct, { contentType: 'application/json' }), method: 'POST', body }), invalidatesTags: ['MiniBasket'] }), getInstallments: build.query({ query: (productPk) => ({ url: buildClientRequestUrl(product.installments(productPk)) }) }), getBundleProductData: build.query< any, { productPk: string; queryString: string } >({ query: ({ productPk, queryString }) => { return { url: buildClientRequestUrl( product.bundleProduct(productPk, queryString), { responseType: 'json' } ) }; } }) }), overrideExisting: true }); export const { useAddProductMutation, useGetProductByPkQuery, useGetRetailStoreStockMutation, useGetInstallmentsQuery, useGetProductByParamsQuery, useGetBundleProductDataQuery } = productApi;