import { ActionIcon, Grid, LoadingOverlay, Modal, Space, Title, Tooltip } from '@mantine/core'; import React, { useEffect, useState } from 'react'; import { BsTrashFill } from 'react-icons/bs'; import { useNavigate, useParams } from 'react-router-dom'; import RegexView from '../components/RegexView'; import ServiceRow from '../components/ServiceRow'; import AddNewRegex from '../components/AddNewRegex'; import { BsPlusLg } from "react-icons/bs"; import YesNoModal from '../components/YesNoModal'; import { RegexFilter, Service, update_freq } from '../js/models'; import { deleteservice, errorNotify, okNotify, regenport, serviceinfo, serviceregexlist } from '../js/utils'; import { BsArrowRepeat } from "react-icons/bs" function ServiceDetails() { const {srv_id} = useParams() const [serviceInfo, setServiceInfo] = useState({ id:srv_id?srv_id:"", internal_port:0, n_packets:0, n_regex:0, name:srv_id?srv_id:"", public_port:0, status:"🤔" }) const updateInfo = async () => { if (!srv_id) return let error = false; await serviceinfo(srv_id).then(res => { setServiceInfo(res) }).catch( err =>{ error = true; navigator("/") }) if (error) return await serviceregexlist(srv_id).then(res => { setRegexesList(res) }).catch( err => errorNotify(`Updater for ${srv_id} service failed [Regex list]!`, err.toString()) ) setLoader(false) } const [regexesList, setRegexesList] = useState([]) const [loader, setLoader] = useState(true); const [open, setOpen] = useState(false); const closeModal = () => {setOpen(false);updateInfo();} const navigator = useNavigate() useEffect(()=>{ updateInfo() const updater = setInterval(updateInfo, update_freq) return () => { clearInterval(updater) } },[]); const [deleteModal, setDeleteModal] = useState(false) const [changePortModal, setChangePortModal] = useState(false) const deleteService = () => { deleteservice(serviceInfo.id).then(res => { if (!res){ okNotify("Service delete complete!",`The service ${serviceInfo.id} has been deleted!`) updateInfo(); }else errorNotify("An error occurred while deleting a service",`Error: ${res}`) }).catch(err => { errorNotify("An error occurred while deleting a service",`Error: ${err}`) }) } const changePort = () => { regenport(serviceInfo.id).then(res => { if (!res){ okNotify("Service port regeneration completed!",`The service ${serviceInfo.id} has changed the internal port!`) updateInfo(); }else errorNotify("An error occurred while changing the internal service port",`Error: ${res}`) }).catch(err => { errorNotify("An error occurred while changing the internal service port",`Error: ${err}`) }) } return
setDeleteModal(true)} size="xl" radius="md" variant="filled"> setChangePortModal(true)} size="xl" radius="md" variant="filled"> }> {regexesList.length === 0?<> No regex found for this service! Add one by clicking the "+" buttons
setOpen(true)} size="xl" radius="md" variant="filled">
: {regexesList.map( (regexInfo) => )} } {srv_id?:null} setDeleteModal(false) } action={deleteService} opened={deleteModal} /> setChangePortModal(false)} action={changePort} opened={changePortModal} />
} export default ServiceDetails;