11"use client"
22
33import { useQueryState } from 'nuqs'
4- import { useState , useEffect } from 'react'
4+ import { useState , useEffect , useCallback } from 'react'
55import { pipe } from '@/lib/tinybird'
66import { Card , CardContent , CardHeader , CardTitle } from '@/components/ui/card'
77import { formatDuration , formatNumber , formatPercentage } from '@/lib/utils'
@@ -63,13 +63,9 @@ export default function PagerDutyDashboard() {
6363 const [ page , setPage ] = useState ( 0 )
6464 const pageSize = 10
6565 const [ incidentTypes , setIncidentTypes ] = useState < IncidentType [ ] > ( [ ] )
66- const [ services , setServices ] = useState < Array < {
67- service_name : string
68- service_id : string
69- } > > ( [ ] )
7066 const [ selectedService , setSelectedService ] = useState < string > ( )
7167
72- const fetchIncidentTypes = async ( newPage : number ) => {
68+ const fetchIncidentTypes = useCallback ( async ( newPage : number ) => {
7369 if ( ! token ) return
7470 setIsTableLoading ( true )
7571 try {
@@ -90,22 +86,14 @@ export default function PagerDutyDashboard() {
9086 } finally {
9187 setIsTableLoading ( false )
9288 }
93- }
89+ } , [ token , dateRange . from , dateRange . to , selectedService , pageSize ] )
9490
9591 const handlePageChange = async ( newPage : number ) => {
9692 setPage ( newPage )
9793 await fetchIncidentTypes ( newPage )
9894 }
9995
100- useEffect ( ( ) => {
101- fetchMetrics ( )
102- } , [ token , dateRange . from , dateRange . to , selectedService ] )
103-
104- useEffect ( ( ) => {
105- fetchIncidentTypes ( page )
106- } , [ token , dateRange . from , dateRange . to , selectedService , page ] )
107-
108- const fetchMetrics = async ( ) => {
96+ const fetchMetrics = useCallback ( async ( ) => {
10997 if ( ! token ) return
11098 setIsLoading ( true )
11199 try {
@@ -182,27 +170,21 @@ export default function PagerDutyDashboard() {
182170 } finally {
183171 setIsLoading ( false )
184172 }
185- }
173+ } , [ token , dateRange . from , dateRange . to , selectedService ] )
186174
187- const fetchServices = async ( ) => {
188- if ( ! token ) return
189- try {
190- const servicesData = await pipe ( token , 'pagerduty_services' )
191- setServices ( servicesData . data )
192- } catch ( error ) {
193- console . error ( 'Failed to fetch services:' , error )
194- }
195- }
175+ useEffect ( ( ) => {
176+ fetchMetrics ( )
177+ } , [ fetchMetrics ] )
196178
197179 useEffect ( ( ) => {
198- fetchServices ( )
199- } , [ token ] )
180+ fetchIncidentTypes ( page )
181+ } , [ fetchIncidentTypes , page ] )
200182
201183 return (
202184 < div className = "space-y-8" >
203185 < div className = "flex justify-end items-center gap-4" >
204186 < Filter
205- token = { token }
187+ token = { token || '' }
206188 pipeName = "pagerduty_services"
207189 label = "Service"
208190 value = { selectedService }
@@ -319,6 +301,7 @@ export default function PagerDutyDashboard() {
319301 page = { page }
320302 onPageChange = { handlePageChange }
321303 pageSize = { pageSize }
304+ isLoading = { isTableLoading }
322305 />
323306 </ div >
324307 </ div >
0 commit comments