feat: Add Enable/Disable toggle functionality for automation control
Enhanced Button Behavior: - DISABLE button (Yellow): Prevents automation triggers when positions exist - ENABLE button (Green): Re-enables automation triggers - STOP button (Red): Stops active automation when running - Dynamic color coding and tooltips for each state Smart State Management: - Tracks manual disable state independently of automation status - Button toggles between DISABLE → ENABLE → DISABLE cycle - Preserves safety when positions exist but automation not running User Control Features: - Safe position management: Disable before closing positions manually - Easy re-activation: Enable when ready for automated trading - Emergency stop: Always available for complete shutdown Button Color System: - 🛑 Red: Active automation (STOP) - 🛑 Yellow: Ready to disable triggers (DISABLE) - ✅ Green: Disabled, ready to enable (ENABLE) - 🚨 Red Dark: Emergency shutdown (EMERGENCY) Now users can safely toggle automation on/off while managing positions manually.
This commit is contained in:
@@ -28,6 +28,7 @@ export default function AutomationPageV2() {
|
||||
const [positions, setPositions] = useState([])
|
||||
const [loading, setLoading] = useState(false)
|
||||
const [monitorData, setMonitorData] = useState(null)
|
||||
const [automationDisabled, setAutomationDisabled] = useState(false) // Track manual disable state
|
||||
|
||||
useEffect(() => {
|
||||
fetchStatus()
|
||||
@@ -200,7 +201,22 @@ Based on comprehensive technical analysis across multiple timeframes:
|
||||
}
|
||||
|
||||
const handleStop = async () => {
|
||||
console.log('🛑 Stopping automation...')
|
||||
const isCurrentlyDisabled = automationDisabled
|
||||
|
||||
if (status?.isActive) {
|
||||
// If automation is running, stop it
|
||||
console.log('🛑 Stopping active automation...')
|
||||
} else if (!isCurrentlyDisabled) {
|
||||
// If automation not running but not disabled, disable it
|
||||
console.log('🛑 Disabling automation triggers...')
|
||||
} else {
|
||||
// If disabled, enable it
|
||||
console.log('✅ Enabling automation triggers...')
|
||||
setAutomationDisabled(false)
|
||||
setLoading(false)
|
||||
return
|
||||
}
|
||||
|
||||
setLoading(true)
|
||||
try {
|
||||
const response = await fetch('/api/automation/stop', {
|
||||
@@ -211,7 +227,12 @@ Based on comprehensive technical analysis across multiple timeframes:
|
||||
const data = await response.json()
|
||||
|
||||
if (data.success) {
|
||||
console.log('✅ Automation stopped successfully')
|
||||
if (status?.isActive) {
|
||||
console.log('✅ Automation stopped successfully')
|
||||
} else {
|
||||
console.log('✅ Automation triggers disabled')
|
||||
setAutomationDisabled(true)
|
||||
}
|
||||
fetchStatus()
|
||||
} else {
|
||||
console.error('Failed to stop automation:', data.error)
|
||||
@@ -385,18 +406,30 @@ Based on comprehensive technical analysis across multiple timeframes:
|
||||
<button
|
||||
onClick={handleStop}
|
||||
disabled={loading}
|
||||
className="px-8 py-4 bg-gradient-to-r from-red-600 to-red-700 text-white rounded-xl hover:from-red-700 hover:to-red-800 transition-all duration-200 disabled:opacity-50 font-semibold shadow-lg shadow-red-500/25 transform hover:scale-105"
|
||||
title={status?.isActive ? "Stop active automation" : "Prevent automation from triggering on position close"}
|
||||
className={`px-8 py-4 rounded-xl transition-all duration-200 disabled:opacity-50 font-semibold shadow-lg transform hover:scale-105 ${
|
||||
status?.isActive
|
||||
? 'bg-gradient-to-r from-red-600 to-red-700 hover:from-red-700 hover:to-red-800 shadow-red-500/25 text-white'
|
||||
: automationDisabled
|
||||
? 'bg-gradient-to-r from-green-600 to-green-700 hover:from-green-700 hover:to-green-800 shadow-green-500/25 text-white'
|
||||
: 'bg-gradient-to-r from-yellow-600 to-yellow-700 hover:from-yellow-700 hover:to-yellow-800 shadow-yellow-500/25 text-white'
|
||||
}`}
|
||||
title={
|
||||
status?.isActive
|
||||
? "Stop active automation"
|
||||
: automationDisabled
|
||||
? "Enable automation triggers - allows automation to start when conditions are met"
|
||||
: "Disable automation triggers - prevents automation from starting on position close"
|
||||
}
|
||||
>
|
||||
{loading ? (
|
||||
<div className="flex items-center space-x-2">
|
||||
<div className="w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"></div>
|
||||
<span>Stopping...</span>
|
||||
<span>Processing...</span>
|
||||
</div>
|
||||
) : (
|
||||
<div className="flex items-center space-x-2">
|
||||
<span>🛑</span>
|
||||
<span>{status?.isActive ? 'STOP' : 'DISABLE'}</span>
|
||||
<span>{status?.isActive ? '🛑' : automationDisabled ? '✅' : '🛑'}</span>
|
||||
<span>{status?.isActive ? 'STOP' : automationDisabled ? 'ENABLE' : 'DISABLE'}</span>
|
||||
</div>
|
||||
)}
|
||||
</button>
|
||||
|
||||
Reference in New Issue
Block a user