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 mutatefunction or on component mount withlazy: 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>
)