From e2b155280a72e40d21f62707034e4a89fbfa9ef5 Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sat, 21 Dec 2024 20:08:08 +0100 Subject: [PATCH 01/30] feat: add enter terminal translation --- apps/dokploy/public/locales/en/settings.json | 1 + apps/dokploy/public/locales/pl/settings.json | 1 + 2 files changed, 2 insertions(+) diff --git a/apps/dokploy/public/locales/en/settings.json b/apps/dokploy/public/locales/en/settings.json index 2103ecc0..f71e56ff 100644 --- a/apps/dokploy/public/locales/en/settings.json +++ b/apps/dokploy/public/locales/en/settings.json @@ -13,6 +13,7 @@ "settings.server.webServer.description": "Reload or clean the web server.", "settings.server.webServer.actions": "Actions", "settings.server.webServer.reload": "Reload", + "settings.server.webServer.enterTerminal": "Enter the terminal", "settings.server.webServer.watchLogs": "Watch logs", "settings.server.webServer.updateServerIp": "Update Server IP", "settings.server.webServer.server.label": "Server", diff --git a/apps/dokploy/public/locales/pl/settings.json b/apps/dokploy/public/locales/pl/settings.json index 48531e69..a354a871 100644 --- a/apps/dokploy/public/locales/pl/settings.json +++ b/apps/dokploy/public/locales/pl/settings.json @@ -13,6 +13,7 @@ "settings.server.webServer.description": "Przeładuj lub wyczyść serwer", "settings.server.webServer.actions": "Akcje", "settings.server.webServer.reload": "Przeładuj", + "settings.server.webServer.enterTerminal": "Otwórz terminal", "settings.server.webServer.watchLogs": "Obserwuj logi", "settings.server.webServer.updateServerIp": "Zaktualizuj IP serwera", "settings.server.webServer.server.label": "Serwer", From 0d58935ad1261c94720c91b88b559eb238333764 Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 16:30:53 +0100 Subject: [PATCH 02/30] refactor: translations for common terminal stuff --- .../dashboard/settings/servers/add-server.tsx | 10 ++++++---- .../dashboard/settings/servers/show-servers.tsx | 6 +++++- .../dashboard/settings/servers/update-server.tsx | 13 +++++++------ apps/dokploy/public/locales/en/settings.json | 9 +++++++-- apps/dokploy/public/locales/pl/settings.json | 9 +++++++-- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/servers/add-server.tsx b/apps/dokploy/components/dashboard/settings/servers/add-server.tsx index b8413303..36f93f5d 100644 --- a/apps/dokploy/components/dashboard/settings/servers/add-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/add-server.tsx @@ -31,8 +31,8 @@ import { Textarea } from "@/components/ui/textarea"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { PlusIcon } from "lucide-react"; +import { useTranslation } from "next-i18next"; import Link from "next/link"; -import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -56,6 +56,8 @@ const Schema = z.object({ type Schema = z.infer; export const AddServer = () => { + const { t } = useTranslation("settings"); + const utils = api.useUtils(); const [isOpen, setIsOpen] = useState(false); const { data: canCreateMoreServers, refetch } = @@ -212,7 +214,7 @@ export const AddServer = () => { name="ipAddress" render={({ field }) => ( - IP Address + {t("settings.terminal.ipAddress")} @@ -226,7 +228,7 @@ export const AddServer = () => { name="port" render={({ field }) => ( - Port + {t("settings.terminal.port")} { name="username" render={({ field }) => ( - Username + {t("settings.terminal.username")} diff --git a/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx b/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx index a174cd9c..7527670b 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx @@ -33,8 +33,10 @@ import { ShowTraefikFileSystemModal } from "./show-traefik-file-system-modal"; import { UpdateServer } from "./update-server"; import { useRouter } from "next/router"; import { WelcomeSuscription } from "./welcome-stripe/welcome-suscription"; +import { useTranslation } from "next-i18next"; export const ShowServers = () => { + const { t } = useTranslation("settings"); const router = useRouter(); const query = router.query; const { data, refetch } = api.server.all.useQuery(); @@ -190,7 +192,9 @@ export const ShowServers = () => { <> {server.sshKeyId && ( - Enter the terminal + + {t("settings.common.enterTerminal")} + )} diff --git a/apps/dokploy/components/dashboard/settings/servers/update-server.tsx b/apps/dokploy/components/dashboard/settings/servers/update-server.tsx index 16eb5ba7..543cacf6 100644 --- a/apps/dokploy/components/dashboard/settings/servers/update-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/update-server.tsx @@ -31,8 +31,7 @@ import { import { Textarea } from "@/components/ui/textarea"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { PlusIcon } from "lucide-react"; -import { useRouter } from "next/router"; +import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -60,6 +59,8 @@ interface Props { } export const UpdateServer = ({ serverId }: Props) => { + const { t } = useTranslation("settings"); + const utils = api.useUtils(); const [isOpen, setIsOpen] = useState(false); const { data, isLoading } = api.server.one.useQuery( @@ -212,7 +213,7 @@ export const UpdateServer = ({ serverId }: Props) => { name="ipAddress" render={({ field }) => ( - IP Address + {t("settings.terminal.ipAddress")} @@ -226,7 +227,7 @@ export const UpdateServer = ({ serverId }: Props) => { name="port" render={({ field }) => ( - Port + {t("settings.terminal.port")} { name="username" render={({ field }) => ( - Username + {t("settings.terminal.username")} @@ -273,7 +274,7 @@ export const UpdateServer = ({ serverId }: Props) => { form="hook-form-update-server" type="submit" > - Update + {t("settings.common.save")} diff --git a/apps/dokploy/public/locales/en/settings.json b/apps/dokploy/public/locales/en/settings.json index f71e56ff..c70c614d 100644 --- a/apps/dokploy/public/locales/en/settings.json +++ b/apps/dokploy/public/locales/en/settings.json @@ -1,5 +1,6 @@ { "settings.common.save": "Save", + "settings.common.enterTerminal": "Enter the terminal", "settings.server.domain.title": "Server Domain", "settings.server.domain.description": "Add a domain to your server application.", "settings.server.domain.form.domain": "Domain", @@ -13,7 +14,6 @@ "settings.server.webServer.description": "Reload or clean the web server.", "settings.server.webServer.actions": "Actions", "settings.server.webServer.reload": "Reload", - "settings.server.webServer.enterTerminal": "Enter the terminal", "settings.server.webServer.watchLogs": "Watch logs", "settings.server.webServer.updateServerIp": "Update Server IP", "settings.server.webServer.server.label": "Server", @@ -41,5 +41,10 @@ "settings.appearance.themes.dark": "Dark", "settings.appearance.themes.system": "System", "settings.appearance.language": "Language", - "settings.appearance.languageDescription": "Select a language for your dashboard" + "settings.appearance.languageDescription": "Select a language for your dashboard", + + "settings.terminal.connectionSettings": "Connection settings", + "settings.terminal.ipAddress": "IP Address", + "settings.terminal.port": "Port", + "settings.terminal.username": "Username" } diff --git a/apps/dokploy/public/locales/pl/settings.json b/apps/dokploy/public/locales/pl/settings.json index a354a871..93414825 100644 --- a/apps/dokploy/public/locales/pl/settings.json +++ b/apps/dokploy/public/locales/pl/settings.json @@ -1,5 +1,6 @@ { "settings.common.save": "Zapisz", + "settings.common.enterTerminal": "Otwórz terminal", "settings.server.domain.title": "Domena", "settings.server.domain.description": "Dodaj domenę do aplikacji", "settings.server.domain.form.domain": "Domena", @@ -13,7 +14,6 @@ "settings.server.webServer.description": "Przeładuj lub wyczyść serwer", "settings.server.webServer.actions": "Akcje", "settings.server.webServer.reload": "Przeładuj", - "settings.server.webServer.enterTerminal": "Otwórz terminal", "settings.server.webServer.watchLogs": "Obserwuj logi", "settings.server.webServer.updateServerIp": "Zaktualizuj IP serwera", "settings.server.webServer.server.label": "Serwer", @@ -41,5 +41,10 @@ "settings.appearance.themes.dark": "Ciemny", "settings.appearance.themes.system": "System", "settings.appearance.language": "Język", - "settings.appearance.languageDescription": "Wybierz język swojego pulpitu" + "settings.appearance.languageDescription": "Wybierz język swojego pulpitu", + + "settings.terminal.connectionSettings": "Ustawienia połączenia", + "settings.terminal.ipAddress": "Adres IP", + "settings.terminal.port": "Port", + "settings.terminal.username": "Nazwa użytkownika" } From ec8eaf624916a7d38446cd6ca342a4664f6f44cf Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 16:31:52 +0100 Subject: [PATCH 03/30] feat: add util to configure and get private ssh key for local ssh connection --- apps/dokploy/server/wss/utils.ts | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/apps/dokploy/server/wss/utils.ts b/apps/dokploy/server/wss/utils.ts index b5567127..3172e36e 100644 --- a/apps/dokploy/server/wss/utils.ts +++ b/apps/dokploy/server/wss/utils.ts @@ -1,4 +1,17 @@ +import { execAsync } from "@dokploy/server/utils/process/execAsync"; import os from "node:os"; +import path from "node:path"; +import fs from "node:fs"; + +const HOME_PATH = process.env.HOME || process.env.USERPROFILE || "/"; + +const LOCAL_SSH_KEY_PATH = path.join( + HOME_PATH, + ".ssh", + "auto_generated-dokploy-local", +); + +const AUTHORIZED_KEYS_PATH = path.join(HOME_PATH, ".ssh", "authorized_keys"); export const getShell = () => { switch (os.platform()) { @@ -10,3 +23,40 @@ export const getShell = () => { return "bash"; } }; + +/** Returns private SSH key for dokploy local server terminal. Uses already created SSH key or generates a new SSH key, also automatically appends the public key to `authorized_keys`, creating the file if needed. */ +export const getLocalServerPrivateKey = async () => { + try { + if (!fs.existsSync(LOCAL_SSH_KEY_PATH)) { + // Generate new SSH key if it hasn't been created yet + await execAsync( + `ssh-keygen -t rsa -b 4096 -f ${LOCAL_SSH_KEY_PATH} -N ""`, + ); + } + + const privateKey = fs.readFileSync(LOCAL_SSH_KEY_PATH, "utf8"); + const publicKey = fs.readFileSync(`${LOCAL_SSH_KEY_PATH}.pub`, "utf8"); + const authKeyContent = `${publicKey}\n`; + + if (!fs.existsSync(AUTHORIZED_KEYS_PATH)) { + // Create authorized_keys if it doesn't exist yet + fs.writeFileSync(AUTHORIZED_KEYS_PATH, authKeyContent, { mode: 0o600 }); + return privateKey; + } + + const existingAuthKeys = fs.readFileSync(AUTHORIZED_KEYS_PATH, "utf8"); + if (existingAuthKeys.includes(publicKey)) { + return privateKey; + } + + // Append the public key to authorized_keys + fs.appendFileSync(AUTHORIZED_KEYS_PATH, authKeyContent, { + mode: 0o600, + }); + + return privateKey; + } catch (error) { + console.error("Error getting private SSH key for local terminal:", error); + return ""; + } +}; From a53929a78762516f41d06b999c2ffbd663b48766 Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 16:32:20 +0100 Subject: [PATCH 04/30] feat: add enter terminal option to server dropdown --- .../settings/servers/actions/show-dokploy-actions.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx index ee749244..0fa4638b 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx @@ -16,6 +16,7 @@ import { useTranslation } from "next-i18next"; import { toast } from "sonner"; import { ShowModalLogs } from "../../web-server/show-modal-logs"; import { GPUSupportModal } from "../gpu-support-modal"; +import { TerminalModal } from "../../web-server/terminal-modal"; export const ShowDokployActions = () => { const { t } = useTranslation("settings"); @@ -49,6 +50,9 @@ export const ShowDokployActions = () => { > {t("settings.server.webServer.reload")} + + {t("settings.common.enterTerminal")} + Date: Sun, 22 Dec 2024 16:35:28 +0100 Subject: [PATCH 05/30] refactor: adapt terminal wss to allow local server connection, add status logs --- apps/dokploy/server/wss/terminal.ts | 72 +++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/apps/dokploy/server/wss/terminal.ts b/apps/dokploy/server/wss/terminal.ts index b1ecb908..fa268124 100644 --- a/apps/dokploy/server/wss/terminal.ts +++ b/apps/dokploy/server/wss/terminal.ts @@ -1,8 +1,9 @@ import type http from "node:http"; import { findServerById, validateWebSocketRequest } from "@dokploy/server"; import { publicIpv4, publicIpv6 } from "public-ip"; -import { Client } from "ssh2"; +import { Client, type ConnectConfig } from "ssh2"; import { WebSocketServer } from "ws"; +import { getLocalServerPrivateKey } from "./utils"; export const getPublicIpWithFallback = async () => { // @ts-ignore @@ -55,21 +56,67 @@ export const setupTerminalWebSocketServer = ( return; } - const server = await findServerById(serverId); + let connectionDetails: ConnectConfig = {}; - if (!server) { - ws.close(); - return; + const isLocalServer = serverId === "local"; + + if (isLocalServer) { + const port = Number(url.searchParams.get("port")); + const username = url.searchParams.get("username"); + + if (!port || !username) { + ws.close(); + return; + } + + ws.send("Getting private SSH key...\n"); + const privateKey = await getLocalServerPrivateKey(); + + if (!privateKey) { + ws.close(); + return; + } + + connectionDetails = { + host: "localhost", + port, + username, + privateKey, + }; + } else { + ws.send("Getting server data...\n"); + const server = await findServerById(serverId); + + if (!server) { + ws.close(); + return; + } + + const { ipAddress, port, username, sshKey, sshKeyId } = server; + + if (!sshKeyId) { + throw new Error("No SSH key available for this server"); + } + + connectionDetails = { + host: ipAddress, + port: port, + username: username, + privateKey: sshKey?.privateKey, + }; } - if (!server.sshKeyId) - throw new Error("No SSH key available for this server"); - const conn = new Client(); let stdout = ""; let stderr = ""; + + ws.send("Connecting...\n"); + conn .once("ready", () => { + // Clear terminal content once connected + ws.send("\x1bc"); + conn.shell({}, (err, stream) => { if (err) throw err; @@ -112,18 +159,13 @@ export const setupTerminalWebSocketServer = ( .on("error", (err) => { if (err.level === "client-authentication") { ws.send( - `Authentication failed: Invalid SSH private key. ❌ Error: ${err.message} ${err.level}`, + `Authentication failed: Unauthorized ${isLocalServer ? "" : "private SSH key or "}username.\n❌ Error: ${err.message} ${err.level}`, ); } else { ws.send(`SSH connection error: ${err.message}`); } conn.end(); }) - .connect({ - host: server.ipAddress, - port: server.port, - username: server.username, - privateKey: server.sshKey?.privateKey, - }); + .connect(connectionDetails); }); }; From 7e08c8881eb5904bbfbffb45874dcba3da8b0e4f Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 16:37:26 +0100 Subject: [PATCH 06/30] refactor: adapt terminal component to pass local server data and add initialized check --- .../settings/web-server/terminal.tsx | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx b/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx index d38f5d9e..b6757b9c 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx @@ -5,6 +5,7 @@ import { FitAddon } from "xterm-addon-fit"; import "@xterm/xterm/css/xterm.css"; import { AttachAddon } from "@xterm/addon-attach"; import { useTheme } from "next-themes"; +import { getLocalServerData } from "./local-server-config"; interface Props { id: string; @@ -12,9 +13,16 @@ interface Props { } export const Terminal: React.FC = ({ id, serverId }) => { - const termRef = useRef(null); + const termRef = useRef(null); + const initialized = useRef(false); const { resolvedTheme } = useTheme(); useEffect(() => { + if (initialized.current) { + // Required in strict mode to avoid issues due to double wss connection + return; + } + + initialized.current = true; const container = document.getElementById(id); if (container) { container.innerHTML = ""; @@ -33,7 +41,18 @@ export const Terminal: React.FC = ({ id, serverId }) => { const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; - const wsUrl = `${protocol}//${window.location.host}/terminal?serverId=${serverId}`; + const isLocalServer = serverId === "local"; + + const urlParams = new URLSearchParams(); + urlParams.set("serverId", serverId); + + if (isLocalServer) { + const { port, username } = getLocalServerData(); + urlParams.set("port", port.toString()); + urlParams.set("username", username); + } + + const wsUrl = `${protocol}//${window.location.host}/terminal?${urlParams}`; const ws = new WebSocket(wsUrl); const addonAttach = new AttachAddon(ws); From 1ea7d2e1bf38c67b29bc141fc7cc427ec41332b6 Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 18:44:38 +0100 Subject: [PATCH 07/30] feat: enable server translations for servers page --- apps/dokploy/pages/dashboard/settings/servers.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/dokploy/pages/dashboard/settings/servers.tsx b/apps/dokploy/pages/dashboard/settings/servers.tsx index 7aea531b..d25a3513 100644 --- a/apps/dokploy/pages/dashboard/settings/servers.tsx +++ b/apps/dokploy/pages/dashboard/settings/servers.tsx @@ -2,6 +2,7 @@ import { ShowServers } from "@/components/dashboard/settings/servers/show-server import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { SettingsLayout } from "@/components/layouts/settings-layout"; import { appRouter } from "@/server/api/root"; +import { getLocale, serverSideTranslations } from "@/utils/i18n"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; @@ -29,6 +30,7 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; + const locale = await getLocale(req.cookies); const { user, session } = await validateRequest(req, res); if (!user) { return { @@ -64,6 +66,7 @@ export async function getServerSideProps( return { props: { trpcState: helpers.dehydrate(), + ...(await serverSideTranslations(locale, ["settings"])), }, }; } From fd0a9b8b585682519bf0f199e163a73c2f30b78c Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 18:46:02 +0100 Subject: [PATCH 08/30] feat: add local server config, add local server support in terminal modal, add fixed terminal container height --- .../web-server/local-server-config.tsx | 154 ++++++++++++++++++ .../settings/web-server/terminal-modal.tsx | 26 ++- 2 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx diff --git a/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx b/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx new file mode 100644 index 00000000..fde03ffb --- /dev/null +++ b/apps/dokploy/components/dashboard/settings/web-server/local-server-config.tsx @@ -0,0 +1,154 @@ +import { Button, buttonVariants } from "@/components/ui/button"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Input } from "@/components/ui/input"; +import { + FormControl, + FormLabel, + FormField, + FormMessage, + FormItem, + Form, +} from "@/components/ui/form"; +import { cn } from "@/lib/utils"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { Settings } from "lucide-react"; +import React from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { useTranslation } from "next-i18next"; + +const Schema = z.object({ + port: z.number().min(1, "Port must be higher than 0"), + username: z.string().min(1, "Username is required"), +}); + +type Schema = z.infer; + +const DEFAULT_LOCAL_SERVER_DATA: Schema = { + port: 22, + username: "root", +}; + +/** Returns local server data for use with local server terminal */ +export const getLocalServerData = () => { + try { + const localServerData = localStorage.getItem("localServerData"); + const parsedLocalServerData = localServerData + ? (JSON.parse(localServerData) as typeof DEFAULT_LOCAL_SERVER_DATA) + : DEFAULT_LOCAL_SERVER_DATA; + + return parsedLocalServerData; + } catch { + return DEFAULT_LOCAL_SERVER_DATA; + } +}; + +interface Props { + onSave: () => void; +} + +const LocalServerConfig = ({ onSave }: Props) => { + const { t } = useTranslation("settings"); + + const form = useForm({ + defaultValues: getLocalServerData(), + resolver: zodResolver(Schema), + }); + + const onSubmit = (data: Schema) => { + localStorage.setItem("localServerData", JSON.stringify(data)); + form.reset(data); + onSave(); + }; + + return ( + + + +
+
+ + + {t("settings.terminal.connectionSettings")} + +
+
+
+ + +
+ + ( + + {t("settings.terminal.port")} + + { + const value = e.target.value; + if (value === "") { + field.onChange(1); + } else { + const number = Number.parseInt(value, 10); + if (!Number.isNaN(number)) { + field.onChange(number); + } + } + }} + /> + + + + + )} + /> + + ( + + {t("settings.terminal.username")} + + + + + + + )} + /> + + + + +
+
+
+ ); +}; + +export default LocalServerConfig; diff --git a/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx b/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx index 5bdba8b8..2bfd00a0 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx @@ -10,24 +10,38 @@ import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; import { api } from "@/utils/api"; import dynamic from "next/dynamic"; import type React from "react"; +import { useState } from "react"; +import LocalServerConfig from "./local-server-config"; const Terminal = dynamic(() => import("./terminal").then((e) => e.Terminal), { ssr: false, }); +const getTerminalKey = () => { + return `terminal-${Date.now()}`; +}; + interface Props { children?: React.ReactNode; serverId: string; } export const TerminalModal = ({ children, serverId }: Props) => { + const [terminalKey, setTerminalKey] = useState(getTerminalKey()); + const isLocalServer = serverId === "local"; + const { data } = api.server.one.useQuery( { serverId, }, - { enabled: !!serverId }, + { enabled: !!serverId && !isLocalServer }, ); + const handleLocalServerConfigSave = () => { + // Rerender Terminal component to reconnect using new component key when saving local server config + setTerminalKey(getTerminalKey()); + }; + return ( @@ -43,12 +57,16 @@ export const TerminalModal = ({ children, serverId }: Props) => { onEscapeKeyDown={(event) => event.preventDefault()} > - Terminal ({data?.name}) + Terminal ({data?.name ?? serverId}) Easy way to access the server -
- + {isLocalServer && ( + + )} + +
+
From 228d12a61c5f6a1e58e75fc875c4a8a1f90e7a8f Mon Sep 17 00:00:00 2001 From: UndefinedPony Date: Sun, 22 Dec 2024 19:01:02 +0100 Subject: [PATCH 09/30] refactor: code cleanup --- .../settings/web-server/terminal-modal.tsx | 2 +- .../dashboard/settings/web-server/terminal.tsx | 4 +--- apps/dokploy/server/wss/terminal.ts | 14 +++++++------- apps/dokploy/server/wss/utils.ts | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx b/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx index 2bfd00a0..7c64ebc0 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/terminal-modal.tsx @@ -66,7 +66,7 @@ export const TerminalModal = ({ children, serverId }: Props) => { )}
- +
diff --git a/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx b/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx index b6757b9c..e45b73d2 100644 --- a/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx +++ b/apps/dokploy/components/dashboard/settings/web-server/terminal.tsx @@ -41,12 +41,10 @@ export const Terminal: React.FC = ({ id, serverId }) => { const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; - const isLocalServer = serverId === "local"; - const urlParams = new URLSearchParams(); urlParams.set("serverId", serverId); - if (isLocalServer) { + if (serverId === "local") { const { port, username } = getLocalServerData(); urlParams.set("port", port.toString()); urlParams.set("username", username); diff --git a/apps/dokploy/server/wss/terminal.ts b/apps/dokploy/server/wss/terminal.ts index fa268124..78cda7ac 100644 --- a/apps/dokploy/server/wss/terminal.ts +++ b/apps/dokploy/server/wss/terminal.ts @@ -3,7 +3,7 @@ import { findServerById, validateWebSocketRequest } from "@dokploy/server"; import { publicIpv4, publicIpv6 } from "public-ip"; import { Client, type ConnectConfig } from "ssh2"; import { WebSocketServer } from "ws"; -import { getLocalServerPrivateKey } from "./utils"; +import { setupLocalServerSSHKey } from "./utils"; export const getPublicIpWithFallback = async () => { // @ts-ignore @@ -69,8 +69,8 @@ export const setupTerminalWebSocketServer = ( return; } - ws.send("Getting private SSH key...\n"); - const privateKey = await getLocalServerPrivateKey(); + ws.send("Setting up private SSH key...\n"); + const privateKey = await setupLocalServerSSHKey(); if (!privateKey) { ws.close(); @@ -92,16 +92,16 @@ export const setupTerminalWebSocketServer = ( return; } - const { ipAddress, port, username, sshKey, sshKeyId } = server; + const { ipAddress: host, port, username, sshKey, sshKeyId } = server; if (!sshKeyId) { throw new Error("No SSH key available for this server"); } connectionDetails = { - host: ipAddress, - port: port, - username: username, + host, + port, + username, privateKey: sshKey?.privateKey, }; } diff --git a/apps/dokploy/server/wss/utils.ts b/apps/dokploy/server/wss/utils.ts index 3172e36e..4971bac2 100644 --- a/apps/dokploy/server/wss/utils.ts +++ b/apps/dokploy/server/wss/utils.ts @@ -25,7 +25,7 @@ export const getShell = () => { }; /** Returns private SSH key for dokploy local server terminal. Uses already created SSH key or generates a new SSH key, also automatically appends the public key to `authorized_keys`, creating the file if needed. */ -export const getLocalServerPrivateKey = async () => { +export const setupLocalServerSSHKey = async () => { try { if (!fs.existsSync(LOCAL_SSH_KEY_PATH)) { // Generate new SSH key if it hasn't been created yet From c3476a1fdf374c155dbd284e88f6d749672867c6 Mon Sep 17 00:00:00 2001 From: 190km Date: Thu, 26 Dec 2024 00:04:50 +0100 Subject: [PATCH 10/30] refactor: refactored i18n to display real lang name --- .../dashboard/settings/appearance-form.tsx | 19 +++++------ apps/dokploy/lib/languages.ts | 34 +++++++++---------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/appearance-form.tsx b/apps/dokploy/components/dashboard/settings/appearance-form.tsx index d5b90182..8fa8dcff 100644 --- a/apps/dokploy/components/dashboard/settings/appearance-form.tsx +++ b/apps/dokploy/components/dashboard/settings/appearance-form.tsx @@ -38,7 +38,8 @@ const appearanceFormSchema = z.object({ theme: z.enum(["light", "dark", "system"], { required_error: "Please select a theme.", }), - language: z.nativeEnum(Languages, { + + language: z.enum(Object.values(Languages).map(lang => lang.code), { required_error: "Please select a language.", }), }); @@ -48,7 +49,7 @@ type AppearanceFormValues = z.infer; // This can come from your database or API. const defaultValues: Partial = { theme: "system", - language: Languages.English, + language: Languages.english.code, }; export function AppearanceForm() { @@ -173,15 +174,11 @@ export function AppearanceForm() { - {Object.keys(Languages).map((preset) => { - const value = - Languages[preset as keyof typeof Languages]; - return ( - - {preset} - - ); - })} + {Object.values(Languages).map((language) => ( + + {language.name} + + ))}
diff --git a/apps/dokploy/lib/languages.ts b/apps/dokploy/lib/languages.ts index 70c3c558..c559d16d 100644 --- a/apps/dokploy/lib/languages.ts +++ b/apps/dokploy/lib/languages.ts @@ -1,19 +1,19 @@ -export enum Languages { - English = "en", - Polish = "pl", - Russian = "ru", - French = "fr", - German = "de", - ChineseTraditional = "zh-Hant", - ChineseSimplified = "zh-Hans", - Turkish = "tr", - Kazakh = "kz", - Persian = "fa", - Korean = "ko", - Portuguese = "pt-br", - Italian = "it", - Japanese = "ja", - Spanish = "es", -} +export const Languages = { + english: { code: "en", name: "English" }, + polish: { code: "pl", name: "Polski" }, + russian: { code: "ru", name: "Русский" }, + french: { code: "fr", name: "Français" }, + german: { code: "de", name: "Deutsch" }, + chineseTraditional: { code: "zh-Hant", name: "繁體中文" }, + chineseSimplified: { code: "zh-Hans", name: "简体中文" }, + turkish: { code: "tr", name: "Türkçe" }, + kazakh: { code: "kz", name: "Қазақ" }, + persian: { code: "fa", name: "فارسی" }, + korean: { code: "ko", name: "한국어" }, + portuguese: { code: "pt-br", name: "Português" }, + italian: { code: "it", name: "Italiano" }, + japanese: { code: "ja", name: "日本語" }, + spanish: { code: "es", name: "Español" }, +}; export type Language = keyof typeof Languages; From 46348f43f6bfc3cd3d2758adf9a6738e65cf62ef Mon Sep 17 00:00:00 2001 From: 190km Date: Thu, 26 Dec 2024 01:26:53 +0100 Subject: [PATCH 11/30] chore: lint --- .../dashboard/settings/appearance-form.tsx | 6 ++- apps/dokploy/lib/languages.ts | 40 ++++++++++--------- apps/dokploy/pages/_app.tsx | 2 +- apps/dokploy/utils/hooks/use-locale.ts | 7 ++-- apps/dokploy/utils/i18n.ts | 2 +- 5 files changed, 31 insertions(+), 26 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/appearance-form.tsx b/apps/dokploy/components/dashboard/settings/appearance-form.tsx index 8fa8dcff..fde952cc 100644 --- a/apps/dokploy/components/dashboard/settings/appearance-form.tsx +++ b/apps/dokploy/components/dashboard/settings/appearance-form.tsx @@ -34,14 +34,16 @@ import { useTheme } from "next-themes"; import { useEffect } from "react"; import { toast } from "sonner"; + +const languageCodes = Object.values(Languages).map(lang => lang.code) as string[]; const appearanceFormSchema = z.object({ theme: z.enum(["light", "dark", "system"], { required_error: "Please select a theme.", }), - language: z.enum(Object.values(Languages).map(lang => lang.code), { + language: z.enum(languageCodes, { required_error: "Please select a language.", - }), + }) }); type AppearanceFormValues = z.infer; diff --git a/apps/dokploy/lib/languages.ts b/apps/dokploy/lib/languages.ts index c559d16d..0b2fd2c9 100644 --- a/apps/dokploy/lib/languages.ts +++ b/apps/dokploy/lib/languages.ts @@ -1,19 +1,21 @@ -export const Languages = { - english: { code: "en", name: "English" }, - polish: { code: "pl", name: "Polski" }, - russian: { code: "ru", name: "Русский" }, - french: { code: "fr", name: "Français" }, - german: { code: "de", name: "Deutsch" }, - chineseTraditional: { code: "zh-Hant", name: "繁體中文" }, - chineseSimplified: { code: "zh-Hans", name: "简体中文" }, - turkish: { code: "tr", name: "Türkçe" }, - kazakh: { code: "kz", name: "Қазақ" }, - persian: { code: "fa", name: "فارسی" }, - korean: { code: "ko", name: "한국어" }, - portuguese: { code: "pt-br", name: "Português" }, - italian: { code: "it", name: "Italiano" }, - japanese: { code: "ja", name: "日本語" }, - spanish: { code: "es", name: "Español" }, -}; - -export type Language = keyof typeof Languages; +export const Languages = { + english: { code: "en", name: "English" }, + polish: { code: "pl", name: "Polski" }, + russian: { code: "ru", name: "Русский" }, + french: { code: "fr", name: "Français" }, + german: { code: "de", name: "Deutsch" }, + chineseTraditional: { code: "zh-Hant", name: "繁體中文" }, + chineseSimplified: { code: "zh-Hans", name: "简体中文" }, + turkish: { code: "tr", name: "Türkçe" }, + kazakh: { code: "kz", name: "Қазақ" }, + persian: { code: "fa", name: "فارسی" }, + korean: { code: "ko", name: "한국어" }, + portuguese: { code: "pt-br", name: "Português" }, + italian: { code: "it", name: "Italiano" }, + japanese: { code: "ja", name: "日本語" }, + spanish: { code: "es", name: "Español" }, +}; + +export type Language = keyof typeof Languages; +export type LanguageCode = (typeof Languages)[keyof typeof Languages]["code"]; + diff --git a/apps/dokploy/pages/_app.tsx b/apps/dokploy/pages/_app.tsx index b8891437..7a3ad327 100644 --- a/apps/dokploy/pages/_app.tsx +++ b/apps/dokploy/pages/_app.tsx @@ -68,7 +68,7 @@ export default api.withTRPC( appWithTranslation(MyApp, { i18n: { defaultLocale: "en", - locales: Object.values(Languages), + locales: Object.values(Languages).map(language => language.code), localeDetection: false, }, fallbackLng: "en", diff --git a/apps/dokploy/utils/hooks/use-locale.ts b/apps/dokploy/utils/hooks/use-locale.ts index de979f7b..5bfb2846 100644 --- a/apps/dokploy/utils/hooks/use-locale.ts +++ b/apps/dokploy/utils/hooks/use-locale.ts @@ -1,10 +1,11 @@ -import type { Languages } from "@/lib/languages"; +import { LanguageCode } from "@/lib/languages"; import Cookies from "js-cookie"; export default function useLocale() { - const currentLocale = (Cookies.get("DOKPLOY_LOCALE") ?? "en") as Languages; + + const currentLocale = (Cookies.get("DOKPLOY_LOCALE") ?? "en") as LanguageCode; - const setLocale = (locale: Languages) => { + const setLocale = (locale: LanguageCode) => { Cookies.set("DOKPLOY_LOCALE", locale, { expires: 365 }); window.location.reload(); }; diff --git a/apps/dokploy/utils/i18n.ts b/apps/dokploy/utils/i18n.ts index 47466d1f..171bf892 100644 --- a/apps/dokploy/utils/i18n.ts +++ b/apps/dokploy/utils/i18n.ts @@ -17,7 +17,7 @@ export const serverSideTranslations = ( keySeparator: false, i18n: { defaultLocale: "en", - locales: Object.values(Languages), + locales: Object.values(Languages).map(language => language.code), localeDetection: false, }, }); From f242f5c65e7756909e6fd71e4a391918f05c2a94 Mon Sep 17 00:00:00 2001 From: 190km Date: Thu, 26 Dec 2024 01:29:18 +0100 Subject: [PATCH 12/30] chore: lint --- apps/dokploy/components/dashboard/settings/appearance-form.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dokploy/components/dashboard/settings/appearance-form.tsx b/apps/dokploy/components/dashboard/settings/appearance-form.tsx index fde952cc..316952b0 100644 --- a/apps/dokploy/components/dashboard/settings/appearance-form.tsx +++ b/apps/dokploy/components/dashboard/settings/appearance-form.tsx @@ -35,7 +35,8 @@ import { useEffect } from "react"; import { toast } from "sonner"; -const languageCodes = Object.values(Languages).map(lang => lang.code) as string[]; +const languageCodes = Object.values(Languages).map(lang => lang.code) as [string, ...string[]]; + const appearanceFormSchema = z.object({ theme: z.enum(["light", "dark", "system"], { required_error: "Please select a theme.", From c946e3e01b9abde9bb78729e5ccf9c800d7001ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gabriel?= Date: Fri, 27 Dec 2024 10:50:36 -0300 Subject: [PATCH 13/30] refactor: prevent layout shifting from scrollbar --- apps/dokploy/styles/globals.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/dokploy/styles/globals.css b/apps/dokploy/styles/globals.css index ab6084e1..5550358e 100644 --- a/apps/dokploy/styles/globals.css +++ b/apps/dokploy/styles/globals.css @@ -90,6 +90,10 @@ } } +html { + scrollbar-gutter: stable both-edges; +} + .xterm-viewport { border-radius: 0.75rem /* 12px */ !important; } From d45b55825129c2f82416a68f67baf3fd201fd47a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Gabriel?= Date: Fri, 27 Dec 2024 11:08:55 -0300 Subject: [PATCH 14/30] fix: inconsistent service card height --- apps/dokploy/pages/dashboard/project/[projectId].tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/dokploy/pages/dashboard/project/[projectId].tsx b/apps/dokploy/pages/dashboard/project/[projectId].tsx index 6dcc9b91..f39b57e7 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId].tsx @@ -236,7 +236,7 @@ const Project = ( -
+
{emptyServices ? (
@@ -255,7 +255,7 @@ const Project = ( `/dashboard/project/${projectId}/services/${service.type}/${service.id}`, ); }} - className="group relative cursor-pointer bg-transparent transition-colors hover:bg-card h-fit" + className="flex flex-col group relative cursor-pointer bg-transparent transition-colors hover:bg-card" >
@@ -301,7 +301,7 @@ const Project = (
- +
Created From 81408985d4a2492a86865bc3e2a6b32e55506eee Mon Sep 17 00:00:00 2001 From: 190km Date: Sun, 29 Dec 2024 01:07:47 +0100 Subject: [PATCH 15/30] feat: swarm overview style --- .../servers/show-swarm-overview-modal.tsx | 6 +- .../dashboard/swarm/details/details-card.tsx | 231 +++++++-------- .../dashboard/swarm/monitoring-card.tsx | 271 ++++++++---------- apps/dokploy/pages/dashboard/swarm.tsx | 4 +- 4 files changed, 236 insertions(+), 276 deletions(-) diff --git a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx index f8acd207..a63c3037 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx @@ -39,11 +39,9 @@ export const ShowSwarmOverviewModal = ({ serverId }: Props) => {

- +&
-
- -
+
diff --git a/apps/dokploy/components/dashboard/swarm/details/details-card.tsx b/apps/dokploy/components/dashboard/swarm/details/details-card.tsx index a499f898..2de0901a 100644 --- a/apps/dokploy/components/dashboard/swarm/details/details-card.tsx +++ b/apps/dokploy/components/dashboard/swarm/details/details-card.tsx @@ -1,140 +1,127 @@ import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Separator } from "@/components/ui/separator"; import { api } from "@/utils/api"; import { - AlertCircle, - CheckCircle, - HelpCircle, - Loader2, - LoaderIcon, + Box, + Cpu, + Database, + HardDrive, + Loader2, } from "lucide-react"; import { ShowNodeApplications } from "../applications/show-applications"; import { ShowNodeConfig } from "./show-node-config"; export interface SwarmList { - ID: string; - Hostname: string; - Availability: string; - EngineVersion: string; - Status: string; - ManagerStatus: string; - TLSStatus: string; + ID: string; + Hostname: string; + Availability: string; + EngineVersion: string; + Status: string; + ManagerStatus: string; + TLSStatus: string; } interface Props { - node: SwarmList; - serverId?: string; + node: SwarmList; + serverId?: string; } export function NodeCard({ node, serverId }: Props) { - const { data, isLoading } = api.swarm.getNodeInfo.useQuery({ - nodeId: node.ID, - serverId, - }); + const { data, isLoading } = api.swarm.getNodeInfo.useQuery({ + nodeId: node.ID, + serverId, + }); - const getStatusIcon = (status: string) => { - switch (status) { - case "Ready": - return ; - case "Down": - return ; - default: - return ; - } - }; - if (isLoading) { - return ( - - - - - {getStatusIcon(node.Status)} - {node.Hostname} - - - {node.ManagerStatus || "Worker"} - - - - -
- -
-
-
- ); - } + if (isLoading) { + return ( + + + + + {node.Hostname} + + + {node.ManagerStatus || "Worker"} + + + + +
+ +
+
+
+ ); + } - return ( - - - - - {getStatusIcon(node.Status)} - {node.Hostname} - - - {node.ManagerStatus || "Worker"} - - - - -
-
- Status: - {node.Status} -
-
- IP Address: - {isLoading ? ( - - ) : ( - {data?.Status?.Addr} - )} -
-
- Availability: - {node.Availability} -
-
- Engine Version: - {node.EngineVersion} -
-
- CPU: - {isLoading ? ( - - ) : ( - - {(data?.Description?.Resources?.NanoCPUs / 1e9).toFixed(2)} GHz - - )} -
-
- Memory: - {isLoading ? ( - - ) : ( - - {( - data?.Description?.Resources?.MemoryBytes / - 1024 ** 3 - ).toFixed(2)}{" "} - GB - - )} -
-
- TLS Status: - {node.TLSStatus} -
-
-
- - -
-
-
- ); -} + return ( + + + Node Status + + +
+
+
+
+
{node.Hostname}
+ + {node.ManagerStatus || "Worker"} + +
+
+ + TLS Status: {node.TLSStatus} + + + Availability: {node.Availability} + +
+
+ + + +
+
+
+ + Engine Version +
+
{node.EngineVersion}
+
+
+
+ + CPU +
+
{data && (data.Description?.Resources?.NanoCPUs / 1e9).toFixed(2)} Core(s)
+
+
+
+ + Memory +
+
+ {data && (data.Description?.Resources?.MemoryBytes / 1024 ** 3).toFixed(2)} GB +
+
+
+
+ + IP Address +
+
{data?.Status?.Addr}
+
+
+ +
+ + +
+
+ + + ); +} \ No newline at end of file diff --git a/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx b/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx index e2453dd9..bd8570db 100644 --- a/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx +++ b/apps/dokploy/components/dashboard/swarm/monitoring-card.tsx @@ -2,35 +2,35 @@ import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, } from "@/components/ui/tooltip"; import { api } from "@/utils/api"; import { - AlertCircle, - CheckCircle, - HelpCircle, - Loader2, - Server, + Activity, + Loader2, + Monitor, + Settings, + Server, } from "lucide-react"; import { NodeCard } from "./details/details-card"; interface Props { - serverId?: string; + serverId?: string; } export default function SwarmMonitorCard({ serverId }: Props) { - const { data: nodes, isLoading } = api.swarm.getNodes.useQuery({ - serverId, - }); + const { data: nodes, isLoading } = api.swarm.getNodes.useQuery({ + serverId, + }); if (isLoading) { return (
-
+
@@ -50,139 +50,116 @@ export default function SwarmMonitorCard({ serverId }: Props) { ); } - const totalNodes = nodes.length; - const activeNodesCount = nodes.filter( - (node) => node.Status === "Ready", - ).length; - const managerNodesCount = nodes.filter( - (node) => - node.ManagerStatus === "Leader" || node.ManagerStatus === "Reachable", - ).length; + const totalNodes = nodes.length; + const activeNodesCount = nodes.filter((node) => node.Status === "Ready").length; + const managerNodesCount = nodes.filter((node) =>node.ManagerStatus === "Leader" || node.ManagerStatus === "Reachable").length; + const activeNodes = nodes.filter((node) => node.Status === "Ready"); + const managerNodes = nodes.filter((node) => node.ManagerStatus === "Leader" || node.ManagerStatus === "Reachable"); - const activeNodes = nodes.filter((node) => node.Status === "Ready"); - const managerNodes = nodes.filter( - (node) => - node.ManagerStatus === "Leader" || node.ManagerStatus === "Reachable", - ); + return ( +
+
+
+
+

Docker Swarm Overview

+

Monitor and manage your Docker Swarm cluster

+
+ {!serverId && ( + + )} +
- const getStatusIcon = (status: string) => { - switch (status) { - case "Ready": - return ; - case "Down": - return ; - case "Disconnected": - return ; - default: - return ; - } - }; +
+ + + Total Nodes +
+ +
+
+ +
{totalNodes}
+
+
- return ( -
-
-

Docker Swarm Overview

- {!serverId && ( - - )} -
- - - - - Monitor - - - -
-
- Total Nodes: - {totalNodes} -
-
- Active Nodes: - - - - - {activeNodesCount} / {totalNodes} - - - -
- {activeNodes.map((node) => ( -
- {getStatusIcon(node.Status)} - {node.Hostname} -
- ))} -
-
-
-
-
-
- Manager Nodes: - - - - - {managerNodesCount} / {totalNodes} - - - -
- {managerNodes.map((node) => ( -
- {getStatusIcon(node.Status)} - {node.Hostname} -
- ))} -
-
-
-
-
-
-
-

Node Status:

-
    - {nodes.map((node) => ( -
  • - - {getStatusIcon(node.Status)} - {node.Hostname} - - - {node.ManagerStatus || "Worker"} - -
  • - ))} -
-
-
-
-
- {nodes.map((node) => ( - - ))} -
-
- ); -} + + + + Active Nodes + + Online + + +
+ +
+
+ + + + +
+ {activeNodesCount} / {totalNodes} +
+
+ +
+ {activeNodes.map((node) => ( +
+ {node.Hostname} +
+ ))} +
+
+
+
+
+
+ + + + + Manager Nodes + + Online + + +
+ +
+
+ + + + +
+ {managerNodesCount} / {totalNodes} +
+
+ +
+ {managerNodes.map((node) => ( +
+ {node.Hostname} +
+ ))} +
+
+
+
+
+
+
+ +
+ {nodes.map((node) => ( + + ))} +
+
+
+ ); +} \ No newline at end of file diff --git a/apps/dokploy/pages/dashboard/swarm.tsx b/apps/dokploy/pages/dashboard/swarm.tsx index 15a7d793..f36de68e 100644 --- a/apps/dokploy/pages/dashboard/swarm.tsx +++ b/apps/dokploy/pages/dashboard/swarm.tsx @@ -10,9 +10,7 @@ import superjson from "superjson"; const Dashboard = () => { return ( <> -
- -
+ ); }; From 0c2a38254140650cea6e91bae6d630be62356c43 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 28 Dec 2024 19:29:51 -0600 Subject: [PATCH 16/30] Update apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx --- .../dashboard/settings/servers/show-swarm-overview-modal.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx index a63c3037..1bb6fe5a 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx @@ -39,7 +39,6 @@ export const ShowSwarmOverviewModal = ({ serverId }: Props) => {

-&
From 2af8d6f565ca6042f19ef83442bc837da0e2038f Mon Sep 17 00:00:00 2001 From: Dom Date: Sun, 29 Dec 2024 22:34:57 +1000 Subject: [PATCH 17/30] Spelling and grammar corrections --- .../cluster/modify-swarm-settings.tsx | 2 +- .../cluster/show-cluster-settings.tsx | 2 +- .../advanced/general/add-command.tsx | 2 +- .../application/advanced/ports/add-port.tsx | 2 +- .../advanced/ports/delete-port.tsx | 4 ++-- .../advanced/ports/update-port.tsx | 2 +- .../advanced/redirects/add-redirect.tsx | 2 +- .../advanced/redirects/delete-redirect.tsx | 4 ++-- .../advanced/redirects/update-redirect.tsx | 2 +- .../advanced/security/add-security.tsx | 2 +- .../advanced/security/delete-security.tsx | 4 ++-- .../advanced/security/update-security.tsx | 2 +- .../show-application-advanced-settings.tsx | 2 +- .../traefik/update-traefik-config.tsx | 2 +- .../advanced/volumes/add-volumes.tsx | 6 ++--- .../advanced/volumes/delete-volume.tsx | 4 ++-- .../advanced/volumes/update-volume.tsx | 6 ++--- .../dashboard/application/build/show.tsx | 2 +- .../application/deployments/refresh-token.tsx | 2 +- .../application/domains/add-domain.tsx | 4 ++-- .../application/domains/delete-domain.tsx | 4 ++-- .../application/environment/show.tsx | 2 +- .../general/deploy-application.tsx | 4 ++-- .../generic/save-bitbucket-provider.tsx | 2 +- .../general/generic/save-docker-provider.tsx | 2 +- .../general/generic/save-drag-n-drop.tsx | 2 +- .../general/generic/save-git-provider.tsx | 2 +- .../general/generic/save-github-provider.tsx | 2 +- .../general/generic/save-gitlab-provider.tsx | 2 +- .../application/general/reset-application.tsx | 2 +- .../dashboard/application/general/show.tsx | 2 +- .../add-preview-domain.tsx | 4 ++-- .../application/rebuild-application.tsx | 2 +- .../application/start-application.tsx | 4 ++-- .../application/stop-application.tsx | 4 ++-- .../application/update-application.tsx | 4 ++-- .../compose/advanced/add-command.tsx | 2 +- .../deployments/refresh-token-compose.tsx | 2 +- .../dashboard/compose/domains/add-domain.tsx | 4 ++-- .../{enviroment => environment}/show.tsx | 2 +- .../dashboard/compose/general/actions.tsx | 2 +- .../compose/general/compose-file-editor.tsx | 2 +- .../compose/general/deploy-compose.tsx | 2 +- .../save-bitbucket-provider-compose.tsx | 2 +- .../generic/save-git-provider-compose.tsx | 2 +- .../generic/save-github-provider-compose.tsx | 2 +- .../generic/save-gitlab-provider-compose.tsx | 2 +- .../compose/general/randomize-compose.tsx | 4 ++-- .../compose/general/rebuild-compose.tsx | 2 +- .../general/show-converted-compose.tsx | 2 +- .../compose/general/stop-compose.tsx | 4 ++-- .../dashboard/compose/start-compose.tsx | 4 ++-- .../dashboard/compose/stop-compose.tsx | 4 ++-- .../dashboard/compose/update-compose.tsx | 4 ++-- .../dashboard/database/backups/add-backup.tsx | 2 +- .../database/backups/delete-backup.tsx | 4 ++-- .../database/backups/update-backup.tsx | 2 +- .../file-system/show-traefik-file.tsx | 2 +- .../show-mariadb-advanced-settings.tsx | 2 +- .../advanced/show-mariadb-resources.tsx | 2 +- .../mariadb/backups/show-backup-mariadb.tsx | 2 +- .../environment/show-mariadb-environment.tsx | 2 +- .../mariadb/general/deploy-mariadb.tsx | 4 ++-- .../mariadb/general/reset-mariadb.tsx | 2 +- .../show-external-mariadb-credentials.tsx | 2 +- .../mariadb/general/stop-mariadb.tsx | 4 ++-- .../dashboard/mariadb/start-mariadb.tsx | 4 ++-- .../dashboard/mariadb/update-mariadb.tsx | 4 ++-- .../advanced/show-mongo-advanced-settings.tsx | 2 +- .../mongo/advanced/show-mongo-resources.tsx | 2 +- .../mongo/backups/show-backup-mongo.tsx | 2 +- .../environment/show-mongo-environment.tsx | 2 +- .../dashboard/mongo/general/deploy-mongo.tsx | 4 ++-- .../dashboard/mongo/general/reset-mongo.tsx | 2 +- .../show-external-mongo-credentials.tsx | 2 +- .../dashboard/mongo/general/stop-mongo.tsx | 4 ++-- .../dashboard/mongo/start-mongo.tsx | 4 ++-- .../dashboard/mongo/update-mongo.tsx | 4 ++-- .../advanced/show-mysql-advanced-settings.tsx | 2 +- .../mysql/advanced/show-mysql-resources.tsx | 2 +- .../mysql/backups/show-backup-mysql.tsx | 2 +- .../environment/show-mysql-environment.tsx | 2 +- .../dashboard/mysql/general/deploy-mysql.tsx | 4 ++-- .../dashboard/mysql/general/reset-mysql.tsx | 2 +- .../show-external-mysql-credentials.tsx | 2 +- .../dashboard/mysql/general/stop-mysql.tsx | 4 ++-- .../dashboard/mysql/start-mysql.tsx | 4 ++-- .../dashboard/mysql/update-mysql.tsx | 4 ++-- .../show-postgres-advanced-settings.tsx | 2 +- .../advanced/show-postgres-resources.tsx | 2 +- .../postgres/backups/show-backup-postgres.tsx | 2 +- .../environment/show-postgres-environment.tsx | 2 +- .../postgres/general/deploy-postgres.tsx | 4 ++-- .../postgres/general/reset-postgres.tsx | 2 +- .../show-external-postgres-credentials.tsx | 2 +- .../postgres/general/stop-postgres.tsx | 4 ++-- .../dashboard/postgres/start-postgres.tsx | 4 ++-- .../dashboard/postgres/update-postgres.tsx | 4 ++-- .../dashboard/project/add-application.tsx | 6 ++--- .../dashboard/project/add-compose.tsx | 6 ++--- .../dashboard/project/add-database.tsx | 2 +- .../dashboard/project/add-template.tsx | 6 ++--- .../components/dashboard/projects/add.tsx | 2 +- ...enviroment.tsx => project-environment.tsx} | 12 +++++----- .../components/dashboard/projects/show.tsx | 8 +++---- .../components/dashboard/projects/update.tsx | 6 ++--- .../advanced/show-redis-advanced-settings.tsx | 2 +- .../redis/advanced/show-redis-resources.tsx | 2 +- .../environment/show-redis-environment.tsx | 2 +- .../dashboard/redis/general/deploy-redis.tsx | 4 ++-- .../dashboard/redis/general/reset-redis.tsx | 2 +- .../show-external-redis-credentials.tsx | 2 +- .../dashboard/redis/general/stop-redis.tsx | 4 ++-- .../dashboard/redis/start-redis.tsx | 4 ++-- .../dashboard/redis/update-redis.tsx | 4 ++-- .../settings/certificates/add-certificate.tsx | 2 +- .../certificates/delete-certificate.tsx | 4 ++-- .../cluster/nodes/workers/delete-worker.tsx | 4 ++-- .../cluster/registry/add-docker-registry.tsx | 4 ++-- .../cluster/registry/delete-registry.tsx | 2 +- .../registry/update-docker-registry.tsx | 4 ++-- .../settings/destination/add-destination.tsx | 6 ++--- .../destination/delete-destination.tsx | 4 ++-- .../destination/update-destination.tsx | 6 ++--- .../git/bitbucket/edit-bitbucket-provider.tsx | 2 +- .../git/github/edit-github-provider.tsx | 2 +- .../git/gitlab/edit-gitlab-provider.tsx | 2 +- .../settings/git/remove-git-provider.tsx | 4 ++-- .../notifications/add-notification.tsx | 4 ++-- .../notifications/delete-notification.tsx | 4 ++-- .../notifications/update-notification.tsx | 4 ++-- .../settings/profile/disable-2fa.tsx | 2 +- .../dashboard/settings/profile/enable-2fa.tsx | 2 +- .../settings/profile/profile-form.tsx | 2 +- .../servers/actions/show-storage-actions.tsx | 12 +++++----- .../servers/actions/show-traefik-actions.tsx | 2 +- .../dashboard/settings/servers/add-server.tsx | 2 +- .../settings/servers/show-servers.tsx | 2 +- .../settings/servers/update-server.tsx | 2 +- .../servers/welcome-stripe/create-server.tsx | 2 +- .../settings/ssh-keys/add-ssh-key.tsx | 4 ++-- .../settings/ssh-keys/delete-ssh-key.tsx | 2 +- .../settings/ssh-keys/update-ssh-key.tsx | 2 +- .../settings/users/add-permissions.tsx | 2 +- .../dashboard/settings/users/add-user.tsx | 2 +- .../dashboard/settings/users/delete-user.tsx | 4 ++-- .../dashboard/settings/web-domain.tsx | 2 +- .../settings/web-server/edit-traefik-env.tsx | 2 +- .../web-server/remove-ssh-private-key.tsx | 4 ++-- .../settings/web-server/update-server-ip.tsx | 2 +- .../pages/api/deploy/[refreshToken].ts | 6 ++--- .../api/deploy/compose/[refreshToken].ts | 6 ++--- apps/dokploy/pages/api/deploy/github.ts | 2 +- .../pages/dashboard/project/[projectId].tsx | 8 +++---- .../services/compose/[composeId].tsx | 2 +- apps/dokploy/pages/index.tsx | 2 +- apps/dokploy/pages/invitation.tsx | 2 +- apps/dokploy/pages/register.tsx | 4 ++-- apps/dokploy/pages/reset-password.tsx | 4 ++-- apps/dokploy/pages/send-reset-password.tsx | 2 +- apps/dokploy/reset-password.ts | 2 +- apps/dokploy/server/api/routers/admin.ts | 4 ++-- .../dokploy/server/api/routers/application.ts | 4 ++-- apps/dokploy/server/api/routers/auth.ts | 6 ++--- apps/dokploy/server/api/routers/backup.ts | 14 +++++------ apps/dokploy/server/api/routers/bitbucket.ts | 2 +- apps/dokploy/server/api/routers/cluster.ts | 2 +- apps/dokploy/server/api/routers/compose.ts | 2 +- .../dokploy/server/api/routers/destination.ts | 4 ++-- apps/dokploy/server/api/routers/domain.ts | 2 +- .../server/api/routers/git-provider.ts | 4 ++-- apps/dokploy/server/api/routers/gitlab.ts | 12 +++++----- apps/dokploy/server/api/routers/mariadb.ts | 20 ++++++++-------- apps/dokploy/server/api/routers/mongo.ts | 4 ++-- apps/dokploy/server/api/routers/mysql.ts | 24 +++++++++---------- .../server/api/routers/notification.ts | 24 +++++++++---------- apps/dokploy/server/api/routers/port.ts | 2 +- apps/dokploy/server/api/routers/postgres.ts | 24 +++++++++---------- apps/dokploy/server/api/routers/project.ts | 2 +- apps/dokploy/server/api/routers/redis.ts | 20 ++++++++-------- apps/dokploy/server/api/routers/registry.ts | 2 +- apps/dokploy/server/api/routers/server.ts | 2 +- apps/dokploy/server/api/routers/settings.ts | 2 +- apps/dokploy/server/api/routers/ssh-key.ts | 10 ++++---- apps/dokploy/server/db/reset.ts | 2 +- apps/dokploy/server/wss/terminal.ts | 4 ++-- apps/dokploy/setup.ts | 2 +- packages/server/src/db/reset.ts | 2 +- packages/server/src/services/admin.ts | 2 +- packages/server/src/services/application.ts | 6 ++--- packages/server/src/services/auth.ts | 4 ++-- packages/server/src/services/backup.ts | 2 +- packages/server/src/services/bitbucket.ts | 2 +- packages/server/src/services/compose.ts | 4 ++-- packages/server/src/services/deployment.ts | 18 +++++++------- packages/server/src/services/github.ts | 2 +- packages/server/src/services/gitlab.ts | 2 +- packages/server/src/services/mount.ts | 8 +++---- .../server/src/services/preview-deployment.ts | 4 ++-- packages/server/src/services/project.ts | 2 +- packages/server/src/services/redirect.ts | 8 +++---- packages/server/src/services/registry.ts | 4 ++-- packages/server/src/services/security.ts | 8 +++---- packages/server/src/services/server.ts | 2 +- packages/server/src/services/ssh-key.ts | 2 +- .../server/src/utils/access-log/handler.ts | 2 +- .../server/src/utils/filesystem/directory.ts | 8 +++---- packages/server/src/wss/utils.ts | 4 ++-- 208 files changed, 397 insertions(+), 397 deletions(-) rename apps/dokploy/components/dashboard/compose/{enviroment => environment}/show.tsx (98%) rename apps/dokploy/components/dashboard/projects/{project-enviroment.tsx => project-environment.tsx} (92%) diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx index 6750527d..9b71a042 100644 --- a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx @@ -259,7 +259,7 @@ export const AddSwarmSettings = ({ applicationId }: Props) => { refetch(); }) .catch(() => { - toast.error("Error to update the swarm settings"); + toast.error("Error updating the swarm settings"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx index d8d32e19..cf7314cf 100644 --- a/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx @@ -94,7 +94,7 @@ export const ShowClusterSettings = ({ applicationId }: Props) => { }); }) .catch(() => { - toast.error("Error to update the command"); + toast.error("Error updating the command"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx b/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx index 979660bc..f9e70b42 100644 --- a/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx @@ -71,7 +71,7 @@ export const AddCommand = ({ applicationId }: Props) => { }); }) .catch(() => { - toast.error("Error to update the command"); + toast.error("Error updating the command"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/ports/add-port.tsx b/apps/dokploy/components/dashboard/application/advanced/ports/add-port.tsx index 1b613704..1fc34cac 100644 --- a/apps/dokploy/components/dashboard/application/advanced/ports/add-port.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/ports/add-port.tsx @@ -86,7 +86,7 @@ export const AddPort = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to create the port"); + toast.error("Error creating the port"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/ports/delete-port.tsx b/apps/dokploy/components/dashboard/application/advanced/ports/delete-port.tsx index cc2c7776..e1723f6e 100644 --- a/apps/dokploy/components/dashboard/application/advanced/ports/delete-port.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/ports/delete-port.tsx @@ -47,10 +47,10 @@ export const DeletePort = ({ portId }: Props) => { applicationId: data?.applicationId, }); - toast.success("Port delete succesfully"); + toast.success("Port delete successfully"); }) .catch(() => { - toast.error("Error to delete the port"); + toast.error("Error deleting the port"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/advanced/ports/update-port.tsx b/apps/dokploy/components/dashboard/application/advanced/ports/update-port.tsx index a9f7f32d..e37a3c5b 100644 --- a/apps/dokploy/components/dashboard/application/advanced/ports/update-port.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/ports/update-port.tsx @@ -93,7 +93,7 @@ export const UpdatePort = ({ portId }: Props) => { setIsOpen(false); }) .catch(() => { - toast.error("Error to update the port"); + toast.error("Error updating the port"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/redirects/add-redirect.tsx b/apps/dokploy/components/dashboard/application/advanced/redirects/add-redirect.tsx index 8ce547a2..abeb2108 100644 --- a/apps/dokploy/components/dashboard/application/advanced/redirects/add-redirect.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/redirects/add-redirect.tsx @@ -124,7 +124,7 @@ export const AddRedirect = ({ onDialogToggle(false); }) .catch(() => { - toast.error("Error to create the redirect"); + toast.error("Error creating the redirect"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/redirects/delete-redirect.tsx b/apps/dokploy/components/dashboard/application/advanced/redirects/delete-redirect.tsx index 08d1f3e0..49f289b2 100644 --- a/apps/dokploy/components/dashboard/application/advanced/redirects/delete-redirect.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/redirects/delete-redirect.tsx @@ -50,10 +50,10 @@ export const DeleteRedirect = ({ redirectId }: Props) => { utils.application.readTraefikConfig.invalidate({ applicationId: data?.applicationId, }); - toast.success("Redirect delete succesfully"); + toast.success("Redirect delete successfully"); }) .catch(() => { - toast.error("Error to delete the redirect"); + toast.error("Error deleting the redirect"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/advanced/redirects/update-redirect.tsx b/apps/dokploy/components/dashboard/application/advanced/redirects/update-redirect.tsx index 52ff310d..c4125846 100644 --- a/apps/dokploy/components/dashboard/application/advanced/redirects/update-redirect.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/redirects/update-redirect.tsx @@ -88,7 +88,7 @@ export const UpdateRedirect = ({ redirectId }: Props) => { setIsOpen(false); }) .catch(() => { - toast.error("Error to update the redirect"); + toast.error("Error updating the redirect"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/security/add-security.tsx b/apps/dokploy/components/dashboard/application/advanced/security/add-security.tsx index aeaebb92..56a1a6a4 100644 --- a/apps/dokploy/components/dashboard/application/advanced/security/add-security.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/security/add-security.tsx @@ -75,7 +75,7 @@ export const AddSecurity = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to create the security"); + toast.error("Error creating security"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/security/delete-security.tsx b/apps/dokploy/components/dashboard/application/advanced/security/delete-security.tsx index 1a63c234..b44b2ff8 100644 --- a/apps/dokploy/components/dashboard/application/advanced/security/delete-security.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/security/delete-security.tsx @@ -50,10 +50,10 @@ export const DeleteSecurity = ({ securityId }: Props) => { utils.application.readTraefikConfig.invalidate({ applicationId: data?.applicationId, }); - toast.success("Security delete succesfully"); + toast.success("Security delete successfully"); }) .catch(() => { - toast.error("Error to delete the security"); + toast.error("Error deleting the security"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/advanced/security/update-security.tsx b/apps/dokploy/components/dashboard/application/advanced/security/update-security.tsx index 1e5af95f..cec1db0d 100644 --- a/apps/dokploy/components/dashboard/application/advanced/security/update-security.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/security/update-security.tsx @@ -83,7 +83,7 @@ export const UpdateSecurity = ({ securityId }: Props) => { setIsOpen(false); }) .catch(() => { - toast.error("Error to update the security"); + toast.error("Error updating the security"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/show-application-advanced-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/show-application-advanced-settings.tsx index e77be2d1..507fb50a 100644 --- a/apps/dokploy/components/dashboard/application/advanced/show-application-advanced-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/show-application-advanced-settings.tsx @@ -72,7 +72,7 @@ export const ShowApplicationResources = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/application/advanced/traefik/update-traefik-config.tsx b/apps/dokploy/components/dashboard/application/advanced/traefik/update-traefik-config.tsx index 2c2437a1..f563f1ab 100644 --- a/apps/dokploy/components/dashboard/application/advanced/traefik/update-traefik-config.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/traefik/update-traefik-config.tsx @@ -105,7 +105,7 @@ export const UpdateTraefikConfig = ({ applicationId }: Props) => { form.reset(); }) .catch(() => { - toast.error("Error to update the traefik config"); + toast.error("Error updating the Traefik config"); }); }; diff --git a/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx b/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx index 5c6b95ca..718f98b7 100644 --- a/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/volumes/add-volumes.tsx @@ -107,7 +107,7 @@ export const AddVolumes = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to create the Bind mount"); + toast.error("Error creating the Bind mount"); }); } else if (data.type === "volume") { await mutateAsync({ @@ -122,7 +122,7 @@ export const AddVolumes = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to create the Volume mount"); + toast.error("Error creating the Volume mount"); }); } else if (data.type === "file") { await mutateAsync({ @@ -138,7 +138,7 @@ export const AddVolumes = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to create the File mount"); + toast.error("Error creating the File mount"); }); } diff --git a/apps/dokploy/components/dashboard/application/advanced/volumes/delete-volume.tsx b/apps/dokploy/components/dashboard/application/advanced/volumes/delete-volume.tsx index 020a6c36..4945bb4b 100644 --- a/apps/dokploy/components/dashboard/application/advanced/volumes/delete-volume.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/volumes/delete-volume.tsx @@ -45,10 +45,10 @@ export const DeleteVolume = ({ mountId, refetch }: Props) => { }) .then(() => { refetch(); - toast.success("Mount deleted succesfully"); + toast.success("Mount deleted successfully"); }) .catch(() => { - toast.error("Error to delete the mount"); + toast.error("Error deleting the mount"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx b/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx index 80cc97ad..55ea2120 100644 --- a/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/volumes/update-volume.tsx @@ -139,7 +139,7 @@ export const UpdateVolume = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to update the Bind mount"); + toast.error("Error updating the Bind mount"); }); } else if (data.type === "volume") { await mutateAsync({ @@ -153,7 +153,7 @@ export const UpdateVolume = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to update the Volume mount"); + toast.error("Error updating the Volume mount"); }); } else if (data.type === "file") { await mutateAsync({ @@ -168,7 +168,7 @@ export const UpdateVolume = ({ setIsOpen(false); }) .catch(() => { - toast.error("Error to update the File mount"); + toast.error("Error updating the File mount"); }); } refetch(); diff --git a/apps/dokploy/components/dashboard/application/build/show.tsx b/apps/dokploy/components/dashboard/application/build/show.tsx index edfb38ae..ad83f456 100644 --- a/apps/dokploy/components/dashboard/application/build/show.tsx +++ b/apps/dokploy/components/dashboard/application/build/show.tsx @@ -126,7 +126,7 @@ export const ShowBuildChooseForm = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the build type"); + toast.error("Error saving the build type"); }); }; diff --git a/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx b/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx index 88d5beee..c268e6d5 100644 --- a/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx @@ -47,7 +47,7 @@ export const RefreshToken = ({ applicationId }: Props) => { toast.success("Refresh updated"); }) .catch(() => { - toast.error("Error to update the refresh token"); + toast.error("Error updating the refresh token"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/domains/add-domain.tsx b/apps/dokploy/components/dashboard/application/domains/add-domain.tsx index 38180114..22eaf1d3 100644 --- a/apps/dokploy/components/dashboard/application/domains/add-domain.tsx +++ b/apps/dokploy/components/dashboard/application/domains/add-domain.tsx @@ -105,8 +105,8 @@ export const AddDomain = ({ const dictionary = { success: domainId ? "Domain Updated" : "Domain Created", error: domainId - ? "Error to update the domain" - : "Error to create the domain", + ? "Error updating the domain" + : "Error creating the domain", submit: domainId ? "Update" : "Create", dialogDescription: domainId ? "In this section you can edit a domain" diff --git a/apps/dokploy/components/dashboard/application/domains/delete-domain.tsx b/apps/dokploy/components/dashboard/application/domains/delete-domain.tsx index 5933a99a..3d4425df 100644 --- a/apps/dokploy/components/dashboard/application/domains/delete-domain.tsx +++ b/apps/dokploy/components/dashboard/application/domains/delete-domain.tsx @@ -57,10 +57,10 @@ export const DeleteDomain = ({ domainId }: Props) => { }); } - toast.success("Domain delete succesfully"); + toast.success("Domain delete successfully"); }) .catch(() => { - toast.error("Error to delete Domain"); + toast.error("Error deleting the Domain"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/environment/show.tsx b/apps/dokploy/components/dashboard/application/environment/show.tsx index c7b8d4bb..ec555804 100644 --- a/apps/dokploy/components/dashboard/application/environment/show.tsx +++ b/apps/dokploy/components/dashboard/application/environment/show.tsx @@ -51,7 +51,7 @@ export const ShowEnvironment = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to add environment"); + toast.error("Error adding environment"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/deploy-application.tsx b/apps/dokploy/components/dashboard/application/general/deploy-application.tsx index 252894dd..c1ab8457 100644 --- a/apps/dokploy/components/dashboard/application/general/deploy-application.tsx +++ b/apps/dokploy/components/dashboard/application/general/deploy-application.tsx @@ -51,7 +51,7 @@ export const DeployApplication = ({ applicationId }: Props) => { applicationId, }) .then(async () => { - toast.success("Application deployed succesfully"); + toast.success("Application deployed successfully"); await refetch(); router.push( `/dashboard/project/${data?.projectId}/services/application/${applicationId}?tab=deployments`, @@ -59,7 +59,7 @@ export const DeployApplication = ({ applicationId }: Props) => { }) .catch(() => { - toast.error("Error to deploy Application"); + toast.error("Error deploying the Application"); }); await refetch(); diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx index d6dfa20e..a487452b 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx @@ -137,7 +137,7 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the Bitbucket provider"); + toast.error("Error saving the Bitbucket provider"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-docker-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-docker-provider.tsx index b4e33719..fcc4f824 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-docker-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-docker-provider.tsx @@ -68,7 +68,7 @@ export const SaveDockerProvider = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the Docker provider"); + toast.error("Error saving the Docker provider"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-drag-n-drop.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-drag-n-drop.tsx index 4ed9df16..3732860d 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-drag-n-drop.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-drag-n-drop.tsx @@ -56,7 +56,7 @@ export const SaveDragNDrop = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the deployment"); + toast.error("Error saving the deployment"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx index 58fd1973..218e004d 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-git-provider.tsx @@ -84,7 +84,7 @@ export const SaveGitProvider = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the Git provider"); + toast.error("Error saving the Git provider"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx index 5c432e6a..f5da9ceb 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-github-provider.tsx @@ -131,7 +131,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the github provider"); + toast.error("Error saving the github provider"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx index 2d498bfd..d190180e 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-gitlab-provider.tsx @@ -144,7 +144,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the gitlab provider"); + toast.error("Error saving the gitlab provider"); }); }; diff --git a/apps/dokploy/components/dashboard/application/general/reset-application.tsx b/apps/dokploy/components/dashboard/application/general/reset-application.tsx index cc338658..5be2a185 100644 --- a/apps/dokploy/components/dashboard/application/general/reset-application.tsx +++ b/apps/dokploy/components/dashboard/application/general/reset-application.tsx @@ -56,7 +56,7 @@ export const ResetApplication = ({ applicationId, appName }: Props) => { toast.success("Service Reloaded"); }) .catch(() => { - toast.error("Error to reload the service"); + toast.error("Error reloading the service"); }); await refetch(); }} diff --git a/apps/dokploy/components/dashboard/application/general/show.tsx b/apps/dokploy/components/dashboard/application/general/show.tsx index 65c99e9b..46f185d5 100644 --- a/apps/dokploy/components/dashboard/application/general/show.tsx +++ b/apps/dokploy/components/dashboard/application/general/show.tsx @@ -69,7 +69,7 @@ export const ShowGeneralApplication = ({ applicationId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to update Auto Deploy"); + toast.error("Error updating Auto Deploy"); }); }} className="flex flex-row gap-2 items-center" diff --git a/apps/dokploy/components/dashboard/application/preview-deployments/add-preview-domain.tsx b/apps/dokploy/components/dashboard/application/preview-deployments/add-preview-domain.tsx index 875a93d4..3a33bbed 100644 --- a/apps/dokploy/components/dashboard/application/preview-deployments/add-preview-domain.tsx +++ b/apps/dokploy/components/dashboard/application/preview-deployments/add-preview-domain.tsx @@ -105,8 +105,8 @@ export const AddPreviewDomain = ({ const dictionary = { success: domainId ? "Domain Updated" : "Domain Created", error: domainId - ? "Error to update the domain" - : "Error to create the domain", + ? "Error updating the domain" + : "Error creating the domain", submit: domainId ? "Update" : "Create", dialogDescription: domainId ? "In this section you can edit a domain" diff --git a/apps/dokploy/components/dashboard/application/rebuild-application.tsx b/apps/dokploy/components/dashboard/application/rebuild-application.tsx index 0284ab8f..66ed3397 100644 --- a/apps/dokploy/components/dashboard/application/rebuild-application.tsx +++ b/apps/dokploy/components/dashboard/application/rebuild-application.tsx @@ -63,7 +63,7 @@ export const RedbuildApplication = ({ applicationId }: Props) => { }); }) .catch(() => { - toast.error("Error to rebuild the application"); + toast.error("Error rebuilding the application"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/start-application.tsx b/apps/dokploy/components/dashboard/application/start-application.tsx index d65997ed..9a65397b 100644 --- a/apps/dokploy/components/dashboard/application/start-application.tsx +++ b/apps/dokploy/components/dashboard/application/start-application.tsx @@ -49,10 +49,10 @@ export const StartApplication = ({ applicationId }: Props) => { await utils.application.one.invalidate({ applicationId, }); - toast.success("Application started succesfully"); + toast.success("Application started successfully"); }) .catch(() => { - toast.error("Error to start the Application"); + toast.error("Error starting the Application"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/stop-application.tsx b/apps/dokploy/components/dashboard/application/stop-application.tsx index 5eb873f4..ea052fab 100644 --- a/apps/dokploy/components/dashboard/application/stop-application.tsx +++ b/apps/dokploy/components/dashboard/application/stop-application.tsx @@ -49,10 +49,10 @@ export const StopApplication = ({ applicationId }: Props) => { await utils.application.one.invalidate({ applicationId, }); - toast.success("Application stopped succesfully"); + toast.success("Application stopped successfully"); }) .catch(() => { - toast.error("Error to stop the Application"); + toast.error("Error stopping the Application"); }); }} > diff --git a/apps/dokploy/components/dashboard/application/update-application.tsx b/apps/dokploy/components/dashboard/application/update-application.tsx index f40a0020..8f8b63fe 100644 --- a/apps/dokploy/components/dashboard/application/update-application.tsx +++ b/apps/dokploy/components/dashboard/application/update-application.tsx @@ -76,14 +76,14 @@ export const UpdateApplication = ({ applicationId }: Props) => { description: formData.description || "", }) .then(() => { - toast.success("Application updated succesfully"); + toast.success("Application updated successfully"); utils.application.one.invalidate({ applicationId: applicationId, }); setIsOpen(false); }) .catch(() => { - toast.error("Error to update the application"); + toast.error("Error updating the Application"); }) .finally(() => {}); }; diff --git a/apps/dokploy/components/dashboard/compose/advanced/add-command.tsx b/apps/dokploy/components/dashboard/compose/advanced/add-command.tsx index 6d1b455f..1bbd3820 100644 --- a/apps/dokploy/components/dashboard/compose/advanced/add-command.tsx +++ b/apps/dokploy/components/dashboard/compose/advanced/add-command.tsx @@ -82,7 +82,7 @@ export const AddCommandCompose = ({ composeId }: Props) => { }); }) .catch(() => { - toast.error("Error to update the command"); + toast.error("Error updating the command"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx b/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx index 66d690e7..95fafaab 100644 --- a/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx @@ -47,7 +47,7 @@ export const RefreshTokenCompose = ({ composeId }: Props) => { toast.success("Refresh Token updated"); }) .catch(() => { - toast.error("Error to update the refresh token"); + toast.error("Error updating the refresh token"); }); }} > diff --git a/apps/dokploy/components/dashboard/compose/domains/add-domain.tsx b/apps/dokploy/components/dashboard/compose/domains/add-domain.tsx index 6ea38237..b9ae9a2e 100644 --- a/apps/dokploy/components/dashboard/compose/domains/add-domain.tsx +++ b/apps/dokploy/components/dashboard/compose/domains/add-domain.tsx @@ -127,8 +127,8 @@ export const AddDomainCompose = ({ const dictionary = { success: domainId ? "Domain Updated" : "Domain Created", error: domainId - ? "Error to update the domain" - : "Error to create the domain", + ? "Error updating the domain" + : "Error creating the domain", submit: domainId ? "Update" : "Create", dialogDescription: domainId ? "In this section you can edit a domain" diff --git a/apps/dokploy/components/dashboard/compose/enviroment/show.tsx b/apps/dokploy/components/dashboard/compose/environment/show.tsx similarity index 98% rename from apps/dokploy/components/dashboard/compose/enviroment/show.tsx rename to apps/dokploy/components/dashboard/compose/environment/show.tsx index 4e9b2dfd..8fa1f444 100644 --- a/apps/dokploy/components/dashboard/compose/enviroment/show.tsx +++ b/apps/dokploy/components/dashboard/compose/environment/show.tsx @@ -70,7 +70,7 @@ export const ShowEnvironmentCompose = ({ composeId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to add environment"); + toast.error("Error adding environment"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/general/actions.tsx b/apps/dokploy/components/dashboard/compose/general/actions.tsx index 43966966..215e7e42 100644 --- a/apps/dokploy/components/dashboard/compose/general/actions.tsx +++ b/apps/dokploy/components/dashboard/compose/general/actions.tsx @@ -83,7 +83,7 @@ export const ComposeActions = ({ composeId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to update Auto Deploy"); + toast.error("Error updating Auto Deploy"); }); }} className="flex flex-row gap-2 items-center" diff --git a/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx b/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx index 90bf6e30..b368aafc 100644 --- a/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx +++ b/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx @@ -77,7 +77,7 @@ export const ComposeFileEditor = ({ composeId }: Props) => { }); }) .catch((e) => { - toast.error("Error to update the compose config"); + toast.error("Error updating the Compose config"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/compose/general/deploy-compose.tsx b/apps/dokploy/components/dashboard/compose/general/deploy-compose.tsx index 25b59cc7..2c6f13e0 100644 --- a/apps/dokploy/components/dashboard/compose/general/deploy-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/deploy-compose.tsx @@ -57,7 +57,7 @@ export const DeployCompose = ({ composeId }: Props) => { ); }) .catch(() => { - toast.error("Error to deploy Compose"); + toast.error("Error deploying Compose"); }); await refetch(); diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx index cf5a7d5b..2a083666 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-bitbucket-provider-compose.tsx @@ -139,7 +139,7 @@ export const SaveBitbucketProviderCompose = ({ composeId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the Bitbucket provider"); + toast.error("Error saving the Bitbucket provider"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx index c05dc7ed..e42f6d55 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-git-provider-compose.tsx @@ -83,7 +83,7 @@ export const SaveGitProviderCompose = ({ composeId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the Git provider"); + toast.error("Error saving the Git provider"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx index bd5e8874..af1a61d4 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-github-provider-compose.tsx @@ -133,7 +133,7 @@ export const SaveGithubProviderCompose = ({ composeId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the github provider"); + toast.error("Error saving the Github provider"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx index c0a871c0..5f28b342 100644 --- a/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/generic/save-gitlab-provider-compose.tsx @@ -146,7 +146,7 @@ export const SaveGitlabProviderCompose = ({ composeId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the gitlab provider"); + toast.error("Error saving the Gitlab provider"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx b/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx index 2c6184c8..59233acf 100644 --- a/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx @@ -90,7 +90,7 @@ export const RandomizeCompose = ({ composeId }: Props) => { toast.success("Compose updated"); }) .catch(() => { - toast.error("Error to randomize the compose"); + toast.error("Error randomizing the compose"); }); }; @@ -105,7 +105,7 @@ export const RandomizeCompose = ({ composeId }: Props) => { toast.success("Compose randomized"); }) .catch(() => { - toast.error("Error to randomize the compose"); + toast.error("Error randomizing the compose"); }); }; diff --git a/apps/dokploy/components/dashboard/compose/general/rebuild-compose.tsx b/apps/dokploy/components/dashboard/compose/general/rebuild-compose.tsx index 199d4f93..c2f50414 100644 --- a/apps/dokploy/components/dashboard/compose/general/rebuild-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/rebuild-compose.tsx @@ -62,7 +62,7 @@ export const RedbuildCompose = ({ composeId }: Props) => { }); }) .catch(() => { - toast.error("Error to rebuild the compose"); + toast.error("Error rebuilding the compose"); }); }} > diff --git a/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx b/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx index ec441e02..8a2186d9 100644 --- a/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx @@ -73,7 +73,7 @@ export const ShowConvertedCompose = ({ composeId }: Props) => { toast.success("Fetched source type"); }) .catch((err) => { - toast.error("Error to fetch source type", { + toast.error("Error fetching source type", { description: err.message, }); }); diff --git a/apps/dokploy/components/dashboard/compose/general/stop-compose.tsx b/apps/dokploy/components/dashboard/compose/general/stop-compose.tsx index 2bb3cdeb..f405481b 100644 --- a/apps/dokploy/components/dashboard/compose/general/stop-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/stop-compose.tsx @@ -53,10 +53,10 @@ export const StopCompose = ({ composeId }: Props) => { await utils.compose.one.invalidate({ composeId, }); - toast.success("Compose stopped succesfully"); + toast.success("Compose stopped successfully"); }) .catch(() => { - toast.error("Error to stop the compose"); + toast.error("Error stopping the compose"); }); }} > diff --git a/apps/dokploy/components/dashboard/compose/start-compose.tsx b/apps/dokploy/components/dashboard/compose/start-compose.tsx index 20f990bb..fae978e2 100644 --- a/apps/dokploy/components/dashboard/compose/start-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/start-compose.tsx @@ -49,10 +49,10 @@ export const StartCompose = ({ composeId }: Props) => { await utils.compose.one.invalidate({ composeId, }); - toast.success("Compose started succesfully"); + toast.success("Compose started successfully"); }) .catch(() => { - toast.error("Error to start the Compose"); + toast.error("Error starting the Compose"); }); }} > diff --git a/apps/dokploy/components/dashboard/compose/stop-compose.tsx b/apps/dokploy/components/dashboard/compose/stop-compose.tsx index 3080e755..da3e3412 100644 --- a/apps/dokploy/components/dashboard/compose/stop-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/stop-compose.tsx @@ -49,10 +49,10 @@ export const StopCompose = ({ composeId }: Props) => { await utils.compose.one.invalidate({ composeId, }); - toast.success("Compose stopped succesfully"); + toast.success("Compose stopped successfully"); }) .catch(() => { - toast.error("Error to stop the Compose"); + toast.error("Error stopping the Compose"); }); }} > diff --git a/apps/dokploy/components/dashboard/compose/update-compose.tsx b/apps/dokploy/components/dashboard/compose/update-compose.tsx index 5991c03d..807f5b26 100644 --- a/apps/dokploy/components/dashboard/compose/update-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/update-compose.tsx @@ -76,14 +76,14 @@ export const UpdateCompose = ({ composeId }: Props) => { description: formData.description || "", }) .then(() => { - toast.success("Compose updated succesfully"); + toast.success("Compose updated successfully"); utils.compose.one.invalidate({ composeId: composeId, }); setIsOpen(false); }) .catch(() => { - toast.error("Error to update the Compose"); + toast.error("Error updating the Compose"); }) .finally(() => {}); }; diff --git a/apps/dokploy/components/dashboard/database/backups/add-backup.tsx b/apps/dokploy/components/dashboard/database/backups/add-backup.tsx index 94f072e7..5f349b24 100644 --- a/apps/dokploy/components/dashboard/database/backups/add-backup.tsx +++ b/apps/dokploy/components/dashboard/database/backups/add-backup.tsx @@ -125,7 +125,7 @@ export const AddBackup = ({ databaseId, databaseType, refetch }: Props) => { refetch(); }) .catch(() => { - toast.error("Error to create a backup"); + toast.error("Error creating a backup"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/database/backups/delete-backup.tsx b/apps/dokploy/components/dashboard/database/backups/delete-backup.tsx index 1a570b54..63c6677d 100644 --- a/apps/dokploy/components/dashboard/database/backups/delete-backup.tsx +++ b/apps/dokploy/components/dashboard/database/backups/delete-backup.tsx @@ -46,10 +46,10 @@ export const DeleteBackup = ({ backupId, refetch }: Props) => { .then(() => { refetch(); - toast.success("Backup delete succesfully"); + toast.success("Backup deleted successfully"); }) .catch(() => { - toast.error("Error to delete the backup"); + toast.error("Error deleting the backup"); }); }} > diff --git a/apps/dokploy/components/dashboard/database/backups/update-backup.tsx b/apps/dokploy/components/dashboard/database/backups/update-backup.tsx index 4c60a31b..55754e9d 100644 --- a/apps/dokploy/components/dashboard/database/backups/update-backup.tsx +++ b/apps/dokploy/components/dashboard/database/backups/update-backup.tsx @@ -109,7 +109,7 @@ export const UpdateBackup = ({ backupId, refetch }: Props) => { setIsOpen(false); }) .catch(() => { - toast.error("Error to update the backup"); + toast.error("Error updating the Backup"); }); }; diff --git a/apps/dokploy/components/dashboard/file-system/show-traefik-file.tsx b/apps/dokploy/components/dashboard/file-system/show-traefik-file.tsx index 3dfe9875..fb5fe8f5 100644 --- a/apps/dokploy/components/dashboard/file-system/show-traefik-file.tsx +++ b/apps/dokploy/components/dashboard/file-system/show-traefik-file.tsx @@ -86,7 +86,7 @@ export const ShowTraefikFile = ({ path, serverId }: Props) => { refetch(); }) .catch(() => { - toast.error("Error to update the traefik config"); + toast.error("Error updating the Traefik config"); }); }; diff --git a/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-advanced-settings.tsx b/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-advanced-settings.tsx index 062fffcd..b4c0129d 100644 --- a/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-advanced-settings.tsx +++ b/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-advanced-settings.tsx @@ -65,7 +65,7 @@ export const ShowAdvancedMariadb = ({ mariadbId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-resources.tsx b/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-resources.tsx index 60cdbda0..4708b123 100644 --- a/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-resources.tsx +++ b/apps/dokploy/components/dashboard/mariadb/advanced/show-mariadb-resources.tsx @@ -71,7 +71,7 @@ export const ShowMariadbResources = ({ mariadbId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/mariadb/backups/show-backup-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/backups/show-backup-mariadb.tsx index f3d214e3..cac2820f 100644 --- a/apps/dokploy/components/dashboard/mariadb/backups/show-backup-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/backups/show-backup-mariadb.tsx @@ -144,7 +144,7 @@ export const ShowBackupMariadb = ({ mariadbId }: Props) => { }) .catch(() => { toast.error( - "Error to Create the manual backup", + "Error creating the manual backup", ); }); }} diff --git a/apps/dokploy/components/dashboard/mariadb/environment/show-mariadb-environment.tsx b/apps/dokploy/components/dashboard/mariadb/environment/show-mariadb-environment.tsx index 61f64cd8..418ae001 100644 --- a/apps/dokploy/components/dashboard/mariadb/environment/show-mariadb-environment.tsx +++ b/apps/dokploy/components/dashboard/mariadb/environment/show-mariadb-environment.tsx @@ -70,7 +70,7 @@ export const ShowMariadbEnvironment = ({ mariadbId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to add environment"); + toast.error("Error adding environment"); }); }; diff --git a/apps/dokploy/components/dashboard/mariadb/general/deploy-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/general/deploy-mariadb.tsx index e3162f00..50bf5819 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/deploy-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/deploy-mariadb.tsx @@ -55,12 +55,12 @@ export const DeployMariadb = ({ mariadbId }: Props) => { await deploy({ mariadbId, }).catch(() => { - toast.error("Error to deploy Database"); + toast.error("Error deploying Database"); }); await refetch(); }) .catch((e) => { - toast.error(e.message || "Error to deploy Database"); + toast.error(e.message || "Error deploying Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/mariadb/general/reset-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/general/reset-mariadb.tsx index 3adb3b70..bee3d8ba 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/reset-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/reset-mariadb.tsx @@ -55,7 +55,7 @@ export const ResetMariadb = ({ mariadbId, appName }: Props) => { toast.success("Service Reloaded"); }) .catch(() => { - toast.error("Error to reload the service"); + toast.error("Error reloading the service"); }); await refetch(); }} diff --git a/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx b/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx index c06cacaa..f2044917 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx @@ -72,7 +72,7 @@ export const ShowExternalMariadbCredentials = ({ mariadbId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the external port"); + toast.error("Error saving the external port"); }); }; diff --git a/apps/dokploy/components/dashboard/mariadb/general/stop-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/general/stop-mariadb.tsx index 17eb4bcd..55dc1367 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/stop-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/stop-mariadb.tsx @@ -49,10 +49,10 @@ export const StopMariadb = ({ mariadbId }: Props) => { await utils.mariadb.one.invalidate({ mariadbId, }); - toast.success("Application stopped succesfully"); + toast.success("Application stopped successfully"); }) .catch(() => { - toast.error("Error to stop the Application"); + toast.error("Error stopping the Application"); }); }} > diff --git a/apps/dokploy/components/dashboard/mariadb/start-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/start-mariadb.tsx index dff62cec..4c62f0a0 100644 --- a/apps/dokploy/components/dashboard/mariadb/start-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/start-mariadb.tsx @@ -49,10 +49,10 @@ export const StartMariadb = ({ mariadbId }: Props) => { await utils.mariadb.one.invalidate({ mariadbId, }); - toast.success("Database started succesfully"); + toast.success("Database started successfully"); }) .catch(() => { - toast.error("Error to start the Database"); + toast.error("Error starting the Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx index 55b7e7e6..9b7c258e 100644 --- a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx @@ -75,13 +75,13 @@ export const UpdateMariadb = ({ mariadbId }: Props) => { description: formData.description || "", }) .then(() => { - toast.success("MariaDB updated succesfully"); + toast.success("MariaDB updated successfully"); utils.mariadb.one.invalidate({ mariadbId: mariadbId, }); }) .catch(() => { - toast.error("Error to update the Mariadb"); + toast.error("Error updating the Mariadb"); }) .finally(() => {}); }; diff --git a/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-advanced-settings.tsx b/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-advanced-settings.tsx index cbb178f3..d3a308f8 100644 --- a/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-advanced-settings.tsx +++ b/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-advanced-settings.tsx @@ -65,7 +65,7 @@ export const ShowAdvancedMongo = ({ mongoId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-resources.tsx b/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-resources.tsx index c18b54a8..f60b87f1 100644 --- a/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-resources.tsx +++ b/apps/dokploy/components/dashboard/mongo/advanced/show-mongo-resources.tsx @@ -71,7 +71,7 @@ export const ShowMongoResources = ({ mongoId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/mongo/backups/show-backup-mongo.tsx b/apps/dokploy/components/dashboard/mongo/backups/show-backup-mongo.tsx index 0f0478c5..bc1b4c61 100644 --- a/apps/dokploy/components/dashboard/mongo/backups/show-backup-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/backups/show-backup-mongo.tsx @@ -144,7 +144,7 @@ export const ShowBackupMongo = ({ mongoId }: Props) => { }) .catch(() => { toast.error( - "Error to Create the manual backup", + "Error creating the manual backup", ); }); }} diff --git a/apps/dokploy/components/dashboard/mongo/environment/show-mongo-environment.tsx b/apps/dokploy/components/dashboard/mongo/environment/show-mongo-environment.tsx index 76796796..0aab9c8d 100644 --- a/apps/dokploy/components/dashboard/mongo/environment/show-mongo-environment.tsx +++ b/apps/dokploy/components/dashboard/mongo/environment/show-mongo-environment.tsx @@ -70,7 +70,7 @@ export const ShowMongoEnvironment = ({ mongoId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to add environment"); + toast.error("Error adding environment"); }); }; diff --git a/apps/dokploy/components/dashboard/mongo/general/deploy-mongo.tsx b/apps/dokploy/components/dashboard/mongo/general/deploy-mongo.tsx index 0ebda1ca..61f7e5d2 100644 --- a/apps/dokploy/components/dashboard/mongo/general/deploy-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/deploy-mongo.tsx @@ -55,12 +55,12 @@ export const DeployMongo = ({ mongoId }: Props) => { await deploy({ mongoId, }).catch(() => { - toast.error("Error to deploy Database"); + toast.error("Error deploying Database"); }); await refetch(); }) .catch((e) => { - toast.error(e.message || "Error to deploy Database"); + toast.error(e.message || "Error deploying Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/mongo/general/reset-mongo.tsx b/apps/dokploy/components/dashboard/mongo/general/reset-mongo.tsx index 19388bb7..1c297799 100644 --- a/apps/dokploy/components/dashboard/mongo/general/reset-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/reset-mongo.tsx @@ -55,7 +55,7 @@ export const ResetMongo = ({ mongoId, appName }: Props) => { toast.success("Service Reloaded"); }) .catch(() => { - toast.error("Error to reload the service"); + toast.error("Error reloading the service"); }); await refetch(); }} diff --git a/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx b/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx index 7cfab289..6dd2e919 100644 --- a/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx @@ -72,7 +72,7 @@ export const ShowExternalMongoCredentials = ({ mongoId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the external port"); + toast.error("Error saving the external port"); }); }; diff --git a/apps/dokploy/components/dashboard/mongo/general/stop-mongo.tsx b/apps/dokploy/components/dashboard/mongo/general/stop-mongo.tsx index 09d2c372..f146145f 100644 --- a/apps/dokploy/components/dashboard/mongo/general/stop-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/stop-mongo.tsx @@ -49,10 +49,10 @@ export const StopMongo = ({ mongoId }: Props) => { await utils.mongo.one.invalidate({ mongoId, }); - toast.success("Application stopped succesfully"); + toast.success("Application stopped successfully"); }) .catch(() => { - toast.error("Error to stop the Application"); + toast.error("Error stopping the Application"); }); }} > diff --git a/apps/dokploy/components/dashboard/mongo/start-mongo.tsx b/apps/dokploy/components/dashboard/mongo/start-mongo.tsx index 3bc30862..56675cb3 100644 --- a/apps/dokploy/components/dashboard/mongo/start-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/start-mongo.tsx @@ -49,10 +49,10 @@ export const StartMongo = ({ mongoId }: Props) => { await utils.mongo.one.invalidate({ mongoId, }); - toast.success("Database started succesfully"); + toast.success("Database started successfully"); }) .catch(() => { - toast.error("Error to start the Database"); + toast.error("Error starting the Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/mongo/update-mongo.tsx b/apps/dokploy/components/dashboard/mongo/update-mongo.tsx index fdfd2639..95ff9e3e 100644 --- a/apps/dokploy/components/dashboard/mongo/update-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/update-mongo.tsx @@ -76,14 +76,14 @@ export const UpdateMongo = ({ mongoId }: Props) => { description: formData.description || "", }) .then(() => { - toast.success("Mongo updated succesfully"); + toast.success("Mongo updated successfully"); utils.mongo.one.invalidate({ mongoId: mongoId, }); setIsOpen(false); }) .catch(() => { - toast.error("Error to update mongo database"); + toast.error("Error updating mongo database"); }) .finally(() => {}); }; diff --git a/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-advanced-settings.tsx b/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-advanced-settings.tsx index 82198a0c..02256967 100644 --- a/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-advanced-settings.tsx +++ b/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-advanced-settings.tsx @@ -65,7 +65,7 @@ export const ShowAdvancedMysql = ({ mysqlId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-resources.tsx b/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-resources.tsx index 07ceeae9..2f5a36b5 100644 --- a/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-resources.tsx +++ b/apps/dokploy/components/dashboard/mysql/advanced/show-mysql-resources.tsx @@ -71,7 +71,7 @@ export const ShowMysqlResources = ({ mysqlId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/mysql/backups/show-backup-mysql.tsx b/apps/dokploy/components/dashboard/mysql/backups/show-backup-mysql.tsx index a760fd92..de443c68 100644 --- a/apps/dokploy/components/dashboard/mysql/backups/show-backup-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/backups/show-backup-mysql.tsx @@ -144,7 +144,7 @@ export const ShowBackupMySql = ({ mysqlId }: Props) => { }) .catch(() => { toast.error( - "Error to Create the manual backup", + "Error creating the manual backup", ); }); }} diff --git a/apps/dokploy/components/dashboard/mysql/environment/show-mysql-environment.tsx b/apps/dokploy/components/dashboard/mysql/environment/show-mysql-environment.tsx index 036a63ab..7dfa6aed 100644 --- a/apps/dokploy/components/dashboard/mysql/environment/show-mysql-environment.tsx +++ b/apps/dokploy/components/dashboard/mysql/environment/show-mysql-environment.tsx @@ -70,7 +70,7 @@ export const ShowMysqlEnvironment = ({ mysqlId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to add environment"); + toast.error("Error adding environment"); }); }; diff --git a/apps/dokploy/components/dashboard/mysql/general/deploy-mysql.tsx b/apps/dokploy/components/dashboard/mysql/general/deploy-mysql.tsx index a773feff..c56c20d5 100644 --- a/apps/dokploy/components/dashboard/mysql/general/deploy-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/deploy-mysql.tsx @@ -55,12 +55,12 @@ export const DeployMysql = ({ mysqlId }: Props) => { await deploy({ mysqlId, }).catch(() => { - toast.error("Error to deploy Database"); + toast.error("Error deploying Database"); }); await refetch(); }) .catch((e) => { - toast.error(e.message || "Error to deploy Database"); + toast.error(e.message || "Error deploying Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/mysql/general/reset-mysql.tsx b/apps/dokploy/components/dashboard/mysql/general/reset-mysql.tsx index 8b64ca9a..5e989671 100644 --- a/apps/dokploy/components/dashboard/mysql/general/reset-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/reset-mysql.tsx @@ -55,7 +55,7 @@ export const ResetMysql = ({ mysqlId, appName }: Props) => { toast.success("Service Reloaded"); }) .catch(() => { - toast.error("Error to reload the service"); + toast.error("Error reloading the service"); }); await refetch(); }} diff --git a/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx b/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx index 009c8c3a..dc1ca3a7 100644 --- a/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx @@ -72,7 +72,7 @@ export const ShowExternalMysqlCredentials = ({ mysqlId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the external port"); + toast.error("Error saving the external port"); }); }; diff --git a/apps/dokploy/components/dashboard/mysql/general/stop-mysql.tsx b/apps/dokploy/components/dashboard/mysql/general/stop-mysql.tsx index 3cb0d681..31d4c0f6 100644 --- a/apps/dokploy/components/dashboard/mysql/general/stop-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/stop-mysql.tsx @@ -49,10 +49,10 @@ export const StopMysql = ({ mysqlId }: Props) => { await utils.mysql.one.invalidate({ mysqlId, }); - toast.success("Application stopped succesfully"); + toast.success("MySQL stopped successfully"); }) .catch(() => { - toast.error("Error to stop the Application"); + toast.error("Error stopping MySQL"); }); }} > diff --git a/apps/dokploy/components/dashboard/mysql/start-mysql.tsx b/apps/dokploy/components/dashboard/mysql/start-mysql.tsx index 60ebc08b..dcf4db22 100644 --- a/apps/dokploy/components/dashboard/mysql/start-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/start-mysql.tsx @@ -49,10 +49,10 @@ export const StartMysql = ({ mysqlId }: Props) => { await utils.mysql.one.invalidate({ mysqlId, }); - toast.success("Database started succesfully"); + toast.success("Database started successfully"); }) .catch(() => { - toast.error("Error to start the Database"); + toast.error("Error starting the Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/mysql/update-mysql.tsx b/apps/dokploy/components/dashboard/mysql/update-mysql.tsx index 37b71b6c..5c1af50c 100644 --- a/apps/dokploy/components/dashboard/mysql/update-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/update-mysql.tsx @@ -75,13 +75,13 @@ export const UpdateMysql = ({ mysqlId }: Props) => { description: formData.description || "", }) .then(() => { - toast.success("MySQL updated succesfully"); + toast.success("MySQL updated successfully"); utils.mysql.one.invalidate({ mysqlId: mysqlId, }); }) .catch(() => { - toast.error("Error to update the MySQL"); + toast.error("Error updating MySQL"); }) .finally(() => {}); }; diff --git a/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-advanced-settings.tsx b/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-advanced-settings.tsx index c8002fa2..d3ad7213 100644 --- a/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-advanced-settings.tsx +++ b/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-advanced-settings.tsx @@ -65,7 +65,7 @@ export const ShowAdvancedPostgres = ({ postgresId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-resources.tsx b/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-resources.tsx index 7f224ee2..4bf14788 100644 --- a/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-resources.tsx +++ b/apps/dokploy/components/dashboard/postgres/advanced/show-postgres-resources.tsx @@ -71,7 +71,7 @@ export const ShowPostgresResources = ({ postgresId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to Update the resources"); + toast.error("Error updating the resources"); }); }; return ( diff --git a/apps/dokploy/components/dashboard/postgres/backups/show-backup-postgres.tsx b/apps/dokploy/components/dashboard/postgres/backups/show-backup-postgres.tsx index c5a36a6a..dad55d1e 100644 --- a/apps/dokploy/components/dashboard/postgres/backups/show-backup-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/backups/show-backup-postgres.tsx @@ -145,7 +145,7 @@ export const ShowBackupPostgres = ({ postgresId }: Props) => { }) .catch(() => { toast.error( - "Error to Create the manual backup", + "Error creating the manual backup", ); }); }} diff --git a/apps/dokploy/components/dashboard/postgres/environment/show-postgres-environment.tsx b/apps/dokploy/components/dashboard/postgres/environment/show-postgres-environment.tsx index b6677695..c2361831 100644 --- a/apps/dokploy/components/dashboard/postgres/environment/show-postgres-environment.tsx +++ b/apps/dokploy/components/dashboard/postgres/environment/show-postgres-environment.tsx @@ -70,7 +70,7 @@ export const ShowPostgresEnvironment = ({ postgresId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to add environment"); + toast.error("Error adding environment"); }); }; diff --git a/apps/dokploy/components/dashboard/postgres/general/deploy-postgres.tsx b/apps/dokploy/components/dashboard/postgres/general/deploy-postgres.tsx index e329d9f8..1d78d17e 100644 --- a/apps/dokploy/components/dashboard/postgres/general/deploy-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/deploy-postgres.tsx @@ -55,12 +55,12 @@ export const DeployPostgres = ({ postgresId }: Props) => { await deploy({ postgresId, }).catch(() => { - toast.error("Error to deploy Database"); + toast.error("Error deploying Database"); }); await refetch(); }) .catch((e) => { - toast.error(e.message || "Error to deploy Database"); + toast.error(e.message || "Error deploying Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/postgres/general/reset-postgres.tsx b/apps/dokploy/components/dashboard/postgres/general/reset-postgres.tsx index 359c2b77..51108f93 100644 --- a/apps/dokploy/components/dashboard/postgres/general/reset-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/reset-postgres.tsx @@ -55,7 +55,7 @@ export const ResetPostgres = ({ postgresId, appName }: Props) => { toast.success("Service Reloaded"); }) .catch(() => { - toast.error("Error to reload the service"); + toast.error("Error reloading the service"); }); await refetch(); }} diff --git a/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx b/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx index e1b4369a..e8fff7dc 100644 --- a/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx @@ -74,7 +74,7 @@ export const ShowExternalPostgresCredentials = ({ postgresId }: Props) => { await refetch(); }) .catch(() => { - toast.error("Error to save the external port"); + toast.error("Error saving the external port"); }); }; diff --git a/apps/dokploy/components/dashboard/postgres/general/stop-postgres.tsx b/apps/dokploy/components/dashboard/postgres/general/stop-postgres.tsx index 9bf1738f..6e2b4557 100644 --- a/apps/dokploy/components/dashboard/postgres/general/stop-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/stop-postgres.tsx @@ -49,10 +49,10 @@ export const StopPostgres = ({ postgresId }: Props) => { await utils.postgres.one.invalidate({ postgresId, }); - toast.success("Application stopped succesfully"); + toast.success("Postgres stopped successfully"); }) .catch(() => { - toast.error("Error to stop the Application"); + toast.error("Error stopping Postgres"); }); }} > diff --git a/apps/dokploy/components/dashboard/postgres/start-postgres.tsx b/apps/dokploy/components/dashboard/postgres/start-postgres.tsx index 8d945082..4b1c7475 100644 --- a/apps/dokploy/components/dashboard/postgres/start-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/start-postgres.tsx @@ -49,10 +49,10 @@ export const StartPostgres = ({ postgresId }: Props) => { await utils.postgres.one.invalidate({ postgresId, }); - toast.success("Database started succesfully"); + toast.success("Database started successfully"); }) .catch(() => { - toast.error("Error to start the Database"); + toast.error("Error starting the Database"); }); }} > diff --git a/apps/dokploy/components/dashboard/postgres/update-postgres.tsx b/apps/dokploy/components/dashboard/postgres/update-postgres.tsx index dcc3e9b1..566fd1d6 100644 --- a/apps/dokploy/components/dashboard/postgres/update-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/update-postgres.tsx @@ -76,14 +76,14 @@ export const UpdatePostgres = ({ postgresId }: Props) => { description: formData.description || "", }) .then(() => { - toast.success("Postgres updated succesfully"); + toast.success("Postgres updated successfully"); utils.postgres.one.invalidate({ postgresId: postgresId, }); setIsOpen(false); }) .catch(() => { - toast.error("Error to update the postgres"); + toast.error("Error updating Postgres"); }) .finally(() => {}); }; diff --git a/apps/dokploy/components/dashboard/project/add-application.tsx b/apps/dokploy/components/dashboard/project/add-application.tsx index 6d9c5b40..2c30df8d 100644 --- a/apps/dokploy/components/dashboard/project/add-application.tsx +++ b/apps/dokploy/components/dashboard/project/add-application.tsx @@ -104,7 +104,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { }); }) .catch((e) => { - toast.error("Error to create the service"); + toast.error("Error creating the service"); }); }; @@ -176,7 +176,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { side="top" > - If not server is selected, the application will be + If no server is selected, the application will be deployed on the server where the user is logged in. @@ -229,7 +229,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { Description