fix product issue
This commit is contained in:
parent
399672bb57
commit
bc7f850337
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user