mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 08:18:07 +00:00
更新用户界面组件,使用 Ink 的 stdin 检测替代原有的 TTY 检测,确保在不同环境下的输入支持。同时,修改启动脚本以确保 Bun 启动时正确处理 TTY 输入,提升用户交互体验。
This commit is contained in:
+8
-2
@@ -1,5 +1,5 @@
|
||||
import React, { useState } from "react";
|
||||
import { Box, Text, useInput } from "ink";
|
||||
import { Box, Text, useInput, useStdin } from "ink";
|
||||
import { TrendApp } from "./TrendApp";
|
||||
import { MakerApp } from "./MakerApp";
|
||||
import { OffsetMakerApp } from "./OffsetMakerApp";
|
||||
@@ -32,9 +32,15 @@ const STRATEGIES: StrategyOption[] = [
|
||||
},
|
||||
];
|
||||
|
||||
const inputSupported = Boolean(process.stdin && (process.stdin as any).isTTY);
|
||||
// Prefer Ink's stdin detection to avoid false negatives when spawned by shells
|
||||
// that don't propagate process.stdin TTY flags correctly.
|
||||
function useInputSupported() {
|
||||
const { isRawModeSupported } = useStdin();
|
||||
return Boolean(isRawModeSupported);
|
||||
}
|
||||
|
||||
export function App() {
|
||||
const inputSupported = useInputSupported();
|
||||
const [cursor, setCursor] = useState(0);
|
||||
const [selected, setSelected] = useState<StrategyOption | null>(null);
|
||||
|
||||
|
||||
+6
-2
@@ -1,5 +1,5 @@
|
||||
import React, { useEffect, useRef, useState } from "react";
|
||||
import { Box, Text, useInput } from "ink";
|
||||
import { Box, Text, useInput, useStdin } from "ink";
|
||||
import { makerConfig } from "../config";
|
||||
import { AsterExchangeAdapter } from "../exchanges/aster-adapter";
|
||||
import { MakerEngine, type MakerEngineSnapshot } from "../core/maker-engine";
|
||||
@@ -10,9 +10,13 @@ interface MakerAppProps {
|
||||
onExit: () => void;
|
||||
}
|
||||
|
||||
const inputSupported = Boolean(process.stdin && (process.stdin as any).isTTY);
|
||||
function useInputSupported() {
|
||||
const { isRawModeSupported } = useStdin();
|
||||
return Boolean(isRawModeSupported);
|
||||
}
|
||||
|
||||
export function MakerApp({ onExit }: MakerAppProps) {
|
||||
const inputSupported = useInputSupported();
|
||||
const [snapshot, setSnapshot] = useState<MakerEngineSnapshot | null>(null);
|
||||
const [error, setError] = useState<Error | null>(null);
|
||||
const engineRef = useRef<MakerEngine | null>(null);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, { useEffect, useRef, useState } from "react";
|
||||
import { Box, Text, useInput } from "ink";
|
||||
import { Box, Text, useInput, useStdin } from "ink";
|
||||
import { makerConfig } from "../config";
|
||||
import { AsterExchangeAdapter } from "../exchanges/aster-adapter";
|
||||
import { OffsetMakerEngine, type OffsetMakerEngineSnapshot } from "../core/offset-maker-engine";
|
||||
@@ -10,9 +10,13 @@ interface OffsetMakerAppProps {
|
||||
onExit: () => void;
|
||||
}
|
||||
|
||||
const inputSupported = Boolean(process.stdin && (process.stdin as any).isTTY);
|
||||
function useInputSupported() {
|
||||
const { isRawModeSupported } = useStdin();
|
||||
return Boolean(isRawModeSupported);
|
||||
}
|
||||
|
||||
export function OffsetMakerApp({ onExit }: OffsetMakerAppProps) {
|
||||
const inputSupported = useInputSupported();
|
||||
const [snapshot, setSnapshot] = useState<OffsetMakerEngineSnapshot | null>(null);
|
||||
const [error, setError] = useState<Error | null>(null);
|
||||
const engineRef = useRef<OffsetMakerEngine | null>(null);
|
||||
|
||||
+6
-2
@@ -1,5 +1,5 @@
|
||||
import React, { useEffect, useRef, useState } from "react";
|
||||
import { Box, Text, useInput } from "ink";
|
||||
import { Box, Text, useInput, useStdin } from "ink";
|
||||
import { tradingConfig } from "../config";
|
||||
import { AsterExchangeAdapter } from "../exchanges/aster-adapter";
|
||||
import { TrendEngine, type TrendEngineSnapshot } from "../core/trend-engine";
|
||||
@@ -12,9 +12,13 @@ interface TrendAppProps {
|
||||
onExit: () => void;
|
||||
}
|
||||
|
||||
const inputSupported = Boolean(process.stdin && (process.stdin as any).isTTY);
|
||||
function useInputSupported() {
|
||||
const { isRawModeSupported } = useStdin();
|
||||
return Boolean(isRawModeSupported);
|
||||
}
|
||||
|
||||
export function TrendApp({ onExit }: TrendAppProps) {
|
||||
const inputSupported = useInputSupported();
|
||||
const [snapshot, setSnapshot] = useState<TrendEngineSnapshot | null>(null);
|
||||
const [error, setError] = useState<Error | null>(null);
|
||||
const engineRef = useRef<TrendEngine | null>(null);
|
||||
|
||||
Reference in New Issue
Block a user