kit

Time field

Built revision v17.10.0

React
Topics

Human support

Bring a missing role, layout, or state, or a rendering against the standard, to the session working on kit. Name the package and the entry.

On Settings

Time field

Collections run until 21:00.
Opening hours
19 April 2025
half nineType a time, such as 930 or 9.30pm.
Night shift
30 March 2025
France Time
Cannot be changed
Only the owner can change this.
Opening hours
19 April 2025
Only the owner can change this.
Source
let reader = Specimen_Reader.reader
let paris = KitReact.Reader.atPlace(reader, ~zone="Europe/Paris")
let at = (hour, minute) => KitReact.Time.clock(reader, {hour, minute})
let atParis = iso => KitReact.Time.timeOfDay(paris, Date.fromString(iso))

let refusal = (committed: KitReact.Roles.TimeField.committed) =>
  switch committed {
  | Unresolved(_) => Some(React.string("Type a time, such as 930 or 9.30pm."))
  | Empty | Clock(_) => None
  }

@react.component
let make = () => {
  let (collection, setCollection) = React.useState((): KitReact.Roles.TimeField.committed => Clock(at(19, 30)))
  let (refused, setRefused) = React.useState((): KitReact.Roles.TimeField.committed => Unresolved("half nine"))
  let (hours, setHours) = React.useState(() => None)
  <>
    <KitReact.Roles.FormGroup
      id="react-time-collection" printedValue={<time dateTime="19:30"> {React.string("19:30")} </time>}
      label={React.string("Collection time")}
      help={React.string("Collections run until 21:00.")}
      error=?{refusal(collection)}
      kind={KitReact.Roles.TimeField.control({
        name: "collection_time",
        reader,
        value: collection,
        onCommit: committed => setCollection(_ => committed),
      })}
    />
    <KitReact.Roles.FormGroup
      id="react-time-hours" printedValue={<KitReact.Roles.Time value={KitReact.Time.intervalWithDay(reader, ~start=Date.fromString("2025-04-18T21:00:00Z"), ~end=Date.fromString("2025-04-19T00:30:00Z"))} />}
      label={React.string("Opening hours")}
      error=?hours
      kind={KitReact.Roles.TimeField.controlSet({
        name: "hours",
        reader,
        value: Clock(at(22, 0)),
        end: Clock(at(1, 30)),
        day: KitReact.Time.day(reader, {year: 2025, month: 4, day: 18}),
        onPairCommit: ({start, end}) => setHours(_ => refusal(start)->Option.orElse(refusal(end))),
      })}
    />
    <KitReact.Roles.FormGroup
      id="react-time-refused" printedValue={React.string("half nine")}
      label={React.string("Collection time")}
      error=?{refusal(refused)}
      kind={KitReact.Roles.TimeField.control({
        name: "collection_time",
        reader,
        value: refused,
        onCommit: committed => setRefused(_ => committed),
      })}
    />
    <KitReact.Roles.FormGroup
      id="react-time-shift" printedValue={<KitReact.Roles.Time value={KitReact.Time.intervalWithDay(reader, ~start=Date.fromString("2025-03-29T21:00:00Z"), ~end=Date.fromString("2025-03-30T04:00:00Z"), ~place="Europe/Paris")} />}
      label={React.string("Night shift")}
      kind={KitReact.Roles.TimeField.controlSet({
        name: "shift",
        reader: paris,
        value: Clock(atParis("2025-03-29T21:00:00Z")),
        end: Clock(atParis("2025-03-30T04:00:00Z")),
        day: KitReact.Time.day(paris, {year: 2025, month: 3, day: 29}),
      })}
    />
  <KitReact.Roles.FormGroup
    id="react-time-collection-disabled" printedValue={<time dateTime="19:30"> {React.string("19:30")} </time>}
    label={React.string("Collection time")}
    help={React.string("Only the owner can change this.")}
    kind={KitReact.Roles.TimeField.control({name: "collection_time", reader, value: Clock(at(19, 30)), disabled: true})}
  />
  <KitReact.Roles.FormGroup
    id="react-time-hours-disabled" printedValue={<KitReact.Roles.Time value={KitReact.Time.intervalWithDay(reader, ~start=Date.fromString("2025-04-18T21:00:00Z"), ~end=Date.fromString("2025-04-19T00:30:00Z"))} />}
    label={React.string("Opening hours")}
    help={React.string("Only the owner can change this.")}
    kind={KitReact.Roles.TimeField.controlSet({
      name: "hours", reader, value: Clock(at(22, 0)), end: Clock(at(1, 30)),
      day: KitReact.Time.day(reader, {year: 2025, month: 4, day: 18}), disabled: true,
    })}
  />
  </>
}

Time field, open

Show it open

Source
let reader = Specimen_Reader.reader
let at = (hour, minute) => KitReact.Time.clock(reader, {hour, minute})

@react.component
let make = () => {
  <KitReact.Roles.FormGroup
    id="react-time-open-meeting" printedValue={<time dateTime="2025-04-18T14:00"> {KitReact.TimeParts.elements(["14:00 – ", "15:30"])} </time>}
    label={React.string("Meeting")}
    kind={KitReact.Roles.TimeField.controlSet({
      name: "meeting",
      reader,
      value: Clock(at(14, 0)),
      end: Clock(at(15, 30)),
      day: KitReact.Time.day(reader, {year: 2025, month: 4, day: 18}),
    })}
  />
}