fix product issue

This commit is contained in:
Malini 2026-02-20 10:15:06 +05:30
parent 399672bb57
commit bc7f850337

View File

@ -320,14 +320,17 @@ const EditCompanyProfile = () => {
// Handle checkbox toggle for selected products // Handle checkbox toggle for selected products
const handleCheckboxToggle = (productValue) => { const handleCheckboxToggle = (productValue) => {
setCheckedProducts(prev => { setCheckedProducts(prev => {
const newChecked = new Set(prev); const newChecked = new Set(prev);
const product = selectedProducts.find(p => const product = selectedProducts.find(p =>
(p.value && (p.value === productValue || p.value === productValue || p.value === productValue)) || (p.value && p.value === productValue) ||
(p.id && (p.id === productValue || p.id === productValue || p.id === productValue)) || (p.id && p.id === productValue) ||
(p.product_id && (p.product_id === productValue || p.product_id === productValue || p.product_id === productValue)) (p.product_id && p.product_id === productValue)
); );
if (newChecked.has(productValue)) { if (newChecked.has(productValue)) {
// Unchecking: move product from selected to available // Unchecking: move product from selected to available
newChecked.delete(productValue); newChecked.delete(productValue);
@ -336,12 +339,13 @@ const EditCompanyProfile = () => {
// Add product back to available products // Add product back to available products
setAvailableProducts(prev => { setAvailableProducts(prev => {
const alreadyExists = prev.some(p => const alreadyExists = prev.some(p =>
(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) || (p.value && p.value === product.value) ||
(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) || (p.id && p.id === product.id) ||
(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value)) (p.product_id && p.product_id === product.product_id)
); );
if (!alreadyExists) { if (!alreadyExists) {
('ADDING TO AVAILABLE - new length will be:', prev.length + 1);
return [...prev, product]; return [...prev, product];
} }
return prev; return prev;
@ -349,25 +353,25 @@ const EditCompanyProfile = () => {
} }
} else { } else {
// Re-checking: remove newly added products and restore original // Re-checking: remove newly added products and restore original
newChecked.add(productValue); if (newChecked.size < selectedProducts.length) {
newChecked.add(productValue);
}
// Remove from available products // Remove from available products
setAvailableProducts(prev => setAvailableProducts(prev =>
prev.filter(p => prev.filter(p =>
!(p.value && (p.value === productValue || p.value === productValue || p.value === productValue)) && !(p.value && p.value === productValue) &&
!(p.id && (p.id === productValue || p.id === productValue || p.id === productValue)) && !(p.id && p.id === productValue) &&
!(p.product_id && (p.product_id === productValue || p.product_id === productValue || p.product_id === productValue)) !(p.product_id && p.product_id === productValue)
) )
); );
// Check if all original products are now checked
const originalProducts = selectedProducts.filter(p => p.isExisting); const originalProducts = selectedProducts.filter(p => p.isExisting);
const originalProductIds = originalProducts.map(p => p.value || p.id || p.product_id); const originalProductIds = originalProducts.map(p => p.value || p.id || p.product_id);
const allOriginalProductsChecked = originalProductIds.every(id => newChecked.has(id)); const allOriginalProductsChecked = originalProductIds.every(id => newChecked.has(id));
// If all original products are checked, remove all newly added products // If all original products are checked, remove all newly added products
if (allOriginalProductsChecked && newlyAddedProductIds.size > 0) { if (allOriginalProductsChecked && newlyAddedProductIds.size > 0) {
// Find all newly added products
const newlyAddedProducts = selectedProducts.filter(p => const newlyAddedProducts = selectedProducts.filter(p =>
!p.isExisting && newlyAddedProductIds.has(p.value || p.id || p.product_id) !p.isExisting && newlyAddedProductIds.has(p.value || p.id || p.product_id)
); );
@ -387,8 +391,8 @@ const EditCompanyProfile = () => {
const productsToAdd = newlyAddedProducts.filter(np => const productsToAdd = newlyAddedProducts.filter(np =>
!prev.some(p => !prev.some(p =>
(p.value && (p.value === np.value || p.value === np.id || p.value === np.product_id)) || (p.value && (p.value === np.value || p.value === np.id || p.value === np.product_id)) ||
(p.id && (p.id === np.id || p.id === np.value || p.id === np.product_id)) || (p.id && (p.id === np.id || p.id === np.value || np.id === np.product_id)) ||
(p.product_id && (p.product_id === np.product_id || p.product_id === np.id || p.product_id === np.value)) (p.product_id && (p.product_id === np.product_id || np.product_id === np.id || np.product_id === np.value))
) )
); );
return [...prev, ...productsToAdd]; return [...prev, ...productsToAdd];
@ -405,6 +409,7 @@ const EditCompanyProfile = () => {
return newChecked; return newChecked;
}); });
}; };
// Handle adding a product // Handle adding a product
@ -412,9 +417,9 @@ const EditCompanyProfile = () => {
setSelectedProducts(prev => { setSelectedProducts(prev => {
// Check if product is already selected // Check if product is already selected
const isAlreadySelected = prev.some(p => const isAlreadySelected = prev.some(p =>
(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) || (p.value && p.value === product.value) ||
(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) || (p.id && p.id === product.id) ||
(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value)) (p.product_id && p.product_id === product.product_id)
); );
if (isAlreadySelected) { if (isAlreadySelected) {
@ -436,9 +441,9 @@ const EditCompanyProfile = () => {
// Remove from available products // Remove from available products
setAvailableProducts(prev => setAvailableProducts(prev =>
prev.filter(p => prev.filter(p =>
!(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) && !(p.value && p.value === product.value) &&
!(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) && !(p.id && p.id === product.id) &&
!(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value)) !(p.product_id && p.product_id === product.product_id)
) )
); );
@ -447,10 +452,15 @@ const EditCompanyProfile = () => {
new Set([...prev, product.value || product.id || product.product_id]) new Set([...prev, product.value || product.id || product.product_id])
); );
// Set newly added product as checked by default // Only set newly added product as checked if it's not already in checkedProducts
setCheckedProducts(prev => // This prevents overriding manual unchecking
new Set([...prev, product.value || product.id || product.product_id]) const productId = product.value || product.id || product.product_id;
); setCheckedProducts(prev => {
if (prev.has(productId)) {
return prev; // Already checked, don't override
}
return new Set([...prev, productId]);
});
}; };
// Remove product handler // Remove product handler
@ -460,9 +470,9 @@ const EditCompanyProfile = () => {
// Remove from selected products // Remove from selected products
setSelectedProducts(prev => setSelectedProducts(prev =>
prev.filter(p => prev.filter(p =>
!(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) && !(p.value && p.value === product.value) &&
!(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) && !(p.id && p.id === product.id) &&
!(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value)) !(p.product_id && p.product_id === product.product_id)
) )
); );
@ -484,9 +494,9 @@ const EditCompanyProfile = () => {
setAvailableProducts(prev => { setAvailableProducts(prev => {
// Check if already in available products // Check if already in available products
const alreadyExists = prev.some(p => const alreadyExists = prev.some(p =>
(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) || (p.value && p.value === product.value) ||
(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) || (p.id && p.id === product.id) ||
(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value)) (p.product_id && p.product_id === product.product_id)
); );
if (!alreadyExists) { if (!alreadyExists) {
@ -1090,7 +1100,26 @@ const EditCompanyProfile = () => {
</div> </div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6"> <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
{/* Available Products Panel - Only show if there are available products and not all selected products are checked */} {/* Available Products Panel - Only show if there are available products and not all selected products are checked */}
{availableProducts.length > 0 && selectedProducts.length > 0 && checkedProducts.size < selectedProducts.length && ( {(() => {
// More robust condition that handles state inconsistencies
const hasAvailableProducts = availableProducts.length > 0;
const hasSelectedProducts = selectedProducts.length > 0;
// Count how many selected products are actually checked
let actuallyCheckedCount = 0;
for (const product of selectedProducts) {
const productId = product.value || product.id || product.product_id;
if (checkedProducts.has(productId)) {
actuallyCheckedCount++;
}
}
const hasUncheckedProducts = actuallyCheckedCount < selectedProducts.length;
const shouldShow = hasAvailableProducts && hasSelectedProducts && hasUncheckedProducts;
return shouldShow;
})() && (
<div className="bg-white rounded-lg border border-[#E5E7EB] overflow-hidden"> <div className="bg-white rounded-lg border border-[#E5E7EB] overflow-hidden">
<div className="bg-[#F9FAFB] px-4 py-3 border-b border-[#E5E7EB]"> <div className="bg-[#F9FAFB] px-4 py-3 border-b border-[#E5E7EB]">
<h5 className="text-sm font-medium text-[#111827]">Available Products</h5> <h5 className="text-sm font-medium text-[#111827]">Available Products</h5>