fix product issue
This commit is contained in:
parent
399672bb57
commit
bc7f850337
@ -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
|
||||||
|
if (newChecked.size < selectedProducts.length) {
|
||||||
newChecked.add(productValue);
|
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>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user