Skip to content

Commit 8aa0fc2

Browse files
authored
fix: broken redirects for projects (TanStack#714)
1 parent 40f9fc2 commit 8aa0fc2

File tree

5 files changed

+223
-222
lines changed

5 files changed

+223
-222
lines changed

src/libraries/libraries.ts

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import { redirect } from '@tanstack/react-router'
55
import type { LibrarySlim, LibraryId } from './types'
6+
import { handleRedirects } from '~/utils/handleRedirects.server'
67

78
export const query: LibrarySlim = {
89
id: 'query',
@@ -31,8 +32,166 @@ export const query: LibrarySlim = {
3132
defaultDocs: 'framework/react/overview',
3233
installPath: 'framework/$framework/installation',
3334
legacyPackages: ['react-query'],
35+
handleRedirects: (href) => {
36+
handleRedirects(
37+
reactQueryV3List,
38+
href,
39+
'/query/v3',
40+
'/query/latest',
41+
'from=reactQueryV3',
42+
)
43+
44+
handleRedirects(
45+
reactQueryV3RemovedInV5List,
46+
href,
47+
'/query/v3',
48+
'/query/v5',
49+
'from=reactQueryV3',
50+
)
51+
52+
handleRedirects(
53+
queryCommunityLinks,
54+
href,
55+
'/query/latest',
56+
'/query/latest',
57+
'from=communityLinks',
58+
)
59+
},
3460
}
3561

62+
// Redirect old query v3 docs
63+
// prettier-ignore
64+
const reactQueryV3List = [
65+
{from: "overview", to: "docs/framework/react/overview"},
66+
{from: "installation", to: "docs/framework/react/installation"},
67+
{from: "quick-start", to: "docs/framework/react/quick-start"},
68+
{from: "devtools", to: "docs/framework/react/devtools"},
69+
{from: "videos", to: "docs/framework/react/videos"},
70+
{from: "comparison", to: "docs/framework/react/comparison"},
71+
{from: "typescript", to: "docs/framework/react/typescript"},
72+
{from: "graphql", to: "docs/framework/react/graphql"},
73+
{from: "react-native", to: "docs/framework/react/react-native"},
74+
{from: "guides/important-defaults", to: "docs/framework/react/guides/important-defaults"},
75+
{from: "guides/queries", to: "docs/framework/react/guides/queries"},
76+
{from: "guides/query-keys", to: "docs/framework/react/guides/query-keys"},
77+
{from: "guides/query-functions", to: "docs/framework/react/guides/query-functions"},
78+
{from: "guides/network-mode", to: "docs/framework/react/guides/network-mode"},
79+
{from: "guides/parallel-queries", to: "docs/framework/react/guides/parallel-queries"},
80+
{from: "guides/dependent-queries", to: "docs/framework/react/guides/dependent-queries"},
81+
{from: "guides/background-fetching-indicators", to: "docs/framework/react/guides/background-fetching-indicators"},
82+
{from: "guides/window-focus-refetching", to: "docs/framework/react/guides/window-focus-refetching"},
83+
{from: "guides/disabling-queries", to: "docs/framework/react/guides/disabling-queries"},
84+
{from: "guides/query-retries", to: "docs/framework/react/guides/query-retries"},
85+
{from: "guides/paginated-queries", to: "docs/framework/react/guides/paginated-queries"},
86+
{from: "guides/infinite-queries", to: "docs/framework/react/guides/infinite-queries"},
87+
{from: "guides/placeholder-query-data", to: "docs/framework/react/guides/placeholder-query-data"},
88+
{from: "guides/initial-query-data", to: "docs/framework/react/guides/initial-query-data"},
89+
{from: "guides/prefetching", to: "docs/framework/react/guides/prefetching"},
90+
{from: "guides/mutations", to: "docs/framework/react/guides/mutations"},
91+
{from: "guides/query-invalidation", to: "docs/framework/react/guides/query-invalidation"},
92+
{from: "guides/invalidations-from-mutations", to: "docs/framework/react/guides/invalidations-from-mutations"},
93+
{from: "guides/updates-from-mutation-responses", to: "docs/framework/react/guides/updates-from-mutation-responses"},
94+
{from: "guides/optimistic-updates", to: "docs/framework/react/guides/optimistic-updates"},
95+
{from: "guides/query-cancellation", to: "docs/framework/react/guides/query-cancellation"},
96+
{from: "guides/scroll-restoration", to: "docs/framework/react/guides/scroll-restoration"},
97+
{from: "guides/filters", to: "docs/framework/react/guides/filters"},
98+
{from: "guides/ssr", to: "docs/framework/react/guides/ssr"},
99+
{from: "guides/caching", to: "docs/framework/react/guides/caching"},
100+
{from: "guides/default-query-function", to: "docs/framework/react/guides/default-query-function"},
101+
{from: "guides/suspense", to: "docs/framework/react/guides/suspense"},
102+
{from: "guides/testing", to: "docs/framework/react/guides/testing"},
103+
{from: "guides/does-this-replace-client-state", to: "docs/framework/react/guides/does-this-replace-client-state"},
104+
{from: "guides/migrating-to-react-query-3", to: "docs/framework/react/guides/migrating-to-react-query-3"},
105+
{from: "guides/migrating-to-react-query-4", to: "docs/framework/react/guides/migrating-to-react-query-4"},
106+
{from: "community/tkdodos-blog", to: "docs/framework/react/community/tkdodos-blog"},
107+
{from: "examples/simple", to: "docs/framework/react/examples/simple"},
108+
{from: "examples/basic-graphql-request", to: "docs/framework/react/examples/basic-graphql-request"},
109+
{from: "examples/custom-hooks", to: "docs/framework/react/examples/custom-hooks"},
110+
{from: "examples/auto-refetching", to: "docs/framework/react/examples/auto-refetching"},
111+
{from: "examples/focus-refetching", to: "docs/framework/react/examples/focus-refetching"},
112+
{from: "examples/optimistic-updates", to: "docs/framework/react/examples/optimistic-updates-typescript"},
113+
{from: "examples/optimistic-updates-typescript", to: "docs/framework/react/examples/optimistic-updates-typescript"},
114+
{from: "examples/pagination", to: "docs/framework/react/examples/pagination"},
115+
{from: "examples/load-more-infinite-scroll", to: "docs/framework/react/examples/load-more-infinite-scroll"},
116+
{from: "examples/suspense", to: "docs/framework/react/examples/suspense"},
117+
{from: "examples/default-query-function", to: "docs/framework/react/examples/default-query-function"},
118+
{from: "examples/playground", to: "docs/framework/react/examples/playground"},
119+
{from: "examples/prefetching", to: "docs/framework/react/examples/prefetching"},
120+
{from: "examples/star-wars", to: "docs/framework/react/examples/star-wars"},
121+
{from: "examples/rick-morty", to: "docs/framework/react/examples/rick-morty"},
122+
{from: "examples/nextjs", to: "docs/framework/react/examples/nextjs"},
123+
{from: "examples/react-native", to: "docs/framework/react/examples/react-native"},
124+
{from: "examples/offline", to: "docs/framework/react/examples/offline"},
125+
{from: "plugins/persistQueryClient", to: "docs/framework/react/plugins/persistQueryClient"},
126+
{from: "plugins/broadcastQueryClient", to: "docs/framework/react/plugins/broadcastQueryClient"},
127+
{from: "reference/useQueries", to: "docs/framework/react/reference/useQueries"},
128+
{from: "reference/useInfiniteQuery", to: "docs/framework/react/reference/useInfiniteQuery"},
129+
{from: "reference/useMutation", to: "docs/framework/react/reference/useMutation"},
130+
{from: "reference/useIsFetching", to: "docs/framework/react/reference/useIsFetching"},
131+
{from: "reference/useIsMutating", to: "docs/framework/react/reference/useIsMutating"},
132+
{from: "reference/QueryClientProvider", to: "docs/framework/react/reference/QueryClientProvider"},
133+
{from: "reference/useQueryClient", to: "docs/framework/react/reference/useQueryClient"},
134+
{from: "reference/QueryCache", to: "docs/reference/QueryCache"},
135+
{from: "reference/MutationCache", to: "docs/reference/MutationCache"},
136+
{from: "reference/QueryObserver", to: "docs/reference/QueryObserver"},
137+
{from: "reference/InfiniteQueryObserver", to: "docs/reference/InfiniteQueryObserver"},
138+
{from: "reference/QueriesObserver", to: "docs/reference/QueriesObserver"},
139+
{from: "reference/QueryErrorResetBoundary", to: "docs/framework/react/reference/QueryErrorResetBoundary"},
140+
{from: "reference/useQueryErrorResetBoundary", to: "docs/framework/react/reference/useQueryErrorResetBoundary"},
141+
{from: "reference/focusManager", to: "docs/reference/focusManager"},
142+
{from: "reference/onlineManager", to: "docs/reference/onlineManager"},
143+
{from: "reference/hydration", to: "docs/framework/react/reference/hydration"},
144+
{from: "reference/useQuery", to: "docs/framework/react/reference/useQuery"},
145+
{from: "reference/QueryClient", to: "docs/reference/QueryClient"},
146+
{from: "examples/basic", to: "docs/framework/react/examples/basic"},
147+
// {from: '',to: ''},
148+
]
149+
150+
/**
151+
Features that have been removed in v5
152+
*/
153+
// prettier-ignore
154+
const reactQueryV3RemovedInV5List = [
155+
{from: "guides/custom-logger", to: "docs/framework/react/guides/migrating-to-v5#the-deprecated-custom-logger-has-been-removed"},
156+
{from: "plugins/createWebStoragePersister", to: "docs/framework/react/guides/migrating-to-react-query-4#persistqueryclient-and-the-corresponding-persister-plugins-are-no-longer-experimental-and-have-been-renamed"},
157+
{from: "plugins/createAsyncStoragePersister", to: "docs/framework/react/guides/migrating-to-react-query-4#persistqueryclient-and-the-corresponding-persister-plugins-are-no-longer-experimental-and-have-been-renamed"},
158+
]
159+
160+
/*
161+
Community resources section to new location
162+
*/
163+
// prettier-ignore
164+
const queryCommunityLinks = [
165+
{
166+
from: 'docs/framework/react/community/tkdodos-blog',
167+
to: 'docs/community-resources',
168+
},
169+
{
170+
from: 'docs/framework/react/community/community-projects',
171+
to: 'docs/community-resources',
172+
},
173+
{
174+
from: 'docs/framework/solid/community/tkdodos-blog',
175+
to: 'docs/community-resources',
176+
},
177+
{
178+
from: 'docs/framework/solid/community/community-projects',
179+
to: 'docs/community-resources',
180+
},
181+
{
182+
from: 'docs/framework/vue/community/tkdodos-blog',
183+
to: 'docs/community-resources',
184+
},
185+
{
186+
from: 'docs/framework/vue/community/community-projects',
187+
to: 'docs/community-resources',
188+
},
189+
{
190+
from: 'docs/framework/react/videos',
191+
to: 'docs/community-resources',
192+
},
193+
]
194+
36195
export const router: LibrarySlim = {
37196
id: 'router',
38197
name: 'TanStack Router',
@@ -62,6 +221,25 @@ export const router: LibrarySlim = {
62221
installPath: 'framework/$framework/quick-start',
63222
legacyPackages: ['react-location'],
64223
hideCodesandboxUrl: true,
224+
handleRedirects: (href) => {
225+
if (href.includes('router/latest/docs/framework/react/start')) {
226+
throw redirect({
227+
href: href.replace(
228+
'router/latest/docs/framework/react/start',
229+
'start/latest/docs/framework/react',
230+
),
231+
})
232+
}
233+
234+
if (href.includes('/router/latest/docs/framework/react/examples/start')) {
235+
throw redirect({
236+
href: href.replace(
237+
'router/latest/docs/framework/react/examples/start',
238+
'start/latest/docs/framework/react/examples/start',
239+
),
240+
})
241+
}
242+
},
65243
}
66244

67245
export const start: LibrarySlim = {
@@ -132,8 +310,49 @@ export const table: LibrarySlim = {
132310
defaultDocs: 'introduction',
133311
corePackageName: '@tanstack/table-core',
134312
legacyPackages: ['react-table'],
313+
handleRedirects: (href) => {
314+
handleRedirects(
315+
reactTableV7List,
316+
href,
317+
'/table/v7',
318+
'/table/v8',
319+
'from=reactTableV7',
320+
)
321+
},
135322
}
136323

324+
// prettier-ignore
325+
const reactTableV7List = [
326+
{from: 'docs/api/overview',to: 'docs/overview',},
327+
{from: 'docs/api/useColumnOrder',to: 'docs/api/features/column-ordering',},
328+
{from: 'docs/api/useExpanded',to: 'docs/api/features/expanding',},
329+
{from: 'docs/api/useFilters',to: 'docs/api/features/filters',},
330+
{from: 'docs/api/useGlobalFilter',to: 'docs/api/features/filters',},
331+
{from: 'docs/api/useGroupBy',to: 'docs/api/features/grouping',},
332+
{from: 'docs/api/usePagination',to: 'docs/api/features/pagination',},
333+
{from: 'docs/api/useResizeColumns',to: 'docs/api/features/column-sizing',},
334+
{from: 'docs/api/useRowSelect',to: 'docs/api/features/row-selection',},
335+
{from: 'docs/api/useSortBy',to: 'docs/api/features/sorting',},
336+
{from: 'docs/api/useTable',to: 'docs/guide/tables',},
337+
{from: 'docs/examples/basic',to: 'docs/framework/react/examples/basic',},
338+
{from: 'docs/examples/filtering',to: 'docs/framework/react/examples/filters',},
339+
{from: 'docs/examples/footers',to: 'docs/framework/react/examples/basic',},
340+
{from: 'docs/examples/grouping',to: 'docs/framework/react/examples/grouping',},
341+
{from: 'docs/examples/pagination-controlled',to: 'docs/framework/react/examples/pagination-controlled',},
342+
{from: 'docs/examples/pagination',to: 'docs/framework/react/examples/pagination',},
343+
{from: 'docs/examples/sorting',to: 'docs/framework/react/examples/sorting',},
344+
{from: 'docs/examples/row-selection',to: 'docs/framework/react/examples/row-selection',},
345+
{from: 'docs/examples/row-selection-with-pagination',to: 'docs/framework/react/examples/row-selection',},
346+
{from: 'docs/examples/expanding',to: 'docs/framework/react/examples/expanding',},
347+
{from: 'docs/examples/editable-data',to: 'docs/framework/react/examples/editable-data',},
348+
{from: 'docs/examples/column-ordering',to: 'docs/framework/react/examples/column-ordering',},
349+
{from: 'docs/examples/column-hiding',to: 'docs/framework/react/examples/column-visibility',},
350+
{from: 'docs/examples/column-resizing',to: 'docs/framework/react/examples/column-sizing',},
351+
{from: 'docs/installation',to: 'docs/installation',},
352+
{from: 'docs/overview',to: 'docs/introduction',},
353+
{from: 'docs/quick-start',to: 'docs/overview',},
354+
]
355+
137356
export const form: LibrarySlim = {
138357
id: 'form',
139358
name: 'TanStack Form',

0 commit comments

Comments
 (0)