fix: resolve website typescript errors from category i18n

This commit is contained in:
Your Name committed 2026-06-14 00:10:19 -04:00
1 parent 93012a3bdf
commit 363be70e11
8 files changed
+25 -25

No files matched your search

@@ -30,7 +30,7 @@ export default function AddToCartSection({ product }: Props) {
price: currentVariant.price || product.price || 0,
productName: product.scent.name,
variantSize: currentVariant.size,
productImage: product.images?.[0]?.url || product.category.imageUrl || getCategoryImage(product.category.name),
productImage: product.images?.[0]?.url || product.category.imageUrl || getCategoryImage(typeof product.category.name === 'string' ? product.category.name : (product.category.name as any)?.th || (product.category.name as any)?.en || ''),
})
toggleCart(true)
}
@@ -41,7 +41,7 @@ export default function AddToCartSection({ product }: Props) {
<div className="space-y-8">
<div className="space-y-2">
<p className="text-cyan-glow uppercase tracking-[0.3em] text-xs font-semibold opacity-80">
{product.category.name}
{typeof product.category.name === 'string' ? product.category.name : (product.category.name as any)?.th || (product.category.name as any)?.en || ''}
</p>
<h1 className="text-5xl font-bold leading-tight">{product.scent.name}</h1>
<p className="text-slate-400 text-sm uppercase tracking-widest">Premium Collection</p>
@@ -108,7 +108,7 @@ export default function AddToCartSection({ product }: Props) {
<div>
<span className="text-xs uppercase tracking-widest block mb-1">Category</span>
<Link href={`/category/${product.category.id}`} className="text-white font-medium hover:text-cyan-glow transition-colors">
{product.category.name}
{typeof product.category.name === 'string' ? product.category.name : (product.category.name as any)?.th || (product.category.name as any)?.en || ''}
</Link>
</div>
</div>
+1 -1
View File
@@ -45,7 +45,7 @@ export default function Footer({ categories = [] }: FooterProps) {
<div className="flex flex-col space-y-2 text-sm text-slate-400">
{categories.map((c) => (
<Link key={c.id} href={`/category/${c.id}`} className="hover:text-white transition-colors">
{c.name}
{typeof c.name === 'string' ? c.name : (c.name as any)?.th || (c.name as any)?.en || ''}
</Link>
))}
</div>
+3 -3
View File
@@ -101,7 +101,7 @@ export default function Navbar({ categories = [] }: NavbarProps) {
href={`/category/${cat.id}`}
className="flex items-center justify-between px-4 py-2.5 text-xs uppercase tracking-widest rounded-lg hover:bg-white/10 hover:text-cyan-glow transition-colors"
>
{cat.name}
{typeof cat.name === 'string' ? cat.name : (cat.name as any)?.th || (cat.name as any)?.en || ''}
<svg className="w-3 h-3 opacity-30" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
</svg>
@@ -281,7 +281,7 @@ export default function Navbar({ categories = [] }: NavbarProps) {
onClick={() => setMobileOpen(false)}
className="flex items-center justify-between px-4 py-2.5 rounded-xl text-sm text-slate-400 hover:text-white hover:bg-white/5 transition-all"
>
{cat.name}
{typeof cat.name === 'string' ? cat.name : (cat.name as any)?.th || (cat.name as any)?.en || ''}
<svg className="w-3 h-3 opacity-30" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" />
</svg>
@@ -350,7 +350,7 @@ export default function Navbar({ categories = [] }: NavbarProps) {
<p className="text-xs text-slate-500 uppercase tracking-widest mb-3">Quick Links</p>
<div className="flex flex-wrap gap-2">
{[
...categories.map(c => ({ label: c.name, to: `/category/${c.id}` })),
...categories.map(c => ({ label: typeof c.name === 'string' ? c.name : (c.name as any)?.th || (c.name as any)?.en || '', to: `/category/${c.id}` })),
{ label: '✨ Scent Guide', to: '/scent-guide' },
{ label: 'All Products', to: '/shop' },
].map(item => (
+3 -3
View File
@@ -11,13 +11,13 @@ export default function ProductCard({ product }: ProductCardProps) {
<div className="glass glass-hover rounded-2xl overflow-hidden flex flex-col group p-1.5 md:p-2">
<div className="h-40 md:h-64 overflow-hidden rounded-xl relative">
<img
src={product.images?.[0]?.url || product.category.imageUrl || getCategoryImage(product.category.name)}
src={product.images?.[0]?.url || product.category.imageUrl || getCategoryImage(typeof product.category.name === 'string' ? product.category.name : (product.category.name as any)?.th || (product.category.name as any)?.en || '')}
className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-700"
alt={product.scent.name}
/>
{/* Category badge */}
<div className="absolute top-4 left-4 glass px-3 py-1 rounded-full text-[10px] font-bold uppercase tracking-widest text-cyan-glow">
{product.category.name}
{typeof product.category.name === 'string' ? product.category.name : (product.category.name as any)?.th || (product.category.name as any)?.en || ''}
</div>
{/* Available badge */}
<div className="hidden md:block absolute top-4 right-4 glass px-3 py-1 rounded-full text-[10px] font-bold uppercase tracking-widest">
@@ -32,7 +32,7 @@ export default function ProductCard({ product }: ProductCardProps) {
{product.scent.name}
</h3>
<p className="text-[10px] md:text-xs text-slate-400 mt-0.5 md:mt-1 uppercase tracking-widest line-clamp-1">
{product.category.name}
{typeof product.category.name === 'string' ? product.category.name : (product.category.name as any)?.th || (product.category.name as any)?.en || ''}
</p>
</div>
<span className="text-cyan-glow font-bold text-xs md:text-lg">