Fix order tracking desktop layout and gate settlement until invoice pricing.

Show sidebar labels on tablet, improve theme-safe UI, and keep Jalali dates on tracking.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-09 14:32:10 +02:00
co-authored by Cursor
parent 7acd225fad
commit 9e455c2572
25 changed files with 652 additions and 351 deletions
+19
View File
@@ -43,6 +43,14 @@ const persianDateTimeFormatter = new Intl.DateTimeFormat('fa-IR-u-ca-persian', {
minute: '2-digit',
})
function isJalaliDateString(value: string): boolean {
const normalized = normalizeDigits(value.trim()).replace(/-/g, '/')
const match = normalized.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2})/)
if (!match) return false
const year = Number(match[1])
return year >= 1300 && year <= 1500
}
function toDateValue(date: string | Date): Date {
if (typeof date !== 'string') return date
if (/^\d{4}-\d{2}-\d{2}/.test(date)) return parseISODate(date)
@@ -51,6 +59,13 @@ function toDateValue(date: string | Date): Date {
export function formatDate(date: string | Date | null | undefined): string {
if (!date) return '—'
if (typeof date === 'string' && isJalaliDateString(date)) {
const normalized = normalizeDigits(date.trim()).replace(/-/g, '/')
const match = normalized.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2})/)
if (!match) return toPersianDigits(normalized)
const [, y, m, d] = match
return toPersianDigits(`${y}/${m!.padStart(2, '0')}/${d!.padStart(2, '0')}`)
}
const value = toDateValue(date)
if (Number.isNaN(value.getTime())) return '—'
return persianDateFormatter.format(value)
@@ -58,6 +73,9 @@ export function formatDate(date: string | Date | null | undefined): string {
export function formatDateTime(date: string | Date | null | undefined): string {
if (!date) return '—'
if (typeof date === 'string' && isJalaliDateString(date) && !/[T\s]\d/.test(date)) {
return formatDate(date)
}
const value = toDateValue(date)
if (Number.isNaN(value.getTime())) return '—'
return persianDateTimeFormatter.format(value)
@@ -65,6 +83,7 @@ export function formatDateTime(date: string | Date | null | undefined): string {
export function formatTime(date: string | Date): string {
const d = typeof date === 'string' ? new Date(date) : date
if (Number.isNaN(d.getTime())) return '—'
return new Intl.DateTimeFormat('fa-IR', {
hour: '2-digit',
minute: '2-digit',