Voicemail inbox

A voicemail list with unread tracking: newest first, an unread dot until a row is opened, and the full voicemail-player inline on the open row. The list and playback come from useVoicemails; unread state is local since the API has no read flag.

Voicemail

Installation

npx shadcn@latest add @handset/voicemail-inbox

Installs voicemail-player as a dependency — the inbox renders it inline on the open row and wires onExpired to refreshVoicemail so expired audio URLs recover automatically.

Usage

import { VoicemailInbox } from "@/components/handset/voicemail-inbox";

<VoicemailInbox tenantId={tenant.id} pollMs={15000} />

Accepts the same options as useVoicemails (tenantId, limit, pollMs). New voicemails arrive on the poll (or instantly under <HandsetProvider realtime>) and show an unread dot until opened.

Props

Props
PropTypeDefaultDescription
tenantIdstring—Scope to one tenant's voicemails.
limitnumber25Page size for the list.
pollMsnumber15000Refresh interval. 0 fetches once.
classNamestring—Merged onto the root card.