import { usePileCapStore } from '../../store/pileCapStore'; import { LoadsDiagram } from './LoadsDiagram'; import type { LoadCase } from '../../types/pileCap'; export const LoadsInput = () => { const loads = usePileCapStore(state => state.loads); const setLoads = usePileCapStore(state => state.setLoads); const activeCase = loads.cases.find(c => c.id === loads.activeLoadCase) || loads.cases[0]; const updateCase = (updates: Partial) => { const newCases = loads.cases.map(c => c.id === activeCase.id ? { ...c, ...updates } : c ); setLoads({ cases: newCases }); }; const addCase = () => { const newId = `case-${loads.cases.length + 1}`; const newCase: LoadCase = { id: newId, name: `Load Case ${loads.cases.length + 1}`, deadLoad: 0, liveLoad: 0, roofLiveLoad: 0, snowLoad: 0, rainLoad: 0, seismicLoad: 0, windLoad: 0, momentX: 0, momentY: 0, shearX: 0, shearY: 0 }; setLoads({ cases: [...loads.cases, newCase], activeLoadCase: newId }); }; const deleteCase = (id: string) => { if (loads.cases.length <= 1) return; const newCases = loads.cases.filter(c => c.id !== id); setLoads({ cases: newCases, activeLoadCase: newCases[0].id }); }; return (
Load Cases
{/* Case Tabs */}
{loads.cases.map(c => ( ))}
{/* Case Name & Delete */}
updateCase({ name: e.target.value })} style={{ flex: 1 }} /> {loads.cases.length > 1 && ( )}
Axial Loads (kips)
updateCase({ deadLoad: parseFloat(e.target.value) || 0 })} />
updateCase({ liveLoad: parseFloat(e.target.value) || 0 })} />
updateCase({ roofLiveLoad: parseFloat(e.target.value) || 0 })} />
updateCase({ snowLoad: parseFloat(e.target.value) || 0 })} />
updateCase({ rainLoad: parseFloat(e.target.value) || 0 })} />
updateCase({ windLoad: parseFloat(e.target.value) || 0 })} />
updateCase({ seismicLoad: parseFloat(e.target.value) || 0 })} />
Moments & Shears
updateCase({ momentX: parseFloat(e.target.value) || 0 })} />
updateCase({ momentY: parseFloat(e.target.value) || 0 })} />
updateCase({ shearX: parseFloat(e.target.value) || 0 })} />
updateCase({ shearY: parseFloat(e.target.value) || 0 })} />
); };