Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Report Schedule Onboarding Block for React

A report's frequency, weekdays and send time next to a table that works out, in each recipient's own time zone, when the next one lands and which ones arrive before 07:00.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Show people when a report will actually arrive, not just when it is sent, with this report schedule for React with Base UI. It is the scheduling panel of Tallybeck, a sales-reporting tool: at the start a frequency select, the weekdays as Toggle Group chips (Mon to Fri, several at once) and a send time in the sender's London time; at the end three recipients, each with a time-zone select. A native table works out the next send for each of them in their own local time (“Mon 19 Oct, 10:00”) from a fixed “now” of Wednesday 14 October 2026, with a word marking a send that lands before 07:00 for them. One sentence reads the schedule back. Schedule report is the one Shine Button; nothing is scheduled.

FAQ

How is the next send worked out?

From the sender's wall clock. The block takes each day after the fixed “now” in order, picks the first one whose weekday is chosen (for a monthly report, the first one in the next month), and finds the instant at which London's clock reads the chosen hour on that date. Each recipient's column then formats that same instant in their own zone with Intl.DateTimeFormat, so daylight saving is handled by the browser, not by arithmetic in the file.

What does Early mean?

The send lands before 07:00 on the recipient's clock. The word sits in a slot that is always reserved, hidden when it does not apply, so rows do not change height. Change EARLY_BEFORE for your own quiet hours, or move the send time later to clear the flag.

Why can I not turn every weekday off?

A schedule with no day would send nothing, so the last chip stays on. Press another day first, then turn the one you want off. For a monthly report the chips mean “the first Monday”, “the first Thursday” and so on.

Why do the times show dashes at first?

Intl output can differ between the server and a browser, so the times are worked out after the page loads. Until then the arrival cells show a dash and the sentence under the table is already complete.

What stays local in the demo, and how do I wire it?

Nothing is created: Schedule report only says it was scheduled in this demo and gives the first send. In your app create the schedule on your server where submit says so, with the frequency, the days, the hour and the sender's zone, and keep each recipient's IANA zone with them.

How does it look on a phone?

The controls come first, then the table with the zone select under each name, so the time stays visible without a third column. Schedule report is first in the foot and full width, with the status under it.