[WIFI-12441] Added export button to device table

Signed-off-by: Charles <charles.bourque96@gmail.com>
This commit is contained in:
Charles
2023-04-18 10:58:26 +02:00
parent b870cf828a
commit efc80a183b
88 changed files with 7594 additions and 14746 deletions

10105
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "ucentral-client", "name": "ucentral-client",
"version": "2.10.0(15)", "version": "2.10.0(19)",
"description": "", "description": "",
"private": true, "private": true,
"main": "index.tsx", "main": "index.tsx",
@@ -15,83 +15,82 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@chakra-ui/icons": "^2.0.11", "@chakra-ui/icons": "^2.0.18",
"@chakra-ui/react": "^2.3.6", "@chakra-ui/react": "^2.3.6",
"@chakra-ui/theme-tools": "^2.0.12", "@chakra-ui/theme-tools": "^2.0.12",
"@chakra-ui/utils": "^2.0.11", "@chakra-ui/utils": "^2.0.14",
"@emotion/react": "^11.10.4", "@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.4", "@emotion/styled": "^11.10.6",
"@fontsource/inter": "^4.5.14", "@fontsource/inter": "^4.5.15",
"@googlemaps/react-wrapper": "^1.1.35", "@googlemaps/react-wrapper": "^1.1.35",
"@googlemaps/typescript-guards": "^2.0.3", "@googlemaps/typescript-guards": "^2.0.3",
"@react-spring/web": "^9.5.5", "@phosphor-icons/react": "^2.0.8",
"axios": "^1.1.3", "@react-spring/web": "^9.7.2",
"@tanstack/react-query": "^4.29.3",
"@tanstack/react-table": "^8.8.5",
"@textea/json-viewer": "^2.16.2",
"axios": "^1.3.5",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"chakra-react-select": "^4.6.0", "chakra-react-select": "^4.6.0",
"chart.js": "^3.9.1",
"dagre": "^0.8.5", "dagre": "^0.8.5",
"fast-equals": "^5.0.1",
"formik": "^2.2.9", "formik": "^2.2.9",
"fast-equals": "^4.0.3", "framer-motion": "^10.12.2",
"framer-motion": "^7.6.1", "i18next": "^22.4.14",
"i18next": "^22.0.0", "i18next-browser-languagedetector": "^7.0.1",
"i18next-browser-languagedetector": "^6.1.8", "i18next-http-backend": "^2.2.0",
"i18next-http-backend": "^1.4.4", "libphonenumber-js": "^1.10.26",
"libphonenumber-js": "^1.10.14",
"phosphor-react": "^1.4.1",
"prop-types": "^15.8.1", "prop-types": "^15.8.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-app-polyfill": "^3.0.0", "react-app-polyfill": "^3.0.0",
"react-chartjs-2": "^4.3.1", "react-chartjs-2": "^4.3.1",
"chart.js": "^3.9.1", "react-country-flag": "^3.1.0",
"react-country-flag": "^3.0.2",
"react-csv": "^2.2.2", "react-csv": "^2.2.2",
"react-datepicker": "^4.8.0", "react-datepicker": "^4.11.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"@textea/json-viewer": "^2.10.0", "react-fast-compare": "^3.2.1",
"react-fast-compare": "^3.2.0", "react-i18next": "^12.2.0",
"react-i18next": "^11.18.6",
"react-masonry-css": "^1.0.16", "react-masonry-css": "^1.0.16",
"@tanstack/react-query": "^4.12.0", "react-router-dom": "^6.10.0",
"@tanstack/react-table": "^8.7.9",
"react-router-dom": "^6.4.2",
"react-table": "^7.8.0", "react-table": "^7.8.0",
"react-virtualized-auto-sizer": "^1.0.7", "react-virtualized-auto-sizer": "^1.0.15",
"react-window": "^1.8.8", "react-window": "^1.8.9",
"source-map-explorer": "^2.5.3", "source-map-explorer": "^2.5.3",
"vite": "^3.1.8",
"typescript": "^4.8.4", "typescript": "^4.8.4",
"uuid": "^9.0.0", "uuid": "^9.0.0",
"vite": "^4.2.1",
"yup": "^0.32.11", "yup": "^0.32.11",
"zustand": "^4.1.2" "zustand": "^4.3.7"
}, },
"devDependencies": { "devDependencies": {
"@types/google.maps": "^3.51.0", "@types/google.maps": "^3.52.5",
"@types/node": "^18.11.2", "@types/node": "^18.15.11",
"@types/react": "^18.0.21", "@types/react": "^18.0.37",
"@types/react-csv": "^1.1.3", "@types/react-csv": "^1.1.3",
"@types/react-dom": "^18.0.6", "@types/react-datepicker": "4.10.0",
"@types/react-table": "^7.7.12", "@types/react-dom": "^18.0.11",
"@types/react-datepicker": "4.8.0", "@types/react-table": "^7.7.14",
"@types/uuid": "^8.3.4",
"@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-virtualized-auto-sizer": "^1.0.1",
"@types/react-window": "^1.8.5", "@types/react-window": "^1.8.5",
"eslint": "8.25.0", "@types/uuid": "^9.0.1",
"vite-tsconfig-paths": "^3.5.1", "@vitejs/plugin-react": "^3.1.0",
"lint-staged": "^13.0.3", "eslint": "8.38.0",
"@vitejs/plugin-react": "^2.1.0",
"vite-plugin-pwa": "^0.13.1",
"prettier": "^2.7.1",
"eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-airbnb-typescript": "^17.0.0",
"eslint-config-airbnb-typescript-prettier": "^5.0.0", "eslint-config-airbnb-typescript-prettier": "^5.0.0",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.8.0",
"eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-babel": "^5.3.1", "eslint-plugin-babel": "^5.3.1",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.6.1", "eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-no-inline-styles": "^1.0.5", "eslint-plugin-no-inline-styles": "^1.0.5",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.31.10", "eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0" "eslint-plugin-react-hooks": "^4.6.0",
"lint-staged": "^13.2.1",
"prettier": "^2.8.7",
"vite-tsconfig-paths": "^4.2.0"
}, },
"browserslist": { "browserslist": {
"production": [ "production": [

View File

@@ -241,6 +241,7 @@
"error_download": "Fehler beim Downloadversuch: {{e}}", "error_download": "Fehler beim Downloadversuch: {{e}}",
"errors": "Fehler", "errors": "Fehler",
"exit_fullscreen": "Ausgang", "exit_fullscreen": "Ausgang",
"export": "Export",
"finished": "Fertig", "finished": "Fertig",
"fullscreen": "Vollbildschirm", "fullscreen": "Vollbildschirm",
"general_error": "Fehler beim Verbinden mit dem Server. Bitte wenden Sie sich an Ihren Administrator.", "general_error": "Fehler beim Verbinden mit dem Server. Bitte wenden Sie sich an Ihren Administrator.",
@@ -1000,6 +1001,8 @@
"concurrent_devices": "Gleichzeitige Geräte", "concurrent_devices": "Gleichzeitige Geräte",
"controller": "Regler", "controller": "Regler",
"current_live_devices": "Aktuelle Live-Geräte", "current_live_devices": "Aktuelle Live-Geräte",
"currently_running_one": "Derzeit wird {{count}} Simulation ausgeführt",
"currently_running_other": "Derzeit laufen {{count}} Simulationen",
"delete_success": "Gelöschte Simulation!", "delete_success": "Gelöschte Simulation!",
"duration": "Dauer", "duration": "Dauer",
"error_devices": "Fehler Geräte", "error_devices": "Fehler Geräte",
@@ -1023,6 +1026,7 @@
"rx_messages": "Rx-Meldungen", "rx_messages": "Rx-Meldungen",
"sim_currently_running": "Simulation \"{{sim}}\" läuft", "sim_currently_running": "Simulation \"{{sim}}\" läuft",
"sim_history": "{{sim}} Vorherige Läufe", "sim_history": "{{sim}} Vorherige Läufe",
"simulated": "Simuliert",
"start": "Simulation starten", "start": "Simulation starten",
"start_success": "Simulationslauf gestartet!", "start_success": "Simulationslauf gestartet!",
"state_interval": "Zustandsintervall", "state_interval": "Zustandsintervall",
@@ -1089,6 +1093,7 @@
"drag_always_show": "Sie können diese Spalte nicht ausblenden, aber ihre Position ändern", "drag_always_show": "Sie können diese Spalte nicht ausblenden, aber ihre Position ändern",
"drag_explanation": "Ziehen und Ablegen zum Neuordnen und Ändern der Spaltensichtbarkeit", "drag_explanation": "Ziehen und Ablegen zum Neuordnen und Ändern der Spaltensichtbarkeit",
"drag_locked": "Diese Säule ist in ihrer Position arretiert", "drag_locked": "Diese Säule ist in ihrer Position arretiert",
"export_current_page": "Nur aktuelle Seite",
"first_page": "Erste Seite", "first_page": "Erste Seite",
"go_to_page": "Zur Seite gehen", "go_to_page": "Zur Seite gehen",
"hide_column": "verbergen", "hide_column": "verbergen",

View File

@@ -241,6 +241,7 @@
"error_download": "Error while trying to download: {{e}}", "error_download": "Error while trying to download: {{e}}",
"errors": "Errors", "errors": "Errors",
"exit_fullscreen": "Exit", "exit_fullscreen": "Exit",
"export": "Export",
"finished": "Finished", "finished": "Finished",
"fullscreen": "Fullscreen", "fullscreen": "Fullscreen",
"general_error": "Error connecting to the server. Please consult your administrator.", "general_error": "Error connecting to the server. Please consult your administrator.",
@@ -1000,6 +1001,8 @@
"concurrent_devices": "Concurrent Devices", "concurrent_devices": "Concurrent Devices",
"controller": "Controller", "controller": "Controller",
"current_live_devices": "Current Live Devices", "current_live_devices": "Current Live Devices",
"currently_running_one": "There is currently {{count}} simulation running",
"currently_running_other": "There are currently {{count}} simulations running",
"delete_success": "Deleted Simulation!", "delete_success": "Deleted Simulation!",
"duration": "Duration", "duration": "Duration",
"error_devices": "Error Devices", "error_devices": "Error Devices",
@@ -1023,6 +1026,7 @@
"rx_messages": "Rx Messages", "rx_messages": "Rx Messages",
"sim_currently_running": "Simulation \"{{sim}}\" in progress", "sim_currently_running": "Simulation \"{{sim}}\" in progress",
"sim_history": "{{sim}} Previous Runs", "sim_history": "{{sim}} Previous Runs",
"simulated": "Simulated",
"start": "Start Simulation", "start": "Start Simulation",
"start_success": "Started simulation run!", "start_success": "Started simulation run!",
"state_interval": "State Interval", "state_interval": "State Interval",
@@ -1089,6 +1093,7 @@
"drag_always_show": "You cannot hide this column but can change its position ", "drag_always_show": "You cannot hide this column but can change its position ",
"drag_explanation": "Drag and drop to reorder and change column visibility", "drag_explanation": "Drag and drop to reorder and change column visibility",
"drag_locked": "This column is locked in its position", "drag_locked": "This column is locked in its position",
"export_current_page": "Current Page Only",
"first_page": "First Page", "first_page": "First Page",
"go_to_page": "Go to page", "go_to_page": "Go to page",
"hide_column": "Hide", "hide_column": "Hide",

View File

@@ -241,6 +241,7 @@
"error_download": "Error al intentar descargar: {{e}}", "error_download": "Error al intentar descargar: {{e}}",
"errors": "Los errores", "errors": "Los errores",
"exit_fullscreen": "salida", "exit_fullscreen": "salida",
"export": "Exportar",
"finished": "terminado", "finished": "terminado",
"fullscreen": "Pantalla Completa", "fullscreen": "Pantalla Completa",
"general_error": "Error al conectar con el servidor. Consulte a su administrador.", "general_error": "Error al conectar con el servidor. Consulte a su administrador.",
@@ -1000,6 +1001,8 @@
"concurrent_devices": "Dispositivos concurrentes", "concurrent_devices": "Dispositivos concurrentes",
"controller": "Controlador", "controller": "Controlador",
"current_live_devices": "Dispositivos activos actuales", "current_live_devices": "Dispositivos activos actuales",
"currently_running_one": "Actualmente hay {{count}} simulación en ejecución",
"currently_running_other": "Actualmente hay {{count}} simulaciones ejecutándose",
"delete_success": "¡Simulación eliminada!", "delete_success": "¡Simulación eliminada!",
"duration": "Duración", "duration": "Duración",
"error_devices": "Dispositivos de error", "error_devices": "Dispositivos de error",
@@ -1023,6 +1026,7 @@
"rx_messages": "Mensajes prescritos", "rx_messages": "Mensajes prescritos",
"sim_currently_running": "Simulación \"{{sim}}\" en curso", "sim_currently_running": "Simulación \"{{sim}}\" en curso",
"sim_history": "{{sim}} ejecuciones anteriores", "sim_history": "{{sim}} ejecuciones anteriores",
"simulated": "Simulado",
"start": "Iniciar simulación", "start": "Iniciar simulación",
"start_success": "¡Ejecución de simulación iniciada!", "start_success": "¡Ejecución de simulación iniciada!",
"state_interval": "Intervalo de estado", "state_interval": "Intervalo de estado",
@@ -1089,6 +1093,7 @@
"drag_always_show": "No puede ocultar esta columna pero puede cambiar su posición", "drag_always_show": "No puede ocultar esta columna pero puede cambiar su posición",
"drag_explanation": "Arrastre y suelte para reordenar y cambiar la visibilidad de las columnas", "drag_explanation": "Arrastre y suelte para reordenar y cambiar la visibilidad de las columnas",
"drag_locked": "Esta columna está bloqueada en su posición.", "drag_locked": "Esta columna está bloqueada en su posición.",
"export_current_page": "Solo página actual",
"first_page": "Primera pagina", "first_page": "Primera pagina",
"go_to_page": "Ir a la página", "go_to_page": "Ir a la página",
"hide_column": "Esconder", "hide_column": "Esconder",

View File

@@ -241,6 +241,7 @@
"error_download": "Erreur lors de la tentative de téléchargement : {{e}}", "error_download": "Erreur lors de la tentative de téléchargement : {{e}}",
"errors": "les erreurs", "errors": "les erreurs",
"exit_fullscreen": "Sortie", "exit_fullscreen": "Sortie",
"export": "Exportation",
"finished": "fini", "finished": "fini",
"fullscreen": "Plein écran", "fullscreen": "Plein écran",
"general_error": "Erreur de connexion au serveur. Veuillez consulter votre administrateur.", "general_error": "Erreur de connexion au serveur. Veuillez consulter votre administrateur.",
@@ -1000,6 +1001,8 @@
"concurrent_devices": "Périphériques simultanés", "concurrent_devices": "Périphériques simultanés",
"controller": "Manette", "controller": "Manette",
"current_live_devices": "Appareils en direct actuels", "current_live_devices": "Appareils en direct actuels",
"currently_running_one": "Il y a actuellement {{count}} simulation en cours",
"currently_running_other": "Il y a actuellement {{count}} simulations en cours d'exécution",
"delete_success": "Simulation supprimée !", "delete_success": "Simulation supprimée !",
"duration": "Durée", "duration": "Durée",
"error_devices": "Périphériques d'erreur", "error_devices": "Périphériques d'erreur",
@@ -1023,6 +1026,7 @@
"rx_messages": "Messages reçus", "rx_messages": "Messages reçus",
"sim_currently_running": "Simulation \"{{sim}}\" en cours", "sim_currently_running": "Simulation \"{{sim}}\" en cours",
"sim_history": "{{sim}} courses précédentes", "sim_history": "{{sim}} courses précédentes",
"simulated": "Simulé",
"start": "Démarrer la simulation", "start": "Démarrer la simulation",
"start_success": "Lancement de la simulation !", "start_success": "Lancement de la simulation !",
"state_interval": "Intervalle d'état", "state_interval": "Intervalle d'état",
@@ -1089,6 +1093,7 @@
"drag_always_show": "Vous ne pouvez pas masquer cette colonne, mais vous pouvez modifier sa position", "drag_always_show": "Vous ne pouvez pas masquer cette colonne, mais vous pouvez modifier sa position",
"drag_explanation": "Glisser-déposer pour réorganiser et modifier la visibilité des colonnes", "drag_explanation": "Glisser-déposer pour réorganiser et modifier la visibilité des colonnes",
"drag_locked": "Cette colonne est verrouillée dans sa position", "drag_locked": "Cette colonne est verrouillée dans sa position",
"export_current_page": "Page actuelle uniquement",
"first_page": "Première page", "first_page": "Première page",
"go_to_page": "Aller à la page", "go_to_page": "Aller à la page",
"hide_column": "Cacher", "hide_column": "Cacher",

View File

@@ -241,6 +241,7 @@
"error_download": "Erro ao tentar fazer o download: {{e}}", "error_download": "Erro ao tentar fazer o download: {{e}}",
"errors": "Erros", "errors": "Erros",
"exit_fullscreen": "Saída", "exit_fullscreen": "Saída",
"export": "Exportar",
"finished": "acabado", "finished": "acabado",
"fullscreen": "Tela cheia", "fullscreen": "Tela cheia",
"general_error": "Erro ao se conectar ao servidor. Consulte seu administrador.", "general_error": "Erro ao se conectar ao servidor. Consulte seu administrador.",
@@ -1000,6 +1001,8 @@
"concurrent_devices": "Dispositivos Simultâneos", "concurrent_devices": "Dispositivos Simultâneos",
"controller": "Controlador", "controller": "Controlador",
"current_live_devices": "Dispositivos ativos atuais", "current_live_devices": "Dispositivos ativos atuais",
"currently_running_one": "Atualmente, há {{count}} simulação em execução",
"currently_running_other": "Existem atualmente {{count}} simulações em execução",
"delete_success": "Simulação excluída!", "delete_success": "Simulação excluída!",
"duration": "Duração", "duration": "Duração",
"error_devices": "Dispositivos de Erro", "error_devices": "Dispositivos de Erro",
@@ -1023,6 +1026,7 @@
"rx_messages": "Mensagens Rx", "rx_messages": "Mensagens Rx",
"sim_currently_running": "Simulação \"{{sim}}\" em andamento", "sim_currently_running": "Simulação \"{{sim}}\" em andamento",
"sim_history": "{{sim}} execuções anteriores", "sim_history": "{{sim}} execuções anteriores",
"simulated": "Simulado",
"start": "Iniciar simulação", "start": "Iniciar simulação",
"start_success": "Corrida de simulação iniciada!", "start_success": "Corrida de simulação iniciada!",
"state_interval": "Intervalo de estado", "state_interval": "Intervalo de estado",
@@ -1089,6 +1093,7 @@
"drag_always_show": "Você não pode ocultar esta coluna, mas pode alterar sua posição", "drag_always_show": "Você não pode ocultar esta coluna, mas pode alterar sua posição",
"drag_explanation": "Arraste e solte para reordenar e alterar a visibilidade da coluna", "drag_explanation": "Arraste e solte para reordenar e alterar a visibilidade da coluna",
"drag_locked": "Esta coluna está travada em sua posição", "drag_locked": "Esta coluna está travada em sua posição",
"export_current_page": "Somente página atual",
"first_page": "Primeira Página", "first_page": "Primeira Página",
"go_to_page": "Vá para página", "go_to_page": "Vá para página",
"hide_column": "Ocultar", "hide_column": "Ocultar",

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { Warning } from 'phosphor-react'; import { Warning } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ThemeProps } from 'models/Theme'; import { ThemeProps } from 'models/Theme';

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { IconButton, SpaceProps } from '@chakra-ui/react'; import { IconButton, SpaceProps } from '@chakra-ui/react';
import { X } from 'phosphor-react'; import { X } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface CloseButtonProps extends SpaceProps { export interface CloseButtonProps extends SpaceProps {

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, Tooltip, useBreakpoint, SpaceProps } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint, SpaceProps } from '@chakra-ui/react';
import { Plus } from 'phosphor-react'; import { Plus } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface CreateButtonProps extends SpaceProps { export interface CreateButtonProps extends SpaceProps {

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { Trash } from 'phosphor-react'; import { Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface DeleteButtonProps { export interface DeleteButtonProps {

View File

@@ -11,7 +11,7 @@ import {
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import axios from 'axios'; import axios from 'axios';
import { Barcode, Power, TerminalWindow, WifiHigh, Wrench } from 'phosphor-react'; import { Barcode, Power, TerminalWindow, WifiHigh, Wrench } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useControllerStore } from 'contexts/ControllerSocketProvider/useStore'; import { useControllerStore } from 'contexts/ControllerSocketProvider/useStore';
import { useBlinkDevice, useGetDeviceRtty } from 'hooks/Network/Devices'; import { useBlinkDevice, useGetDeviceRtty } from 'hooks/Network/Devices';

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { IconButton, Button, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { IconButton, Button, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { Pen } from 'phosphor-react'; import { Pen } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface EditButtonProps { export interface EditButtonProps {

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, ThemeTypings, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { Button, IconButton, ThemeTypings, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { ArrowsClockwise } from 'phosphor-react'; import { ArrowsClockwise } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface RefreshButtonProps { export interface RefreshButtonProps {

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { FloppyDisk } from 'phosphor-react'; import { FloppyDisk } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface SaveButtonProps export interface SaveButtonProps

View File

@@ -1,6 +1,6 @@
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { ArrowRight, FloppyDisk } from 'phosphor-react'; import { ArrowRight, FloppyDisk } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
export interface StepButtonProps { export interface StepButtonProps {

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, Tooltip, useBreakpoint, useDisclosure } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint, useDisclosure } from '@chakra-ui/react';
import { Pencil, X } from 'phosphor-react'; import { Pencil, X } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ConfirmCloseAlertModal } from '../../Modals/ConfirmCloseAlert'; import { ConfirmCloseAlertModal } from '../../Modals/ConfirmCloseAlert';

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react'; import { Button, IconButton, Tooltip, useBreakpoint } from '@chakra-ui/react';
import { Warning } from 'phosphor-react'; import { Warning } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ThemeProps } from 'models/Theme'; import { ThemeProps } from 'models/Theme';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Box, Heading, IconButton, Spacer, Tooltip, useDisclosure } from '@chakra-ui/react'; import { Box, Heading, IconButton, Spacer, Tooltip, useDisclosure } from '@chakra-ui/react';
import { ArrowsOut, Info } from 'phosphor-react'; import { ArrowsOut, Info } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Card } from '../Card'; import { Card } from '../Card';
import { CardBody } from '../Card/CardBody'; import { CardBody } from '../Card/CardBody';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { As, Flex, Heading, Icon, Spacer, Text, Tooltip, useColorModeValue } from '@chakra-ui/react'; import { As, Flex, Heading, Icon, Spacer, Text, Tooltip, useColorModeValue } from '@chakra-ui/react';
import { Info } from 'phosphor-react'; import { Info } from '@phosphor-icons/react';
import { Card } from '../Card'; import { Card } from '../Card';
type Props = { type Props = {

View File

@@ -1,6 +1,6 @@
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { Button, Checkbox, IconButton, Menu, MenuButton, MenuItem, MenuList, useBreakpoint } from '@chakra-ui/react'; import { Button, Checkbox, IconButton, Menu, MenuButton, MenuItem, MenuList, useBreakpoint } from '@chakra-ui/react';
import { FunnelSimple } from 'phosphor-react'; import { FunnelSimple } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { useAuth } from 'contexts/AuthProvider'; import { useAuth } from 'contexts/AuthProvider';

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { Box, Checkbox, IconButton, Menu, MenuButton, MenuItem, MenuList, Tooltip } from '@chakra-ui/react'; import { Box, Checkbox, IconButton, Menu, MenuButton, MenuItem, MenuList, Tooltip } from '@chakra-ui/react';
import { VisibilityState } from '@tanstack/react-table'; import { VisibilityState } from '@tanstack/react-table';
import { FunnelSimple } from 'phosphor-react'; import { FunnelSimple } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { DataGridColumn } from './useDataGrid'; import { DataGridColumn } from './useDataGrid';

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { Icon } from '@chakra-ui/react'; import { Icon } from '@chakra-ui/react';
import { SortDirection } from '@tanstack/react-table'; import { SortDirection } from '@tanstack/react-table';
import { ArrowDown, ArrowUp, Circle } from 'phosphor-react'; import { ArrowDown, ArrowUp, Circle } from '@phosphor-icons/react';
export type DataGridSortIconProps = { export type DataGridSortIconProps = {
sortInfo: false | SortDirection; sortInfo: false | SortDirection;

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Icon } from '@chakra-ui/react'; import { Icon } from '@chakra-ui/react';
import { ArrowDown, ArrowUp, Circle } from 'phosphor-react'; import { ArrowDown, ArrowUp, Circle } from '@phosphor-icons/react';
interface Props { interface Props {
isSorted: boolean; isSorted: boolean;

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Icon } from '@chakra-ui/react'; import { Icon } from '@chakra-ui/react';
import { ArrowDown, ArrowUp, Circle } from 'phosphor-react'; import { ArrowDown, ArrowUp, Circle } from '@phosphor-icons/react';
interface Props { interface Props {
isSorted: boolean; isSorted: boolean;

View File

@@ -1,7 +1,7 @@
import React, { useCallback, useMemo, useState } from 'react'; import React, { useCallback, useMemo, useState } from 'react';
import { AddIcon } from '@chakra-ui/icons'; import { AddIcon } from '@chakra-ui/icons';
import { IconButton, Input, InputGroup, InputRightElement, Tooltip } from '@chakra-ui/react'; import { IconButton, Input, InputGroup, InputRightElement, Tooltip } from '@chakra-ui/react';
import { Trash } from 'phosphor-react'; import { Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { DataTable } from '../../../DataTables/DataTable'; import { DataTable } from '../../../DataTables/DataTable';

View File

@@ -9,7 +9,7 @@ import {
PopoverHeader, PopoverHeader,
PopoverTrigger, PopoverTrigger,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Question } from 'phosphor-react'; import { Question } from '@phosphor-icons/react';
export type InfoPopoverProps = { export type InfoPopoverProps = {
title: string; title: string;

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { InfoIcon } from '@chakra-ui/icons'; import { InfoIcon } from '@chakra-ui/icons';
import { Heading, IconButton, LayoutProps, LightMode, SpaceProps, Spacer, Tooltip } from '@chakra-ui/react'; import { Heading, IconButton, LayoutProps, LightMode, SpaceProps, Spacer, Tooltip } from '@chakra-ui/react';
import { MagnifyingGlass } from 'phosphor-react'; import { MagnifyingGlass } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';

View File

@@ -13,7 +13,7 @@ import {
Textarea, Textarea,
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { ClipboardText } from 'phosphor-react'; import { ClipboardText } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { SaveButton } from '../../Buttons/SaveButton'; import { SaveButton } from '../../Buttons/SaveButton';
import { Modal } from '../Modal'; import { Modal } from '../Modal';

View File

@@ -11,7 +11,7 @@ import {
Textarea, Textarea,
useBoolean, useBoolean,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { UploadSimple } from 'phosphor-react'; import { UploadSimple } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { useFastField } from 'hooks/useFastField'; import { useFastField } from 'hooks/useFastField';

View File

@@ -16,7 +16,7 @@ import {
import { useQueryClient } from '@tanstack/react-query'; import { useQueryClient } from '@tanstack/react-query';
import axios from 'axios'; import axios from 'axios';
import { FormikProps } from 'formik'; import { FormikProps } from 'formik';
import { ArrowLeft } from 'phosphor-react'; import { ArrowLeft } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import ConfirmIgnoreCommand from '../ConfirmIgnoreCommand'; import ConfirmIgnoreCommand from '../ConfirmIgnoreCommand';

View File

@@ -12,7 +12,7 @@ import {
Spinner, Spinner,
Switch, Switch,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { ArrowLeft } from 'phosphor-react'; import { ArrowLeft } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Modal } from '../Modal'; import { Modal } from '../Modal';
import { useDownloadTrace, useTrace } from 'hooks/Network/Trace'; import { useDownloadTrace, useTrace } from 'hooks/Network/Trace';

View File

@@ -14,7 +14,7 @@ import {
useColorMode, useColorMode,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { JsonViewer } from '@textea/json-viewer'; import { JsonViewer } from '@textea/json-viewer';
import { ArrowLeft } from 'phosphor-react'; import { ArrowLeft } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';

View File

@@ -1,6 +1,6 @@
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from 'react';
import { Modal, ModalOverlay, ModalContent, ModalBody, Center, Spinner } from '@chakra-ui/react'; import { Modal, ModalOverlay, ModalContent, ModalBody, Center, Spinner } from '@chakra-ui/react';
import { ArrowLeft, Download, Gauge } from 'phosphor-react'; import { ArrowLeft, Download, Gauge } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv'; import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import ConfirmIgnoreCommand from '../ConfirmIgnoreCommand'; import ConfirmIgnoreCommand from '../ConfirmIgnoreCommand';

View File

@@ -20,7 +20,7 @@ import {
Tooltip, Tooltip,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { TOptions } from 'i18next'; import { TOptions } from 'i18next';
import { X } from 'phosphor-react'; import { X } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { ProvisioningVenueNotificationMessage } from '../../utils'; import { ProvisioningVenueNotificationMessage } from '../../utils';

View File

@@ -122,9 +122,9 @@ export const getHoursAgo = (hoursAgo = 1, date = new Date()) => {
export const dateForFilename = (dateString: number) => { export const dateForFilename = (dateString: number) => {
const convertedTimestamp = unixToDateString(dateString); const convertedTimestamp = unixToDateString(dateString);
const date = new Date(convertedTimestamp); const date = new Date(convertedTimestamp);
return `${date.getFullYear()}_${twoDigitNumber(date.getMonth() + 1)}_${twoDigitNumber( return `${date.getFullYear()}.${twoDigitNumber(date.getMonth() + 1)}.${twoDigitNumber(
date.getDate(), date.getDate(),
)}_${twoDigitNumber(date.getHours())}h${twoDigitNumber(date.getMinutes())}m${twoDigitNumber(date.getSeconds())}s`; )}-${twoDigitNumber(date.getHours())}.${twoDigitNumber(date.getMinutes())}.${twoDigitNumber(date.getSeconds())}`;
}; };
export const formatDaysAgoCompact = (d1: number, d2: number = new Date().getTime()) => { export const formatDaysAgoCompact = (d1: number, d2: number = new Date().getTime()) => {

View File

@@ -10,7 +10,7 @@ import {
Tooltip, Tooltip,
VStack, VStack,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { ArrowSquareDown, ArrowSquareUp, Clock } from 'phosphor-react'; import { ArrowSquareDown, ArrowSquareUp, Clock } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';
import { compactSecondsToDetailed, minimalSecondsToDetailed } from 'helpers/dateFormatting'; import { compactSecondsToDetailed, minimalSecondsToDetailed } from 'helpers/dateFormatting';

View File

@@ -18,7 +18,7 @@ import {
useBreakpoint, useBreakpoint,
Portal, Portal,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { ArrowCircleLeft } from 'phosphor-react'; import { ArrowCircleLeft } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useAuth } from 'contexts/AuthProvider'; import { useAuth } from 'contexts/AuthProvider';

View File

@@ -17,7 +17,7 @@ import {
useDisclosure, useDisclosure,
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { MagnifyingGlass, Trash } from 'phosphor-react'; import { MagnifyingGlass, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { DefaultConfigurationResponse, useDeleteDefaultConfig } from 'hooks/Network/DefaultConfigurations'; import { DefaultConfigurationResponse, useDeleteDefaultConfig } from 'hooks/Network/DefaultConfigurations';
import { AxiosError } from 'models/Axios'; import { AxiosError } from 'models/Axios';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Button, Grid, GridItem, Heading, Link, Spacer, useClipboard, useDisclosure } from '@chakra-ui/react'; import { Button, Grid, GridItem, Heading, Link, Spacer, useClipboard, useDisclosure } from '@chakra-ui/react';
import { Eye, EyeSlash } from 'phosphor-react'; import { Eye, EyeSlash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import ViewCapabilitiesModal from './ViewCapabilitiesModal'; import ViewCapabilitiesModal from './ViewCapabilitiesModal';
import ViewConfigurationModal from './ViewConfigurationModal'; import ViewConfigurationModal from './ViewConfigurationModal';

View File

@@ -11,7 +11,7 @@ import {
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Wrapper } from '@googlemaps/react-wrapper'; import { Wrapper } from '@googlemaps/react-wrapper';
import { Globe } from 'phosphor-react'; import { Globe } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { GoogleMap } from 'components/Maps/GoogleMap'; import { GoogleMap } from 'components/Maps/GoogleMap';
import { GoogleMapMarker } from 'components/Maps/GoogleMap/Marker'; import { GoogleMapMarker } from 'components/Maps/GoogleMap/Marker';

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ResponsiveButton } from 'components/Buttons/ResponsiveButton'; import { ResponsiveButton } from 'components/Buttons/ResponsiveButton';
import { DeviceCommandHistory, useDownloadScriptResult } from 'hooks/Network/Commands'; import { DeviceCommandHistory, useDownloadScriptResult } from 'hooks/Network/Commands';

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ResponsiveButton } from 'components/Buttons/ResponsiveButton'; import { ResponsiveButton } from 'components/Buttons/ResponsiveButton';
import { DeviceCommandHistory } from 'hooks/Network/Commands'; import { DeviceCommandHistory } from 'hooks/Network/Commands';

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv'; import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ResponsiveButton } from 'components/Buttons/ResponsiveButton'; import { ResponsiveButton } from 'components/Buttons/ResponsiveButton';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Badge, Box, HStack, IconButton, Tooltip, useDisclosure, useToast } from '@chakra-ui/react'; import { Badge, Box, HStack, IconButton, Tooltip, useDisclosure, useToast } from '@chakra-ui/react';
import { MagnifyingGlass, Trash } from 'phosphor-react'; import { MagnifyingGlass, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import FormattedDate from 'components/InformationDisplays/FormattedDate'; import FormattedDate from 'components/InformationDisplays/FormattedDate';
import { uppercaseFirstLetter } from 'helpers/stringHelper'; import { uppercaseFirstLetter } from 'helpers/stringHelper';

View File

@@ -16,7 +16,7 @@ import {
Tooltip, Tooltip,
useBreakpoint, useBreakpoint,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Clock, Prohibit } from 'phosphor-react'; import { Clock, Prohibit } from '@phosphor-icons/react';
import ReactDatePicker from 'react-datepicker'; import ReactDatePicker from 'react-datepicker';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { CloseButton } from 'components/Buttons/CloseButton'; import { CloseButton } from 'components/Buttons/CloseButton';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Box, IconButton, Text, useDisclosure } from '@chakra-ui/react'; import { Box, IconButton, Text, useDisclosure } from '@chakra-ui/react';
import { MagnifyingGlass } from 'phosphor-react'; import { MagnifyingGlass } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import DetailedLogViewModal from './DetailedLogViewModal'; import DetailedLogViewModal from './DetailedLogViewModal';
import FormattedDate from 'components/InformationDisplays/FormattedDate'; import FormattedDate from 'components/InformationDisplays/FormattedDate';

View File

@@ -18,7 +18,7 @@ import {
useToast, useToast,
useBreakpoint, useBreakpoint,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Plus } from 'phosphor-react'; import { Plus } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';
import { CardBody } from 'components/Containers/Card/CardBody'; import { CardBody } from 'components/Containers/Card/CardBody';

View File

@@ -11,7 +11,7 @@ import {
Tooltip, Tooltip,
UnorderedList, UnorderedList,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { LockSimple, LockSimpleOpen } from 'phosphor-react'; import { LockSimple, LockSimpleOpen } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';
import { CardBody } from 'components/Containers/Card/CardBody'; import { CardBody } from 'components/Containers/Card/CardBody';

View File

@@ -16,7 +16,7 @@ import {
Tooltip, Tooltip,
useBreakpoint, useBreakpoint,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Clock, Prohibit } from 'phosphor-react'; import { Clock, Prohibit } from '@phosphor-icons/react';
import ReactDatePicker from 'react-datepicker'; import ReactDatePicker from 'react-datepicker';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { CloseButton } from 'components/Buttons/CloseButton'; import { CloseButton } from 'components/Buttons/CloseButton';

View File

@@ -16,7 +16,7 @@ import {
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { JsonViewer } from '@textea/json-viewer'; import { JsonViewer } from '@textea/json-viewer';
import { ClockCounterClockwise } from 'phosphor-react'; import { ClockCounterClockwise } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { RefreshButton } from 'components/Buttons/RefreshButton'; import { RefreshButton } from 'components/Buttons/RefreshButton';
import { LoadingOverlay } from 'components/LoadingOverlay'; import { LoadingOverlay } from 'components/LoadingOverlay';

View File

@@ -17,7 +17,7 @@ import {
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { JsonViewer } from '@textea/json-viewer'; import { JsonViewer } from '@textea/json-viewer';
import { ListDashes } from 'phosphor-react'; import { ListDashes } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { RefreshButton } from 'components/Buttons/RefreshButton'; import { RefreshButton } from 'components/Buttons/RefreshButton';
import FormattedDate from 'components/InformationDisplays/FormattedDate'; import FormattedDate from 'components/InformationDisplays/FormattedDate';

View File

@@ -14,7 +14,7 @@ import {
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { JsonViewer } from '@textea/json-viewer'; import { JsonViewer } from '@textea/json-viewer';
import { Barcode } from 'phosphor-react'; import { Barcode } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Modal } from 'components/Modals/Modal'; import { Modal } from 'components/Modals/Modal';
import { DeviceConfiguration } from 'models/Device'; import { DeviceConfiguration } from 'models/Device';

View File

@@ -22,7 +22,7 @@ import {
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import axios from 'axios'; import axios from 'axios';
import { Heart, HeartBreak, LockSimple, LockSimpleOpen, WifiHigh, WifiSlash } from 'phosphor-react'; import { Heart, HeartBreak, LockSimple, LockSimpleOpen, WifiHigh, WifiSlash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import Masonry from 'react-masonry-css'; import Masonry from 'react-masonry-css';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';

View File

@@ -17,7 +17,7 @@ import {
useDisclosure, useDisclosure,
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { MagnifyingGlass, Pen, Trash } from 'phosphor-react'; import { MagnifyingGlass, Pen, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { BlacklistDevice, useDeleteBlacklistDevice } from 'hooks/Network/Blacklist'; import { BlacklistDevice, useDeleteBlacklistDevice } from 'hooks/Network/Blacklist';

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { Heart, Warning } from 'phosphor-react'; import { Heart, Warning } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import SimpleIconStatDisplay from 'components/Containers/SimpleIconStatDisplay'; import SimpleIconStatDisplay from 'components/Containers/SimpleIconStatDisplay';
import { ControllerDashboardHealth } from 'hooks/Network/Controller'; import { ControllerDashboardHealth } from 'hooks/Network/Controller';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Alert, AlertDescription, AlertIcon, AlertTitle, Box, Center, Spacer, Spinner } from '@chakra-ui/react'; import { Alert, AlertDescription, AlertIcon, AlertTitle, Box, Center, Spacer, Spinner } from '@chakra-ui/react';
import { Clock, WifiHigh } from 'phosphor-react'; import { Clock, WifiHigh } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import Masonry from 'react-masonry-css'; import Masonry from 'react-masonry-css';
import AssociationsPieChart from './AssociationsPieChart'; import AssociationsPieChart from './AssociationsPieChart';

View File

@@ -17,7 +17,7 @@ import {
Tooltip, Tooltip,
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { MagnifyingGlass, Trash } from 'phosphor-react'; import { MagnifyingGlass, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import DeviceActionDropdown from 'components/Buttons/DeviceActionDropdown'; import DeviceActionDropdown from 'components/Buttons/DeviceActionDropdown';
import { DeviceWithStatus, useDeleteDevice } from 'hooks/Network/Devices'; import { DeviceWithStatus, useDeleteDevice } from 'hooks/Network/Devices';

View File

@@ -0,0 +1,146 @@
import * as React from 'react';
import { Box, Button, Center, HStack, Heading, IconButton, Progress, Tooltip, useDisclosure } from '@chakra-ui/react';
import { Download, Export } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next';
import { ExportedDeviceInfo, getAllExportedDevicesInfo, getSelectExportedDevicesInfo } from './utils';
import { ResponsiveButton } from 'components/Buttons/ResponsiveButton';
import { Modal } from 'components/Modals/Modal';
import { dateForFilename } from 'helpers/dateFormatting';
const HEADER_MAPPING: { key: keyof ExportedDeviceInfo; label: string }[] = [
{ key: 'serialNumber', label: 'Serial Number' },
{ key: 'connected', label: 'Connected' },
{ key: 'firmware', label: 'Firmware' },
{ key: 'memory', label: 'Memory (%)' },
{ key: 'load', label: 'Load (%)' },
{ key: 'temperature', label: 'Temperature (°C)' },
{ key: 'sanity', label: 'Sanity (%)' },
{ key: 'revision', label: 'Revision' },
{ key: 'ip', label: 'IP Address' },
{ key: 'provisioning', label: 'Provisioning' },
{ key: 'radiusSessions', label: 'Radius Sessions' },
{ key: 'uptime', label: 'Uptime (s)' },
{ key: 'lastContact', label: 'Last Contact (UTC)' },
{ key: 'lastUpgrade', label: 'Last Upgrade (UTC)' },
{ key: 'rx', label: 'RX (MB)' },
{ key: 'tx', label: 'TX (MB)' },
{ key: 'twoG', label: '2G Associations' },
{ key: 'fiveG', label: '5G Associations' },
{ key: 'sixG', label: '6G Associations' },
{ key: 'certificateExpiry', label: 'Certificate Expiry (UTC)' },
];
type Status = {
progress: number;
status: 'loading-all' | 'loading-select' | 'success' | 'error' | 'idle';
error?: string;
lastResults?: ExportedDeviceInfo[];
};
type Props = {
currentPageSerialNumbers: string[];
};
const ExportDevicesTableButton = ({ currentPageSerialNumbers }: Props) => {
const { t } = useTranslation();
const modalProps = useDisclosure();
const [status, setStatus] = React.useState<Status>({
progress: 0,
status: 'idle',
});
const setProgress = (progress: number) => {
setStatus((prev) => ({ ...prev, progress }));
};
const handleAllClick = async () => {
setStatus((prev) => ({ ...prev, error: undefined, lastResults: undefined, status: 'loading-all', progress: 0 }));
getAllExportedDevicesInfo(setProgress)
.then((result) => {
setStatus((prev) => ({ ...prev, status: 'success', lastResults: result }));
})
.catch((error) => {
setStatus((prev) => ({ ...prev, status: 'error', error }));
});
};
const handleCurrentPageClick = async () => {
setStatus((prev) => ({ ...prev, error: undefined, lastResults: undefined, status: 'loading-select', progress: 0 }));
getSelectExportedDevicesInfo(currentPageSerialNumbers, setProgress)
.then((result) => {
setStatus((prev) => ({ ...prev, status: 'success', lastResults: result }));
})
.catch((error) => {
setStatus((prev) => ({ ...prev, status: 'error', error }));
});
};
const onOpen = () => {
setStatus({ progress: 0, status: 'idle' });
modalProps.onOpen();
};
return (
<>
<Tooltip label={t('common.export')}>
<IconButton aria-label={t('common.export')} icon={<Export size={20} />} colorScheme="blue" onClick={onOpen} />
</Tooltip>
<Modal {...modalProps} title={t('common.export')}>
<Box>
<Center mb={8}>
<HStack>
<Button
onClick={handleAllClick}
colorScheme="gray"
isDisabled={status.status.includes('loading')}
isLoading={status.status === 'loading-all'}
>
{t('devices.all')} {t('devices.title')}
</Button>
<Button
onClick={handleCurrentPageClick}
colorScheme="gray"
isDisabled={currentPageSerialNumbers.length === 0 || status.status.includes('loading')}
isLoading={status.status === 'loading-select'}
>
{t('table.export_current_page')} ({currentPageSerialNumbers.length})
</Button>
</HStack>
</Center>
{status.status.includes('loading') || status.status === 'success' ? (
<Box>
<Center>
<Heading size="sm">{Math.round(status.progress)}%</Heading>
</Center>
<Box px={8}>
<Progress
isIndeterminate={status.progress === 0}
value={status.progress}
colorScheme={status.progress !== 100 ? 'blue' : 'green'}
hasStripe={status.progress !== 100}
isAnimated={status.progress !== 100}
/>
</Box>
<Center my={8} hidden={!status.lastResults}>
<CSVLink
filename={`devices_export_${dateForFilename(new Date().getTime() / 1000)}.csv`}
data={status.lastResults ?? []}
headers={HEADER_MAPPING}
>
<ResponsiveButton
color="blue"
icon={<Download size={20} />}
isCompact={false}
label={t('common.download')}
onClick={() => {}}
/>
</CSVLink>
</Center>
</Box>
) : null}
</Box>
</Modal>
</>
);
};
export default ExportDevicesTableButton;

View File

@@ -0,0 +1,209 @@
import { axiosGw, axiosProv } from 'constants/axiosInstances';
import { DeviceWithStatus } from 'hooks/Network/Devices';
import { InventoryTag } from 'hooks/Network/Inventory';
export type ExportedDeviceInfo = {
serialNumber: string;
connected: 'true' | 'false';
firmware: string;
memory: number;
load: number;
temperature: number;
sanity: number;
revision: string;
ip: string;
/** Venue, Entity or subscriber name */
provisioning: string;
radiusSessions: number;
/** Uptime in seconds */
uptime: number;
/** Last Contact as date */
lastContact: string;
/** Last Upgrade as date */
lastUpgrade: string;
/** Rx MBs */
rx: number;
/** Tx MBs */
tx: number;
twoG: number;
fiveG: number;
sixG: number;
/** Expiry as date */
certificateExpiry: string;
};
const getDevicesProvisioningStatus = async (serialNumbers: string[]) =>
serialNumbers.length === 0
? []
: axiosProv
.get(`inventory?withExtendedInfo=true&select=${serialNumbers}`)
.then(({ data }: { data: { taglist: InventoryTag[] } }) =>
serialNumbers.map((serialNumber) => {
const found = data.taglist.find((tag) => tag.serialNumber === serialNumber);
let provisioning = 'Not Found';
if (found) {
if (found.entity.length > 0) provisioning = found.extendedInfo?.entity?.name ?? found.entity;
else if (found.venue.length > 0) provisioning = found.extendedInfo?.venue?.name ?? found.venue;
else if (found.subscriber.length > 0)
provisioning = found.extendedInfo?.subscriber?.name ?? found.subscriber;
}
return {
serialNumber,
provisioning,
};
}),
);
const getDeviceGatewayInfo = (limit: number, offset: number) =>
axiosGw
.get(`devices?deviceWithStatus=true&limit=${limit}&offset=${offset}`)
.then((response) => response.data) as Promise<{ devicesWithStatus: DeviceWithStatus[] }>;
const getAllGatewayDeviceInfo = async (
count: number,
initialProgress: number,
setProgress: (progress: number) => void,
) => {
const progressStep = (90 - initialProgress) / Math.ceil(count / 100);
let newProgress = initialProgress;
let offset = 0;
let devices: DeviceWithStatus[] = [];
let devicesResponse: { devicesWithStatus: DeviceWithStatus[] };
do {
// eslint-disable-next-line no-await-in-loop
devicesResponse = await getDeviceGatewayInfo(100, offset);
devices = devices.concat(devicesResponse.devicesWithStatus);
setProgress((newProgress += progressStep));
offset += 100;
} while (devicesResponse.devicesWithStatus.length === 100);
return devices;
};
export const getAllExportedDevicesInfo = async (setProgress: (progress: number) => void) => {
// Base Setup
setProgress(0);
const devicesCount = await axiosGw.get('devices?countOnly=true').then((response) => response.data.count as number);
setProgress(10);
if (devicesCount === 0) {
setProgress(100);
return [];
}
// Get Devices Info
const devices = await getAllGatewayDeviceInfo(devicesCount, 10, setProgress);
const serialNumbers = devices
.filter((device) => device.entity.length > 0 || device.venue.length > 0 || device.subscriber.length > 0)
.map((device) => device.serialNumber);
const provisioningStatus = await getDevicesProvisioningStatus(serialNumbers);
setProgress(95);
const unixToStr = (unixValue: number) => {
try {
return new Date(unixValue * 1000).toISOString();
} catch (e) {
return '';
}
};
const exportedDevicesInfo: ExportedDeviceInfo[] = devices.map((device) => {
const provisioning = provisioningStatus.find((status) => status.serialNumber === device.serialNumber)?.provisioning;
return {
serialNumber: device.serialNumber,
connected: device.connected ? 'true' : 'false',
firmware: device.firmware,
memory: device.memoryUsed,
load: device.load,
temperature: device.temperature,
sanity: device.sanity,
revision: device.compatible,
ip: device.ipAddress.length > 0 ? device.ipAddress : '',
provisioning: provisioning ?? '',
radiusSessions: typeof device.hasRADIUSSessions === 'number' ? device.hasRADIUSSessions : 0,
uptime: !device.connected || device.started === 0 ? 0 : Math.floor(Date.now() / 1000 - device.started),
lastContact: typeof device.lastContact === 'string' ? '' : unixToStr(device.lastContact),
lastUpgrade: typeof device.lastFWUpdate === 'string' ? '' : unixToStr(device.lastFWUpdate),
rx: device.rxBytes / 1024 / 1024,
tx: device.txBytes / 1024 / 1024,
twoG: device.associations_2G,
fiveG: device.associations_5G,
sixG: device.associations_6G,
certificateExpiry: device.certificateExpiryDate ? unixToStr(device.certificateExpiryDate) : '',
};
});
setProgress(100);
return exportedDevicesInfo;
};
const getSelectDevicesGatewayInfo = (serialNumbers: string[]) =>
axiosGw
.get(`devices?deviceWithStatus=true&select=${serialNumbers.join(',')}`)
.then((response) => response.data) as Promise<{ devicesWithStatus: DeviceWithStatus[] }>;
export const getSelectExportedDevicesInfo = async (
serialNumbers: string[],
setProgress: (progress: number) => void,
) => {
// Base Setup
setProgress(0);
const devicesCount = serialNumbers.length;
setProgress(10);
if (devicesCount === 0) {
setProgress(100);
return [];
}
// Get Devices Info
const devices = (await getSelectDevicesGatewayInfo(serialNumbers)).devicesWithStatus;
setProgress(90);
const provSerialNumbers = devices
.filter((device) => device.entity.length > 0 || device.venue.length > 0 || device.subscriber.length > 0)
.map((device) => device.serialNumber);
const provisioningStatus = await getDevicesProvisioningStatus(provSerialNumbers);
setProgress(95);
const unixToStr = (unixValue: number) => {
try {
return new Date(unixValue * 1000).toISOString();
} catch (e) {
return '';
}
};
const exportedDevicesInfo: ExportedDeviceInfo[] = devices.map((device) => {
const provisioning = provisioningStatus.find((status) => status.serialNumber === device.serialNumber)?.provisioning;
return {
serialNumber: device.serialNumber,
connected: device.connected ? 'true' : 'false',
firmware: device.firmware,
memory: device.memoryUsed,
load: device.load,
temperature: device.temperature,
sanity: device.sanity,
revision: device.compatible,
ip: device.ipAddress.length > 0 ? device.ipAddress : '',
provisioning: provisioning ?? '',
radiusSessions: typeof device.hasRADIUSSessions === 'number' ? device.hasRADIUSSessions : 0,
uptime: !device.connected || device.started === 0 ? 0 : Math.floor(Date.now() / 1000 - device.started),
lastContact: typeof device.lastContact === 'string' ? '' : unixToStr(device.lastContact),
lastUpgrade: typeof device.lastFWUpdate === 'string' ? '' : unixToStr(device.lastFWUpdate),
rx: device.rxBytes / 1024,
tx: device.txBytes / 1024,
twoG: device.associations_2G,
fiveG: device.associations_5G,
sixG: device.associations_6G,
certificateExpiry: device.certificateExpiryDate ? unixToStr(device.certificateExpiryDate) : '',
};
});
setProgress(100);
return exportedDevicesInfo;
};

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Button, Tooltip } from '@chakra-ui/react'; import { Button, Tooltip } from '@chakra-ui/react';
import { CheckCircle, Question, WarningCircle } from 'phosphor-react'; import { CheckCircle, Question, WarningCircle } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { getRevision } from 'helpers/stringHelper'; import { getRevision } from 'helpers/stringHelper';
import { DeviceWithStatus } from 'hooks/Network/Devices'; import { DeviceWithStatus } from 'hooks/Network/Devices';

View File

@@ -8,11 +8,12 @@ import {
ThermometerCold, ThermometerCold,
ThermometerHot, ThermometerHot,
WarningCircle, WarningCircle,
} from 'phosphor-react'; } from '@phosphor-icons/react';
import ReactCountryFlag from 'react-country-flag'; import ReactCountryFlag from 'react-country-flag';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import Actions from './Actions'; import Actions from './Actions';
import ExportDevicesTableButton from './ExportButton';
import DeviceListFirmwareButton from './FirmwareButton'; import DeviceListFirmwareButton from './FirmwareButton';
import DeviceTableGpsCell from './GpsCell'; import DeviceTableGpsCell from './GpsCell';
import AP from './icons/AP.png'; import AP from './icons/AP.png';
@@ -646,6 +647,9 @@ const DeviceListCard = () => {
title: `${getCount.data?.count} ${t('devices.title')}`, title: `${getCount.data?.count} ${t('devices.title')}`,
objectListed: t('devices.title'), objectListed: t('devices.title'),
leftContent: <GlobalSearchBar />, leftContent: <GlobalSearchBar />,
otherButtons: (
<ExportDevicesTableButton currentPageSerialNumbers={data.map((device) => device.serialNumber)} />
),
}} }}
columns={columns} columns={columns}
data={data} data={data}

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { Cake } from 'phosphor-react'; import { Cake } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import SimpleIconStatDisplay from 'components/Containers/SimpleIconStatDisplay'; import SimpleIconStatDisplay from 'components/Containers/SimpleIconStatDisplay';
import { FirmwareDashboardResponse } from 'hooks/Network/Firmware'; import { FirmwareDashboardResponse } from 'hooks/Network/Firmware';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Heading, Table, Tbody, Td, Th, Thead, Tooltip, Tr } from '@chakra-ui/react'; import { Heading, Table, Tbody, Td, Th, Thead, Tooltip, Tr } from '@chakra-ui/react';
import { Info } from 'phosphor-react'; import { Info } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';

View File

@@ -1,5 +1,5 @@
import * as React from 'react'; import * as React from 'react';
import { FloppyDisk } from 'phosphor-react'; import { FloppyDisk } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import SimpleIconStatDisplay from 'components/Containers/SimpleIconStatDisplay'; import SimpleIconStatDisplay from 'components/Containers/SimpleIconStatDisplay';
import { FirmwareDashboardResponse } from 'hooks/Network/Firmware'; import { FirmwareDashboardResponse } from 'hooks/Network/Firmware';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Alert, AlertDescription, AlertIcon, AlertTitle, Box, Center, Spacer, Spinner } from '@chakra-ui/react'; import { Alert, AlertDescription, AlertIcon, AlertTitle, Box, Center, Spacer, Spinner } from '@chakra-ui/react';
import { Clock, WifiHigh } from 'phosphor-react'; import { Clock, WifiHigh } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import Masonry from 'react-masonry-css'; import Masonry from 'react-masonry-css';
import AverageFirmwareAge from './AverageFirmwareAge'; import AverageFirmwareAge from './AverageFirmwareAge';

View File

@@ -22,7 +22,7 @@ import {
useClipboard, useClipboard,
UseDisclosureReturn, UseDisclosureReturn,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Pen, Plus, X } from 'phosphor-react'; import { Pen, Plus, X } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { SaveButton } from 'components/Buttons/SaveButton'; import { SaveButton } from 'components/Buttons/SaveButton';
import { DataTable } from 'components/DataTables/DataTable'; import { DataTable } from 'components/DataTables/DataTable';

View File

@@ -16,7 +16,7 @@ import {
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import axios from 'axios'; import axios from 'axios';
import { Database } from 'phosphor-react'; import { Database } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import FormattedDate from 'components/InformationDisplays/FormattedDate'; import FormattedDate from 'components/InformationDisplays/FormattedDate';
import { Modal } from 'components/Modals/Modal'; import { Modal } from 'components/Modals/Modal';

View File

@@ -12,7 +12,7 @@ import {
useBoolean, useBoolean,
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { MagnifyingGlass } from 'phosphor-react'; import { MagnifyingGlass } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import FirmwareDetailsModal from './Modal'; import FirmwareDetailsModal from './Modal';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Box, Flex, HStack, IconButton, Select, Spacer, Table, Text, Th, Thead, Tooltip, Tr } from '@chakra-ui/react'; import { Box, Flex, HStack, IconButton, Select, Spacer, Table, Text, Th, Thead, Tooltip, Tr } from '@chakra-ui/react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv'; import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer'; import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer';

View File

@@ -14,7 +14,7 @@ import {
Tooltip, Tooltip,
Tr, Tr,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv'; import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer'; import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer';

View File

@@ -14,7 +14,7 @@ import {
Tooltip, Tooltip,
Tr, Tr,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv'; import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer'; import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer';

View File

@@ -14,7 +14,7 @@ import {
Tooltip, Tooltip,
Tr, Tr,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Download } from 'phosphor-react'; import { Download } from '@phosphor-icons/react';
import { CSVLink } from 'react-csv'; import { CSVLink } from 'react-csv';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer'; import ReactVirtualizedAutoSizer from 'react-virtualized-auto-sizer';

View File

@@ -19,7 +19,7 @@ import {
Text, Text,
useClipboard, useClipboard,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Eye, Trash } from 'phosphor-react'; import { Eye, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ApiKey, useDeleteApiKey } from 'hooks/Network/ApiKeys'; import { ApiKey, useDeleteApiKey } from 'hooks/Network/ApiKeys';

View File

@@ -22,7 +22,7 @@ import {
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import axios from 'axios'; import axios from 'axios';
import { Pen } from 'phosphor-react'; import { Pen } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ApiKey, useUpdateApiKey } from 'hooks/Network/ApiKeys'; import { ApiKey, useUpdateApiKey } from 'hooks/Network/ApiKeys';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Button, IconButton, Text, Tooltip, useDisclosure } from '@chakra-ui/react'; import { Button, IconButton, Text, Tooltip, useDisclosure } from '@chakra-ui/react';
import { Pen } from 'phosphor-react'; import { Pen } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import AddPhoneNumberModal from './AddPhoneNumberModal'; import AddPhoneNumberModal from './AddPhoneNumberModal';
import { useAuth } from 'contexts/AuthProvider'; import { useAuth } from 'contexts/AuthProvider';

View File

@@ -18,7 +18,7 @@ import {
useToast, useToast,
useBreakpoint, useBreakpoint,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Plus } from 'phosphor-react'; import { Plus } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { DataTable } from '../../components/DataTables/DataTable'; import { DataTable } from '../../components/DataTables/DataTable';
import FormattedDate from '../../components/InformationDisplays/FormattedDate'; import FormattedDate from '../../components/InformationDisplays/FormattedDate';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { Avatar, AvatarBadge, Box, Center, Heading, Text, useDisclosure } from '@chakra-ui/react'; import { Avatar, AvatarBadge, Box, Center, Heading, Text, useDisclosure } from '@chakra-ui/react';
import { Pen } from 'phosphor-react'; import { Pen } from '@phosphor-icons/react';
import AvatarModal from './AvatarModal'; import AvatarModal from './AvatarModal';
import { Card } from 'components/Containers/Card'; import { Card } from 'components/Containers/Card';
import { CardBody } from 'components/Containers/Card/CardBody'; import { CardBody } from 'components/Containers/Card/CardBody';

View File

@@ -17,7 +17,7 @@ import {
Tooltip, Tooltip,
useDisclosure, useDisclosure,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { MagnifyingGlass, Trash } from 'phosphor-react'; import { MagnifyingGlass, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
import { Script, useDeleteScript } from 'hooks/Network/Scripts'; import { Script, useDeleteScript } from 'hooks/Network/Scripts';

View File

@@ -13,7 +13,7 @@ import {
useBoolean, useBoolean,
useClipboard, useClipboard,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { UploadSimple } from 'phosphor-react'; import { UploadSimple } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { useFastField } from 'hooks/useFastField'; import { useFastField } from 'hooks/useFastField';

View File

@@ -19,7 +19,7 @@ import {
Text, Text,
useClipboard, useClipboard,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Eye, Trash } from 'phosphor-react'; import { Eye, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import EditSecretButton from './EditButton'; import EditSecretButton from './EditButton';
import { Secret, useDeleteSystemSecret } from 'hooks/Network/Secrets'; import { Secret, useDeleteSystemSecret } from 'hooks/Network/Secrets';

View File

@@ -22,7 +22,7 @@ import {
useDisclosure, useDisclosure,
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { Pencil } from 'phosphor-react'; import { Pencil } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Secret, useUpdateSystemSecret } from 'hooks/Network/Secrets'; import { Secret, useUpdateSystemSecret } from 'hooks/Network/Secrets';
import { AxiosError } from 'models/Axios'; import { AxiosError } from 'models/Axios';

View File

@@ -18,7 +18,7 @@ import {
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import axios from 'axios'; import axios from 'axios';
import { FloppyDisk } from 'phosphor-react'; import { FloppyDisk } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { Modal } from '../../../../components/Modals/Modal'; import { Modal } from '../../../../components/Modals/Modal';

View File

@@ -1,6 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { IconButton, Tooltip, useDisclosure } from '@chakra-ui/react'; import { IconButton, Tooltip, useDisclosure } from '@chakra-ui/react';
import { Article } from 'phosphor-react'; import { Article } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import SystemLoggingModal from './Modal'; import SystemLoggingModal from './Modal';
import { EndpointApiResponse } from 'hooks/Network/Endpoints'; import { EndpointApiResponse } from 'hooks/Network/Endpoints';

View File

@@ -17,7 +17,7 @@ import {
VStack, VStack,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { MultiValue, Select } from 'chakra-react-select'; import { MultiValue, Select } from 'chakra-react-select';
import { ArrowsClockwise } from 'phosphor-react'; import { ArrowsClockwise } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import FormattedDate from '../../../components/InformationDisplays/FormattedDate'; import FormattedDate from '../../../components/InformationDisplays/FormattedDate';
import SystemLoggingButton from './LoggingButton'; import SystemLoggingButton from './LoggingButton';

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { IconButton, Menu, MenuButton, MenuItem, MenuList, Tooltip, useToast } from '@chakra-ui/react'; import { IconButton, Menu, MenuButton, MenuItem, MenuList, Tooltip, useToast } from '@chakra-ui/react';
import { Wrench } from 'phosphor-react'; import { Wrench } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { useResetMfa, useResetPassword, useSendUserEmailValidation, useSuspendUser } from 'hooks/Network/Users'; import { useResetMfa, useResetPassword, useSendUserEmailValidation, useSuspendUser } from 'hooks/Network/Users';

View File

@@ -18,7 +18,7 @@ import {
useToast, useToast,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import axios from 'axios'; import axios from 'axios';
import { MagnifyingGlass, Trash } from 'phosphor-react'; import { MagnifyingGlass, Trash } from '@phosphor-icons/react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import ActionsDropdown from './ActionsDropdown'; import ActionsDropdown from './ActionsDropdown';

View File

@@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { Icon } from '@chakra-ui/react'; import { Icon } from '@chakra-ui/react';
import { Barcode, FloppyDisk, Info, ListBullets, TerminalWindow, UsersThree, WifiHigh } from 'phosphor-react'; import { Barcode, FloppyDisk, Info, ListBullets, TerminalWindow, UsersThree, WifiHigh } from '@phosphor-icons/react';
import { Route } from 'models/Routes'; import { Route } from 'models/Routes';
const DefaultConfigurationsPage = React.lazy(() => import('pages/DefaultConfigurations')); const DefaultConfigurationsPage = React.lazy(() => import('pages/DefaultConfigurations'));