Skip to content

Commit 04cb394

Browse files
authored
Fix failed mention requests infinitely retrying (#432)
1 parent 86a847b commit 04cb394

1 file changed

Lines changed: 27 additions & 12 deletions

File tree

services/backend-api/client/src/contexts/MentionDataContext.tsx

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
7171
const existingData = queryClient.getQueryData(queryKey);
7272
const existingState = queryClient.getQueryState(queryKey);
7373

74-
if (existingData !== undefined || existingState?.fetchStatus === "fetching") {
74+
if (
75+
existingData !== undefined ||
76+
existingState?.fetchStatus === "fetching" ||
77+
existingState?.status === "error"
78+
) {
7579
return;
7680
}
7781

@@ -86,6 +90,7 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
8690
return result?.result ? { displayName: result.result.displayName } : null;
8791
},
8892
})
93+
.catch(() => {})
8994
.finally(() => {
9095
setLoadingUserIds((prev) => {
9196
const next = new Set(prev);
@@ -95,7 +100,7 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
95100
});
96101
});
97102
},
98-
[serverId, queryClient],
103+
[serverId, queryClient]
99104
);
100105

101106
const requestRolesFetch = useCallback(() => {
@@ -106,7 +111,11 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
106111
const existingData = queryClient.getQueryData(queryKey);
107112
const existingState = queryClient.getQueryState(queryKey);
108113

109-
if (existingData !== undefined || existingState?.fetchStatus === "fetching") {
114+
if (
115+
existingData !== undefined ||
116+
existingState?.fetchStatus === "fetching" ||
117+
existingState?.status === "error"
118+
) {
110119
return;
111120
}
112121

@@ -117,6 +126,7 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
117126
queryKey: [...queryKey],
118127
queryFn: () => getServerRoles({ serverId }),
119128
})
129+
.catch(() => {})
120130
.finally(() => {
121131
setIsRolesLoading(false);
122132
});
@@ -130,7 +140,11 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
130140
const existingData = queryClient.getQueryData(queryKey);
131141
const existingState = queryClient.getQueryState(queryKey);
132142

133-
if (existingData !== undefined || existingState?.fetchStatus === "fetching") {
143+
if (
144+
existingData !== undefined ||
145+
existingState?.fetchStatus === "fetching" ||
146+
existingState?.status === "error"
147+
) {
134148
return;
135149
}
136150

@@ -141,6 +155,7 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
141155
queryKey: [...queryKey],
142156
queryFn: () => getServerChannels({ serverId, types: [GetDiscordChannelType.All] }),
143157
})
158+
.catch(() => {})
144159
.finally(() => {
145160
setIsChannelsLoading(false);
146161
});
@@ -151,45 +166,45 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
151166
if (!serverId) return null;
152167

153168
const data = queryClient.getQueryData<UserData | null>(
154-
discordServerQueryKeys.serverMember(serverId, userId),
169+
discordServerQueryKeys.serverMember(serverId, userId)
155170
);
156171

157172
return data ?? null;
158173
},
159-
[serverId, queryClient],
174+
[serverId, queryClient]
160175
);
161176

162177
const getRole = useCallback(
163178
(roleId: string): DiscordRole | null => {
164179
if (!serverId) return null;
165180

166181
const data = queryClient.getQueryData<RolesResponse>(
167-
discordServerQueryKeys.serverRoles(serverId),
182+
discordServerQueryKeys.serverRoles(serverId)
168183
);
169184

170185
return data?.results?.find((role) => role.id === roleId) ?? null;
171186
},
172-
[serverId, queryClient],
187+
[serverId, queryClient]
173188
);
174189

175190
const getChannel = useCallback(
176191
(channelId: string): DiscordServerChannel | null => {
177192
if (!serverId) return null;
178193

179194
const data = queryClient.getQueryData<ChannelsResponse>(
180-
discordServerQueryKeys.allChannels(serverId),
195+
discordServerQueryKeys.allChannels(serverId)
181196
);
182197

183198
return data?.results?.find((channel) => channel.id === channelId) ?? null;
184199
},
185-
[serverId, queryClient],
200+
[serverId, queryClient]
186201
);
187202

188203
const isUserLoading = useCallback(
189204
(userId: string): boolean => {
190205
return loadingUserIds.has(userId);
191206
},
192-
[loadingUserIds],
207+
[loadingUserIds]
193208
);
194209

195210
const contextValue: MentionDataContextType = useMemo(
@@ -214,7 +229,7 @@ export const MentionDataProvider: React.FC<MentionDataProviderProps> = ({ server
214229
requestUserFetch,
215230
requestRolesFetch,
216231
requestChannelsFetch,
217-
],
232+
]
218233
);
219234

220235
return <MentionDataContext.Provider value={contextValue}>{children}</MentionDataContext.Provider>;

0 commit comments

Comments
 (0)