import { useSelector } from 'react-redux'; import { toast } from 'react-toastify'; import { RootState } from '../../../../app/store'; import SingleSelect from '../../../../components/SingleSelect'; import Table from '../../../../components/Table'; import TableLoading from '../../../../components/TableLoading'; import { useGetProductsQuery, useUpdateStockActionMutation } from '../../../../features/products/productsApi'; import QuantityChange from './components/QuantityChange'; import StockToggler from './components/StockToggler'; type RequestBody = { backorders?: string; stock_status?: string; }; const StockTable = () => { const { query } = useSelector((state: RootState) => state.products); const { data, isLoading } = useGetProductsQuery(query, { refetchOnMountOrArgChange: true, }); const unmanagedActions = { instock: 'In Stock', outofstock: 'Out of Stock', onbackorder: 'On Backorder', }; const managedActions = { no: 'Do Not Allow', notify: 'Allow, Notify Customer', yes: 'Allow', }; const [updateStockAction, { isLoading: togglerStatusLoading }] = useUpdateStockActionMutation(); const handleStockAction = async (stockStatus: string, id: number, wcStock: string | boolean) => { const body: RequestBody = {}; if (wcStock) { body.backorders = stockStatus; } else { body.stock_status = stockStatus; } const result = await updateStockAction({ id, body, }).unwrap(); if (result) { toast.success('Stock Status Updated'); } }; return ( StatusIDImageProduct TitleTypeSKURegular PriceSale PriceStock QuantityStock/Backorder {isLoading ? ( ) : ( {data && data.products.map((product) => ( <> {product.id} {product.name} {product.name}{product.product_type}{product.sku}{product.regular_price}{product.sale_price} {product.wc_stock === true ? ( ) : ( {product.stock_quantity} )} {product.product_type !== 'external' && ( <> {product.wc_stock === true ? ( { handleStockAction(changedStatus, product.id, product.wc_stock); }} selected={product.backorders} items={managedActions} /> ) : ( { handleStockAction(changedStatus, product.id, product.wc_stock); }} selected={product.stock_status} items={unmanagedActions} /> )} )} {product.product_type === 'variable' && product.variations.length > 0 && product.variations.map((variation) => ( {variation.id} {variation.name} {variation.name}{variation.product_type}{variation.sku}{variation.regular_price}{variation.sale_price} {variation.wc_stock === true || variation.wc_stock === 'parent' ? ( ) : ( {variation.stock_quantity} )} {variation.wc_stock !== 'parent' && ( <> {variation.wc_stock === true ? ( { handleStockAction(changedStatus, variation.id, variation.wc_stock); }} selected={variation.backorders} items={managedActions} /> ) : ( { handleStockAction(changedStatus, variation.id, variation.wc_stock); }} selected={variation.stock_status} items={unmanagedActions} /> )} )} ))} ))} )}
); }; export default StockTable;