Skip to content

Commit 9b80cd7

Browse files
committed
working add-on-developer, woot
1 parent dbbdb38 commit 9b80cd7

File tree

5 files changed

+995
-165
lines changed

5 files changed

+995
-165
lines changed

cli/add-on-developer/TESTING.md

Lines changed: 0 additions & 9 deletions
This file was deleted.

cli/add-on-developer/src/components/ui/tree-view.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,6 @@ const TreeNode = ({
277277
isDragOver && dragOverVariants(),
278278
)}
279279
onClick={() => {
280-
console.log(1)
281280
handleSelectChange(item)
282281
item.onClick?.()
283282
}}
@@ -386,7 +385,6 @@ const TreeLeaf = React.forwardRef<
386385
)}
387386
onClick={() => {
388387
handleSelectChange(item)
389-
console.log(2)
390388
item.onClick?.()
391389
}}
392390
draggable={!!item.draggable}

cli/add-on-developer/src/routes/__root.tsx

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,54 +3,44 @@ import {
33
HeadContent,
44
Scripts,
55
createRootRouteWithContext,
6-
} from "@tanstack/react-router";
7-
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools";
6+
} from '@tanstack/react-router'
87

9-
import Header from "../components/Header";
8+
import appCss from '../styles.css?url'
109

11-
import TanstackQueryLayout from "../integrations/tanstack-query/layout";
12-
13-
import appCss from "../styles.css?url";
14-
15-
import type { QueryClient } from "@tanstack/react-query";
10+
import type { QueryClient } from '@tanstack/react-query'
1611

1712
interface MyRouterContext {
18-
queryClient: QueryClient;
13+
queryClient: QueryClient
1914
}
2015

2116
export const Route = createRootRouteWithContext<MyRouterContext>()({
2217
head: () => ({
2318
meta: [
2419
{
25-
charSet: "utf-8",
20+
charSet: 'utf-8',
2621
},
2722
{
28-
name: "viewport",
29-
content: "width=device-width, initial-scale=1",
23+
name: 'viewport',
24+
content: 'width=device-width, initial-scale=1',
3025
},
3126
{
32-
title: "Add-On Debugger",
27+
title: 'Add-On Debugger',
3328
},
3429
],
3530
links: [
3631
{
37-
rel: "stylesheet",
32+
rel: 'stylesheet',
3833
href: appCss,
3934
},
4035
],
4136
}),
4237

4338
component: () => (
4439
<RootDocument>
45-
<Header />
46-
4740
<Outlet />
48-
<TanStackRouterDevtools />
49-
50-
<TanstackQueryLayout />
5141
</RootDocument>
5242
),
53-
});
43+
})
5444

5545
function RootDocument({ children }: { children: React.ReactNode }) {
5646
return (
@@ -63,5 +53,5 @@ function RootDocument({ children }: { children: React.ReactNode }) {
6353
<Scripts />
6454
</body>
6555
</html>
66-
);
56+
)
6757
}
Lines changed: 54 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { useEffect, useMemo } from 'react'
1+
import { useMemo, useState } from 'react'
22
import { createFileRoute } from '@tanstack/react-router'
33
import { FileText, Folder } from 'lucide-react'
4-
5-
import { Button } from '@/components/ui/button'
4+
import { createServerFn } from '@tanstack/react-start'
65

76
import type { TreeDataItem } from '@/components/ui/tree-view'
87

@@ -14,40 +13,53 @@ import {
1413

1514
import { TreeView } from '@/components/ui/tree-view'
1615

16+
const getAddons = createServerFn({
17+
method: 'GET',
18+
}).handler(() => {
19+
return getAllAddOns('react', 'file-router')
20+
})
21+
22+
const runCreateApp = createServerFn({
23+
method: 'POST',
24+
}).handler(async () => {
25+
const { output, environment } = createMemoryEnvironment()
26+
await createApp(
27+
{
28+
addOns: false,
29+
framework: 'react',
30+
chosenAddOns: [],
31+
git: true,
32+
mode: 'code-router',
33+
packageManager: 'npm',
34+
projectName: 'foo',
35+
tailwind: false,
36+
toolchain: 'none',
37+
typescript: false,
38+
variableValues: {},
39+
},
40+
{
41+
silent: true,
42+
environment,
43+
cwd: process.env.PROJECT_PATH,
44+
},
45+
)
46+
return output
47+
})
48+
1749
export const Route = createFileRoute('/')({
1850
component: App,
1951
loader: async () => {
20-
const { output, environment } = createMemoryEnvironment()
21-
await createApp(
22-
{
23-
addOns: false,
24-
framework: 'react',
25-
chosenAddOns: [],
26-
git: true,
27-
mode: 'code-router',
28-
packageManager: 'npm',
29-
projectName: 'foo',
30-
tailwind: false,
31-
toolchain: 'none',
32-
typescript: false,
33-
variableValues: {},
34-
},
35-
{
36-
silent: true,
37-
environment,
38-
cwd: process.env.PROJECT_PATH,
39-
},
40-
)
4152
return {
42-
addOns: await getAllAddOns('react', 'file-router'),
53+
addOns: await getAddons(),
4354
projectPath: process.env.PROJECT_PATH!,
44-
output,
55+
output: await runCreateApp(),
4556
}
4657
},
4758
})
4859

4960
function App() {
5061
const { projectPath, output } = Route.useLoaderData()
62+
const [selectedFile, setSelectedFile] = useState<string | null>(null)
5163

5264
const tree = useMemo(() => {
5365
const treeData: Array<TreeDataItem> = []
@@ -61,43 +73,43 @@ function App() {
6173
currentLevel = existingNode.children || []
6274
} else {
6375
const newNode: TreeDataItem = {
64-
id: `${file}-${index}`,
76+
id: index === parts.length - 1 ? file : `${file}-${index}`,
6577
name: part,
6678
children: index < parts.length - 1 ? [] : undefined,
6779
icon:
6880
index < parts.length - 1
6981
? () => <Folder className="w-4 h-4 mr-2" />
7082
: () => <FileText className="w-4 h-4 mr-2" />,
71-
onClick: () => {
72-
console.log('clicked')
73-
console.log('clicked', newNode)
74-
},
83+
onClick:
84+
index === parts.length - 1
85+
? () => {
86+
setSelectedFile(file)
87+
}
88+
: undefined,
7589
}
7690
currentLevel.push(newNode)
7791
currentLevel = newNode.children!
7892
}
7993
})
8094
})
81-
console.log(JSON.stringify(treeData, null))
8295
return treeData
8396
}, [projectPath, output])
8497

85-
console.log('Hello world')
86-
87-
useEffect(() => {
88-
console.log('output', output)
89-
console.log('projectPath', projectPath)
90-
console.log('tree', tree)
91-
}, [output, projectPath, tree])
92-
9398
return (
94-
<div className="p-5">
95-
<Button onClick={() => console.log('clicked')}>Click me</Button>
99+
<div className="p-5 flex flex-row">
96100
<TreeView
97101
data={tree}
98102
defaultNodeIcon={() => <Folder className="w-4 h-4 mr-2" />}
99103
defaultLeafIcon={() => <FileText className="w-4 h-4 mr-2" />}
104+
className="max-w-1/4 w-1/4 pr-2"
100105
/>
106+
<div className="max-w-3/4 w-3/4 pl-2">
107+
<pre>
108+
{selectedFile
109+
? output.files[selectedFile] || 'Select a file to view its content'
110+
: null}
111+
</pre>
112+
</div>
101113
</div>
102114
)
103115
}

0 commit comments

Comments
 (0)