@@ -33,7 +33,6 @@ const initialFormData = {
3333 phone : "" ,
3434 email : "" ,
3535 address : "" ,
36- status : "active" ,
3736} ;
3837
3938const mapSupplierToFormData = ( supplier ) => ( {
@@ -42,15 +41,13 @@ const mapSupplierToFormData = (supplier) => ({
4241 phone : supplier ?. phone || "" ,
4342 email : supplier ?. email || "" ,
4443 address : supplier ?. address || "" ,
45- status : supplier ?. status || "active" ,
4644} ) ;
4745
4846export function SuppliersScreen ( ) {
4947 // REVIEW FLOW: fetch danh sách nhà cung cấp -> lọc/tìm kiếm -> mở modal add/edit -> gọi API lưu/xoá -> refresh danh sách.
5048 const { user } = useAuth ( ) ;
5149 const canEditProducts = canManageProducts ( user ) ;
5250 const [ searchQuery , setSearchQuery ] = useState ( "" ) ;
53- const [ filterStatus , setFilterStatus ] = useState ( "all" ) ;
5451 const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
5552 const [ editingSupplier , setEditingSupplier ] = useState ( null ) ;
5653 const [ formData , setFormData ] = useState ( initialFormData ) ;
@@ -97,23 +94,17 @@ export function SuppliersScreen() {
9794 setTimeout ( ( ) => setToast ( "" ) , 3000 ) ;
9895 } ;
9996
100- // REVIEW FLOW (LIST): chuẩn hoá nguồn suppliers -> filter theo keyword + trạng thái -> render bảng kết quả.
97+ // REVIEW FLOW (LIST): chuẩn hoá nguồn suppliers -> filter theo keyword -> render bảng kết quả.
10198 const filteredSuppliers = useMemo ( ( ) => {
10299 return ( suppliers || [ ] ) . filter ( ( supplier ) => {
103- const matchesSearch =
100+ return (
104101 supplier . name ?. toLowerCase ( ) ?. includes ( searchQuery . toLowerCase ( ) ) ||
105102 supplier . contact_person ?. toLowerCase ( ) ?. includes ( searchQuery . toLowerCase ( ) ) ||
106103 supplier . phone ?. includes ( searchQuery ) ||
107- supplier . email ?. toLowerCase ( ) ?. includes ( searchQuery . toLowerCase ( ) ) ;
108-
109- const matchesStatus =
110- filterStatus === "all" ||
111- ( filterStatus === "active" && supplier . status === "active" ) ||
112- ( filterStatus === "inactive" && supplier . status === "inactive" ) ;
113-
114- return matchesSearch && matchesStatus ;
104+ supplier . email ?. toLowerCase ( ) ?. includes ( searchQuery . toLowerCase ( ) )
105+ ) ;
115106 } ) ;
116- } , [ suppliers , searchQuery , filterStatus ] ) ;
107+ } , [ suppliers , searchQuery ] ) ;
117108
118109 const handleAdd = ( ) => {
119110 if ( ! canEditProducts ) return ;
@@ -136,6 +127,7 @@ export function SuppliersScreen() {
136127 const payload = {
137128 ...formData ,
138129 contact_person : formData . contact_person ?. trim ( ) ,
130+ status : editingSupplier ?. status || "active" ,
139131 } ;
140132
141133 const result = editingSupplier
@@ -205,7 +197,7 @@ export function SuppliersScreen() {
205197 < h1 className = "text-3xl font-bold text-gray-900" > Quản lý nhà cung cấp</ h1 >
206198 < p className = "text-gray-600 mt-2" >
207199 Tổng số: < span className = "font-semibold text-blue-600" > { filteredSuppliers . length } </ span > nhà cung cấp
208- { searchQuery || filterStatus !== "all" ? < span className = "text-gray-400" > (đang lọc)</ span > : null }
200+ { searchQuery ? < span className = "text-gray-400" > (đang lọc)</ span > : null }
209201 </ p >
210202 </ div >
211203
@@ -245,11 +237,11 @@ export function SuppliersScreen() {
245237 < Card className = "border-0 shadow-xl bg-white/90 backdrop-blur-sm rounded-2xl overflow-hidden" >
246238 < div className = "bg-gradient-to-r from-blue-600 via-indigo-600 to-violet-600 px-6 py-3" >
247239 < h3 className = "text-white font-bold text-sm" > Tìm kiếm & bộ lọc </ h3 >
248- < p className = "text-blue-100 text-xs" > Lọc danh sách nhà cung cấp theo từ khóa và trạng thái </ p >
240+ < p className = "text-blue-100 text-xs" > Lọc danh sách nhà cung cấp theo từ khóa</ p >
249241 </ div >
250242 < CardContent className = "p-5" >
251- < div className = "grid grid-cols-1 md:grid-cols-3 gap-4" >
252- < div className = "relative md:col-span-2 " >
243+ < div className = "grid grid-cols-1 gap-4" >
244+ < div className = "relative" >
253245 < Search className = "absolute left-4 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400" />
254246 < Input
255247 placeholder = "Tìm theo tên, người liên hệ, SĐT hoặc email..."
@@ -258,16 +250,6 @@ export function SuppliersScreen() {
258250 onChange = { ( e ) => setSearchQuery ( e . target . value ) }
259251 />
260252 </ div >
261-
262- < select
263- className = "w-full h-11 px-4 text-base bg-gray-50 border border-gray-200 rounded-xl focus:ring-2 focus:ring-blue-500 focus:border-transparent appearance-none"
264- value = { filterStatus }
265- onChange = { ( e ) => setFilterStatus ( e . target . value ) }
266- >
267- < option value = "all" > Tất cả trạng thái</ option >
268- < option value = "active" > Đang hợp tác</ option >
269- < option value = "inactive" > Ngưng hợp tác</ option >
270- </ select >
271253 </ div >
272254 </ CardContent >
273255 </ Card >
@@ -292,7 +274,6 @@ export function SuppliersScreen() {
292274 < TableHead className = "font-bold text-gray-700" > Nhà cung cấp</ TableHead >
293275 < TableHead className = "font-bold text-gray-700" > Liên hệ</ TableHead >
294276 < TableHead className = "font-bold text-gray-700" > Địa chỉ</ TableHead >
295- < TableHead className = "font-bold text-gray-700" > Trạng thái</ TableHead >
296277 < TableHead className = "text-center font-bold text-gray-700" > Thao tác</ TableHead >
297278 </ TableRow >
298279 </ TableHeader >
@@ -339,14 +320,6 @@ export function SuppliersScreen() {
339320 </ div >
340321 </ TableCell >
341322
342- < TableCell >
343- { supplier . status === "active" ? (
344- < Badge className = "bg-green-50 text-green-700 border border-green-200" > Đang hợp tác</ Badge >
345- ) : (
346- < Badge className = "bg-red-50 text-red-700 border border-red-200" > Ngưng hợp tác</ Badge >
347- ) }
348- </ TableCell >
349-
350323 < TableCell className = "text-center" >
351324 { canEditProducts && (
352325 < div className = "flex justify-center gap-2" >
@@ -547,21 +520,6 @@ export function SuppliersScreen() {
547520 required
548521 />
549522 </ div >
550- < div >
551- < Label >
552- Trạng thái < span className = "text-red-600" > *</ span >
553- </ Label >
554- < select
555- name = "status"
556- className = "w-full mt-2 h-11 px-4 border border-gray-200 rounded-xl bg-gray-50"
557- value = { formData . status }
558- onChange = { handleChange }
559- required
560- >
561- < option value = "active" > Đang hợp tác</ option >
562- < option value = "inactive" > Ngưng hợp tác</ option >
563- </ select >
564- </ div >
565523 </ div >
566524 </ CardContent >
567525 </ Card >
0 commit comments