From 4523c8861f578553358710692a50a2a1e9bb5fc2 Mon Sep 17 00:00:00 2001 From: "soroush.asadi" Date: Mon, 15 Jun 2026 15:46:25 +0330 Subject: [PATCH] feat(ui): grouped thousands separators for price/amount inputs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Price fields showed raw digits (1490000) while typing — hard to read for Toman amounts. New shared MoneyInput groups as you type (1,490,000), accepts Persian/Arabic digits, and reports a raw digit string so callers keep parsing unchanged. Applied to menu item price, branch price override, expense amount, and payment-correction replacement amount. Displays already group via formatCurrency (incl. the QR guest-menu preview). Co-Authored-By: Claude Opus 4.8 --- .../components/expenses/expenses-screen.tsx | 9 +-- .../components/menu/branch-menu-overrides.tsx | 7 ++- .../src/components/menu/menu-admin-screen.tsx | 8 +-- .../reports/payment-corrections-tab.tsx | 11 ++-- .../src/components/ui/money-input.tsx | 61 +++++++++++++++++++ 5 files changed, 75 insertions(+), 21 deletions(-) create mode 100644 web/dashboard/src/components/ui/money-input.tsx diff --git a/web/dashboard/src/components/expenses/expenses-screen.tsx b/web/dashboard/src/components/expenses/expenses-screen.tsx index 8d45e7e..81afb40 100644 --- a/web/dashboard/src/components/expenses/expenses-screen.tsx +++ b/web/dashboard/src/components/expenses/expenses-screen.tsx @@ -11,6 +11,7 @@ import { isoTodayTehran } from "@/lib/reports/analytics"; import { PageHeader } from "@/components/layout/page-header"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; +import { MoneyInput } from "@/components/ui/money-input"; import { JalaliDateField } from "@/components/ui/jalali-date-field"; import { LabeledField } from "@/components/ui/labeled-field"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -291,14 +292,10 @@ export function ExpensesScreen() { - setAmount(e.target.value)} + onValueChange={setAmount} /> diff --git a/web/dashboard/src/components/menu/branch-menu-overrides.tsx b/web/dashboard/src/components/menu/branch-menu-overrides.tsx index 4265320..29d2d8b 100644 --- a/web/dashboard/src/components/menu/branch-menu-overrides.tsx +++ b/web/dashboard/src/components/menu/branch-menu-overrides.tsx @@ -15,6 +15,7 @@ import { } from "@/lib/api/branch-menu"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; +import { MoneyInput } from "@/components/ui/money-input"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; import { MenuItemLabels } from "@/components/menu/menu-item-labels"; @@ -164,11 +165,11 @@ export function BranchMenuOverrides({ {canOverridePrice ? (
- - setPriceDraft((d) => ({ ...d, [row.id]: e.target.value })) + onValueChange={(raw) => + setPriceDraft((d) => ({ ...d, [row.id]: raw })) } />