fix: localStorage key consistency for Safe Paper Trading positions
- Fixed conflicting localStorage keys causing positions to disappear - Added backward compatibility to load from both old and new key patterns - Standardized to safePaperTrading_ prefix for consistency - Updated reset function to clear all key patterns - Positions should now persist when navigating between pages
This commit is contained in:
@@ -426,15 +426,18 @@ export default function SafePaperTradingPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Load paper trading data from localStorage
|
// Load paper trading data from localStorage using consistent keys
|
||||||
const savedTrades = localStorage.getItem('safePaperTrades')
|
// Check both old and new key patterns for backward compatibility
|
||||||
const savedBalance = localStorage.getItem('safePaperBalance')
|
const savedTrades = localStorage.getItem('safePaperTrading_paperTrades') || localStorage.getItem('safePaperTrades')
|
||||||
|
const savedBalance = localStorage.getItem('safePaperTrading_paperBalance') || localStorage.getItem('safePaperBalance')
|
||||||
|
|
||||||
if (savedTrades) {
|
if (savedTrades) {
|
||||||
setPaperTrades(JSON.parse(savedTrades))
|
setPaperTrades(JSON.parse(savedTrades))
|
||||||
|
console.log('📂 Restored paper trades from localStorage')
|
||||||
}
|
}
|
||||||
if (savedBalance) {
|
if (savedBalance) {
|
||||||
setPaperBalance(parseFloat(savedBalance))
|
setPaperBalance(parseFloat(savedBalance))
|
||||||
|
console.log('📂 Restored paper balance from localStorage')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch AI learning status
|
// Fetch AI learning status
|
||||||
@@ -456,8 +459,12 @@ export default function SafePaperTradingPage() {
|
|||||||
}
|
}
|
||||||
}, [selectedTimeframes])
|
}, [selectedTimeframes])
|
||||||
|
|
||||||
// Save to localStorage whenever data changes
|
// Save to localStorage whenever data changes - use consistent prefixed keys
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
localStorage.setItem('safePaperTrading_paperTrades', JSON.stringify(paperTrades))
|
||||||
|
localStorage.setItem('safePaperTrading_paperBalance', paperBalance.toString())
|
||||||
|
|
||||||
|
// Also save to old keys for backward compatibility (temporarily)
|
||||||
localStorage.setItem('safePaperTrades', JSON.stringify(paperTrades))
|
localStorage.setItem('safePaperTrades', JSON.stringify(paperTrades))
|
||||||
localStorage.setItem('safePaperBalance', paperBalance.toString())
|
localStorage.setItem('safePaperBalance', paperBalance.toString())
|
||||||
}, [paperTrades, paperBalance])
|
}, [paperTrades, paperBalance])
|
||||||
@@ -803,8 +810,15 @@ export default function SafePaperTradingPage() {
|
|||||||
setPaperBalance(1000)
|
setPaperBalance(1000)
|
||||||
setPaperTrades([])
|
setPaperTrades([])
|
||||||
setCurrentAnalysis(null)
|
setCurrentAnalysis(null)
|
||||||
|
|
||||||
|
// Clear both key patterns to ensure complete reset
|
||||||
localStorage.removeItem('safePaperTrades')
|
localStorage.removeItem('safePaperTrades')
|
||||||
localStorage.removeItem('safePaperBalance')
|
localStorage.removeItem('safePaperBalance')
|
||||||
|
localStorage.removeItem('safePaperTrading_paperTrades')
|
||||||
|
localStorage.removeItem('safePaperTrading_paperBalance')
|
||||||
|
localStorage.removeItem('safePaperTrading_currentAnalysis')
|
||||||
|
|
||||||
|
console.log('🗑️ All safe paper trading data reset')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
87
test-localStorage-persistence.js
Normal file
87
test-localStorage-persistence.js
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* Test script to check localStorage persistence for Safe Paper Trading
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Test the localStorage data that should persist
|
||||||
|
const testLocalStorageKeys = [
|
||||||
|
'safePaperTrades',
|
||||||
|
'safePaperBalance',
|
||||||
|
'safePaperTrading_paperTrades',
|
||||||
|
'safePaperTrading_paperBalance',
|
||||||
|
'safePaperTrading_currentAnalysis',
|
||||||
|
'safePaperTrading_analysisHistory',
|
||||||
|
'safePaperTrading_learningInsights'
|
||||||
|
];
|
||||||
|
|
||||||
|
console.log('📋 Testing Safe Paper Trading localStorage persistence...\n');
|
||||||
|
|
||||||
|
// Create a sample trade to test with
|
||||||
|
const sampleTrade = {
|
||||||
|
id: 'TEST_' + Date.now(),
|
||||||
|
symbol: 'SOLUSD',
|
||||||
|
type: 'BUY',
|
||||||
|
size: 100,
|
||||||
|
entryPrice: 142.50,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
status: 'OPEN',
|
||||||
|
confidence: 75,
|
||||||
|
reasoning: 'Test trade for localStorage persistence'
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log('✅ Sample trade created:', JSON.stringify(sampleTrade, null, 2));
|
||||||
|
|
||||||
|
// Test saving to both key patterns
|
||||||
|
const currentTrades = [sampleTrade];
|
||||||
|
const currentBalance = 1000;
|
||||||
|
|
||||||
|
console.log('\n💾 Saving to localStorage with both key patterns...');
|
||||||
|
|
||||||
|
// Save using both patterns
|
||||||
|
localStorage.setItem('safePaperTrades', JSON.stringify(currentTrades));
|
||||||
|
localStorage.setItem('safePaperBalance', currentBalance.toString());
|
||||||
|
localStorage.setItem('safePaperTrading_paperTrades', JSON.stringify(currentTrades));
|
||||||
|
localStorage.setItem('safePaperTrading_paperBalance', currentBalance.toString());
|
||||||
|
|
||||||
|
console.log('✅ Data saved to localStorage');
|
||||||
|
|
||||||
|
// Test reading back
|
||||||
|
console.log('\n📖 Reading back from localStorage...');
|
||||||
|
|
||||||
|
testLocalStorageKeys.forEach(key => {
|
||||||
|
const value = localStorage.getItem(key);
|
||||||
|
if (value) {
|
||||||
|
try {
|
||||||
|
const parsed = JSON.parse(value);
|
||||||
|
console.log(`✅ ${key}: ${Array.isArray(parsed) ? `${parsed.length} trades` : `value: ${parsed}`}`);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`✅ ${key}: ${value}`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`❌ ${key}: NOT FOUND`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test the backward compatibility loading logic
|
||||||
|
console.log('\n🔄 Testing backward compatibility loading...');
|
||||||
|
|
||||||
|
const loadedTrades = localStorage.getItem('safePaperTrading_paperTrades') || localStorage.getItem('safePaperTrades');
|
||||||
|
const loadedBalance = localStorage.getItem('safePaperTrading_paperBalance') || localStorage.getItem('safePaperBalance');
|
||||||
|
|
||||||
|
if (loadedTrades) {
|
||||||
|
const trades = JSON.parse(loadedTrades);
|
||||||
|
console.log(`✅ Successfully loaded ${trades.length} trades using backward compatibility`);
|
||||||
|
console.log(`📊 Trade details:`, trades[0]);
|
||||||
|
} else {
|
||||||
|
console.log('❌ Failed to load trades using backward compatibility');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loadedBalance) {
|
||||||
|
console.log(`✅ Successfully loaded balance: $${loadedBalance}`);
|
||||||
|
} else {
|
||||||
|
console.log('❌ Failed to load balance using backward compatibility');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('\n🎯 Test completed!');
|
||||||
|
console.log('💡 If you see this data when you refresh the page, localStorage persistence is working correctly.');
|
||||||
|
|
||||||
|
module.exports = { sampleTrade, testLocalStorageKeys };
|
||||||
Reference in New Issue
Block a user