From 40234cb6ca61dcb1c1be9ef6b5ef9938ea0fd40f Mon Sep 17 00:00:00 2001 From: Lars Hampe Date: Wed, 23 Oct 2024 17:50:28 +0200 Subject: [PATCH 01/19] feat(changelog_public): add astro inital app --- apps/changelog_public/.gitignore | 24 ++++++++++ apps/changelog_public/README.md | 47 ++++++++++++++++++++ apps/changelog_public/astro.config.mjs | 9 ++++ apps/changelog_public/package.json | 22 +++++++++ apps/changelog_public/public/favicon.svg | 9 ++++ apps/changelog_public/src/env.d.ts | 1 + apps/changelog_public/src/pages/index.astro | 16 +++++++ apps/changelog_public/tsconfig.json | 7 +++ bun.lockb | Bin 502384 -> 523024 bytes 9 files changed, 135 insertions(+) create mode 100644 apps/changelog_public/.gitignore create mode 100644 apps/changelog_public/README.md create mode 100644 apps/changelog_public/astro.config.mjs create mode 100644 apps/changelog_public/package.json create mode 100644 apps/changelog_public/public/favicon.svg create mode 100644 apps/changelog_public/src/env.d.ts create mode 100644 apps/changelog_public/src/pages/index.astro create mode 100644 apps/changelog_public/tsconfig.json diff --git a/apps/changelog_public/.gitignore b/apps/changelog_public/.gitignore new file mode 100644 index 0000000..16d54bb --- /dev/null +++ b/apps/changelog_public/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ diff --git a/apps/changelog_public/README.md b/apps/changelog_public/README.md new file mode 100644 index 0000000..e34a99b --- /dev/null +++ b/apps/changelog_public/README.md @@ -0,0 +1,47 @@ +# Astro Starter Kit: Minimal + +```sh +npm create astro@latest -- --template minimal +``` + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/minimal) +[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/minimal) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/minimal/devcontainer.json) + +> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! + +## 🚀 Project Structure + +Inside of your Astro project, you'll see the following folders and files: + +```text +/ +├── public/ +├── src/ +│ └── pages/ +│ └── index.astro +└── package.json +``` + +Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. + +There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. + +Any static assets, like images, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + +## 👀 Want to learn more? + +Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). diff --git a/apps/changelog_public/astro.config.mjs b/apps/changelog_public/astro.config.mjs new file mode 100644 index 0000000..cdd1c27 --- /dev/null +++ b/apps/changelog_public/astro.config.mjs @@ -0,0 +1,9 @@ +// @ts-check +import { defineConfig } from 'astro/config' + +import react from '@astrojs/react' + +// https://astro.build/config +export default defineConfig({ + integrations: [react()], +}) diff --git a/apps/changelog_public/package.json b/apps/changelog_public/package.json new file mode 100644 index 0000000..e220926 --- /dev/null +++ b/apps/changelog_public/package.json @@ -0,0 +1,22 @@ +{ + "name": "changelog_public", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro check && astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/check": "^0.9.4", + "@astrojs/react": "^3.6.2", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "astro": "^4.16.7", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "typescript": "^5.6.3" + } +} diff --git a/apps/changelog_public/public/favicon.svg b/apps/changelog_public/public/favicon.svg new file mode 100644 index 0000000..f157bd1 --- /dev/null +++ b/apps/changelog_public/public/favicon.svg @@ -0,0 +1,9 @@ + + + + diff --git a/apps/changelog_public/src/env.d.ts b/apps/changelog_public/src/env.d.ts new file mode 100644 index 0000000..e16c13c --- /dev/null +++ b/apps/changelog_public/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/changelog_public/src/pages/index.astro b/apps/changelog_public/src/pages/index.astro new file mode 100644 index 0000000..2d14107 --- /dev/null +++ b/apps/changelog_public/src/pages/index.astro @@ -0,0 +1,16 @@ +--- + +--- + + + + + + + + Astro + + +

Astro

+ + diff --git a/apps/changelog_public/tsconfig.json b/apps/changelog_public/tsconfig.json new file mode 100644 index 0000000..032ad64 --- /dev/null +++ b/apps/changelog_public/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react" + } +} \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 7e07b188bc01b1d754afcd3bf92c9c2fc0392195..75767c9d217e2e8b79b0e8dd82418b8ac6537168 100755 GIT binary patch delta 115311 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 delta 104512 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 Date: Wed, 23 Oct 2024 21:55:22 +0200 Subject: [PATCH 02/19] feat(changelog_public): add tailwind and ui lib --- apps/changelog_public/astro.config.mjs | 4 +- apps/changelog_public/package.json | 4 + apps/changelog_public/src/pages/index.astro | 3 +- apps/changelog_public/tailwind.config.mjs | 86 ++++++++++++++++++++ bun.lockb | Bin 523024 -> 524736 bytes 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 apps/changelog_public/tailwind.config.mjs diff --git a/apps/changelog_public/astro.config.mjs b/apps/changelog_public/astro.config.mjs index cdd1c27..ebeaab9 100644 --- a/apps/changelog_public/astro.config.mjs +++ b/apps/changelog_public/astro.config.mjs @@ -3,7 +3,9 @@ import { defineConfig } from 'astro/config' import react from '@astrojs/react' +import tailwind from '@astrojs/tailwind' + // https://astro.build/config export default defineConfig({ - integrations: [react()], + integrations: [react(), tailwind({ nesting: true })], }) diff --git a/apps/changelog_public/package.json b/apps/changelog_public/package.json index e220926..5adbee3 100644 --- a/apps/changelog_public/package.json +++ b/apps/changelog_public/package.json @@ -12,11 +12,15 @@ "dependencies": { "@astrojs/check": "^0.9.4", "@astrojs/react": "^3.6.2", + "@astrojs/tailwind": "^5.1.2", + "@boring.tools/schema": "workspace:*", + "@boring.tools/ui": "workspace:*", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "astro": "^4.16.7", "react": "^18.3.1", "react-dom": "^18.3.1", + "tailwindcss": "^3.4.14", "typescript": "^5.6.3" } } diff --git a/apps/changelog_public/src/pages/index.astro b/apps/changelog_public/src/pages/index.astro index 2d14107..0b2319e 100644 --- a/apps/changelog_public/src/pages/index.astro +++ b/apps/changelog_public/src/pages/index.astro @@ -1,5 +1,5 @@ --- - +import { Button } from '@boring.tools/ui' --- @@ -12,5 +12,6 @@

Astro

