Collect owner FA/EN names and clarify SSL status labels in super-admin.

Create business now requires both locales, and the businesses list shows FA and EN owner names when available.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-03 09:21:07 +03:30
co-authored by Cursor
parent 672091d1f5
commit 76d1cb7001
4 changed files with 68 additions and 15 deletions
@@ -462,6 +462,13 @@
line-height: 1.3;
}
.ownerNameEn {
font-size: 12px;
font-weight: 500;
color: var(--text-secondary);
line-height: 1.3;
}
.ownerPhone {
font-size: 11px;
font-weight: 500;
+53 -10
View File
@@ -217,6 +217,8 @@ export function BusinessesPage() {
const [createCategoryIds, setCreateCategoryIds] = useState<number[]>([])
const [createOwnerFirstName, setCreateOwnerFirstName] = useState('')
const [createOwnerLastName, setCreateOwnerLastName] = useState('')
const [createOwnerFirstNameEn, setCreateOwnerFirstNameEn] = useState('')
const [createOwnerLastNameEn, setCreateOwnerLastNameEn] = useState('')
const [createOwnerCell, setCreateOwnerCell] = useState('')
const [createOwnerPassword, setCreateOwnerPassword] = useState('')
const [createSubmitting, setCreateSubmitting] = useState(false)
@@ -695,6 +697,8 @@ export function BusinessesPage() {
setCreateCategoryIds([])
setCreateOwnerFirstName('')
setCreateOwnerLastName('')
setCreateOwnerFirstNameEn('')
setCreateOwnerLastNameEn('')
setCreateOwnerCell('')
setCreateOwnerPassword('')
setCreateError('')
@@ -719,6 +723,8 @@ export function BusinessesPage() {
categoryIds: createCategoryIds,
ownerFirstName: createOwnerFirstName.trim(),
ownerLastName: createOwnerLastName.trim(),
ownerFirstNameEn: createOwnerFirstNameEn.trim(),
ownerLastNameEn: createOwnerLastNameEn.trim(),
ownerCellNumber,
ownerPassword: createOwnerPassword,
})
@@ -782,6 +788,8 @@ export function BusinessesPage() {
createCategoryIds.length > 0 &&
createOwnerFirstName.trim().length >= 2 &&
createOwnerLastName.trim().length >= 2 &&
createOwnerFirstNameEn.trim().length >= 2 &&
createOwnerLastNameEn.trim().length >= 2 &&
toE164CellNumber(createOwnerCell.trim()).length > 0 &&
createOwnerPassword.length >= 8
@@ -929,16 +937,16 @@ export function BusinessesPage() {
{b.sslEnabled ? (
<span
className={styles.sslIcon}
title="SSL enabled"
aria-label="SSL enabled"
title="SSL certificate valid"
aria-label="SSL certificate valid"
>
<Lock size={16} className={styles.sslOk} aria-hidden="true" />
</span>
) : (
<span
className={styles.sslIcon}
title="SSL not enabled"
aria-label="SSL not enabled"
title="SSL certificate missing or invalid"
aria-label="SSL certificate missing or invalid"
>
<AlertTriangle
size={16}
@@ -954,7 +962,12 @@ export function BusinessesPage() {
</td>
<td className={styles.td}>
<div className={styles.ownerCell}>
<div className={styles.ownerName}>{b.ownerName ?? '—'}</div>
<div className={`${styles.ownerName} faText`} dir="rtl" lang="fa">
{b.ownerName ?? '—'}
</div>
{b.ownerNameEn ? (
<div className={styles.ownerNameEn}>{b.ownerNameEn}</div>
) : null}
<div className={styles.ownerPhone}>
{b.ownerCellNumber ? formatCellForDisplay(b.ownerCellNumber) : '—'}
</div>
@@ -1488,21 +1501,51 @@ export function BusinessesPage() {
</div>
<div className={styles.field}>
<label htmlFor="create-owner-first-name">First name</label>
<label htmlFor="create-owner-first-name-en">First name (EN)</label>
<input
id="create-owner-first-name"
value={createOwnerFirstName}
onChange={(e) => setCreateOwnerFirstName(e.target.value)}
id="create-owner-first-name-en"
value={createOwnerFirstNameEn}
onChange={(e) => setCreateOwnerFirstNameEn(e.target.value)}
placeholder="First name"
disabled={createSubmitting}
/>
</div>
<div className={styles.field}>
<label htmlFor="create-owner-last-name">Last name</label>
<label htmlFor="create-owner-last-name-en">Last name (EN)</label>
<input
id="create-owner-last-name-en"
value={createOwnerLastNameEn}
onChange={(e) => setCreateOwnerLastNameEn(e.target.value)}
placeholder="Last name"
disabled={createSubmitting}
/>
</div>
<div className={styles.field}>
<label htmlFor="create-owner-first-name">First name (FA)</label>
<input
id="create-owner-first-name"
className="faText"
value={createOwnerFirstName}
onChange={(e) => setCreateOwnerFirstName(e.target.value)}
placeholder="نام"
dir="rtl"
lang="fa"
disabled={createSubmitting}
/>
</div>
<div className={styles.field}>
<label htmlFor="create-owner-last-name">Last name (FA)</label>
<input
id="create-owner-last-name"
className="faText"
value={createOwnerLastName}
onChange={(e) => setCreateOwnerLastName(e.target.value)}
placeholder="نام خانوادگی"
dir="rtl"
lang="fa"
disabled={createSubmitting}
/>
</div>
+5 -5
View File
@@ -493,16 +493,16 @@ export function WebsitesPage() {
{domain.sslEnabled ? (
<span
className={tableStyles.sslIcon}
title="SSL enabled"
aria-label="SSL enabled"
title="SSL certificate valid"
aria-label="SSL certificate valid"
>
<Lock size={16} className={tableStyles.sslOk} aria-hidden="true" />
</span>
) : (
<span
className={tableStyles.sslIcon}
title="SSL not enabled"
aria-label="SSL not enabled"
title="SSL certificate missing or invalid"
aria-label="SSL certificate missing or invalid"
>
<AlertTriangle
size={16}
@@ -512,7 +512,7 @@ export function WebsitesPage() {
</span>
)}
<span className={tableStyles.subText}>
{domain.sslEnabled ? 'Enabled' : 'Disabled'}
{domain.sslEnabled ? 'Valid' : 'Invalid'}
</span>
</div>
</td>
+3
View File
@@ -19,6 +19,7 @@ export interface BusinessListItem {
domain: string | null
sslEnabled: boolean | null
ownerName: string | null
ownerNameEn: string | null
ownerCellNumber: string | null
isActive: boolean
primaryColor: BusinessPrimaryColorId
@@ -94,6 +95,8 @@ export interface CreateBusinessPayload {
categoryIds: number[]
ownerFirstName: string
ownerLastName: string
ownerFirstNameEn: string
ownerLastNameEn: string
ownerCellNumber: string
ownerPassword: string
}