- Implemented a bash script to test n8n API and retrieve credential schemas. - Added types for API responses, Google Calendar, and WhatsApp instances. - Configured Vitest for testing with React and added setup for testing-library.
62 lines
1.3 KiB
TypeScript
62 lines
1.3 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
|
|
interface ToastProps {
|
|
message: string;
|
|
type: "success" | "error";
|
|
isVisible: boolean;
|
|
onClose: () => void;
|
|
}
|
|
|
|
export default function Toast({
|
|
message,
|
|
type,
|
|
isVisible,
|
|
onClose,
|
|
}: ToastProps) {
|
|
useEffect(() => {
|
|
if (isVisible) {
|
|
const timer = setTimeout(() => {
|
|
onClose();
|
|
}, 3000);
|
|
return () => clearTimeout(timer);
|
|
}
|
|
}, [isVisible, onClose]);
|
|
|
|
if (!isVisible) return null;
|
|
|
|
const bgColor = type === "success" ? "bg-green-600" : "bg-red-600";
|
|
|
|
return (
|
|
<div className="fixed top-4 right-4 z-50">
|
|
<div
|
|
className={`${bgColor} text-white px-6 py-3 rounded-lg shadow-lg flex items-center gap-3`}
|
|
>
|
|
<span>{message}</span>
|
|
<button
|
|
type="button"
|
|
onClick={onClose}
|
|
className="text-white hover:text-gray-200"
|
|
aria-label="Fechar notificação"
|
|
>
|
|
<svg
|
|
className="w-5 h-5"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
viewBox="0 0 24 24"
|
|
aria-hidden="true"
|
|
>
|
|
<path
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
strokeWidth={2}
|
|
d="M6 18L18 6M6 6l12 12"
|
|
/>
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|