diff --git a/src/StatcastPitchingTool.js b/src/StatcastPitchingTool.js index 46851bc..e4754ee 100644 --- a/src/StatcastPitchingTool.js +++ b/src/StatcastPitchingTool.js @@ -110,6 +110,32 @@ const REQUIRED_HEADERS = [ parseFloat(durabilityScore) * 0.1 ).toFixed(1); + const exportToCSV = () => { + if (pitchers.length === 0) return; + +const headers = [ + 'Name', 'TM', 'Role', 'IP', 'xERA', 'xFIP', 'Deception', + 'StaminaEfficiency', 'PitchEconomy', 'HighLeverage', 'Consistency', + 'ArsenalScore', 'ContactQuality', 'Durability', 'Effectiveness' +]; + + const csvContent = [ + headers.join(','), + ...filteredPitchers.map(pitcher => headers.map(header => + (pitcher[header] || '').toString().replace(/,/g, ';') + ).join(',')) + ].join('\n'); + + const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); + const link = document.createElement('a'); + const url = URL.createObjectURL(blob); + link.setAttribute('href', url); + link.setAttribute('download', 'advanced_pitching_stats.csv'); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +}; + return { ...pitcher, Team, // Add this to include team in output @@ -193,12 +219,12 @@ const REQUIRED_HEADERS = [ setPitchers(sortedPitchers); }; - const filteredPitchers = pitchers.filter(pitcher => { - const matchesSearch = pitcher.Name?.toLowerCase().includes(searchQuery.toLowerCase()) || - pitcher.Team?.toLowerCase().includes(searchQuery.toLowerCase()); - const matchesRole = roleFilter === 'ALL' || pitcher.Role === roleFilter; - return matchesSearch && matchesRole; - }); +const filteredPitchers = pitchers.filter(pitcher => { + const matchesSearch = pitcher.Name?.toLowerCase().includes(searchQuery.toLowerCase()) || + pitcher.TM?.toLowerCase().includes(searchQuery.toLowerCase()); // Changed from Team to TM + const matchesRole = roleFilter === 'ALL' || pitcher.Role === roleFilter; + return matchesSearch && matchesRole; +}); return (