1
- import { useState } from 'react'
2
1
import { Tabs , TabsContent , TabsList , TabsTrigger } from '@/components/ui/tabs'
3
2
import {
4
3
Card ,
@@ -7,9 +6,10 @@ import {
7
6
CardHeader ,
8
7
CardTitle ,
9
8
} from '@/components/ui/card'
10
- import { TCP_IP_LAYERS , PACKET_TYPES } from '@/data'
9
+ import { TCP_IP_LAYERS , PACKET_TYPES , type PacketTypes } from '@/data'
10
+ import type { ValueOf } from '@/utils/types'
11
11
12
- type Tab = 'overview' | 'layers' | 'packets'
12
+ export type Tab = 'overview' | 'layers' | 'packets'
13
13
14
14
type TabOption = {
15
15
value : Tab
@@ -24,13 +24,17 @@ const TABS: TabOption[] = [
24
24
25
25
const [ overviewTab , layersTab , packetsTab ] = TABS
26
26
27
- function ProtocolOverview ( ) {
28
- const [ activeTab , setActiveTab ] = useState < Tab > ( 'overview' )
27
+ interface Props {
28
+ activeTab : Tab
29
+ setActiveTab : ( tab : Tab ) => void
30
+ activePacketType : ValueOf < PacketTypes > [ 'name' ] | null
31
+ }
29
32
33
+ function ProtocolOverview ( props : Props ) {
30
34
return (
31
35
< Tabs
32
- value = { activeTab }
33
- onValueChange = { ( value ) => setActiveTab ( value as Tab ) }
36
+ value = { props . activeTab }
37
+ onValueChange = { ( value ) => props . setActiveTab ( value as Tab ) }
34
38
className = "w-full"
35
39
>
36
40
< TabsList className = "grid w-full grid-cols-3" >
@@ -139,7 +143,7 @@ function ProtocolOverview() {
139
143
{ Object . values ( PACKET_TYPES ) . map ( ( packet ) => (
140
144
< div key = { packet . name } className = "flex items-center space-x-3" >
141
145
< div
142
- className = " w-6 h-6 rounded"
146
+ className = { ` w-6 h-6 rounded ${ props . activePacketType === packet . name ? 'animate-pulse animate-bounce' : '' } ` }
143
147
style = { { backgroundColor : packet . color } }
144
148
/>
145
149
< div >
0 commit comments