@@ -283,93 +283,68 @@ function HudTableBody({
283
283
) ;
284
284
}
285
285
286
- function GroupFilterableHudTable ( {
287
- params,
288
- children,
289
- groupNames,
290
- useGrouping,
291
- setUseGrouping,
292
- hideUnstable,
293
- setHideUnstable,
294
- hideGreenColumns,
295
- setHideGreenColumns,
296
- } : {
297
- params : HudParams ;
298
- children : React . ReactNode ;
299
- groupNames : string [ ] ;
300
- useGrouping : boolean ;
301
- setUseGrouping : any ;
302
- hideUnstable : boolean ;
303
- setHideUnstable : any ;
304
- hideGreenColumns : boolean ;
305
- setHideGreenColumns : any ;
306
- } ) {
286
+ function FiltersAndSettings ( { } : { } ) {
287
+ const router = useRouter ( ) ;
288
+ const params = packHudParams ( router . query ) ;
307
289
const { jobFilter, handleSubmit } = useTableFilter ( params ) ;
308
- const headerNames = groupNames ;
309
290
const [ mergeEphemeralLF , setMergeEphemeralLF ] = useContext ( MergeLFContext ) ;
310
291
const [ settingsPanelOpen , setSettingsPanelOpen ] = useState ( false ) ;
292
+ const [ hideUnstable , setHideUnstable ] = usePreference ( "hideUnstable" ) ;
293
+ const [ hideGreenColumns , setHideGreenColumns ] =
294
+ useHideGreenColumnsPreference ( ) ;
295
+ const [ useGrouping , setUseGrouping ] = useGroupingPreference (
296
+ params . nameFilter
297
+ ) ;
311
298
312
299
return (
313
- < >
314
- < div style = { { position : "relative" , clear : "both" } } >
315
- < div className = { styles . hudControlsRow } >
316
- < JobFilterInput
317
- currentFilter = { jobFilter }
318
- handleSubmit = { handleSubmit }
319
- />
320
- < SettingsPanel
321
- settingGroups = { {
322
- // You need to specify both checkBoxName and key for each setting.
323
- // `checkbox name` is used by CheckBoxSelector while `key` is
324
- // used to uniquely identify the component in the settings panel.
325
- // As far as I can CheckBoxSelector cannot read or write `key` but
326
- // React requires us to set key since it's a list element, so we
327
- // end up with some unfortunate duplication.
328
- "View Options" : [
329
- < CheckBoxSelector
330
- value = { useGrouping }
331
- setValue = { ( value ) => setUseGrouping ( value ) }
332
- checkBoxName = "groupView"
333
- key = "groupView"
334
- labelText = { "Use grouped view" }
335
- /> ,
336
- < MonsterFailuresCheckbox key = "monsterFailures" /> ,
337
- ] ,
338
- "Filter Options" : [
339
- < CheckBoxSelector
340
- value = { hideUnstable }
341
- setValue = { ( value ) => setHideUnstable ( value ) }
342
- checkBoxName = "hideUnstable"
343
- key = "hideUnstable"
344
- labelText = { "Hide unstable jobs" }
345
- /> ,
346
- < CheckBoxSelector
347
- value = { hideGreenColumns }
348
- setValue = { ( value ) => setHideGreenColumns ( value ) }
349
- checkBoxName = "hideGreenColumns"
350
- key = "hideGreenColumns"
351
- labelText = { "Hide green columns" }
352
- /> ,
353
- < CheckBoxSelector
354
- value = { mergeEphemeralLF }
355
- setValue = { setMergeEphemeralLF }
356
- checkBoxName = "mergeEphemeralLF"
357
- key = "mergeEphemeralLF"
358
- labelText = { "Condense LF, ephemeral jobs" }
359
- /> ,
360
- ] ,
361
- } }
362
- isOpen = { settingsPanelOpen }
363
- onToggle = { ( ) => setSettingsPanelOpen ( ! settingsPanelOpen ) }
364
- />
365
- </ div >
366
- < table className = { styles . hudTable } style = { { overflow : "auto" } } >
367
- < GroupHudTableColumns names = { headerNames } />
368
- < GroupHudTableHeader names = { headerNames } />
369
- { children }
370
- </ table >
371
- </ div >
372
- </ >
300
+ < div className = { styles . hudControlsRow } >
301
+ < JobFilterInput currentFilter = { jobFilter } handleSubmit = { handleSubmit } />
302
+ < SettingsPanel
303
+ settingGroups = { {
304
+ // You need to specify both checkBoxName and key for each setting.
305
+ // `checkbox name` is used by CheckBoxSelector while `key` is
306
+ // used to uniquely identify the component in the settings panel.
307
+ // As far as I can CheckBoxSelector cannot read or write `key` but
308
+ // React requires us to set key since it's a list element, so we
309
+ // end up with some unfortunate duplication.
310
+ "View Options" : [
311
+ < CheckBoxSelector
312
+ value = { useGrouping }
313
+ setValue = { ( value ) => setUseGrouping ( value ) }
314
+ checkBoxName = "groupView"
315
+ key = "groupView"
316
+ labelText = { "Use grouped view" }
317
+ /> ,
318
+ < MonsterFailuresCheckbox key = "monsterFailures" /> ,
319
+ ] ,
320
+ "Filter Options" : [
321
+ < CheckBoxSelector
322
+ value = { hideUnstable }
323
+ setValue = { ( value ) => setHideUnstable ( value ) }
324
+ checkBoxName = "hideUnstable"
325
+ key = "hideUnstable"
326
+ labelText = { "Hide unstable jobs" }
327
+ /> ,
328
+ < CheckBoxSelector
329
+ value = { hideGreenColumns }
330
+ setValue = { ( value ) => setHideGreenColumns ( value ) }
331
+ checkBoxName = "hideGreenColumns"
332
+ key = "hideGreenColumns"
333
+ labelText = { "Hide green columns" }
334
+ /> ,
335
+ < CheckBoxSelector
336
+ value = { mergeEphemeralLF }
337
+ setValue = { setMergeEphemeralLF }
338
+ checkBoxName = "mergeEphemeralLF"
339
+ key = "mergeEphemeralLF"
340
+ labelText = { "Condense LF, ephemeral jobs" }
341
+ /> ,
342
+ ] ,
343
+ } }
344
+ isOpen = { settingsPanelOpen }
345
+ onToggle = { ( ) => setSettingsPanelOpen ( ! settingsPanelOpen ) }
346
+ />
347
+ </ div >
373
348
) ;
374
349
}
375
350
@@ -416,18 +391,6 @@ export function MonsterFailuresCheckbox() {
416
391
) ;
417
392
}
418
393
419
- function HudTable ( { params } : { params : HudParams } ) {
420
- const data = useHudData ( params ) ;
421
- if ( data === undefined ) {
422
- return < LoadingPage /> ;
423
- }
424
- return (
425
- < >
426
- < GroupedHudTable params = { params } data = { data } />
427
- </ >
428
- ) ;
429
- }
430
-
431
394
function HudHeader ( { params } : { params : HudParams } ) {
432
395
function handleBranchSubmit ( branch : string ) {
433
396
window . location . href = formatHudUrlForRoute ( "hud" , { ...params , branch } ) ;
@@ -525,7 +488,10 @@ export default function Hud() {
525
488
style = { { marginLeft : "10px" } }
526
489
/>
527
490
</ div >
528
- < HudTable params = { params } />
491
+ < div style = { { position : "relative" , clear : "both" } } >
492
+ < FiltersAndSettings />
493
+ < GroupedHudTable params = { params } />
494
+ </ div >
529
495
< PageSelector params = { params } baseUrl = "hud" />
530
496
< br />
531
497
< div >
@@ -576,13 +542,9 @@ function CopyPermanentLink({
576
542
return < CopyLink textToCopy = { url } compressed = { false } style = { style } /> ;
577
543
}
578
544
579
- function GroupedHudTable ( {
580
- params,
581
- data,
582
- } : {
583
- params : HudParams ;
584
- data : RowData [ ] ;
585
- } ) {
545
+ function GroupedHudTable ( { params } : { params : HudParams } ) {
546
+ const router = useRouter ( ) ;
547
+ const data = useHudData ( params ) ;
586
548
const { data : unstableIssuesData } = useSWR < IssueLabelApiResponse > (
587
549
`/api/issue/unstable` ,
588
550
fetcher ,
@@ -592,19 +554,16 @@ function GroupedHudTable({
592
554
}
593
555
) ;
594
556
const jobNames = new Set (
595
- data . flatMap ( ( row ) => Array . from ( row . nameToJobs . keys ( ) ) )
557
+ data ? .flatMap ( ( row ) => Array . from ( row . nameToJobs . keys ( ) ) )
596
558
) ;
597
559
598
- const [ hideUnstable , setHideUnstable ] = usePreference ( "hideUnstable" ) ;
599
- const [ hideGreenColumns , setHideGreenColumns ] =
600
- useHideGreenColumnsPreference ( ) ;
601
- const [ useGrouping , setUseGrouping ] = useGroupingPreference (
602
- params . nameFilter
603
- ) ;
560
+ const [ hideUnstable ] = usePreference ( "hideUnstable" ) ;
561
+ const [ hideGreenColumns ] = useHideGreenColumnsPreference ( ) ;
562
+ const [ useGrouping ] = useGroupingPreference ( params . nameFilter ) ;
604
563
605
564
const { shaGrid, groupNameMapping, jobsWithFailures, groupsWithFailures } =
606
565
getGroupingData (
607
- data ,
566
+ data ?? [ ] ,
608
567
jobNames ,
609
568
( ! useGrouping && hideUnstable ) || ( useGrouping && ! hideUnstable ) ,
610
569
unstableIssuesData ?? [ ]
@@ -614,7 +573,6 @@ function GroupedHudTable({
614
573
615
574
const { jobFilter } = useTableFilter ( params ) ;
616
575
617
- const router = useRouter ( ) ;
618
576
useEffect ( ( ) => {
619
577
// Only run on component mount, this assumes that the user's preference is
620
578
// the value in local storage
@@ -688,26 +646,23 @@ function GroupedHudTable({
688
646
return true ;
689
647
} ) ;
690
648
649
+ if ( data === undefined ) {
650
+ return < LoadingPage /> ;
651
+ }
652
+
691
653
return (
692
654
< GroupingContext . Provider
693
655
value = { { groupNameMapping, expandedGroups, setExpandedGroups } }
694
656
>
695
- < GroupFilterableHudTable
696
- params = { params }
697
- groupNames = { names }
698
- useGrouping = { useGrouping }
699
- setUseGrouping = { setUseGrouping }
700
- hideUnstable = { hideUnstable }
701
- setHideUnstable = { setHideUnstable }
702
- hideGreenColumns = { hideGreenColumns }
703
- setHideGreenColumns = { setHideGreenColumns }
704
- >
657
+ < table className = { styles . hudTable } style = { { overflow : "auto" } } >
658
+ < GroupHudTableColumns names = { names } />
659
+ < GroupHudTableHeader names = { names } />
705
660
< HudTableBody
706
661
shaGrid = { shaGrid }
707
662
names = { names }
708
663
unstableIssues = { unstableIssuesData ?? [ ] }
709
664
/>
710
- </ GroupFilterableHudTable >
665
+ </ table >
711
666
</ GroupingContext . Provider >
712
667
) ;
713
668
}
0 commit comments