Skip to content

Commit 27bf01c

Browse files
authored
add reset method to useMutation (#122)
* add react-testing-library dependency * add reset method, tests * commit new size snapshot
1 parent 86bc749 commit 27bf01c

File tree

5 files changed

+139
-33
lines changed

5 files changed

+139
-33
lines changed

.size-snapshot.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"dist/index.js": {
3-
"bundled": 29796,
4-
"minified": 14847,
5-
"gzipped": 4213
3+
"bundled": 29896,
4+
"minified": 14904,
5+
"gzipped": 4226
66
},
77
"dist/index.es.js": {
8-
"bundled": 29276,
9-
"minified": 14383,
10-
"gzipped": 4111,
8+
"bundled": 29376,
9+
"minified": 14440,
10+
"gzipped": 4125,
1111
"treeshaked": {
1212
"rollup": {
1313
"code": 3472,

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"@babel/preset-env": "^7.4.5",
3131
"@babel/preset-react": "^7.0.0",
3232
"@svgr/rollup": "^4.3.0",
33+
"@testing-library/react": "^9.4.0",
3334
"babel-core": "7.0.0-bridge.0",
3435
"babel-eslint": "9.x",
3536
"babel-jest": "^24.9.0",

src/__tests__/useMutation-test.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {
2+
cleanup,
3+
render,
4+
fireEvent,
5+
} from '@testing-library/react'
6+
import * as React from 'react'
7+
import { act } from 'react-dom/test-utils'
8+
9+
import { useMutation } from '../index'
10+
11+
describe('useMutation', () => {
12+
afterEach(cleanup)
13+
14+
it('should be able to reset `data`', async () => {
15+
function Page() {
16+
const [mutate, mutationResult] = useMutation(() => Promise.resolve('mutation'))
17+
18+
return (
19+
<div>
20+
<h1 data-testid="title">{mutationResult.data}</h1>
21+
<button onClick={mutationResult.reset}>reset</button>
22+
<button onClick={mutate}>mutate</button>
23+
</div>
24+
)
25+
}
26+
27+
const { getByTestId, getByText } = render(<Page />)
28+
29+
expect(getByTestId('title').textContent).toBe('')
30+
31+
await act(async () => {
32+
fireEvent.click(getByText('mutate'))
33+
})
34+
35+
expect(getByTestId('title').textContent).toBe('mutation')
36+
37+
await act(async () => {
38+
fireEvent.click(getByText('reset'))
39+
})
40+
41+
expect(getByTestId('title').textContent).toBe('')
42+
})
43+
})

src/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,9 @@ export function useMutation(
668668
[refetchQueriesOnFailure, refetchQueries]
669669
)
670670

671-
return [mutate, { data, isLoading, error }]
671+
const reset = React.useCallback(() => setData(null), [])
672+
673+
return [mutate, { data, isLoading, error, reset }]
672674
}
673675

674676
export function useIsFetching() {

yarn.lock

Lines changed: 86 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,13 @@
771771
dependencies:
772772
regenerator-runtime "^0.13.2"
773773

774+
"@babel/runtime@^7.6.2", "@babel/runtime@^7.7.6":
775+
version "7.8.4"
776+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308"
777+
integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==
778+
dependencies:
779+
regenerator-runtime "^0.13.2"
780+
774781
"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
775782
version "7.6.0"
776783
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
@@ -993,6 +1000,11 @@
9931000
"@types/istanbul-reports" "^1.1.1"
9941001
"@types/yargs" "^13.0.0"
9951002

1003+
"@sheerun/mutationobserver-shim@^0.3.2":
1004+
version "0.3.2"
1005+
resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b"
1006+
integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==
1007+
9961008
"@svgr/babel-plugin-add-jsx-attribute@^4.2.0":
9971009
version "4.2.0"
9981010
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1"
@@ -1096,6 +1108,27 @@
10961108
"@svgr/plugin-svgo" "^4.3.1"
10971109
rollup-pluginutils "^2.8.1"
10981110

1111+
"@testing-library/dom@^6.11.0":
1112+
version "6.12.2"
1113+
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.12.2.tgz#5d549acf43f2e0c23b2abfd4e36d65594c3b2741"
1114+
integrity sha512-KCnvHra5fV+wDxg3wJObGvZFxq7v1DJt829GNFLuRDjKxVNc/B5AdsylNF5PMHFbWMXDsHwM26d2NZcZO9KjbQ==
1115+
dependencies:
1116+
"@babel/runtime" "^7.6.2"
1117+
"@sheerun/mutationobserver-shim" "^0.3.2"
1118+
"@types/testing-library__dom" "^6.0.0"
1119+
aria-query "3.0.0"
1120+
pretty-format "^24.9.0"
1121+
wait-for-expect "^3.0.0"
1122+
1123+
"@testing-library/react@^9.4.0":
1124+
version "9.4.0"
1125+
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.4.0.tgz#b021ac8cb987c8dc54c6841875f745bf9b2e88e5"
1126+
integrity sha512-XdhDWkI4GktUPsz0AYyeQ8M9qS/JFie06kcSnUVcpgOwFjAu9vhwR83qBl+lw9yZWkbECjL8Hd+n5hH6C0oWqg==
1127+
dependencies:
1128+
"@babel/runtime" "^7.7.6"
1129+
"@testing-library/dom" "^6.11.0"
1130+
"@types/testing-library__react" "^9.1.2"
1131+
10991132
"@types/babel__core@^7.1.0":
11001133
version "7.1.3"
11011134
resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
@@ -1169,6 +1202,13 @@
11691202
resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
11701203
integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
11711204

1205+
"@types/react-dom@*":
1206+
version "16.9.5"
1207+
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.5.tgz#5de610b04a35d07ffd8f44edad93a71032d9aaa7"
1208+
integrity sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==
1209+
dependencies:
1210+
"@types/react" "*"
1211+
11721212
"@types/react-query@^0.3.0":
11731213
version "0.3.0"
11741214
resolved "https://registry.yarnpkg.com/@types/react-query/-/react-query-0.3.0.tgz#5b8da75ff61f3330030489f70e8108d861242a9e"
@@ -1196,6 +1236,21 @@
11961236
resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
11971237
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
11981238

1239+
"@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0":
1240+
version "6.12.0"
1241+
resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.12.0.tgz#7d3b9e1ea7c1bda249b08d3b2dee8bb08a57976b"
1242+
integrity sha512-PQ/gzABzc53T68RldZ/sJHKCihtP9ofU8XIgOk+H7tlfoCRdg9mqICio5Fo8j3Z8wo+pOfuDsuPprWsn3YtVmA==
1243+
dependencies:
1244+
pretty-format "^24.3.0"
1245+
1246+
"@types/testing-library__react@^9.1.2":
1247+
version "9.1.2"
1248+
resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.2.tgz#e33af9124c60a010fc03a34eff8f8a34a75c4351"
1249+
integrity sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q==
1250+
dependencies:
1251+
"@types/react-dom" "*"
1252+
"@types/testing-library__dom" "*"
1253+
11991254
"@types/yargs-parser@*":
12001255
version "13.1.0"
12011256
resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
@@ -1492,7 +1547,7 @@ argparse@^1.0.7:
14921547
dependencies:
14931548
sprintf-js "~1.0.2"
14941549

1495-
aria-query@^3.0.0:
1550+
aria-query@3.0.0, aria-query@^3.0.0:
14961551
version "3.0.0"
14971552
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc"
14981553
integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=
@@ -1768,6 +1823,13 @@ brorand@^1.0.1:
17681823
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
17691824
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
17701825

1826+
brotli-size@^4.0.0:
1827+
version "4.0.0"
1828+
resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e"
1829+
integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==
1830+
dependencies:
1831+
duplexer "0.1.1"
1832+
17711833
browser-process-hrtime@^0.1.2:
17721834
version "0.1.3"
17731835
resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
@@ -1780,13 +1842,6 @@ browser-resolve@^1.11.3:
17801842
dependencies:
17811843
resolve "1.1.7"
17821844

1783-
brotli-size@^4.0.0:
1784-
version "4.0.0"
1785-
resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e"
1786-
integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==
1787-
dependencies:
1788-
duplexer "0.1.1"
1789-
17901845
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
17911846
version "1.2.0"
17921847
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
@@ -2023,16 +2078,16 @@ chrome-trace-event@^1.0.2:
20232078
dependencies:
20242079
tslib "^1.9.0"
20252080

2026-
ci-info@^2.0.0:
2027-
version "2.0.0"
2028-
resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
2029-
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
2030-
20312081
ci-env@^1.11.0:
20322082
version "1.12.0"
20332083
resolved "https://registry.yarnpkg.com/ci-env/-/ci-env-1.12.0.tgz#8b430c4c8fcfe730cb8ac330836bffaa6e5f2ab8"
20342084
integrity sha512-4dS9YjX4kpaFmkJWZPuDPK3WlPKdMjx/3JH39vyHj+G4/ED2DCgHQLbh9tKBQjwAwR/sGHOqIVMTlMUZcfJPWw==
20352085

2086+
ci-info@^2.0.0:
2087+
version "2.0.0"
2088+
resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
2089+
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
2090+
20362091
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
20372092
version "1.0.4"
20382093
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
@@ -4376,6 +4431,13 @@ json5@^2.1.0:
43764431
dependencies:
43774432
minimist "^1.2.0"
43784433

4434+
jsonfile@^4.0.0:
4435+
version "4.0.0"
4436+
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
4437+
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
4438+
optionalDependencies:
4439+
graceful-fs "^4.1.6"
4440+
43794441
jsprim@^1.2.2:
43804442
version "1.4.1"
43814443
resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -4386,13 +4448,6 @@ jsprim@^1.2.2:
43864448
json-schema "0.2.3"
43874449
verror "1.10.0"
43884450

4389-
jsonfile@^4.0.0:
4390-
version "4.0.0"
4391-
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
4392-
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
4393-
optionalDependencies:
4394-
graceful-fs "^4.1.6"
4395-
43964451
jsx-ast-utils@^2.2.1:
43974452
version "2.2.3"
43984453
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
@@ -5409,7 +5464,7 @@ pretty-format@^23.6.0:
54095464
ansi-regex "^3.0.0"
54105465
ansi-styles "^3.2.0"
54115466

5412-
pretty-format@^24.9.0:
5467+
pretty-format@^24.3.0, pretty-format@^24.9.0:
54135468
version "24.9.0"
54145469
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
54155470
integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
@@ -6114,11 +6169,6 @@ sisteransi@^1.0.3:
61146169
resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3"
61156170
integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==
61166171

6117-
slash@^2.0.0:
6118-
version "2.0.0"
6119-
resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
6120-
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
6121-
61226172
size-plugin-core@^0.0.7:
61236173
version "0.0.7"
61246174
resolved "https://registry.yarnpkg.com/size-plugin-core/-/size-plugin-core-0.0.7.tgz#f63875902d6ae694d3989b7385286934a78020cd"
@@ -6142,6 +6192,11 @@ size-plugin-store@^0.0.5:
61426192
axios "^0.19.0"
61436193
ci-env "^1.11.0"
61446194

6195+
slash@^2.0.0:
6196+
version "2.0.0"
6197+
resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
6198+
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
6199+
61456200
slice-ansi@^2.1.0:
61466201
version "2.1.0"
61476202
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
@@ -6843,6 +6898,11 @@ w3c-hr-time@^1.0.1:
68436898
dependencies:
68446899
browser-process-hrtime "^0.1.2"
68456900

6901+
wait-for-expect@^3.0.0:
6902+
version "3.0.2"
6903+
resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463"
6904+
integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==
6905+
68466906
walker@^1.0.7, walker@~1.0.5:
68476907
version "1.0.7"
68486908
resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"

0 commit comments

Comments
 (0)