diff --git a/public/images/cpanel.png b/public/images/cpanel.png new file mode 100644 index 0000000..b4aa22f Binary files /dev/null and b/public/images/cpanel.png differ diff --git a/public/images/pterodactyl_logo_transparent.png b/public/images/pterodactyl_logo_transparent.png new file mode 100644 index 0000000..8a1b3bd Binary files /dev/null and b/public/images/pterodactyl_logo_transparent.png differ diff --git a/public/images/virtualizor_logo.png b/public/images/virtualizor_logo.png new file mode 100644 index 0000000..d71ddcd Binary files /dev/null and b/public/images/virtualizor_logo.png differ diff --git a/src/components/dashboard/LegacySystemsModal.tsx b/src/components/dashboard/LegacySystemsModal.tsx new file mode 100644 index 0000000..3b6c96e --- /dev/null +++ b/src/components/dashboard/LegacySystemsModal.tsx @@ -0,0 +1,139 @@ +"use client"; + +import { FaTimes } from "react-icons/fa"; +import Image from "next/image"; +import { useEffect, useRef } from "react"; + +interface LegacySystemsModalProps { + isOpen: boolean; + onClose: () => void; +} + +export default function LegacySystemsModal({ + isOpen, + onClose, +}: LegacySystemsModalProps) { + const modalRef = useRef(null); + + useEffect(() => { + function handleClickOutside(event: MouseEvent) { + if (modalRef.current && !modalRef.current.contains(event.target as Node)) { + onClose(); + } + } + + if (isOpen) { + document.addEventListener('mousedown', handleClickOutside); + document.body.style.overflow = 'hidden'; + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + document.body.style.overflow = 'auto'; + }; + }, [isOpen, onClose]); + + return ( +
+
+
+

+ Não achou o seu serviço? +

+ +
+

+ Às vezes, o sistema pode cometer erros ou uma alteração recente pode + não ter sido refletida aqui. Se você tem um serviço conosco e não o + encontra, pode acessar nossos painéis legados para gerenciá-lo. +

+ +
+ + Pterodactyl Logo +
+

Pterodactyl

+

+ Se você possui algum servidor de jogos conosco, certamente o + achará aqui caso não esteja o encontrando. +

+
+
+ + + Virtualizor Logo +
+

Virtualizor

+

+ Se você possui alguma VPS Ativa conosco e não a vê aqui, acesse + o Virtualizor. +

+
+
+ +
+ cPanel Logo +
+

cPanel

+

+ Tem alguma hospedagem de site e não está vendo ela aqui? + Certamente, ainda não é possível controlar seus sites por aqui, + mas logo logo será. +

+
+
+
+ +
+

Esqueceu sua senha?

+

+ Caso não lembre sua senha do painel legacy, basta clicar na opção "Esqueceu senha" + e o sistema criará uma nova senha para você automaticamente. +

+
+
+
+ ); +} diff --git a/src/components/dashboard/ServersContent.tsx b/src/components/dashboard/ServersContent.tsx index 315a47f..0fd296f 100644 --- a/src/components/dashboard/ServersContent.tsx +++ b/src/components/dashboard/ServersContent.tsx @@ -1,5 +1,6 @@ "use client"; +import { useState } from "react"; import { FaGamepad, FaPlus, @@ -14,14 +15,17 @@ import { FaNetworkWired, FaClock, FaMapMarkerAlt, + FaQuestionCircle, } from "react-icons/fa"; import { useServer } from "@/contexts/ServerContext"; import { Server } from "@/types/server"; import { useRouter } from "next/navigation"; +import LegacySystemsModal from "./LegacySystemsModal"; export default function ServersContent() { const { servers, loadingServers, serversError, fetchServers } = useServer(); const router = useRouter(); + const [isModalOpen, setIsModalOpen] = useState(false); if (loadingServers) { return ( @@ -361,6 +365,18 @@ export default function ServersContent() { )} + +
+ +
+ + setIsModalOpen(false)} /> ); } diff --git a/src/components/dashboard/minecraft/LegacyPanelFeedbackModal.tsx b/src/components/dashboard/minecraft/LegacyPanelFeedbackModal.tsx new file mode 100644 index 0000000..f7bb35f --- /dev/null +++ b/src/components/dashboard/minecraft/LegacyPanelFeedbackModal.tsx @@ -0,0 +1,122 @@ +"use client"; + +import { FaTimes } from "react-icons/fa"; +import { TriangleAlert, MessageSquare } from "lucide-react"; +import Image from "next/image"; +import { useEffect, useRef } from "react"; + +interface LegacyPanelFeedbackModalProps { + isOpen: boolean; + onClose: () => void; +} + +export default function LegacyPanelFeedbackModal({ + isOpen, + onClose, +}: LegacyPanelFeedbackModalProps) { + const modalRef = useRef(null); + + useEffect(() => { + function handleClickOutside(event: MouseEvent) { + if ( + modalRef.current && + !modalRef.current.contains(event.target as Node) + ) { + onClose(); + } + } + + if (isOpen) { + document.addEventListener("mousedown", handleClickOutside); + document.body.style.overflow = "hidden"; + } + + return () => { + document.removeEventListener("mousedown", handleClickOutside); + document.body.style.overflow = "auto"; + }; + }, [isOpen, onClose]); + + return ( +
+
+
+

+ Que tal o painel legado? +

+ +
+ +

+ Sentimos muito que não tenha tido uma experiência agradável com esse + painel. Trabalhamos duro para mantê-lo atualizado e acessível para + todos. Caso sinta-se no dever, adoraríamos receber feedback da sua + experiência. Se estiver achando algo confuso, você pode usar o painel + legado. +

+ +
+ + Pterodactyl Logo +
+

Pterodactyl

+

+ Acesse o painel legado para gerenciar seu servidor Minecraft de + maneira alternativa. +

+
+
+
+
+ + +

+ Se você esqueceu sua senha do painel legado ou não possui uma, + clique na opção "Esqueci minha senha" na tela de login do painel + legado para redefini-la. +

+
+
+ +
+
+ +

+ Suas sugestões são importantes para nós! Envie seu feedback + através do nosso sistema de tickets e ajude-nos a melhorar + nossos painéis. +

+
+
+
+
+
+ ); +} diff --git a/src/components/dashboard/minecraft/MinecraftServerManager.tsx b/src/components/dashboard/minecraft/MinecraftServerManager.tsx index de38cfa..2bfd76c 100644 --- a/src/components/dashboard/minecraft/MinecraftServerManager.tsx +++ b/src/components/dashboard/minecraft/MinecraftServerManager.tsx @@ -300,7 +300,7 @@ function MinecraftServerManagerContent() { wsRef.current = null; } }; - }, [accessKey, identifier, getServerConsoleCredentials]); + }, [accessKey, identifier, getServerConsoleCredentials, loading, error]); const handleConsoleUpdate = useCallback((data: any) => { if (data.type === 'connection') { diff --git a/src/components/dashboard/minecraft/MinecraftSettingsContent.tsx b/src/components/dashboard/minecraft/MinecraftSettingsContent.tsx index c64e146..53c0eb8 100644 --- a/src/components/dashboard/minecraft/MinecraftSettingsContent.tsx +++ b/src/components/dashboard/minecraft/MinecraftSettingsContent.tsx @@ -44,6 +44,8 @@ interface MinecraftSettingsContentProps { }; } +import LegacyPanelFeedbackModal from "./LegacyPanelFeedbackModal"; + export default function MinecraftSettingsContent({ server }: MinecraftSettingsContentProps) { const { accessKey } = useAuth(); const [settings, setSettings] = useState(null); @@ -56,6 +58,7 @@ export default function MinecraftSettingsContent({ server }: MinecraftSettingsCo const [selectedOs, setSelectedOs] = useState(null); const [changingOs, setChangingOs] = useState(false); const [showOsConfirm, setShowOsConfirm] = useState(false); + const [showLegacyFeedbackModal, setShowLegacyFeedbackModal] = useState(false); const [ftpInfo, setFtpInfo] = useState(null); const [loadingFtp, setLoadingFtp] = useState(false); @@ -667,6 +670,28 @@ export default function MinecraftSettingsContent({ server }: MinecraftSettingsCo )} + +
+
+
+

Encontrou dificuldades?

+

Use o painel legado para gerenciar seu servidor.

+
+ + +
+
+ + setShowLegacyFeedbackModal(false)} + /> ); }