1
0
forked from baron/baron-sso

dev 병합 code-check 오류 수정

This commit is contained in:
2026-05-12 13:08:29 +09:00
parent 6709bf3029
commit 7259c62251
18 changed files with 87 additions and 135 deletions

View File

@@ -561,10 +561,7 @@ function AppLayout() {
</button>
{isProfileOpen ? (
<div
role="menu"
className={shellLayoutClasses.profileMenu}
>
<div role="menu" className={shellLayoutClasses.profileMenu}>
<p className="text-xs uppercase tracking-[0.16em] text-muted-foreground">
{t("ui.dev.profile.menu_title", "Account")}
</p>

View File

@@ -5,13 +5,17 @@ import {
} from "../../../../common/ui/badge";
import { cn } from "../../lib/utils";
export interface BadgeProps
extends React.HTMLAttributes<HTMLDivElement> {
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {
variant?: CommonBadgeVariant;
}
function Badge({ className, variant, ...props }: BadgeProps) {
return <div className={cn(getCommonBadgeClasses({ variant }), className)} {...props} />;
return (
<div
className={cn(getCommonBadgeClasses({ variant }), className)}
{...props}
/>
);
}
export { Badge };

View File

@@ -10,39 +10,28 @@ import {
import { cn } from "../../lib/utils";
function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
return (
<div
className={cn(commonCardClass, className)}
{...props}
/>
);
return <div className={cn(commonCardClass, className)} {...props} />;
}
function CardHeader({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div className={cn(commonCardHeaderClass, className)} {...props} />
);
return <div className={cn(commonCardHeaderClass, className)} {...props} />;
}
function CardTitle({
className,
...props
}: React.HTMLAttributes<HTMLHeadingElement>) {
return (
<h3 className={cn(commonCardTitleClass, className)} {...props} />
);
return <h3 className={cn(commonCardTitleClass, className)} {...props} />;
}
function CardDescription({
className,
...props
}: React.HTMLAttributes<HTMLParagraphElement>) {
return (
<p className={cn(commonCardDescriptionClass, className)} {...props} />
);
return <p className={cn(commonCardDescriptionClass, className)} {...props} />;
}
function CardContent({
@@ -56,9 +45,7 @@ function CardFooter({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div className={cn(commonCardFooterClass, className)} {...props} />
);
return <div className={cn(commonCardFooterClass, className)} {...props} />;
}
export {

View File

@@ -10,10 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
return (
<input
type={type}
className={cn(
commonInputClass,
className,
)}
className={cn(commonInputClass, className)}
ref={ref}
{...props}
/>

View File

@@ -368,7 +368,10 @@ function TenantListPage() {
const importParentOptionGroups =
buildTenantImportParentOptionGroups(allTenants);
const tenantSortResolvers = React.useMemo<
SortResolverMap<TenantSummary & { recursiveMemberCount: number }, TenantSortKey>
SortResolverMap<
TenantSummary & { recursiveMemberCount: number },
TenantSortKey
>
>(
() => ({
recursiveMemberCount: (tenant) => tenant.recursiveMemberCount,

View File

@@ -89,9 +89,8 @@ function UserListPage() {
Record<string, boolean>
>({});
const [selectedUserIds, setSelectedUserIds] = React.useState<string[]>([]);
const [sortConfig, setSortConfig] = React.useState<SortConfig<UserSortKey> | null>(
null,
);
const [sortConfig, setSortConfig] =
React.useState<SortConfig<UserSortKey> | 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<SortResolverMap<UserSummary, UserSortKey>>(
const userSortResolvers = React.useMemo<
SortResolverMap<UserSummary, UserSortKey>
>(
() =>
userSchema.reduce<SortResolverMap<UserSummary, UserSortKey>>(
(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 ?? ""}`,

View File

@@ -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%

View File

@@ -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";

View File

@@ -436,10 +436,7 @@ function AppLayout() {
/>
</button>
{isProfileMenuOpen ? (
<div
role="menu"
className={shellLayoutClasses.profileMenu}
>
<div role="menu" className={shellLayoutClasses.profileMenu}>
<p className="text-xs uppercase tracking-[0.16em] text-muted-foreground">
{t("ui.dev.profile.menu_title", "Account")}
</p>

View File

@@ -5,13 +5,17 @@ import {
} from "../../../../common/ui/badge";
import { cn } from "../../lib/utils";
export interface BadgeProps
extends React.HTMLAttributes<HTMLDivElement> {
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {
variant?: CommonBadgeVariant;
}
function Badge({ className, variant, ...props }: BadgeProps) {
return <div className={cn(getCommonBadgeClasses({ variant }), className)} {...props} />;
return (
<div
className={cn(getCommonBadgeClasses({ variant }), className)}
{...props}
/>
);
}
export { Badge };

View File

@@ -10,39 +10,28 @@ import {
import { cn } from "../../lib/utils";
function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
return (
<div
className={cn(commonCardClass, className)}
{...props}
/>
);
return <div className={cn(commonCardClass, className)} {...props} />;
}
function CardHeader({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div className={cn(commonCardHeaderClass, className)} {...props} />
);
return <div className={cn(commonCardHeaderClass, className)} {...props} />;
}
function CardTitle({
className,
...props
}: React.HTMLAttributes<HTMLHeadingElement>) {
return (
<h3 className={cn(commonCardTitleClass, className)} {...props} />
);
return <h3 className={cn(commonCardTitleClass, className)} {...props} />;
}
function CardDescription({
className,
...props
}: React.HTMLAttributes<HTMLParagraphElement>) {
return (
<p className={cn(commonCardDescriptionClass, className)} {...props} />
);
return <p className={cn(commonCardDescriptionClass, className)} {...props} />;
}
function CardContent({
@@ -56,9 +45,7 @@ function CardFooter({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div className={cn(commonCardFooterClass, className)} {...props} />
);
return <div className={cn(commonCardFooterClass, className)} {...props} />;
}
export {

View File

@@ -10,10 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
return (
<input
type={type}
className={cn(
commonInputClass,
className,
)}
className={cn(commonInputClass, className)}
ref={ref}
{...props}
/>

View File

@@ -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<string, DailyPoint>(),
};
const current = byClient.get(row.clientId) ?? {
clientLabel: row.clientName || row.clientId,
byDate: new Map<string, DailyPoint>(),
};
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 (
<div className="flex min-h-[210px] items-center justify-center text-sm text-muted-foreground">
{t(
"msg.dev.dashboard.chart.empty",
"표시할 RP 이용 집계가 없습니다.",
)}
{t("msg.dev.dashboard.chart.empty", "표시할 RP 이용 집계가 없습니다.")}
</div>
);
}
@@ -477,11 +477,15 @@ function RPUsageMixedChart({
<div key={item.key} className="flex min-w-0 items-center gap-2">
<span className="truncate font-medium">{item.clientLabel}</span>
<span className="ml-auto whitespace-nowrap tabular-nums">
{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(),
},
)}
</span>
</div>
))}
@@ -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() {
</div>
{usageQuery.isError ? (
<div className="text-sm text-muted-foreground">
{usageErrorText}
</div>
<div className="text-sm text-muted-foreground">{usageErrorText}</div>
) : isAllClientsSelected ? (
<RPUsageMixedChart rows={filteredUsageRows} period={period} />
) : (
@@ -762,10 +766,7 @@ function DashboardPage() {
</div>
<div className="rounded-xl border border-border/60 bg-secondary/30 p-4">
<p className="text-sm text-muted-foreground">
{t(
"ui.dev.dashboard.distribution.headless",
"Headless Login",
)}
{t("ui.dev.dashboard.distribution.headless", "Headless Login")}
</p>
<p className="mt-2 text-2xl font-semibold tabular-nums">
{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")}
</p>
<p>

View File

@@ -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%

View File

@@ -421,10 +421,7 @@ function AppLayout() {
/>
</button>
{isProfileMenuOpen ? (
<div
role="menu"
className={shellLayoutClasses.profileMenu}
>
<div role="menu" className={shellLayoutClasses.profileMenu}>
<p className="text-xs uppercase tracking-[0.16em] text-muted-foreground">
{t("ui.dev.profile.menu_title", "Account")}
</p>

View File

@@ -5,13 +5,17 @@ import {
} from "../../../../common/ui/badge";
import { cn } from "../../lib/utils";
export interface BadgeProps
extends React.HTMLAttributes<HTMLDivElement> {
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {
variant?: CommonBadgeVariant;
}
function Badge({ className, variant, ...props }: BadgeProps) {
return <div className={cn(getCommonBadgeClasses({ variant }), className)} {...props} />;
return (
<div
className={cn(getCommonBadgeClasses({ variant }), className)}
{...props}
/>
);
}
export { Badge };

View File

@@ -10,39 +10,28 @@ import {
import { cn } from "../../lib/utils";
function Card({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
return (
<div
className={cn(commonCardClass, className)}
{...props}
/>
);
return <div className={cn(commonCardClass, className)} {...props} />;
}
function CardHeader({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div className={cn(commonCardHeaderClass, className)} {...props} />
);
return <div className={cn(commonCardHeaderClass, className)} {...props} />;
}
function CardTitle({
className,
...props
}: React.HTMLAttributes<HTMLHeadingElement>) {
return (
<h3 className={cn(commonCardTitleClass, className)} {...props} />
);
return <h3 className={cn(commonCardTitleClass, className)} {...props} />;
}
function CardDescription({
className,
...props
}: React.HTMLAttributes<HTMLParagraphElement>) {
return (
<p className={cn(commonCardDescriptionClass, className)} {...props} />
);
return <p className={cn(commonCardDescriptionClass, className)} {...props} />;
}
function CardContent({
@@ -56,9 +45,7 @@ function CardFooter({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) {
return (
<div className={cn(commonCardFooterClass, className)} {...props} />
);
return <div className={cn(commonCardFooterClass, className)} {...props} />;
}
export {

View File

@@ -10,10 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
return (
<input
type={type}
className={cn(
commonInputClass,
className,
)}
className={cn(commonInputClass, className)}
ref={ref}
{...props}
/>