Skip to content

Commit bcded70

Browse files
committed
release: 0.3.1
1 parent 7aaccf0 commit bcded70

File tree

7 files changed

+38
-14
lines changed

7 files changed

+38
-14
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ const Component = () => {
200200
Infers the type of the data the loader returns. Use:
201201

202202
```typescript
203-
const { useLoader } = createLoader(...);
204-
type LoaderData = InferLoaderData<typeof useLoader>;
203+
const loader = createLoader(...);
204+
type LoaderData = InferLoaderData<typeof loader>;
205205
```
206206

207207
Typescript should infer the loader data type automatically inside `withLoader`, but if you need the type elsewhere then this could be useful.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ryfylke-react/rtk-query-loader",
3-
"version": "0.3.0",
3+
"version": "0.3.1",
44
"description": "Lets you create loaders that contain multiple RTK queries.",
55
"main": "./dist/cjs/index.js",
66
"module": "./dist/esm/index.js",

src/types.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,13 @@ export type ComponentWithLoaderData<
6363
R extends unknown
6464
> = (props: P, loaderData: R) => ReactElement;
6565

66-
type InferQueryResult<T> = T extends UseQueryResult<infer X>
66+
export type InferLoaderData<T> = T extends Loader<
67+
any | never,
68+
infer X
69+
>
6770
? X
6871
: never;
6972

70-
export type InferLoaderData<T> = T extends UseLoader<any, any>
71-
? InferQueryResult<ReturnType<T>>
72-
: never;
73-
7473
export type Component<P extends Record<string, unknown>> = (
7574
props: P
7675
) => ReactElement;

testing-app/package.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "testing-app",
2+
"name": "rtk-query-loader-testing-app",
33
"version": "0.1.0",
44
"private": true,
55
"dependencies": {
@@ -17,10 +17,7 @@
1717
"web-vitals": "^2.1.4"
1818
},
1919
"scripts": {
20-
"start": "react-scripts start",
21-
"build": "react-scripts build",
22-
"test": "react-scripts test",
23-
"eject": "react-scripts eject"
20+
"test": "react-scripts test"
2421
},
2522
"eslintConfig": {
2623
"extends": [

testing-app/src/mocks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { rest } from "msw";
22

3-
const RESPONSE_DELAY = 600;
3+
const RESPONSE_DELAY = 100;
44

55
export const handlers = [
66
rest.get("/pokemons", (req, res, c) => {

testing-app/src/testComponents.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ const simpleLoader = createLoader({
3535
onLoading: () => <div>Loading</div>,
3636
});
3737

38+
// Test type inferrence with no transform
39+
//type SimpleLoaderResponse = InferLoaderData<typeof simpleLoader>;
40+
3841
export const SimpleLoadedComponent = withLoader(
3942
(props, loaderData) => (
4043
<RenderPokemonData
@@ -141,3 +144,20 @@ export const TestAggregateComponent = () => {
141144

142145
return <div>Loading</div>;
143146
};
147+
148+
const transformLoader = createLoader({
149+
queries: () => [useGetPokemonByNameQuery("charizard")],
150+
transform: (queries) => ({
151+
pokemon: queries[0].data,
152+
}),
153+
});
154+
155+
// test type inferrence of transformed
156+
// type TransformedType = InferLoaderData<typeof transformLoader>;
157+
158+
export const TestTransformed = withLoader(
159+
(props, loaderData) => {
160+
return <div>{loaderData.pokemon.name}</div>;
161+
},
162+
transformLoader
163+
);

testing-app/src/tests.test.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
LoadPokemon,
88
SimpleLoadedComponent,
99
TestAggregateComponent,
10+
TestTransformed,
1011
} from "./testComponents";
1112
import { render, screen, waitFor } from "./utils";
1213

@@ -65,6 +66,13 @@ describe("withLoader", () => {
6566
);
6667
});
6768

69+
test("Can transform the output of the loader", async () => {
70+
render(<TestTransformed />);
71+
await waitFor(() =>
72+
expect(screen.getByText("charizard")).toBeVisible()
73+
);
74+
});
75+
6876
describe(".extend()", () => {
6977
test("Can extend onLoading", async () => {
7078
render(<ExtendedLoaderComponent />);

0 commit comments

Comments
 (0)