2022-06-12 14:40:48 +02:00
import { ActionIcon , Grid , Space , Title } from '@mantine/core' ;
2022-06-12 12:09:50 +02:00
import React , { useEffect , useState } from 'react' ;
2022-06-12 14:40:48 +02:00
import { BsTrashFill } from 'react-icons/bs' ;
2022-06-12 16:44:54 +02:00
import { useNavigate , useParams } from 'react-router-dom' ;
2022-06-12 12:09:50 +02:00
import RegexView from '../components/RegexView' ;
import ServiceRow from '../components/ServiceRow' ;
2022-06-12 16:44:54 +02:00
import YesNoModal from '../components/YesNoModal' ;
import { RegexFilter , Service , update_freq } from '../js/models' ;
import { errorNotify , serviceinfo , serviceregexlist } from '../js/utils' ;
2022-06-12 12:09:50 +02:00
function ServiceDetails() {
const { srv_id } = useParams ( )
const [ serviceInfo , setServiceInfo ] = useState < Service > ( {
id :srv_id?srv_id : "" ,
internal_port :0 ,
n_packets :0 ,
n_regex :0 ,
name :srv_id?srv_id : "" ,
public_port :0 ,
status : "🤔"
} )
2022-06-12 16:44:54 +02:00
const [ regexesList , setRegexesList ] = useState < RegexFilter [ ] > ( [ ] )
const navigator = useNavigate ( )
2022-06-12 12:09:50 +02:00
const updateInfo = async ( ) = > {
if ( ! srv_id ) return
let error = false ;
await serviceinfo ( srv_id ) . then ( res = > {
setServiceInfo ( res )
} ) . catch (
err = > {
2022-06-12 16:44:54 +02:00
errorNotify ( ` Updater for ${ srv_id } service failed [General Info]! ` , err . toString ( ) )
error = true ;
navigator ( "/" )
2022-06-12 12:09:50 +02:00
} )
if ( error ) return
await serviceregexlist ( srv_id ) . then ( res = > {
setRegexesList ( res )
} ) . catch (
err = > {
2022-06-12 16:44:54 +02:00
errorNotify ( ` Updater for ${ srv_id } service failed [Regex list]! ` , err . toString ( ) )
error = true ;
2022-06-12 12:09:50 +02:00
} )
}
useEffect ( ( ) = > {
updateInfo ( )
const updater = setInterval ( updateInfo , update_freq )
return ( ) = > { clearInterval ( updater ) }
} , [ ] ) ;
2022-06-12 16:44:54 +02:00
const [ deleteModal , setDeleteModal ] = useState ( false )
2022-06-12 12:09:50 +02:00
return < >
2022-06-12 14:40:48 +02:00
< ServiceRow service = { serviceInfo } additional_buttons = { < >
2022-06-12 16:44:54 +02:00
< ActionIcon color = "red" onClick = { ( ) = > setDeleteModal ( true ) } size = "xl" radius = "md" variant = "filled" > < BsTrashFill size = { 22 } / > < / ActionIcon >
2022-06-12 14:40:48 +02:00
< Space w = "md" / >
< / > } > < / ServiceRow >
2022-06-12 12:09:50 +02:00
{ regexesList . length === 0 ?
< > < Space h = "xl" / > < Title className = 'center-flex' order = { 1 } > No regex found for this service ! Add one clicking the add button above < / Title > < / > :
< Grid >
{ regexesList . map ( ( regexInfo ) = > < Grid.Col key = { regexInfo . id } span = { 6 } > < RegexView regexInfo = { regexInfo } / > < / Grid.Col > ) }
< / Grid >
}
2022-06-12 16:44:54 +02:00
< YesNoModal
title = 'Are you sure to delete this service?'
description = { ` You are going to delete the service ' ${ serviceInfo . id } ', causing the stopping of the firewall and deleting all the regex associated. This will cause the shutdown of your service ⚠️! ` }
onClose = { ( ) = > setDeleteModal ( false ) }
action = { ( ) = > console . log ( "Delete the service please!" ) }
opened = { deleteModal }
/ >
2022-06-12 12:09:50 +02:00
< / >
}
export default ServiceDetails ;