DataMutation Component
A thin wrapper around the useDataMutation hook
Basic Usage
import { DataMutation } from '@dhis2/app-runtime'
// within a React component's JSX render tree
return (
<DataMutation mutation={mutation}>
{([mutate, { called, loading, error, data }]) => {
/* child render funtion */
}}
</DataMutation>
)
Input Props
Name | Type | Required | Description |
---|---|---|---|
mutation | Mutation | required | The Mutation definition describing the requested operation |
variables | Object | Variables to be passed to the dynamic portions of the mutation | |
onComplete | Function | Callback function to be called on successfull completion of the mutation. Called with the response data as the only argument. | |
onError | Function | Callback function to be called on failure of the mutation. Called with the error instance as the only argument. | |
lazy | boolean | If false, run the mutation immediately after the component mounts. Default: true |
Render Function Props
The render function is called whenever the state of the mutation changes. It is called with a single argument, an array with two elements:
mutate
- a function which can be called to trigger the mutation (for instance in an onClick callback)state
- an object containing the following properties:
Name | Type | Description |
---|---|---|
called | boolean | true if the mutation has been triggered through a call to the mutate function or on component mount with lazy: false |
loading | boolean | true if the data is not yet available and no error has yet been encountered |
error | Error or undefined | undefined if no error has occurred, otherwise the Error which was thrown |
data | MutationResult or undefined | undefined if the data is loading or an error has occurred, otherwise a map from the name of each QueryDefinition defined in the Query to the resulting data for that query |
engine | Data Engine | A reference to the DataEngine instance |
Example
import React from 'react'
import { DataMutation } from '@dhis2/app-runtime'
const mutation = {
resource: 'indicators',
id: ({ id }) => id,
type: 'delete',
}
export const DeleteButton = ({ indicatorId, onDelete }) => (
<DataMutation
mutation={mutation}
variables={{ id: indicatorId }}
onComplete={onDelete}
>
{([mutate, { called, loading }]) => (
<button disabled={called && loading} onClick={mutate}>
Delete
</button>
)}
</DataMutation>
)