From 32e7989ec6a877e26906d90ba72b1b9cbf99e021 Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Sun, 30 Nov 2025 09:35:01 +0330 Subject: [PATCH] fix bug when don't exsist variant --- .../product/components/BaseInformation.tsx | 348 +++++++++--------- 1 file changed, 179 insertions(+), 169 deletions(-) diff --git a/src/app/product/components/BaseInformation.tsx b/src/app/product/components/BaseInformation.tsx index aae2a53..000b387 100644 --- a/src/app/product/components/BaseInformation.tsx +++ b/src/app/product/components/BaseInformation.tsx @@ -75,170 +75,56 @@ const BaseInformation: FC = ({ product, stats }) => { {/* نمایش variant ها */} - {product.variants.length > 0 && ( -
- {/* بررسی وجود فیلدهای خاص در variant ها */} - {(() => { - const hasMeterage = product.variants.some(v => v.meterage) - const hasColor = product.variants.some(v => v.color) - const hasSize = product.variants.some(v => v.size) - const hasThemeValue = product.variants.some(v => v.themeValue) + {(() => { + if (product.variants.length === 0) return null - // اگر هیچ فیلد خاصی وجود نداشت، نمایش عمومی - if (!hasMeterage && !hasColor && !hasSize && !hasThemeValue) { + const hasMeterage = product.variants.some(v => v.meterage) + const hasColor = product.variants.some(v => v.color) + const hasSize = product.variants.some(v => v.size) + const hasThemeValue = product.variants.some(v => v.themeValue) + const hasAnySpecificField = hasMeterage || hasColor || hasSize || hasThemeValue + + // اگر فقط یک variant وجود دارد و هیچ فیلد خاصی ندارد، نمایش نده + if (product.variants.length === 1 && !hasAnySpecificField) { + return null + } + + return ( +
+ {/* بررسی وجود فیلدهای خاص در variant ها */} + {(() => { + // اگر هیچ فیلد خاصی وجود نداشت، نمایش عمومی + if (!hasAnySpecificField) { + return ( +
+ {product.variants.map((variant, index) => { + const isSelected = variantId === variant._id + return ( + + ) + })} +
+ ) + } + + // نمایش فیلدهای خاص return ( -
- {product.variants.map((variant, index) => { - const isSelected = variantId === variant._id - return ( - - ) - })} -
- ) - } - - // نمایش فیلدهای خاص - return ( - <> - {/* متراژ */} - {hasMeterage && ( -
- {product.variants.map((variant) => { - if (variant.meterage) { - const isSelected = variantId === variant._id - return ( - - ) - } - return null - })} -
- )} - - {/* رنگ ها */} - {hasColor && ( -
- {product.variants.map((variant) => { - if (variant.color) { - const isSelected = variantId === variant._id - return ( - - ) - } - return null - })} -
- )} - - {/* سایزها */} - {hasSize && ( -
- {product.variants.map((variant) => { - if (variant.size) { - const isSelected = variantId === variant._id - return ( - - ) - } - return null - })} -
- )} - - {/* themeValue ها - نمایش داینامیک */} - {hasThemeValue && (() => { - // گروه‌بندی variant‌ها بر اساس theme - const themeGroups = new Map() - - product.variants.forEach(variant => { - if (variant.themeValue) { - const theme = variant.themeValue.theme - if (!themeGroups.has(theme)) { - themeGroups.set(theme, []) - } - themeGroups.get(theme)!.push(variant) - } - }) - - // تابع برای بررسی hex بودن value - const isHexColor = (value: string | number): boolean => { - if (typeof value !== 'string') return false - const hexPattern = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/ - return hexPattern.test(value) - } - - return Array.from(themeGroups.entries()).map(([theme, variants]) => ( -
- {variants.map((variant) => { - if (variant.themeValue) { + <> + {/* متراژ */} + {hasMeterage && ( +
+ {product.variants.map((variant) => { + if (variant.meterage) { const isSelected = variantId === variant._id - const value = typeof variant.themeValue.value === 'string' - ? variant.themeValue.value - : String(variant.themeValue.value) - const isHex = isHexColor(value) - - // اگر hex بود، دایره رنگی نمایش بده - if (isHex) { - return ( - - ) - } - - // اگر hex نبود، name را نمایش بده return ( ) } return null })}
- )) - })()} - - ) - })()} -
- )} + )} + + {/* رنگ ها */} + {hasColor && ( +
+ {product.variants.map((variant) => { + if (variant.color) { + const isSelected = variantId === variant._id + return ( + + ) + } + return null + })} +
+ )} + + {/* سایزها */} + {hasSize && ( +
+ {product.variants.map((variant) => { + if (variant.size) { + const isSelected = variantId === variant._id + return ( + + ) + } + return null + })} +
+ )} + + {/* themeValue ها - نمایش داینامیک */} + {hasThemeValue && (() => { + // گروه‌بندی variant‌ها بر اساس theme + const themeGroups = new Map() + + product.variants.forEach(variant => { + if (variant.themeValue) { + const theme = variant.themeValue.theme + if (!themeGroups.has(theme)) { + themeGroups.set(theme, []) + } + themeGroups.get(theme)!.push(variant) + } + }) + + // تابع برای بررسی hex بودن value + const isHexColor = (value: string | number): boolean => { + if (typeof value !== 'string') return false + const hexPattern = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/ + return hexPattern.test(value) + } + + return Array.from(themeGroups.entries()).map(([theme, variants]) => ( +
+ {variants.map((variant) => { + if (variant.themeValue) { + const isSelected = variantId === variant._id + const value = typeof variant.themeValue.value === 'string' + ? variant.themeValue.value + : String(variant.themeValue.value) + const isHex = isHexColor(value) + + // اگر hex بود، دایره رنگی نمایش بده + if (isHex) { + return ( + + ) + } + + // اگر hex نبود، name را نمایش بده + return ( + + ) + } + return null + })} +
+ )) + })()} + + ) + })()} +
+ ) + })()} { product.specifications.length > 0 ?