diff --git a/.eslintrc b/.eslintrc
index 85105b6..5273cb8 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -15,7 +15,6 @@
"project": "./tsconfig.json"
},
"ignorePatterns": ["build/", "dist/"],
- "plugins": ["import", "react", "@typescript-eslint", "prettier"],
"extends": [
"plugin:react/recommended",
"plugin:@typescript-eslint/eslint-recommended",
@@ -27,6 +26,7 @@
"plugin:import/warnings",
"plugin:import/typescript"
],
+ "plugins": ["import", "react", "@typescript-eslint", "prettier"],
"rules": {
"import/extensions": [
"error",
@@ -69,6 +69,7 @@
],
"max-len": ["error", { "code": 150 }],
"@typescript-eslint/ban-ts-comment": ["off"],
+ "import/prefer-default-export": ["off"],
"react/prop-types": ["warn"],
"react/require-default-props": "off",
"react/jsx-props-no-spreading": ["off"],
diff --git a/package-lock.json b/package-lock.json
index 279588c..267de03 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ucentral-client",
- "version": "2.8.0(28)",
+ "version": "2.8.0(31)",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "ucentral-client",
- "version": "2.8.0(28)",
+ "version": "2.8.0(31)",
"license": "ISC",
"dependencies": {
"@chakra-ui/icons": "^2.0.11",
diff --git a/package.json b/package.json
index 708f361..77b8ac1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ucentral-client",
- "version": "2.8.0(30)",
+ "version": "2.8.0(31)",
"description": "",
"private": true,
"main": "index.tsx",
diff --git a/public/locales/de/translation.json b/public/locales/de/translation.json
index 34a32e5..4454fa6 100644
--- a/public/locales/de/translation.json
+++ b/public/locales/de/translation.json
@@ -79,6 +79,7 @@
"live_view_help": "Hilfe zur Live-Ansicht",
"memory": "Erinnerung",
"memory_used": "Verwendeter Speicher",
+ "missing_board": "Die Analytics-Überwachung an diesem Veranstaltungsort ist nicht mehr aktiv. Bitte starten Sie die Überwachung über das obere Menü neu",
"mode": "Modus",
"noise": "Lärm",
"packets": "Pakete",
@@ -370,7 +371,7 @@
"push_configuration": "Push-Konfiguration",
"push_configuration_error": "Fehler beim Versuch, die Konfiguration auf das Gerät zu übertragen: {{e}}",
"push_configuration_explanation": "Konfiguration nicht übertragen, Fehlercode {{code}}",
- "push_success": "Konfiguration erfolgreich übertragen!",
+ "push_success": "Die Konfiguration wurde verifiziert und ein \"Konfigurieren\"-Befehl wurde jetzt von der Steuerung initiiert!",
"radio_limit": "Sie haben die maximale Anzahl an Funkgeräten (5) erreicht. Sie müssen eines der aktivierten Bänder löschen, um ein neues hinzuzufügen",
"radios": "Radios",
"rc_only": "Nur für Release-Kandidaten",
@@ -613,6 +614,7 @@
"import_explanation": "Für den Massenimport von Geräten müssen Sie eine CSV-Datei mit den folgenden Spalten verwenden: SerialNumber, DeviceType, Name, Description, Note",
"invalid_serial_number": "Ungültige Seriennummer (muss 12 HEX-Zeichen lang sein)",
"new_devices": "Neue Geräte",
+ "no_model_image": "Kein Modellbild gefunden",
"not_connected": "Nicht verbunden",
"not_found_gateway": "Fehler: Gerät hat sich noch nicht mit dem Gateway verbunden",
"notifications": "Gerätebenachrichtigungen",
@@ -700,6 +702,8 @@
"invalid_proto_6g": "Dieses Verschlüsselungsprotokoll kann nicht auf einer SSID verwendet werden, die 6G verwendet",
"invalid_proto_passpoint": "Dieses Verschlüsselungsprotokoll kann nicht mit einer Passpoint-SSID verwendet werden. Bitte wählen Sie ein Protokoll aus, das Radius verwenden kann",
"invalid_select_ports": "Inkompatible Werte zwischen Schnittstellen! Bitte stellen Sie sicher, dass es keine doppelte PORT/VLAN-ID-Kombination zwischen Ihren Schnittstellen gibt",
+ "invalid_static_ipv4_d": "Ungültige Adresse, dieser Bereich ist für Multicasting reserviert (Klasse D). Das erste Oktett sollte 223 oder niedriger sein",
+ "invalid_static_ipv4_e": "Ungültige Adresse, dieser Bereich ist für Experimente reserviert (Klasse E). Das erste Oktett sollte 223 oder niedriger sein",
"invalid_third_party": "Ungültige Drittanbieter-JSON-Zeichenfolge. Bitte bestätigen Sie, dass Ihr Wert ein gültiges JSON ist",
"key_file_explanation": "Bitte verwenden Sie eine .pem-Datei, die mit „-----BEGIN PRIVATE KEY-----“ beginnt und mit „-----END PRIVATE KEY-----“ endet.",
"min_max_string": "Der Wert muss eine Länge zwischen {{min}} (einschließlich) und {{max}} (einschließlich) haben.",
@@ -811,7 +815,7 @@
"level": "Niveau",
"message": "Botschaft",
"one": "Log",
- "receiving_types": "Typen empfangen",
+ "receiving_types": "Benachrichtigungsfilter",
"security": "Sicherheit",
"source": "Quelle",
"thread": "Faden",
@@ -874,6 +878,10 @@
"activate": "",
"add_new_note": "Notiz hinzufügen",
"deactivate": "Deaktivieren",
+ "delete_account": "Mein Profil löschen",
+ "delete_account_confirm": "Löschen Sie alle meine Informationen",
+ "delete_warning": "Diese Aktion ist nicht umkehrbar. Alle Ihre Profilinformationen und Ihre API-Schlüssel werden entfernt",
+ "deleted_success": "Ihr Profil ist jetzt gelöscht, wir melden Sie jetzt ab...",
"disabled": "Deaktiviert",
"enabled": "aktiviert",
"manage_avatar": "Avatar verwalten",
@@ -901,18 +909,30 @@
"version": "Ausführung"
},
"script": {
+ "author": "Schöpfer",
"automatic": "Automatik",
+ "create_success": "Das Skript ist jetzt erstellt und einsatzbereit!",
"custom_domain": "Benutzerdefinierten Domain",
"deferred": "Aufgeschoben",
- "device_title": "Führen Sie das Geräteskript aus",
+ "device_title": "Skript ausführen",
+ "diagnostics": "Diagnose",
"explanation": "Führen Sie ein benutzerdefiniertes Skript auf diesem Gerät aus und laden Sie die Ergebnisse herunter",
+ "file_not_ready": "Das Ergebnis wurde noch nicht hochgeladen, bitte kommen Sie später wieder",
"file_too_large": "Bitte wählen Sie eine Datei aus, die kleiner als 500 KB ist",
+ "helper": "Dokumentation",
+ "no_script_available": "Kein Skript für Ihre Benutzerrolle verfügbar",
"now": "Jetzt",
"one": "Skript",
+ "other": "Skripte",
+ "restricted": "Benutzer, die dieses Skript ausführen dürfen",
"schedule_success": "Geplante Skriptausführung!",
"signature": "Unterschrift",
+ "started_execution": "Ausführung des Skripts gestartet, kommen Sie später für die Ergebnisse!",
"timeout": "Auszeit",
- "upload_destination": "Ziel hochladen",
+ "update_success": "Skript aktualisiert!",
+ "upload_destination": "Ergebnis-Upload-Ziel",
+ "upload_file": "Datei hochladen",
+ "visit_external_website": "Dokumentation ansehen",
"when": "Ausführung planen"
},
"service": {
diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json
index 1b71a80..1e8bec5 100644
--- a/public/locales/en/translation.json
+++ b/public/locales/en/translation.json
@@ -79,6 +79,7 @@
"live_view_help": "Live View Help",
"memory": "Memory",
"memory_used": "Memory Used",
+ "missing_board": "Analytics monitoring on this venue is no longer active, please restart monitoring using the top menu",
"mode": "Mode",
"noise": "Noise",
"packets": "Packets",
@@ -370,7 +371,7 @@
"push_configuration": "Push Configuration",
"push_configuration_error": "Error while trying to push configuration to device: {{e}}",
"push_configuration_explanation": "Configuration not pushed, error code {{code}}",
- "push_success": "Configuration Successfully Pushed!",
+ "push_success": "Configuration was verified and a \"Configure\" command was now initiated by the controller!",
"radio_limit": "You have reached the maximum amount of radios (5). You need to delete one of the activated bands to add a new one",
"radios": "Radios",
"rc_only": "Release Candidates Only",
@@ -613,6 +614,7 @@
"import_explanation": "To bulk import devices, you need to use a CSV file with the following columns: SerialNumber, DeviceType, Name, Description, Note",
"invalid_serial_number": "Invalid Serial Number (needs to be 12 HEX chars)",
"new_devices": "new devices",
+ "no_model_image": "No Model Image Found",
"not_connected": "Not Connected",
"not_found_gateway": "Error: device has not yet connected to the controller",
"notifications": "Device Notifications",
@@ -700,6 +702,8 @@
"invalid_proto_6g": "This encryption protocol cannot be used on an SSID which uses 6G",
"invalid_proto_passpoint": "",
"invalid_select_ports": "Incompatible values between interfaces! Please make sure that there is no duplicate PORT/VLAN ID combination between your interfaces",
+ "invalid_static_ipv4_d": "Invalid address, this range reserved for multicasting (class D). The first octet should be 223 or lower",
+ "invalid_static_ipv4_e": "Invalid address, this range reserved for experiments (class E). The first octet should be 223 or lower",
"invalid_third_party": "Invalid Third Party JSON string. Please confirm that your value is a valid JSON",
"key_file_explanation": "Please use a .pem file that starts with \"-----BEGIN PRIVATE KEY-----\" and ends with \"-----END PRIVATE KEY-----\"",
"min_max_string": "Value needs to be of a length between {{min}} (inclusive) and {{max}} (inclusive)",
@@ -811,7 +815,7 @@
"level": "Level",
"message": "Message",
"one": "Log",
- "receiving_types": "Receiving Types",
+ "receiving_types": "Notifications Filter",
"security": "Security",
"source": "Source",
"thread": "Thread",
@@ -874,6 +878,10 @@
"activate": "Activate",
"add_new_note": "Add Note",
"deactivate": "Deactivate",
+ "delete_account": "Delete my Profile",
+ "delete_account_confirm": "Delete all of my information",
+ "delete_warning": "This action is non-reversible. All of your profile information and your API keys will be removed",
+ "deleted_success": "Your profile is now deleted, we will now log you out...",
"disabled": "Disabled",
"enabled": "Enabled",
"manage_avatar": "Manage Avatar",
@@ -901,18 +909,30 @@
"version": "Version"
},
"script": {
+ "author": "Creator",
"automatic": "Automatic",
+ "create_success": "Script is now created and ready to use!",
"custom_domain": "Custom Domain",
"deferred": "Deferred",
- "device_title": "Run Device Script",
+ "device_title": "Run Script",
+ "diagnostics": "Diagnostics",
"explanation": "Run a custom script on this device and download its results",
+ "file_not_ready": "Result is not uploaded yet, please come back later",
"file_too_large": "Please select a file that is less than 500KB",
+ "helper": "Documentation",
+ "no_script_available": "No script available for your user role",
"now": "Now",
"one": "Script",
+ "other": "Scripts",
+ "restricted": "Users allowed to run this script",
"schedule_success": "Scheduled script execution!",
"signature": "Signature",
+ "started_execution": "Started script execution, come later for the results!",
"timeout": "Timeout",
- "upload_destination": "Upload Destination",
+ "update_success": "Script updated!",
+ "upload_destination": "Results Upload Destination",
+ "upload_file": "Upload File",
+ "visit_external_website": "View Documentation",
"when": "Schedule Execution"
},
"service": {
diff --git a/public/locales/es/translation.json b/public/locales/es/translation.json
index 7740c57..abccead 100644
--- a/public/locales/es/translation.json
+++ b/public/locales/es/translation.json
@@ -79,6 +79,7 @@
"live_view_help": "Ayuda de visualización en vivo",
"memory": "Memoria",
"memory_used": "Memoria usada",
+ "missing_board": "El monitoreo analítico en este lugar ya no está activo, reinicie el monitoreo usando el menú superior",
"mode": "Modo",
"noise": "Ruido",
"packets": "Paquetes",
@@ -370,7 +371,7 @@
"push_configuration": "Configuración de inserción",
"push_configuration_error": "Error al intentar enviar la configuración al dispositivo: {{e}}",
"push_configuration_explanation": "Configuración no enviada, código de error {{code}}",
- "push_success": "¡Configuración presionada con éxito!",
+ "push_success": "¡Se verificó la configuración y ahora el controlador inició un comando \"Configurar\"!",
"radio_limit": "Has alcanzado la cantidad máxima de radios (5). Necesita eliminar una de las bandas activadas para agregar una nueva",
"radios": "Radios",
"rc_only": "Solo candidatos de lanzamiento",
@@ -613,6 +614,7 @@
"import_explanation": "Para importar dispositivos de forma masiva, debe usar un archivo CSV con las siguientes columnas: Número de serie, Tipo de dispositivo, Nombre, Descripción, Nota",
"invalid_serial_number": "Número de serie no válido (debe tener 12 caracteres HEX)",
"new_devices": "Nuevos dispositivos",
+ "no_model_image": "No se encontró ninguna imagen de modelo",
"not_connected": "No conectado",
"not_found_gateway": "Error: el dispositivo aún no se ha conectado a la puerta de enlace",
"notifications": "notificaciones de dispositivos",
@@ -700,6 +702,8 @@
"invalid_proto_6g": "Este protocolo de encriptación no se puede usar en un SSID que usa 6G",
"invalid_proto_passpoint": "Este protocolo de cifrado no se puede utilizar con un SSID de punto de acceso. Seleccione un protocolo que pueda usar Radius",
"invalid_select_ports": "¡Valores incompatibles entre interfaces! Asegúrese de que no haya una combinación de ID de VLAN/PUERTO duplicada entre sus interfaces",
+ "invalid_static_ipv4_d": "Dirección no válida, este rango está reservado para multidifusión (clase D). El primer octeto debe ser 223 o inferior",
+ "invalid_static_ipv4_e": "Dirección no válida, este rango reservado para experimentos (clase E). El primer octeto debe ser 223 o inferior",
"invalid_third_party": "Cadena JSON de terceros no válida. Confirme que su valor es un JSON válido",
"key_file_explanation": "Utilice un archivo .pem que comience con \"-----BEGIN PRIVATE KEY-----\" y termine con \"-----END PRIVATE KEY-----\"",
"min_max_string": "El valor debe tener una longitud entre {{min}} (inclusive) y {{max}} (inclusive)",
@@ -811,7 +815,7 @@
"level": "Nivel",
"message": "Mensaje",
"one": "Iniciar sesión",
- "receiving_types": "Tipos de recepción",
+ "receiving_types": "Filtro de notificaciones",
"security": "SEGURIDAD",
"source": "Fuente",
"thread": "Hilo",
@@ -874,6 +878,10 @@
"activate": "",
"add_new_note": "Añadir la nota",
"deactivate": "Desactivar",
+ "delete_account": "Eliminar mi perfil",
+ "delete_account_confirm": "Eliminar toda mi información",
+ "delete_warning": "Esta acción no es reversible. Toda la información de su perfil y sus claves API serán eliminadas",
+ "deleted_success": "Su perfil ahora está eliminado, ahora cerraremos su sesión...",
"disabled": "Discapacitado",
"enabled": "Habilitado",
"manage_avatar": "Administrar avatar",
@@ -901,18 +909,30 @@
"version": "Versión"
},
"script": {
+ "author": "Creador",
"automatic": "Automático",
+ "create_success": "¡El script ahora está creado y listo para usar!",
"custom_domain": "Dominio personalizado",
"deferred": "Diferido",
- "device_title": "Ejecutar secuencia de comandos del dispositivo",
+ "device_title": "Ejecutar guión",
+ "diagnostics": "Diagnósticos",
"explanation": "Ejecute un script personalizado en este dispositivo y descargue sus resultados",
+ "file_not_ready": "El resultado aún no se ha subido, vuelva más tarde",
"file_too_large": "Seleccione un archivo que tenga menos de 500 KB",
+ "helper": "Documentación",
+ "no_script_available": "No hay script disponible para su rol de usuario",
"now": "ahora",
"one": "Guión",
+ "other": "Guiones",
+ "restricted": "Usuarios autorizados a ejecutar este script",
"schedule_success": "¡Ejecución de script programada!",
"signature": "Firma",
+ "started_execution": "Comenzó la ejecución del script, ¡venga más tarde para conocer los resultados!",
"timeout": "Se acabó el tiempo",
- "upload_destination": "Cargar destino",
+ "update_success": "Guión actualizado!",
+ "upload_destination": "Destino de carga de resultados",
+ "upload_file": "Subir archivo",
+ "visit_external_website": "VER DOCUMENTACIÓN",
"when": "Programar Ejecucion"
},
"service": {
diff --git a/public/locales/fr/translation.json b/public/locales/fr/translation.json
index d07aba4..aeb9009 100644
--- a/public/locales/fr/translation.json
+++ b/public/locales/fr/translation.json
@@ -79,6 +79,7 @@
"live_view_help": "Aide sur l'affichage en direct",
"memory": "mémoire",
"memory_used": "Mémoire utilisée",
+ "missing_board": "La surveillance analytique sur ce lieu n'est plus active, veuillez redémarrer la surveillance en utilisant le menu du haut",
"mode": "Mode",
"noise": "Bruit",
"packets": "Paquets",
@@ -370,7 +371,7 @@
"push_configuration": "Pousser la configuration",
"push_configuration_error": "Erreur lors de la tentative d'envoi de la configuration sur l'appareil : {{e}}",
"push_configuration_explanation": "Configuration non poussée, code d'erreur {{code}}",
- "push_success": "Configuration poussée avec succès !",
+ "push_success": "La configuration a été vérifiée et une commande \"Configurer\" a maintenant été lancée par le contrôleur !",
"radio_limit": "Vous avez atteint le nombre maximum de radios (5). Vous devez supprimer une des bandes activées pour en ajouter une nouvelle",
"radios": "Radios",
"rc_only": "Libérer les candidats uniquement",
@@ -613,6 +614,7 @@
"import_explanation": "Pour importer en masse des appareils, vous devez utiliser un fichier CSV avec les colonnes suivantes : SerialNumber, DeviceType, Name, Description, Note",
"invalid_serial_number": "Numéro de série non valide (doit être composé de 12 caractères HEX)",
"new_devices": "nouveaux appareils",
+ "no_model_image": "Aucune image de modèle trouvée",
"not_connected": "Pas connecté",
"not_found_gateway": "Erreur : l'appareil n'est pas encore connecté à la passerelle",
"notifications": "notifications de l'appareil",
@@ -700,6 +702,8 @@
"invalid_proto_6g": "Ce protocole de cryptage ne peut pas être utilisé sur un SSID qui utilise la 6G",
"invalid_proto_passpoint": "Ce protocole de cryptage ne peut pas être utilisé avec un SSID de point de passe. Veuillez sélectionner un protocole qui peut utiliser Radius",
"invalid_select_ports": "Valeurs incompatibles entre les interfaces ! Veuillez vous assurer qu'il n'y a pas de combinaison PORT/VLAN ID en double entre vos interfaces",
+ "invalid_static_ipv4_d": "Adresse invalide, cette plage est réservée à la multidiffusion (classe D). Le premier octet doit être 223 ou moins",
+ "invalid_static_ipv4_e": "Adresse invalide, cette plage est réservée aux expérimentations (classe E). Le premier octet doit être 223 ou moins",
"invalid_third_party": "Chaîne JSON tierce non valide. Veuillez confirmer que votre valeur est un JSON valide",
"key_file_explanation": "Veuillez utiliser un fichier .pem qui commence par \"-----BEGIN PRIVATE KEY-----\" et se termine par \"-----END PRIVATE KEY-----\"",
"min_max_string": "La valeur doit être d'une longueur comprise entre {{min}} (inclus) et {{max}} (inclus)",
@@ -811,7 +815,7 @@
"level": "Niveau",
"message": "Message",
"one": "Bûche",
- "receiving_types": "Types de réception",
+ "receiving_types": "Filtre de notification",
"security": "SÉCURITÉ",
"source": "La source",
"thread": "Fil de discussion",
@@ -874,6 +878,10 @@
"activate": "",
"add_new_note": "Ajouter une note",
"deactivate": "Désactiver",
+ "delete_account": "Supprimer mon profil",
+ "delete_account_confirm": "Supprimer toutes mes informations",
+ "delete_warning": "Cette action est irréversible. Toutes les informations de votre profil et vos clés API seront supprimées",
+ "deleted_success": "Votre profil est maintenant supprimé, nous allons maintenant vous déconnecter...",
"disabled": "Désactivé",
"enabled": "Activée",
"manage_avatar": "Gérer l'avatar",
@@ -901,18 +909,30 @@
"version": "Version"
},
"script": {
+ "author": "Créateur",
"automatic": "Automatique",
+ "create_success": "Le script est maintenant créé et prêt à être utilisé !",
"custom_domain": "Domaine personnalisé",
"deferred": "Différé",
- "device_title": "Exécuter le script de périphérique",
+ "device_title": "Script de lancement",
+ "diagnostics": "Diagnostics",
"explanation": "Exécutez un script personnalisé sur cet appareil et téléchargez ses résultats",
+ "file_not_ready": "Le résultat n'est pas encore téléchargé, veuillez revenir plus tard",
"file_too_large": "Veuillez sélectionner un fichier de moins de 500 Ko",
+ "helper": "Documentation",
+ "no_script_available": "Aucun script disponible pour votre rôle d'utilisateur",
"now": "À présent",
"one": "Scénario",
+ "other": "scripts",
+ "restricted": "Utilisateurs autorisés à exécuter ce script",
"schedule_success": "Exécution du script planifié !",
"signature": "signature",
+ "started_execution": "Lancement de l'exécution du script, venez plus tard pour les résultats !",
"timeout": "Temps libre",
- "upload_destination": "Destination de téléchargement",
+ "update_success": "Scénario mis à jour !",
+ "upload_destination": "Destination de téléchargement des résultats",
+ "upload_file": "Téléverser un fichier",
+ "visit_external_website": "Afficher la documentation",
"when": "Planifier l'exécution"
},
"service": {
diff --git a/public/locales/pt/translation.json b/public/locales/pt/translation.json
index 16c8740..82e8450 100644
--- a/public/locales/pt/translation.json
+++ b/public/locales/pt/translation.json
@@ -79,6 +79,7 @@
"live_view_help": "Ajuda da visualização ao vivo",
"memory": "Memória",
"memory_used": "Memória Usada",
+ "missing_board": "O monitoramento analítico neste local não está mais ativo, reinicie o monitoramento usando o menu superior",
"mode": "Modo",
"noise": "Barulho",
"packets": "Pacotes",
@@ -370,7 +371,7 @@
"push_configuration": "Configuração de envio",
"push_configuration_error": "Erro ao tentar enviar a configuração para o dispositivo: {{e}}",
"push_configuration_explanation": "Configuração não enviada, código de erro {{code}}",
- "push_success": "Configuração enviada com sucesso!",
+ "push_success": "A configuração foi verificada e um comando \"Configure\" foi iniciado pelo controlador!",
"radio_limit": "Você atingiu a quantidade máxima de rádios (5). Você precisa excluir uma das bandas ativadas para adicionar uma nova",
"radios": "Rádios",
"rc_only": "Liberar apenas candidatos",
@@ -613,6 +614,7 @@
"import_explanation": "Para importar dispositivos em massa, você precisa usar um arquivo CSV com as seguintes colunas: SerialNumber, DeviceType, Name, Description, Note",
"invalid_serial_number": "Número de série inválido (precisa ter 12 caracteres HEX)",
"new_devices": "novos dispositivos",
+ "no_model_image": "Nenhuma imagem de modelo encontrada",
"not_connected": "Não conectado",
"not_found_gateway": "Erro: o dispositivo ainda não se conectou ao gateway",
"notifications": "Notificações do dispositivo",
@@ -700,6 +702,8 @@
"invalid_proto_6g": "Este protocolo de criptografia não pode ser usado em um SSID que usa 6G",
"invalid_proto_passpoint": "Este protocolo de criptografia não pode ser usado com um SSID de ponto de acesso. Por favor, selecione um protocolo que pode usar Radius",
"invalid_select_ports": "Valores incompatíveis entre interfaces! Certifique-se de que não há combinação duplicada de PORT/VLAN ID entre suas interfaces",
+ "invalid_static_ipv4_d": "Endereço inválido, este intervalo está reservado para multicasting (classe D). O primeiro octeto deve ser 223 ou inferior",
+ "invalid_static_ipv4_e": "Endereço inválido, este intervalo é reservado para experimentos (classe E). O primeiro octeto deve ser 223 ou inferior",
"invalid_third_party": "String JSON de terceiros inválida. Confirme se seu valor é um JSON válido",
"key_file_explanation": "Use um arquivo .pem que comece com \"-----BEGIN PRIVATE KEY-----\" e termine com \"-----END PRIVATE KEY-----\"",
"min_max_string": "O valor precisa ter um comprimento entre {{min}} (inclusive) e {{max}} (inclusive)",
@@ -811,7 +815,7 @@
"level": "Nível",
"message": "mensagem",
"one": "Registro",
- "receiving_types": "Tipos de recebimento",
+ "receiving_types": "Filtro de notificações",
"security": "SEGURANÇA",
"source": "Fonte",
"thread": "FIO",
@@ -874,6 +878,10 @@
"activate": "",
"add_new_note": "Adicionar nota",
"deactivate": "Desativar",
+ "delete_account": "Excluir meu perfil",
+ "delete_account_confirm": "Excluir todas as minhas informações",
+ "delete_warning": "Esta ação é irreversível. Todas as suas informações de perfil e suas chaves de API serão removidas",
+ "deleted_success": "Seu perfil agora foi excluído, agora vamos desconectar você...",
"disabled": "Desativado",
"enabled": "ativado",
"manage_avatar": "Gerenciar Avatar",
@@ -901,18 +909,30 @@
"version": "Versão"
},
"script": {
+ "author": "O Criador",
"automatic": "Automático",
+ "create_success": "O script agora está criado e pronto para uso!",
"custom_domain": "Domínio personalizado",
"deferred": "Diferido",
- "device_title": "Executar script de dispositivo",
+ "device_title": "Executar script",
+ "diagnostics": "Diagnóstico",
"explanation": "Execute um script personalizado neste dispositivo e baixe seus resultados",
+ "file_not_ready": "O resultado ainda não foi carregado, volte mais tarde",
"file_too_large": "Selecione um arquivo com menos de 500 KB",
+ "helper": "Documentação",
+ "no_script_available": "Nenhum script disponível para sua função de usuário",
"now": "agora",
"one": "Roteiro",
+ "other": "Scripts",
+ "restricted": "Usuários autorizados a executar este script",
"schedule_success": "Execução de script agendada!",
"signature": "Assinatura",
+ "started_execution": "Execução do script iniciada, venha mais tarde para os resultados!",
"timeout": "Tempo esgotado",
- "upload_destination": "Carregar destino",
+ "update_success": "Roteiro atualizado!",
+ "upload_destination": "Destino de upload de resultados",
+ "upload_file": "Subir arquivo",
+ "visit_external_website": "VER DOCUMENTAÇÃO",
"when": "Agendar Execução"
},
"service": {
diff --git a/src/components/Buttons/DeviceActionDropdown/index.tsx b/src/components/Buttons/DeviceActionDropdown/index.tsx
index 4fe793c..5564e84 100644
--- a/src/components/Buttons/DeviceActionDropdown/index.tsx
+++ b/src/components/Buttons/DeviceActionDropdown/index.tsx
@@ -1,5 +1,16 @@
import React from 'react';
-import { Button, IconButton, Menu, MenuButton, MenuItem, MenuList, Spinner, Tooltip, useToast } from '@chakra-ui/react';
+import {
+ Button,
+ IconButton,
+ Menu,
+ MenuButton,
+ MenuItem,
+ MenuList,
+ Portal,
+ Spinner,
+ Tooltip,
+ useToast,
+} from '@chakra-ui/react';
import axios from 'axios';
import { Wrench } from 'phosphor-react';
import { useTranslation } from 'react-i18next';
@@ -21,6 +32,7 @@ interface Props {
onOpenEventQueue: (serialNumber: string) => void;
onOpenConfigureModal: (serialNumber: string) => void;
onOpenTelemetryModal: (serialNumber: string) => void;
+ onOpenScriptModal: (device: GatewayDevice) => void;
size?: 'sm' | 'md' | 'lg';
}
@@ -35,6 +47,7 @@ const DeviceActionDropdown = ({
onOpenEventQueue,
onOpenTelemetryModal,
onOpenConfigureModal,
+ onOpenScriptModal,
size,
}: Props) => {
const { t } = useTranslation();
@@ -67,6 +80,7 @@ const DeviceActionDropdown = ({
const handleOpenQueue = () => onOpenEventQueue(device.serialNumber);
const handleOpenConfigure = () => onOpenConfigureModal(device.serialNumber);
const handleOpenTelemetry = () => onOpenTelemetryModal(device.serialNumber);
+ const handleOpenScript = () => onOpenScriptModal(device);
const handleUpdateToLatest = () => {
updateToLatest.mutate(
{ keepRedirector: true },
@@ -124,7 +138,7 @@ const DeviceActionDropdown = ({
},
]);
},
- onError: (e: unknown) => {
+ onError: (e) => {
if (axios.isAxiosError(e)) {
toast({
id: `upgrade-to-latest-error-${device.serialNumber}`,
@@ -143,7 +157,7 @@ const DeviceActionDropdown = ({
const handleConnectClick = () => getRtty();
return (
-