@tscircuit/fake-snippets 0.0.77 → 0.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,367 +0,0 @@
1
- import { useCreatePackageFilesMutation } from "@/hooks/use-create-package-files-mutation"
2
- import { useCreatePackageMutation } from "@/hooks/use-create-package-mutation"
3
- import { useCreatePackageReleaseMutation } from "@/hooks/use-create-package-release-mutation"
4
- import { useForkPackageMutation } from "@/hooks/use-fork-package-mutation"
5
- import { usePackageById } from "@/hooks/use-package-by-package-id"
6
- import { usePackageByName } from "@/hooks/use-package-by-package-name"
7
- import { usePackageFile, usePackageFiles } from "@/hooks/use-package-files"
8
- import {
9
- useLatestPackageRelease,
10
- usePackageRelease,
11
- usePackageReleaseByNameAndVersion,
12
- } from "@/hooks/use-package-release"
13
- import { useEffect, useState } from "react"
14
- import { useLocation } from "wouter"
15
-
16
- export const BetaPage = () => {
17
- // Get the current path and extract author/packageName
18
- const [location] = useLocation()
19
- const pathParts = location.split("/")
20
- const author = pathParts[2]
21
- const urlPackageName = pathParts[3]
22
- const packageNameWithVersion =
23
- author && urlPackageName ? `${author}/${urlPackageName}` : null
24
-
25
- // States for package creation flow
26
- const [createdPackageId, setCreatedPackageId] = useState<string | null>(null)
27
- const [createdReleaseId, setCreatedReleaseId] = useState<string | null>(null)
28
- const [createdFileId, setCreatedFileId] = useState<string | null>(null)
29
- const [forkedPackageId, setForkedPackageId] = useState<string | null>(null)
30
- const [packageName, setPackageName] = useState("")
31
- const [selectedFileId, setSelectedFileId] = useState<string | null>(null)
32
- const [isLoading, setIsLoading] = useState(!!packageNameWithVersion)
33
-
34
- // Load existing package if URL params are provided
35
- const { data: existingPackage, isSuccess: packageLoaded } = usePackageByName(
36
- packageNameWithVersion,
37
- )
38
- // Use the new hook instead of usePackageReleaseByNameAndVersion
39
- const { data: existingRelease, isSuccess: releaseLoaded } =
40
- useLatestPackageRelease(existingPackage?.package_id)
41
-
42
- // Log for debugging
43
- console.log("Location path:", location)
44
- console.log("Author:", author, "Package:", urlPackageName)
45
- console.log("Package name with version:", packageNameWithVersion)
46
- console.log("Existing package:", existingPackage)
47
- console.log("Existing release:", existingRelease)
48
-
49
- // Set IDs from existing package when they're loaded
50
- useEffect(() => {
51
- if (existingPackage) {
52
- console.log("Setting package ID:", existingPackage.package_id)
53
- setCreatedPackageId(existingPackage.package_id)
54
- setPackageName(existingPackage.name)
55
- }
56
- }, [existingPackage])
57
-
58
- useEffect(() => {
59
- if (existingRelease) {
60
- console.log("Setting release ID:", existingRelease.package_release_id)
61
- setCreatedReleaseId(existingRelease.package_release_id)
62
-
63
- // Force refetch package files by setting a dummy state to trigger useEffect
64
- setTimeout(() => {
65
- console.log("Triggering files refetch...")
66
- setIsLoading(false)
67
- }, 500)
68
- }
69
- }, [existingRelease])
70
-
71
- // Update loading state
72
- useEffect(() => {
73
- if (packageNameWithVersion) {
74
- if (packageLoaded && releaseLoaded) {
75
- setIsLoading(false)
76
- }
77
- } else {
78
- setIsLoading(false)
79
- }
80
- }, [packageNameWithVersion, packageLoaded, releaseLoaded])
81
-
82
- // Demo data
83
- const demoData = {
84
- package: {
85
- name: packageName,
86
- description: "Test package",
87
- is_private: false,
88
- },
89
- release: {
90
- version: "1.0.0",
91
- is_latest: true,
92
- },
93
- files: [
94
- {
95
- file_path: "src/index.ts",
96
- content_text: 'export const hello = () => console.log("Hello!");',
97
- },
98
- {
99
- file_path: "src/utils.ts",
100
- content_text: "export const add = (a: number, b: number) => a + b;",
101
- },
102
- {
103
- file_path: "README.md",
104
- content_text: "# Test Package\n\nA test package with multiple files.",
105
- },
106
- ],
107
- }
108
-
109
- // Mutations and queries
110
- const { mutate: createPackage, isLoading: isCreatingPackage } =
111
- useCreatePackageMutation({
112
- onSuccess: (pkg) => setCreatedPackageId(pkg.package_id),
113
- })
114
- const { mutate: createRelease, isLoading: isCreatingRelease } =
115
- useCreatePackageReleaseMutation({
116
- onSuccess: (release) => setCreatedReleaseId(release.package_release_id),
117
- })
118
- const { mutate: createFile, isLoading: isCreatingFile } =
119
- useCreatePackageFilesMutation({
120
- onSuccess: (file) => setCreatedFileId(file.package_file_id),
121
- })
122
- const { mutate: forkPackage, isLoading: isForking } = useForkPackageMutation({
123
- onSuccess: (forkedPackage) => setForkedPackageId(forkedPackage.package_id),
124
- })
125
-
126
- // Package data
127
- const { data: packageData } = usePackageById(createdPackageId)
128
-
129
- // Package release data
130
- const { data: releaseData } = useLatestPackageRelease(createdPackageId, null)
131
-
132
- // All package files for the release
133
- const { data: packageFiles, isLoading: filesLoading } =
134
- usePackageFiles(createdReleaseId)
135
-
136
- // Log the files data for debugging
137
- console.log(
138
- "Package files:",
139
- packageFiles,
140
- "createdReleaseId:",
141
- createdReleaseId,
142
- )
143
-
144
- // Individual file data when selected
145
- const { data: selectedFileData } = usePackageFile(
146
- selectedFileId ? { package_file_id: selectedFileId } : null,
147
- )
148
-
149
- const { data: forkedPackageData } = usePackageById(forkedPackageId)
150
-
151
- if (isLoading) {
152
- return (
153
- <div className="p-4">
154
- <h2 className="text-lg font-semibold mb-4">Loading package data...</h2>
155
- </div>
156
- )
157
- }
158
-
159
- return (
160
- <div className="p-4">
161
- <h1 className="text-xl font-bold mb-4">
162
- {packageNameWithVersion
163
- ? `Package: ${packageNameWithVersion}`
164
- : "Package Management Demo"}
165
- </h1>
166
- {!packageNameWithVersion && (
167
- <div className="mb-4">
168
- <div className="flex items-center gap-2">
169
- <input
170
- type="text"
171
- value={packageName}
172
- onChange={(e) => setPackageName(e.target.value)}
173
- placeholder="test-package"
174
- className="flex-1 px-3 py-2 border rounded text-sm"
175
- disabled={Boolean(createdPackageId)}
176
- />
177
- </div>
178
- </div>
179
- )}
180
-
181
- {/* Package creation UI only shown when not viewing an existing package */}
182
- {!packageNameWithVersion && (
183
- <div className="grid grid-cols-4 gap-4 mb-4">
184
- {/* Package Creation */}
185
- <div className="bg-white p-4 rounded-lg shadow">
186
- <div className="flex items-center justify-between mb-2">
187
- <h2 className="font-semibold">1. Create Package</h2>
188
- <button
189
- onClick={() => createPackage(demoData.package)}
190
- disabled={
191
- isCreatingPackage || Boolean(createdPackageId) || !packageName
192
- }
193
- className="bg-blue-500 text-white px-3 py-1 text-sm rounded hover:bg-blue-600 disabled:bg-blue-300"
194
- >
195
- {createdPackageId ? "✓" : "Create"}
196
- </button>
197
- </div>
198
- {packageData && (
199
- <pre className="text-xs bg-gray-50 p-2 rounded overflow-auto max-h-32">
200
- {JSON.stringify(packageData, null, 2)}
201
- </pre>
202
- )}
203
- </div>
204
-
205
- {/* Release Creation */}
206
- <div className="bg-white p-4 rounded-lg shadow">
207
- <div className="flex items-center justify-between mb-2">
208
- <h2 className="font-semibold">2. Create Release</h2>
209
- <button
210
- onClick={() =>
211
- createdPackageId &&
212
- createRelease({
213
- package_id: createdPackageId,
214
- ...demoData.release,
215
- })
216
- }
217
- disabled={!createdPackageId || Boolean(createdReleaseId)}
218
- className="bg-blue-500 text-white px-3 py-1 text-sm rounded hover:bg-blue-600 disabled:bg-blue-300"
219
- >
220
- {createdReleaseId ? "✓" : "Create"}
221
- </button>
222
- </div>
223
- {releaseData && (
224
- <pre className="text-xs bg-gray-50 p-2 rounded overflow-auto max-h-32">
225
- {JSON.stringify(releaseData, null, 2)}
226
- </pre>
227
- )}
228
- </div>
229
-
230
- {/* File Creation */}
231
- <div className="bg-white p-4 rounded-lg shadow">
232
- <div className="flex items-center justify-between mb-2">
233
- <h2 className="font-semibold">3. Create Files</h2>
234
- <button
235
- onClick={() =>
236
- createdReleaseId &&
237
- Promise.all(
238
- demoData.files.map((file) =>
239
- createFile({
240
- package_release_id: createdReleaseId,
241
- ...file,
242
- }),
243
- ),
244
- )
245
- }
246
- disabled={!createdReleaseId || Boolean(createdFileId)}
247
- className="bg-blue-500 text-white px-3 py-1 text-sm rounded hover:bg-blue-600 disabled:bg-blue-300"
248
- >
249
- {createdFileId ? "✓" : "Create"}
250
- </button>
251
- </div>
252
- </div>
253
-
254
- {/* Fork Package */}
255
- <div className="bg-white p-4 rounded-lg shadow">
256
- <div className="flex items-center justify-between mb-2">
257
- <h2 className="font-semibold">4. Fork Package</h2>
258
- <button
259
- onClick={() =>
260
- createdPackageId && forkPackage(createdPackageId)
261
- }
262
- disabled={!createdPackageId || isForking}
263
- className="bg-green-500 text-white px-3 py-1 text-sm rounded hover:bg-green-600 disabled:bg-green-300"
264
- >
265
- {forkedPackageId ? "✓" : "Fork"}
266
- </button>
267
- </div>
268
- {forkedPackageData && (
269
- <pre className="text-xs bg-gray-50 p-2 rounded overflow-auto max-h-32">
270
- {JSON.stringify(forkedPackageData, null, 2)}
271
- </pre>
272
- )}
273
- </div>
274
- </div>
275
- )}
276
-
277
- {/* Package info section shown when viewing an existing package */}
278
- {packageNameWithVersion && packageData && (
279
- <div className="bg-white p-4 rounded-lg shadow mb-4">
280
- <h2 className="font-semibold mb-3">Package Information</h2>
281
- <div className="grid grid-cols-2 gap-4">
282
- <div>
283
- <div className="text-sm font-medium mb-1">ID:</div>
284
- <div className="text-sm text-gray-700">
285
- {packageData.package_id}
286
- </div>
287
- </div>
288
- <div>
289
- <div className="text-sm font-medium mb-1">Name:</div>
290
- <div className="text-sm text-gray-700">{packageData.name}</div>
291
- </div>
292
- <div>
293
- <div className="text-sm font-medium mb-1">Description:</div>
294
- <div className="text-sm text-gray-700">
295
- {packageData.description || "No description"}
296
- </div>
297
- </div>
298
- <div>
299
- <div className="text-sm font-medium mb-1">Visibility:</div>
300
- <div className="text-sm text-gray-700">
301
- {packageData.is_private ? "Private" : "Public"}
302
- </div>
303
- </div>
304
- </div>
305
- </div>
306
- )}
307
-
308
- {/* Second row: package data exploration */}
309
- <div className="grid grid-cols-2 gap-6">
310
- {/* Package Files List */}
311
- <div className="bg-white p-4 rounded-lg shadow">
312
- <h2 className="font-semibold mb-3">Package Files</h2>
313
- <div className="text-xs text-gray-600 mb-2">
314
- Release ID: {createdReleaseId || "None"}
315
- </div>
316
- {filesLoading ? (
317
- <div className="text-sm text-gray-500">Loading files...</div>
318
- ) : packageFiles && packageFiles.length > 0 ? (
319
- <div className="divide-y">
320
- {packageFiles.map((file) => (
321
- <button
322
- key={file.package_file_id}
323
- onClick={() => setSelectedFileId(file.package_file_id)}
324
- className={`text-left w-full py-2 px-1 text-sm hover:bg-gray-50 ${
325
- selectedFileId === file.package_file_id ? "bg-blue-50" : ""
326
- }`}
327
- >
328
- {file.file_path}
329
- </button>
330
- ))}
331
- </div>
332
- ) : (
333
- <div className="text-sm text-gray-500">
334
- {createdReleaseId
335
- ? "No files found. Files array length: " +
336
- (packageFiles ? packageFiles.length : "undefined")
337
- : "Create a release and files first"}
338
- </div>
339
- )}
340
- </div>
341
-
342
- {/* Selected File Content */}
343
- <div className="bg-white p-4 rounded-lg shadow">
344
- <h2 className="font-semibold mb-3">File Content</h2>
345
- {selectedFileData ? (
346
- <div>
347
- <div className="text-xs text-gray-500 mb-2">
348
- {selectedFileData.file_path}
349
- </div>
350
- <pre className="text-xs bg-gray-50 p-3 rounded overflow-auto border max-h-80">
351
- {selectedFileData.content_text}
352
- </pre>
353
- </div>
354
- ) : (
355
- <div className="text-sm text-gray-500">
356
- {packageFiles && packageFiles.length > 0
357
- ? "Select a file to view its content"
358
- : "Create files first"}
359
- </div>
360
- )}
361
- </div>
362
- </div>
363
- </div>
364
- )
365
- }
366
-
367
- export default BetaPage