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",
|
||
|
|
};
|
||
|
|
}
|