"use client"; import { IconShieldCheck } from "@tabler/icons-react"; import { Button } from "@kandev/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@kandev/ui/dialog"; import { useTranslation } from "react-i18next"; export const githubAppPermissions: Record = { actions: "read", administration: "read", checks: "read", contents: "write", issues: "write", members: "read", metadata: "read", pull_requests: "write", statuses: "read", workflows: "write", }; export const githubAppEvents = ["push", "check_run"]; function title(value: string) { return value.replaceAll("_", " ").replace(/\b\w/g, (letter) => letter.toUpperCase()); } export function GitHubAppPolicyDialog({ permissions = githubAppPermissions, events = githubAppEvents, }: { permissions?: Record; events?: string[]; }) { const { t } = useTranslation(); return ( {t("github:requiredGithubAppPolicy")} {t("github:anImportedAppMustHaveAt")}

{t("github:repositoryPermissions")}

{Object.entries(permissions) .sort(([left], [right]) => left.localeCompare(right)) .map(([name, level]) => (
{title(name)} {level}
))}

{t("github:subscribedEvents")}

{events.map((event) => (
{title(event)}
))}
); }