Skip to content

Commit 54933cb

Browse files
committed
fix: migrating to shellComponent
1 parent 178fb2b commit 54933cb

File tree

6 files changed

+24
-24
lines changed

6 files changed

+24
-24
lines changed

frameworks/react-cra/project/base/src/routes/__root.tsx.ejs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<% if (!fileRouter) { ignoreFile() } %>import { <% if (addOnEnabled.start) { %>
2-
HeadContent, <% } %>Outlet<% if (addOnEnabled.start) { %>
3-
, Scripts<% } %>, <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %> } from '@tanstack/react-router'
2+
HeadContent<% } else { %>Outlet<% } %><% if (addOnEnabled.start) { %>, Scripts<% } %>, <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %> } from '@tanstack/react-router'
43
import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'
54
<% if (addOns.length) { %>
65
import Header from '../components/Header'
@@ -46,24 +45,20 @@ export const Route = <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteW
4645
],
4746
}),
4847
<% } %>
48+
<% if (addOnEnabled.start) { %>
49+
shellComponent: RootDocument
50+
<% } else { %>
4951
component: () => (
50-
<% if (addOnEnabled.start) { %><RootDocument><% } else { %><><% } %>
51-
<% for(const integration of integrations.filter(i => i.type === 'provider')) { %>
52-
<<%= integration.jsName %>>
53-
<% } %>
54-
<% if (addOns.length) { %>
55-
<Header />
56-
<% } %>
57-
<Outlet />
52+
<>
53+
<% for(const integration of integrations.filter(i => i.type === 'provider')) { %><<%= integration.jsName %>>
54+
<% } %><% if (addOns.length) { %><Header />
55+
<% } %><Outlet />
5856
<TanStackRouterDevtools />
59-
<% for(const integration of integrations.filter(i => i.type === 'layout')) { %>
60-
<<%= integration.jsName %> />
61-
<% } %>
62-
<% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %>
63-
</<%= integration.jsName %>>
57+
<% for(const integration of integrations.filter(i => i.type === 'layout')) { %><<%= integration.jsName %> />
58+
<% } %><% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %></<%= integration.jsName %>>
6459
<% } %>
65-
<% if (addOnEnabled.start) { %></RootDocument><% } else { %></><% } %>
66-
),
60+
</>)
61+
<% } %>
6762
})
6863

6964
<% if (addOnEnabled.start) { %>
@@ -74,8 +69,13 @@ function RootDocument({ children }: { children: React.ReactNode }) {
7469
<HeadContent />
7570
</head>
7671
<body>
77-
{children}
78-
<Scripts />
72+
<% for(const integration of integrations.filter(i => i.type === 'provider')) { %><<%= integration.jsName %>>
73+
<% } %><% if (addOns.length) { %><Header />
74+
<% } %>{children}
75+
<TanStackRouterDevtools />
76+
<% for(const integration of integrations.filter(i => i.type === 'layout')) { %><<%= integration.jsName %> />
77+
<% } %><% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %></<%= integration.jsName %>>
78+
<% } %><Scripts />
7979
</body>
8080
</html>
8181
)

