mirror of
https://git.meshkee.com/Meshkee/dashboards.git
synced 2026-08-12 06:40:57 +04:30
Add FA/EN locale, home activity charts, and theme-aware polish.
Ship shared LocaleProvider, business/customer i18n, branding defaultLocale, curated home tiles with dual 30-day charts, and chart/page aura tokens; refresh PROJECT_CONTEXT. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
f5b2193ba1
commit
66004a0fba
@@ -34,6 +34,7 @@ function normalizeSteps(steps: OrderProcessStep[]) {
|
||||
return steps.map((step, index) => ({
|
||||
id: step.id,
|
||||
label: step.label.trim(),
|
||||
labelFa: (step.labelFa ?? '').trim(),
|
||||
color: normalizeStepColor(step.color, defaultStepColorForId(step.id, index)),
|
||||
}))
|
||||
}
|
||||
@@ -43,7 +44,10 @@ function stepsAreEqual(a: OrderProcessStep[], b: OrderProcessStep[]) {
|
||||
return a.every((step, index) => {
|
||||
const other = b[index]
|
||||
return (
|
||||
step.id === other.id && step.label === other.label && step.color === other.color
|
||||
step.id === other.id &&
|
||||
step.label === other.label &&
|
||||
step.labelFa === other.labelFa &&
|
||||
step.color === other.color
|
||||
)
|
||||
})
|
||||
}
|
||||
@@ -109,6 +113,12 @@ export function StoreSettingsPage() {
|
||||
)
|
||||
}
|
||||
|
||||
function updateStepLabelFa(id: string, labelFa: string) {
|
||||
setDraftSteps((current) =>
|
||||
current.map((step) => (step.id === id ? { ...step, labelFa } : step)),
|
||||
)
|
||||
}
|
||||
|
||||
function updateStepColor(id: string, color: StepColorPreset) {
|
||||
setDraftSteps((current) =>
|
||||
current.map((step) => (step.id === id ? { ...step, color } : step)),
|
||||
@@ -123,6 +133,7 @@ export function StoreSettingsPage() {
|
||||
{
|
||||
id,
|
||||
label: '',
|
||||
labelFa: '',
|
||||
color: defaultStepColorForId(id, current.length),
|
||||
},
|
||||
]
|
||||
@@ -150,13 +161,13 @@ export function StoreSettingsPage() {
|
||||
|
||||
async function handleSaveSteps() {
|
||||
const normalized = normalizeSteps(draftSteps)
|
||||
const hasEmptyLabel = normalized.some((step) => !step.label)
|
||||
const hasEmptyLabel = normalized.some((step) => !step.label || !step.labelFa)
|
||||
if (!normalized.length) {
|
||||
setError('Add at least one order process step.')
|
||||
return
|
||||
}
|
||||
if (hasEmptyLabel) {
|
||||
setError('Every order step needs a label.')
|
||||
setError('Every order step needs an English and Farsi label.')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -186,7 +197,9 @@ export function StoreSettingsPage() {
|
||||
const canSaveSteps =
|
||||
stepsDirty &&
|
||||
draftSteps.length > 0 &&
|
||||
draftSteps.every((step) => step.label.trim().length > 0)
|
||||
draftSteps.every(
|
||||
(step) => step.label.trim().length > 0 && step.labelFa.trim().length > 0,
|
||||
)
|
||||
|
||||
return (
|
||||
<main className={pageStyles.content}>
|
||||
@@ -270,10 +283,22 @@ export function StoreSettingsPage() {
|
||||
type="text"
|
||||
className={styles.stepInput}
|
||||
value={step.label}
|
||||
placeholder="Step label"
|
||||
aria-label={`Order step ${index + 1}`}
|
||||
placeholder="Label (EN)"
|
||||
aria-label={`Order step ${index + 1} English label`}
|
||||
dir="ltr"
|
||||
lang="en"
|
||||
onChange={(e) => updateStepLabel(step.id, e.target.value)}
|
||||
/>
|
||||
<input
|
||||
type="text"
|
||||
className={`${styles.stepInput} ${styles.stepInputFa}`}
|
||||
value={step.labelFa ?? ''}
|
||||
placeholder="عنوان (فارسی)"
|
||||
aria-label={`Order step ${index + 1} Farsi label`}
|
||||
dir="rtl"
|
||||
lang="fa"
|
||||
onChange={(e) => updateStepLabelFa(step.id, e.target.value)}
|
||||
/>
|
||||
<div className={styles.stepControls}>
|
||||
<Tooltip label="Move step up">
|
||||
<button
|
||||
|
||||
Reference in New Issue
Block a user