From eb8f0be0041561c11def31cd114258d3df19e4d4 Mon Sep 17 00:00:00 2001 From: lonelyhentxi Date: Thu, 24 Apr 2025 02:23:26 +0800 Subject: [PATCH] refactor: refactor webui structure --- apps/recorder/.env | 17 +- apps/recorder/src/graphql/guard.rs | 7 +- apps/webui/.env | 5 - apps/webui/components.json | 4 +- apps/webui/src/{ => app}/auth/config.ts | 2 +- apps/webui/src/{ => app}/auth/context.ts | 4 +- apps/webui/src/{ => app}/auth/guard.ts | 2 +- apps/webui/src/{ => app}/auth/hooks.ts | 0 .../src/components/layout/app-layout.tsx | 6 +- .../src/components/layout/app-sidebar.tsx | 2 +- apps/webui/src/components/ui/accordion.tsx | 2 +- apps/webui/src/components/ui/alert-dialog.tsx | 2 +- apps/webui/src/components/ui/alert.tsx | 2 +- apps/webui/src/components/ui/avatar.tsx | 2 +- apps/webui/src/components/ui/badge.tsx | 2 +- apps/webui/src/components/ui/breadcrumb.tsx | 2 +- apps/webui/src/components/ui/button.tsx | 2 +- apps/webui/src/components/ui/calendar.tsx | 2 +- apps/webui/src/components/ui/card.tsx | 48 +-- apps/webui/src/components/ui/carousel.tsx | 2 +- apps/webui/src/components/ui/chart.tsx | 130 ++++---- apps/webui/src/components/ui/checkbox.tsx | 2 +- apps/webui/src/components/ui/command.tsx | 2 +- apps/webui/src/components/ui/context-menu.tsx | 2 +- apps/webui/src/components/ui/dialog.tsx | 2 +- apps/webui/src/components/ui/drawer.tsx | 2 +- .../webui/src/components/ui/dropdown-menu.tsx | 2 +- apps/webui/src/components/ui/form.tsx | 85 +++--- apps/webui/src/components/ui/hover-card.tsx | 2 +- apps/webui/src/components/ui/input-otp.tsx | 2 +- apps/webui/src/components/ui/input.tsx | 2 +- apps/webui/src/components/ui/label.tsx | 2 +- apps/webui/src/components/ui/menubar.tsx | 2 +- .../src/components/ui/navigation-menu.tsx | 2 +- apps/webui/src/components/ui/pagination.tsx | 2 +- apps/webui/src/components/ui/popover.tsx | 2 +- apps/webui/src/components/ui/pro-link.tsx | 16 +- .../src/components/ui/progress-circle.tsx | 2 +- apps/webui/src/components/ui/progress.tsx | 2 +- apps/webui/src/components/ui/radio-group.tsx | 2 +- apps/webui/src/components/ui/resizable.tsx | 2 +- apps/webui/src/components/ui/scroll-area.tsx | 2 +- apps/webui/src/components/ui/select.tsx | 2 +- apps/webui/src/components/ui/separator.tsx | 2 +- apps/webui/src/components/ui/sheet.tsx | 2 +- apps/webui/src/components/ui/sidebar.tsx | 279 +++++++++--------- apps/webui/src/components/ui/skeleton.tsx | 7 +- apps/webui/src/components/ui/slider.tsx | 2 +- apps/webui/src/components/ui/spinner.tsx | 2 +- apps/webui/src/components/ui/switch.tsx | 2 +- apps/webui/src/components/ui/table.tsx | 2 +- apps/webui/src/components/ui/tabs.tsx | 2 +- apps/webui/src/components/ui/textarea.tsx | 2 +- apps/webui/src/components/ui/toggle-group.tsx | 2 +- apps/webui/src/components/ui/toggle.tsx | 2 +- apps/webui/src/components/ui/tooltip.tsx | 2 +- apps/webui/src/{ => infra}/errors/common.ts | 0 .../webui/src/{ => infra}/hooks/use-mobile.ts | 0 .../webui/src/{ => infra}/platform/context.ts | 0 apps/webui/src/{ => infra}/platform/errors.ts | 0 .../src/{ => infra}/platform/injection.ts | 0 .../app-layout.ts => infra/routes/nav.ts} | 0 .../router.ts => infra/routes/traits.ts} | 0 .../route/index.ts => infra/routes/utils.ts} | 2 +- apps/webui/src/{ => infra}/storage/context.ts | 0 .../storage/web-storage.service.ts | 4 +- apps/webui/src/{ => infra}/styles/context.ts | 0 .../src/{ => infra}/styles/theme.service.ts | 4 +- apps/webui/src/{ => infra}/styles/utils.ts | 0 apps/webui/src/main.tsx | 8 +- apps/webui/src/routes/__root.tsx | 5 +- .../src/routes/_app/_explore/explore.tsx | 2 +- apps/webui/src/routes/_app/_explore/feed.tsx | 2 +- .../_app/playground/graphql-api.lazy.tsx | 4 +- .../routes/_app/playground/graphql-api.tsx | 2 +- .../src/routes/_app/playground/route.tsx | 2 +- apps/webui/src/routes/_app/route.tsx | 2 +- .../src/routes/_app/settings/downloader.tsx | 2 +- apps/webui/src/routes/_app/settings/route.tsx | 2 +- .../src/routes/_app/subscriptions/create.tsx | 8 +- .../subscriptions/edit.$subscription-id.tsx | 2 +- .../src/routes/_app/subscriptions/manage.tsx | 2 +- .../src/routes/_app/subscriptions/route.tsx | 2 +- apps/webui/src/routes/auth/oidc/callback.tsx | 4 +- biome.json | 33 +++ dev.kdl | 2 +- justfile | 4 +- 87 files changed, 407 insertions(+), 385 deletions(-) rename apps/webui/src/{ => app}/auth/config.ts (97%) rename apps/webui/src/{ => app}/auth/context.ts (95%) rename apps/webui/src/{ => app}/auth/guard.ts (91%) rename apps/webui/src/{ => app}/auth/hooks.ts (100%) rename apps/webui/src/{ => infra}/errors/common.ts (100%) rename apps/webui/src/{ => infra}/hooks/use-mobile.ts (100%) rename apps/webui/src/{ => infra}/platform/context.ts (100%) rename apps/webui/src/{ => infra}/platform/errors.ts (100%) rename apps/webui/src/{ => infra}/platform/injection.ts (100%) rename apps/webui/src/{config/app-layout.ts => infra/routes/nav.ts} (100%) rename apps/webui/src/{traits/router.ts => infra/routes/traits.ts} (100%) rename apps/webui/src/{utils/route/index.ts => infra/routes/utils.ts} (92%) rename apps/webui/src/{ => infra}/storage/context.ts (100%) rename apps/webui/src/{ => infra}/storage/web-storage.service.ts (88%) rename apps/webui/src/{ => infra}/styles/context.ts (100%) rename apps/webui/src/{ => infra}/styles/theme.service.ts (90%) rename apps/webui/src/{ => infra}/styles/utils.ts (100%) diff --git a/apps/recorder/.env b/apps/recorder/.env index 455bbef..b28612b 100644 --- a/apps/recorder/.env +++ b/apps/recorder/.env @@ -1,8 +1,13 @@ -AUTH_TYPE = "oidc" # or oidc +HOST="konobangu.com" +DATABASE_URL = "postgres://konobangu:konobangu@localhost:5432/konobangu" +STORAGE_DATA_DIR = "./data" +AUTH_TYPE = "basic" # or oidc BASIC_USER = "konobangu" BASIC_PASSWORD = "konobangu" -OIDC_ISSUER="https://auth.logto.io/oidc" -OIDC_AUDIENCE = "https://konobangu.com/api" -OIDC_CLIENT_ID = "client_id" -OIDC_CLIENT_SECRET = "client_secret" # optional -OIDC_EXTRA_SCOPES = "read:konobangu write:konobangu" +# OIDC_ISSUER="https://auth.logto.io/oidc" +# OIDC_AUDIENCE = "https://konobangu.com/api" +# OIDC_CLIENT_ID = "client_id" +# OIDC_CLIENT_SECRET = "client_secret" # optional +# OIDC_EXTRA_SCOPES = "read:konobangu write:konobangu" +# OIDC_EXTRA_CLAIM_KEY = "" +# OIDC_EXTRA_CLAIM_VALUE = "" diff --git a/apps/recorder/src/graphql/guard.rs b/apps/recorder/src/graphql/guard.rs index 2263a0d..5452da4 100644 --- a/apps/recorder/src/graphql/guard.rs +++ b/apps/recorder/src/graphql/guard.rs @@ -157,12 +157,7 @@ where None => Ok(()), } } - field => Err(AuthError::from_graphql_subscribe_id_guard( - async_graphql::Error::new("unsupport graphql field"), - context, - field, - "", - )), + _ => Ok(()), }; match validation_result { Ok(_) => GuardAction::Allow, diff --git a/apps/webui/.env b/apps/webui/.env index b28612b..25d335c 100644 --- a/apps/webui/.env +++ b/apps/webui/.env @@ -1,6 +1,3 @@ -HOST="konobangu.com" -DATABASE_URL = "postgres://konobangu:konobangu@localhost:5432/konobangu" -STORAGE_DATA_DIR = "./data" AUTH_TYPE = "basic" # or oidc BASIC_USER = "konobangu" BASIC_PASSWORD = "konobangu" @@ -9,5 +6,3 @@ BASIC_PASSWORD = "konobangu" # OIDC_CLIENT_ID = "client_id" # OIDC_CLIENT_SECRET = "client_secret" # optional # OIDC_EXTRA_SCOPES = "read:konobangu write:konobangu" -# OIDC_EXTRA_CLAIM_KEY = "" -# OIDC_EXTRA_CLAIM_VALUE = "" diff --git a/apps/webui/components.json b/apps/webui/components.json index db30f5b..6a6ec45 100644 --- a/apps/webui/components.json +++ b/apps/webui/components.json @@ -11,10 +11,10 @@ }, "aliases": { "components": "@/components", - "utils": "@/styles/utils", + "utils": "@/infra/styles/utils", "ui": "@/components/ui", "lib": "@/lib", - "hooks": "@/hooks" + "hooks": "@/infra/hooks" }, "iconLibrary": "lucide" } diff --git a/apps/webui/src/auth/config.ts b/apps/webui/src/app/auth/config.ts similarity index 97% rename from apps/webui/src/auth/config.ts rename to apps/webui/src/app/auth/config.ts index df98564..216835a 100644 --- a/apps/webui/src/auth/config.ts +++ b/apps/webui/src/app/auth/config.ts @@ -28,7 +28,7 @@ export function buildOidcConfig(): OpenIdConfiguration { responseType: 'code', silentRenew: true, useRefreshToken: true, - logLevel: LogLevel.Debug, + logLevel: LogLevel.None, autoUserInfo: !resource, renewUserInfoAfterTokenRenew: !resource, customParamsAuthRequest: { diff --git a/apps/webui/src/auth/context.ts b/apps/webui/src/app/auth/context.ts similarity index 95% rename from apps/webui/src/auth/context.ts rename to apps/webui/src/app/auth/context.ts index 8706b2e..e018f4f 100644 --- a/apps/webui/src/auth/context.ts +++ b/apps/webui/src/app/auth/context.ts @@ -1,8 +1,6 @@ -import { UnreachableError } from '@/errors/common'; +import { UnreachableError } from '@/infra/errors/common'; import type { Injector, Provider } from '@outposts/injection-js'; import type { AnyRouter } from '@tanstack/react-router'; -import { atomSignal } from 'jotai-signal'; -import type { Atom } from 'jotai/vanilla'; import { CHECK_AUTH_RESULT_EVENT, type CheckAuthResultEventType, diff --git a/apps/webui/src/auth/guard.ts b/apps/webui/src/app/auth/guard.ts similarity index 91% rename from apps/webui/src/auth/guard.ts rename to apps/webui/src/app/auth/guard.ts index efafafd..56da264 100644 --- a/apps/webui/src/auth/guard.ts +++ b/apps/webui/src/app/auth/guard.ts @@ -1,4 +1,4 @@ -import type { RouterContext } from '@/traits/router'; +import type { RouterContext } from '@/infra/routes/traits'; import { runInInjectionContext } from '@outposts/injection-js'; import { autoLoginPartialRoutesGuard } from 'oidc-client-rx'; import { firstValueFrom } from 'rxjs'; diff --git a/apps/webui/src/auth/hooks.ts b/apps/webui/src/app/auth/hooks.ts similarity index 100% rename from apps/webui/src/auth/hooks.ts rename to apps/webui/src/app/auth/hooks.ts diff --git a/apps/webui/src/components/layout/app-layout.tsx b/apps/webui/src/components/layout/app-layout.tsx index 2ba4f02..a67db47 100644 --- a/apps/webui/src/components/layout/app-layout.tsx +++ b/apps/webui/src/components/layout/app-layout.tsx @@ -13,9 +13,9 @@ import { SidebarProvider, SidebarTrigger, } from '@/components/ui/sidebar'; -import { cn } from '@/styles/utils'; -import type { RouteStateDataOption } from '@/traits/router'; -import type { RouteBreadcrumbItem } from '@/traits/router'; +import type { RouteStateDataOption } from '@/infra/routes/traits'; +import type { RouteBreadcrumbItem } from '@/infra/routes/traits'; +import { cn } from '@/infra/styles/utils'; import { useMatches } from '@tanstack/react-router'; import { type DetailedHTMLProps, diff --git a/apps/webui/src/components/layout/app-sidebar.tsx b/apps/webui/src/components/layout/app-sidebar.tsx index a80eb7c..4d23a44 100644 --- a/apps/webui/src/components/layout/app-sidebar.tsx +++ b/apps/webui/src/components/layout/app-sidebar.tsx @@ -5,7 +5,7 @@ import { SidebarHeader, SidebarRail, } from '@/components/ui/sidebar'; -import { AppNavMainData } from '@/config/app-layout'; +import { AppNavMainData } from '@/infra/routes/nav'; import type { ComponentPropsWithoutRef } from 'react'; import { AppIcon } from './app-icon'; import { NavMain } from './nav-main'; diff --git a/apps/webui/src/components/ui/accordion.tsx b/apps/webui/src/components/ui/accordion.tsx index 90ad605..b262424 100644 --- a/apps/webui/src/components/ui/accordion.tsx +++ b/apps/webui/src/components/ui/accordion.tsx @@ -2,7 +2,7 @@ import * as React from "react" import * as AccordionPrimitive from "@radix-ui/react-accordion" import { ChevronDownIcon } from "lucide-react" -import { cn } from "@/styles/utils" +import { cn } from "@/infra/styles/utils" function Accordion({ ...props diff --git a/apps/webui/src/components/ui/alert-dialog.tsx b/apps/webui/src/components/ui/alert-dialog.tsx index dc90446..f387492 100644 --- a/apps/webui/src/components/ui/alert-dialog.tsx +++ b/apps/webui/src/components/ui/alert-dialog.tsx @@ -3,7 +3,7 @@ import * as React from "react" import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" -import { cn } from "@/styles/utils" +import { cn } from "@/infra/styles/utils" import { buttonVariants } from "@/components/ui/button" function AlertDialog({ diff --git a/apps/webui/src/components/ui/alert.tsx b/apps/webui/src/components/ui/alert.tsx index c7715ae..a65136c 100644 --- a/apps/webui/src/components/ui/alert.tsx +++ b/apps/webui/src/components/ui/alert.tsx @@ -1,7 +1,7 @@ import * as React from "react" import { cva, type VariantProps } from "class-variance-authority" -import { cn } from "@/styles/utils" +import { cn } from "@/infra/styles/utils" const alertVariants = cva( "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", diff --git a/apps/webui/src/components/ui/avatar.tsx b/apps/webui/src/components/ui/avatar.tsx index 0bde4b8..795e165 100644 --- a/apps/webui/src/components/ui/avatar.tsx +++ b/apps/webui/src/components/ui/avatar.tsx @@ -3,7 +3,7 @@ import * as React from "react" import * as AvatarPrimitive from "@radix-ui/react-avatar" -import { cn } from "@/styles/utils" +import { cn } from "@/infra/styles/utils" function Avatar({ className, diff --git a/apps/webui/src/components/ui/badge.tsx b/apps/webui/src/components/ui/badge.tsx index cc8324d..2a6d599 100644 --- a/apps/webui/src/components/ui/badge.tsx +++ b/apps/webui/src/components/ui/badge.tsx @@ -2,7 +2,7 @@ import * as React from "react" import { Slot } from "@radix-ui/react-slot" import { cva, type VariantProps } from "class-variance-authority" -import { cn } from "@/styles/utils" +import { cn } from "@/infra/styles/utils" const badgeVariants = cva( "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", diff --git a/apps/webui/src/components/ui/breadcrumb.tsx b/apps/webui/src/components/ui/breadcrumb.tsx index aebbf90..4ded77b 100644 --- a/apps/webui/src/components/ui/breadcrumb.tsx +++ b/apps/webui/src/components/ui/breadcrumb.tsx @@ -2,7 +2,7 @@ import * as React from "react" import { Slot } from "@radix-ui/react-slot" import { ChevronRight, MoreHorizontal } from "lucide-react" -import { cn } from "@/styles/utils" +import { cn } from "@/infra/styles/utils" function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { return