import { useCallback, useEffect, useState } from 'react'; import { Button, Card, CardActions, CardContent, CardHeader, Divider, Stack, TextField, InputLabel, MenuItem, Select, FormControl, SvgIcon, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Box, IconButton, Grid } from '@mui/material'; import XMarkIcon from '@heroicons/react/24/outline/XMarkIcon'; import PaperAirplane from '@heroicons/react/24/solid/PaperAirplaneIcon'; import CircularProgress from '@mui/material/CircularProgress'; import Backdrop from '@mui/material/Backdrop'; import { useRouter } from 'next/router'; import { useBackendContext } from 'src/contexts/backend-context'; import DocumentArrowDown from '@heroicons/react/24/outline/DocumentArrowDownIcon'; import TrashIcon from '@heroicons/react/24/outline/TrashIcon'; import PlusCircleIcon from '@heroicons/react/24/outline/PlusCircleIcon'; import EnvelopeIcon from '@heroicons/react/24/outline/EnvelopeIcon'; import CheckIcon from '@heroicons/react/24/outline/CheckIcon'; export const DevicesRPC = () => { const router = useRouter() let { httpRequest } = useBackendContext() const [open, setOpen] = useState(false); const [scroll, setScroll] = useState('paper'); const [answer, setAnswer] = useState(false) const [content, setContent] = useState('') const [age, setAge] = useState(6); const [newMessage, setNewMessage] = useState(false) const [message, setMessage] = useState(null) const [currentMsg, setCurrentMsg] = useState(0) const [newMsgName, setNewMsgName] = useState("") const [value, setValue] = useState() const [saveChanges, setSaveChanges] = useState(false) const [loadingSaveMsg, setLoadingSaveMsg] = useState(false) const possibleMsgs = [ `{ "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 4 }, "body": { "request": { "set": { "allow_partial":true, "update_objs":[ { "obj_path":"Device.IP.Interface.1.", "param_settings":[ { "param":"Alias", "value":"test", "required":true } ] } ] } } } }`, `{ "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 10 }, "body": { "request": { "delete": { "allow_partial": true, "obj_paths": [ "Device.IP.Interface.[Alias==test]." ] } } } }`, ` { "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 8 }, "body": { "request": { "add": { "allow_partial": true, "create_objs": [ { "obj_path": "Device.IP.Interface.", "param_settings": [ { "param": "Alias", "value": "test", "required": true } ] } ] } } } }`, `{ "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 6 }, "body": { "request": { "operate": { "command": "Device.Reboot()", "send_resp": true } } } }`, `{ "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 1 }, "body": { "request": { "get": { "paramPaths": [ "Device.WiFi.SSID.[Name==wlan0].", "Device.IP.Interface.*.Alias", "Device.DeviceInfo.FirmwareImage.*.Alias", "Device.IP.Interface.1.IPv4Address.1.IPAddress" ], "maxDepth": 2 } } } }`,`{ "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 12 }, "body": { "request": { "get_supported_dm": { "obj_paths" : [ "Device." ], "first_level_only" : false, "return_commands" : false, "return_events" : false, "return_params" : true } } } }`, `{ "header": { "msg_id": "b7dc38ea-aefb-4761-aa55-edaa97adb2f0", "msg_type": 14 }, "body": { "request": { "get_instances": { "obj_paths" : ["Device.DeviceInfo."], "first_level_only" : false } } } }`] const [newMsgValue, setNewMsgValue] = useState(possibleMsgs[age-1]) const [loading, setLoading] = useState(false); const handleNewMessageValue = (event) => { setNewMsgValue(event.target.value) } const handleClose = () => { setOpen(false); }; const handleCancelNewMsgTemplate = () => { setNewMessage(false) setNewMsgName("") setNewMsgValue(possibleMsgs[age-1]) // setValue(possibleMsgs[age-1]) } const saveMsg = async () => { let {status} = await httpRequest( `/api/device/message?name=`+message[currentMsg].name, "PUT", value, null, ) if ( status === 204){ setSaveChanges(false) setMessage(message.map((msg, index) => { if (index === currentMsg) { return {...msg, value: value} }else{ return msg } })) } } const createNewMsg = async () => { setLoading(true) let {status} = await httpRequest( `/api/device/message/usp?name=`+newMsgName, "POST", newMsgValue, null, ) if ( status === 204){ setNewMessage(false) setNewMsgName("") let result = await fetchMessages() if (result) { setCurrentMsg(result.length-1) } setValue(newMsgValue) setNewMsgValue(possibleMsgs[age-1]) } setLoading(false) } const handleChangeMessage = (event) => { setSaveChanges(false) setCurrentMsg(event.target.value) setValue(message[event.target.value].value) } const handleDeleteMessage = async () => { let {status} = await httpRequest( `/api/device/message?name=`+message[currentMsg].name.replace(" ", '+'), "DELETE", ) if ( status === 204){ fetchMessages() setCurrentMsg(0) setValue("") } } const handleOpen = async () => { setOpen(true); let {result, status} = await httpRequest( `/api/device/${router.query.id[0]}/any/generic`, "PUT", value, null, ) if (status === 200){ setAnswer(true) console.log("result:",result) let answer = JSON.stringify(result, null, 2) if (answer == "null"){ answer = result } console.log(answer) setContent(answer) } setOpen(false) } const fetchMessages = async () => { let {result, status} = await httpRequest( `/api/device/message?type=usp`, "GET", null, null, ) if ( status === 200){ setMessage(result) setValue(result ? result[0].value : "") return result } } const handleChangeRPC = (event) => { setAge(event.target.value); setNewMsgValue(possibleMsgs[event.target.value-1]) }; const handleEditMessage = (event) => { if (message) { setSaveChanges(true) } setValue(event.target.value) } const handleSubmit = useCallback( (event) => { event.preventDefault(); }, [] ); useEffect(() => { fetchMessages(); },[]); return (
); };