# @ovok/core/next/react

Canonical page: https://docs.ovok.com/web-sdk/core/reference/react

## Type Aliases [#type-aliases]

### OvokMutation [#ovokmutation]

```ts
type OvokMutation<TVariables, TResult> = (client, variables) => Promise<TResult>;
```

A function that writes with the client, given the variables passed to `mutate`.

#### Type Parameters [#type-parameters]

| Type Parameter |
| ------ |
| <a id="type-parameter-tvariables"></a> `TVariables` |
| <a id="type-parameter-tresult"></a> `TResult` |

#### Parameters [#parameters]

| Parameter | Type |
| ------ | ------ |
| `client` | [`Ovok`](/web-sdk/core/reference/core/ovok-client#ovok) |
| `variables` | `TVariables` |

#### Returns [#returns]

`Promise`\<`TResult`\>

***

### OvokMutationState [#ovokmutationstate]

```ts
type OvokMutationState<TVariables, TResult> = object;
```

The state returned by `useOvokMutation`.

#### Type Parameters [#type-parameters-1]

| Type Parameter |
| ------ |
| <a id="type-parameter-tvariables-1"></a> `TVariables` |
| <a id="type-parameter-tresult-1"></a> `TResult` |

#### Properties [#properties]

| Property | Type | Description |
| ------ | ------ | ------ |
| <a id="property-data"></a> `data` | `TResult` \| `undefined` | The latest result, or undefined before the first one. |
| <a id="property-error"></a> `error` | `Error` \| `undefined` | The last error, or undefined. |
| <a id="property-loading"></a> `loading` | `boolean` | Whether a mutation is in flight. |
| <a id="property-mutate"></a> `mutate` | (`variables`) => `Promise`\<`TResult`\> | Runs the mutation; rejects with the error it sets. |
| <a id="property-reset"></a> `reset` | () => `void` | Clears `data` and `error`. |

***

### OvokProviderProps [#ovokproviderprops]

```ts
type OvokProviderProps = React.PropsWithChildren<{
  client: Ovok;
}>;
```

Props for `OvokProvider`.

***

### OvokQuery [#ovokquery]

```ts
type OvokQuery<T> = (client, signal) => Promise<T>;
```

A function that reads data with the client; it receives an abort signal.

#### Type Parameters [#type-parameters-2]

| Type Parameter |
| ------ |
| <a id="type-parameter-t"></a> `T` |

#### Parameters [#parameters-1]

| Parameter | Type |
| ------ | ------ |
| `client` | [`Ovok`](/web-sdk/core/reference/core/ovok-client#ovok) |
| `signal` | `AbortSignal` |

#### Returns [#returns-1]

`Promise`\<`T`\>

***

### OvokQueryOptions [#ovokqueryoptions]

```ts
type OvokQueryOptions = object;
```

Options for `useOvokQuery`.

#### Properties [#properties-1]

| Property | Type | Description |
| ------ | ------ | ------ |
| <a id="property-enabled"></a> `enabled?` | `boolean` | Set false to skip the query; defaults to true. |
| <a id="property-querykey"></a> `queryKey` | readonly `unknown`[] | Identifies the query; the query runs again when it changes. |

***

### OvokQueryState [#ovokquerystate]

```ts
type OvokQueryState<T> = object;
```

The state returned by the query hooks.

#### Type Parameters [#type-parameters-3]

| Type Parameter |
| ------ |
| <a id="type-parameter-t-1"></a> `T` |

#### Properties [#properties-2]

| Property | Type | Description |
| ------ | ------ | ------ |
| <a id="property-data-1"></a> `data` | `T` \| `undefined` | The latest result, or undefined before the first one. |
| <a id="property-error-1"></a> `error` | `Error` \| `undefined` | The last error, or undefined. |
| <a id="property-isrefreshing"></a> `isRefreshing` | `boolean` | Whether a request is in flight while earlier data is still shown. |
| <a id="property-isstale"></a> `isStale` | `boolean` | Whether the shown data may be out of date, because a refresh is running or failed. |
| <a id="property-loading-1"></a> `loading` | `boolean` | Whether a request is in flight. |
| <a id="property-refetch"></a> `refetch` | () => `void` | Runs the query again. |

## Functions [#functions]

### OvokProvider() [#ovokprovider]

```ts
function OvokProvider(__namedParameters): ReactElement;
```

Makes `client` available to the hooks in its subtree.

#### Parameters [#parameters-2]

| Parameter | Type |
| ------ | ------ |
| `__namedParameters` | [`OvokProviderProps`](#ovokproviderprops) |

#### Returns [#returns-2]

`ReactElement`

#### Example [#example]

```ts
<OvokProvider client={ovok}><App /></OvokProvider>
```

***

### useOvok() [#useovok]

```ts
function useOvok(): Ovok;
```

Returns the Ovok client from the nearest `OvokProvider`.

#### Returns [#returns-3]

[`Ovok`](/web-sdk/core/reference/core/ovok-client#ovok)

#### Throws [#throws]

Error when used outside an `OvokProvider`.

***

### useOvokMutation() [#useovokmutation]

```ts
function useOvokMutation<TVariables, TResult>(mutation): OvokMutationState<TVariables, TResult>;
```

Wraps a write so a component can call it and track its loading, error and data state.

#### Type Parameters [#type-parameters-4]

| Type Parameter |
| ------ |
| <a id="type-parameter-tvariables-2"></a> `TVariables` |
| <a id="type-parameter-tresult-2"></a> `TResult` |

#### Parameters [#parameters-3]

| Parameter | Type |
| ------ | ------ |
| `mutation` | [`OvokMutation`](#ovokmutation)\<`TVariables`, `TResult`\> |

#### Returns [#returns-4]

[`OvokMutationState`](#ovokmutationstate)\<`TVariables`, `TResult`\>

#### Example [#example-1]

```ts
const { mutate } = useOvokMutation((ovok, patient) => ovok.fhir.create(patient));
```

***

### useOvokQuery() [#useovokquery]

```ts
function useOvokQuery<T>(query, options): OvokQueryState<T>;
```

Runs `query` and tracks its loading, error and data state; it runs again when `options.queryKey` changes.

#### Type Parameters [#type-parameters-5]

| Type Parameter |
| ------ |
| <a id="type-parameter-t-2"></a> `T` |

#### Parameters [#parameters-4]

| Parameter | Type |
| ------ | ------ |
| `query` | [`OvokQuery`](#ovokquery)\<`T`\> |
| `options` | [`OvokQueryOptions`](#ovokqueryoptions) |

#### Returns [#returns-5]

[`OvokQueryState`](#ovokquerystate)\<`T`\>

#### Example [#example-2]

```ts
const { data, loading } = useOvokQuery((ovok, signal) => ovok.health.check({ signal }), { queryKey: ["health"] });
```

***

### useProfile() [#useprofile]

```ts
function useProfile(): OvokQueryState<OvokReference | null>;
```

Returns the signed-in profile reference, or null when signed out.

#### Returns [#returns-6]

[`OvokQueryState`](#ovokquerystate)\<[`OvokReference`](/web-sdk/core/reference/core/session#ovokreference) \| `null`\>

***

### useResource() [#useresource]

```ts
function useResource<K>(
   type, 
   id, 
   options?
): OvokQueryState<ExtractResource<K>>;
```

Reads one FHIR resource by id; skipped while `id` is undefined.

#### Type Parameters [#type-parameters-6]

| Type Parameter |
| ------ |
| <a id="type-parameter-k"></a> `K` *extends* \| `"Project"` \| `"Practitioner"` \| `"User"` \| `"ProjectMembership"` \| `"AccessPolicy"` \| `"Patient"` \| `"RelatedPerson"` \| `"Appointment"` \| `"UserConfiguration"` \| `"Bundle"` \| `"Observation"` \| `"Account"` \| `"ActivityDefinition"` \| `"AdverseEvent"` \| `"Agent"` \| `"AllergyIntolerance"` \| `"AppointmentResponse"` \| `"AsyncJob"` \| `"AuditEvent"` \| `"Basic"` \| `"Binary"` \| `"BiologicallyDerivedProduct"` \| `"BodyStructure"` \| `"Bot"` \| `"BulkDataExport"` \| `"CapabilityStatement"` \| `"CarePlan"` \| `"CareTeam"` \| `"CatalogEntry"` \| `"ChargeItem"` \| `"ChargeItemDefinition"` \| `"Claim"` \| `"ClaimResponse"` \| `"ClientApplication"` \| `"ClinicalImpression"` \| `"CodeSystem"` \| `"Communication"` \| `"CommunicationRequest"` \| `"CompartmentDefinition"` \| `"Composition"` \| `"ConceptMap"` \| `"Condition"` \| `"Consent"` \| `"Contract"` \| `"Coverage"` \| `"CoverageEligibilityRequest"` \| `"CoverageEligibilityResponse"` \| `"DetectedIssue"` \| `"Device"` \| `"DeviceDefinition"` \| `"DeviceMetric"` \| `"DeviceRequest"` \| `"DeviceUseStatement"` \| `"DiagnosticReport"` \| `"DicomInstance"` \| `"DicomSeries"` \| `"DicomStudy"` \| `"DocumentManifest"` \| `"DocumentReference"` \| `"DomainConfiguration"` \| `"EffectEvidenceSynthesis"` \| `"Encounter"` \| `"Endpoint"` \| `"EnrollmentRequest"` \| `"EnrollmentResponse"` \| `"EpisodeOfCare"` \| `"EventDefinition"` \| `"Evidence"` \| `"EvidenceVariable"` \| `"ExampleScenario"` \| `"ExplanationOfBenefit"` \| `"FamilyMemberHistory"` \| `"Flag"` \| `"Goal"` \| `"GraphDefinition"` \| `"Group"` \| `"GuidanceResponse"` \| `"HealthcareService"` \| `"ImagingStudy"` \| `"Immunization"` \| `"ImmunizationEvaluation"` \| `"ImmunizationRecommendation"` \| `"ImplementationGuide"` \| `"InsurancePlan"` \| `"Invoice"` \| `"JsonWebKey"` \| `"Library"` \| `"Linkage"` \| `"List"` \| `"Location"` \| `"Login"` \| `"Measure"` \| `"MeasureReport"` \| `"Media"` \| `"Medication"` \| `"MedicationAdministration"` \| `"MedicationDispense"` \| `"MedicationKnowledge"` \| `"MedicationRequest"` \| `"MedicationStatement"` \| `"MedicinalProduct"` \| `"MedicinalProductAuthorization"` \| `"MedicinalProductContraindication"` \| `"MedicinalProductIndication"` \| `"MedicinalProductIngredient"` \| `"MedicinalProductInteraction"` \| `"MedicinalProductManufactured"` \| `"MedicinalProductPackaged"` \| `"MedicinalProductPharmaceutical"` \| `"MedicinalProductUndesirableEffect"` \| `"MessageDefinition"` \| `"MessageHeader"` \| `"MolecularSequence"` \| `"NamingSystem"` \| `"NutritionOrder"` \| `"ObservationDefinition"` \| `"OperationDefinition"` \| `"OperationOutcome"` \| `"Organization"` \| `"OrganizationAffiliation"` \| `"Package"` \| `"PackageInstallation"` \| `"PackageRelease"` \| `"Parameters"` \| `"PaymentNotice"` \| `"PaymentReconciliation"` \| `"Person"` \| `"PlanDefinition"` \| `"PractitionerRole"` \| `"Procedure"` \| `"Provenance"` \| `"Questionnaire"` \| `"QuestionnaireResponse"` \| `"RequestGroup"` \| `"ResearchDefinition"` \| `"ResearchElementDefinition"` \| `"ResearchStudy"` \| `"ResearchSubject"` \| `"RiskAssessment"` \| `"RiskEvidenceSynthesis"` \| `"Schedule"` \| `"SearchParameter"` \| `"ServiceRequest"` \| `"Slot"` \| `"SmartAppLaunch"` \| `"SmartHealthLink"` \| `"Specimen"` \| `"SpecimenDefinition"` \| `"StructureDefinition"` \| `"StructureMap"` \| `"Subscription"` \| `"SubscriptionStatus"` \| `"Substance"` \| `"SubstanceNucleicAcid"` \| `"SubstancePolymer"` \| `"SubstanceProtein"` \| `"SubstanceReferenceInformation"` \| `"SubstanceSourceMaterial"` \| `"SubstanceSpecification"` \| `"SupplyDelivery"` \| `"SupplyRequest"` \| `"Task"` \| `"TerminologyCapabilities"` \| `"TestReport"` \| `"TestScript"` \| `"UserSecurityRequest"` \| `"ValueSet"` \| `"VerificationResult"` \| `"VisionPrescription"` |

#### Parameters [#parameters-5]

| Parameter | Type |
| ------ | ------ |
| `type` | `K` |
| `id` | `string` \| `undefined` |
| `options?` | `Pick`\<[`OvokQueryOptions`](#ovokqueryoptions), `"enabled"`\> |

#### Returns [#returns-7]

[`OvokQueryState`](#ovokquerystate)\<`ExtractResource`\<`K`\>\>

***

### useSearch() [#usesearch]

```ts
function useSearch<K>(
   type, 
   params?, 
   options?
): OvokQueryState<Page<ExtractResource<K>>>;
```

Searches a FHIR resource type and returns the first page.

#### Type Parameters [#type-parameters-7]

| Type Parameter |
| ------ |
| <a id="type-parameter-k-1"></a> `K` *extends* \| `"Project"` \| `"Practitioner"` \| `"User"` \| `"ProjectMembership"` \| `"AccessPolicy"` \| `"Patient"` \| `"RelatedPerson"` \| `"Appointment"` \| `"UserConfiguration"` \| `"Bundle"` \| `"Observation"` \| `"Account"` \| `"ActivityDefinition"` \| `"AdverseEvent"` \| `"Agent"` \| `"AllergyIntolerance"` \| `"AppointmentResponse"` \| `"AsyncJob"` \| `"AuditEvent"` \| `"Basic"` \| `"Binary"` \| `"BiologicallyDerivedProduct"` \| `"BodyStructure"` \| `"Bot"` \| `"BulkDataExport"` \| `"CapabilityStatement"` \| `"CarePlan"` \| `"CareTeam"` \| `"CatalogEntry"` \| `"ChargeItem"` \| `"ChargeItemDefinition"` \| `"Claim"` \| `"ClaimResponse"` \| `"ClientApplication"` \| `"ClinicalImpression"` \| `"CodeSystem"` \| `"Communication"` \| `"CommunicationRequest"` \| `"CompartmentDefinition"` \| `"Composition"` \| `"ConceptMap"` \| `"Condition"` \| `"Consent"` \| `"Contract"` \| `"Coverage"` \| `"CoverageEligibilityRequest"` \| `"CoverageEligibilityResponse"` \| `"DetectedIssue"` \| `"Device"` \| `"DeviceDefinition"` \| `"DeviceMetric"` \| `"DeviceRequest"` \| `"DeviceUseStatement"` \| `"DiagnosticReport"` \| `"DicomInstance"` \| `"DicomSeries"` \| `"DicomStudy"` \| `"DocumentManifest"` \| `"DocumentReference"` \| `"DomainConfiguration"` \| `"EffectEvidenceSynthesis"` \| `"Encounter"` \| `"Endpoint"` \| `"EnrollmentRequest"` \| `"EnrollmentResponse"` \| `"EpisodeOfCare"` \| `"EventDefinition"` \| `"Evidence"` \| `"EvidenceVariable"` \| `"ExampleScenario"` \| `"ExplanationOfBenefit"` \| `"FamilyMemberHistory"` \| `"Flag"` \| `"Goal"` \| `"GraphDefinition"` \| `"Group"` \| `"GuidanceResponse"` \| `"HealthcareService"` \| `"ImagingStudy"` \| `"Immunization"` \| `"ImmunizationEvaluation"` \| `"ImmunizationRecommendation"` \| `"ImplementationGuide"` \| `"InsurancePlan"` \| `"Invoice"` \| `"JsonWebKey"` \| `"Library"` \| `"Linkage"` \| `"List"` \| `"Location"` \| `"Login"` \| `"Measure"` \| `"MeasureReport"` \| `"Media"` \| `"Medication"` \| `"MedicationAdministration"` \| `"MedicationDispense"` \| `"MedicationKnowledge"` \| `"MedicationRequest"` \| `"MedicationStatement"` \| `"MedicinalProduct"` \| `"MedicinalProductAuthorization"` \| `"MedicinalProductContraindication"` \| `"MedicinalProductIndication"` \| `"MedicinalProductIngredient"` \| `"MedicinalProductInteraction"` \| `"MedicinalProductManufactured"` \| `"MedicinalProductPackaged"` \| `"MedicinalProductPharmaceutical"` \| `"MedicinalProductUndesirableEffect"` \| `"MessageDefinition"` \| `"MessageHeader"` \| `"MolecularSequence"` \| `"NamingSystem"` \| `"NutritionOrder"` \| `"ObservationDefinition"` \| `"OperationDefinition"` \| `"OperationOutcome"` \| `"Organization"` \| `"OrganizationAffiliation"` \| `"Package"` \| `"PackageInstallation"` \| `"PackageRelease"` \| `"Parameters"` \| `"PaymentNotice"` \| `"PaymentReconciliation"` \| `"Person"` \| `"PlanDefinition"` \| `"PractitionerRole"` \| `"Procedure"` \| `"Provenance"` \| `"Questionnaire"` \| `"QuestionnaireResponse"` \| `"RequestGroup"` \| `"ResearchDefinition"` \| `"ResearchElementDefinition"` \| `"ResearchStudy"` \| `"ResearchSubject"` \| `"RiskAssessment"` \| `"RiskEvidenceSynthesis"` \| `"Schedule"` \| `"SearchParameter"` \| `"ServiceRequest"` \| `"Slot"` \| `"SmartAppLaunch"` \| `"SmartHealthLink"` \| `"Specimen"` \| `"SpecimenDefinition"` \| `"StructureDefinition"` \| `"StructureMap"` \| `"Subscription"` \| `"SubscriptionStatus"` \| `"Substance"` \| `"SubstanceNucleicAcid"` \| `"SubstancePolymer"` \| `"SubstanceProtein"` \| `"SubstanceReferenceInformation"` \| `"SubstanceSourceMaterial"` \| `"SubstanceSpecification"` \| `"SupplyDelivery"` \| `"SupplyRequest"` \| `"Task"` \| `"TerminologyCapabilities"` \| `"TestReport"` \| `"TestScript"` \| `"UserSecurityRequest"` \| `"ValueSet"` \| `"VerificationResult"` \| `"VisionPrescription"` |

#### Parameters [#parameters-6]

| Parameter | Type |
| ------ | ------ |
| `type` | `K` |
| `params?` | [`QueryParams`](/web-sdk/core/reference/core/ovok-client#queryparams) |
| `options?` | `Pick`\<[`OvokQueryOptions`](#ovokqueryoptions), `"enabled"`\> |

#### Returns [#returns-8]

[`OvokQueryState`](#ovokquerystate)\<[`Page`](/web-sdk/core/reference/core/ovok-client#page)\<`ExtractResource`\<`K`\>\>\>

***

### useSession() [#usesession]

```ts
function useSession(): OvokQueryState<Session | null>;
```

Returns the current session, or null when signed out, and updates when the session changes.

#### Returns [#returns-9]

[`OvokQueryState`](#ovokquerystate)\<[`Session`](/web-sdk/core/reference/core/session#session) \| `null`\>

***

### useSubscription() [#usesubscription]

```ts
function useSubscription<T>(subscribe): T | undefined;
```

Subscribes to a source of values and returns the latest one, or undefined before the first.

#### Type Parameters [#type-parameters-8]

| Type Parameter |
| ------ |
| <a id="type-parameter-t-3"></a> `T` |

#### Parameters [#parameters-7]

| Parameter | Type |
| ------ | ------ |
| `subscribe` | (`listener`) => () => `void` |

#### Returns [#returns-10]

`T` \| `undefined`
