mirror of
https://github.com/AmanTahiliani/box-box.git
synced 2026-08-07 11:54:59 -04:00
fix(web): resolve practice/qualifying partial session bug by flagging starting_grid as N/A
This commit is contained in:
@@ -70,6 +70,8 @@ export function DatasetStatusView({ datasets }: Props) {
|
||||
<td>
|
||||
{info?.status === 'available' ? (
|
||||
<span className="badge badge-local">Local</span>
|
||||
) : info?.status === 'skipped' ? (
|
||||
<span className="badge badge-none">N/A</span>
|
||||
) : (
|
||||
<span className="badge badge-none">Missing</span>
|
||||
)}
|
||||
|
||||
@@ -19,9 +19,9 @@ export function DatasetStrip({ datasets }: Props) {
|
||||
<div className="dataset-strip">
|
||||
{keys.map((key) => {
|
||||
const info = datasets[key]
|
||||
const available = info?.status === 'available'
|
||||
const available = info?.status === 'available' || info?.status === 'skipped'
|
||||
return (
|
||||
<div key={key} className="ds-item" title={info ? `${info.source} · ${info.count ?? 0} rows` : 'missing'}>
|
||||
<div key={key} className="ds-item" title={info ? `${info.status === 'skipped' ? 'N/A' : info.source} · ${info.count ?? 0} rows` : 'missing'}>
|
||||
<div className={`ds-dot ${available ? 'ds-dot-local' : 'ds-dot-missing'}`} />
|
||||
<span>{DATASET_LABELS[key]}</span>
|
||||
{available && info.count != null && info.count > 0 && (
|
||||
|
||||
@@ -82,9 +82,11 @@ function SessionDetailBlock({ entry }: { entry: WeekendSession }) {
|
||||
<td className="mono" style={{ color: 'var(--text-2)' }}>
|
||||
{key}
|
||||
</td>
|
||||
<td>
|
||||
{available ? (
|
||||
<td>
|
||||
{info?.status === 'available' ? (
|
||||
<span className="badge badge-local">Local</span>
|
||||
) : info?.status === 'skipped' ? (
|
||||
<span className="badge badge-none">N/A</span>
|
||||
) : (
|
||||
<span className="badge badge-none">Missing</span>
|
||||
)}
|
||||
|
||||
@@ -9,7 +9,7 @@ export function SessionCoverageDots({ datasets }: Props) {
|
||||
return (
|
||||
<span className="coverage-dots" aria-hidden="true">
|
||||
{RACE_HUB_DATASETS.map((key) => {
|
||||
const available = datasets[key]?.status === 'available'
|
||||
const available = datasets[key]?.status === 'available' || datasets[key]?.status === 'skipped'
|
||||
return <span key={key} className={`coverage-dot ${available ? 'on' : 'off'}`} />
|
||||
})}
|
||||
</span>
|
||||
|
||||
@@ -18,7 +18,10 @@ export type RaceHubDatasetKey = (typeof RACE_HUB_DATASETS)[number]
|
||||
|
||||
export function countRaceHubDatasets(datasets: Record<string, DatasetInfo>): { available: number; total: number } {
|
||||
const total = RACE_HUB_DATASETS.length
|
||||
const available = RACE_HUB_DATASETS.filter((key) => datasets[key]?.status === 'available').length
|
||||
const available = RACE_HUB_DATASETS.filter((key) => {
|
||||
const status = datasets[key]?.status
|
||||
return status === 'available' || status === 'skipped'
|
||||
}).length
|
||||
return { available, total }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export interface DatasetInfo {
|
||||
status: 'available' | 'missing'
|
||||
source: 'local' | 'openf1' | 'none'
|
||||
status: 'available' | 'missing' | 'skipped'
|
||||
source: 'local' | 'openf1' | 'none' | 'na'
|
||||
count?: number
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package query
|
||||
|
||||
import "strings"
|
||||
|
||||
const (
|
||||
DatasetStatusAvailable = "available"
|
||||
DatasetStatusMissing = "missing"
|
||||
@@ -20,6 +22,25 @@ type DatasetInfo struct {
|
||||
Count int `json:"count,omitempty"`
|
||||
}
|
||||
|
||||
func skippedNA() DatasetInfo {
|
||||
return DatasetInfo{
|
||||
Status: "skipped",
|
||||
Source: "na",
|
||||
Count: 0,
|
||||
}
|
||||
}
|
||||
|
||||
func isGridExpected(sessionType, sessionName string) bool {
|
||||
t := strings.ToLower(sessionType)
|
||||
n := strings.ToLower(sessionName)
|
||||
// Grid is only expected on main Sprint or Race sessions, not qualifying, practice, or shootout
|
||||
return (strings.Contains(t, "race") || strings.Contains(n, "race") ||
|
||||
strings.Contains(t, "sprint") || strings.Contains(n, "sprint")) &&
|
||||
!strings.Contains(t, "qualifying") && !strings.Contains(n, "qualifying") &&
|
||||
!strings.Contains(t, "shootout") && !strings.Contains(n, "shootout") &&
|
||||
!strings.Contains(t, "practice") && !strings.Contains(n, "practice")
|
||||
}
|
||||
|
||||
func availableLocal(count int) DatasetInfo {
|
||||
return DatasetInfo{
|
||||
Status: DatasetStatusAvailable,
|
||||
|
||||
@@ -64,8 +64,12 @@ func (s *Service) GetWeekend(meetingKey int) (Weekend, error) {
|
||||
return Weekend{}, err
|
||||
}
|
||||
datasets := datasetsFromCounts(true, true, counts)
|
||||
sessionModel := sessionToModel(sess)
|
||||
if datasets["starting_grid"].Status == DatasetStatusMissing && !isGridExpected(sessionModel.SessionType, sessionModel.SessionName) {
|
||||
datasets["starting_grid"] = skippedNA()
|
||||
}
|
||||
out.Sessions = append(out.Sessions, WeekendSession{
|
||||
Session: sessionToModel(sess),
|
||||
Session: sessionModel,
|
||||
Source: responseSource(datasets),
|
||||
Datasets: datasets,
|
||||
})
|
||||
|
||||
@@ -166,6 +166,8 @@ func (s *Service) GetRaceHub(sessionKey int) (RaceHub, error) {
|
||||
}
|
||||
hub.StartingGrid = enriched
|
||||
hub.Datasets["starting_grid"] = availableLocal(len(enriched))
|
||||
} else if !isGridExpected(sessionModel.SessionType, sessionModel.SessionName) {
|
||||
hub.Datasets["starting_grid"] = skippedNA()
|
||||
}
|
||||
|
||||
stints, err := s.store.ListStints(sessionKey)
|
||||
|
||||
Reference in New Issue
Block a user