# TimeField

Mit dem TimeField können User eine konkrete Uhrzeit angeben.

## Overview

# Playground

Verwende `<TimeField />`, um ein TimeField darzustellen. Die Values des
TimeFields sind Objekte aus dem
[@internationalized/date Package](https://react-spectrum.adobe.com/internationalized/date/).

```tsx
import {
  Label,
  TimeField,
} from "@mittwald/flow-react-components";

<TimeField>
  <Label>Uhrzeit</Label>
</TimeField>
```

---

# Min- und Max-Values

Die wählbare Uhrzeit lässt sich über `minValue` und `maxValue` begrenzen.

```tsx
import {
  FieldDescription,
  Label,
  TimeField,
} from "@mittwald/flow-react-components";
import { Time } from "@internationalized/date";

<TimeField
  minValue={new Time(8, 0)}
  maxValue={new Time(16, 0)}
>
  <Label>Uhrzeit</Label>
  <FieldDescription>Zwischen 8 und 16 Uhr</FieldDescription>
</TimeField>
```

---

# Granularity

Mit der `granularity` Property wird definiert, ob Stunden, Minuten und/oder
Sekunden auswählbar sind.

```tsx
import {
  ColumnLayout,
  Label,
  TimeField,
} from "@mittwald/flow-react-components";

<ColumnLayout>
  <TimeField granularity="hour">
    <Label>Stunde</Label>
  </TimeField>
  <TimeField>
    <Label>Stunde und Minute</Label>
  </TimeField>
  <TimeField granularity="second">
    <Label>Stunde, Minute und Sekunde</Label>
  </TimeField>
</ColumnLayout>
```

---

# Disabled

Ist das TimeField **disabled**, ist keine Interaktion möglich.

```tsx
import {
  Label,
  TimeField,
} from "@mittwald/flow-react-components";

<TimeField isDisabled>
  <Label>Datum</Label>
</TimeField>
```

---

# Kombiniere mit ...

## ContextualHelp

Benutze das [ContextualHelp](/04-components/overlays/contextual-help/overview),
wenn zusätzliche Informationen bereitgestellt werden sollen, die zu umfangreich
für die FieldDescription sind.

```tsx
import {
  Button,
  ContextualHelp,
  ContextualHelpTrigger,
  Heading,
  Label,
  TimeField,
  Text,
} from "@mittwald/flow-react-components";

<TimeField>
  <Label>
    Uhrzeit
    <ContextualHelpTrigger>
      <Button />
      <ContextualHelp>
        <Heading>Weitere Informationen</Heading>
        <Text>
          Hier gibt es weitere Informationen, die zu lang
          für die FieldDescription sind.
        </Text>
      </ContextualHelp>
    </ContextualHelpTrigger>
  </Label>
</TimeField>
```

## React Hook Form

Weitere Details zur Formularlogik und -validierung sind in der Component
[Form (React Hook Form)](/04-components/react-hook-form/form/overview) zu
finden.

```tsx
import {
  Label,
  Section,
  TimeField,
} from "@mittwald/flow-react-components";
import { useForm } from "react-hook-form";
import {
  Form,
  SubmitButton,
  typedField,
} from "@mittwald/flow-react-components/react-hook-form";
import { sleep } from "@/content/04-components/actions/action/examples/lib";
import type { CalendarDateTime } from "@internationalized/date";

export default () => {
  const form = useForm<{ time: CalendarDateTime }>();
  const Field = typedField(form);

  return (
    <Section>
      <Form form={form} onSubmit={sleep}>
        <Field
          name="time"
          rules={{
            required: "Bitte gib eine Uhrzeit ein",
          }}
        >
          <TimeField>
            <Label>Uhrzeit</Label>
          </TimeField>
        </Field>
        <SubmitButton>Speichern</SubmitButton>
      </Form>
    </Section>
  );
}
```

