diff --git a/adminfront/src/components/layout/AppLayout.tsx b/adminfront/src/components/layout/AppLayout.tsx index 8d169d8d..76140dd5 100644 --- a/adminfront/src/components/layout/AppLayout.tsx +++ b/adminfront/src/components/layout/AppLayout.tsx @@ -561,10 +561,7 @@ function AppLayout() { {isProfileOpen ? ( -
+

{t("ui.dev.profile.menu_title", "Account")}

diff --git a/adminfront/src/components/ui/badge.tsx b/adminfront/src/components/ui/badge.tsx index 98e1ad01..d30c5d1c 100644 --- a/adminfront/src/components/ui/badge.tsx +++ b/adminfront/src/components/ui/badge.tsx @@ -5,13 +5,17 @@ import { } from "../../../../common/ui/badge"; import { cn } from "../../lib/utils"; -export interface BadgeProps - extends React.HTMLAttributes { +export interface BadgeProps extends React.HTMLAttributes { variant?: CommonBadgeVariant; } function Badge({ className, variant, ...props }: BadgeProps) { - return
; + return ( +
+ ); } export { Badge }; diff --git a/adminfront/src/components/ui/card.tsx b/adminfront/src/components/ui/card.tsx index a96a29b5..33685c34 100644 --- a/adminfront/src/components/ui/card.tsx +++ b/adminfront/src/components/ui/card.tsx @@ -10,39 +10,28 @@ import { import { cn } from "../../lib/utils"; function Card({ className, ...props }: React.HTMLAttributes) { - return ( -
- ); + return
; } function CardHeader({ className, ...props }: React.HTMLAttributes) { - return ( -
- ); + return
; } function CardTitle({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return

; } function CardDescription({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return

; } function CardContent({ @@ -56,9 +45,7 @@ function CardFooter({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return
; } export { diff --git a/adminfront/src/components/ui/input.tsx b/adminfront/src/components/ui/input.tsx index c4dc7a83..1322da14 100644 --- a/adminfront/src/components/ui/input.tsx +++ b/adminfront/src/components/ui/input.tsx @@ -10,10 +10,7 @@ const Input = React.forwardRef( return ( diff --git a/adminfront/src/features/tenants/routes/TenantListPage.tsx b/adminfront/src/features/tenants/routes/TenantListPage.tsx index afa440e1..33035aef 100644 --- a/adminfront/src/features/tenants/routes/TenantListPage.tsx +++ b/adminfront/src/features/tenants/routes/TenantListPage.tsx @@ -368,7 +368,10 @@ function TenantListPage() { const importParentOptionGroups = buildTenantImportParentOptionGroups(allTenants); const tenantSortResolvers = React.useMemo< - SortResolverMap + SortResolverMap< + TenantSummary & { recursiveMemberCount: number }, + TenantSortKey + > >( () => ({ recursiveMemberCount: (tenant) => tenant.recursiveMemberCount, diff --git a/adminfront/src/features/users/UserListPage.tsx b/adminfront/src/features/users/UserListPage.tsx index cfc59a30..590b50be 100644 --- a/adminfront/src/features/users/UserListPage.tsx +++ b/adminfront/src/features/users/UserListPage.tsx @@ -89,9 +89,8 @@ function UserListPage() { Record >({}); const [selectedUserIds, setSelectedUserIds] = React.useState([]); - const [sortConfig, setSortConfig] = React.useState | null>( - null, - ); + const [sortConfig, setSortConfig] = + React.useState | null>(null); const limit = 1000; const offset = (page - 1) * limit; @@ -224,20 +223,22 @@ function UserListPage() { : null; const rawItems = query.data?.items ?? []; - const userSortResolvers = React.useMemo>( + const userSortResolvers = React.useMemo< + SortResolverMap + >( () => userSchema.reduce>( - (accumulator, field) => ({ - ...accumulator, - [field.key]: (user) => { + (accumulator, field) => { + accumulator[field.key] = (user) => { const value = user.metadata?.[field.key]; return typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? value : null; - }, - }), + }; + return accumulator; + }, { name_email: (user) => `${user.name ?? ""} ${user.email ?? ""} ${user.phone ?? ""}`, diff --git a/adminfront/src/index.css b/adminfront/src/index.css index 61376c48..8eea6872 100644 --- a/adminfront/src/index.css +++ b/adminfront/src/index.css @@ -26,8 +26,7 @@ --input: 215 25% 24%; --ring: 209 79% 52%; --radius: 0.75rem; - --app-background-image: - radial-gradient( + --app-background-image: radial-gradient( circle at 10% 18%, rgba(54, 211, 153, 0.16), transparent 28% diff --git a/devfront/src/app/routes.tsx b/devfront/src/app/routes.tsx index df300892..acaed7b2 100644 --- a/devfront/src/app/routes.tsx +++ b/devfront/src/app/routes.tsx @@ -1,7 +1,4 @@ -import { - type RouteObject, - createBrowserRouter, -} from "react-router-dom"; +import { type RouteObject, createBrowserRouter } from "react-router-dom"; import AppLayout from "../components/layout/AppLayout"; import AuditLogsPage from "../features/audit/AuditLogsPage"; import AuthCallbackPage from "../features/auth/AuthCallbackPage"; diff --git a/devfront/src/components/layout/AppLayout.tsx b/devfront/src/components/layout/AppLayout.tsx index da52bd17..906c1d51 100644 --- a/devfront/src/components/layout/AppLayout.tsx +++ b/devfront/src/components/layout/AppLayout.tsx @@ -436,10 +436,7 @@ function AppLayout() { /> {isProfileMenuOpen ? ( -
+

{t("ui.dev.profile.menu_title", "Account")}

diff --git a/devfront/src/components/ui/badge.tsx b/devfront/src/components/ui/badge.tsx index 98e1ad01..d30c5d1c 100644 --- a/devfront/src/components/ui/badge.tsx +++ b/devfront/src/components/ui/badge.tsx @@ -5,13 +5,17 @@ import { } from "../../../../common/ui/badge"; import { cn } from "../../lib/utils"; -export interface BadgeProps - extends React.HTMLAttributes { +export interface BadgeProps extends React.HTMLAttributes { variant?: CommonBadgeVariant; } function Badge({ className, variant, ...props }: BadgeProps) { - return
; + return ( +
+ ); } export { Badge }; diff --git a/devfront/src/components/ui/card.tsx b/devfront/src/components/ui/card.tsx index a96a29b5..33685c34 100644 --- a/devfront/src/components/ui/card.tsx +++ b/devfront/src/components/ui/card.tsx @@ -10,39 +10,28 @@ import { import { cn } from "../../lib/utils"; function Card({ className, ...props }: React.HTMLAttributes) { - return ( -
- ); + return
; } function CardHeader({ className, ...props }: React.HTMLAttributes) { - return ( -
- ); + return
; } function CardTitle({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return

; } function CardDescription({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return

; } function CardContent({ @@ -56,9 +45,7 @@ function CardFooter({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return
; } export { diff --git a/devfront/src/components/ui/input.tsx b/devfront/src/components/ui/input.tsx index c4dc7a83..1322da14 100644 --- a/devfront/src/components/ui/input.tsx +++ b/devfront/src/components/ui/input.tsx @@ -10,10 +10,7 @@ const Input = React.forwardRef( return ( diff --git a/devfront/src/features/dashboard/DashboardPage.tsx b/devfront/src/features/dashboard/DashboardPage.tsx index c94ed268..45aebc80 100644 --- a/devfront/src/features/dashboard/DashboardPage.tsx +++ b/devfront/src/features/dashboard/DashboardPage.tsx @@ -129,7 +129,10 @@ function summarizeSeries(rows: RPUsageDailyMetric[]): SeriesSummary[] { } satisfies SeriesSummary); current.loginRequests += row.loginRequests; current.otherRequests += row.otherRequests; - current.uniqueSubjects = Math.max(current.uniqueSubjects, row.uniqueSubjects); + current.uniqueSubjects = Math.max( + current.uniqueSubjects, + row.uniqueSubjects, + ); bySeries.set(key, current); } return Array.from(bySeries.values()) @@ -153,12 +156,10 @@ function buildMultiLineSeries(rows: RPUsageDailyMetric[]): MultiLineSeries[] { >(); for (const row of rows) { - const current = - byClient.get(row.clientId) ?? - { - clientLabel: row.clientName || row.clientId, - byDate: new Map(), - }; + const current = byClient.get(row.clientId) ?? { + clientLabel: row.clientName || row.clientId, + byDate: new Map(), + }; const point = current.byDate.get(row.date) ?? ({ @@ -173,7 +174,9 @@ function buildMultiLineSeries(rows: RPUsageDailyMetric[]): MultiLineSeries[] { } return Array.from(byClient.entries()) - .sort((left, right) => left[1].clientLabel.localeCompare(right[1].clientLabel)) + .sort((left, right) => + left[1].clientLabel.localeCompare(right[1].clientLabel), + ) .map(([clientId, entry], index) => ({ key: clientId, clientLabel: entry.clientLabel, @@ -307,10 +310,7 @@ function RPUsageMixedChart({ if (daily.length === 0) { return (
- {t( - "msg.dev.dashboard.chart.empty", - "표시할 RP 이용 집계가 없습니다.", - )} + {t("msg.dev.dashboard.chart.empty", "표시할 RP 이용 집계가 없습니다.")}
); } @@ -477,11 +477,15 @@ function RPUsageMixedChart({
{item.clientLabel} - {t("ui.dev.dashboard.chart.series", "로그인 {{login}} / 기타 {{other}} / 사용자 {{subjects}}", { - login: item.loginRequests.toLocaleString(), - other: item.otherRequests.toLocaleString(), - subjects: item.uniqueSubjects.toLocaleString(), - })} + {t( + "ui.dev.dashboard.chart.series", + "로그인 {{login}} / 기타 {{other}} / 사용자 {{subjects}}", + { + login: item.loginRequests.toLocaleString(), + other: item.otherRequests.toLocaleString(), + subjects: item.uniqueSubjects.toLocaleString(), + }, + )}
))} @@ -582,9 +586,11 @@ function DashboardPage() { "msg.dev.dashboard.chart.unavailable_with_reason", "RP 이용 통계 API 응답을 확인할 수 없습니다. {{reason}}", { - reason: usageErrorMessage || t("err.common.unknown", "알 수 없는 오류"), + reason: + usageErrorMessage || + t("err.common.unknown", "알 수 없는 오류"), }, - ); + ); const isAllClientsSelected = selectedClientIds.length === 0; const toggleClientSelection = (clientId: string) => { @@ -712,9 +718,7 @@ function DashboardPage() {
{usageQuery.isError ? ( -
- {usageErrorText} -
+
{usageErrorText}
) : isAllClientsSelected ? ( ) : ( @@ -762,10 +766,7 @@ function DashboardPage() {

- {t( - "ui.dev.dashboard.distribution.headless", - "Headless Login", - )} + {t("ui.dev.dashboard.distribution.headless", "Headless Login")}

{distribution.headlessClients.toLocaleString()} @@ -817,10 +818,7 @@ function DashboardPage() { "Server side App (Headless Login)", ) : client.type === "private" - ? t( - "ui.dev.clients.type.private", - "Server side App", - ) + ? t("ui.dev.clients.type.private", "Server side App") : t("ui.dev.clients.type.pkce", "PKCE")}

diff --git a/devfront/src/index.css b/devfront/src/index.css index 61376c48..8eea6872 100644 --- a/devfront/src/index.css +++ b/devfront/src/index.css @@ -26,8 +26,7 @@ --input: 215 25% 24%; --ring: 209 79% 52%; --radius: 0.75rem; - --app-background-image: - radial-gradient( + --app-background-image: radial-gradient( circle at 10% 18%, rgba(54, 211, 153, 0.16), transparent 28% diff --git a/orgfront/src/components/layout/AppLayout.tsx b/orgfront/src/components/layout/AppLayout.tsx index b9b55eda..157b841b 100644 --- a/orgfront/src/components/layout/AppLayout.tsx +++ b/orgfront/src/components/layout/AppLayout.tsx @@ -421,10 +421,7 @@ function AppLayout() { /> {isProfileMenuOpen ? ( -

+

{t("ui.dev.profile.menu_title", "Account")}

diff --git a/orgfront/src/components/ui/badge.tsx b/orgfront/src/components/ui/badge.tsx index 98e1ad01..d30c5d1c 100644 --- a/orgfront/src/components/ui/badge.tsx +++ b/orgfront/src/components/ui/badge.tsx @@ -5,13 +5,17 @@ import { } from "../../../../common/ui/badge"; import { cn } from "../../lib/utils"; -export interface BadgeProps - extends React.HTMLAttributes { +export interface BadgeProps extends React.HTMLAttributes { variant?: CommonBadgeVariant; } function Badge({ className, variant, ...props }: BadgeProps) { - return
; + return ( +
+ ); } export { Badge }; diff --git a/orgfront/src/components/ui/card.tsx b/orgfront/src/components/ui/card.tsx index a96a29b5..33685c34 100644 --- a/orgfront/src/components/ui/card.tsx +++ b/orgfront/src/components/ui/card.tsx @@ -10,39 +10,28 @@ import { import { cn } from "../../lib/utils"; function Card({ className, ...props }: React.HTMLAttributes) { - return ( -
- ); + return
; } function CardHeader({ className, ...props }: React.HTMLAttributes) { - return ( -
- ); + return
; } function CardTitle({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return

; } function CardDescription({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return

; } function CardContent({ @@ -56,9 +45,7 @@ function CardFooter({ className, ...props }: React.HTMLAttributes) { - return ( -

- ); + return
; } export { diff --git a/orgfront/src/components/ui/input.tsx b/orgfront/src/components/ui/input.tsx index c4dc7a83..1322da14 100644 --- a/orgfront/src/components/ui/input.tsx +++ b/orgfront/src/components/ui/input.tsx @@ -10,10 +10,7 @@ const Input = React.forwardRef( return (