Skip to content

Commit f12b850

Browse files
committed
Ensure the hooks which return guaranteed data don't throw if the hook is paused
1 parent 89c29a5 commit f12b850

File tree

7 files changed

+41
-5
lines changed

7 files changed

+41
-5
lines changed

packages/react/spec/useFindFirst.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,16 @@ describe("useFindFirst", () => {
170170
rerender();
171171
expect(result.current[0]).toBe(beforeObject);
172172
});
173+
174+
test("doesn't issue a request if paused", async () => {
175+
const { result } = renderHook(() => useFindFirst(relatedProductsApi.user, { pause: true }), {
176+
wrapper: MockClientWrapper(relatedProductsApi),
177+
});
178+
179+
expect(result.current[0].data).toBeFalsy();
180+
expect(result.current[0].fetching).toBe(false);
181+
expect(result.current[0].error).toBeFalsy();
182+
183+
expect(mockUrqlClient.executeQuery).toBeCalledTimes(0);
184+
});
173185
});

packages/react/spec/useFindMany.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,16 @@ describe("useFindMany", () => {
254254
rerender();
255255
expect(result.current[0]).toBe(beforeObject);
256256
});
257+
258+
test("doesn't issue a request if paused", async () => {
259+
const { result } = renderHook(() => useFindMany(relatedProductsApi.user, { pause: true }), {
260+
wrapper: MockClientWrapper(relatedProductsApi),
261+
});
262+
263+
expect(result.current[0].data).toBeFalsy();
264+
expect(result.current[0].fetching).toBe(false);
265+
expect(result.current[0].error).toBeFalsy();
266+
267+
expect(mockUrqlClient.executeQuery).toBeCalledTimes(0);
268+
});
257269
});

packages/react/spec/useFindOne.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,16 @@ describe("useFindOne", () => {
152152
rerender();
153153
expect(result.current[0]).toBe(beforeObject);
154154
});
155+
156+
test("doesn't issue a request if paused", async () => {
157+
const { result } = renderHook(() => useFindOne(relatedProductsApi.user, "123", { pause: true }), {
158+
wrapper: MockClientWrapper(relatedProductsApi),
159+
});
160+
161+
expect(result.current[0].data).toBeFalsy();
162+
expect(result.current[0].fetching).toBe(false);
163+
expect(result.current[0].error).toBeFalsy();
164+
165+
expect(mockUrqlClient.executeQuery).toBeCalledTimes(0);
166+
});
155167
});

packages/react/src/useFindFirst.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export const useFindFirst = <
6666
}
6767
}
6868

69-
const error = ErrorWrapper.errorIfDataAbsent(rawResult, dataPath);
69+
const error = ErrorWrapper.errorIfDataAbsent(rawResult, dataPath, options?.pause);
7070

7171
return { ...rawResult, data, error };
7272
}, [manager, rawResult]);

packages/react/src/useFindMany.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export const useFindMany = <
6464
}
6565
}
6666

67-
const error = ErrorWrapper.errorIfDataAbsent(rawResult, dataPath);
67+
const error = ErrorWrapper.errorIfDataAbsent(rawResult, dataPath, options?.pause);
6868

6969
return { ...rawResult, data, error };
7070
}, [manager, rawResult]);

packages/react/src/useFindOne.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export const useFindOne = <
6161
if (data) {
6262
data = hydrateRecord(rawResult, data);
6363
}
64-
const error = ErrorWrapper.errorIfDataAbsent(rawResult, dataPath);
64+
const error = ErrorWrapper.errorIfDataAbsent(rawResult, dataPath, options?.pause);
6565

6666
return { ...rawResult, data, error };
6767
}, [rawResult, manager]);

packages/react/src/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,10 @@ export class ErrorWrapper extends Error {
180180
});
181181
}
182182
/** @private */
183-
static errorIfDataAbsent(result: UseQueryState<any>, dataPath: string[]) {
183+
static errorIfDataAbsent(result: UseQueryState<any>, dataPath: string[], paused = false) {
184184
const nonNullableError = getNonNullableError(result, dataPath);
185185
let error = ErrorWrapper.forMaybeCombinedError(result.error);
186-
if (!error && nonNullableError) {
186+
if (!error && nonNullableError && !paused) {
187187
error = ErrorWrapper.forClientSideError(nonNullableError);
188188
}
189189
return error;

0 commit comments

Comments
 (0)