diff --git a/src/client/App.tsx b/src/client/App.tsx index ef9055c..9cb77e4 100644 --- a/src/client/App.tsx +++ b/src/client/App.tsx @@ -24,6 +24,7 @@ import { RouterProvider, createRouter } from '@tanstack/react-router'; import { routeTree } from './routeTree.gen'; import { DefaultNotFound } from './components/DefaultNotFound'; import { TooltipProvider } from './components/ui/tooltip'; +import { Toaster } from './components/ui/sonner'; const router = createRouter({ routeTree, @@ -99,6 +100,8 @@ export const App: React.FC = React.memo(() => { + + ) : ( diff --git a/src/client/components/AlertConfirm.tsx b/src/client/components/AlertConfirm.tsx new file mode 100644 index 0000000..1727b15 --- /dev/null +++ b/src/client/components/AlertConfirm.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, + AlertDialogDescription, +} from './ui/alert-dialog'; +import { useTranslation } from '@i18next-toolkit/react'; +import { Button } from './ui/button'; + +interface AlertConfirmProps extends React.PropsWithChildren { + title?: string; + description?: string; + content?: React.ReactNode; + onCancel?: () => void; + onConfirm?: () => void | Promise; +} +export const AlertConfirm: React.FC = React.memo((props) => { + const { t } = useTranslation(); + + return ( + + {props.children} + + + + {props.title ?? t('Confirm action')} + + {props.description && ( + {props.description} + )} + + +
{props.content ?? t('Are you sure you want to do this?')}
+ + + + {t('Cancel')} + + + {t('Confirm')} + + +
+
+ ); +}); +AlertConfirm.displayName = 'AlertConfirm'; diff --git a/src/client/public/locales/de/translation.json b/src/client/public/locales/de/translation.json index 556c8a9..eb0ad18 100644 --- a/src/client/public/locales/de/translation.json +++ b/src/client/public/locales/de/translation.json @@ -7,6 +7,7 @@ "k11f09c87": "Ansichten", "k1286421": "Benutzername", "k134e0d97": "Aktuell", + "k139b5f9a": "Vistor Map", "k14c6c425": "Ergebnis", "k158336d6": "Anfrage-Timeout(s)", "k1598e726": "aktueller Besucher", @@ -30,7 +31,9 @@ "k2813d1f7": "Dieser Monat", "k2a6a7d8f": "UNTEN", "k2b2d40d4": "Testcode", + "k2b463d4b": "Are you sure you want to do this?", "k2c2712a4": "CPU", + "k2dad13e3": "Language", "k2e6dbf02": "An E-Mail", "k2ea8a019": "Monitor", "k30b5f01b": "Arbeitsbereiche", @@ -39,13 +42,19 @@ "k32344f64": "Daten löschen", "k3260f019": "Abmelden", "k3471e956": "Neues Passwort wiederholen", + "k3542f88c": "Telemetry name: {{name}} | events: {{num}}", + "k3834d1a6": "Add Page", "k389db675": "Einreichen", "k38c62888": "Bitte Monitor auswählen", "k3cedb797": "Sicherheit", + "k3d1822c5": "Confirm action", "k3d3baf52": "durchschnittliche Besuchszeit", "k3dbe79b1": "Löschen", "k3de768a1": "Passwort ändern", "k3e757ddf": "Hier gibt es noch keinen Monitor.", + "k3e8b13f8": "Join Discord", + "k3f36e17e": "Follow Twitter", + "k406e9ad8": "Confirm", "k42347b91": "Website-Ereigniszählung", "k42831fc1": "Telemetrie hinzufügen", "k43e21ee9": "Client-Reporter herunterladen", @@ -53,9 +62,11 @@ "k44cad477": "(Aktuell)", "k46f0adde": "Besucherkarte", "k47f43dbc": "Gesundheit von {{monitorName}}", + "k48186ce": "Back to Homepage", "k4905ed7b": "KEINE", "k490ada32": "Website hinzufügen", "k49e5f1d2": "1w", + "k4a369f75": "It will permanently delete the relevant data", "k4ac4dd36": "Verweisende Seiten", "k4de48e75": "Maximale Wiederholungen", "k4e08cf58": "Detailnummer anzeigen", @@ -66,6 +77,7 @@ "k51bac044": "Abbrechen", "k53ae02a5": "Neu", "k542b527c": "Ereignisse", + "k56b4c80c": "Theme", "k58267a45": "Quelle", "k58f90514": "Bot-Token", "k593cf342": "Sind Sie sicher, diesen Monitor zu löschen?", @@ -83,6 +95,7 @@ "k6acf5248": "Kürzlich", "k6b36580f": "Apprise-URL", "k6bc9e414": "Anmelden", + "k6ea11aff": "Get!", "k6f15bcc3": "Host", "k717660a5": "RAM", "k721589c1": "Heute", @@ -90,8 +103,10 @@ "k74a240": "Gesundheitsbalken", "k75581e13": "CC", "k75bfaaa6": "Fügen Sie diesen Code in das Kopf-Skript Ihrer Website ein", + "k763816ac": "Preview", "k784dd132": "Test", "k7927b824": "Sind Sie sicher, alle Offline-Knoten zu löschen?", + "k7a132ce8": "Sorry, but this page is not found", "k7ac44a6e": "Sitzungsschlüssel", "k7b74a43f": "Besucher", "k7c95e6a5": "Sind Sie sicher, diese Seite zu löschen?", @@ -105,6 +120,7 @@ "k85344b23": "Laden", "k85c5fd4c": "Noch kein Monitor eingerichtet", "k8746ec38": "Monitor auswählen", + "k887ae5cd": "Create", "k88a9bf01": "Abzeichen anzeigen", "k88d2647b": "Website", "k89056082": "(30 Tage)", @@ -122,6 +138,7 @@ "k951a939a": "Akzeptierte Zählung der Website", "k97ddb155": "Aktuelle Antwort anzeigen", "k98f433ee": "Reporter herunterladen von", + "k9991c290": "Community", "k9a272ecf": "Sind das Ihre Server?", "k9a3cc801": "Zeichen akzeptieren", "k9add1fac": "Verkehr", @@ -144,7 +161,9 @@ "ka9d081ac": "Überprüfungsintervall(s)", "kaa0788e9": "Layout erfolgreich gespeichert", "kaa0ccaab": "Von E-Mail", + "kaadb73f3": "Light", "kab56db46": "Herzschläge", + "kab662431": "Path", "kacbdae07": "Durchschn. Antwort", "kad9ea10d": "Bestätigen Sie das Löschen dieser Telemetrie: [{{name}}]", "kadef6c48": "Vorherige {{label}}", @@ -156,6 +175,7 @@ "kb659c1bc": "Zert. Ablauf", "kb8de8c50": "BCC", "kbb31d3db": "Statistikdatum", + "kbb4e12c5": "Dark", "kbb58c99c": "Erfolgreich gelöscht", "kbcf67f53": "Neues Passwort", "kbd1e7dee": "Nutzung: {{usage}}ms", @@ -182,10 +202,13 @@ "kccaa732a": "Keine aufeinanderfolgenden Bindestriche", "kccb42483": "Passwort", "kd031b383": "Ansichten", + "kd1f7e695": "Confirm to logout", "kd211e2d4": "Versionsseite", + "kd3262a4a": "Config", "kd3396544": "Allgemein werden wir ein ein Pixel großes leeres Bild verwenden, sodass es die normale Nutzung des Benutzers nicht beeinträchtigt.", "kd37efb26": "Benachrichtigungen", "kd46ab159": "Keine Ereignisse", + "kd7279fa6": "Code", "kd7985726": "{{num}} Benutzer", "kd92fa3e7": "Host-Name", "kdaa949e5": "Ereignisse von {{monitorName}}", @@ -203,12 +226,14 @@ "ke1b5ca71": "Seiten", "ke20a92c7": "Ressourceneintragstyp", "ke2fe505b": "Diese Woche", + "ke349bd66": "Confirm to delete this telemetry?", "ke3a3f2f2": "Port", "ke46232fe": "Server hinzufügen", "ke5b015e9": "Sie können einen Token von https://t.me/BotFather erhalten.", "ke6797c65": "Sie können Ihre Chat-ID erhalten, indem Sie eine Nachricht an den Bot senden und diese URL besuchen, um die chat_id zu sehen", "ke9d2fef3": "Dieser Monat", "ke9dcaa64": "Keine Benachrichtigung gefunden", + "kea954889": "Continue", "keaf7576f": "Titel", "ked37937b": "Metriken", "ked7eea1a": "OBEN", @@ -216,6 +241,7 @@ "kedc69eb6": "Tracking-Code", "kef701e50": "Monitor hinzufügen", "kefe27782": "Telemetrie ist eine Technologie, die Zugriffsdaten auch auf Seiten meldet, die nicht unter Ihrer Kontrolle stehen. Solange die andere Website die Einfügung von Drittanbieterbildern erlaubt (z.B. Foren, Blogs und verschiedene Rich-Text-Editoren), können die Daten gesammelt und verwendet werden, um die Bilder zu analysieren, wenn sie vom Benutzer geladen werden.", + "kf19c917a": "Not any website has been exist", "kf1d60bfc": "Warten auf den Empfang des Berichtspakets", "kf22813ad": "Benutzerdefiniert", "kf3b749ef": "Unterstützt Direktchat / Gruppe / Kanal-Chat-ID", @@ -223,7 +249,9 @@ "kf5bbb568": "Besucherkarte von", "kf6bc1610": "Monitortyp", "kf6db9ea5": "3h", + "kf7878d19": "Website Overview", "kf7d5dbf8": "Mehr lesen", + "kf8a5d26d": "Add Website Now", "kf97b6f71": "Führen Sie diesen Befehl auf Ihrer Linux-Maschine aus", "kf9877f28": "Details anzeigen", "kfc98929b": "{{num}} Tage", diff --git a/src/client/public/locales/en/translation.json b/src/client/public/locales/en/translation.json index 5424353..bfbb270 100644 --- a/src/client/public/locales/en/translation.json +++ b/src/client/public/locales/en/translation.json @@ -7,6 +7,7 @@ "k11f09c87": "views", "k1286421": "Username", "k134e0d97": "Current", + "k139b5f9a": "Vistor Map", "k14c6c425": "Result", "k158336d6": "Request Timeout(s)", "k1598e726": "current visitor", @@ -30,7 +31,9 @@ "k2813d1f7": "This Month", "k2a6a7d8f": "DOWN", "k2b2d40d4": "Test Code", + "k2b463d4b": "Are you sure you want to do this?", "k2c2712a4": "CPU", + "k2dad13e3": "Language", "k2e6dbf02": "To Email", "k2ea8a019": "Monitor", "k30b5f01b": "Workspaces", @@ -39,13 +42,19 @@ "k32344f64": "Clear Data", "k3260f019": "Logout", "k3471e956": "New Password Repeat", + "k3542f88c": "Telemetry name: {{name}} | events: {{num}}", + "k3834d1a6": "Add Page", "k389db675": "Submit", "k38c62888": "Please select monitor", "k3cedb797": "Security", + "k3d1822c5": "Confirm action", "k3d3baf52": "average visit time", "k3dbe79b1": "Delete", "k3de768a1": "Change password", "k3e757ddf": "Here is no monitor yet.", + "k3e8b13f8": "Join Discord", + "k3f36e17e": "Follow Twitter", + "k406e9ad8": "Confirm", "k42347b91": "Website Event Count", "k42831fc1": "Add Telemetry", "k43e21ee9": "Download Client Reportor", @@ -53,9 +62,11 @@ "k44cad477": "(Current)", "k46f0adde": "Visitor Map", "k47f43dbc": "{{monitorName}}'s Health", + "k48186ce": "Back to Homepage", "k4905ed7b": "NONE", "k490ada32": "Add Website", "k49e5f1d2": "1w", + "k4a369f75": "It will permanently delete the relevant data", "k4ac4dd36": "Referrers", "k4de48e75": "Max Retries", "k4e08cf58": "Show Detail Number", @@ -66,6 +77,7 @@ "k51bac044": "Cancel", "k53ae02a5": "New", "k542b527c": "Events", + "k56b4c80c": "Theme", "k58267a45": "Source", "k58f90514": "Bot Token", "k593cf342": "Did you sure delete this monitor?", @@ -83,6 +95,7 @@ "k6acf5248": "Recent", "k6b36580f": "Apprise URL", "k6bc9e414": "Login", + "k6ea11aff": "Get!", "k6f15bcc3": "Host", "k717660a5": "RAM", "k721589c1": "Today", @@ -90,8 +103,10 @@ "k74a240": "Health Bar", "k75581e13": "CC", "k75bfaaa6": "Add this code into your website head script", + "k763816ac": "Preview", "k784dd132": "Test", "k7927b824": "Are you sure to clear all offline node?", + "k7a132ce8": "Sorry, but this page is not found", "k7ac44a6e": "Session Key", "k7b74a43f": "visitors", "k7c95e6a5": "Did you sure delete this page?", @@ -105,6 +120,7 @@ "k85344b23": "Load", "k85c5fd4c": "No any monitor has been set", "k8746ec38": "Select monitor", + "k887ae5cd": "Create", "k88a9bf01": "Show Badge", "k88d2647b": "Website", "k89056082": "(30 days)", @@ -122,6 +138,7 @@ "k951a939a": "Website Accepted Count", "k97ddb155": "Show Current Response", "k98f433ee": "Download reporter from", + "k9991c290": "Community", "k9a272ecf": "Is this your servers?", "k9a3cc801": "Accept characters", "k9add1fac": "Traffic", @@ -144,7 +161,9 @@ "ka9d081ac": "Check Interval(s)", "kaa0788e9": "Layout saved success", "kaa0ccaab": "From Email", + "kaadb73f3": "Light", "kab56db46": "Heartbeats", + "kab662431": "Path", "kacbdae07": "Avg. Response", "kad9ea10d": "Confirm to delete this telemetry: [{{name}}]", "kadef6c48": "Previous {{label}}", @@ -156,6 +175,7 @@ "kb659c1bc": "Cert Exp.", "kb8de8c50": "BCC", "kbb31d3db": "Statistic Date", + "kbb4e12c5": "Dark", "kbb58c99c": "Delete Success", "kbcf67f53": "New Password", "kbd1e7dee": "Usage: {{usage}}ms", @@ -182,10 +202,13 @@ "kccaa732a": "No consecutive dashes", "kccb42483": "Password", "kd031b383": "Views", + "kd1f7e695": "Confirm to logout", "kd211e2d4": "Releases Page", + "kd3262a4a": "Config", "kd3396544": "Generally, we will use a one-pixel blank image so that it will not affect the user's normal use.", "kd37efb26": "Notifications", "kd46ab159": "No events", + "kd7279fa6": "Code", "kd7985726": "{{num}} users", "kd92fa3e7": "Host Name", "kdaa949e5": "{{monitorName}}'s Events", @@ -203,12 +226,14 @@ "ke1b5ca71": "Pages", "ke20a92c7": "Resouce Record Type", "ke2fe505b": "This week", + "ke349bd66": "Confirm to delete this telemetry?", "ke3a3f2f2": "Port", "ke46232fe": "Add Server", "ke5b015e9": "You can get a token from https://t.me/BotFather.", "ke6797c65": "You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id", "ke9d2fef3": "This month", "ke9dcaa64": "Not found any notification", + "kea954889": "Continue", "keaf7576f": "Title", "ked37937b": "Metrics", "ked7eea1a": "UP", @@ -216,6 +241,7 @@ "kedc69eb6": "Tracking code", "kef701e50": "Add Monitor", "kefe27782": "Telemetry is a technology that reports access data even on pages that are not under your control. As long as the other website allows the insertion of third-party images (e.g., forums, blogs, and various rich-text editors), then the data can be collected and used to analyze the images when they are loaded by the user.", + "kf19c917a": "Not any website has been exist", "kf1d60bfc": "Waiting for receive report pack", "kf22813ad": "Custom", "kf3b749ef": "Support Direct Chat / Group / Channel's Chat ID", @@ -223,7 +249,9 @@ "kf5bbb568": "'s visitor map", "kf6bc1610": "Monitor Type", "kf6db9ea5": "3h", + "kf7878d19": "Website Overview", "kf7d5dbf8": "Read more", + "kf8a5d26d": "Add Website Now", "kf97b6f71": "Run this command in your linux machine", "kf9877f28": "View Details", "kfc98929b": "{{num}} days", diff --git a/src/client/public/locales/fr/translation.json b/src/client/public/locales/fr/translation.json index 4ab161a..9bbcd9b 100644 --- a/src/client/public/locales/fr/translation.json +++ b/src/client/public/locales/fr/translation.json @@ -7,6 +7,7 @@ "k11f09c87": "vues", "k1286421": "Nom d'utilisateur", "k134e0d97": "Actuel", + "k139b5f9a": "Vistor Map", "k14c6c425": "Résultat", "k158336d6": "Délai d'attente de la requête (s)", "k1598e726": "visiteur actuel", @@ -30,7 +31,9 @@ "k2813d1f7": "Ce mois-ci", "k2a6a7d8f": "HORS LIGNE", "k2b2d40d4": "Code de test", + "k2b463d4b": "Are you sure you want to do this?", "k2c2712a4": "UC", + "k2dad13e3": "Language", "k2e6dbf02": "À l'email", "k2ea8a019": "Moniteur", "k30b5f01b": "Espaces de travail", @@ -39,13 +42,19 @@ "k32344f64": "Effacer les données", "k3260f019": "Déconnexion", "k3471e956": "Répéter le nouveau mot de passe", + "k3542f88c": "Telemetry name: {{name}} | events: {{num}}", + "k3834d1a6": "Add Page", "k389db675": "Soumettre", "k38c62888": "Veuillez sélectionner un moniteur", "k3cedb797": "Sécurité", + "k3d1822c5": "Confirm action", "k3d3baf52": "temps moyen de visite", "k3dbe79b1": "Supprimer", "k3de768a1": "Changer le mot de passe", "k3e757ddf": "Il n'y a pas encore de moniteur ici.", + "k3e8b13f8": "Join Discord", + "k3f36e17e": "Follow Twitter", + "k406e9ad8": "Confirm", "k42347b91": "Nombre d'événements sur le site Web", "k42831fc1": "Ajouter la télémétrie", "k43e21ee9": "Télécharger le rapporteur client", @@ -53,9 +62,11 @@ "k44cad477": "(Actuel)", "k46f0adde": "Carte des visiteurs", "k47f43dbc": "Santé de {{monitorName}}", + "k48186ce": "Back to Homepage", "k4905ed7b": "AUCUN", "k490ada32": "Ajouter un site Web", "k49e5f1d2": "1s", + "k4a369f75": "It will permanently delete the relevant data", "k4ac4dd36": "Référents", "k4de48e75": "Nombre maximum de tentatives", "k4e08cf58": "Afficher le numéro de détail", @@ -66,6 +77,7 @@ "k51bac044": "Annuler", "k53ae02a5": "Nouveau", "k542b527c": "Événements", + "k56b4c80c": "Theme", "k58267a45": "Source", "k58f90514": "Jeton de bot", "k593cf342": "Êtes-vous sûr de vouloir supprimer ce moniteur ?", @@ -83,6 +95,7 @@ "k6acf5248": "Récent", "k6b36580f": "URL Apprise", "k6bc9e414": "Connexion", + "k6ea11aff": "Get!", "k6f15bcc3": "Hôte", "k717660a5": "RAM", "k721589c1": "Aujourd'hui", @@ -90,8 +103,10 @@ "k74a240": "Barre de santé", "k75581e13": "CC", "k75bfaaa6": "Ajoutez ce code dans le script de tête de votre site web", + "k763816ac": "Preview", "k784dd132": "Test", "k7927b824": "Êtes-vous sûr de vouloir effacer tous les nœuds hors ligne ?", + "k7a132ce8": "Sorry, but this page is not found", "k7ac44a6e": "Clé de session", "k7b74a43f": "visiteurs", "k7c95e6a5": "Êtes-vous sûr de vouloir supprimer cette page ?", @@ -105,6 +120,7 @@ "k85344b23": "Charge", "k85c5fd4c": "Aucun moniteur n'a été défini", "k8746ec38": "Sélectionner un moniteur", + "k887ae5cd": "Create", "k88a9bf01": "Afficher le badge", "k88d2647b": "Site Web", "k89056082": "(30 jours)", @@ -122,6 +138,7 @@ "k951a939a": "Compte accepté par le site Web", "k97ddb155": "Afficher la réponse actuelle", "k98f433ee": "Télécharger le rapporteur de", + "k9991c290": "Community", "k9a272ecf": "S'agit-il de vos serveurs ?", "k9a3cc801": "Accepter les caractères", "k9add1fac": "Trafic", @@ -144,7 +161,9 @@ "ka9d081ac": "Intervalle de vérification (s)", "kaa0788e9": "Disposition enregistrée avec succès", "kaa0ccaab": "De l'email", + "kaadb73f3": "Light", "kab56db46": "Battrements de cœur", + "kab662431": "Path", "kacbdae07": "Réponse moyenne", "kad9ea10d": "Confirmer la suppression de cette télémétrie : [{{name}}]", "kadef6c48": "Précédent {{label}}", @@ -156,6 +175,7 @@ "kb659c1bc": "Expiration du cert.", "kb8de8c50": "CCI", "kbb31d3db": "Date de statistique", + "kbb4e12c5": "Dark", "kbb58c99c": "Suppression réussie", "kbcf67f53": "Nouveau mot de passe", "kbd1e7dee": "Utilisation : {{usage}}ms", @@ -182,10 +202,13 @@ "kccaa732a": "Pas de tirets consécutifs", "kccb42483": "Mot de passe", "kd031b383": "Vues", + "kd1f7e695": "Confirm to logout", "kd211e2d4": "Page des versions", + "kd3262a4a": "Config", "kd3396544": "Généralement, nous utiliserons une image vide d'un pixel de sorte qu'elle n'affecte pas l'utilisation normale de l'utilisateur.", "kd37efb26": "Notifications", "kd46ab159": "Aucun événement", + "kd7279fa6": "Code", "kd7985726": "{{num}} utilisateurs", "kd92fa3e7": "Nom de l'hôte", "kdaa949e5": "Événements de {{monitorName}}", @@ -203,12 +226,14 @@ "ke1b5ca71": "Pages", "ke20a92c7": "Type d'enregistrement de ressource", "ke2fe505b": "Cette semaine", + "ke349bd66": "Confirm to delete this telemetry?", "ke3a3f2f2": "Port", "ke46232fe": "Ajouter un serveur", "ke5b015e9": "Vous pouvez obtenir un jeton de https://t.me/BotFather.", "ke6797c65": "Vous pouvez obtenir votre ID de chat en envoyant un message au bot et en allant à cette URL pour voir le chat_id", "ke9d2fef3": "Ce mois-ci", "ke9dcaa64": "Aucune notification trouvée", + "kea954889": "Continue", "keaf7576f": "Titre", "ked37937b": "Métriques", "ked7eea1a": "EN LIGNE", @@ -216,6 +241,7 @@ "kedc69eb6": "Code de suivi", "kef701e50": "Ajouter un moniteur", "kefe27782": "La télémétrie est une technologie qui rapporte les données d'accès même sur des pages qui ne sont pas sous votre contrôle. Tant que l'autre site Web autorise l'insertion d'images tierces (par exemple, forums, blogs et divers éditeurs de texte enrichi), les données peuvent être collectées et utilisées pour analyser les images lorsqu'elles sont chargées par l'utilisateur.", + "kf19c917a": "Not any website has been exist", "kf1d60bfc": "En attente de recevoir le pack de rapport", "kf22813ad": "Personnalisé", "kf3b749ef": "Prend en charge le chat direct / groupe / ID de chat de canal", @@ -223,7 +249,9 @@ "kf5bbb568": "carte des visiteurs de", "kf6bc1610": "Type de moniteur", "kf6db9ea5": "3h", + "kf7878d19": "Website Overview", "kf7d5dbf8": "En savoir plus", + "kf8a5d26d": "Add Website Now", "kf97b6f71": "Exécutez cette commande sur votre machine Linux", "kf9877f28": "Voir les détails", "kfc98929b": "{{num}} jours", diff --git a/src/client/public/locales/jp/translation.json b/src/client/public/locales/jp/translation.json index b33f2f8..66b8f5d 100644 --- a/src/client/public/locales/jp/translation.json +++ b/src/client/public/locales/jp/translation.json @@ -7,6 +7,7 @@ "k11f09c87": "ビュー", "k1286421": "ユーザー名", "k134e0d97": "現在", + "k139b5f9a": "Vistor Map", "k14c6c425": "結果", "k158336d6": "リクエストタイムアウト(秒)", "k1598e726": "現在の訪問者", @@ -30,7 +31,9 @@ "k2813d1f7": "今月", "k2a6a7d8f": "ダウン", "k2b2d40d4": "テストコード", + "k2b463d4b": "Are you sure you want to do this?", "k2c2712a4": "CPU", + "k2dad13e3": "Language", "k2e6dbf02": "メールアドレスへ", "k2ea8a019": "モニター", "k30b5f01b": "ワークスペース", @@ -39,13 +42,19 @@ "k32344f64": "データクリア", "k3260f019": "ログアウト", "k3471e956": "新しいパスワードの再入力", + "k3542f88c": "Telemetry name: {{name}} | events: {{num}}", + "k3834d1a6": "Add Page", "k389db675": "送信", "k38c62888": "モニターを選択してください", "k3cedb797": "セキュリティ", + "k3d1822c5": "Confirm action", "k3d3baf52": "平均訪問時間", "k3dbe79b1": "削除", "k3de768a1": "パスワードを変更", "k3e757ddf": "モニターがまだありません。", + "k3e8b13f8": "Join Discord", + "k3f36e17e": "Follow Twitter", + "k406e9ad8": "Confirm", "k42347b91": "ウェブサイトイベント数", "k42831fc1": "テレメトリーを追加", "k43e21ee9": "クライアントレポーターをダウンロード", @@ -53,9 +62,11 @@ "k44cad477": "(現在)", "k46f0adde": "訪問者マップ", "k47f43dbc": "{{monitorName}}の健康状態", + "k48186ce": "Back to Homepage", "k4905ed7b": "なし", "k490ada32": "ウェブサイトを追加", "k49e5f1d2": "1週間", + "k4a369f75": "It will permanently delete the relevant data", "k4ac4dd36": "リファラー", "k4de48e75": "最大リトライ回数", "k4e08cf58": "詳細番号を表示", @@ -66,6 +77,7 @@ "k51bac044": "キャンセル", "k53ae02a5": "新規", "k542b527c": "イベント", + "k56b4c80c": "Theme", "k58267a45": "ソース", "k58f90514": "ボットトークン", "k593cf342": "このモニターを削除してもよろしいですか?", @@ -83,6 +95,7 @@ "k6acf5248": "最近", "k6b36580f": "通知する URL", "k6bc9e414": "ログイン", + "k6ea11aff": "Get!", "k6f15bcc3": "ホスト", "k717660a5": "RAM", "k721589c1": "今日", @@ -90,8 +103,10 @@ "k74a240": "ヘルスバー", "k75581e13": "CC", "k75bfaaa6": "このコードをウェブサイトのヘッドスクリプトに追加してください", + "k763816ac": "Preview", "k784dd132": "テスト", "k7927b824": "すべてのオフラインノードをクリアしてもよろしいですか?", + "k7a132ce8": "Sorry, but this page is not found", "k7ac44a6e": "セッションキー", "k7b74a43f": "訪問者", "k7c95e6a5": "このページを削除してもよろしいですか?", @@ -105,6 +120,7 @@ "k85344b23": "ロード", "k85c5fd4c": "まだモニターが設定されていません", "k8746ec38": "モニターを選択", + "k887ae5cd": "Create", "k88a9bf01": "バッジを表示", "k88d2647b": "ウェブサイト", "k89056082": "(30日間)", @@ -122,6 +138,7 @@ "k951a939a": "ウェブサイト承認カウント", "k97ddb155": "現在の応答を表示", "k98f433ee": "からレポーターをダウンロード", + "k9991c290": "Community", "k9a272ecf": "これはあなたのサーバーですか?", "k9a3cc801": "文字を受け入れる", "k9add1fac": "トラフィック", @@ -144,7 +161,9 @@ "ka9d081ac": "チェック間隔(秒)", "kaa0788e9": "レイアウトが正常に保存されました", "kaa0ccaab": "送信者メール", + "kaadb73f3": "Light", "kab56db46": "ハートビート", + "kab662431": "Path", "kacbdae07": "平均応答", "kad9ea10d": "このテレメトリを削除しますか?:[{{name}}]", "kadef6c48": "前の{{label}}", @@ -156,6 +175,7 @@ "kb659c1bc": "証明書の有効期限", "kb8de8c50": "BCC", "kbb31d3db": "統計日", + "kbb4e12c5": "Dark", "kbb58c99c": "削除に成功しました", "kbcf67f53": "新しいパスワード", "kbd1e7dee": "使用量:{{usage}}ms", @@ -182,10 +202,13 @@ "kccaa732a": "連続ダッシュなし", "kccb42483": "パスワード", "kd031b383": "ビュー", + "kd1f7e695": "Confirm to logout", "kd211e2d4": "リリースページ", + "kd3262a4a": "Config", "kd3396544": "一般的に、ユーザーの通常の使用に影響を与えないように、1ピクセルの空白画像を使用します。", "kd37efb26": "通知", "kd46ab159": "イベントなし", + "kd7279fa6": "Code", "kd7985726": "{{num}}人のユーザー", "kd92fa3e7": "ホスト名", "kdaa949e5": "{{monitorName}}のイベント", @@ -203,12 +226,14 @@ "ke1b5ca71": "ページ", "ke20a92c7": "リソースレコードタイプ", "ke2fe505b": "今週", + "ke349bd66": "Confirm to delete this telemetry?", "ke3a3f2f2": "ポート", "ke46232fe": "サーバーを追加", "ke5b015e9": "https://t.me/BotFather でトークンを取得できます。", "ke6797c65": "ボットにメッセージを送り、このURLにアクセスしてchat_idを表示することで、チャットIDを取得できます", "ke9d2fef3": "今月", "ke9dcaa64": "通知は見つかりませんでした", + "kea954889": "Continue", "keaf7576f": "タイトル", "ked37937b": "メトリクス", "ked7eea1a": "アップ", @@ -216,6 +241,7 @@ "kedc69eb6": "トラッキングコード", "kef701e50": "モニターを追加", "kefe27782": "テレメトリーは、コントロール下にないページでもアクセスデータを報告する技術です。他のウェブサイトがサードパーティの画像の挿入を許可している限り(例えば、フォーラム、ブログ、様々なリッチテキストエディター)、ユーザーが画像をロードした際にデータを収集し、分析することができます。", + "kf19c917a": "Not any website has been exist", "kf1d60bfc": "レポートパックの受信を待っています", "kf22813ad": "カスタム", "kf3b749ef": "ダイレクトチャット/グループ/チャネルのチャットIDをサポート", @@ -223,7 +249,9 @@ "kf5bbb568": "の訪問者マップ", "kf6bc1610": "モニタータイプ", "kf6db9ea5": "3時間", + "kf7878d19": "Website Overview", "kf7d5dbf8": "もっと読む", + "kf8a5d26d": "Add Website Now", "kf97b6f71": "Linuxマシンでこのコマンドを実行してください", "kf9877f28": "詳細を見る", "kfc98929b": "{{num}}日", diff --git a/src/client/public/locales/ru/translation.json b/src/client/public/locales/ru/translation.json index 94507e6..38e7ae0 100644 --- a/src/client/public/locales/ru/translation.json +++ b/src/client/public/locales/ru/translation.json @@ -7,6 +7,7 @@ "k11f09c87": "просмотры", "k1286421": "Имя пользователя", "k134e0d97": "Текущий", + "k139b5f9a": "Vistor Map", "k14c6c425": "Результат", "k158336d6": "Таймаут запроса (с)", "k1598e726": "текущий посетитель", @@ -30,7 +31,9 @@ "k2813d1f7": "Этот месяц", "k2a6a7d8f": "НИЖЕ", "k2b2d40d4": "Тестовый код", + "k2b463d4b": "Are you sure you want to do this?", "k2c2712a4": "ЦПУ", + "k2dad13e3": "Language", "k2e6dbf02": "На Email", "k2ea8a019": "Монитор", "k30b5f01b": "Рабочие области", @@ -39,13 +42,19 @@ "k32344f64": "Очистить данные", "k3260f019": "Выйти", "k3471e956": "Повтор нового пароля", + "k3542f88c": "Telemetry name: {{name}} | events: {{num}}", + "k3834d1a6": "Add Page", "k389db675": "Отправить", "k38c62888": "Пожалуйста, выберите монитор", "k3cedb797": "Безопасность", + "k3d1822c5": "Confirm action", "k3d3baf52": "среднее время посещения", "k3dbe79b1": "Удалить", "k3de768a1": "Сменить пароль", "k3e757ddf": "Здесь пока нет мониторов.", + "k3e8b13f8": "Join Discord", + "k3f36e17e": "Follow Twitter", + "k406e9ad8": "Confirm", "k42347b91": "Количество событий на сайте", "k42831fc1": "Добавить телеметрию", "k43e21ee9": "Скачать клиентский отчет", @@ -53,9 +62,11 @@ "k44cad477": "(Текущий)", "k46f0adde": "Карта посетителей", "k47f43dbc": "Здоровье {{monitorName}}", + "k48186ce": "Back to Homepage", "k4905ed7b": "НИКАКОЙ", "k490ada32": "Добавить веб-сайт", "k49e5f1d2": "1н", + "k4a369f75": "It will permanently delete the relevant data", "k4ac4dd36": "Рефереры", "k4de48e75": "Макс. попыток", "k4e08cf58": "Показать подробное количество", @@ -66,6 +77,7 @@ "k51bac044": "Отмена", "k53ae02a5": "Новый", "k542b527c": "События", + "k56b4c80c": "Theme", "k58267a45": "Источник", "k58f90514": "Токен бота", "k593cf342": "Вы уверены, что хотите удалить этот монитор?", @@ -83,6 +95,7 @@ "k6acf5248": "Недавние", "k6b36580f": "URL Apprise", "k6bc9e414": "Вход", + "k6ea11aff": "Get!", "k6f15bcc3": "Хост", "k717660a5": "ОЗУ", "k721589c1": "Сегодня", @@ -90,8 +103,10 @@ "k74a240": "Полоса здоровья", "k75581e13": "Копия", "k75bfaaa6": "Добавьте этот код в скрипт заголовка вашего веб-сайта", + "k763816ac": "Preview", "k784dd132": "Тест", "k7927b824": "Вы уверены, что хотите очистить все офлайн узлы?", + "k7a132ce8": "Sorry, but this page is not found", "k7ac44a6e": "Ключ сессии", "k7b74a43f": "посетители", "k7c95e6a5": "Вы уверены, что хотите удалить эту страницу?", @@ -105,6 +120,7 @@ "k85344b23": "Нагрузка", "k85c5fd4c": "Мониторы еще не настроены", "k8746ec38": "Выбрать монитор", + "k887ae5cd": "Create", "k88a9bf01": "Показать значок", "k88d2647b": "Веб-сайт", "k89056082": "(30 дней)", @@ -122,6 +138,7 @@ "k951a939a": "Количество принятых сайтом", "k97ddb155": "Показать текущий ответ", "k98f433ee": "Скачать репортер с", + "k9991c290": "Community", "k9a272ecf": "Это ваши серверы?", "k9a3cc801": "Принимаемые символы", "k9add1fac": "Трафик", @@ -144,7 +161,9 @@ "ka9d081ac": "Интервал проверки (с)", "kaa0788e9": "Макет успешно сохранен", "kaa0ccaab": "Email отправителя", + "kaadb73f3": "Light", "kab56db46": "Сердцебиение", + "kab662431": "Path", "kacbdae07": "Среднее время ответа", "kad9ea10d": "Подтвердить удаление этой телеметрии: [{{name}}]", "kadef6c48": "Предыдущий {{label}}", @@ -156,6 +175,7 @@ "kb659c1bc": "Истечение серт.", "kb8de8c50": "Скрытая копия", "kbb31d3db": "Дата статистики", + "kbb4e12c5": "Dark", "kbb58c99c": "Успешно удалено", "kbcf67f53": "Новый пароль", "kbd1e7dee": "Использование: {{usage}}мс", @@ -182,10 +202,13 @@ "kccaa732a": "Без последовательных тире", "kccb42483": "Пароль", "kd031b383": "Просмотры", + "kd1f7e695": "Confirm to logout", "kd211e2d4": "Страница релизов", + "kd3262a4a": "Config", "kd3396544": "Обычно мы будем использовать однопиксельное пустое изображение, так что это не повлияет на нормальное использование пользователя.", "kd37efb26": "Уведомления", "kd46ab159": "Событий нет", + "kd7279fa6": "Code", "kd7985726": "{{num}} пользователей", "kd92fa3e7": "Имя хоста", "kdaa949e5": "События {{monitorName}}", @@ -203,12 +226,14 @@ "ke1b5ca71": "Страницы", "ke20a92c7": "Тип ресурсной записи", "ke2fe505b": "На этой неделе", + "ke349bd66": "Confirm to delete this telemetry?", "ke3a3f2f2": "Порт", "ke46232fe": "Добавить сервер", "ke5b015e9": "Вы можете получить токен на https://t.me/BotFather.", "ke6797c65": "Вы можете получить свой ID чата, отправив сообщение боту и перейдя по этому URL, чтобы просмотреть chat_id", "ke9d2fef3": "Этот месяц", "ke9dcaa64": "Уведомлений не найдено", + "kea954889": "Continue", "keaf7576f": "Заголовок", "ked37937b": "Метрики", "ked7eea1a": "ВВЕРХ", @@ -216,6 +241,7 @@ "kedc69eb6": "Код отслеживания", "kef701e50": "Добавить монитор", "kefe27782": "Телеметрия - это технология, которая сообщает данные о доступе даже на страницах, которые не находятся под вашим контролем. Пока другой сайт разрешает вставку изображений сторонних производителей (например, форумы, блоги и различные редакторы с богатым текстом), данные могут быть собраны и использованы для анализа изображений, когда они загружены пользователем.", + "kf19c917a": "Not any website has been exist", "kf1d60bfc": "Ожидание получения пакета отчета", "kf22813ad": "Пользовательский", "kf3b749ef": "Поддержка прямого чата / группы / ID чата канала", @@ -223,7 +249,9 @@ "kf5bbb568": "карта посетителей", "kf6bc1610": "Тип монитора", "kf6db9ea5": "3ч", + "kf7878d19": "Website Overview", "kf7d5dbf8": "Читать далее", + "kf8a5d26d": "Add Website Now", "kf97b6f71": "Запустите эту команду на вашем Linux-машине", "kf9877f28": "Посмотреть детали", "kfc98929b": "{{num}} дней", diff --git a/src/client/public/locales/zh/translation.json b/src/client/public/locales/zh/translation.json index 9a421ad..55aa04c 100644 --- a/src/client/public/locales/zh/translation.json +++ b/src/client/public/locales/zh/translation.json @@ -7,6 +7,7 @@ "k11f09c87": "视图", "k1286421": "用户名", "k134e0d97": "当前", + "k139b5f9a": "Vistor Map", "k14c6c425": "结果", "k158336d6": "请求超时(秒)", "k1598e726": "当前访问者", @@ -30,7 +31,9 @@ "k2813d1f7": "本月", "k2a6a7d8f": "下线", "k2b2d40d4": "测试代码", + "k2b463d4b": "Are you sure you want to do this?", "k2c2712a4": "CPU", + "k2dad13e3": "Language", "k2e6dbf02": "发邮件到", "k2ea8a019": "监控器", "k30b5f01b": "工作区", @@ -39,13 +42,19 @@ "k32344f64": "清除数据", "k3260f019": "登出", "k3471e956": "重复新密码", + "k3542f88c": "Telemetry name: {{name}} | events: {{num}}", + "k3834d1a6": "Add Page", "k389db675": "提交", "k38c62888": "请选择监控器", "k3cedb797": "安全", + "k3d1822c5": "Confirm action", "k3d3baf52": "平均访问时间", "k3dbe79b1": "删除", "k3de768a1": "更改密码", "k3e757ddf": "这里还没有监控器。", + "k3e8b13f8": "Join Discord", + "k3f36e17e": "Follow Twitter", + "k406e9ad8": "Confirm", "k42347b91": "网站事件计数", "k42831fc1": "添加遥测", "k43e21ee9": "下载客户端报告器", @@ -53,9 +62,11 @@ "k44cad477": "(当前)", "k46f0adde": "访问者地图", "k47f43dbc": "{{monitorName}}的健康状况", + "k48186ce": "Back to Homepage", "k4905ed7b": "无", "k490ada32": "添加网站", "k49e5f1d2": "1周", + "k4a369f75": "It will permanently delete the relevant data", "k4ac4dd36": "引荐人", "k4de48e75": "最大重试次数", "k4e08cf58": "显示详细数字", @@ -66,6 +77,7 @@ "k51bac044": "取消", "k53ae02a5": "新建", "k542b527c": "事件", + "k56b4c80c": "Theme", "k58267a45": "源", "k58f90514": "机器人令牌", "k593cf342": "您确定要删除这个监控器吗?", @@ -83,6 +95,7 @@ "k6acf5248": "最近", "k6b36580f": "通知 URL", "k6bc9e414": "登录", + "k6ea11aff": "Get!", "k6f15bcc3": "主机", "k717660a5": "内存", "k721589c1": "今天", @@ -90,8 +103,10 @@ "k74a240": "健康栏", "k75581e13": "抄送", "k75bfaaa6": "将此代码添加到您的网站头部脚本中", + "k763816ac": "Preview", "k784dd132": "测试", "k7927b824": "您确定要清除所有离线节点吗?", + "k7a132ce8": "Sorry, but this page is not found", "k7ac44a6e": "会话密钥", "k7b74a43f": "访问者", "k7c95e6a5": "您确定要删除此页面吗?", @@ -105,6 +120,7 @@ "k85344b23": "负载", "k85c5fd4c": "还没有设置任何监控器", "k8746ec38": "选择监控器", + "k887ae5cd": "Create", "k88a9bf01": "显示徽章", "k88d2647b": "网站", "k89056082": "(30天)", @@ -122,6 +138,7 @@ "k951a939a": "网站接受计数", "k97ddb155": "显示当前响应", "k98f433ee": "从这里下载报告器", + "k9991c290": "Community", "k9a272ecf": "这是您的服务器吗?", "k9a3cc801": "接受字符", "k9add1fac": "流量", @@ -144,7 +161,9 @@ "ka9d081ac": "检查间隔(秒)", "kaa0788e9": "布局保存成功", "kaa0ccaab": "发件人邮箱", + "kaadb73f3": "Light", "kab56db46": "心跳", + "kab662431": "Path", "kacbdae07": "平均响应", "kad9ea10d": "确认删除此遥测:[{{name}}]", "kadef6c48": "上一个{{label}}", @@ -156,6 +175,7 @@ "kb659c1bc": "证书到期", "kb8de8c50": "密送", "kbb31d3db": "统计日期", + "kbb4e12c5": "Dark", "kbb58c99c": "删除成功", "kbcf67f53": "新密码", "kbd1e7dee": "使用量:{{usage}}毫秒", @@ -182,10 +202,13 @@ "kccaa732a": "无连续破折号", "kccb42483": "密码", "kd031b383": "视图", + "kd1f7e695": "Confirm to logout", "kd211e2d4": "发布页面", + "kd3262a4a": "Config", "kd3396544": "通常,我们会使用一个像素的空白图片,这样不会影响用户的正常使用。", "kd37efb26": "通知", "kd46ab159": "没有事件", + "kd7279fa6": "Code", "kd7985726": "{{num}}个用户", "kd92fa3e7": "主机名", "kdaa949e5": "{{monitorName}}的事件", @@ -203,12 +226,14 @@ "ke1b5ca71": "页面", "ke20a92c7": "资源记录类型", "ke2fe505b": "本周", + "ke349bd66": "Confirm to delete this telemetry?", "ke3a3f2f2": "端口", "ke46232fe": "添加服务器", "ke5b015e9": "您可以从 https://t.me/BotFather 获取令牌。", "ke6797c65": "您可以通过向机器人发送消息并访问此URL来查看chat_id以获取您的聊天ID", "ke9d2fef3": "本月", "ke9dcaa64": "没有找到任何通知", + "kea954889": "Continue", "keaf7576f": "标题", "ked37937b": "指标", "ked7eea1a": "上线", @@ -216,6 +241,7 @@ "kedc69eb6": "追踪代码", "kef701e50": "添加监控器", "kefe27782": "遥测是一种技术,即使在不受您控制的页面上也能报告访问数据。只要其他网站允许插入第三方图片(例如,论坛、博客和各种富文本编辑器),那么当用户加载图片时,就可以收集并用于分析数据。", + "kf19c917a": "Not any website has been exist", "kf1d60bfc": "等待接收报告包", "kf22813ad": "自定义", "kf3b749ef": "支持直接聊天/群组/频道的聊天ID", @@ -223,7 +249,9 @@ "kf5bbb568": "的访问者地图", "kf6bc1610": "监控器类型", "kf6db9ea5": "3小时", + "kf7878d19": "Website Overview", "kf7d5dbf8": "阅读更多", + "kf8a5d26d": "Add Website Now", "kf97b6f71": "在您的Linux机器上运行此命令", "kf9877f28": "查看详情", "kfc98929b": "{{num}}天", diff --git a/src/client/routes/telemetry/$telemetryId.tsx b/src/client/routes/telemetry/$telemetryId.tsx index e8d1dd9..c79b0f1 100644 --- a/src/client/routes/telemetry/$telemetryId.tsx +++ b/src/client/routes/telemetry/$telemetryId.tsx @@ -1,4 +1,4 @@ -import { trpc } from '@/api/trpc'; +import { defaultErrorHandler, defaultSuccessHandler, trpc } from '@/api/trpc'; import { CommonHeader } from '@/components/CommonHeader'; import { CommonWrapper } from '@/components/CommonWrapper'; import { TelemetryMetricsTable } from '@/components/telemetry/TelemetryMetricsTable'; @@ -17,15 +17,17 @@ import { ScrollArea, ScrollBar } from '@/components/ui/scroll-area'; import { useGlobalRangeDate } from '@/hooks/useGlobalRangeDate'; import { useCurrentWorkspaceId } from '@/store/user'; import { routeAuthBeforeLoad } from '@/utils/route'; -import { Trans, useTranslation } from '@i18next-toolkit/react'; -import { createFileRoute } from '@tanstack/react-router'; +import { useTranslation } from '@i18next-toolkit/react'; +import { createFileRoute, useNavigate } from '@tanstack/react-router'; import { Card, Typography } from 'antd'; -import { LuChevronRight, LuCode2 } from 'react-icons/lu'; +import { LuCode2, LuTrash } from 'react-icons/lu'; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from '@/components/ui/collapsible'; +import { AlertConfirm } from '@/components/AlertConfirm'; +import { useEvent } from '@/hooks/useEvent'; export const Route = createFileRoute('/telemetry/$telemetryId')({ beforeLoad: routeAuthBeforeLoad, @@ -41,6 +43,25 @@ function TelemetryDetailComponent() { workspaceId, telemetryId, }); + const { data: eventCount } = trpc.telemetry.eventCount.useQuery({ + workspaceId, + telemetryId, + }); + const deleteMutation = trpc.telemetry.delete.useMutation({ + onSuccess: defaultSuccessHandler, + onError: defaultErrorHandler, + }); + const trpcUtils = trpc.useUtils(); + const navigate = useNavigate(); + + const handleDelete = useEvent(async () => { + await deleteMutation.mutateAsync({ workspaceId, telemetryId }); + trpcUtils.telemetry.all.refetch(); + navigate({ + to: '/telemetry', + replace: true, + }); + }); const startAt = startDate.valueOf(); const endAt = endDate.valueOf(); @@ -54,70 +75,87 @@ function TelemetryDetailComponent() { - - - - - - Usage - +
+ + + + + + Usage + - - Advanced +
+

Here is some way to use telemetry:

+ + Insert to article: + +

+ if your article support raw html, you can direct insert it{' '} + + {blankGif} + +

- -
-

- Some website will not allow send `referer` field. so - its maybe can not track source. so you can mark it by - yourself. for example: -

-

- - {blankGif}?url=https://xxxxxxxx - -

-
-
- + + Advanced - - Count your website visitor: - -

- if your article support raw html, you can direct insert it{' '} - - {countBadgeUrl} - -

-

- Like this: -

-
+ +
+

+ Some website will not allow send `referer` field. so + its maybe can not track source. so you can mark it + by yourself. for example: +

+

+ + {blankGif}?url=https://xxxxxxxx + +

+
+
+
- - {t('Get!')} - -
- + + Count your website visitor: + +

+ if your article support raw html, you can direct insert it{' '} + + {countBadgeUrl} + +

+

+ Like this: +

+
+ + + {t('Get!')} + +
+ + } /> }