// React Imports import { useMemo, useState } from 'react' // MUI Imports import Button from '@mui/material/Button' import Divider from '@mui/material/Divider' import Drawer from '@mui/material/Drawer' import IconButton from '@mui/material/IconButton' import Typography from '@mui/material/Typography' // Third-party Imports // Type Imports // Components Imports import CustomTextField from '@core/components/mui/TextField' import { Autocomplete, CircularProgress } from '@mui/material' import { useDebounce } from 'use-debounce' import { useInventoriesMutation } from '../../../../services/mutations/inventories' import { useOutletsQuery } from '../../../../services/queries/outlets' import { useProductsQuery } from '../../../../services/queries/products' import { InventoryAdjustRequest } from '../../../../types/services/inventory' type Props = { open: boolean handleClose: () => void } const AdjustmentStockDrawer = (props: Props) => { // Props const { open, handleClose } = props const { mutate: adjustInventory, isPending: isCreating } = useInventoriesMutation.adjustInventory() // States const [productInput, setProductInput] = useState('') const [productDebouncedInput] = useDebounce(productInput, 500) // debounce for better UX const [outletInput, setOutletInput] = useState('') const [outletDebouncedInput] = useDebounce(outletInput, 500) // debounce for better UX const [formData, setFormData] = useState({ product_id: '', outlet_id: '', delta: 0, reason: '' }) const { data: outlets, isLoading: outletsLoading } = useOutletsQuery.getOutlets({ search: outletDebouncedInput }) const { data: products, isLoading } = useProductsQuery.getProducts({ search: productDebouncedInput }) const outletOptions = useMemo(() => outlets?.outlets || [], [outlets]) const options = useMemo(() => products?.products || [], [products]) // Handle Form Submit const handleFormSubmit = (e: any) => { e.preventDefault() adjustInventory( { ...formData, delta: Number(formData.delta) }, { onSuccess: () => { handleReset() } } ) } const handleInputChange = (e: any) => { setFormData({ ...formData, [e.target.name]: e.target.value }) } // Handle Form Reset const handleReset = () => { handleClose() setFormData({ product_id: '', outlet_id: '', delta: 0, reason: '' }) } return (
Adjust Inventory
option.name} value={outletOptions.find(p => p.id === formData.outlet_id) || null} onInputChange={(event, newOutlettInput) => { setOutletInput(newOutlettInput) }} onChange={(event, newValue) => { setFormData({ ...formData, outlet_id: newValue?.id || '' }) }} renderInput={params => ( {outletsLoading && } {params.InputProps.endAdornment} ) }} /> )} /> option.name} value={options.find(p => p.id === formData.product_id) || null} onInputChange={(event, newProductInput) => { setProductInput(newProductInput) }} onChange={(event, newValue) => { setFormData({ ...formData, product_id: newValue?.id || '' }) }} renderInput={params => ( {isLoading && } {params.InputProps.endAdornment} ) }} /> )} />
) } export default AdjustmentStockDrawer