Add Fill F&B from last 7 days button to worksheet toolbar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jtricerolph 2026-07-20 14:22:00 +00:00
parent b40bf96263
commit cae411eae7

View file

@ -1,5 +1,5 @@
import { useCallback, useEffect, useState } from 'react'
import { Save, RefreshCw, Camera, Trash2, Printer } from 'lucide-react'
import { Save, RefreshCw, Camera, Trash2, Printer, Repeat2 } from 'lucide-react'
import { useAuth } from '../components/AuthGate'
import { dfGetWorksheet, dfSaveWorksheet, dfGetReport, dfSaveSnapshot, dfDeleteSnapshot } from '../api'
import type { WorksheetDay, WorksheetData, ForecastReportData, ForecastSnapshot } from '../types'
@ -81,6 +81,28 @@ function WorksheetTab({ year, month }: { year: number; month: number }) {
setDirty(true)
}
function fillFnBFromLast7() {
if (!data) return
const last7 = data.days
.filter(d => d.is_past && (d.actual_dry != null || d.actual_wet != null))
.slice(-7)
if (!last7.length) return
setOverrides(prev => {
const next = { ...prev }
const futureDays = data.days.filter(d => !d.is_past)
futureDays.forEach((day, i) => {
const src = last7[i % last7.length]
next[day.date] = {
...next[day.date],
dry_override: String(src.actual_dry ?? src.forecast_dry ?? ''),
wet_override: String(src.actual_wet ?? src.forecast_wet ?? ''),
}
})
return next
})
setDirty(true)
}
async function handleSave() {
if (!canEdit) return
setSaving(true)
@ -147,6 +169,11 @@ function WorksheetTab({ year, month }: { year: number; month: number }) {
<button className="btn-icon df-btn-icon" onClick={load} title="Refresh">
<RefreshCw size={13} strokeWidth={1.75} />
</button>
{canEdit && (
<button className="btn-icon df-btn-icon" onClick={fillFnBFromLast7} title="Fill F&B from last 7 days">
<Repeat2 size={13} strokeWidth={1.75} />
</button>
)}
{canEdit && (
<button className="btn-run df-save-btn" onClick={handleSave} disabled={saving || !dirty}>
<Save size={13} strokeWidth={1.75} />