+ diff --git a/apps/changelog_public/tailwind.config.mjs b/apps/changelog_public/tailwind.config.mjs new file mode 100644 index 0000000..01a7788 --- /dev/null +++ b/apps/changelog_public/tailwind.config.mjs @@ -0,0 +1,86 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + './src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}', + '../../packages/ui/**/*.{js,ts,jsx,tsx}', + ], + theme: { + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1400px', + }, + }, + extend: { + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))', + }, + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)', + }, + /* fontFamily: { + sans: ['var(--font-sans)', ...fontFamily.sans], + }, */ + keyframes: { + 'accordion-down': { + from: { height: '0' }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: '0' }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + }, + }, + plugins: [], +} diff --git a/bun.lockb b/bun.lockb index 75767c9d217e2e8b79b0e8dd82418b8ac6537168..df3cbf33f21696d9b26ecd1fc331cdd57dac5708 100755 GIT binary patch delta 103856 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 delta 102948 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 -- 2.45.2 From 514a2d20034f4f775f84d2f8873ad8f6c040b8c1 Mon Sep 17 00:00:00 2001 From: Lars Hampe Date: Wed, 23 Oct 2024 22:05:02 +0200 Subject: [PATCH 03/19] feat(api): add changelog public route --- apps/api/src/changelog/public/byId.ts | 54 ++++++++++++++++++++++++++ apps/api/src/changelog/public/index.ts | 27 +++++++++++++ apps/api/src/index.ts | 3 ++ 3 files changed, 84 insertions(+) create mode 100644 apps/api/src/changelog/public/byId.ts create mode 100644 apps/api/src/changelog/public/index.ts diff --git a/apps/api/src/changelog/public/byId.ts b/apps/api/src/changelog/public/byId.ts new file mode 100644 index 0000000..6a4241c --- /dev/null +++ b/apps/api/src/changelog/public/byId.ts @@ -0,0 +1,54 @@ +import { changelog, db } from '@boring.tools/database' +import { ChangelogByIdParams, ChangelogOutput } from '@boring.tools/schema' +import { createRoute } from '@hono/zod-openapi' +import { and, eq } from 'drizzle-orm' +import { HTTPException } from 'hono/http-exception' + +export const route = createRoute({ + method: 'get', + path: '/:id', + request: { + params: ChangelogByIdParams, + }, + responses: { + 200: { + content: { + 'application/json': { + schema: ChangelogOutput, + }, + }, + description: 'Return changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export const func = async ({ id }: { id: string }) => { + const result = await db.query.changelog.findFirst({ + where: and(eq(changelog.id, id)), + with: { + versions: { + orderBy: (changelog_version, { desc }) => [ + desc(changelog_version.createdAt), + ], + }, + }, + }) + + if (!result) { + throw new HTTPException(404, { message: 'Not found' }) + } + + const { userId, createdAt, ...rest } = result + return rest +} + +export default { + route, + func, +} diff --git a/apps/api/src/changelog/public/index.ts b/apps/api/src/changelog/public/index.ts new file mode 100644 index 0000000..fc04ac9 --- /dev/null +++ b/apps/api/src/changelog/public/index.ts @@ -0,0 +1,27 @@ +import { OpenAPIHono } from '@hono/zod-openapi' +import type { Variables } from '../..' +import { type ContextModule, captureSentry } from '../../utils/sentry' +import ById from './byId' + +const app = new OpenAPIHono<{ Variables: Variables }>() + +const module: ContextModule = { + name: 'changelog', + sub_module: 'public', +} + +app.openapi(ById.route, async (c) => { + try { + const id = c.req.param('id') + const result = await ById.func({ id }) + return c.json(result, 200) + } catch (error) { + return captureSentry({ + c, + error, + module, + }) + } +}) + +export default app diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index f1217b7..657e417 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -5,6 +5,7 @@ import { apiReference } from '@scalar/hono-api-reference' import { cors } from 'hono/cors' import changelog from './changelog' +import changelogPublic from './changelog/public' import version from './changelog/version' import user from './user' @@ -32,6 +33,8 @@ app.route('/v1/user', user) app.route('/v1/changelog', changelog) app.route('/v1/changelog/version', version) +app.route('/v1/changelog/public', changelogPublic) + app.doc('/openapi.json', { openapi: '3.0.0', info: { -- 2.45.2 From 3449b5c2ac1548f954f3d66484910df00a2ce1ea Mon Sep 17 00:00:00 2001 From: Lars Hampe Date: Wed, 23 Oct 2024 22:31:41 +0200 Subject: [PATCH 04/19] feat(api): show only published version on changelog public route --- apps/api/src/changelog/public/byId.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/api/src/changelog/public/byId.ts b/apps/api/src/changelog/public/byId.ts index 6a4241c..24d3fb9 100644 --- a/apps/api/src/changelog/public/byId.ts +++ b/apps/api/src/changelog/public/byId.ts @@ -1,4 +1,4 @@ -import { changelog, db } from '@boring.tools/database' +import { changelog, changelog_version, db } from '@boring.tools/database' import { ChangelogByIdParams, ChangelogOutput } from '@boring.tools/schema' import { createRoute } from '@hono/zod-openapi' import { and, eq } from 'drizzle-orm' @@ -33,6 +33,7 @@ export const func = async ({ id }: { id: string }) => { where: and(eq(changelog.id, id)), with: { versions: { + where: eq(changelog_version.status, 'published'), orderBy: (changelog_version, { desc }) => [ desc(changelog_version.createdAt), ], -- 2.45.2 From 0802b70d3944b89b1c7054aabfbccfe49977702f Mon Sep 17 00:00:00 2001 From: Lars Hampe Date: Wed, 23 Oct 2024 22:34:02 +0200 Subject: [PATCH 05/19] feat(changelog_public): add id page for public changelog --- apps/changelog_public/astro.config.mjs | 1 + apps/changelog_public/package.json | 3 ++ apps/changelog_public/src/pages/[id].astro | 49 ++++++++++++++++++++ apps/changelog_public/src/pages/index.astro | 7 +-- apps/changelog_public/tailwind.config.mjs | 2 +- bun.lockb | Bin 524736 -> 524824 bytes 6 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 apps/changelog_public/src/pages/[id].astro diff --git a/apps/changelog_public/astro.config.mjs b/apps/changelog_public/astro.config.mjs index ebeaab9..e94a8f8 100644 --- a/apps/changelog_public/astro.config.mjs +++ b/apps/changelog_public/astro.config.mjs @@ -7,5 +7,6 @@ import tailwind from '@astrojs/tailwind' // https://astro.build/config export default defineConfig({ + output: 'server', integrations: [react(), tailwind({ nesting: true })], }) diff --git a/apps/changelog_public/package.json b/apps/changelog_public/package.json index 5adbee3..95c452b 100644 --- a/apps/changelog_public/package.json +++ b/apps/changelog_public/package.json @@ -15,12 +15,15 @@ "@astrojs/tailwind": "^5.1.2", "@boring.tools/schema": "workspace:*", "@boring.tools/ui": "workspace:*", + "@tailwindcss/typography": "^0.5.15", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", "astro": "^4.16.7", + "date-fns": "^4.1.0", "react": "^18.3.1", "react-dom": "^18.3.1", "tailwindcss": "^3.4.14", + "tailwindcss-animate": "^1.0.7", "typescript": "^5.6.3" } } diff --git a/apps/changelog_public/src/pages/[id].astro b/apps/changelog_public/src/pages/[id].astro new file mode 100644 index 0000000..2ccd8f1 --- /dev/null +++ b/apps/changelog_public/src/pages/[id].astro @@ -0,0 +1,49 @@ +--- +import { Button } from '@boring.tools/ui' +import { format } from 'date-fns' + +const { id } = Astro.params +const response = await fetch(`http://localhost:3000/v1/changelog/public/${id}`) +const data = await response.json() +console.log(data) +--- + + + + + + + + {data.title} | boring.tools + + +
+
+ +
+

{data.title}

+

{data.description}

+
+ + {data.versions.map((version) => { + return ( +
+
+

+ {version.version} +

+

+ {format(new Date(version.releasedAt), "dd-MM-yy")} +

+
+ +

+ {version.markdown} +

+
+ ) + })} +
+
+ + diff --git a/apps/changelog_public/src/pages/index.astro b/apps/changelog_public/src/pages/index.astro index 0b2319e..890ea6f 100644 --- a/apps/changelog_public/src/pages/index.astro +++ b/apps/changelog_public/src/pages/index.astro @@ -1,5 +1,4 @@ --- -import { Button } from '@boring.tools/ui' --- @@ -11,7 +10,9 @@ import { Button } from '@boring.tools/ui' Astro -

Astro

- +
+

boring.tools

+

CHANGELOG

+
diff --git a/apps/changelog_public/tailwind.config.mjs b/apps/changelog_public/tailwind.config.mjs index 01a7788..ae2c83d 100644 --- a/apps/changelog_public/tailwind.config.mjs +++ b/apps/changelog_public/tailwind.config.mjs @@ -82,5 +82,5 @@ export default { }, }, }, - plugins: [], + plugins: [require('tailwindcss-animate'), require('@tailwindcss/typography')], } diff --git a/bun.lockb b/bun.lockb index df3cbf33f21696d9b26ecd1fc331cdd57dac5708..e9945125fc448d1568a9141548b4ed5844c3f1ab 100755 GIT binary patch delta 88358 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
({bsG1QbnC;fbhI3>SKM( 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

C@14iH;Ognj^!g$jqzoKV9xx)dO$> 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

FXz>qNduqc1EeXzyDxwumke>M0R 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 Date: Thu, 24 Oct 2024 21:19:25 +0200 Subject: [PATCH 06/19] feat(ui): add sidebar component --- packages/ui/package.json | 3 +- packages/ui/postcss.config.js | 6 - packages/ui/src/command.tsx | 153 +++++++++++++++++++++++ packages/ui/src/dialog.tsx | 120 ++++++++++++++++++ packages/ui/src/index.ts | 2 + packages/ui/{ => src}/tailwind.config.js | 0 6 files changed, 277 insertions(+), 7 deletions(-) delete mode 100644 packages/ui/postcss.config.js create mode 100644 packages/ui/src/command.tsx create mode 100644 packages/ui/src/dialog.tsx rename packages/ui/{ => src}/tailwind.config.js (100%) diff --git a/packages/ui/package.json b/packages/ui/package.json index 164c00f..9db2fad 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -11,7 +11,7 @@ "@radix-ui/react-avatar": "^1.1.1", "@radix-ui/react-checkbox": "^1.1.2", "@radix-ui/react-collapsible": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-popover": "^1.1.2", @@ -21,6 +21,7 @@ "@radix-ui/react-tooltip": "^1.1.3", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "cmdk": "^1.0.0", "date-fns": "^4.1.0", "lucide-react": "^0.446.0", "react": "^18.3.1", diff --git a/packages/ui/postcss.config.js b/packages/ui/postcss.config.js deleted file mode 100644 index 2e7af2b..0000000 --- a/packages/ui/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/packages/ui/src/command.tsx b/packages/ui/src/command.tsx new file mode 100644 index 0000000..ecc022f --- /dev/null +++ b/packages/ui/src/command.tsx @@ -0,0 +1,153 @@ +import type { DialogProps } from '@radix-ui/react-dialog' +import { Command as CommandPrimitive } from 'cmdk' +import { Search } from 'lucide-react' +import * as React from 'react' + +import { Dialog, DialogContent } from './dialog' +import { cn } from './lib/cn' + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( +

+ + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = 'CommandShortcut' + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +} diff --git a/packages/ui/src/dialog.tsx b/packages/ui/src/dialog.tsx new file mode 100644 index 0000000..c706a48 --- /dev/null +++ b/packages/ui/src/dialog.tsx @@ -0,0 +1,120 @@ +import * as DialogPrimitive from '@radix-ui/react-dialog' +import { X } from 'lucide-react' +import * as React from 'react' + +import { cn } from './lib/cn' + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = 'DialogHeader' + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = 'DialogFooter' + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 4e872e1..0a5d79c 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -26,3 +26,5 @@ export * from './collapsible' export * from './avatar' export * from './global.css' export * from './breadcrumb' +export * from './command' +export * from './dialog' diff --git a/packages/ui/tailwind.config.js b/packages/ui/src/tailwind.config.js similarity index 100% rename from packages/ui/tailwind.config.js rename to packages/ui/src/tailwind.config.js -- 2.45.2 From 244ffb6d0369367e7a39c1c4708e5b5d35a78b87 Mon Sep 17 00:00:00 2001 From: Lars Hampe Date: Thu, 24 Oct 2024 21:21:21 +0200 Subject: [PATCH 07/19] feat: implement new module: page --- apps/api/src/changelog/byId.ts | 5 + apps/api/src/changelog/update.ts | 1 + apps/api/src/index.ts | 9 +- apps/api/src/page/byId.ts | 65 ++++++ apps/api/src/page/create.ts | 69 +++++++ apps/api/src/page/delete.ts | 48 +++++ apps/api/src/page/index.ts | 24 +++ apps/api/src/page/list.ts | 47 +++++ apps/api/src/page/public.ts | 86 ++++++++ apps/api/src/page/update.ts | 80 ++++++++ apps/api/src/utils/errors/base-error.ts | 46 +++++ apps/api/src/utils/errors/http-error.ts | 35 ++++ apps/api/src/utils/errors/index.ts | 120 +++++++++++ apps/api/src/utils/errors/schema-error.ts | 30 +++ apps/api/src/utils/errors/utils.ts | 66 ++++++ apps/app/src/components/Page/Delete.tsx | 72 +++++++ apps/app/src/components/Sidebar.tsx | 64 +----- apps/app/src/components/SidebarChangelog.tsx | 81 ++++++++ apps/app/src/components/SidebarPage.tsx | 73 +++++++ apps/app/src/hooks/usePage.ts | 193 ++++++++++++++++++ apps/app/src/routeTree.gen.ts | 139 +++++++++++++ apps/app/src/routes/changelog.$id.lazy.tsx | 2 +- apps/app/src/routes/page.$id.edit.lazy.tsx | 192 ++++++++++++++++++ apps/app/src/routes/page.$id.index.lazy.tsx | 61 ++++++ apps/app/src/routes/page.$id.lazy.tsx | 108 ++++++++++ apps/app/src/routes/page.create.lazy.tsx | 200 +++++++++++++++++++ apps/app/src/routes/page.index.lazy.tsx | 14 ++ apps/app/tsconfig.tsbuildinfo | 2 +- apps/changelog_public/src/pages/[id].astro | 105 +++++++--- bun.lockb | Bin 524824 -> 534152 bytes lefthook.yaml | 2 +- packages/database/package.json | 2 +- packages/database/src/schema/changelog.ts | 34 ++++ packages/database/src/schema/index.ts | 1 + packages/database/src/schema/page.ts | 20 ++ packages/schema/src/changelog/byId.ts | 7 +- packages/schema/src/index.ts | 1 + packages/schema/src/page/base.ts | 13 ++ packages/schema/src/page/byId.ts | 20 ++ packages/schema/src/page/create.ts | 16 ++ packages/schema/src/page/index.ts | 6 + packages/schema/src/page/list.ts | 9 + packages/schema/src/page/public.ts | 35 ++++ packages/schema/src/page/update.ts | 13 ++ 44 files changed, 2127 insertions(+), 89 deletions(-) create mode 100644 apps/api/src/page/byId.ts create mode 100644 apps/api/src/page/create.ts create mode 100644 apps/api/src/page/delete.ts create mode 100644 apps/api/src/page/index.ts create mode 100644 apps/api/src/page/list.ts create mode 100644 apps/api/src/page/public.ts create mode 100644 apps/api/src/page/update.ts create mode 100644 apps/api/src/utils/errors/base-error.ts create mode 100644 apps/api/src/utils/errors/http-error.ts create mode 100644 apps/api/src/utils/errors/index.ts create mode 100644 apps/api/src/utils/errors/schema-error.ts create mode 100644 apps/api/src/utils/errors/utils.ts create mode 100644 apps/app/src/components/Page/Delete.tsx create mode 100644 apps/app/src/components/SidebarChangelog.tsx create mode 100644 apps/app/src/components/SidebarPage.tsx create mode 100644 apps/app/src/hooks/usePage.ts create mode 100644 apps/app/src/routes/page.$id.edit.lazy.tsx create mode 100644 apps/app/src/routes/page.$id.index.lazy.tsx create mode 100644 apps/app/src/routes/page.$id.lazy.tsx create mode 100644 apps/app/src/routes/page.create.lazy.tsx create mode 100644 apps/app/src/routes/page.index.lazy.tsx create mode 100644 packages/database/src/schema/page.ts create mode 100644 packages/schema/src/page/base.ts create mode 100644 packages/schema/src/page/byId.ts create mode 100644 packages/schema/src/page/create.ts create mode 100644 packages/schema/src/page/index.ts create mode 100644 packages/schema/src/page/list.ts create mode 100644 packages/schema/src/page/public.ts create mode 100644 packages/schema/src/page/update.ts diff --git a/apps/api/src/changelog/byId.ts b/apps/api/src/changelog/byId.ts index eed24b8..e0a64cf 100644 --- a/apps/api/src/changelog/byId.ts +++ b/apps/api/src/changelog/byId.ts @@ -32,6 +32,11 @@ export const func = async ({ userId, id }: { userId: string; id: string }) => { const result = await db.query.changelog.findFirst({ where: and(eq(changelog.userId, userId), eq(changelog.id, id)), with: { + pages: { + with: { + page: true, + }, + }, versions: { orderBy: (changelog_version, { desc }) => [ desc(changelog_version.createdAt), diff --git a/apps/api/src/changelog/update.ts b/apps/api/src/changelog/update.ts index c5e2619..74c7212 100644 --- a/apps/api/src/changelog/update.ts +++ b/apps/api/src/changelog/update.ts @@ -10,6 +10,7 @@ import { HTTPException } from 'hono/http-exception' export const route = createRoute({ method: 'put', path: '/:id', + tags: ['changelog'], request: { body: { content: { diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 657e417..aec52d6 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -9,7 +9,9 @@ import changelogPublic from './changelog/public' import version from './changelog/version' import user from './user' +import pageApi from './page' import { authentication } from './utils/authentication' +import { handleError, handleZodError } from './utils/errors' import { startup } from './utils/startup' type User = z.infer @@ -18,7 +20,9 @@ export type Variables = { user: User } -export const app = new OpenAPIHono<{ Variables: Variables }>() +export const app = new OpenAPIHono<{ Variables: Variables }>({ + defaultHook: handleZodError, +}) app.use( '*', @@ -26,13 +30,14 @@ app.use( dsn: 'https://1d7428bbab0a305078cf4aa380721aa2@o4508167321354240.ingest.de.sentry.io/4508167323648080', }), ) +app.onError(handleError) app.use('*', cors()) app.use('/v1/*', authentication) app.route('/v1/user', user) app.route('/v1/changelog', changelog) app.route('/v1/changelog/version', version) - +app.route('/v1/page', pageApi) app.route('/v1/changelog/public', changelogPublic) app.doc('/openapi.json', { diff --git a/apps/api/src/page/byId.ts b/apps/api/src/page/byId.ts new file mode 100644 index 0000000..241ffdc --- /dev/null +++ b/apps/api/src/page/byId.ts @@ -0,0 +1,65 @@ +import { db, page } from '@boring.tools/database' +import { createRoute } from '@hono/zod-openapi' +import { and, eq } from 'drizzle-orm' + +import { PageByIdParams, PageOutput } from '@boring.tools/schema' +import { HTTPException } from 'hono/http-exception' +import { verifyAuthentication } from '../utils/authentication' +import type { pageApi } from './index' + +const getRoute = createRoute({ + method: 'get', + tags: ['page'], + description: 'Get a page', + path: '/:id', + request: { + params: PageByIdParams, + }, + responses: { + 200: { + content: { + 'application/json': { + schema: PageOutput, + }, + }, + description: 'Return changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export function registerPageById(api: typeof pageApi) { + return api.openapi(getRoute, async (c) => { + const userId = verifyAuthentication(c) + const { id } = c.req.valid('param') + + const result = await db.query.page.findFirst({ + where: and(eq(page.id, id), eq(page.userId, userId)), + with: { + changelogs: { + with: { + changelog: true, + }, + }, + }, + }) + + if (!result) { + throw new HTTPException(404, { message: 'Not Found' }) + } + + const { changelogs, ...rest } = result + + const mappedResult = { + ...rest, + changelogs: changelogs.map((log) => log.changelog), + } + + return c.json(mappedResult, 200) + }) +} diff --git a/apps/api/src/page/create.ts b/apps/api/src/page/create.ts new file mode 100644 index 0000000..de1da13 --- /dev/null +++ b/apps/api/src/page/create.ts @@ -0,0 +1,69 @@ +import { changelogs_to_pages, db, page } from '@boring.tools/database' +import { createRoute, type z } from '@hono/zod-openapi' + +import { PageCreateInput, PageOutput } from '@boring.tools/schema' +import { HTTPException } from 'hono/http-exception' +import { verifyAuthentication } from '../utils/authentication' +import type { pageApi } from './index' + +const getRoute = createRoute({ + method: 'post', + tags: ['page'], + description: 'Create a page', + path: '/', + request: { + body: { + content: { + 'application/json': { schema: PageCreateInput }, + }, + }, + }, + responses: { + 200: { + content: { + 'application/json': { + schema: PageOutput, + }, + }, + description: 'Return changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export function registerPageCreate(api: typeof pageApi) { + return api.openapi(getRoute, async (c) => { + const userId = verifyAuthentication(c) + + const { changelogIds, ...rest }: z.infer = + await c.req.json() + + const [result] = await db + .insert(page) + .values({ + ...rest, + userId: userId, + }) + .returning() + + // TODO: implement transaction + if (changelogIds) { + await db.insert(changelogs_to_pages).values( + changelogIds.map((changelogId) => ({ + changelogId, + pageId: result.id, + })), + ) + } + if (!result) { + throw new HTTPException(404, { message: 'Not Found' }) + } + + return c.json(result, 200) + }) +} diff --git a/apps/api/src/page/delete.ts b/apps/api/src/page/delete.ts new file mode 100644 index 0000000..4133972 --- /dev/null +++ b/apps/api/src/page/delete.ts @@ -0,0 +1,48 @@ +import { db, page } from '@boring.tools/database' +import { GeneralOutput, PageByIdParams } from '@boring.tools/schema' +import { createRoute } from '@hono/zod-openapi' +import { and, eq } from 'drizzle-orm' +import { HTTPException } from 'hono/http-exception' +import type { pageApi } from '.' +import { verifyAuthentication } from '../utils/authentication' + +const route = createRoute({ + method: 'delete', + path: '/:id', + request: { + params: PageByIdParams, + }, + + responses: { + 200: { + content: { + 'application/json': { + schema: GeneralOutput, + }, + }, + description: 'Removes a changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export const registerPageDelete = (api: typeof pageApi) => { + return api.openapi(route, async (c) => { + const userId = verifyAuthentication(c) + const { id } = c.req.valid('param') + const result = await db + .delete(page) + .where(and(eq(page.userId, userId), eq(page.id, id))) + .returning() + if (!result) { + throw new HTTPException(404, { message: 'Not Found' }) + } + + return c.json(result, 200) + }) +} diff --git a/apps/api/src/page/index.ts b/apps/api/src/page/index.ts new file mode 100644 index 0000000..d22fda4 --- /dev/null +++ b/apps/api/src/page/index.ts @@ -0,0 +1,24 @@ +import { OpenAPIHono } from '@hono/zod-openapi' +import type { Variables } from '..' +import type { ContextModule } from '../utils/sentry' +import { registerPageById } from './byId' +import { registerPageCreate } from './create' +import { registerPageDelete } from './delete' +import { registerPageList } from './list' +import { registerPagePublic } from './public' +import { registerPageUpdate } from './update' + +export const pageApi = new OpenAPIHono<{ Variables: Variables }>() + +const module: ContextModule = { + name: 'page', +} + +registerPageById(pageApi) +registerPageCreate(pageApi) +registerPageList(pageApi) +registerPagePublic(pageApi) +registerPageDelete(pageApi) +registerPageUpdate(pageApi) + +export default pageApi diff --git a/apps/api/src/page/list.ts b/apps/api/src/page/list.ts new file mode 100644 index 0000000..4230d6f --- /dev/null +++ b/apps/api/src/page/list.ts @@ -0,0 +1,47 @@ +import { db, page } from '@boring.tools/database' +import { createRoute, z } from '@hono/zod-openapi' +import { and, eq } from 'drizzle-orm' + +import { PageListOutput } from '@boring.tools/schema' +import { HTTPException } from 'hono/http-exception' +import { verifyAuthentication } from '../utils/authentication' +import type { pageApi } from './index' + +const route = createRoute({ + method: 'get', + tags: ['page'], + description: 'Get a page list', + path: '/', + responses: { + 200: { + content: { + 'application/json': { + schema: PageListOutput, + }, + }, + description: 'Return changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export function registerPageList(api: typeof pageApi) { + return api.openapi(route, async (c) => { + const userId = verifyAuthentication(c) + + const result = await db.query.page.findMany({ + where: and(eq(page.userId, userId)), + }) + + if (!result) { + throw new HTTPException(404, { message: 'Not Found' }) + } + + return c.json(result, 200) + }) +} diff --git a/apps/api/src/page/public.ts b/apps/api/src/page/public.ts new file mode 100644 index 0000000..a14b03c --- /dev/null +++ b/apps/api/src/page/public.ts @@ -0,0 +1,86 @@ +import { changelog_version, db, page } from '@boring.tools/database' +import { createRoute } from '@hono/zod-openapi' +import { eq } from 'drizzle-orm' + +import { PagePublicOutput, PagePublicParams } from '@boring.tools/schema' +import { HTTPException } from 'hono/http-exception' +import type { pageApi } from './index' + +const getRoute = createRoute({ + method: 'get', + tags: ['page'], + description: 'Get a page', + path: '/:id/public', + request: { + params: PagePublicParams, + }, + responses: { + 200: { + content: { + 'application/json': { + schema: PagePublicOutput, + }, + }, + description: 'Return changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export function registerPagePublic(api: typeof pageApi) { + return api.openapi(getRoute, async (c) => { + const { id } = c.req.valid('param') + + const result = await db.query.page.findFirst({ + where: eq(page.id, id), + columns: { + title: true, + description: true, + icon: true, + }, + with: { + changelogs: { + with: { + changelog: { + columns: { + title: true, + description: true, + }, + with: { + versions: { + where: eq(changelog_version.status, 'published'), + orderBy: (changelog_version, { desc }) => [ + desc(changelog_version.createdAt), + ], + columns: { + markdown: true, + version: true, + releasedAt: true, + }, + }, + }, + }, + }, + }, + }, + }) + + if (!result) { + throw new HTTPException(404, { message: 'Not Found' }) + } + + const { changelogs, ...rest } = result + + const mappedResult = { + ...rest, + changelogs: changelogs.map((log) => log.changelog), + } + + return c.json(mappedResult, 200) + }) +} diff --git a/apps/api/src/page/update.ts b/apps/api/src/page/update.ts new file mode 100644 index 0000000..81d8126 --- /dev/null +++ b/apps/api/src/page/update.ts @@ -0,0 +1,80 @@ +import { changelogs_to_pages, db, page } from '@boring.tools/database' +import { createRoute, type z } from '@hono/zod-openapi' + +import { + PageOutput, + PageUpdateInput, + PageUpdateParams, +} from '@boring.tools/schema' +import { and, eq } from 'drizzle-orm' +import { HTTPException } from 'hono/http-exception' +import { verifyAuthentication } from '../utils/authentication' +import type { pageApi } from './index' + +const getRoute = createRoute({ + method: 'put', + tags: ['page'], + description: 'Update a page', + path: '/:id', + request: { + params: PageUpdateParams, + body: { + content: { + 'application/json': { schema: PageUpdateInput }, + }, + }, + }, + responses: { + 200: { + content: { + 'application/json': { + schema: PageOutput, + }, + }, + description: 'Return changelog by id', + }, + 400: { + description: 'Bad Request', + }, + 500: { + description: 'Internal Server Error', + }, + }, +}) + +export function registerPageUpdate(api: typeof pageApi) { + return api.openapi(getRoute, async (c) => { + const userId = verifyAuthentication(c) + const { id } = c.req.valid('param') + + const { changelogIds, ...rest }: z.infer = + await c.req.json() + + const [result] = await db + .update(page) + .set({ + ...rest, + userId: userId, + }) + .where(and(eq(page.userId, userId), eq(page.id, id))) + .returning() + + // TODO: implement transaction + if (changelogIds) { + await db + .delete(changelogs_to_pages) + .where(eq(changelogs_to_pages.pageId, result.id)) + await db.insert(changelogs_to_pages).values( + changelogIds.map((changelogId) => ({ + changelogId, + pageId: result.id, + })), + ) + } + if (!result) { + throw new HTTPException(404, { message: 'Not Found' }) + } + + return c.json(result, 200) + }) +} diff --git a/apps/api/src/utils/errors/base-error.ts b/apps/api/src/utils/errors/base-error.ts new file mode 100644 index 0000000..1315a6e --- /dev/null +++ b/apps/api/src/utils/errors/base-error.ts @@ -0,0 +1,46 @@ +import type { ErrorCode } from '.' + +type ErrorContext = Record + +export abstract class BaseError< + TContext extends ErrorContext = ErrorContext, +> extends Error { + public abstract readonly name: string + /** + * A distinct code for the error type used to differentiate between different types of errors. + * Used to build the URL for the error documentation. + * @example 'UNAUTHENTICATED' | 'INTERNAL_SERVER_ERROR' + */ + public abstract readonly code?: ErrorCode + public readonly cause?: BaseError + /** + * Additional context to help understand the error. + * @example { url: 'https://example.com/api', method: 'GET', statusCode: 401 } + */ + public readonly context?: TContext + + constructor(opts: { + message: string + cause?: BaseError + context?: TContext + }) { + super(opts.message) + this.cause = opts.cause + this.context = opts.context + + // TODO: add logger here! + } + + public toString(): string { + return `${this.name}(${this.code}): ${ + this.message + } - caused by ${this.cause?.toString()} - with context ${JSON.stringify( + this.context, + )}` + } + + // get docs(): string { + // if (!this.code) return "https://example.com/docs/errors" + // return `https://example.com/docs/errors/${this.code}`; + // } +} diff --git a/apps/api/src/utils/errors/http-error.ts b/apps/api/src/utils/errors/http-error.ts new file mode 100644 index 0000000..e81352f --- /dev/null +++ b/apps/api/src/utils/errors/http-error.ts @@ -0,0 +1,35 @@ +import { type ErrorCode, statusToCode } from '.' +import { BaseError } from './base-error' + +type Context = { + url?: string + method?: string + statusCode?: number +} + +export class HttpError extends BaseError { + public readonly name = HttpError.name + public readonly code: ErrorCode + + constructor(opts: { + code: ErrorCode + message: string + cause?: BaseError + context?: Context + }) { + super(opts) + this.code = opts.code + } + + public static fromRequest(request: Request, response: Response) { + return new HttpError({ + code: statusToCode(response.status), + message: response.statusText, // can be overriden with { ...res, statusText: 'Custom message' } + context: { + url: request.url, + method: request.method, + statusCode: response.status, + }, + }) + } +} diff --git a/apps/api/src/utils/errors/index.ts b/apps/api/src/utils/errors/index.ts new file mode 100644 index 0000000..f86c0c3 --- /dev/null +++ b/apps/api/src/utils/errors/index.ts @@ -0,0 +1,120 @@ +import type { Context } from 'hono' +import { HTTPException } from 'hono/http-exception' +import { ZodError, z } from 'zod' +import { SchemaError } from './schema-error' + +export const ErrorCodeEnum = z.enum([ + 'BAD_REQUEST', + 'FORBIDDEN', + 'INTERNAL_SERVER_ERROR', + 'USAGE_EXCEEDED', + 'DISABLED', + 'CONFLICT', + 'NOT_FOUND', + 'NOT_UNIQUE', + 'UNAUTHORIZED', + 'METHOD_NOT_ALLOWED', + 'UNPROCESSABLE_ENTITY', +]) + +export type ErrorCode = z.infer + +export function statusToCode(status: number): ErrorCode { + switch (status) { + case 400: + return 'BAD_REQUEST' + case 401: + return 'UNAUTHORIZED' + case 403: + return 'FORBIDDEN' + case 404: + return 'NOT_FOUND' + case 405: + return 'METHOD_NOT_ALLOWED' + case 409: + return 'METHOD_NOT_ALLOWED' + case 422: + return 'UNPROCESSABLE_ENTITY' + case 500: + return 'INTERNAL_SERVER_ERROR' + default: + return 'INTERNAL_SERVER_ERROR' + } +} + +export type ErrorSchema = z.infer> + +export function createErrorSchema(code: ErrorCode) { + return z.object({ + code: ErrorCodeEnum.openapi({ + example: code, + description: 'The error code related to the status code.', + }), + message: z.string().openapi({ + description: 'A human readable message describing the issue.', + example: "Missing required field 'name'.", + }), + docs: z.string().openapi({ + description: 'A link to the documentation for the error.', + example: `https://docs.openstatus.dev/api-references/errors/code/${code}`, + }), + }) +} + +export function handleError(err: Error, c: Context): Response { + if (err instanceof ZodError) { + const error = SchemaError.fromZod(err, c) + return c.json( + { + code: 'BAD_REQUEST', + message: error.message, + docs: 'https://docs.openstatus.dev/api-references/errors/code/BAD_REQUEST', + }, + { status: 400 }, + ) + } + if (err instanceof HTTPException) { + const code = statusToCode(err.status) + return c.json( + { + code: code, + message: err.message, + docs: `https://docs.openstatus.dev/api-references/errors/code/${code}`, + }, + { status: err.status }, + ) + } + return c.json( + { + code: 'INTERNAL_SERVER_ERROR', + message: err.message ?? 'Something went wrong', + docs: 'https://docs.openstatus.dev/api-references/errors/code/INTERNAL_SERVER_ERROR', + }, + + { status: 500 }, + ) +} +export function handleZodError( + result: + | { + success: true + data: unknown + } + | { + success: false + error: ZodError + }, + c: Context, +) { + if (!result.success) { + const error = SchemaError.fromZod(result.error, c) + return c.json>>( + { + code: 'BAD_REQUEST', + docs: 'https://docs.openstatus.dev/api-references/errors/code/BAD_REQUEST', + message: error.message, + }, + { status: 400 }, + ) + } +} diff --git a/apps/api/src/utils/errors/schema-error.ts b/apps/api/src/utils/errors/schema-error.ts new file mode 100644 index 0000000..e819e8e --- /dev/null +++ b/apps/api/src/utils/errors/schema-error.ts @@ -0,0 +1,30 @@ +import type { ZodError } from 'zod' + +import type { ErrorCode } from '.' +import { BaseError } from './base-error' +import { parseZodErrorIssues } from './utils' + +type Context = { raw: unknown } + +export class SchemaError extends BaseError { + public readonly name = SchemaError.name + public readonly code: ErrorCode + + constructor(opts: { + code: ErrorCode + message: string + cause?: BaseError + context?: Context + }) { + super(opts) + this.code = opts.code + } + + static fromZod(e: ZodError, raw: unknown): SchemaError { + return new SchemaError({ + code: 'UNPROCESSABLE_ENTITY', + message: parseZodErrorIssues(e.issues), + context: { raw: JSON.stringify(raw) }, + }) + } +} diff --git a/apps/api/src/utils/errors/utils.ts b/apps/api/src/utils/errors/utils.ts new file mode 100644 index 0000000..ce45a5b --- /dev/null +++ b/apps/api/src/utils/errors/utils.ts @@ -0,0 +1,66 @@ +import type { ZodIssue } from 'zod' +import type { ErrorCode } from '.' + +export function statusToCode(status: number): ErrorCode { + switch (status) { + case 400: + return 'BAD_REQUEST' + case 401: + return 'UNAUTHORIZED' + case 403: + return 'FORBIDDEN' + case 404: + return 'NOT_FOUND' + case 405: + return 'METHOD_NOT_ALLOWED' + case 409: + return 'METHOD_NOT_ALLOWED' + case 422: + return 'UNPROCESSABLE_ENTITY' + case 500: + return 'INTERNAL_SERVER_ERROR' + default: + return 'INTERNAL_SERVER_ERROR' + } +} + +export function codeToStatus(code: ErrorCode): number { + switch (code) { + case 'BAD_REQUEST': + return 400 + case 'UNAUTHORIZED': + return 401 + case 'FORBIDDEN': + return 403 + case 'NOT_FOUND': + return 404 + case 'METHOD_NOT_ALLOWED': + return 405 + case 'CONFLICT': + return 409 + case 'UNPROCESSABLE_ENTITY': + return 422 + case 'INTERNAL_SERVER_ERROR': + return 500 + default: + return 500 + } +} + +// Props to cal.com: https://github.com/calcom/cal.com/blob/5d325495a9c30c5a9d89fc2adfa620b8fde9346e/packages/lib/server/getServerErrorFromUnknown.ts#L17 +export function parseZodErrorIssues(issues: ZodIssue[]): string { + return issues + .map((i) => + i.code === 'invalid_union' + ? i.unionErrors.map((ue) => parseZodErrorIssues(ue.issues)).join('; ') + : i.code === 'unrecognized_keys' + ? i.message + : `${i.path.length ? `${i.code} in '${i.path}': ` : ''}${i.message}`, + ) + .join('; ') +} + +export function redactError(err: TError) { + if (!(err instanceof Error)) return err + console.error(`Type of Error: ${err.constructor}`) +} diff --git a/apps/app/src/components/Page/Delete.tsx b/apps/app/src/components/Page/Delete.tsx new file mode 100644 index 0000000..3956725 --- /dev/null +++ b/apps/app/src/components/Page/Delete.tsx @@ -0,0 +1,72 @@ +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, + Button, + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@boring.tools/ui' +import { useNavigate } from '@tanstack/react-router' +import { Trash2Icon } from 'lucide-react' +import { useState } from 'react' +import { usePageDelete } from '../../hooks/usePage' + +export const PageDelete = ({ id }: { id: string }) => { + const remove = usePageDelete() + const navigate = useNavigate({ from: `/page/${id}` }) + const [isOpen, setIsOpen] = useState(false) + + const removeChangelog = () => { + remove.mutate( + { id }, + { + onSuccess: () => { + setIsOpen(false) + navigate({ to: '/page' }) + }, + }, + ) + } + return ( + + + + + + + + + + Are you absolutely sure? + + This action cannot be undone. This will permanently delete your + page and remove your data from our servers. + + + + setIsOpen(false)}> + Cancel + + + + + + + + +

Remove

+
+
+ ) +} diff --git a/apps/app/src/components/Sidebar.tsx b/apps/app/src/components/Sidebar.tsx index 8a0f133..356a5e3 100644 --- a/apps/app/src/components/Sidebar.tsx +++ b/apps/app/src/components/Sidebar.tsx @@ -1,37 +1,22 @@ -import { ChevronRightIcon, FileStackIcon } from 'lucide-react' +import { FileStackIcon, NotebookTextIcon } from 'lucide-react' import { - Collapsible, - CollapsibleContent, - CollapsibleTrigger, Sidebar as SidebarComp, SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader, SidebarMenu, - SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, - SidebarMenuSub, - SidebarMenuSubButton, - SidebarMenuSubItem, } from '@boring.tools/ui' import { Link } from '@tanstack/react-router' import { useChangelogList } from '../hooks/useChangelog' +import { SidebarChangelog } from './SidebarChangelog' +import { SidebarPage } from './SidebarPage' import { SidebarUser } from './SidebarUser' -const items = [ - { - title: 'Changelog', - url: '/changelog', - icon: FileStackIcon, - isActive: true, - }, -] - export function Sidebar() { - const { data, error } = useChangelogList() return ( @@ -53,47 +38,8 @@ export function Sidebar() { - {items.map((item) => ( - - - - - - {item.title} - - - - - - - Toggle - - - - - {!error && - data?.map((changelog) => ( - - - - {changelog.title} - - - - ))} - - - - - ))} + + diff --git a/apps/app/src/components/SidebarChangelog.tsx b/apps/app/src/components/SidebarChangelog.tsx new file mode 100644 index 0000000..8573767 --- /dev/null +++ b/apps/app/src/components/SidebarChangelog.tsx @@ -0,0 +1,81 @@ +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, + SidebarMenuAction, + SidebarMenuButton, + SidebarMenuItem, + SidebarMenuSub, + SidebarMenuSubButton, + SidebarMenuSubItem, +} from '@boring.tools/ui' +import { Link } from '@tanstack/react-router' +import { + ChevronRightIcon, + FileStackIcon, + PlusCircleIcon, + PlusIcon, +} from 'lucide-react' +import { useChangelogList } from '../hooks/useChangelog' + +export const SidebarChangelog = () => { + const { data, error } = useChangelogList() + + return ( + + + + + + Changelog + + + + + + + Toggle + + + + + {!error && + data?.map((changelog) => ( + + + + {changelog.title} + + + + ))} + + + + + + + New changelog + + + + + + + + + ) +} diff --git a/apps/app/src/components/SidebarPage.tsx b/apps/app/src/components/SidebarPage.tsx new file mode 100644 index 0000000..91dbd59 --- /dev/null +++ b/apps/app/src/components/SidebarPage.tsx @@ -0,0 +1,73 @@ +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, + SidebarMenuAction, + SidebarMenuButton, + SidebarMenuItem, + SidebarMenuSub, + SidebarMenuSubButton, + SidebarMenuSubItem, +} from '@boring.tools/ui' +import { Link } from '@tanstack/react-router' +import { ChevronRightIcon, NotebookTextIcon, PlusIcon } from 'lucide-react' +import { usePageList } from '../hooks/usePage' + +export const SidebarPage = () => { + const { data, error } = usePageList() + + return ( + + + + + + Page + + + + + + + Toggle + + + + + {!error && + data?.map((page) => ( + + + + {page.title} + + + + ))} + + + + + + + New page + + + + + + + + + ) +} diff --git a/apps/app/src/hooks/usePage.ts b/apps/app/src/hooks/usePage.ts new file mode 100644 index 0000000..ef26b26 --- /dev/null +++ b/apps/app/src/hooks/usePage.ts @@ -0,0 +1,193 @@ +import type { + PageByIdOutput, + PageCreateInput, + PageListOutput, + PageOutput, + PageUpdateInput, +} from '@boring.tools/schema' +import { useAuth } from '@clerk/clerk-react' +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' +import type { z } from 'zod' +import { queryFetch } from '../utils/queryFetch' + +type Page = z.infer +type PageList = z.infer +type PageById = z.infer +type PageCreate = z.infer +type PageUpdate = z.infer + +export const usePageList = () => { + const { getToken } = useAuth() + return useQuery({ + queryKey: ['pageList'], + queryFn: async (): Promise> => + await queryFetch({ + path: 'page', + method: 'get', + token: await getToken(), + }), + }) +} + +export const usePageById = ({ id }: { id: string }) => { + const { getToken } = useAuth() + + return useQuery({ + queryKey: ['pageById', id], + queryFn: async (): Promise> => + await queryFetch({ + path: `page/${id}`, + method: 'get', + token: await getToken(), + }), + }) +} + +export const usePageCreate = () => { + const { getToken } = useAuth() + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async (payload: PageCreate): Promise> => + await queryFetch({ + path: 'page', + data: payload, + method: 'post', + token: await getToken(), + }), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['pageList'] }) + }, + }) +} + +export const usePageDelete = () => { + const { getToken } = useAuth() + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async ({ id }: { id: string }): Promise> => + await queryFetch({ + path: `page/${id}`, + method: 'delete', + token: await getToken(), + }), + onSuccess: (data) => { + queryClient.invalidateQueries({ + queryKey: ['pageList', 'pageById', data.id], + }) + }, + }) +} + +export const usePageUpdate = () => { + const { getToken } = useAuth() + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async ({ + id, + payload, + }: { + id: string + payload: PageUpdate + }): Promise> => + await queryFetch({ + path: `page/${id}`, + data: payload, + method: 'put', + token: await getToken(), + }), + onSuccess: (data) => { + queryClient.invalidateQueries({ + queryKey: ['pageById', data.id], + }) + queryClient.invalidateQueries({ + queryKey: ['pageList'], + }) + }, + }) +} +/* + + +export const useChangelogVersionCreate = () => { + const { getToken } = useAuth() + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async (payload: VersionCreate): Promise> => + await queryFetch({ + path: 'changelog/version', + data: payload, + method: 'post', + token: await getToken(), + }), + onSuccess: (data) => { + queryClient.invalidateQueries({ queryKey: ['changelogList'] }) + queryClient.invalidateQueries({ + queryKey: ['changelogById', data.changelogId], + }) + }, + }) +} + +export const useChangelogVersionById = ({ id }: { id: string }) => { + const { getToken } = useAuth() + + return useQuery({ + queryKey: ['changelogVersionById', id], + queryFn: async (): Promise> => + await queryFetch({ + path: `changelog/version/${id}`, + method: 'get', + token: await getToken(), + }), + }) +} + +export const useChangelogVersionUpdate = () => { + const { getToken } = useAuth() + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async ({ + id, + payload, + }: { + id: string + payload: VersionUpdate + }): Promise> => + await queryFetch({ + path: `changelog/version/${id}`, + data: payload, + method: 'put', + token: await getToken(), + }), + onSuccess: (data) => { + queryClient.invalidateQueries({ + queryKey: ['changelogById', data.id], + }) + }, + }) +} + +export const useChangelogVersionRemove = () => { + const { getToken } = useAuth() + const queryClient = useQueryClient() + + return useMutation({ + mutationFn: async ({ id }: { id: string }): Promise> => + await queryFetch({ + path: `changelog/version/${id}`, + method: 'delete', + token: await getToken(), + }), + onSuccess: (data) => { + queryClient.invalidateQueries({ + queryKey: ['changelogList', 'changelogById', data.id], + }) + }, + }) +} + */ diff --git a/apps/app/src/routeTree.gen.ts b/apps/app/src/routeTree.gen.ts index a9260a2..c0e14ce 100644 --- a/apps/app/src/routeTree.gen.ts +++ b/apps/app/src/routeTree.gen.ts @@ -19,10 +19,15 @@ import { Route as ChangelogIdVersionVersionIdImport } from './routes/changelog.$ const IndexLazyImport = createFileRoute('/')() const UserIndexLazyImport = createFileRoute('/user/')() +const PageIndexLazyImport = createFileRoute('/page/')() const ChangelogIndexLazyImport = createFileRoute('/changelog/')() +const PageCreateLazyImport = createFileRoute('/page/create')() +const PageIdLazyImport = createFileRoute('/page/$id')() const ChangelogCreateLazyImport = createFileRoute('/changelog/create')() const ChangelogIdLazyImport = createFileRoute('/changelog/$id')() +const PageIdIndexLazyImport = createFileRoute('/page/$id/')() const ChangelogIdIndexLazyImport = createFileRoute('/changelog/$id/')() +const PageIdEditLazyImport = createFileRoute('/page/$id/edit')() const ChangelogIdVersionCreateLazyImport = createFileRoute( '/changelog/$id/versionCreate', )() @@ -40,6 +45,11 @@ const UserIndexLazyRoute = UserIndexLazyImport.update({ getParentRoute: () => rootRoute, } as any).lazy(() => import('./routes/user/index.lazy').then((d) => d.Route)) +const PageIndexLazyRoute = PageIndexLazyImport.update({ + path: '/page/', + getParentRoute: () => rootRoute, +} as any).lazy(() => import('./routes/page.index.lazy').then((d) => d.Route)) + const ChangelogIndexLazyRoute = ChangelogIndexLazyImport.update({ path: '/changelog/', getParentRoute: () => rootRoute, @@ -47,6 +57,16 @@ const ChangelogIndexLazyRoute = ChangelogIndexLazyImport.update({ import('./routes/changelog.index.lazy').then((d) => d.Route), ) +const PageCreateLazyRoute = PageCreateLazyImport.update({ + path: '/page/create', + getParentRoute: () => rootRoute, +} as any).lazy(() => import('./routes/page.create.lazy').then((d) => d.Route)) + +const PageIdLazyRoute = PageIdLazyImport.update({ + path: '/page/$id', + getParentRoute: () => rootRoute, +} as any).lazy(() => import('./routes/page.$id.lazy').then((d) => d.Route)) + const ChangelogCreateLazyRoute = ChangelogCreateLazyImport.update({ path: '/changelog/create', getParentRoute: () => rootRoute, @@ -59,6 +79,13 @@ const ChangelogIdLazyRoute = ChangelogIdLazyImport.update({ getParentRoute: () => rootRoute, } as any).lazy(() => import('./routes/changelog.$id.lazy').then((d) => d.Route)) +const PageIdIndexLazyRoute = PageIdIndexLazyImport.update({ + path: '/', + getParentRoute: () => PageIdLazyRoute, +} as any).lazy(() => + import('./routes/page.$id.index.lazy').then((d) => d.Route), +) + const ChangelogIdIndexLazyRoute = ChangelogIdIndexLazyImport.update({ path: '/', getParentRoute: () => ChangelogIdLazyRoute, @@ -66,6 +93,11 @@ const ChangelogIdIndexLazyRoute = ChangelogIdIndexLazyImport.update({ import('./routes/changelog.$id.index.lazy').then((d) => d.Route), ) +const PageIdEditLazyRoute = PageIdEditLazyImport.update({ + path: '/edit', + getParentRoute: () => PageIdLazyRoute, +} as any).lazy(() => import('./routes/page.$id.edit.lazy').then((d) => d.Route)) + const ChangelogIdVersionCreateLazyRoute = ChangelogIdVersionCreateLazyImport.update({ path: '/versionCreate', @@ -112,6 +144,20 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ChangelogCreateLazyImport parentRoute: typeof rootRoute } + '/page/$id': { + id: '/page/$id' + path: '/page/$id' + fullPath: '/page/$id' + preLoaderRoute: typeof PageIdLazyImport + parentRoute: typeof rootRoute + } + '/page/create': { + id: '/page/create' + path: '/page/create' + fullPath: '/page/create' + preLoaderRoute: typeof PageCreateLazyImport + parentRoute: typeof rootRoute + } '/changelog/': { id: '/changelog/' path: '/changelog' @@ -119,6 +165,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ChangelogIndexLazyImport parentRoute: typeof rootRoute } + '/page/': { + id: '/page/' + path: '/page' + fullPath: '/page' + preLoaderRoute: typeof PageIndexLazyImport + parentRoute: typeof rootRoute + } '/user/': { id: '/user/' path: '/user' @@ -140,6 +193,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ChangelogIdVersionCreateLazyImport parentRoute: typeof ChangelogIdLazyImport } + '/page/$id/edit': { + id: '/page/$id/edit' + path: '/edit' + fullPath: '/page/$id/edit' + preLoaderRoute: typeof PageIdEditLazyImport + parentRoute: typeof PageIdLazyImport + } '/changelog/$id/': { id: '/changelog/$id/' path: '/' @@ -147,6 +207,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ChangelogIdIndexLazyImport parentRoute: typeof ChangelogIdLazyImport } + '/page/$id/': { + id: '/page/$id/' + path: '/' + fullPath: '/page/$id/' + preLoaderRoute: typeof PageIdIndexLazyImport + parentRoute: typeof PageIdLazyImport + } '/changelog/$id/version/$versionId': { id: '/changelog/$id/version/$versionId' path: '/version/$versionId' @@ -177,26 +244,49 @@ const ChangelogIdLazyRouteWithChildren = ChangelogIdLazyRoute._addFileChildren( ChangelogIdLazyRouteChildren, ) +interface PageIdLazyRouteChildren { + PageIdEditLazyRoute: typeof PageIdEditLazyRoute + PageIdIndexLazyRoute: typeof PageIdIndexLazyRoute +} + +const PageIdLazyRouteChildren: PageIdLazyRouteChildren = { + PageIdEditLazyRoute: PageIdEditLazyRoute, + PageIdIndexLazyRoute: PageIdIndexLazyRoute, +} + +const PageIdLazyRouteWithChildren = PageIdLazyRoute._addFileChildren( + PageIdLazyRouteChildren, +) + export interface FileRoutesByFullPath { '/': typeof IndexLazyRoute '/changelog/$id': typeof ChangelogIdLazyRouteWithChildren '/changelog/create': typeof ChangelogCreateLazyRoute + '/page/$id': typeof PageIdLazyRouteWithChildren + '/page/create': typeof PageCreateLazyRoute '/changelog': typeof ChangelogIndexLazyRoute + '/page': typeof PageIndexLazyRoute '/user': typeof UserIndexLazyRoute '/changelog/$id/edit': typeof ChangelogIdEditLazyRoute '/changelog/$id/versionCreate': typeof ChangelogIdVersionCreateLazyRoute + '/page/$id/edit': typeof PageIdEditLazyRoute '/changelog/$id/': typeof ChangelogIdIndexLazyRoute + '/page/$id/': typeof PageIdIndexLazyRoute '/changelog/$id/version/$versionId': typeof ChangelogIdVersionVersionIdRoute } export interface FileRoutesByTo { '/': typeof IndexLazyRoute '/changelog/create': typeof ChangelogCreateLazyRoute + '/page/create': typeof PageCreateLazyRoute '/changelog': typeof ChangelogIndexLazyRoute + '/page': typeof PageIndexLazyRoute '/user': typeof UserIndexLazyRoute '/changelog/$id/edit': typeof ChangelogIdEditLazyRoute '/changelog/$id/versionCreate': typeof ChangelogIdVersionCreateLazyRoute + '/page/$id/edit': typeof PageIdEditLazyRoute '/changelog/$id': typeof ChangelogIdIndexLazyRoute + '/page/$id': typeof PageIdIndexLazyRoute '/changelog/$id/version/$versionId': typeof ChangelogIdVersionVersionIdRoute } @@ -205,11 +295,16 @@ export interface FileRoutesById { '/': typeof IndexLazyRoute '/changelog/$id': typeof ChangelogIdLazyRouteWithChildren '/changelog/create': typeof ChangelogCreateLazyRoute + '/page/$id': typeof PageIdLazyRouteWithChildren + '/page/create': typeof PageCreateLazyRoute '/changelog/': typeof ChangelogIndexLazyRoute + '/page/': typeof PageIndexLazyRoute '/user/': typeof UserIndexLazyRoute '/changelog/$id/edit': typeof ChangelogIdEditLazyRoute '/changelog/$id/versionCreate': typeof ChangelogIdVersionCreateLazyRoute + '/page/$id/edit': typeof PageIdEditLazyRoute '/changelog/$id/': typeof ChangelogIdIndexLazyRoute + '/page/$id/': typeof PageIdIndexLazyRoute '/changelog/$id/version/$versionId': typeof ChangelogIdVersionVersionIdRoute } @@ -219,32 +314,46 @@ export interface FileRouteTypes { | '/' | '/changelog/$id' | '/changelog/create' + | '/page/$id' + | '/page/create' | '/changelog' + | '/page' | '/user' | '/changelog/$id/edit' | '/changelog/$id/versionCreate' + | '/page/$id/edit' | '/changelog/$id/' + | '/page/$id/' | '/changelog/$id/version/$versionId' fileRoutesByTo: FileRoutesByTo to: | '/' | '/changelog/create' + | '/page/create' | '/changelog' + | '/page' | '/user' | '/changelog/$id/edit' | '/changelog/$id/versionCreate' + | '/page/$id/edit' | '/changelog/$id' + | '/page/$id' | '/changelog/$id/version/$versionId' id: | '__root__' | '/' | '/changelog/$id' | '/changelog/create' + | '/page/$id' + | '/page/create' | '/changelog/' + | '/page/' | '/user/' | '/changelog/$id/edit' | '/changelog/$id/versionCreate' + | '/page/$id/edit' | '/changelog/$id/' + | '/page/$id/' | '/changelog/$id/version/$versionId' fileRoutesById: FileRoutesById } @@ -253,7 +362,10 @@ export interface RootRouteChildren { IndexLazyRoute: typeof IndexLazyRoute ChangelogIdLazyRoute: typeof ChangelogIdLazyRouteWithChildren ChangelogCreateLazyRoute: typeof ChangelogCreateLazyRoute + PageIdLazyRoute: typeof PageIdLazyRouteWithChildren + PageCreateLazyRoute: typeof PageCreateLazyRoute ChangelogIndexLazyRoute: typeof ChangelogIndexLazyRoute + PageIndexLazyRoute: typeof PageIndexLazyRoute UserIndexLazyRoute: typeof UserIndexLazyRoute } @@ -261,7 +373,10 @@ const rootRouteChildren: RootRouteChildren = { IndexLazyRoute: IndexLazyRoute, ChangelogIdLazyRoute: ChangelogIdLazyRouteWithChildren, ChangelogCreateLazyRoute: ChangelogCreateLazyRoute, + PageIdLazyRoute: PageIdLazyRouteWithChildren, + PageCreateLazyRoute: PageCreateLazyRoute, ChangelogIndexLazyRoute: ChangelogIndexLazyRoute, + PageIndexLazyRoute: PageIndexLazyRoute, UserIndexLazyRoute: UserIndexLazyRoute, } @@ -280,7 +395,10 @@ export const routeTree = rootRoute "/", "/changelog/$id", "/changelog/create", + "/page/$id", + "/page/create", "/changelog/", + "/page/", "/user/" ] }, @@ -299,9 +417,22 @@ export const routeTree = rootRoute "/changelog/create": { "filePath": "changelog.create.lazy.tsx" }, + "/page/$id": { + "filePath": "page.$id.lazy.tsx", + "children": [ + "/page/$id/edit", + "/page/$id/" + ] + }, + "/page/create": { + "filePath": "page.create.lazy.tsx" + }, "/changelog/": { "filePath": "changelog.index.lazy.tsx" }, + "/page/": { + "filePath": "page.index.lazy.tsx" + }, "/user/": { "filePath": "user/index.lazy.tsx" }, @@ -313,10 +444,18 @@ export const routeTree = rootRoute "filePath": "changelog.$id.versionCreate.lazy.tsx", "parent": "/changelog/$id" }, + "/page/$id/edit": { + "filePath": "page.$id.edit.lazy.tsx", + "parent": "/page/$id" + }, "/changelog/$id/": { "filePath": "changelog.$id.index.lazy.tsx", "parent": "/changelog/$id" }, + "/page/$id/": { + "filePath": "page.$id.index.lazy.tsx", + "parent": "/page/$id" + }, "/changelog/$id/version/$versionId": { "filePath": "changelog.$id.version.$versionId.tsx", "parent": "/changelog/$id" diff --git a/apps/app/src/routes/changelog.$id.lazy.tsx b/apps/app/src/routes/changelog.$id.lazy.tsx index 48f6837..6094fe5 100644 --- a/apps/app/src/routes/changelog.$id.lazy.tsx +++ b/apps/app/src/routes/changelog.$id.lazy.tsx @@ -13,7 +13,7 @@ import { useChangelogById } from '../hooks/useChangelog' const Component = () => { const { id } = Route.useParams() const { data, error, isPending, refetch } = useChangelogById({ id }) - + console.log(data) if (error) { return (
diff --git a/apps/app/src/routes/page.$id.edit.lazy.tsx b/apps/app/src/routes/page.$id.edit.lazy.tsx new file mode 100644 index 0000000..b02b02b --- /dev/null +++ b/apps/app/src/routes/page.$id.edit.lazy.tsx @@ -0,0 +1,192 @@ +import { PageUpdateInput } from '@boring.tools/schema' +import { + Button, + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, + Input, + Popover, + PopoverContent, + PopoverTrigger, + Textarea, + cn, +} from '@boring.tools/ui' +import { zodResolver } from '@hookform/resolvers/zod' +import { createLazyFileRoute } from '@tanstack/react-router' +import { useNavigate } from '@tanstack/react-router' +import { Check, ChevronsUpDown } from 'lucide-react' +import { useForm } from 'react-hook-form' +import type { z } from 'zod' +import { useChangelogList } from '../hooks/useChangelog' +import { usePageById, usePageUpdate } from '../hooks/usePage' + +const Component = () => { + const { id } = Route.useParams() + const navigate = useNavigate({ from: `/page/${id}/edit` }) + const page = usePageById({ id }) + const changelogList = useChangelogList() + const pageUpdate = usePageUpdate() + const form = useForm>({ + resolver: zodResolver(PageUpdateInput), + defaultValues: { + ...page.data, + changelogIds: page.data?.changelogs.map((log) => log.id), + }, + }) + const onSubmit = (values: z.infer) => { + pageUpdate.mutate( + { id, payload: values }, + { + onSuccess(data) { + navigate({ to: '/page/$id', params: { id: data.id } }) + }, + }, + ) + } + + return ( + <> +
+

Edit page

+ +
+ + ( + + Title + + + {' '} + + + )} + /> + + ( + + Description + +