95 lines
3.5 KiB
JavaScript
95 lines
3.5 KiB
JavaScript
import { create } from 'zustand';
|
|
|
|
/**
|
|
* Runtime Store - Connection state and runtime configuration
|
|
*/
|
|
export const useRuntimeStore = create((set) => ({
|
|
// Connection state
|
|
isConnected: false,
|
|
connectionStatus: 'connecting', // 'connecting' | 'connected' | 'disconnected'
|
|
setIsConnected: (isConnected) => set({ isConnected }),
|
|
setConnectionStatus: (connectionStatus) => set({ connectionStatus }),
|
|
|
|
// System state
|
|
systemStatus: 'initializing', // 'initializing' | 'running' | 'completed'
|
|
currentDate: null,
|
|
setSystemStatus: (systemStatus) => set({ systemStatus }),
|
|
setCurrentDate: (currentDate) => set({ currentDate }),
|
|
|
|
// Progress
|
|
progress: { current: 0, total: 0 },
|
|
setProgress: (progress) => set({ progress }),
|
|
|
|
// Server mode
|
|
serverMode: null, // 'live' | 'backtest' | null
|
|
setServerMode: (serverMode) => set({ serverMode }),
|
|
|
|
// Market status
|
|
marketStatus: null,
|
|
virtualTime: null,
|
|
setMarketStatus: (marketStatus) => set({ marketStatus }),
|
|
setVirtualTime: (virtualTime) => set({ virtualTime }),
|
|
|
|
// Data sources
|
|
dataSources: null,
|
|
setDataSources: (dataSources) => set({ dataSources }),
|
|
|
|
// Runtime config
|
|
runtimeConfig: null,
|
|
setRuntimeConfig: (runtimeConfig) => set({ runtimeConfig }),
|
|
|
|
// Watchlist panel
|
|
isWatchlistPanelOpen: false,
|
|
setIsWatchlistPanelOpen: (isWatchlistPanelOpen) => set({ isWatchlistPanelOpen }),
|
|
|
|
// Watchlist draft
|
|
watchlistDraftSymbols: [],
|
|
watchlistInputValue: '',
|
|
watchlistFeedback: null,
|
|
isWatchlistSaving: false,
|
|
setWatchlistDraftSymbols: (watchlistDraftSymbols) => set({ watchlistDraftSymbols }),
|
|
setWatchlistInputValue: (watchlistInputValue) => set({ watchlistInputValue }),
|
|
setWatchlistFeedback: (watchlistFeedback) => set({ watchlistFeedback }),
|
|
setIsWatchlistSaving: (isWatchlistSaving) => set({ isWatchlistSaving }),
|
|
|
|
// Runtime settings panel
|
|
isRuntimeSettingsOpen: false,
|
|
setIsRuntimeSettingsOpen: (isRuntimeSettingsOpen) => set({ isRuntimeSettingsOpen }),
|
|
|
|
// Runtime config drafts
|
|
scheduleModeDraft: 'daily',
|
|
intervalMinutesDraft: '60',
|
|
triggerTimeDraft: '09:30',
|
|
maxCommCyclesDraft: '2',
|
|
initialCashDraft: '100000',
|
|
marginRequirementDraft: '0',
|
|
enableMemoryDraft: false,
|
|
modeDraft: 'live',
|
|
pollIntervalDraft: '10',
|
|
startDateDraft: '',
|
|
endDateDraft: '',
|
|
enableMockDraft: false,
|
|
setScheduleModeDraft: (scheduleModeDraft) => set({ scheduleModeDraft }),
|
|
setIntervalMinutesDraft: (intervalMinutesDraft) => set({ intervalMinutesDraft }),
|
|
setTriggerTimeDraft: (triggerTimeDraft) => set({ triggerTimeDraft }),
|
|
setMaxCommCyclesDraft: (maxCommCyclesDraft) => set({ maxCommCyclesDraft }),
|
|
setInitialCashDraft: (initialCashDraft) => set({ initialCashDraft }),
|
|
setMarginRequirementDraft: (marginRequirementDraft) => set({ marginRequirementDraft }),
|
|
setEnableMemoryDraft: (enableMemoryDraft) => set({ enableMemoryDraft }),
|
|
setModeDraft: (modeDraft) => set({ modeDraft }),
|
|
setPollIntervalDraft: (pollIntervalDraft) => set({ pollIntervalDraft }),
|
|
setStartDateDraft: (startDateDraft) => set({ startDateDraft }),
|
|
setEndDateDraft: (endDateDraft) => set({ endDateDraft }),
|
|
setEnableMockDraft: (enableMockDraft) => set({ enableMockDraft }),
|
|
|
|
// Runtime config feedback
|
|
runtimeConfigFeedback: null,
|
|
isRuntimeConfigSaving: false,
|
|
setRuntimeConfigFeedback: (runtimeConfigFeedback) => set({ runtimeConfigFeedback }),
|
|
setIsRuntimeConfigSaving: (isRuntimeConfigSaving) => set({ isRuntimeConfigSaving }),
|
|
|
|
// Last day history (for replay)
|
|
lastDayHistory: [],
|
|
setLastDayHistory: (lastDayHistory) => set({ lastDayHistory }),
|
|
}));
|