From 5e799eddf93e6ce68a06ab3720fa07d34ac6e79a Mon Sep 17 00:00:00 2001 From: Alireza Hassani Date: Wed, 26 Aug 2026 00:21:48 +0330 Subject: [PATCH] Localize order modals, add dual logos, and improve admin order tools. Farsi business order/variation UI, light/dark logo upload on business profile, payment order steps, variation editing, super-admin site links, and checkout/auth fixes. Co-authored-by: Cursor --- .../src/components/AddVariationModal.tsx | 39 ++++-- .../src/components/OrderItemsModal.tsx | 45 ++++--- .../src/components/OrderStepModal.module.css | 6 +- .../src/components/OrderStepModal.tsx | 49 +++++-- .../src/components/OrderTransactionsModal.tsx | 123 ++++++++++-------- .../src/components/VariationsModal.module.css | 12 +- .../src/components/VariationsModal.tsx | 61 +++++++-- apps/business/src/i18n/messages.ts | 106 +++++++++++++++ .../src/pages/BusinessProfilePage.module.css | 20 +++ .../src/pages/BusinessProfilePage.tsx | 34 ++++- .../src/pages/SettingsPage.module.css | 11 ++ apps/business/src/pages/SettingsPage.tsx | 9 ++ .../src/services/businessProfileService.ts | 9 ++ apps/business/src/services/settingsService.ts | 12 ++ apps/business/src/utils/stepColors.ts | 2 + .../checkout/CheckoutBackButton.module.css | 4 - apps/customer/src/context/AuthContext.tsx | 6 +- apps/customer/src/context/CheckoutContext.tsx | 98 +++++++++++++- apps/customer/src/i18n/messages.ts | 8 +- apps/customer/src/pages/LoginPage.tsx | 30 +++-- .../pages/checkout/CheckoutPaymentStep.tsx | 3 +- .../pages/checkout/CheckoutSteps.module.css | 6 +- apps/customer/src/services/authService.ts | 4 +- apps/customer/src/utils/orderSteps.ts | 12 ++ .../BusinessActionsOverflowMenu.tsx | 95 ++++++++++++-- .../components/DomainLinksOverflowMenu.tsx | 18 +-- apps/super-admin/src/pages/BusinessesPage.tsx | 1 + .../src/pages/WebsitesPage.module.css | 66 ++++++++++ apps/super-admin/src/pages/WebsitesPage.tsx | 45 +++++-- packages/dashboard-core/src/types/auth.ts | 14 +- 30 files changed, 779 insertions(+), 169 deletions(-) diff --git a/apps/business/src/components/AddVariationModal.tsx b/apps/business/src/components/AddVariationModal.tsx index 8ea3d26..3b4c75d 100644 --- a/apps/business/src/components/AddVariationModal.tsx +++ b/apps/business/src/components/AddVariationModal.tsx @@ -13,14 +13,22 @@ interface AddVariationModalProps { open: boolean onClose: () => void onSubmit: (variation: Omit) => void + /** When set, form opens in edit mode with values pre-filled. */ + initial?: Variation | null } const ANIMATION_MS = 220 -export function AddVariationModal({ open, onClose, onSubmit }: AddVariationModalProps) { +function seedCustomValues(values: string[]) { + const trimmed = values.map((value) => value.trim()).filter(Boolean) + return trimmed.length ? trimmed : [''] +} + +export function AddVariationModal({ open, onClose, onSubmit, initial = null }: AddVariationModalProps) { const t = useT() const { locale } = useLocale() const isFa = locale === 'fa' + const isEdit = Boolean(initial) const [mounted, setMounted] = useState(open) const [closing, setClosing] = useState(false) const [type, setType] = useState('color') @@ -41,11 +49,21 @@ export function AddVariationModal({ open, onClose, onSubmit }: AddVariationModal if (open) { setMounted(true) setClosing(false) - setType('color') - setCustomName('') - setSelectedColors([]) - setSelectedSizes([]) - setCustomValues(['']) + if (initial) { + setType(initial.type) + setCustomName(initial.type === 'custom' ? initial.name : '') + setSelectedColors(initial.type === 'color' ? [...initial.values] : []) + setSelectedSizes(initial.type === 'size' ? [...initial.values] : []) + setCustomValues( + initial.type === 'custom' ? seedCustomValues(initial.values) : [''], + ) + } else { + setType('color') + setCustomName('') + setSelectedColors([]) + setSelectedSizes([]) + setCustomValues(['']) + } } else if (mounted) { setClosing(true) const timer = setTimeout(() => { @@ -54,7 +72,7 @@ export function AddVariationModal({ open, onClose, onSubmit }: AddVariationModal }, ANIMATION_MS) return () => clearTimeout(timer) } - }, [open, mounted]) + }, [open, mounted, initial]) useEffect(() => { if (!mounted || closing) return @@ -128,7 +146,7 @@ export function AddVariationModal({ open, onClose, onSubmit }: AddVariationModal onClick={onClose} >
e.stopPropagation()} role="dialog" aria-modal="true" @@ -138,7 +156,7 @@ export function AddVariationModal({ open, onClose, onSubmit }: AddVariationModal >

- {t('categories.variations.addTitle')} + {isEdit ? t('categories.variations.editTitle') : t('categories.variations.addTitle')}