2022-06-15 19:44:41 +02:00
import { ActionIcon , Grid , LoadingOverlay , Space , Title , Tooltip } from '@mantine/core' ;
2022-06-12 12:09:50 +02:00
import React , { useEffect , useState } from 'react' ;
2022-06-12 16:44:54 +02:00
import { useNavigate , useParams } from 'react-router-dom' ;
2022-07-21 21:17:06 +02:00
import RegexView from '../../components/RegexView' ;
2022-07-21 10:20:54 +02:00
import ServiceRow from '../../components/NFRegex/ServiceRow' ;
2022-07-21 21:17:06 +02:00
import AddNewRegex from '../../components/AddNewRegex' ;
2022-06-14 22:43:48 +02:00
import { BsPlusLg } from "react-icons/bs" ;
2022-07-21 21:17:06 +02:00
import { nfregex , Service } from '../../components/NFRegex/utils' ;
2022-07-21 20:25:39 +02:00
import { errorNotify , eventUpdateName , fireUpdateRequest } from '../../js/utils' ;
2022-06-15 19:44:41 +02:00
import { useWindowEvent } from '@mantine/hooks' ;
2022-07-21 21:17:06 +02:00
import { RegexFilter } from '../../js/models' ;
2022-06-12 12:09:50 +02:00
2022-07-22 00:34:57 +02:00
function ServiceDetailsNFRegex() {
2022-07-07 21:08:02 +02:00
const { srv } = useParams ( )
2022-06-12 12:09:50 +02:00
const [ serviceInfo , setServiceInfo ] = useState < Service > ( {
2022-07-10 15:05:56 +02:00
service_id : "" ,
2022-07-07 21:08:02 +02:00
port :0 ,
2022-06-12 12:09:50 +02:00
n_packets :0 ,
n_regex :0 ,
2022-07-07 21:08:02 +02:00
name : "" ,
2022-07-12 15:47:31 +02:00
status : "🤔" ,
ip_int : "" ,
proto : "tcp" ,
2022-06-12 12:09:50 +02:00
} )
2022-06-15 19:44:41 +02:00
const [ regexesList , setRegexesList ] = useState < RegexFilter [ ] > ( [ ] )
const [ loader , setLoader ] = useState ( true ) ;
const [ open , setOpen ] = useState ( false ) ;
const closeModal = ( ) = > { setOpen ( false ) ; updateInfo ( ) ; }
2022-06-12 12:09:50 +02:00
const updateInfo = async ( ) = > {
2022-07-10 15:05:56 +02:00
if ( ! srv ) return
2022-06-12 12:09:50 +02:00
let error = false ;
2022-07-21 10:20:54 +02:00
await nfregex . serviceinfo ( srv ) . then ( res = > {
2022-06-12 12:09:50 +02:00
setServiceInfo ( res )
} ) . catch (
err = > {
2022-06-12 16:44:54 +02:00
error = true ;
navigator ( "/" )
2022-06-12 12:09:50 +02:00
} )
if ( error ) return
2022-07-21 10:20:54 +02:00
await nfregex . serviceregexes ( srv ) . then ( res = > {
2022-06-12 12:09:50 +02:00
setRegexesList ( res )
} ) . catch (
2022-07-10 15:05:56 +02:00
err = > errorNotify ( ` Updater for ${ srv } service failed [Regex list]! ` , err . toString ( ) )
2022-06-12 22:28:16 +02:00
)
2022-06-13 10:59:05 +02:00
setLoader ( false )
2022-06-12 12:09:50 +02:00
}
2022-06-12 22:28:16 +02:00
2022-06-15 19:44:41 +02:00
useWindowEvent ( eventUpdateName , updateInfo )
useEffect ( fireUpdateRequest , [ ] )
2022-06-15 16:18:19 +02:00
const navigator = useNavigate ( )
2022-06-13 10:59:05 +02:00
2022-06-30 15:58:03 +02:00
const [ tooltipAddRegexOpened , setTooltipAddRegexOpened ] = useState ( false ) ;
2022-06-13 10:59:05 +02:00
2022-07-21 12:39:30 +02:00
return < >
2022-06-13 10:59:05 +02:00
< LoadingOverlay visible = { loader } / >
2022-06-30 15:58:03 +02:00
< ServiceRow service = { serviceInfo } / >
2022-06-15 01:23:54 +02:00
{ regexesList . length === 0 ? < >
< Space h = "xl" / >
2022-06-15 09:11:27 +02:00
< Title className = 'center-flex' align = 'center' order = { 3 } > No regex found for this service ! Add one by clicking the "+" buttons < / Title >
2022-06-16 02:25:41 +02:00
< Space h = "xl" / > < Space h = "xl" / > < Space h = "xl" / > < Space h = "xl" / >
2022-06-15 01:23:54 +02:00
< div className = 'center-flex' >
2022-06-16 02:25:41 +02:00
< Tooltip label = "Add a new regex" zIndex = { 0 } transition = "pop" transitionDuration = { 200 } /*openDelay={500}*/ transitionTimingFunction = "ease" color = "blue" opened = { tooltipAddRegexOpened } tooltipId = "tooltip-AddRegex-id" >
< ActionIcon color = "blue" onClick = { ( ) = > 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 ) } > < BsPlusLg size = "20px" / > < / ActionIcon >
2022-06-15 01:23:54 +02:00
< / Tooltip >
< / div >
< / > :
2022-06-12 12:09:50 +02:00
< Grid >
2022-06-15 19:44:41 +02:00
{ regexesList . map ( ( regexInfo ) = > < Grid.Col key = { regexInfo . id } lg = { 6 } xs = { 12 } > < RegexView regexInfo = { regexInfo } / > < / Grid.Col > ) }
2022-06-12 12:09:50 +02:00
< / Grid >
}
2022-06-14 22:43:48 +02:00
2022-07-10 15:05:56 +02:00
{ srv ? < AddNewRegex opened = { open } onClose = { closeModal } service = { srv } / > : null }
2022-07-21 12:39:30 +02:00
< / >
2022-06-12 12:09:50 +02:00
}
2022-07-22 00:34:57 +02:00
export default ServiceDetailsNFRegex ;