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
const handleCheckboxToggle = (productValue) => {
setCheckedProducts(prev => {
const newChecked = new Set(prev);
const product = selectedProducts.find(p =>
(p.value && (p.value === productValue || p.value === productValue || p.value === productValue)) ||
(p.id && (p.id === productValue || p.id === productValue || p.id === productValue)) ||
(p.product_id && (p.product_id === productValue || p.product_id === productValue || p.product_id === productValue))
(p.value && p.value === productValue) ||
(p.id && p.id === productValue) ||
(p.product_id && p.product_id === productValue)
);
if (newChecked.has(productValue)) {
// Unchecking: move product from selected to available
newChecked.delete(productValue);
@ -336,12 +339,13 @@ const EditCompanyProfile = () => {
// Add product back to available products
setAvailableProducts(prev => {
const alreadyExists = prev.some(p =>
(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) ||
(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) ||
(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value))
(p.value && p.value === product.value) ||
(p.id && p.id === product.id) ||
(p.product_id && p.product_id === product.product_id)
);
if (!alreadyExists) {
('ADDING TO AVAILABLE - new length will be:', prev.length + 1);
return [...prev, product];
}
return prev;
@ -349,25 +353,25 @@ const EditCompanyProfile = () => {
}
} else {
// Re-checking: remove newly added products and restore original
newChecked.add(productValue);
if (newChecked.size < selectedProducts.length) {
newChecked.add(productValue);
}
// Remove from available products
setAvailableProducts(prev =>
prev.filter(p =>
!(p.value && (p.value === productValue || p.value === productValue || p.value === productValue)) &&
!(p.id && (p.id === productValue || p.id === productValue || p.id === productValue)) &&
!(p.product_id && (p.product_id === productValue || p.product_id === productValue || p.product_id === productValue))
!(p.value && p.value === productValue) &&
!(p.id && p.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 originalProductIds = originalProducts.map(p => p.value || p.id || p.product_id);
const allOriginalProductsChecked = originalProductIds.every(id => newChecked.has(id));
// If all original products are checked, remove all newly added products
if (allOriginalProductsChecked && newlyAddedProductIds.size > 0) {
// Find all newly added products
const newlyAddedProducts = selectedProducts.filter(p =>
!p.isExisting && newlyAddedProductIds.has(p.value || p.id || p.product_id)
);
@ -387,8 +391,8 @@ const EditCompanyProfile = () => {
const productsToAdd = newlyAddedProducts.filter(np =>
!prev.some(p =>
(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.product_id && (p.product_id === np.product_id || p.product_id === np.id || p.product_id === np.value))
(p.id && (p.id === np.id || p.id === np.value || np.id === np.product_id)) ||
(p.product_id && (p.product_id === np.product_id || np.product_id === np.id || np.product_id === np.value))
)
);
return [...prev, ...productsToAdd];
@ -405,6 +409,7 @@ const EditCompanyProfile = () => {
return newChecked;
});
};
// Handle adding a product
@ -412,9 +417,9 @@ const EditCompanyProfile = () => {
setSelectedProducts(prev => {
// Check if product is already selected
const isAlreadySelected = prev.some(p =>
(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) ||
(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) ||
(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value))
(p.value && p.value === product.value) ||
(p.id && p.id === product.id) ||
(p.product_id && p.product_id === product.product_id)
);
if (isAlreadySelected) {
@ -436,9 +441,9 @@ const EditCompanyProfile = () => {
// Remove from available products
setAvailableProducts(prev =>
prev.filter(p =>
!(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) &&
!(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) &&
!(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value))
!(p.value && p.value === product.value) &&
!(p.id && p.id === product.id) &&
!(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])
);
// Set newly added product as checked by default
setCheckedProducts(prev =>
new Set([...prev, product.value || product.id || product.product_id])
);
// Only set newly added product as checked if it's not already in checkedProducts
// This prevents overriding manual unchecking
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
@ -460,9 +470,9 @@ const EditCompanyProfile = () => {
// Remove from selected products
setSelectedProducts(prev =>
prev.filter(p =>
!(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) &&
!(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) &&
!(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value))
!(p.value && p.value === product.value) &&
!(p.id && p.id === product.id) &&
!(p.product_id && p.product_id === product.product_id)
)
);
@ -484,9 +494,9 @@ const EditCompanyProfile = () => {
setAvailableProducts(prev => {
// Check if already in available products
const alreadyExists = prev.some(p =>
(p.value && (p.value === product.value || p.value === product.id || p.value === product.product_id)) ||
(p.id && (p.id === product.id || p.id === product.value || p.id === product.product_id)) ||
(p.product_id && (p.product_id === product.product_id || p.product_id === product.id || p.product_id === product.value))
(p.value && p.value === product.value) ||
(p.id && p.id === product.id) ||
(p.product_id && p.product_id === product.product_id)
);
if (!alreadyExists) {
@ -500,7 +510,7 @@ const EditCompanyProfile = () => {
useEffect(() => {
setVisibleProductCount(14);
}, [availableProducts.length, productSearchTerm]);
// Handle scroll event for infinite loading
const handleScroll = useCallback(() => {
if (isLoadingMore || visibleProductCount >= availableProducts.length) return;
@ -1090,7 +1100,26 @@ const EditCompanyProfile = () => {
</div>
<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 */}
{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-[#F9FAFB] px-4 py-3 border-b border-[#E5E7EB]">
<h5 className="text-sm font-medium text-[#111827]">Available Products</h5>