FSAI Design System
Components

Time Select

Time picker built on Select for 15-minute schedule and availability choices.

Overview

TimeSelect is the shared time picker used for scheduling and availability UI.

It is built on top of Select and generates a fixed time-option list in 15-minute increments, plus 23:59.

Use it when the user is selecting a clock time from a normal dropdown rather than typing arbitrary time text.

Basic Usage

<TimeSelect
  value={dueTime}
  onChange={setDueTime}
/>

With Bounds

Use minTime, maxTime, and disabled times to constrain the option set.

<TimeSelect
  value={tempDueTime}
  onChange={setTempDueTime}
  minTime="09:00"
  maxTime="18:00"
  disabledTimes={['12:00', '12:15', '12:30', '12:45']}
/>

Time Notation

Pass timeNotation to match the user or workspace preference:

  • military notation -> HH:mm
  • otherwise -> h:mm aaa

Props

PropTypeDefaultDescription
valuestringCurrent time value.
onChange(value: string | null) => voidRequired. Called when a time is selected.
timeNotationUserTimeNotation | nullControls how labels are formatted.
classNamestringAdditional classes passed through to Select.
minTimestringInclusive lower bound unless minTimeExclusive is set.
maxTimestringInclusive upper bound unless maxTimeExclusive is set.
minTimeExclusivebooleanfalseExcludes the minimum time itself.
maxTimeExclusivebooleanfalseExcludes the maximum time itself.
disabledTimesstring[]Specific time values to disable.
errorstring | nullInline error message.

Brand Dashboard Usage

PatternPathNotes
Due-date time pairingfsai/apps/brand-dashboard/src/pages/Learning/components/DueDatePicker.tsxUsed alongside DateInput for scheduling.
Opening-hours editorfsai/packages/shared-ui/src/modules/locations/components/FranchiseLocationDetails/FranchiseLocationDetailsLocation.tsxOpen/close time selection within bounded schedules.
Brand-dashboard re-exportfsai/apps/brand-dashboard/src/components/TimeSelect/TimeSelect.tsxBrand dashboard re-exports the shared component.

Important Cautions

  • TimeSelect is not a freeform time text field.
  • The available options are generated internally in 15-minute increments.
  • It should be used when the stored value is a normal time string compatible with the shared SDK time helpers.

Guidelines

  • Do use TimeSelect for schedule and availability choices
  • Do pair it with DateInput when the user needs both a date and a time
  • Do use bounds and disabled times to reflect real scheduling constraints
  • Don't use TimeSelect when arbitrary typed time entry is required

On this page