forked from baron/baron-sso
변경된 앱 안내 패널 추가
This commit is contained in:
@@ -92,14 +92,62 @@ const recentClientActions = new Set([
|
||||
"DELETE_CLIENT",
|
||||
]);
|
||||
|
||||
const recentChangeGuideItems = [
|
||||
{
|
||||
titleKey: "ui.dev.clients.recent_changes.guide.create",
|
||||
titleFallback: "앱 생성",
|
||||
descriptionKey: "msg.dev.clients.recent_changes.guide.create_desc",
|
||||
descriptionFallback:
|
||||
"새 애플리케이션이 등록되면 이름, 유형, 기본 상태와 함께 표시됩니다.",
|
||||
},
|
||||
{
|
||||
titleKey: "ui.dev.clients.recent_changes.guide.settings",
|
||||
titleFallback: "설정 변경",
|
||||
descriptionKey: "msg.dev.clients.recent_changes.guide.settings_desc",
|
||||
descriptionFallback:
|
||||
"앱 이름, 스코프, 테넌트 접근 제한, 커스텀 클레임, 보안 설정, 로그아웃 URI, JWKS 변경이 포함됩니다.",
|
||||
},
|
||||
{
|
||||
titleKey: "ui.dev.clients.recent_changes.guide.status",
|
||||
titleFallback: "상태 변경",
|
||||
descriptionKey: "msg.dev.clients.recent_changes.guide.status_desc",
|
||||
descriptionFallback: "Active / Inactive 전환이 여기에 포함됩니다.",
|
||||
},
|
||||
{
|
||||
titleKey: "ui.dev.clients.recent_changes.guide.relation",
|
||||
titleFallback: "관계 변경",
|
||||
descriptionKey: "msg.dev.clients.recent_changes.guide.relation_desc",
|
||||
descriptionFallback: "관계 추가와 삭제가 함께 표시됩니다.",
|
||||
},
|
||||
{
|
||||
titleKey: "ui.dev.clients.recent_changes.guide.secret",
|
||||
titleFallback: "클라이언트 시크릿 재발급",
|
||||
descriptionKey: "msg.dev.clients.recent_changes.guide.secret_desc",
|
||||
descriptionFallback: "시크릿 재발급 이력이 보입니다.",
|
||||
},
|
||||
{
|
||||
titleKey: "ui.dev.clients.recent_changes.guide.delete",
|
||||
titleFallback: "앱 삭제",
|
||||
descriptionKey: "msg.dev.clients.recent_changes.guide.delete_desc",
|
||||
descriptionFallback: "앱 삭제도 최근 변경 이력에 포함됩니다.",
|
||||
},
|
||||
] as const;
|
||||
|
||||
const recentClientFieldLabels: Record<string, string> = {
|
||||
name: "이름",
|
||||
type: "유형",
|
||||
status: "상태",
|
||||
scopes: "스코프",
|
||||
tenant_access_restricted: "테넌트 접근 제한",
|
||||
allowed_tenants: "허용 테넌트",
|
||||
id_token_claims: "커스텀 클레임",
|
||||
token_endpoint_auth_method: "인증 방식",
|
||||
jwks_uri: "JWKS URI",
|
||||
backchannel_logout_uri: "Backchannel Logout URI",
|
||||
backchannel_logout_session_required: "세션 필수",
|
||||
headless_login_enabled: "헤드리스 로그인",
|
||||
headless_token_endpoint_auth_method: "헤드리스 인증 방식",
|
||||
headless_jwks_uri: "헤드리스 JWKS URI",
|
||||
redirect_uri_count: "Redirect URI 수",
|
||||
scope_count: "Scope 수",
|
||||
relation: "관계",
|
||||
@@ -263,6 +311,8 @@ function ClientsPage() {
|
||||
const [statusFilter, setStatusFilter] = useState("all");
|
||||
const [isAdvancedFilterOpen, setIsAdvancedFilterOpen] = useState(false);
|
||||
const [isRequestModalOpen, setIsRequestModalOpen] = useState(false);
|
||||
const [isRecentChangesGuideOpen, setIsRecentChangesGuideOpen] =
|
||||
useState(false);
|
||||
const [sortConfig, setSortConfig] =
|
||||
useState<SortConfig<ClientSortKey> | null>({
|
||||
key: "createdAt",
|
||||
@@ -921,12 +971,30 @@ function ClientsPage() {
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card className="glass-panel">
|
||||
<Card className="glass-panel">
|
||||
<CardHeader className="flex flex-row items-center justify-between gap-4 pb-4">
|
||||
<div>
|
||||
<CardTitle className="text-xl font-semibold">
|
||||
{t("ui.dev.clients.recent_changes.title", "최근 변경된 앱")}
|
||||
</CardTitle>
|
||||
<div className="flex items-center gap-1.5">
|
||||
<CardTitle className="text-xl font-semibold">
|
||||
{t("ui.dev.clients.recent_changes.title", "최근 변경된 앱")}
|
||||
</CardTitle>
|
||||
<Button
|
||||
type="button"
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
className="-ml-1 h-8 w-8 translate-y-px text-muted-foreground hover:text-primary"
|
||||
aria-label={t(
|
||||
"ui.dev.clients.recent_changes.guide_button",
|
||||
"최근 변경 항목 안내 열기",
|
||||
)}
|
||||
aria-expanded={isRecentChangesGuideOpen}
|
||||
onClick={() =>
|
||||
setIsRecentChangesGuideOpen((current) => !current)
|
||||
}
|
||||
>
|
||||
<Info className="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
<CardDescription>
|
||||
{t(
|
||||
"msg.dev.clients.recent_changes.description",
|
||||
@@ -940,6 +1008,34 @@ function ClientsPage() {
|
||||
"'감사 로그 조회' 관계가 있어야 최근 변경된 앱을 볼 수 있습니다.",
|
||||
)}
|
||||
</p>
|
||||
{isRecentChangesGuideOpen && (
|
||||
<div className="mt-3 rounded-xl border border-border/60 bg-muted/20 p-4">
|
||||
<p className="text-sm font-semibold text-foreground">
|
||||
{t(
|
||||
"ui.dev.clients.recent_changes.guide_title",
|
||||
"최근 변경 항목 안내",
|
||||
)}
|
||||
</p>
|
||||
<div className="mt-3 space-y-3">
|
||||
{recentChangeGuideItems.map((item) => (
|
||||
<div key={item.titleKey} className="space-y-1">
|
||||
<p className="text-sm font-medium text-foreground">
|
||||
{t(item.titleKey, item.titleFallback)}
|
||||
</p>
|
||||
<p className="text-xs leading-5 text-muted-foreground">
|
||||
{t(item.descriptionKey, item.descriptionFallback)}
|
||||
</p>
|
||||
</div>
|
||||
))}
|
||||
<p className="text-xs leading-5 text-muted-foreground">
|
||||
{t(
|
||||
"msg.dev.clients.recent_changes.guide.audit_only",
|
||||
"동의 철회는 최근 변경된 앱 카드에 포함하지 않고, 감사 로그에서 확인합니다.",
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<Button variant="outline" size="sm" asChild>
|
||||
<Link to="/audit-logs">
|
||||
|
||||
@@ -1367,6 +1367,16 @@ untitled = "Untitled"
|
||||
|
||||
[ui.dev.clients.recent_changes]
|
||||
title = "Recently Changed Apps"
|
||||
guide_button = "Open recent change guide"
|
||||
guide_title = "Recent Change Guide"
|
||||
|
||||
[ui.dev.clients.recent_changes.guide]
|
||||
create = "App creation"
|
||||
settings = "Settings changes"
|
||||
status = "Status changes"
|
||||
relation = "Relationship changes"
|
||||
secret = "Client secret rotation"
|
||||
delete = "App deletion"
|
||||
|
||||
[msg.dev.clients.recent_changes]
|
||||
description = "{{count}} applications have change history."
|
||||
@@ -1374,6 +1384,15 @@ permission_note = "You need the 'Audit Log Viewer' relationship to see recently
|
||||
empty = "No recent change logs yet."
|
||||
no_detail = "Unable to inspect the changed fields."
|
||||
|
||||
[msg.dev.clients.recent_changes.guide]
|
||||
audit_only = "Consent revocations are not included in this card; check the audit log instead."
|
||||
create_desc = "When a new application is created, it appears with its name, type, and default status."
|
||||
settings_desc = "Includes app name, scopes, tenant access restrictions, custom claims, security settings, logout URI, and JWKS changes."
|
||||
status_desc = "Active / Inactive transitions are included here."
|
||||
relation_desc = "Relationship additions and removals are shown together."
|
||||
secret_desc = "Client secret rotation history is shown."
|
||||
delete_desc = "Application deletions are also included in recent changes."
|
||||
|
||||
[ui.dev.clients.badge]
|
||||
admin_session = "Admin Session"
|
||||
dev_session = "DevFront Session"
|
||||
|
||||
@@ -1367,6 +1367,16 @@ untitled = "Untitled"
|
||||
|
||||
[ui.dev.clients.recent_changes]
|
||||
title = "최근 변경된 앱"
|
||||
guide_button = "최근 변경 항목 안내 열기"
|
||||
guide_title = "최근 변경 항목 안내"
|
||||
|
||||
[ui.dev.clients.recent_changes.guide]
|
||||
create = "앱 생성"
|
||||
settings = "설정 변경"
|
||||
status = "상태 변경"
|
||||
relation = "관계 변경"
|
||||
secret = "클라이언트 시크릿 재발급"
|
||||
delete = "앱 삭제"
|
||||
|
||||
[msg.dev.clients.recent_changes]
|
||||
description = "총 {{count}}개의 애플리케이션이 변경된 이력이 있습니다."
|
||||
@@ -1374,6 +1384,15 @@ permission_note = "'감사 로그 조회' 관계가 있어야 최근 변경된
|
||||
empty = "최근 변경 로그가 아직 없습니다."
|
||||
no_detail = "변경 항목을 확인할 수 없습니다."
|
||||
|
||||
[msg.dev.clients.recent_changes.guide]
|
||||
audit_only = "동의 철회는 최근 변경된 앱 카드에 포함하지 않고, 감사 로그에서 확인합니다."
|
||||
create_desc = "새 애플리케이션이 등록되면 이름, 유형, 기본 상태와 함께 표시됩니다."
|
||||
settings_desc = "앱 이름, 스코프, 테넌트 접근 제한, 커스텀 클레임, 보안 설정, 로그아웃 URI, JWKS 변경이 포함됩니다."
|
||||
status_desc = "Active / Inactive 전환이 여기에 포함됩니다."
|
||||
relation_desc = "관계 추가와 삭제가 함께 표시됩니다."
|
||||
secret_desc = "시크릿 재발급 이력이 보입니다."
|
||||
delete_desc = "앱 삭제도 최근 변경 이력에 포함됩니다."
|
||||
|
||||
[ui.dev.clients.badge]
|
||||
admin_session = "관리자 세션"
|
||||
dev_session = "DevFront 세션"
|
||||
|
||||
@@ -1423,6 +1423,16 @@ untitled = ""
|
||||
|
||||
[ui.dev.clients.recent_changes]
|
||||
title = ""
|
||||
guide_button = ""
|
||||
guide_title = ""
|
||||
|
||||
[ui.dev.clients.recent_changes.guide]
|
||||
create = ""
|
||||
settings = ""
|
||||
status = ""
|
||||
relation = ""
|
||||
secret = ""
|
||||
delete = ""
|
||||
|
||||
[msg.dev.clients.recent_changes]
|
||||
description = ""
|
||||
@@ -1430,6 +1440,15 @@ permission_note = ""
|
||||
empty = ""
|
||||
no_detail = ""
|
||||
|
||||
[msg.dev.clients.recent_changes.guide]
|
||||
audit_only = ""
|
||||
create_desc = ""
|
||||
settings_desc = ""
|
||||
status_desc = ""
|
||||
relation_desc = ""
|
||||
secret_desc = ""
|
||||
delete_desc = ""
|
||||
|
||||
[ui.dev.clients.badge]
|
||||
admin_session = ""
|
||||
dev_session = ""
|
||||
|
||||
Reference in New Issue
Block a user