import React, { useState, useEffect } from 'react'; import { SettingsLayout } from '@/routes/Settings/components/SettingsLayout'; import { SettingsCard } from '@/routes/Settings/components/SettingsCard'; import { SettingsSection } from '@/routes/Settings/components/SettingsSection'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { toast } from 'sonner'; import { api } from '@/lib/api'; export default function AppearanceProduct() { const [loading, setLoading] = useState(true); const [imagePosition, setImagePosition] = useState('left'); const [galleryStyle, setGalleryStyle] = useState('thumbnails'); const [stickyAddToCart, setStickyAddToCart] = useState(false); const [elements, setElements] = useState({ breadcrumbs: true, related_products: true, reviews: true, share_buttons: false, product_meta: true, }); const [reviewSettings, setReviewSettings] = useState({ placement: 'product_page', hide_if_empty: true, }); const [relatedProductsTitle, setRelatedProductsTitle] = useState('You May Also Like'); useEffect(() => { const loadSettings = async () => { try { const response = await api.get('/appearance/settings'); const product = response.data?.pages?.product; if (product) { if (product.layout) { if (product.layout.image_position) setImagePosition(product.layout.image_position); if (product.layout.gallery_style) setGalleryStyle(product.layout.gallery_style); if (product.layout.sticky_add_to_cart !== undefined) setStickyAddToCart(product.layout.sticky_add_to_cart); } if (product.elements) { setElements({ breadcrumbs: product.elements.breadcrumbs ?? true, related_products: product.elements.related_products ?? true, reviews: product.elements.reviews ?? true, share_buttons: product.elements.share_buttons ?? false, product_meta: product.elements.product_meta ?? true, }); } if (product.related_products) { setRelatedProductsTitle(product.related_products.title ?? 'You May Also Like'); } if (product.reviews) { setReviewSettings({ placement: product.reviews.placement ?? 'product_page', hide_if_empty: product.reviews.hide_if_empty ?? true, }); } } } catch (error) { console.error('Failed to load settings:', error); } finally { setLoading(false); } }; loadSettings(); }, []); const toggleElement = (key: keyof typeof elements) => { setElements({ ...elements, [key]: !elements[key] }); }; const handleSave = async () => { try { await api.post('/appearance/pages/product', { layout: { image_position: imagePosition, gallery_style: galleryStyle, sticky_add_to_cart: stickyAddToCart }, elements, related_products: { title: relatedProductsTitle, }, reviews: reviewSettings, }); toast.success('Product page settings saved successfully'); } catch (error) { console.error('Save error:', error); toast.error('Failed to save settings'); } }; return ( {/* Layout */}

Keep add to cart button visible when scrolling

{/* Elements */}
toggleElement('breadcrumbs')} />
toggleElement('related_products')} />
toggleElement('reviews')} />
toggleElement('share_buttons')} />

SKU, categories, tags

toggleElement('product_meta')} />
{/* Related Products Settings */} setRelatedProductsTitle(e.target.value)} className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50" placeholder="You May Also Like" />

This heading appears above the related products grid

{/* Review Settings */}

{reviewSettings.placement === 'product_page' ? 'Reviews appear on product page. Users can submit reviews directly on the product.' : 'Reviews only appear in order details after purchase. Ensures verified purchases only.'}

{reviewSettings.placement === 'product_page' && (

Only show reviews section when product has at least one review

setReviewSettings({ ...reviewSettings, hide_if_empty: checked })} />
)}
); }