# ManualEntryForm

Canonical page: https://docs.ovok.com/native-sdk/guide/components/ui/manual-entry-form

`ManualEntryForm` builds numeric inputs from the SDK's `measurementFieldCatalog`
for one `MeasurementTypeKey`. It validates required fields and catalog ranges, then
passes a typed value to the app's async save callback.

~~~tsx
import { MeasurementTypeKey } from "@ovok/core/next";
import { ManualEntryForm, type ManualEntrySaveInput } from "@ovok/native/ui";

const saveMeasurement = async (input: ManualEntrySaveInput) => {
  await measurementRepository.save({ patientId: activePatient.id, ...input });
};

<ManualEntryForm
  measurementTypeKey={MeasurementTypeKey.bodyWeight}
  saveMeasurement={saveMeasurement}
  labelForField={(field) => fieldLabels[field] ?? field}
  onSaved={() => navigation.goBack()}
/>
~~~

The form does not select a patient, construct a FHIR resource, choose offline
behavior, or navigate. Those decisions stay in the app's callback and screen.

## Props [#props]

Every prop, with its type and description, is listed in the [`@ovok/native/ui` API reference](/native-sdk/reference/ui).
