import { ActionIcon, Box, Grid, LoadingOverlay, Space, Title, Tooltip } from '@mantine/core'; import { Navigate, useNavigate, useParams } from 'react-router-dom'; import RegexView from '../../components/RegexView'; import AddNewRegex from '../../components/AddNewRegex'; import { BsPlusLg } from "react-icons/bs"; import { nfregexServiceQuery, nfregexServiceRegexesQuery, Service } from '../../components/NFRegex/utils'; import { Badge, Divider, Menu } from '@mantine/core'; import { useState } from 'react'; import { FaFilter, FaPlay, FaStop } from 'react-icons/fa'; import { nfregex, serviceQueryKey } from '../../components/NFRegex/utils'; import { MdDoubleArrow } from "react-icons/md" import YesNoModal from '../../components/YesNoModal'; import { errorNotify, isMediumScreen, okNotify, regex_ipv4 } from '../../js/utils'; import { BsTrashFill } from 'react-icons/bs'; import { BiRename } from 'react-icons/bi' import RenameForm from '../../components/NFRegex/ServiceRow/RenameForm'; import { MenuDropDownWithButton } from '../../components/MainLayout'; import { useQueryClient } from '@tanstack/react-query'; import { FaArrowLeft } from "react-icons/fa"; import { VscRegex } from 'react-icons/vsc'; import { IoSettingsSharp } from 'react-icons/io5'; import AddEditService from '../../components/NFRegex/AddEditService'; export default function ServiceDetailsNFRegex() { const {srv} = useParams() const [open, setOpen] = useState(false) const services = nfregexServiceQuery() const serviceInfo = services.data?.find(s => s.service_id == srv) const [tooltipAddRegexOpened, setTooltipAddRegexOpened] = useState(false) const regexesList = nfregexServiceRegexesQuery(srv??"") const [deleteModal, setDeleteModal] = useState(false) const [renameModal, setRenameModal] = useState(false) const [editModal, setEditModal] = useState(false) const [buttonLoading, setButtonLoading] = useState(false) const queryClient = useQueryClient() const [tooltipStopOpened, setTooltipStopOpened] = useState(false); const [tooltipBackOpened, setTooltipBackOpened] = useState(false); const navigate = useNavigate() const isMedium = isMediumScreen() if (services.isLoading) return if (!srv || !serviceInfo || regexesList.isError) return let status_color = "gray"; switch(serviceInfo.status){ case "stop": status_color = "red"; break; case "active": status_color = "teal"; break; } const startService = async () => { setButtonLoading(true) await nfregex.servicestart(serviceInfo.service_id).then(res => { if(!res){ okNotify(`Service ${serviceInfo.name} started successfully!`,`The service on ${serviceInfo.port} has been started!`) queryClient.invalidateQueries(serviceQueryKey) }else{ errorNotify(`An error as occurred during the starting of the service ${serviceInfo.port}`,`Error: ${res}`) } }).catch(err => { errorNotify(`An error as occurred during the starting of the service ${serviceInfo.port}`,`Error: ${err}`) }) setButtonLoading(false) } const deleteService = () => { nfregex.servicedelete(serviceInfo.service_id).then(res => { if (!res){ okNotify("Service delete complete!",`The service ${serviceInfo.name} has been deleted!`) queryClient.invalidateQueries(serviceQueryKey) }else errorNotify("An error occurred while deleting a service",`Error: ${res}`) }).catch(err => { errorNotify("An error occurred while deleting a service",`Error: ${err}`) }) } const stopService = async () => { setButtonLoading(true) await nfregex.servicestop(serviceInfo.service_id).then(res => { if(!res){ okNotify(`Service ${serviceInfo.name} stopped successfully!`,`The service on ${serviceInfo.port} has been stopped!`) queryClient.invalidateQueries(serviceQueryKey) }else{ errorNotify(`An error as occurred during the stopping of the service ${serviceInfo.port}`,`Error: ${res}`) } }).catch(err => { errorNotify(`An error as occurred during the stopping of the service ${serviceInfo.port}`,`Error: ${err}`) }) setButtonLoading(false); } return <> <Box className="center-flex"> <MdDoubleArrow /><Space w="sm" />{serviceInfo.name} </Box> {isMedium?null:} {serviceInfo.status} :{serviceInfo.port} Edit service } onClick={()=>setEditModal(true)}>Service Settings } onClick={()=>setRenameModal(true)}>Change service name Danger zone } onClick={()=>setDeleteModal(true)}>Delete Service {isMedium?null:} {serviceInfo.n_packets} {serviceInfo.n_regex} {isMedium?:} {serviceInfo.ip_int} on {serviceInfo.proto} {isMedium?null:} navigate("/")} size="xl" radius="md" variant="filled" aria-describedby="tooltip-back-id" onFocus={() => setTooltipBackOpened(false)} onBlur={() => setTooltipBackOpened(false)} onMouseEnter={() => setTooltipBackOpened(true)} onMouseLeave={() => setTooltipBackOpened(false)}> setTooltipStopOpened(false)} onBlur={() => setTooltipStopOpened(false)} onMouseEnter={() => setTooltipStopOpened(true)} onMouseLeave={() => setTooltipStopOpened(false)}> {(!regexesList.data || regexesList.data.length == 0)?<> No regex found for this service! Add one by clicking the "+" buttons setOpen(true)} size="xl" radius="md" variant="filled" aria-describedby="tooltip-AddRegex-id" onFocus={() => setTooltipAddRegexOpened(false)} onBlur={() => setTooltipAddRegexOpened(false)} onMouseEnter={() => setTooltipAddRegexOpened(true)} onMouseLeave={() => setTooltipAddRegexOpened(false)}> : {regexesList.data?.map( (regexInfo) => )} } {srv? {setOpen(false);}} service={srv} />:null} setDeleteModal(false) } action={deleteService} opened={deleteModal} /> setRenameModal(false)} opened={renameModal} service={serviceInfo} /> setEditModal(false)} edit={serviceInfo} /> }