Helpdesk inbox
A React block (a whole screen) in Beamline's Blocks category.
A support team's inbox: views with counts, a virtualised ticket queue with search, priority filters and live SLA clocks, and the open ticket with its conversation, reply composer, status, priority, assignee and the requester's details with internal notes.
Use it for
- Customer support work: triage a queue by urgency and SLA, answer a ticket, hand it to a teammate, mark it pending or solved.
Not for
- Chat between teammates (chat-thread).
- Notifications about other work (notification-center).
- A sales pipeline (crm).
Anatomy
- app shell: the inbox views (Yours, Unassigned, All open, Breaching soon, Solved) as navigation with counts
- queue: search, priority chips with counts, then one row per ticket (requester, subject, preview, priority, SLA clock, assignee, unread mark), virtualised
- ticket: subject and requester, status (Open · Pending · Solved), priority, assignee menu, the conversation and the reply composer (the primary action)
- details: requester, company and plan, channel, opened and due times, tags, internal notes; a sheet behind Details when the room is narrower
States
- loading (the queue holds its rows' shape)
- failed to load (the error with Try again in the queue's place)
- a view with no tickets (says what lands there)
- no ticket matches the search or filters (Clear filters)
- SLA: time left, due soon (under an hour), breached — each a glyph and words, never colour alone
- a change saving and refused (status, priority, assignee go back; the reason sits under the ticket header with Try again)
- saving locks only that ticket's edit controls; refusal restores only its changed fields and preserves other tickets' edits
- a reply sending, sent, failed with Retry (the thread's own states)
- narrow room: the queue or the ticket, with Back
Keyboard
- ↑/↓ in the queue move to the previous or next ticket and open it; Home/End to the ends (one row is in the tab order)
- the status is a radio group (arrows); Assign is a menu
- Esc in a narrow room goes back from the ticket to the queue
- ⌘Enter sends the reply (the composer's own)
Motion
The chosen row lights at once and keeps keyboard focus as the arrows move it (the list scrolls it into view); a status or priority change eases the badge colours in place; a reply grows into the thread and shows sending → sent (the thread's own); the Details sheet slides in on --motion-in. The SLA clock steps once a minute and never animates. Reduced motion: changes are immediate.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
tickets / defaultTickets / onTicketsChange | Ticket[] | — | The queue, controlled or not; every change arrives as the whole new list. |
onTicketChange | (id: string, patch: TicketPatch) => Promise<void> | void | — | Saves a status, priority or assignee change; a rejection puts it back and shows why. |
conversations / defaultConversations / onConversationsChange | Record<string, ChatMessage[]> | — | |
onReply | (ticketId: string, draft: ChatDraft) => Promise<void> | void | — | Sends the reply; the thread shows sending, sent or failed with Retry. |
notes / defaultNotes / onNotesChange | Record<string, ThreadComment[]> | — | Internal notes per ticket. |
agents (required) | { id: string; name: string; photo?: string }[] | — | |
me (required) | string | — | The signed-in agent's id. |
view / defaultView / onViewChange | HelpdeskView | — | |
openTicket / defaultOpenTicket / onOpenTicketChange | string | null | — | |
loading / error / onRetry | boolean / Error | null / () => void | — | |
product | string | "Support" | |
className / style / ref | string / CSSProperties / Ref<HTMLDivElement> | — |
Built from
- app-shell
- search-field
- chip-group
- avatar
- badge
- segmented-control
- select
- dropdown-menu
- chat-thread
- comment-thread
- button
- alert
- sheet
- empty-state
- skeleton
Dependencies
@tanstack/react-virtual, lucide-react
Import
import { HelpdeskInbox } from "@/blocks/helpdesk-inbox/helpdesk-inbox";
Get it
Helpdesk inbox is part of Beamline: 200+ components and 50+ complete screens for React that your coding agent (Claude Code, Codex, Cursor or any MCP client) installs into your app through Beamline's MCP server, as a ready-built package or as plain React source you can change. $49 launch price, one payment, no subscription, lifetime updates, one licence for your whole team. Get Beamline · Connect your agent
More in Blocks
- Trading terminal: A perpetuals terminal on your feed and your account: ticker tape, market header with funding, candles, book / trades / depth, order ticket, account…
- Market screener: The whole market at a glance and a way to narrow it down: a sector heatmap, today's top movers with the market's breadth, ready-made screens (gainers…
- AI agent workspace: Threads, a conversation with streamed reasoning, cited answers and a plan that waits for approval then runs step by step, and an artifacts panel with…
- Portfolio overview: What an account holds and how it is doing: the total that rolls as prices tick with today's change, value over time against a benchmark, allocation by…
- AI image studio: Write a prompt, pick a shape, a style and how many, and watch the variations generate side by side; each one opens full screen and can be upscaled or…
- Model playground: Try one prompt on up to three models side by side: pick each model with its price and speed in view, set the system prompt, temperature and length once…
- Artifact workbench: Where the things an assistant makes are checked before they leave: every document, piece of code, small app and data result from a conversation, each…
- Analytics dashboard: A SaaS overview in the app shell, fed by your metrics hook: range and segment filters drive KPIs, new and expansion revenue, channels, plan mix, uptime…
- Sales dashboard: A sales leader's week in one screen: closed won against quota and pace, pipeline coverage and win rate, the quarter's run toward target with the forecast…
- Product analytics: How people use the product: a funnel whose steps are the selector, where the people lost at a step went (saved as a cohort in one action), retention by…
- Status dashboard: An operations view of service health: the overall state in one line, every service with its status, uptime, latency now and 90 days of history, latency…
- CRM pipeline: A pipeline screen: KPIs and stage mix derived from a virtualised deals grid with inline edit, bulk moves and delete with undo; a row opens the deal in a…
- Project board: A team's sprint as a board: the sprint's goal, points done and days left, filters by person and label, the work as cards in columns with work-in-progress…
- Team calendar: A team's schedule: the people and shared calendars to show (each its colour), a month to jump by, who is out this week, and the week, day or month of…
- Invoices: Accounts receivable in one screen: what is outstanding, overdue and paid, the invoices by status in a virtualised grid with bulk reminders, and each…
- Orders admin: A shop's order desk: today's orders and revenue, quick filters for what needs doing (to fulfil, unpaid, returns), a virtualised orders grid, and the…
- Contact profile: One customer on one page: who they are and how to reach them (fields edit in place), their lifecycle stage and owner, the deals they are in with what is…
- File manager: Files and folders in one screen: the views (My files, Shared, Recent, Starred, Trash) with storage at the foot, a folder tree beside the files…
- Projects: A team's projects: the portfolio by health (on track, at risk, off track) with progress, lead, team and due date, filtered and searched; a project opens…
- Report builder: Build a chart from your metrics without code: choose metrics, how to group them over time, an optional breakdown, filters, the range and the chart, see…
- Voice agent: A voice agent in three layouts on one session: a support panel that mixes typing and talking, a call screen with the agent's orb and one call button, and…
- Admin users: Your staff's view of every account: headline counts that follow the filters, a virtualised users table with search, status and plan filters and sorting…
- Billing & invoices: The billing page of a subscription: the plan with its seats and renewal, cancel and resume in place, the card on file with a checked update form, metered…
- Onboarding checklist: The first screen after sign-up: a welcome with how far set-up has come, a checklist of the few steps that make the product useful (each with why, how…
- Roles & permissions: What each role may do, as one matrix: permissions grouped by area down the side, roles across the top with their head counts, a check per cell; a group's…
- Security: A person's account security on one page: how protected they are at a glance with the next step to take, password change with strength and rules, two-step…
- AI support chat: The customer's side of AI support: an assistant that answers from your help centre with numbered citations, a thumbs up or down on every answer (a down…
- AI support console: The support team's side of AI support: a queue sorted by what is due first (who the assistant is still handling, who asked for a person, who waits), the…
- Conversation history: Past conversations with an assistant, ready to pick up again: the list by day with bookmarks and unsent drafts, a search through every message that…
- Agent runs monitor: Every run of your agents in one place: success rate, run time, tokens and spend; the last runs as a strip of status blocks; a live table where running…
- Social media scheduler: Plan posts across your social accounts: a week calendar where every post sits at its time in its account's colour and moves by drag, a queue of what goes…
- Team chat: A team's messages in one screen: channels and direct messages with unread counts and mentions, who is online, the conversation with reactions, receipts…
- Knowledge base manager: What your assistant knows and whether it is fresh: sources with live sync status (syncing with progress, out of date, failed with the reason and Retry)…
- Meeting and call review: Everything a recorded call left behind on one screen: the recording with its transcript by speaker, an AI summary that streams in, action items with…
- Order history and fills: Every order the account placed and every fill it got, for a period: totals for volume, fees, fill rate and maker share; orders with their status and how…
- Integrations: A directory of the apps a product connects to: search and categories with counts, connected apps first with their state (Connected, Needs attention), a…
- Plan comparison: Plans side by side against every feature: prices that roll between monthly and yearly, the current and recommended plan marked, a header that stays in…
- System pages: The four pages a product shows when the normal one cannot: page not found (search and the likely places), something broke (try again, an error id to…
- API keys & webhooks: The developer page of a SaaS: API keys with environment, scopes, last use and expiry, created through a form whose secret is shown once (copy it before…
- Audit log: Who did what, to what, when and from where, for a whole workspace: newest first and grouped by day, people with avatars and keys or systems with toned…
- Team & members: The people page of a workspace: seats used against the plan, members and pending invitations in one list with search and a role filter, role changes that…
- Notification preferences: What reaches a person and where: events grouped by area down the side, channels (email, push, Slack, in-app) across the top, a switch per pair that saves…
- Workspace switcher: Moving between workspaces and making a new one: a switcher for the top of your sidebar (the current workspace's mark, name and plan; a searchable list…
- Step form: The finished frame for any multi-step form you compose — onboarding, intake brief, questionnaire, booking, application: a wide card with progress, the…
- Changelog feed: An in-app What's new page: release notes grouped by month with tags, versions, pictures and details, a tag filter with counts, entries since your last…
- Page header: The top of a record or project page: breadcrumb, title with status, description and meta, a primary action with secondary actions that fold into a More…
- Empty states: The five empty moments every product has, written and wired: first use with a first step, no results with the filters to clear, an error with retry and a…
- Settings: Profile and workspace settings with one draft and real save handler. Personal mode omits workspace data; optional profile fields share validation…
- Auth page: The whole sign-in / sign-up route: product mark, a quiet dotted field with a light that follows the mouse, an optional notice, the SignIn and SignupForm…
- Sign in: The sign-in card: email and password, a one-time code or a magic link, passkeys and single sign-on, with validation, progress, errors and a signed-in…
- Sign up form: The account creation card: single sign-on, name, work email and a password with strength and Caps Lock hints, terms consent, inline validation, your…