|
3 | 3 |
|
4 | 4 | import { redirect } from '@tanstack/react-router' |
5 | 5 | import type { LibrarySlim, LibraryId } from './types' |
| 6 | +import { handleRedirects } from '~/utils/handleRedirects.server' |
6 | 7 |
|
7 | 8 | export const query: LibrarySlim = { |
8 | 9 | id: 'query', |
@@ -31,8 +32,166 @@ export const query: LibrarySlim = { |
31 | 32 | defaultDocs: 'framework/react/overview', |
32 | 33 | installPath: 'framework/$framework/installation', |
33 | 34 | 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 | + }, |
34 | 60 | } |
35 | 61 |
|
| 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 | + |
36 | 195 | export const router: LibrarySlim = { |
37 | 196 | id: 'router', |
38 | 197 | name: 'TanStack Router', |
@@ -62,6 +221,25 @@ export const router: LibrarySlim = { |
62 | 221 | installPath: 'framework/$framework/quick-start', |
63 | 222 | legacyPackages: ['react-location'], |
64 | 223 | 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 | + }, |
65 | 243 | } |
66 | 244 |
|
67 | 245 | export const start: LibrarySlim = { |
@@ -132,8 +310,49 @@ export const table: LibrarySlim = { |
132 | 310 | defaultDocs: 'introduction', |
133 | 311 | corePackageName: '@tanstack/table-core', |
134 | 312 | legacyPackages: ['react-table'], |
| 313 | + handleRedirects: (href) => { |
| 314 | + handleRedirects( |
| 315 | + reactTableV7List, |
| 316 | + href, |
| 317 | + '/table/v7', |
| 318 | + '/table/v8', |
| 319 | + 'from=reactTableV7', |
| 320 | + ) |
| 321 | + }, |
135 | 322 | } |
136 | 323 |
|
| 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 | + |
137 | 356 | export const form: LibrarySlim = { |
138 | 357 | id: 'form', |
139 | 358 | name: 'TanStack Form', |
|
0 commit comments