Port status
Porting a number takes days and generates one support ticket per day of silence. This stepper answers 'where's my number?' before anyone asks.
Left: a live port advancing through its lifecycle (~45s loop on this demo). Right: a carrier rejection surfaced as a fixable callout.
Installation
npx shadcn@latest add @handset/port-statusUsage
import { PortStatus } from "@/components/handset/port-status";
<PortStatus portInId={portIn.id} />Polls every 30 seconds by default — ports move on carrier time. action_needed renders the carrier's status_detail inline (wrong account number, mismatched address) so the customer can fix and resubmit instead of emailing support. When a FOC date is confirmed, the switch-over date appears in the header.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| portInId | string | null | — | The port-in request to follow. |
| pollMs | number | 30000 | Refresh interval. 0 fetches once. |
| className | string | — | Merged onto the wrapper. |