Files
PolyWeather/frontend/lib/model-utils.ts
T
2569718930@qq.com 5dc39b1573 Move model views out of the dashboard utility bulk
Probability and multi-model view adapters were still embedded in dashboard-utils even though table, panel, modal, and city-card views use them as small pure selectors. This moves them into model-utils and keeps dashboard-utils re-export compatibility.

Constraint: Preserve model/probability return shapes and existing fallback behavior.

Rejected: Merge model-utils with chart-utils | model selectors and chart data preparation change at different rates.

Confidence: high

Scope-risk: narrow

Reversibility: clean

Tested: TypeScript diagnostics for model-utils, dashboard-utils, and PanelSections

Tested: npm run build

Not-tested: Bundle analyzer size comparison.
2026-04-28 12:07:43 +08:00

52 lines
1.6 KiB
TypeScript

import type { CityDetail } from "@/lib/dashboard-types";
export function getProbabilityView(detail: CityDetail, targetDate?: string | null) {
const date = targetDate || detail.local_date;
if (date === detail.local_date) {
return {
calibrationMode: detail.probabilities?.calibration_mode ?? null,
calibrationVersion: detail.probabilities?.calibration_version ?? null,
engine: detail.probabilities?.engine ?? null,
mu: detail.probabilities?.mu ?? null,
probabilities: detail.probabilities?.distribution || [],
probabilitiesAll:
detail.probabilities?.distribution_all ||
detail.probabilities?.distribution ||
[],
shadowProbabilities: detail.probabilities?.shadow_distribution || [],
shadowProbabilitiesAll:
detail.probabilities?.shadow_distribution_all ||
detail.probabilities?.shadow_distribution ||
[],
};
}
const daily = detail.multi_model_daily?.[date];
return {
calibrationMode: null,
calibrationVersion: null,
engine: null,
mu: daily?.deb?.prediction ?? null,
probabilities: daily?.probabilities || [],
probabilitiesAll: daily?.probabilities_all || daily?.probabilities || [],
shadowProbabilities: [],
shadowProbabilitiesAll: [],
};
}
export function getModelView(detail: CityDetail, targetDate?: string | null) {
const date = targetDate || detail.local_date;
const daily = detail.multi_model_daily?.[date];
if (daily) {
return {
deb: daily.deb?.prediction ?? null,
models: daily.models || {},
};
}
return {
deb: detail.deb?.prediction ?? null,
models: detail.multi_model || {},
};
}