Skip to content

Commit 8f77b90

Browse files
authored
fix: Refactored types to fix issue when extending with a transform
Fixes issue #12
2 parents 553762b + ab380bc commit 8f77b90

File tree

7 files changed

+393
-195
lines changed

7 files changed

+393
-195
lines changed

docs/src/css/custom.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@
3939
display: none;
4040
}
4141
.icon-npm::after {
42+
background-color: rgb(55, 55, 55);
4243
background-image: url("https://img.shields.io/npm/v/@ryfylke-react/rtk-query-loader?color=gray&style=flat-square");
43-
width: 88px;
44+
width: 80px;
4445
height: 20px;
4546
content: "";
4647
display: flex;

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": "1.0.0",
3+
"version": "1.0.1-beta.0",
44
"description": "Lets you create reusable, extendable RTK loaders for React components.",
55
"main": "./dist/cjs/index.js",
66
"module": "./dist/esm/index.js",

src/createLoader.ts

Lines changed: 108 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,37 @@ import { RTKLoader } from "./RTKLoader";
33
import * as Types from "./types";
44

55
export const createUseLoader = <
6-
Q extends Types._Q,
7-
D extends Types._D,
8-
E extends Types._E,
9-
R extends unknown = Types.ResolveDataShape<
10-
Types.MakeDataRequired<Q>,
11-
D,
12-
E
6+
TQueries extends Types._TQueries,
7+
TDeferred extends Types._TDeferred,
8+
TPayload extends Types._TPayload,
9+
TReturn extends unknown = Types.ResolveDataShape<
10+
Types.MakeDataRequired<TQueries>,
11+
TDeferred,
12+
TPayload
1313
>,
14-
A = never
14+
TArg = never
1515
>(
16-
createUseLoaderArgs: Types.CreateUseLoaderArgs<Q, D, E, R, A>
17-
): Types.UseLoader<A, R, Q, D, E> => {
18-
const useLoader = (...args: Types.OptionalGenericArg<A>) => {
16+
createUseLoaderArgs: Types.CreateUseLoaderArgs<
17+
TQueries,
18+
TDeferred,
19+
TPayload,
20+
TReturn,
21+
TArg
22+
>
23+
): Types.UseLoader<
24+
TArg,
25+
TReturn,
26+
TQueries,
27+
TDeferred,
28+
TPayload
29+
> => {
30+
const useLoader = (
31+
...args: Types.OptionalGenericArg<TArg>
32+
) => {
1933
const loaderRes = createUseLoaderArgs.useQueries(...args);
2034
const queriesList = loaderRes.queries
2135
? Object.keys(loaderRes.queries).map(
22-
(key) => (loaderRes.queries as Q)[key]
36+
(key) => (loaderRes.queries as TQueries)[key]
2337
)
2438
: [];
2539
const aggregatedQuery = aggregateToQuery(queriesList);
@@ -28,9 +42,9 @@ export const createUseLoader = <
2842
const data = createUseLoaderArgs.transform
2943
? createUseLoaderArgs.transform(
3044
loaderRes as Types.ResolveDataShape<
31-
Types.MakeDataRequired<Q>,
32-
D,
33-
E
45+
Types.MakeDataRequired<TQueries>,
46+
TDeferred,
47+
TPayload
3448
>
3549
)
3650
: loaderRes;
@@ -41,38 +55,59 @@ export const createUseLoader = <
4155
data,
4256
currentData: data,
4357
originalArgs: args,
44-
} as Types.UseQueryResult<R>;
58+
} as Types.UseQueryResult<TReturn>;
4559
}
4660

47-
return aggregatedQuery as Types.UseQueryResult<R>;
61+
return aggregatedQuery as Types.UseQueryResult<TReturn>;
4862
};
4963

5064
useLoader.original_args = createUseLoaderArgs;
5165
return useLoader;
5266
};
5367

