Skip to main content

UrineTestResult

UrineTestResult renders a UrineAnalyzeMeasurement using the SDK's analyte definitions and measurement field catalog. It formats values and displays a usual range label when the catalog provides both bounds. It is a presentation component, not a clinical interpretation.

import { UrineTestResult } from "@ovok/native/ui";

<UrineTestResult
measurement={measurement}
showOnlyMeasured
labelForAnalyte={(key, fallback) => labels[key] ?? fallback}
accessibilityLabelForAnalyte={(key, fallback) => `${labels[key] ?? fallback}`}
/>

Props​

PropTypeDefaultDescription
measurementUrineAnalyzeMeasurementRequiredThe already-decoded urine-analysis result.
showOnlyMeasuredbooleanfalseHide analytes whose value is not numeric.
labelForAnalyte(key, fallback) => stringUses catalog display nameProvide localized visible labels.
accessibilityLabelForAnalyte(key, fallback) => stringUses the generated row labelLocalize or refine each row's accessibility label.
testIDstring—Identifier forwarded to the result card.
theme, slotsOvokUiProps—Shared theme and primitive overrides.

The value display follows the catalog definition: qualitative fields show Negative for zero and Positive otherwise; fields marked negative-at-zero show Negative for zero, with other values formatted numerically. Numeric values include their unit when available. The default row shows the analyte name, formatted value, and—when both normal bounds exist—whether the value is within the usual range. The component does not add a range label when the catalog has no range for that analyte.

You can replace the row through slots.UrineAnalyteRow. The slot receives UrineAnalyteRowProps: analyteKey, name, value, optional rangeLabel, isOutsideUsualRange, accessibilityLabel, and the resolved theme. Keep the accessibility label when replacing the default row. Visible and accessible labels are app-localized through the two label callbacks.

For shared theme and slot behavior, see the App UI components reference and App UI guide.