@@ -59,6 +59,8 @@ import {
5959 formatTooltipDate ,
6060 buildTooltipHtml ,
6161 formatBand ,
62+ dailyWindowStartDate ,
63+ trimDailyRecords ,
6264 buildBlobCountChartConfig ,
6365 buildAttestationParticipationChartConfig ,
6466 buildHeadVoteCorrectnessChartConfig ,
@@ -92,6 +94,10 @@ export function IndexPage(): JSX.Element {
9294 return now - config . days * 24 * 60 * 60 ;
9395 } , [ config . days ] ) ;
9496
97+ // Daily endpoints have no server-side range filter on their primary key, so the
98+ // selected window is applied to daily records client-side via this cutoff date.
99+ const dailyStartDate = useMemo ( ( ) => dailyWindowStartDate ( config . days ) , [ config . days ] ) ;
100+
95101 // --- Queries ---
96102
97103 const blobHourlyQuery = useQuery ( {
@@ -235,63 +241,80 @@ export function IndexPage(): JSX.Element {
235241 const blobRecords = useMemo (
236242 ( ) =>
237243 isDaily
238- ? [ ...( blobDailyQuery . data ?. fct_blob_count_daily ?? [ ] ) ] . reverse ( )
244+ ? trimDailyRecords ( [ ...( blobDailyQuery . data ?. fct_blob_count_daily ?? [ ] ) ] . reverse ( ) , dailyStartDate )
239245 : blobHourlyQuery . data ?. fct_blob_count_hourly ,
240- [ isDaily , blobDailyQuery . data , blobHourlyQuery . data ]
246+ [ isDaily , blobDailyQuery . data , blobHourlyQuery . data , dailyStartDate ]
241247 ) ;
242248
243249 const attnRecords = useMemo (
244250 ( ) =>
245251 isDaily
246- ? [ ...( attnDailyQuery . data ?. fct_attestation_participation_rate_daily ?? [ ] ) ] . reverse ( )
252+ ? trimDailyRecords (
253+ [ ...( attnDailyQuery . data ?. fct_attestation_participation_rate_daily ?? [ ] ) ] . reverse ( ) ,
254+ dailyStartDate
255+ )
247256 : attnHourlyQuery . data ?. fct_attestation_participation_rate_hourly ,
248- [ isDaily , attnDailyQuery . data , attnHourlyQuery . data ]
257+ [ isDaily , attnDailyQuery . data , attnHourlyQuery . data , dailyStartDate ]
249258 ) ;
250259
251260 const hvRecords = useMemo (
252261 ( ) =>
253262 isDaily
254- ? [ ...( hvDailyQuery . data ?. fct_head_vote_correctness_rate_daily ?? [ ] ) ] . reverse ( )
263+ ? trimDailyRecords (
264+ [ ...( hvDailyQuery . data ?. fct_head_vote_correctness_rate_daily ?? [ ] ) ] . reverse ( ) ,
265+ dailyStartDate
266+ )
255267 : hvHourlyQuery . data ?. fct_head_vote_correctness_rate_hourly ,
256- [ isDaily , hvDailyQuery . data , hvHourlyQuery . data ]
268+ [ isDaily , hvDailyQuery . data , hvHourlyQuery . data , dailyStartDate ]
257269 ) ;
258270
259271 const reorgRecords = useMemo (
260272 ( ) =>
261- isDaily ? [ ...( reorgDailyQuery . data ?. fct_reorg_daily ?? [ ] ) ] . reverse ( ) : reorgHourlyQuery . data ?. fct_reorg_hourly ,
262- [ isDaily , reorgDailyQuery . data , reorgHourlyQuery . data ]
273+ isDaily
274+ ? trimDailyRecords ( [ ...( reorgDailyQuery . data ?. fct_reorg_daily ?? [ ] ) ] . reverse ( ) , dailyStartDate )
275+ : reorgHourlyQuery . data ?. fct_reorg_hourly ,
276+ [ isDaily , reorgDailyQuery . data , reorgHourlyQuery . data , dailyStartDate ]
263277 ) ;
264278
265279 const missedSlotRecords = useMemo (
266280 ( ) =>
267281 isDaily
268- ? [ ...( missedSlotDailyQuery . data ?. fct_missed_slot_rate_daily ?? [ ] ) ] . reverse ( )
282+ ? trimDailyRecords ( [ ...( missedSlotDailyQuery . data ?. fct_missed_slot_rate_daily ?? [ ] ) ] . reverse ( ) , dailyStartDate )
269283 : missedSlotHourlyQuery . data ?. fct_missed_slot_rate_hourly ,
270- [ isDaily , missedSlotDailyQuery . data , missedSlotHourlyQuery . data ]
284+ [ isDaily , missedSlotDailyQuery . data , missedSlotHourlyQuery . data , dailyStartDate ]
271285 ) ;
272286
273287 const proposalStatusRecords = useMemo (
274288 ( ) =>
275289 isDaily
276- ? [ ...( proposalStatusDailyQuery . data ?. fct_block_proposal_status_daily ?? [ ] ) ] . reverse ( )
290+ ? trimDailyRecords (
291+ [ ...( proposalStatusDailyQuery . data ?. fct_block_proposal_status_daily ?? [ ] ) ] . reverse ( ) ,
292+ dailyStartDate
293+ )
277294 : proposalStatusHourlyQuery . data ?. fct_block_proposal_status_hourly ,
278- [ isDaily , proposalStatusDailyQuery . data , proposalStatusHourlyQuery . data ]
295+ [ isDaily , proposalStatusDailyQuery . data , proposalStatusHourlyQuery . data , dailyStartDate ]
279296 ) ;
280297
281298 const inclusionDelayRecords = useMemo (
282299 ( ) =>
283300 isDaily
284- ? [ ...( inclusionDelayDailyQuery . data ?. fct_attestation_inclusion_delay_daily ?? [ ] ) ] . reverse ( )
301+ ? trimDailyRecords (
302+ [ ...( inclusionDelayDailyQuery . data ?. fct_attestation_inclusion_delay_daily ?? [ ] ) ] . reverse ( ) ,
303+ dailyStartDate
304+ )
285305 : inclusionDelayHourlyQuery . data ?. fct_attestation_inclusion_delay_hourly ,
286- [ isDaily , inclusionDelayDailyQuery . data , inclusionDelayHourlyQuery . data ]
306+ [ isDaily , inclusionDelayDailyQuery . data , inclusionDelayHourlyQuery . data , dailyStartDate ]
287307 ) ;
288308
289309 const proposerRewardRecords = useMemo (
290310 ( ) =>
291311 isDaily
292- ? [ ...( proposerRewardDailyQuery . data ?. fct_proposer_reward_daily ?? [ ] ) ] . reverse ( )
312+ ? trimDailyRecords (
313+ [ ...( proposerRewardDailyQuery . data ?. fct_proposer_reward_daily ?? [ ] ) ] . reverse ( ) ,
314+ dailyStartDate
315+ )
293316 : proposerRewardHourlyQuery . data ?. fct_proposer_reward_hourly ,
294- [ isDaily , proposerRewardDailyQuery . data , proposerRewardHourlyQuery . data ]
317+ [ isDaily , proposerRewardDailyQuery . data , proposerRewardHourlyQuery . data , dailyStartDate ]
295318 ) ;
296319
297320 // --- Unified time keys from all datasets ---
0 commit comments