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 [seedNewRate, setSeedNewRate] = 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 [loadingSpreaders, setLoadingSpreaders] = useState(false);
const [newSpreaderSetting, setNewSpreaderSetting] = useState({
@@ -713,19 +725,7 @@ const CreateProductModal = ({ onSubmit, onCancel, sharedProducts, categories })
</div>
{formData.productType === 'seed' && (
<>
<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>
@@ -754,6 +754,22 @@ const CreateProductModal = ({ onSubmit, onCancel, sharedProducts, categories })
<div className="grid grid-cols-2 gap-4">
<div>
{formData.productType === 'seed' ? (
<div>
<label className="label">Seeding Rates</label>
<div className="space-y-2">
<div>
<label className="label text-xs">New Lawn (lbs/1000 sq ft)</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 (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"
@@ -763,6 +779,8 @@ const CreateProductModal = ({ onSubmit, onCancel, sharedProducts, categories })
onChange={(e) => setFormData({ ...formData, customRateAmount: e.target.value })}
placeholder="2.5"
/>
</>
)}
</div>
<div>
<label className="label">Rate Unit</label>
@@ -936,6 +954,18 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
const [editSeedBlend, setEditSeedBlend] = useState([]);
const [editSeedNewRate, setEditSeedNewRate] = 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 [editSpreaderSettings, setEditSpreaderSettings] = useState([]);
@@ -1400,19 +1430,7 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
</div>
{formData.productType === 'seed' ? (
<>
<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>
<label className="label">Active Ingredients</label>
@@ -1439,6 +1457,22 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
<div className="grid grid-cols-2 gap-4">
<div>
{formData.productType === 'seed' ? (
<div>
<label className="label">Seeding Rates</label>
<div className="space-y-2">
<div>
<label className="label text-xs">New Lawn (lbs/1000 sq ft)</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 (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"
@@ -1448,6 +1482,8 @@ const EditProductModal = ({ product, onSubmit, onCancel, sharedProducts, categor
onChange={(e) => setFormData({ ...formData, customRateAmount: e.target.value })}
placeholder="2.5"
/>
</>
)}
</div>
<div>
<label className="label">Rate Unit</label>