shared zod types and drizzle schema

This commit is contained in:
Oliver Bryan
2025-12-13 21:36:32 +00:00
parent b2284b1b30
commit 9d381ca4ff
13 changed files with 1269 additions and 1987 deletions

View File

@@ -1,35 +1,36 @@
{
"name": "@issue/frontend",
"version": "0.1.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"tauri": "tauri dev"
},
"dependencies": {
"@radix-ui/react-slot": "^1.2.4",
"@tailwindcss/vite": "^4.1.18",
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-opener": "^2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.561.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-router-dom": "^7.10.1",
"tailwind-merge": "^3.4.0",
"tailwindcss": "^4.1.18"
},
"devDependencies": {
"@tauri-apps/cli": "^2",
"@types/node": "^25.0.1",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.6.0",
"tw-animate-css": "^1.4.0",
"typescript": "~5.8.3",
"vite": "^7.0.4"
}
"name": "@issue/frontend",
"version": "0.1.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview",
"tauri": "export __NV_DISABLE_EXPLICIT_SYNC=1 && tauri dev"
},
"dependencies": {
"@issue/shared": "workspace:*",
"@radix-ui/react-slot": "^1.2.4",
"@tailwindcss/vite": "^4.1.18",
"@tauri-apps/api": "^2",
"@tauri-apps/plugin-opener": "^2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.561.0",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-router-dom": "^7.10.1",
"tailwind-merge": "^3.4.0",
"tailwindcss": "^4.1.18"
},
"devDependencies": {
"@tauri-apps/cli": "^2",
"@types/node": "^25.0.1",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.6.0",
"tw-animate-css": "^1.4.0",
"typescript": "~5.8.3",
"vite": "^7.0.4"
}
}

View File

@@ -1,17 +1,18 @@
import { CloudSync, RefreshCw } from "lucide-react";
import { useState } from "react";
import { Button } from "@/components/ui/button";
import { IssueRecord } from "@issue/shared";
function Issue({ issue }: { issue: any }) {
function Issue({ issue }: { issue: IssueRecord }) {
return (
<div className="w-sm p-4 border">
import {Button} from "@/components/ui/button"; [{issue.id}] {issue.title}
[{issue.id}] {issue.title}
</div>
);
}
function Index() {
const [issues, setIssues] = useState([]);
const [issues, setIssues] = useState<IssueRecord[]>([]);
const serverURL = import.meta.env.SERVER_URL?.trim() || "http://localhost:3000";
@@ -45,14 +46,9 @@ function Index() {
</div>
{issues.length > 0 && (
<>
{issues.map((issue: any) => (
<Issue key={issue.id} issue={issue} />
))}
<pre className="w-2xl max-h-96 overflow-auto p-4 border bg-">
{JSON.stringify(issues, null, 2)}
</pre>
</>
<pre className="w-2xl max-h-96 overflow-auto p-4 border bg-">
{JSON.stringify(issues, null, 2)}
</pre>
)}
</main>
);