Skip to content

Commit a322b9c

Browse files
author
gauravchugh
committed
fix review issues
1 parent bf31fc5 commit a322b9c

File tree

7 files changed

+287
-31
lines changed

7 files changed

+287
-31
lines changed

packages/lit-query/src/createQueriesController.ts

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import {
22
QueriesObserver,
33
type DefaultError,
4+
type DefinedQueryObserverResult,
45
type QueriesObserverOptions,
6+
type QueryFunction,
57
type QueryKey,
68
type QueryObserverOptions,
79
type QueryObserverResult,
10+
type ThrowOnError,
811
} from '@tanstack/query-core'
912
import type { QueryClient } from '@tanstack/query-core'
1013
import type { ReactiveControllerHost } from 'lit'
@@ -24,17 +27,70 @@ export type CreateQueriesInput<
2427
TQueryKey extends QueryKey = QueryKey,
2528
> = QueryObserverOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>
2629

30+
type SkipTokenForCreateQueries = symbol
31+
32+
type GetDefinedOrUndefinedCreateQueriesResult<
33+
T,
34+
TData,
35+
TError = unknown,
36+
> = T extends {
37+
initialData?: infer TInitialData
38+
}
39+
? unknown extends TInitialData
40+
? QueryObserverResult<TData, TError>
41+
: TInitialData extends TData
42+
? DefinedQueryObserverResult<TData, TError>
43+
: TInitialData extends () => infer TInitialDataResult
44+
? unknown extends TInitialDataResult
45+
? QueryObserverResult<TData, TError>
46+
: TInitialDataResult extends TData
47+
? DefinedQueryObserverResult<TData, TError>
48+
: QueryObserverResult<TData, TError>
49+
: QueryObserverResult<TData, TError>
50+
: QueryObserverResult<TData, TError>
51+
52+
type GetCreateQueriesResult<T> =
53+
T extends { queryFnData: any; error?: infer TError; data: infer TData }
54+
? GetDefinedOrUndefinedCreateQueriesResult<T, TData, TError>
55+
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
56+
? GetDefinedOrUndefinedCreateQueriesResult<T, TQueryFnData, TError>
57+
: T extends { data: infer TData; error?: infer TError }
58+
? GetDefinedOrUndefinedCreateQueriesResult<T, TData, TError>
59+
: T extends [any, infer TError, infer TData]
60+
? GetDefinedOrUndefinedCreateQueriesResult<T, TData, TError>
61+
: T extends [infer TQueryFnData, infer TError]
62+
? GetDefinedOrUndefinedCreateQueriesResult<
63+
T,
64+
TQueryFnData,
65+
TError
66+
>
67+
: T extends [infer TQueryFnData]
68+
? GetDefinedOrUndefinedCreateQueriesResult<T, TQueryFnData>
69+
: T extends {
70+
queryFn?:
71+
| QueryFunction<infer TQueryFnData, any>
72+
| SkipTokenForCreateQueries
73+
select?: (data: any) => infer TData
74+
throwOnError?: ThrowOnError<any, infer TError, any, any>
75+
}
76+
? GetDefinedOrUndefinedCreateQueriesResult<
77+
T,
78+
unknown extends TData ? TQueryFnData : TData,
79+
unknown extends TError ? DefaultError : TError
80+
>
81+
: QueryObserverResult
82+
83+
export type CreateQueriesResults<TQueryOptions extends readonly unknown[]> = {
84+
[Index in keyof TQueryOptions]: GetCreateQueriesResult<TQueryOptions[Index]>
85+
}
86+
2787
export type CreateQueriesControllerOptions<
2888
TQueryOptions extends readonly CreateQueriesInput[] =
2989
readonly CreateQueriesInput[],
30-
TCombinedResult = {
31-
[Index in keyof TQueryOptions]: QueryObserverResult
32-
},
90+
TCombinedResult = CreateQueriesResults<TQueryOptions>,
3391
> = {
3492
queries: Accessor<TQueryOptions>
35-
combine?: (result: {
36-
[Index in keyof TQueryOptions]: QueryObserverResult
37-
}) => TCombinedResult
93+
combine?: (result: CreateQueriesResults<TQueryOptions>) => TCombinedResult
3894
}
3995

4096
export type QueriesResultAccessor<TCombinedResult> =
@@ -312,9 +368,7 @@ class QueriesController<
312368

