add stock modal
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-06-18 18:52:50 +03:30
parent c588b6f6b4
commit 1137780cf0
6 changed files with 214 additions and 37 deletions
@@ -0,0 +1,108 @@
import { type FC, useEffect, useState } from 'react'
import DefaulModal from '@/components/DefaulModal'
import Input from '@/components/Input'
import Button from '@/components/Button'
import type { Food } from '../types/Types'
type Props = {
food: Food | null
open: boolean
onClose: () => void
onSubmit: (foodId: string, totalStock: number, availableStock: number) => void
isLoading?: boolean
}
const StockUpdateModal: FC<Props> = ({
food,
open,
onClose,
onSubmit,
isLoading = false,
}) => {
const [totalStock, setTotalStock] = useState(0)
const [availableStock, setAvailableStock] = useState(0)
const [error, setError] = useState('')
useEffect(() => {
if (food) {
setTotalStock(food.inventory?.totalStock ?? 0)
setAvailableStock(food.inventory?.availableStock ?? 0)
setError('')
}
}, [food])
const handleSubmit = () => {
if (availableStock > totalStock) {
setError('موجودی فعلی نمی‌تواند بیشتر از موجودی روزانه باشد')
return
}
if (!food) return
onSubmit(food.id, totalStock, availableStock)
}
return (
<DefaulModal
open={open}
close={onClose}
isHeader
title_header='بروزرسانی موجودی'
width={480}
>
{food && (
<div className='mt-6'>
<p className='text-sm text-gray-600 mb-5'>
غذا: <span className='font-medium text-gray-800'>{food.title}</span>
</p>
<div className='flex flex-col gap-4'>
<Input
name='totalStock'
label='موجودی روزانه'
placeholder='عدد'
type='number'
seprator
value={totalStock}
onChange={(e) => {
setTotalStock(Number(e.target.value))
setError('')
}}
/>
<Input
name='availableStock'
label='موجودی فعلی'
placeholder='عدد'
type='number'
seprator
value={availableStock}
onChange={(e) => {
setAvailableStock(Number(e.target.value))
setError('')
}}
error_text={error}
/>
</div>
<div className='flex gap-3 mt-6'>
<Button
label='انصراف'
type='button'
onClick={onClose}
className='bg-gray-100 text-gray-700'
/>
<Button
label='ذخیره'
type='button'
onClick={handleSubmit}
isloading={isLoading}
/>
</div>
</div>
)}
</DefaulModal>
)
}
export default StockUpdateModal