Skip to content

Commit 48c776c

Browse files
GeorchWmarkerikson
authored andcommitted
Make pendingTagInvalidations local
1 parent 0148e46 commit 48c776c

File tree

4 files changed

+28
-64
lines changed

4 files changed

+28
-64
lines changed

packages/toolkit/src/query/core/apiState.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ export type QuerySubState<D extends BaseEndpointDefinition<any, any, any>> = Id<
167167
> & { error: undefined })
168168
| ({
169169
status: QueryStatus.pending
170-
pendingTagInvalidations: FullTagDescription<string>[]
171170
} & BaseQuerySubState<D>)
172171
| ({
173172
status: QueryStatus.rejected
@@ -230,7 +229,6 @@ export type CombinedState<
230229
provided: InvalidationState<E>
231230
subscriptions: SubscriptionState
232231
config: ConfigState<ReducerPath>
233-
pendingTagInvalidations: FullTagDescription<string>[]
234232
}
235233

236234
export type InvalidationState<TagTypes extends string> = {

packages/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts

Lines changed: 28 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ import {
55
isRejectedWithValue,
66
} from '../rtkImports'
77

8-
import type { FullTagDescription } from '../../endpointDefinitions'
8+
import type {
9+
EndpointDefinitions,
10+
FullTagDescription,
11+
} from '../../endpointDefinitions'
912
import { calculateProvidedBy } from '../../endpointDefinitions'
10-
import type { QueryCacheKey } from '../apiState'
13+
import type { CombinedState, QueryCacheKey } from '../apiState'
1114
import { QueryStatus } from '../apiState'
1215
import { calculateProvidedByThunk } from '../buildThunks'
1316
import type {
@@ -29,11 +32,7 @@ export const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({
2932
refetchQuery,
3033
internalState,
3134
}) => {
32-
const {
33-
removeQueryResult,
34-
addPendingTagInvalidations,
35-
clearPendingTagInvalidations,
36-
} = api.internalActions
35+
const { removeQueryResult } = api.internalActions
3736
const isThunkActionWithTags = isAnyOf(
3837
isFulfilled(mutationThunk),
3938
isRejectedWithValue(mutationThunk)
@@ -46,22 +45,23 @@ export const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({
4645
isRejected(queryThunk)
4746
)
4847

48+
let pendingTagInvalidations: FullTagDescription<string>[] = []
49+
4950
const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {
5051
if (isThunkActionWithTags(action)) {
51-
processPendingTagInvalidations(
52+
invalidateTags(
5253
calculateProvidedByThunk(
5354
action,
5455
'invalidatesTags',
5556
endpointDefinitions,
5657
assertTagType
5758
),
58-
mwApi,
59-
internalState
59+
mwApi
6060
)
6161
} else if (isQueryEnd(action)) {
62-
processPendingTagInvalidations([], mwApi, internalState)
62+
invalidateTags([], mwApi)
6363
} else if (api.util.invalidateTags.match(action)) {
64-
processPendingTagInvalidations(
64+
invalidateTags(
6565
calculateProvidedBy(
6666
action.payload,
6767
undefined,
@@ -70,57 +70,40 @@ export const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({
7070
undefined,
7171
assertTagType
7272
),
73-
mwApi,
74-
internalState
73+
mwApi
7574
)
7675
}
7776
}
7877

79-
function processPendingTagInvalidations(
80-
tags: readonly FullTagDescription<string>[],
81-
mwApi: SubMiddlewareApi,
82-
internalState: InternalMiddlewareState
78+
function hasPendingRequests(
79+
state: CombinedState<EndpointDefinitions, string, string>
8380
) {
84-
const rootState = mwApi.getState()
85-
86-
const state = rootState[reducerPath]
87-
88-
if (state.config.invalidateImmediately) {
89-
handleInvalidatedTags(tags, mwApi)
90-
return
91-
}
92-
93-
const hasPendingQueries = Object.values(state.queries).some(
94-
(x) => x?.status === QueryStatus.pending
95-
)
96-
const hasPendingMutations = Object.values(state.mutations).some(
97-
(x) => x?.status === QueryStatus.pending
98-
)
99-
100-
if (hasPendingQueries || hasPendingMutations) {
101-
if (tags && tags.length > 0)
102-
mwApi.dispatch(addPendingTagInvalidations(tags))
103-
} else {
104-
handleInvalidatedTags(tags, mwApi)
105-
}
81+
return Object.values({
82+
...state.queries,
83+
...state.mutations,
84+
}).some((x) => x?.status === QueryStatus.pending)
10685
}
10786

108-
function handleInvalidatedTags(
87+
function invalidateTags(
10988
newTags: readonly FullTagDescription<string>[],
11089
mwApi: SubMiddlewareApi
11190
) {
11291
const rootState = mwApi.getState()
11392
const state = rootState[reducerPath]
11493

115-
const tags = [...state.pendingTagInvalidations, ...newTags]
94+
pendingTagInvalidations.push(...newTags)
95+
96+
if (!state.config.invalidateImmediately && hasPendingRequests(state)) {
97+
return
98+
}
99+
100+
const tags = pendingTagInvalidations
101+
pendingTagInvalidations = []
116102
if (tags.length === 0) return
117103

118104
const toInvalidate = api.util.selectInvalidatedBy(rootState, tags)
119105

120106
context.batch(() => {
121-
if (state.pendingTagInvalidations.length > 0)
122-
mwApi.dispatch(clearPendingTagInvalidations())
123-
124107
const valuesArray = Array.from(toInvalidate.values())
125108
for (const { queryCacheKey } of valuesArray) {
126109
const querySubState = state.queries[queryCacheKey]

packages/toolkit/src/query/core/buildSlice.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -420,20 +420,6 @@ export function buildSlice({
420420
},
421421
})
422422

423-
const pendingTagInvalidationsSlice = createSlice({
424-
name: `${reducerPath}/pendingTagInvalidations`,
425-
initialState: [] as FullTagDescription<string>[],
426-
reducers: {
427-
addPendingTagInvalidations: (
428-
state,
429-
action: PayloadAction<readonly FullTagDescription<string>[]>
430-
) => {
431-
state.push(...action.payload)
432-
},
433-
clearPendingTagInvalidations: () => [],
434-
},
435-
})
436-
437423
// Dummy slice to generate actions
438424
const subscriptionSlice = createSlice({
439425
name: `${reducerPath}/subscriptions`,
@@ -516,7 +502,6 @@ export function buildSlice({
516502
provided: invalidationSlice.reducer,
517503
subscriptions: internalSubscriptionsSlice.reducer,
518504
config: configSlice.reducer,
519-
pendingTagInvalidations: pendingTagInvalidationsSlice.reducer,
520505
})
521506

522507
const reducer: typeof combinedReducer = (state, action) =>
@@ -529,7 +514,6 @@ export function buildSlice({
529514
...internalSubscriptionsSlice.actions,
530515
...mutationSlice.actions,
531516
...invalidationSlice.actions,
532-
...pendingTagInvalidationsSlice.actions,
533517
resetApiState,
534518
}
535519

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ describe('buildSlice', () => {
6161
refetchOnReconnect: false,
6262
},
6363
mutations: {},
64-
pendingTagInvalidations: [],
6564
provided: expect.any(Object),
6665
queries: {
6766
'getUser(1)': {

0 commit comments

Comments
 (0)