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 { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { toast } from 'sonner'; import { api } from '@/lib/api'; export default function AppearanceShop() { const [loading, setLoading] = useState(true); const [gridColumns, setGridColumns] = useState({ mobile: '2', tablet: '3', desktop: '4' }); const [gridStyle, setGridStyle] = useState('standard'); const [cardStyle, setCardStyle] = useState('card'); const [aspectRatio, setAspectRatio] = useState('square'); const [filterLayout, setFilterLayout] = useState('basic'); const [elements, setElements] = useState({ category_filter: true, search_bar: true, sort_dropdown: true, sale_badges: true, }); const [saleBadgeColor, setSaleBadgeColor] = useState('#ef4444'); const [cardTextAlign, setCardTextAlign] = useState('left'); const [addToCartPosition, setAddToCartPosition] = useState('below'); const [addToCartStyle, setAddToCartStyle] = useState('solid'); const [showCartIcon, setShowCartIcon] = useState(true); useEffect(() => { const loadSettings = async () => { try { const response = await api.get('/appearance/settings'); const shop = response.data?.pages?.shop; if (shop) { setGridColumns(shop.layout?.grid_columns || { mobile: '2', tablet: '3', desktop: '4' }); setGridStyle(shop.layout?.grid_style || 'standard'); setCardStyle(shop.layout?.card_style || 'card'); setAspectRatio(shop.layout?.aspect_ratio || 'square'); setCardTextAlign(shop.layout?.card_text_align || 'left'); setFilterLayout(shop.layout?.filter_layout || 'basic'); if (shop.elements) { setElements(shop.elements); } setSaleBadgeColor(shop.sale_badge?.color || '#ef4444'); setAddToCartPosition(shop.add_to_cart?.position || 'below'); setAddToCartStyle(shop.add_to_cart?.style || 'solid'); setShowCartIcon(shop.add_to_cart?.show_icon ?? 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/shop', { layout: { grid_columns: gridColumns, grid_style: gridStyle, card_style: cardStyle, aspect_ratio: aspectRatio, card_text_align: cardTextAlign, filter_layout: filterLayout }, elements: { category_filter: elements.category_filter, search_bar: elements.search_bar, sort_dropdown: elements.sort_dropdown, sale_badges: elements.sale_badges, }, sale_badge: { color: saleBadgeColor }, add_to_cart: { position: addToCartPosition, style: addToCartStyle, show_icon: showCartIcon }, }); toast.success('Shop page settings saved successfully'); } catch (error) { console.error('Save error:', error); toast.error('Failed to save settings'); } }; return ( {/* Layout */}

<768px

768-1024px

>1024px

setSaleBadgeColor(e.target.value)} className="h-10 w-full rounded-md border border-input cursor-pointer" />
{/* Elements */}
toggleElement('category_filter')} />
toggleElement('search_bar')} />
toggleElement('sort_dropdown')} />
toggleElement('sale_badges')} />
{/* Add to Cart Button */}
); }