import { ActionIcon, Badge, Divider, Grid, MediaQuery, Menu, Space, Title, Tooltip } from '@mantine/core'; import React, { useState } from 'react'; import { FaPlay, FaStop } from 'react-icons/fa'; import { Service } from '../../../js/models'; import { MdOutlineArrowForwardIos } from "react-icons/md" import style from "./index.module.scss"; import YesNoModal from '../../YesNoModal'; import { errorNotify, nfregex, okNotify, regex_ipv4 } from '../../../js/utils'; import { BsTrashFill } from 'react-icons/bs'; import { BiRename } from 'react-icons/bi' import RenameForm from './RenameForm'; function ServiceRow({ service, onClick }:{ service:Service, onClick?:()=>void }) { let status_color = "gray"; switch(service.status){ case "stop": status_color = "red"; break; case "active": status_color = "teal"; break; } const [buttonLoading, setButtonLoading] = useState(false) const [tooltipStopOpened, setTooltipStopOpened] = useState(false); const [deleteModal, setDeleteModal] = useState(false) const [renameModal, setRenameModal] = useState(false) const stopService = async () => { setButtonLoading(true) await nfregex.servicestop(service.service_id).then(res => { if(!res){ okNotify(`Service ${service.name} stopped successfully!`,`The service on ${service.port} has been stopped!`) }else{ errorNotify(`An error as occurred during the stopping of the service ${service.port}`,`Error: ${res}`) } }).catch(err => { errorNotify(`An error as occurred during the stopping of the service ${service.port}`,`Error: ${err}`) }) setButtonLoading(false); } const startService = async () => { setButtonLoading(true) await nfregex.servicestart(service.service_id).then(res => { if(!res){ okNotify(`Service ${service.name} started successfully!`,`The service on ${service.port} has been started!`) }else{ errorNotify(`An error as occurred during the starting of the service ${service.port}`,`Error: ${res}`) } }).catch(err => { errorNotify(`An error as occurred during the starting of the service ${service.port}`,`Error: ${err}`) }) setButtonLoading(false) } const deleteService = () => { nfregex.servicedelete(service.service_id).then(res => { if (!res){ okNotify("Service delete complete!",`The service ${service.name} has been deleted!`) }else errorNotify("An error occurred while deleting a service",`Error: ${res}`) }).catch(err => { errorNotify("An error occurred while deleting a service",`Error: ${err}`) }) } return <>
{service.name} :{service.port}
Status: {service.status}
{service.name} :{service.port}
Status: {service.status}
<>
Connections Blocked: {service.n_packets} Regex: {service.n_regex} {service.ip_int} on {service.proto}
<>
Rename service } onClick={()=>setRenameModal(true)}>Change service name Danger zone } onClick={()=>setDeleteModal(true)}>Delete Service setTooltipStopOpened(false)} onBlur={() => setTooltipStopOpened(false)} onMouseEnter={() => setTooltipStopOpened(true)} onMouseLeave={() => setTooltipStopOpened(false)}>
{onClick?
:null} <>
setDeleteModal(false) } action={deleteService} opened={deleteModal} /> setRenameModal(false)} opened={renameModal} service={service} /> } export default ServiceRow;