Skip to main content

AppointmentInput

Appointment scheduling input widget for selecting time slots.

Examples

Basic Usage

This example runs a form with a single page containing the widget

Example Code

from datetime import datetime, timedelta

from abstra.forms import AppointmentInput, run


def generate_slots():
"""
Generate a list of time slots for the next 14 days, excluding weekends and lunch breaks.
Each slot is 45 minutes long, starting from 10:00 to 18:00 with a 15-minute interval.
"""
slots = []
# Replace with datetime.now() for real-time usage
current_date = datetime(2025, 1, 1)
max_date = current_date + timedelta(days=14)
while current_date < max_date:
if current_date.weekday() < 5:
for hour in range(10, 18):
if hour == 12:
continue
begin = current_date.replace(hour=hour, minute=0)
end = begin + timedelta(minutes=45)
slots.append((begin, end))
current_date += timedelta(days=1)

return [{"begin": begin, "end": end} for begin, end in slots]


# Create a page with the widget
example_page = [
AppointmentInput(
"Welcome to Abstra, please select a demo slot", slots=generate_slots()
),
]

# Run the form
result = run([example_page])

# Print the result
print(result)

Parameters

NameDescriptionTypeDefault
label (required)Text label displayed above the input.strNone
slots (required)List of available time slots. Eg. [{"begin": "2023-10-01T10:00:00", "end": "2023-10-01T11:00:00"}]List[Dict]None
keyIdentifier for the widget, defaults to label if not provided.strNone
requiredWhether a time slot must be selected before proceeding.boolTrue
hintHelp text displayed below the input.strNone
full_widthWhether the input should take up the full width of its container.boolFalse
disabledWhether the input is non-interactive.boolFalse
errorsPre-defined validation error messages to display.Union[List[str], str]None

State Value

Optional[AppointmentSlot]: The selected appointment time slot. AppointmentSlot contains begin and end attributes. Eg.: {"begin": "2023-10-01T10:00:00", "end": "2023-10-01T11:00:00"}

info

This is the type of the value that this widget holds. It will show up when accessing widget's state item.

This also defines which value type can be used on initial_state