Files
dzone-front/src/pages/request/components/CompanyServices.tsx
T
hamid zarghami 46e29c4909 edit my company
2025-06-01 15:18:42 +03:30

92 lines
3.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { FC, useState } from 'react'
import Input from '../../../components/Input'
import UploadBox from '../../../components/UploadBox'
import { Add, CloseCircle } from 'iconsax-react'
import Button from '../../../components/Button'
type Service = { title: string; image?: File; existingImageUrl?: string }
type Props = {
value: Service[]
onChange: (val: Service[]) => void
}
const CompanyServices: FC<Props> = ({ value, onChange }) => {
const [serviceTitle, setServiceTitle] = useState('')
const [serviceImage, setServiceImage] = useState<File | undefined>(undefined)
const [serviceError, setServiceError] = useState('')
const handleAddService = () => {
if (!serviceTitle.trim()) {
setServiceError('عنوان خدمت الزامی است')
return
}
if (!serviceImage) {
setServiceError('تصویر خدمت الزامی است')
return
}
if (value.some(s => s.title.trim() === serviceTitle.trim())) {
setServiceError('عنوان خدمت تکراری است')
return
}
onChange([...value, { title: serviceTitle.trim(), image: serviceImage }])
setServiceTitle('')
setServiceImage(undefined)
setServiceError('')
}
const handleRemoveService = (idx: number) => {
onChange(value.filter((_, i) => i !== idx))
}
return (
<div className='mt-8'>
<div className='mb-2'>خدمات شرکت</div>
<div className='rowTwoInput items-end gap-4'>
<div className='w-full'>
<Input
label='عنوان خدمت'
name='serviceTitle'
value={serviceTitle}
onChange={e => setServiceTitle(e.target.value)}
/>
</div>
<div className='w-full'>
<UploadBox
label='تصویر'
onChange={files => setServiceImage(files[0])}
isMultiple={false}
isReset={!serviceImage && !serviceTitle}
/>
</div>
<Button
onClick={handleAddService}
className='w-fit px-4 whitespace-nowrap'
>
<div className='flex gap-2'>
<Add size={22} color='white' />
<div>افزودن خدمت</div>
</div>
</Button>
</div>
{serviceError && <div className='text-xs text-red-600 mt-2'>{serviceError}</div>}
{/* نمایش لیست خدمات */}
<div className='mt-4 flex gap-2'>
{value.map((srv, idx) => (
<div key={idx} className='flex border p-2 rounded-xl items-center gap-2'>
<div className='flex items-center gap-2'>
{srv.image && <img src={URL.createObjectURL(srv.image)} alt='' className='size-10 min-w-10 rounded-md object-cover' />}
{srv.existingImageUrl && !srv.image && <img src={srv.existingImageUrl} alt='' className='size-10 min-w-10 rounded-md object-cover' />}
</div>
<div className='w-full text-xs'>{srv.title}</div>
<button type='button' onClick={() => handleRemoveService(idx)} className='ml-auto'>
<CloseCircle size={16} color='red' />
</button>
</div>
))}
</div>
</div>
)
}
export default CompanyServices