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
Name | Description | Type | Default |
---|---|---|---|
label (required) | Text label displayed above the input. | str | None |
slots (required) | List of available time slots. Eg. [{"begin": "2023-10-01T10:00:00", "end": "2023-10-01T11:00:00"}] | List[Dict] | None |
key | Identifier for the widget, defaults to label if not provided. | str | None |
required | Whether a time slot must be selected before proceeding. | bool | True |
hint | Help text displayed below the input. | str | None |
full_width | Whether the input should take up the full width of its container. | bool | False |
disabled | Whether the input is non-interactive. | bool | False |
errors | Pre-defined validation error messages to display. | Union[List[str], str] | None |