frameworks/react-cra/tests/snapshots/react-cra/cr-js-form-npm.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"/src/hooks/demo.form.js": "import { createFormHook } from '@tanstack/react-form'\n\nimport {\n Select,\n SubscribeButton,\n TextArea,\n TextField,\n} from '../components/demo.FormComponents'\nimport { fieldContext, formContext } from './demo.form-context'\n\nexport const { useAppForm } = createFormHook({\n fieldComponents: {\n TextField,\n Select,\n TextArea,\n },\n formComponents: {\n SubscribeButton,\n },\n fieldContext,\n formContext,\n})\n",
1313
"/src/main.jsx": "import { StrictMode } from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { RouterProvider, createRouter } from '@tanstack/react-router'\n\n// Import the generated route tree\nimport { routeTree } from './routeTree.gen'\n\nimport './styles.css'\nimport reportWebVitals from './reportWebVitals.js'\n\n// Create a new router instance\nconst router = createRouter({\n routeTree,\n context: {},\n defaultPreload: 'intent',\n scrollRestoration: true,\n defaultStructuralSharing: true,\n defaultPreloadStaleTime: 0,\n})\n\n// Register the router instance for type safety\ndeclare module '@tanstack/react-router' {\n interface Register {\n router: typeof router\n }\n}\n\n// Render the app\nconst rootElement = document.getElementById('app')\nif (rootElement && !rootElement.innerHTML) {\n const root = ReactDOM.createRoot(rootElement)\n root.render(\n <StrictMode>\n <RouterProvider router={router} />\n </StrictMode>,\n )\n}\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n",
1414
"/src/reportWebVitals.js": "const reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ onCLS, onINP, onFCP, onLCP, onTTFB }) => {\n onCLS(onPerfEntry)\n onINP(onPerfEntry)\n onFCP(onPerfEntry)\n onLCP(onPerfEntry)\n onTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n",
15-
"/src/routes/__root.jsx": "import { Outlet, createRootRoute } from '@tanstack/react-router'\nimport { TanStackRouterDevtools } from '@tanstack/react-router-devtools'\n\nimport Header from '../components/Header'\n\nexport const Route = createRootRoute({\n component: () => (\n <>\n <Header />\n\n <Outlet />\n <TanStackRouterDevtools />\n </>\n ),\n})\n",
15+
"/src/routes/__root.jsx": "import { Outlet, createRootRoute } from '@tanstack/react-router'\nimport { TanStackRouterDevtools } from '@tanstack/react-router-devtools'\n\nimport Header from '../components/Header'\n\nexport const Route = createRootRoute({\n component: () => (\n <>\n <Header />\n <Outlet />\n <TanStackRouterDevtools />\n </>\n ),\n})\n",
1616
"/src/routes/demo.form.address.jsx": "import { createFileRoute } from '@tanstack/react-router'\n\nimport { useAppForm } from '../hooks/demo.form'\n\nexport const Route = createFileRoute('/demo/form')({\n component: AddressForm,\n})\n\nfunction AddressForm() {\n const form = useAppForm({\n defaultValues: {\n fullName: '',\n email: '',\n address: {\n street: '',\n city: '',\n state: '',\n zipCode: '',\n country: '',\n },\n phone: '',\n },\n validators: {\n onBlur: ({ value }) => {\n const errors = {\n fields: {},\n } as {\n fields: Record<string, string>\n }\n if (value.fullName.trim().length === 0) {\n errors.fields.fullName = 'Full name is required'\n }\n return errors\n },\n },\n onSubmit: ({ value }) => {\n console.log(value)\n // Show success message\n alert('Form submitted successfully!')\n },\n })\n\n return (\n <div\n className=\"flex items-center justify-center min-h-screen bg-gradient-to-br from-purple-100 to-blue-100 p-4 text-white\"\n style={{\n backgroundImage:\n 'radial-gradient(50% 50% at 5% 40%, #f4a460 0%, #8b4513 70%, #1a0f0a 100%)',\n }}\n >\n <div className=\"w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n e.stopPropagation()\n form.handleSubmit()\n }}\n className=\"space-y-6\"\n >\n <form.AppField name=\"fullName\">\n {(field) => <field.TextField label=\"Full Name\" />}\n </form.AppField>\n\n <form.AppField\n name=\"email\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'Email is required'\n }\n if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(value)) {\n return 'Invalid email address'\n }\n return undefined\n },\n }}\n >\n {(field) => <field.TextField label=\"Email\" />}\n </form.AppField>\n\n <form.AppField\n name=\"address.street\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'Street address is required'\n }\n return undefined\n },\n }}\n >\n {(field) => <field.TextField label=\"Street Address\" />}\n </form.AppField>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <form.AppField\n name=\"address.city\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'City is required'\n }\n return undefined\n },\n }}\n >\n {(field) => <field.TextField label=\"City\" />}\n </form.AppField>\n <form.AppField\n name=\"address.state\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'State is required'\n }\n return undefined\n },\n }}\n >\n {(field) => <field.TextField label=\"State\" />}\n </form.AppField>\n <form.AppField\n name=\"address.zipCode\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'Zip code is required'\n }\n if (!/^\\d{5}(-\\d{4})?$/.test(value)) {\n return 'Invalid zip code format'\n }\n return undefined\n },\n }}\n >\n {(field) => <field.TextField label=\"Zip Code\" />}\n </form.AppField>\n </div>\n\n <form.AppField\n name=\"address.country\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'Country is required'\n }\n return undefined\n },\n }}\n >\n {(field) => (\n <field.Select\n label=\"Country\"\n values={[\n { label: 'United States', value: 'US' },\n { label: 'Canada', value: 'CA' },\n { label: 'United Kingdom', value: 'UK' },\n { label: 'Australia', value: 'AU' },\n { label: 'Germany', value: 'DE' },\n { label: 'France', value: 'FR' },\n { label: 'Japan', value: 'JP' },\n ]}\n placeholder=\"Select a country\"\n />\n )}\n </form.AppField>\n\n <form.AppField\n name=\"phone\"\n validators={{\n onBlur: ({ value }) => {\n if (!value || value.trim().length === 0) {\n return 'Phone number is required'\n }\n if (\n !/^(\\+\\d{1,3})?\\s?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/.test(\n value,\n )\n ) {\n return 'Invalid phone number format'\n }\n return undefined\n },\n }}\n >\n {(field) => (\n <field.TextField label=\"Phone\" placeholder=\"123-456-7890\" />\n )}\n </form.AppField>\n\n <div className=\"flex justify-end\">\n <form.AppForm>\n <form.SubscribeButton label=\"Submit\" />\n </form.AppForm>\n </div>\n </form>\n </div>\n </div>\n )\n}\n",
1717
"/src/routes/demo.form.simple.jsx": "import { createFileRoute } from '@tanstack/react-router'\nimport { z } from 'zod'\n\nimport { useAppForm } from '../hooks/demo.form'\n\nexport const Route = createFileRoute('/demo/form')({\n component: SimpleForm,\n})\n\nconst schema = z.object({\n title: z.string().min(1, 'Title is required'),\n description: z.string().min(1, 'Description is required'),\n})\n\nfunction SimpleForm() {\n const form = useAppForm({\n defaultValues: {\n title: '',\n description: '',\n },\n validators: {\n onBlur: schema,\n },\n onSubmit: ({ value }) => {\n console.log(value)\n // Show success message\n alert('Form submitted successfully!')\n },\n })\n\n return (\n <div\n className=\"flex items-center justify-center min-h-screen bg-gradient-to-br from-purple-100 to-blue-100 p-4 text-white\"\n style={{\n backgroundImage:\n 'radial-gradient(50% 50% at 5% 40%, #add8e6 0%, #0000ff 70%, #00008b 100%)',\n }}\n >\n <div className=\"w-full max-w-2xl p-8 rounded-xl backdrop-blur-md bg-black/50 shadow-xl border-8 border-black/10\">\n <form\n onSubmit={(e) => {\n e.preventDefault()\n e.stopPropagation()\n form.handleSubmit()\n }}\n className=\"space-y-6\"\n >\n <form.AppField name=\"title\">\n {(field) => <field.TextField label=\"Title\" />}\n </form.AppField>\n\n <form.AppField name=\"description\">\n {(field) => <field.TextArea label=\"Description\" />}\n </form.AppField>\n\n <div className=\"flex justify-end\">\n <form.AppForm>\n <form.SubscribeButton label=\"Submit\" />\n </form.AppForm>\n </div>\n </form>\n </div>\n </div>\n )\n}\n",
1818
"/src/routes/index.jsx": "import { createFileRoute } from '@tanstack/react-router'\nimport logo from '../logo.svg'\nimport '../App.css'\n\nexport const Route = createFileRoute('/')({\n component: App,\n})\n\nfunction App() {\n return (\n <div className=\"App\">\n <header className=\"App-header\">\n <img src={logo} className=\"App-logo\" alt=\"logo\" />\n <p>\n Edit <code>src/routes/index.tsx</code> and save to reload.\n </p>\n <a\n className=\"App-link\"\n href=\"https://reactjs.org\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Learn React\n </a>\n <a\n className=\"App-link\"\n href=\"https://tanstack.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Learn TanStack\n </a>\n </header>\n </div>\n )\n}\n",

0 commit comments

Comments
 (0)