fix(web): include ward in address display across card views

- property-card.tsx: add ward between address and district in both
  card (line 189) and list (line 95) layouts
- transfer-listing-card.tsx: conditionally prepend ward to
  district/city when ward is non-null
- property-card.spec.tsx: update address test to assert ward is shown,
  add list-layout ward regression test (21/21 pass)

Standard format: {address}, {ward}, {district}, {city}
Compact (project-card, industrial-listing-card): district/city only —
intentional; ProjectSummary has no ward field.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-24 11:57:09 +07:00
parent d7c5b1ca2c
commit fbe28102a1
11 changed files with 118 additions and 17 deletions

View File

@@ -15,6 +15,7 @@ import {
import { Select } from '@/components/ui/select';
import { useDeleteLead, useUpdateLeadStatus } from '@/lib/hooks/use-leads';
import { LEAD_STATUSES, LEAD_SOURCES, type LeadReadDto, type LeadStatus } from '@/lib/leads-api';
import { formatPhone, zaloHref } from '@/lib/phone';
interface LeadDetailDialogProps {
lead: LeadReadDto | null;
@@ -96,7 +97,7 @@ export function LeadDetailDialog({ lead, open, onOpenChange }: LeadDetailDialogP
<LeadStatusBadge status={lead.status} />
</div>
<div className="space-y-1 text-sm text-muted-foreground">
<p>SĐT: {lead.phone}</p>
<p>SĐT: {formatPhone(lead.phone)}</p>
{lead.email && <p>Email: {lead.email}</p>}
<p>Nguồn: {getSourceLabel(lead.source)}</p>
{lead.score !== null && <p>Điểm: {lead.score}/100</p>}
@@ -163,7 +164,7 @@ export function LeadDetailDialog({ lead, open, onOpenChange }: LeadDetailDialogP
</a>
)}
<a
href={`https://zalo.me/${lead.phone.replace(/^0/, '84')}`}
href={zaloHref(lead.phone)}
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm transition-colors hover:bg-accent"