Files
openmonetis/components/feedback/feedback-dialog.tsx
Felipe Coutinho 3f3488c8a0 refactor: remover funções, tipos e exports não utilizados
Remove createActionHandler, validateHashToken, decimalSchema,
optionalPeriodSchema, dateStringSchema, amountSchema, FeedbackDialog
standalone, CalendarEventType, parseDateKey, entre outros.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:40:59 +00:00

122 lines
3.3 KiB
TypeScript

"use client";
import {
RiBugLine,
RiExternalLinkLine,
RiLightbulbLine,
RiMessageLine,
RiQuestionLine,
RiStarLine,
} from "@remixicon/react";
import {
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
import { cn } from "@/lib/utils";
const GITHUB_REPO_BASE = "https://github.com/felipegcoutinho/openmonetis";
const GITHUB_DISCUSSIONS_BASE = `${GITHUB_REPO_BASE}/discussions/new`;
const GITHUB_ISSUES_URL = `${GITHUB_REPO_BASE}/issues/new`;
const feedbackCategories = [
{
id: "bug",
title: "Reportar Bug",
icon: RiBugLine,
description: "Encontrou algo que não está funcionando?",
color: "text-destructive",
url: GITHUB_ISSUES_URL,
},
{
id: "idea",
title: "Sugerir Feature",
icon: RiLightbulbLine,
description: "Tem uma ideia para melhorar o app?",
color: "text-warning",
url: `${GITHUB_DISCUSSIONS_BASE}?category=ideias`,
},
{
id: "question",
title: "Dúvidas/Suporte",
icon: RiQuestionLine,
description: "Precisa de ajuda com alguma coisa?",
color: "text-info",
url: `${GITHUB_DISCUSSIONS_BASE}?category=q-a`,
},
{
id: "experience",
title: "Compartilhar Experiência",
icon: RiStarLine,
description: "Como o OpenMonetis tem ajudado você?",
color: "text-purple-500 dark:text-purple-400",
url: `${GITHUB_DISCUSSIONS_BASE}?category=sua-experiencia`,
},
];
export function FeedbackDialogBody({ onClose }: { onClose?: () => void }) {
const handleCategoryClick = (url: string) => {
window.open(url, "_blank", "noopener,noreferrer");
onClose?.();
};
return (
<DialogContent className="sm:max-w-[500px]">
<DialogHeader>
<DialogTitle className="flex items-center gap-2">
<RiMessageLine className="h-5 w-5" />
Enviar Feedback
</DialogTitle>
<DialogDescription>
Sua opinião é muito importante! Escolha o tipo de feedback que deseja
compartilhar.
</DialogDescription>
</DialogHeader>
<div className="grid gap-3 py-4">
{feedbackCategories.map((item) => {
const Icon = item.icon;
return (
<button
key={item.id}
onClick={() => handleCategoryClick(item.url)}
className={cn(
"flex items-start gap-3 p-4 rounded-lg border transition-all",
"hover:border-primary hover:bg-accent/50",
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary",
)}
>
<div
className={cn(
"flex h-10 w-10 shrink-0 items-center justify-center rounded-full",
"bg-muted",
)}
>
<Icon className={cn("h-5 w-5", item.color)} />
</div>
<div className="flex-1 text-left space-y-1">
<h3 className="font-semibold text-sm flex items-center gap-2">
{item.title}
<RiExternalLinkLine className="h-3.5 w-3.5 text-muted-foreground" />
</h3>
<p className="text-sm text-muted-foreground">
{item.description}
</p>
</div>
</button>
);
})}
</div>
<div className="flex items-start gap-2 p-3 bg-muted/50 rounded-lg text-xs text-muted-foreground">
<RiExternalLinkLine className="h-4 w-4 shrink-0 mt-0.5" />
<p>
Você será redirecionado para o GitHub Discussions onde poderá escrever
seu feedback. É necessário ter uma conta no GitHub.
</p>
</div>
</DialogContent>
);
}