313369
export function createQueriesController<
314370
TQueryOptions extends readonly CreateQueriesInput[],
315-
TCombinedResult = {
316-
[Index in keyof TQueryOptions]: QueryObserverResult
317-
},
371+
TCombinedResult = CreateQueriesResults<TQueryOptions>,
318372
>(
319373
host: ReactiveControllerHost,
320374
options: Accessor<

packages/lit-query/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export { useMutationState } from './useMutationState.js'
5555
export type {
5656
DefinedInitialDataOptions,
5757
UndefinedInitialDataOptions,
58+
UnusedSkipTokenOptions,
5859
} from './queryOptions.js'
5960
export { queryOptions } from './queryOptions.js'
6061

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,61 @@
11
import type {
2+
DataTag,
23
DefaultError,
4+
InitialDataFunction,
5+
NonUndefinedGuard,
6+
OmitKeyof,
7+
QueryFunction,
38
QueryKey,
49
QueryObserverOptions,
10+
SkipToken,
511
} from '@tanstack/query-core'
612

713
export type DefinedInitialDataOptions<
814
TQueryFnData = unknown,
915
TError = DefaultError,
1016
TData = TQueryFnData,
1117
TQueryKey extends QueryKey = QueryKey,
12-
> = QueryObserverOptions<
13-
TQueryFnData,
14-
TError,
15-
TData,
16-
TQueryFnData,
17-
TQueryKey
18+
> = Omit<
19+
QueryObserverOptions<
20+
TQueryFnData,
21+
TError,
22+
TData,
23+
TQueryFnData,
24+
TQueryKey
25+
>,
26+
'queryFn'
27+
> & {
28+
initialData:
29+
| NonUndefinedGuard<TQueryFnData>
30+
| (() => NonUndefinedGuard<TQueryFnData>)
31+
queryFn?: QueryFunction<TQueryFnData, TQueryKey>
32+
}
33+
34+
export type UnusedSkipTokenOptions<
35+
TQueryFnData = unknown,
36+
TError = DefaultError,
37+
TData = TQueryFnData,
38+
TQueryKey extends QueryKey = QueryKey,
39+
> = OmitKeyof<
40+
QueryObserverOptions<
41+
TQueryFnData,
42+
TError,
43+
TData,
44+
TQueryFnData,
45+
TQueryKey
46+
>,
47+
'queryFn'
1848
> & {
19-
initialData: TData | (() => TData)
49+
queryFn?: Exclude<
50+
QueryObserverOptions<
51+
TQueryFnData,
52+
TError,
53+
TData,
54+
TQueryFnData,
55+
TQueryKey
56+
>['queryFn'],
57+
SkipToken | undefined
58+
>
2059
}
2160

2261
export type UndefinedInitialDataOptions<
@@ -31,7 +70,10 @@ export type UndefinedInitialDataOptions<
3170
TQueryFnData,
3271
TQueryKey
3372
> & {
34-
initialData?: undefined
73+
initialData?:
74+
| undefined
75+
| InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
76+
| NonUndefinedGuard<TQueryFnData>
3577
}
3678

3779
export function queryOptions<
@@ -40,20 +82,33 @@ export function queryOptions<
4082
TData = TQueryFnData,
4183
TQueryKey extends QueryKey = QueryKey,
4284
>(
43-
options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
44-
): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
85+
options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
86+
): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
87+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
88+
}
4589

4690
export function queryOptions<
4791
TQueryFnData = unknown,
4892
TError = DefaultError,
4993
TData = TQueryFnData,
5094
TQueryKey extends QueryKey = QueryKey,
5195
>(
52-
options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
53-
): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>
96+
options: UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>,
97+
): UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> & {
98+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
99+
}
100+
101+
export function queryOptions<
102+
TQueryFnData = unknown,
103+
TError = DefaultError,
104+
TData = TQueryFnData,
105+
TQueryKey extends QueryKey = QueryKey,
106+
>(
107+
options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
108+
): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
109+
queryKey: DataTag<TQueryKey, TQueryFnData, TError>
110+
}
54111

55-
export function queryOptions(
56-
options: QueryObserverOptions,
57-
): QueryObserverOptions {
112+
export function queryOptions(options: unknown) {
58113
return options
59114
}

packages/lit-query/src/tests/counters-and-state.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,50 @@ describe('useIsFetching/useIsMutating/useMutationState', () => {
447447
)
448448
})
449449

450+
it('S4: useMutationState refreshes when the select closure changes on host update', async () => {
451+
const client = new QueryClient()
452+
const host = new TestControllerHost()
453+
let label = 'before'
454+
455+
const mutation = createMutationController(
456+
host,
457+
{
458+
mutationKey: ['state-select-reactivity'],
459+
mutationFn: async () => 'ok',
460+
},
461+
client,
462+
)
463+
464+
const mutationLabels = useMutationState<string>(
465+
host,
466+
{
467+
filters: {
468+
mutationKey: ['state-select-reactivity'],
469+
},
470+
select: () => label,
471+
},
472+
client,
473+
)
474+
475+
host.connect()
476+
host.update()
477+
478+
await expect(mutation.mutateAsync(undefined)).resolves.toBe('ok')
479+
await waitFor(
480+
() => mutationLabels().length === 1 && mutationLabels()[0] === 'before',
481+
)
482+
483+
label = 'after'
484+
host.update()
485+
486+
await waitFor(
487+
() => mutationLabels().length === 1 && mutationLabels()[0] === 'after',
488+
)
489+
490+
mutation.destroy()
491+
mutationLabels.destroy()
492+
})
493+
450494
it('LC-COUNTERS-03: read-only helpers fail after handshake and recover under a provider', async () => {
451495
const consumer = document.createElement(
452496
contextCountersTagName,

0 commit comments

Comments
 (0)