mirror of
https://git.meshkee.com/Meshkee/dashboards.git
synced 2026-08-11 22:30:58 +04:30
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:
co-authored by
Cursor
parent
672091d1f5
commit
76d1cb7001
@@ -462,6 +462,13 @@
|
|||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ownerNameEn {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-secondary);
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
.ownerPhone {
|
.ownerPhone {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
|||||||
@@ -217,6 +217,8 @@ export function BusinessesPage() {
|
|||||||
const [createCategoryIds, setCreateCategoryIds] = useState<number[]>([])
|
const [createCategoryIds, setCreateCategoryIds] = useState<number[]>([])
|
||||||
const [createOwnerFirstName, setCreateOwnerFirstName] = useState('')
|
const [createOwnerFirstName, setCreateOwnerFirstName] = useState('')
|
||||||
const [createOwnerLastName, setCreateOwnerLastName] = useState('')
|
const [createOwnerLastName, setCreateOwnerLastName] = useState('')
|
||||||
|
const [createOwnerFirstNameEn, setCreateOwnerFirstNameEn] = useState('')
|
||||||
|
const [createOwnerLastNameEn, setCreateOwnerLastNameEn] = useState('')
|
||||||
const [createOwnerCell, setCreateOwnerCell] = useState('')
|
const [createOwnerCell, setCreateOwnerCell] = useState('')
|
||||||
const [createOwnerPassword, setCreateOwnerPassword] = useState('')
|
const [createOwnerPassword, setCreateOwnerPassword] = useState('')
|
||||||
const [createSubmitting, setCreateSubmitting] = useState(false)
|
const [createSubmitting, setCreateSubmitting] = useState(false)
|
||||||
@@ -695,6 +697,8 @@ export function BusinessesPage() {
|
|||||||
setCreateCategoryIds([])
|
setCreateCategoryIds([])
|
||||||
setCreateOwnerFirstName('')
|
setCreateOwnerFirstName('')
|
||||||
setCreateOwnerLastName('')
|
setCreateOwnerLastName('')
|
||||||
|
setCreateOwnerFirstNameEn('')
|
||||||
|
setCreateOwnerLastNameEn('')
|
||||||
setCreateOwnerCell('')
|
setCreateOwnerCell('')
|
||||||
setCreateOwnerPassword('')
|
setCreateOwnerPassword('')
|
||||||
setCreateError('')
|
setCreateError('')
|
||||||
@@ -719,6 +723,8 @@ export function BusinessesPage() {
|
|||||||
categoryIds: createCategoryIds,
|
categoryIds: createCategoryIds,
|
||||||
ownerFirstName: createOwnerFirstName.trim(),
|
ownerFirstName: createOwnerFirstName.trim(),
|
||||||
ownerLastName: createOwnerLastName.trim(),
|
ownerLastName: createOwnerLastName.trim(),
|
||||||
|
ownerFirstNameEn: createOwnerFirstNameEn.trim(),
|
||||||
|
ownerLastNameEn: createOwnerLastNameEn.trim(),
|
||||||
ownerCellNumber,
|
ownerCellNumber,
|
||||||
ownerPassword: createOwnerPassword,
|
ownerPassword: createOwnerPassword,
|
||||||
})
|
})
|
||||||
@@ -782,6 +788,8 @@ export function BusinessesPage() {
|
|||||||
createCategoryIds.length > 0 &&
|
createCategoryIds.length > 0 &&
|
||||||
createOwnerFirstName.trim().length >= 2 &&
|
createOwnerFirstName.trim().length >= 2 &&
|
||||||
createOwnerLastName.trim().length >= 2 &&
|
createOwnerLastName.trim().length >= 2 &&
|
||||||
|
createOwnerFirstNameEn.trim().length >= 2 &&
|
||||||
|
createOwnerLastNameEn.trim().length >= 2 &&
|
||||||
toE164CellNumber(createOwnerCell.trim()).length > 0 &&
|
toE164CellNumber(createOwnerCell.trim()).length > 0 &&
|
||||||
createOwnerPassword.length >= 8
|
createOwnerPassword.length >= 8
|
||||||
|
|
||||||
@@ -929,16 +937,16 @@ export function BusinessesPage() {
|
|||||||
{b.sslEnabled ? (
|
{b.sslEnabled ? (
|
||||||
<span
|
<span
|
||||||
className={styles.sslIcon}
|
className={styles.sslIcon}
|
||||||
title="SSL enabled"
|
title="SSL certificate valid"
|
||||||
aria-label="SSL enabled"
|
aria-label="SSL certificate valid"
|
||||||
>
|
>
|
||||||
<Lock size={16} className={styles.sslOk} aria-hidden="true" />
|
<Lock size={16} className={styles.sslOk} aria-hidden="true" />
|
||||||
</span>
|
</span>
|
||||||
) : (
|
) : (
|
||||||
<span
|
<span
|
||||||
className={styles.sslIcon}
|
className={styles.sslIcon}
|
||||||
title="SSL not enabled"
|
title="SSL certificate missing or invalid"
|
||||||
aria-label="SSL not enabled"
|
aria-label="SSL certificate missing or invalid"
|
||||||
>
|
>
|
||||||
<AlertTriangle
|
<AlertTriangle
|
||||||
size={16}
|
size={16}
|
||||||
@@ -954,7 +962,12 @@ export function BusinessesPage() {
|
|||||||
</td>
|
</td>
|
||||||
<td className={styles.td}>
|
<td className={styles.td}>
|
||||||
<div className={styles.ownerCell}>
|
<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}>
|
<div className={styles.ownerPhone}>
|
||||||
{b.ownerCellNumber ? formatCellForDisplay(b.ownerCellNumber) : '—'}
|
{b.ownerCellNumber ? formatCellForDisplay(b.ownerCellNumber) : '—'}
|
||||||
</div>
|
</div>
|
||||||
@@ -1488,21 +1501,51 @@ export function BusinessesPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.field}>
|
<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
|
<input
|
||||||
id="create-owner-first-name"
|
id="create-owner-first-name-en"
|
||||||
value={createOwnerFirstName}
|
value={createOwnerFirstNameEn}
|
||||||
onChange={(e) => setCreateOwnerFirstName(e.target.value)}
|
onChange={(e) => setCreateOwnerFirstNameEn(e.target.value)}
|
||||||
|
placeholder="First name"
|
||||||
disabled={createSubmitting}
|
disabled={createSubmitting}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.field}>
|
<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
|
<input
|
||||||
id="create-owner-last-name"
|
id="create-owner-last-name"
|
||||||
|
className="faText"
|
||||||
value={createOwnerLastName}
|
value={createOwnerLastName}
|
||||||
onChange={(e) => setCreateOwnerLastName(e.target.value)}
|
onChange={(e) => setCreateOwnerLastName(e.target.value)}
|
||||||
|
placeholder="نام خانوادگی"
|
||||||
|
dir="rtl"
|
||||||
|
lang="fa"
|
||||||
disabled={createSubmitting}
|
disabled={createSubmitting}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -493,16 +493,16 @@ export function WebsitesPage() {
|
|||||||
{domain.sslEnabled ? (
|
{domain.sslEnabled ? (
|
||||||
<span
|
<span
|
||||||
className={tableStyles.sslIcon}
|
className={tableStyles.sslIcon}
|
||||||
title="SSL enabled"
|
title="SSL certificate valid"
|
||||||
aria-label="SSL enabled"
|
aria-label="SSL certificate valid"
|
||||||
>
|
>
|
||||||
<Lock size={16} className={tableStyles.sslOk} aria-hidden="true" />
|
<Lock size={16} className={tableStyles.sslOk} aria-hidden="true" />
|
||||||
</span>
|
</span>
|
||||||
) : (
|
) : (
|
||||||
<span
|
<span
|
||||||
className={tableStyles.sslIcon}
|
className={tableStyles.sslIcon}
|
||||||
title="SSL not enabled"
|
title="SSL certificate missing or invalid"
|
||||||
aria-label="SSL not enabled"
|
aria-label="SSL certificate missing or invalid"
|
||||||
>
|
>
|
||||||
<AlertTriangle
|
<AlertTriangle
|
||||||
size={16}
|
size={16}
|
||||||
@@ -512,7 +512,7 @@ export function WebsitesPage() {
|
|||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
<span className={tableStyles.subText}>
|
<span className={tableStyles.subText}>
|
||||||
{domain.sslEnabled ? 'Enabled' : 'Disabled'}
|
{domain.sslEnabled ? 'Valid' : 'Invalid'}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ export interface BusinessListItem {
|
|||||||
domain: string | null
|
domain: string | null
|
||||||
sslEnabled: boolean | null
|
sslEnabled: boolean | null
|
||||||
ownerName: string | null
|
ownerName: string | null
|
||||||
|
ownerNameEn: string | null
|
||||||
ownerCellNumber: string | null
|
ownerCellNumber: string | null
|
||||||
isActive: boolean
|
isActive: boolean
|
||||||
primaryColor: BusinessPrimaryColorId
|
primaryColor: BusinessPrimaryColorId
|
||||||
@@ -94,6 +95,8 @@ export interface CreateBusinessPayload {
|
|||||||
categoryIds: number[]
|
categoryIds: number[]
|
||||||
ownerFirstName: string
|
ownerFirstName: string
|
||||||
ownerLastName: string
|
ownerLastName: string
|
||||||
|
ownerFirstNameEn: string
|
||||||
|
ownerLastNameEn: string
|
||||||
ownerCellNumber: string
|
ownerCellNumber: string
|
||||||
ownerPassword: string
|
ownerPassword: string
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user