Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Calendar examples · Dialog

Calendar as Appointment Picker in Dialog for React

A Book Appointment button that opens a dialog with a calendar and a list of time slots.

Framework
UI library

The appointment picker inside a Dialog: a Book Appointment button opens it, with the calendar on one side and fourteen time slots on the other. The dialog keeps the booking out of the page until someone asks for it, and its title names the task for screen readers.

Preview

Preview width

Installation

Sign in to get your install command
Free with an account. It carries your token, so the CLI installs everything in one go.

FAQ

How do I read the date the person picked?

mode="single" makes selected one date and onSelect the setter. This demo stores that date in state, starting from new Date().

How does a time slot get selected?

Each time is a Button with that string as value. The click handler stores event.currentTarget.value in selectedTime, and that button uses variant="default" while the others stay outline.

Where does the list of times come from?

The times are a fixed availableTimes array: 9:00 AM through 11:30 AM, then 1:00 PM through 4:30 PM, in 30 minute steps. The date handler only updates the date, so the highlighted time stays until a time button is clicked.

How does the time list scroll?

The times column is w-62, filled by an absolute inset-0 wrapper. ScrollArea has min-h-0 flex-1 under the heading Available Times, so the buttons scroll inside the row.

How is the dialog opened?

DialogTrigger is a button reading Book Appointment. It opens DialogContent with sm:max-w-fit, and DialogTitle reads Book Appointment.

Does picking a new date clear the time?

The date state and selectedTime are separate. Choosing another day leaves the highlighted time in place until a time button is clicked.