Skip to content

Commit e4c6765

Browse files
committed
Consolidate serializeQueryArgs override behavior into createApi
1 parent 49748b9 commit e4c6765

File tree

3 files changed

+43
-64
lines changed

3 files changed

+43
-64
lines changed

packages/toolkit/src/query/buildSerializeQueryArgs.ts

Lines changed: 0 additions & 34 deletions
This file was deleted.

packages/toolkit/src/query/createApi.ts

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import type { Api, ApiContext, Module, ModuleName } from './apiTypes'
22
import type { CombinedState } from './core/apiState'
33
import type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes'
4-
import type { SerializeQueryArgs } from './defaultSerializeQueryArgs'
5-
import { buildSerializeQueryArgs } from './buildSerializeQueryArgs'
4+
import {
5+
defaultSerializeQueryArgs,
6+
SerializeQueryArgs,
7+
} from './defaultSerializeQueryArgs'
68
import type {
79
EndpointBuilder,
810
EndpointDefinitions,
@@ -236,18 +238,25 @@ export function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(
236238
})
237239
)
238240

239-
const { serializeQueryArgs, registerArgsSerializerForEndpoint } =
240-
buildSerializeQueryArgs(options.serializeQueryArgs)
241-
242-
const optionsWithDefaults = {
241+
const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {
243242
reducerPath: 'api',
244243
keepUnusedDataFor: 60,
245244
refetchOnMountOrArgChange: false,
246245
refetchOnFocus: false,
247246
refetchOnReconnect: false,
248247
...options,
249248
extractRehydrationInfo,
250-
serializeQueryArgs,
249+
serializeQueryArgs(queryArgsApi) {
250+
let finalSerializeQueryArgs = defaultSerializeQueryArgs
251+
if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {
252+
finalSerializeQueryArgs =
253+
queryArgsApi.endpointDefinition.serializeQueryArgs!
254+
} else if (options.serializeQueryArgs) {
255+
finalSerializeQueryArgs = options.serializeQueryArgs
256+
}
257+
258+
return finalSerializeQueryArgs(queryArgsApi)
259+
},
251260
tagTypes: [...(options.tagTypes || [])],
252261
}
253262

@@ -269,8 +278,8 @@ export function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(
269278
enhanceEndpoints({ addTagTypes, endpoints }) {
270279
if (addTagTypes) {
271280
for (const eT of addTagTypes) {
272-
if (!optionsWithDefaults.tagTypes.includes(eT as any)) {
273-
optionsWithDefaults.tagTypes.push(eT as any)
281+
if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {
282+
;(optionsWithDefaults.tagTypes as any[]).push(eT)
274283
}
275284
}
276285
}
@@ -293,7 +302,7 @@ export function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(
293302
} as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>
294303

295304
const initializedModules = modules.map((m) =>
296-
m.init(api as any, optionsWithDefaults, context)
305+
m.init(api as any, optionsWithDefaults as any, context)
297306
)
298307

299308
function injectEndpoints(
@@ -323,13 +332,6 @@ export function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(
323332
continue
324333
}
325334

326-
if (isQueryDefinition(definition) && definition.serializeQueryArgs) {
327-
registerArgsSerializerForEndpoint(
328-
endpointName,
329-
definition.serializeQueryArgs
330-
)
331-
}
332-
333335
context.endpointDefinitions[endpointName] = definition
334336
for (const m of initializedModules) {
335337
m.injectEndpoint(endpointName, definition)

packages/toolkit/src/query/tests/createApi.test.ts

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,14 @@ describe('custom serializeQueryArgs per endpoint', () => {
832832

833833
const api = createApi({
834834
baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
835+
serializeQueryArgs: ({ endpointName, queryArgs }) =>
836+
`base-${endpointName}-${queryArgs}`,
835837
endpoints: (build) => ({
838+
queryWithNoSerializer: build.query<SuccessResponse, number>({
839+
query: (arg) => `${arg}`,
840+
}),
836841
queryWithCustomSerializer: build.query<SuccessResponse, number>({
837-
query: () => ({ url: '/success' }),
842+
query: (arg) => `${arg}`,
838843
serializeQueryArgs: serializer1,
839844
}),
840845
}),
@@ -843,26 +848,33 @@ describe('custom serializeQueryArgs per endpoint', () => {
843848
const storeRef = setupApiStore(api)
844849

845850
it('Works via createApi', async () => {
851+
await storeRef.store.dispatch(
852+
api.endpoints.queryWithNoSerializer.initiate(99)
853+
)
854+
846855
expect(serializer1).toHaveBeenCalledTimes(0)
847856

848857
await storeRef.store.dispatch(
849-
api.endpoints.queryWithCustomSerializer.initiate(5)
858+
api.endpoints.queryWithCustomSerializer.initiate(42)
850859
)
851860

852-
const firstRef = api.endpoints.queryWithCustomSerializer.select(5)(
853-
storeRef.store.getState()
854-
)
855861
expect(serializer1).toHaveBeenCalled()
856862

857-
expect(firstRef.data).toEqual({ value: 'success' })
863+
expect(
864+
storeRef.store.getState().api.queries['base-queryWithNoSerializer-99']
865+
).toBeTruthy()
866+
867+
expect(
868+
storeRef.store.getState().api.queries['queryWithCustomSerializer-42']
869+
).toBeTruthy()
858870
})
859871

860872
const serializer2 = jest.fn(customArgsSerializer)
861873

862874
const injectedApi = api.injectEndpoints({
863875
endpoints: (build) => ({
864876
injectedQueryWithCustomSerializer: build.query<SuccessResponse, number>({
865-
query: () => ({ url: '/success' }),
877+
query: (arg) => `${arg}`,
866878
serializeQueryArgs: serializer2,
867879
}),
868880
}),
@@ -875,12 +887,11 @@ describe('custom serializeQueryArgs per endpoint', () => {
875887
injectedApi.endpoints.injectedQueryWithCustomSerializer.initiate(5)
876888
)
877889

878-
const firstRef =
879-
injectedApi.endpoints.injectedQueryWithCustomSerializer.select(5)(
880-
storeRef.store.getState()
881-
)
882890
expect(serializer2).toHaveBeenCalled()
883-
884-
expect(firstRef.data).toEqual({ value: 'success' })
891+
expect(
892+
storeRef.store.getState().api.queries[
893+
'injectedQueryWithCustomSerializer-5'
894+
]
895+
).toBeTruthy()
885896
})
886897
})

0 commit comments

Comments
 (0)