2b1d7c0b65
The dashboard had several oversized orchestration, component, and CSS files that made product-copy changes and mobile/performance work risky. This refactor preserves behavior while splitting scan terminal CSS, opportunity helpers, future forecast panels, history/detail charts, and probability/model sections into smaller ownership boundaries. Constraint: No user-visible version bump because this batch is architecture and performance cleanup, not a release announcement. Rejected: Rewrite dashboard state management in the same batch | too broad for a safe upload after CSS and component splitting. Confidence: high Scope-risk: moderate Reversibility: clean Directive: Keep new component/CSS boundaries instead of moving product copy back into the large dashboard files. Tested: npm run build; npm run test:business; git diff --check Not-tested: Browser visual smoke test after push
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import type { ScanOpportunityRow } from "@/lib/dashboard-types";
|
|
|
|
export type PhaseMeta = {
|
|
label: string;
|
|
tone: "green" | "amber" | "blue" | "red";
|
|
};
|
|
|
|
export function getWindowPhaseMeta(
|
|
row: Pick<ScanOpportunityRow, "window_phase" | "trend_alignment">,
|
|
locale: string,
|
|
): PhaseMeta {
|
|
const mode = String(row.window_phase || "").toLowerCase();
|
|
if (mode === "city_snapshot") {
|
|
return {
|
|
label: locale === "en-US" ? "City Snapshot" : "城市概况",
|
|
tone: "blue",
|
|
};
|
|
}
|
|
if (mode === "active_peak") {
|
|
return {
|
|
label: locale === "en-US" ? "Peak Window" : "峰值窗口",
|
|
tone: "red",
|
|
};
|
|
}
|
|
if (mode === "setup_today") {
|
|
return {
|
|
label: locale === "en-US" ? "Touch Play" : "触达博弈",
|
|
tone: "red",
|
|
};
|
|
}
|
|
if (mode === "early_today") {
|
|
return {
|
|
label: locale === "en-US" ? "Early Today" : "日内早段",
|
|
tone: "blue",
|
|
};
|
|
}
|
|
if (mode === "tomorrow" || mode === "week_ahead") {
|
|
return {
|
|
label: locale === "en-US" ? "Early" : "早期机会",
|
|
tone: "blue",
|
|
};
|
|
}
|
|
if (mode === "post_peak") {
|
|
return {
|
|
label: locale === "en-US" ? "Post Peak" : "峰后确认",
|
|
tone: "amber",
|
|
};
|
|
}
|
|
if (row.trend_alignment) {
|
|
return {
|
|
label: locale === "en-US" ? "Trend" : "趋势确认",
|
|
tone: "amber",
|
|
};
|
|
}
|
|
return {
|
|
label: locale === "en-US" ? "Tradable" : "可交易",
|
|
tone: "green",
|
|
};
|
|
}
|