add suppliers

This commit is contained in:
Aya
2026-05-03 15:25:50 +03:00
parent 287401f1da
commit 8621096a82
10 changed files with 564 additions and 170 deletions

View File

@@ -54,6 +54,8 @@ function ContactsContent() {
const [searchTerm, setSearchTerm] = useState('')
const [selectedType, setSelectedType] = useState('all')
const [selectedSpecialization, setSelectedSpecialization] = useState('all')
const [createDefaultType, setCreateDefaultType] = useState('INDIVIDUAL')
const [selectedStatus, setSelectedStatus] = useState('all')
const [selectedSource, setSelectedSource] = useState('all')
const [selectedRating, setSelectedRating] = useState('all')
@@ -82,6 +84,7 @@ function ContactsContent() {
if (searchTerm) filters.search = searchTerm
if (selectedType !== 'all') filters.type = selectedType
if (selectedSpecialization !== 'all') filters.specialization = selectedSpecialization
if (selectedStatus !== 'all') filters.status = selectedStatus
if (selectedSource !== 'all') filters.source = selectedSource
if (selectedRating !== 'all') filters.rating = parseInt(selectedRating)
@@ -97,7 +100,7 @@ function ContactsContent() {
} finally {
setLoading(false)
}
}, [currentPage, searchTerm, selectedType, selectedStatus, selectedSource, selectedRating, selectedCategory])
}, [currentPage, searchTerm, selectedType, selectedStatus, selectedSource, selectedRating, selectedCategory, selectedSpecialization])
useEffect(() => {
const debounce = setTimeout(() => {
@@ -109,7 +112,7 @@ function ContactsContent() {
useEffect(() => {
fetchContacts()
}, [currentPage, selectedType, selectedStatus, selectedSource, selectedRating, selectedCategory])
}, [currentPage, selectedType, selectedStatus, selectedSource, selectedRating, selectedCategory, selectedSpecialization])
const handleCreate = async (data: CreateContactData) => {
setSubmitting(true)
@@ -247,6 +250,21 @@ function ContactsContent() {
return (contact as any).nameAr || ''
}
const supplierSpecializations = [
'كاميرات',
'شبكات',
'أجهزة كومبيوتر',
'projectors',
'مقاسم هاتفية',
' Mobile - Tablet',
'firewall',
'طاقة بديلة',
'حديد',
' باركود - POS',
'أجهزة منزلية',
'تكييف وتبريد',
]
return (
<div className="min-h-screen bg-gray-50">
<header className="bg-white shadow-sm border-b">
@@ -307,8 +325,20 @@ function ContactsContent() {
<button
onClick={() => {
resetForm()
setCreateDefaultType('SUPPLIER')
setShowCreateModal(true)
}}
className="flex items-center gap-2 px-4 py-2 bg-emerald-600 text-white rounded-lg hover:bg-emerald-700 transition-colors"
>
<Plus className="h-4 w-4" />
إضافة موردين
</button>
<button
onClick={() => {
resetForm()
setCreateDefaultType('INDIVIDUAL')
setShowCreateModal(true)
}}
className="flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"
>
<Plus className="h-4 w-4" />
@@ -406,8 +436,10 @@ function ContactsContent() {
<option value="UN">UN</option>
<option value="NGO">NGO</option>
<option value="INSTITUTION">Institution</option>
<option value="SUPPLIER">Suppliers - موردين</option>
</select>
<select
value={selectedStatus}
onChange={(e) => setSelectedStatus(e.target.value)}
@@ -452,7 +484,23 @@ function ContactsContent() {
<option value="OTHER">Other</option>
</select>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
اختصاص المورد
</label>
<select
value={selectedSpecialization}
onChange={(e) => setSelectedSpecialization(e.target.value)}
className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 bg-white text-gray-900"
>
<option value="all">كل الاختصاصات</option>
{supplierSpecializations.map((item) => (
<option key={item} value={item}>
{item}
</option>
))}
</select>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">Rating</label>
<select
@@ -493,6 +541,7 @@ function ContactsContent() {
setSelectedRating('all')
setSelectedCategory('all')
setCurrentPage(1)
setSelectedSpecialization('all')
}}
className="w-full px-4 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50 transition-colors"
>
@@ -528,8 +577,8 @@ function ContactsContent() {
onClick={() => setShowCreateModal(true)}
className="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700"
>
Create First Contact
</button>
{createDefaultType === 'SUPPLIER' ? 'إضافة مورد' : 'Create New Contact'}
</button>
</div>
) : (
<>
@@ -732,7 +781,8 @@ function ContactsContent() {
size="xl"
>
<ContactForm
key="create-contact"
key={`create-${createDefaultType}`}
defaultType={createDefaultType}
onSubmit={async (data) => {
await handleCreate(data as CreateContactData)
}}