import React, { useState, useEffect } from 'react'; import { Card, Row, Col, Typography, Tag, Space, Spin, Button, Empty, message } from 'antd'; import { SearchOutlined } from '@ant-design/icons'; import { getAllSparepart } from '../../../../api/sparepart'; import { addSparepartToBrand, removeSparepartFromBrand } from '../../../../api/master-brand'; import CustomSparepartCard from './CustomSparepartCard'; const { Text, Title } = Typography; const SparepartCardSelect = ({ selectedSparepartIds = [], onSparepartChange, isLoading: externalLoading = false, isReadOnly = false, brandId = null }) => { const [spareparts, setSpareparts] = useState([]); const [loading, setLoading] = useState(false); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { loadSpareparts(); }, []); const loadSpareparts = async () => { setLoading(true); try { const params = new URLSearchParams(); params.set('limit', '1000'); // Get all spareparts const response = await getAllSparepart(params); if (response && (response.statusCode === 200 || response.data)) { const sparepartData = response.data?.data || response.data || []; setSpareparts(sparepartData); } else { // For demo purposes, use mock data if API fails setSpareparts([ { sparepart_id: 1, sparepart_name: 'Compressor Oil Filter', sparepart_description: 'Oil filter for compressor', sparepart_foto: null, sparepart_code: 'SP-001', sparepart_merk: 'Brand A', sparepart_model: 'Model X' }, { sparepart_id: 2, sparepart_name: 'Air Intake Filter', sparepart_description: 'Air intake filter', sparepart_foto: null, sparepart_code: 'SP-002', sparepart_merk: 'Brand B', sparepart_model: 'Model Y' }, { sparepart_id: 3, sparepart_name: 'Cooling Fan Motor', sparepart_description: 'Motor for cooling fan', sparepart_foto: null, sparepart_code: 'SP-003', sparepart_merk: 'Brand C', sparepart_model: 'Model Z' }, ]); } } catch (error) { // Default mock data setSpareparts([ { sparepart_id: 1, sparepart_name: 'Compressor Oil Filter', sparepart_description: 'Oil filter for compressor', sparepart_foto: null, sparepart_code: 'SP-001', sparepart_merk: 'Brand A', sparepart_model: 'Model X' }, { sparepart_id: 2, sparepart_name: 'Air Intake Filter', sparepart_description: 'Air intake filter', sparepart_foto: null, sparepart_code: 'SP-002', sparepart_merk: 'Brand B', sparepart_model: 'Model Y' }, { sparepart_id: 3, sparepart_name: 'Cooling Fan Motor', sparepart_description: 'Motor for cooling fan', sparepart_foto: null, sparepart_code: 'SP-003', sparepart_merk: 'Brand C', sparepart_model: 'Model Z' }, ]); } finally { setLoading(false); } }; const filteredSpareparts = spareparts.filter(sp => sp.sparepart_name.toLowerCase().includes(searchTerm.toLowerCase()) || sp.sparepart_code.toLowerCase().includes(searchTerm.toLowerCase()) || sp.sparepart_merk?.toLowerCase().includes(searchTerm.toLowerCase()) || sp.sparepart_model?.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleSparepartToggle = async (sparepartId) => { if (isReadOnly) return; const isCurrentlySelected = selectedSparepartIds.includes(sparepartId); // If brandId is provided, save immediately to database if (brandId) { try { setLoading(true); if (isCurrentlySelected) { // Remove from database await removeSparepartFromBrand(brandId, sparepartId); message.success('Sparepart removed from brand successfully'); } else { // Add to database await addSparepartToBrand(brandId, sparepartId); message.success('Sparepart added to brand successfully'); } // Update local state const newSelectedIds = isCurrentlySelected ? selectedSparepartIds.filter(id => id !== sparepartId) : [...selectedSparepartIds, sparepartId]; onSparepartChange(newSelectedIds); } catch (error) { message.error(error.message || 'Failed to update sparepart'); } finally { setLoading(false); } } else { // If no brandId (add mode), just update local state const newSelectedIds = isCurrentlySelected ? selectedSparepartIds.filter(id => id !== sparepartId) : [...selectedSparepartIds, sparepartId]; onSparepartChange(newSelectedIds); } }; const isSelected = (sparepartId) => selectedSparepartIds.includes(sparepartId); const combinedLoading = loading || externalLoading; return (