This commit is contained in:
Jake Kasper
2025-09-03 14:29:36 -04:00
parent 41b18b8386
commit 7e28865a25

View File

@@ -537,6 +537,18 @@ const CreateProductModal = ({ onSubmit, onCancel, sharedProducts, categories })
const [seedBlend, setSeedBlend] = useState([]); // [{cultivar:'', percent:0}] const [seedBlend, setSeedBlend] = useState([]); // [{cultivar:'', percent:0}]
const [seedNewRate, setSeedNewRate] = useState(''); const [seedNewRate, setSeedNewRate] = useState('');
const [seedOverRate, setSeedOverRate] = useState(''); const [seedOverRate, setSeedOverRate] = useState('');
// Sync default rate field as average for compatibility
useEffect(() => {
if (formData.productType === 'seed') {
const n = parseFloat(seedNewRate);
const o = parseFloat(seedOverRate);
let avg = '';
if (!isNaN(n) && !isNaN(o)) avg = ((n + o) / 2).toFixed(2);
else if (!isNaN(n)) avg = n;
else if (!isNaN(o)) avg = o;
setFormData(prev => ({ ...prev, customRateAmount: avg }));
}
}, [formData.productType, seedNewRate, seedOverRate]);
const [availableSpreaders, setAvailableSpreaders] = useState([]); const [availableSpreaders, setAvailableSpreaders] = useState([]);
const [loadingSpreaders, setLoadingSpreaders] = useState(false); const [loadingSpreaders, setLoadingSpreaders] = useState(false);
const [newSpreaderSetting, setNewSpreaderSetting] = useState({ const [newSpreaderSetting, setNewSpreaderSetting] = useState({
@@ -713,19 +725,7 @@ const CreateProductModal = ({ onSubmit, onCancel, sharedProducts, categories })
</div> </div>
{formData.productType === 'seed' && ( {formData.productType === 'seed' && (
<> <SeedBlendEditor value={seedBlend} onChange={setSeedBlend} />
<SeedBlendEditor value={seedBlend} onChange={setSeedBlend} />
<div className="grid grid-cols-2 gap-3 mt-3">
<div>
<label className="label text-xs">New Lawn Seeding Rate</label>
<input type="number" step="0.01" className="input" value={seedNewRate} onChange={(e)=> setSeedNewRate(e.target.value)} placeholder="e.g., 7" />
</div>
<div>
<label className="label text-xs">Overseeding Rate</label>
<input type="number" step="0.01" className="input" value={seedOverRate} onChange={(e)=> setSeedOverRate(e.target.value)} placeholder="e.g., 3" />
</div>
</div>
</>
)} )}
<div> <div>
@@ -754,15 +754,33 @@ const CreateProductModal = ({ onSubmit, onCancel, sharedProducts, categories })
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<div> <div>
<label className="label">Application Rate</label> {formData.productType === 'seed' ? (
<input <div>
type="number" <label className="label">Seeding Rates</label>
step="0.01" <div className="space-y-2">
className="input" <div>
value={formData.customRateAmount} <label className="label text-xs">New Lawn (lbs/1000 sq ft)</label>
onChange={(e) => setFormData({ ...formData, customRateAmount: e.target.value })} <input type="number" step="0.01" className="input" value={seedNewRate} onChange={(e)=> setSeedNewRate(e.target.value)} placeholder="e.g., 7" />
placeholder="2.5" </div>
/> <div>
<label className="label text-xs">Overseeding (lbs/1000 sq ft)</label>
<input type="number" step="0.01" className="input" value={seedOverRate} onChange={(e)=> setSeedOverRate(e.target.value)} placeholder="e.g., 3" />
</div>
</div>
</div>
) : (
<>
<label className="label">Application Rate</label>
<input
type="number"
step="0.01"
className="input"
value={formData.customRateAmount}
onChange={(e) => setFormData({ ...formData, customRateAmount: e.target.value })}
placeholder="2.5"
/>
</>
)}
</div> </div>
<div> <div>
<label className="label">Rate Unit</label> <label className="label">Rate Unit</label>
@@ -936,6 +954,18 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
const [editSeedBlend, setEditSeedBlend] = useState([]); const [editSeedBlend, setEditSeedBlend] = useState([]);
const [editSeedNewRate, setEditSeedNewRate] = useState(''); const [editSeedNewRate, setEditSeedNewRate] = useState('');
const [editSeedOverRate, setEditSeedOverRate] = useState(''); const [editSeedOverRate, setEditSeedOverRate] = useState('');
// Keep default rate synced in advanced edit when seed
useEffect(() => {
if (formData.productType === 'seed') {
const n = parseFloat(editSeedNewRate);
const o = parseFloat(editSeedOverRate);
let avg = '';
if (!isNaN(n) && !isNaN(o)) avg = ((n + o) / 2).toFixed(2);
else if (!isNaN(n)) avg = n;
else if (!isNaN(o)) avg = o;
setFormData(prev => ({ ...prev, customRateAmount: avg }));
}
}, [formData.productType, editSeedNewRate, editSeedOverRate]);
const [editMode, setEditMode] = useState('basic'); // 'basic' or 'advanced' const [editMode, setEditMode] = useState('basic'); // 'basic' or 'advanced'
const [editSpreaderSettings, setEditSpreaderSettings] = useState([]); const [editSpreaderSettings, setEditSpreaderSettings] = useState([]);
@@ -1400,19 +1430,7 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
</div> </div>
{formData.productType === 'seed' ? ( {formData.productType === 'seed' ? (
<> <SeedBlendEditor value={editSeedBlend} onChange={setEditSeedBlend} />
<SeedBlendEditor value={editSeedBlend} onChange={setEditSeedBlend} />
<div className="grid grid-cols-2 gap-3 mt-3">
<div>
<label className="label text-xs">New Lawn Seeding Rate</label>
<input type="number" step="0.01" className="input" value={editSeedNewRate} onChange={(e)=> setEditSeedNewRate(e.target.value)} placeholder="e.g., 7" />
</div>
<div>
<label className="label text-xs">Overseeding Rate</label>
<input type="number" step="0.01" className="input" value={editSeedOverRate} onChange={(e)=> setEditSeedOverRate(e.target.value)} placeholder="e.g., 3" />
</div>
</div>
</>
) : ( ) : (
<div> <div>
<label className="label">Active Ingredients</label> <label className="label">Active Ingredients</label>
@@ -1439,15 +1457,33 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<div> <div>
<label className="label">Default Application Rate</label> {formData.productType === 'seed' ? (
<input <div>
type="number" <label className="label">Seeding Rates</label>
step="0.01" <div className="space-y-2">
className="input" <div>
value={formData.customRateAmount} <label className="label text-xs">New Lawn (lbs/1000 sq ft)</label>
onChange={(e) => setFormData({ ...formData, customRateAmount: e.target.value })} <input type="number" step="0.01" className="input" value={editSeedNewRate} onChange={(e)=> setEditSeedNewRate(e.target.value)} placeholder="e.g., 7" />
placeholder="2.5" </div>
/> <div>
<label className="label text-xs">Overseeding (lbs/1000 sq ft)</label>
<input type="number" step="0.01" className="input" value={editSeedOverRate} onChange={(e)=> setEditSeedOverRate(e.target.value)} placeholder="e.g., 3" />
</div>
</div>
</div>
) : (
<>
<label className="label">Default Application Rate</label>
<input
type="number"
step="0.01"
className="input"
value={formData.customRateAmount}
onChange={(e) => setFormData({ ...formData, customRateAmount: e.target.value })}
placeholder="2.5"
/>
</>
)}
</div> </div>
<div> <div>
<label className="label">Rate Unit</label> <label className="label">Rate Unit</label>