feat: integrate chatbox research with datasets and backtests

This commit is contained in:
yuxuanhui
2026-09-08 12:43:00 +08:00
parent 43336ad960
commit aef8e1d310
37 changed files with 1421 additions and 42 deletions
+33 -16
View File
@@ -52,6 +52,9 @@ export default function App() {
const [backtestContext, setBacktestContext] = useState<PageContext>({
page: "backtests",
});
const [datasetContext, setDatasetContext] = useState<PageContext>({
page: "datasets",
});
const [aiAction, setAIAction] = useState<UIAction | null>(null);
const chatOffset = viewport >= 1440 && chatOpen ? chatWidth : 0;
const focusBusiness = useCallback(() => {
@@ -150,6 +153,25 @@ export default function App() {
location.hash = next;
setPage(next);
};
const handleAction = (action: UIAction) => {
if (action.type === "open_conversation") {
setChatOpen(true);
} else {
focusBusiness();
if (action.type === "open_research_input") {
setChatOpen(false);
changePage("datasets");
} else {
changePage(
action.type === "open_backtest" ||
action.type === "open_backtest_preview"
? "backtests"
: "alphas",
);
}
}
setAIAction(action);
};
const logout = async () => {
try {
await post("/auth/logout");
@@ -160,6 +182,8 @@ export default function App() {
setJobs([]);
setAIAction(null);
setAlphaContext({ page: "alphas" });
setDatasetContext({ page: "datasets" });
setBacktestContext({ page: "backtests" });
} catch (e) {
Toast.error((e as Error).message);
}
@@ -301,6 +325,8 @@ export default function App() {
</div>
<div className="alpha-page-view" hidden={page !== "datasets"}>
<DatasetPage
onContext={setDatasetContext}
action={aiAction}
account={account}
jobs={jobs}
active={page === "datasets"}
@@ -313,6 +339,7 @@ export default function App() {
</div>
<div className="alpha-page-view" hidden={page !== "alphas"}>
<AlphaPage
onAction={handleAction}
taskPanelOpen={showJobs}
account={account}
version={`${refreshKey}:${completedVersion}`}
@@ -342,11 +369,7 @@ export default function App() {
timezone={account?.timezone}
action={aiAction}
onContext={setBacktestContext}
onAction={(action) => {
focusBusiness();
changePage("alphas");
setAIAction(action);
}}
onAction={handleAction}
/>
)}
</div>
@@ -384,6 +407,7 @@ export default function App() {
)}
<div inert={catalogModal && !chatOpen}>
<ChatPanel
action={aiAction}
jobs={jobs}
open={chatOpen}
width={chatWidth}
@@ -394,7 +418,9 @@ export default function App() {
? alphaContext
: page === "backtests"
? backtestContext
: { page: page === "datasets" ? "datasets" : "account" }
: page === "datasets"
? datasetContext
: { page: "account" }
}
timezone={account?.timezone}
onSettings={() => {
@@ -407,16 +433,7 @@ export default function App() {
);
}}
onChanged={actionDone}
onAction={(action) => {
focusBusiness();
changePage(
action.type === "open_backtest" ||
action.type === "open_backtest_preview"
? "backtests"
: "alphas",
);
setAIAction(action);
}}
onAction={handleAction}
/>
</div>
</div>