const PROJECT_FIELDS = [ { key: 'LOG TITLE', label: 'Log Title' }, { key: 'HOLE NO', label: 'Hole No.' }, { key: 'PROJECT NO', label: 'Project No.' }, { key: 'PROJECT', label: 'Project' }, { key: 'LOCATION', label: 'Location' }, { key: 'STARTED', label: 'Started' }, { key: 'FINISHED', label: 'Finished' }, { key: 'DRILL METHOD', label: 'Drill Method' }, { key: 'GROUND ELEV. (M)', label: 'Ground Elev. (m)', type: 'number' }, { key: 'COORDINATES (M) N', label: 'N (m)' }, { key: 'COORDINATES (M) E', label: 'E (m)' }, { key: 'LOGGED BY', label: 'Logged By' }, { key: 'CHECKED BY', label: 'Checked By' }, { key: 'WATER LEVEL (M)', label: 'Water Level (m)', type: 'number' }, ]; const SOIL_TYPES = ['', 'ASPHALT', 'CLAY', 'GRAVEL', 'SAND', 'BACKFILL']; const Field = ({ label, value, type = 'text', onChange }) => (
onChange(type === 'number' && e.target.value !== '' ? Number(e.target.value) : e.target.value)} />
); const Checkbox = ({ label, value, onChange }) => (
onChange(e.target.checked)} />
); const ProjectForm = ({ payload, setPayload }) => { if (!payload) return null; const info = payload.info || {}; const setInfo = (key, value) => setPayload(p => ({ ...p, info: { ...p.info, [key]: value } })); const setTop = (key, value) => setPayload(p => ({ ...p, [key]: value })); return ( <>

Project

{PROJECT_FIELDS.map(f => ( setInfo(f.key, v)} /> ))} ); }; const SettingsForm = ({ payload, setPayload }) => { if (!payload) return null; const setTop = (key, value) => setPayload(p => ({ ...p, [key]: value })); return ( <>

Settings

setTop('depth_per_sheet_m', v)} /> ); }; const LayersForm = ({ payload, setPayload }) => { if (!payload) return null; const layers = payload.layers || []; const updateLayer = (i, key, value) => setPayload(p => ({ ...p, layers: p.layers.map((l, idx) => idx === i ? { ...l, [key]: value } : l), })); const addLayer = () => { const last = layers[layers.length - 1]; const newTop = last ? last.depth_end_m : 0; setPayload(p => ({ ...p, layers: [...(p.layers || []), { depth_start_m: newTop, depth_end_m: newTop + 1, desc: '', soil_type: 'SAND', }], })); }; const removeLayer = (i) => setPayload(p => ({ ...p, layers: p.layers.filter((_, idx) => idx !== i) })); return ( <>

Layers

{layers.map((l, i) => (
#{i + 1}
Depth (m): top — bottom
updateLayer(i, 'depth_start_m', e.target.value === '' ? '' : Number(e.target.value))} placeholder="top" /> updateLayer(i, 'depth_end_m', e.target.value === '' ? '' : Number(e.target.value))} placeholder="bot" />
Soil Type Description