5468
export const createLoader = <
55-
P extends unknown,
56-
Q extends Types._Q,
57-
D extends Types._D,
58-
E extends Types._E,
59-
R extends unknown = Types.ResolveDataShape<
60-
Types.MakeDataRequired<Q>,
61-
D,
62-
E
69+
TProps extends unknown,
70+
TQueries extends Types._TQueries = never,
71+
TDeferred extends Types._TDeferred = never,
72+
TPayload extends Types._TPayload = never,
73+
TReturn extends unknown = Types.ResolveDataShape<
74+
Types.MakeDataRequired<TQueries>,
75+
TDeferred,
76+
TPayload
6377
>,
64-
A extends unknown = never
78+
TArg extends unknown = never
6579
>(
66-
createLoaderArgs: Types.CreateLoaderArgs<P, Q, D, E, R, A>
67-
): Types.Loader<P, R, Q, D, E, A> => {
80+
createLoaderArgs: Types.CreateLoaderArgs<
81+
TProps,
82+
TQueries,
83+
TDeferred,
84+
TPayload,
85+
TReturn,
86+
TArg
87+
>
88+
): Types.Loader<
89+
TProps,
90+
TReturn,
91+
TQueries,
92+
TDeferred,
93+
TPayload,
94+
TArg
95+
> => {
6896
const useLoader = createUseLoader({
6997
useQueries:
7098
createLoaderArgs.useQueries ??
71-
(() => ({} as unknown as Q)),
99+
(() => ({} as unknown as TQueries)),
72100
transform: createLoaderArgs.transform,
73101
});
74102

75-
const loader: Types.Loader<P, R, Q, D, E, A> = {
103+
const loader: Types.Loader<
104+
TProps,
105+
TReturn,
106+
TQueries,
107+
TDeferred,
108+
TPayload,
109+
TArg
110+
> = {
76111
useLoader,
77112
onLoading: createLoaderArgs.onLoading,
78113
onError: createLoaderArgs.onError,
@@ -82,34 +117,57 @@ export const createLoader = <
82117
LoaderComponent:
83118
createLoaderArgs.loaderComponent ?? RTKLoader,
84119
extend: function <
85-
Qb extends Types._Q,
86-
Db extends Types._D,
87-
Eb extends Types._E,
88-
Pb extends unknown = P,
89-
Rb = Qb extends unknown
90-
? R
91-
: Types.ResolveDataShape<
92-
Types.MakeDataRequired<Qb>,
93-
Db,
94-
Eb
120+
E_TQueries extends Types._TQueries = TQueries,
121+
E_TDeferred extends Types._TDeferred = TDeferred,
122+
E_TPayload extends Types._TPayload = TPayload,
123+
E_TReturn extends unknown = Types.AllEql<
124+
TQueries,
125+
E_TQueries,
126+
TDeferred,
127+
E_TDeferred,
128+
TPayload,
129+
E_TPayload
130+
> extends true
131+
? TReturn
132+
: Types.ResolveLoadedDataShape<
133+
E_TQueries,
134+
E_TDeferred,
135+
E_TPayload
95136
>,
96-
Ab extends unknown = A
137+
E_TProps extends unknown = TProps,
138+
E_TArg = TArg
97139
>({
98140
useQueries,
99141
transform,
100142
...loaderArgs
101-
}: Partial<Types.CreateLoaderArgs<Pb, Qb, Db, Eb, Rb, Ab>>) {
102-
const extendedLoader = {
143+
}: Partial<
144+
Types.CreateLoaderArgs<
145+
E_TProps,
146+
E_TQueries,
147+
E_TDeferred,
148+
E_TPayload,
149+
E_TReturn,
150+
E_TArg
151+
>
152+
>) {
153+
const extendedLoader: Types.Loader<
154+
E_TProps,
155+
E_TReturn,
156+
E_TQueries,
157+
E_TDeferred,
158+
E_TPayload,
159+
E_TArg
160+
> = {
103161
...(this as unknown as Types.Loader<
104-
Pb,
105-
Rb,
106-
Qb,
107-
Db,
108-
Eb,
109-
Ab
162+
E_TProps,
163+
E_TReturn,
164+
E_TQueries,
165+
E_TDeferred,
166+
E_TPayload,
167+
E_TArg
110168
>),
111169
...loaderArgs,
112-
} as Types.Loader<Pb, Rb, Qb, Db, Eb, Ab>;
170+
};
113171

114172
if (useQueries) {
115173
const newUseLoader = createUseLoader({

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ export { RTKLoader } from "./RTKLoader";
55
export type {
66
Component,
77
ComponentWithLoaderData,
8+
ConsumerProps,
89
CreateUseLoaderArgs,
910
CustomLoaderProps,
11+
DataShapeInput,
1012
InferLoaderData,
1113
Loader,
1214
LoaderTransformFunction,

0 commit comments

Comments
 (0)