diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index eaa77c5..9877bbc 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -170,7 +170,6 @@ export default function App() { const [startDateOverride, setStartDateOverride] = useState('') const [failedTests, setFailedTests] = useState([]) const [scheduleData, setScheduleData] = useState({}) - const [previousScheduleData, setPreviousScheduleData] = useState({}) const [scheduleWindows, setScheduleWindows] = useState([]) const [selectedWindowId, setSelectedWindowId] = useState(null) const [completionDate, setCompletionDate] = useState(null) @@ -203,54 +202,13 @@ export default function App() { // Fetch schedule for the given weekStart (Monday) const fetchSchedule = useCallback(async (start) => { - const key = toKey(start) - - const loadLegacyWeek = async () => { - const data = await api.getScheduleWeek(key) + try { + const data = await api.getScheduleWeek(toKey(start)) setScheduleData(groupScheduleItems(data.items)) - setPreviousScheduleData({}) setScheduleWindows(data.windows ?? []) setCompletionDate(data.completion_date ?? null) - } - - try { - let versionsData = null - try { - versionsData = await api.getScheduleVersions() - } catch (_versionErr) { - // Fallback for older backend builds that do not expose /schedule/versions yet. - await loadLegacyWeek() - return - } - - const versions = versionsData.versions ?? [] - - const latestVersion = versions[0]?.schedule_version ?? null - const previousVersion = versions[1]?.schedule_version ?? null - - if (latestVersion === null) { - await loadLegacyWeek() - return - } - - const latestData = await api.getScheduleWeek(key, latestVersion) - setScheduleData(groupScheduleItems(latestData.items)) - setScheduleWindows(latestData.windows ?? []) - setCompletionDate(latestData.completion_date ?? null) - - if (previousVersion !== null) { - const previousData = await api.getScheduleWeek(key, previousVersion) - setPreviousScheduleData(groupScheduleItems(previousData.items)) - } else { - setPreviousScheduleData({}) - } } catch (e) { console.error('Failed to fetch schedule:', e) - try { - await loadLegacyWeek() - } catch (fallbackErr) { - console.error('Fallback schedule fetch also failed:', fallbackErr) - } } }, []) @@ -413,7 +371,6 @@ export default function App() {
request('POST', '/schedule/compile', opts), - getScheduleVersions: () => request('GET', '/schedule/versions'), - getScheduleWeek: (start, version = null) => { - const params = new URLSearchParams({ start }) - if (version !== null && version !== undefined) { - params.set('version', String(version)) - } - return request('GET', `/schedule/week?${params.toString()}`) - }, + getScheduleWeek: (start) => request('GET', `/schedule/week?start=${start}`), getRerunTests: () => request('GET', '/tests/rerun'), } diff --git a/frontend/src/components/Calendar.jsx b/frontend/src/components/Calendar.jsx index bc53d4b..5ec8f3b 100644 --- a/frontend/src/components/Calendar.jsx +++ b/frontend/src/components/Calendar.jsx @@ -23,14 +23,6 @@ function toDateKey(date) { return date.toISOString().slice(0, 10) } -function emptyDayShifts() { - return { shift1: [], shift2: [], shift3: [] } -} - -function dayHasTests(shifts = {}) { - return (shifts.shift1?.length ?? 0) > 0 || (shifts.shift2?.length ?? 0) > 0 || (shifts.shift3?.length ?? 0) > 0 -} - function getMondayOfWeek(date) { const d = new Date(date) const day = d.getDay() @@ -59,7 +51,6 @@ function getNextTestWindow() { // scheduleData: { "YYYY-MM-DD": { shift1: [...], shift2: [...], shift3: [...] }, ... } export default function Calendar({ scheduleData = {}, - previousScheduleData = {}, daytimeDateKey = null, weekStart, onWeekChange, @@ -84,34 +75,6 @@ export default function Calendar({ // Reorder columns: Sun Mon Tue Wed Thu Fri Sat // weekStart is Monday, so days[0]=Mon ... days[6]=Sun → put Sunday first const orderedDays = [ ...days.slice(0, 7)] - const daySourceByKey = useMemo(() => { - const out = {} - for (const date of orderedDays) { - const key = toDateKey(date) - const latestDay = scheduleData[key] ?? emptyDayShifts() - const previousDay = previousScheduleData[key] ?? emptyDayShifts() - - if (dayHasTests(latestDay)) { - out[key] = 'current' - } else if (dayHasTests(previousDay)) { - out[key] = 'previous' - } else { - out[key] = 'current' - } - } - return out - }, [orderedDays, scheduleData, previousScheduleData]) - const mergedScheduleData = useMemo(() => { - const out = {} - for (const date of orderedDays) { - const key = toDateKey(date) - const source = daySourceByKey[key] - out[key] = source === 'previous' - ? (previousScheduleData[key] ?? emptyDayShifts()) - : (scheduleData[key] ?? emptyDayShifts()) - } - return out - }, [orderedDays, daySourceByKey, scheduleData, previousScheduleData]) const shiftMinRows = useMemo(() => { const minima = { shift2: DEFAULT_SHIFT_MIN_ROWS, @@ -121,9 +84,9 @@ export default function Calendar({ for (const date of orderedDays) { const key = toDateKey(date) - const shifts = mergedScheduleData[key] ?? emptyDayShifts() + const shifts = scheduleData[key] ?? { shift1: [], shift2: [], shift3: [] } const nextKey = toDateKey(addDays(date, 1)) - const nextDayShift1 = mergedScheduleData[nextKey]?.shift1 ?? [] + const nextDayShift1 = scheduleData[nextKey]?.shift1 ?? [] minima.shift2 = Math.max(minima.shift2, shifts.shift2.length || DEFAULT_SHIFT_MIN_ROWS) minima.shift3 = Math.max(minima.shift3, shifts.shift3.length || DEFAULT_SHIFT_MIN_ROWS) @@ -131,7 +94,7 @@ export default function Calendar({ } return minima - }, [orderedDays, mergedScheduleData]) + }, [orderedDays, scheduleData]) const slotHeights = useMemo(() => { const calcSlotHeight = (rows) => { const safeRows = Math.max(DEFAULT_SHIFT_MIN_ROWS, rows || DEFAULT_SHIFT_MIN_ROWS) @@ -148,7 +111,7 @@ export default function Calendar({ const totalShiftHeightPx = slotHeights.shift2 + slotHeights.shift3 + slotHeights.nextDayShift1 const deviceLegendItems = Array.from( new Set( - Object.values(mergedScheduleData) + Object.values(scheduleData) .flatMap((day) => [ ...(day?.shift1 ?? []), ...(day?.shift2 ?? []), @@ -237,15 +200,13 @@ export default function Calendar({
{orderedDays.map((date) => { const key = toDateKey(date) - const shifts = mergedScheduleData[key] ?? emptyDayShifts() + const shifts = scheduleData[key] ?? { shift1: [], shift2: [], shift3: [] } const isToday = date.getTime() === today.getTime() const isWeekend = date.getDay() === 0 || date.getDay() === 6 // Get next day's shift1 for display const nextDate = addDays(date, 1) const nextKey = toDateKey(nextDate) - const nextDayShift1 = mergedScheduleData[nextKey]?.shift1 ?? [] - const shiftVariant = daySourceByKey[key] === 'previous' ? 'previous' : 'current' - const nextDayShift1Variant = daySourceByKey[nextKey] === 'previous' ? 'previous' : 'current' + const nextDayShift1 = scheduleData[nextKey]?.shift1 ?? [] // Which shifts on this date are part of the active test window? const activeShifts = new Set() if (key === activeWindow.shift3Date) activeShifts.add(3) @@ -261,11 +222,6 @@ export default function Calendar({ shifts={shifts} nextDayShift1={nextDayShift1} nextDayShift1Active={nextDayShift1Active} - shiftVariants={{ - shift2: shiftVariant, - shift3: shiftVariant, - nextDayShift1: nextDayShift1Variant, - }} shiftMinRows={shiftMinRows} slotHeights={slotHeights} showShift2={isWeekend || (daytimeDateKey !== null && key === daytimeDateKey)} @@ -282,7 +238,6 @@ export default function Calendar({ Pending Completed Rerun Required - Previous Schedule (faded) {deviceLegendItems.map((device) => ( diff --git a/frontend/src/components/DayColumn.jsx b/frontend/src/components/DayColumn.jsx index 8432bd3..e360dee 100644 --- a/frontend/src/components/DayColumn.jsx +++ b/frontend/src/components/DayColumn.jsx @@ -9,7 +9,6 @@ export default function DayColumn({ shifts = {}, nextDayShift1 = [], nextDayShift1Active = false, - shiftVariants = { shift2: 'current', shift3: 'current', nextDayShift1: 'current' }, showShift2 = false, shiftMinRows = { shift2: 1, shift3: 1, nextDayShift1: 1 }, slotHeights = { shift2: 0, shift3: 0, nextDayShift1: 0 }, @@ -53,7 +52,6 @@ export default function DayColumn({ tests={shifts.shift2} visible={true} active={activeShifts.has(2)} - variant={shiftVariants.shift2} windowDetails={getWindowForShift(2)} minContentRows={shiftMinRows.shift2} slotHeightPx={slotHeights.shift2} @@ -63,7 +61,6 @@ export default function DayColumn({ tests={shifts.shift3} visible={true} active={activeShifts.has(3)} - variant={shiftVariants.shift3} windowDetails={getWindowForShift(3)} minContentRows={shiftMinRows.shift3} slotHeightPx={slotHeights.shift3} @@ -73,7 +70,6 @@ export default function DayColumn({ tests={nextDayShift1} visible={true} active={nextDayShift1Active} - variant={shiftVariants.nextDayShift1} windowDetails={getNextDayShift1Window()} minContentRows={shiftMinRows.nextDayShift1} slotHeightPx={slotHeights.nextDayShift1} diff --git a/frontend/src/components/ShiftSlot.jsx b/frontend/src/components/ShiftSlot.jsx index 03bd9a4..7ece73e 100644 --- a/frontend/src/components/ShiftSlot.jsx +++ b/frontend/src/components/ShiftSlot.jsx @@ -7,7 +7,6 @@ export default function ShiftSlot({ tests = [], visible = true, active = false, - variant = 'current', windowDetails = null, minContentRows = 3, slotHeightPx = null, @@ -16,7 +15,6 @@ export default function ShiftSlot({ if (!visible) return null const clickable = Boolean(windowDetails && onWindowSelect) - const isPrevious = variant === 'previous' const targetRows = Math.max(1, minContentRows) const minContentHeightPx = (targetRows * TEST_CARD_ROW_HEIGHT_PX) + ((targetRows - 1) * TEST_CARD_ROW_GAP_PX) const outerMinHeightPx = Number.isFinite(slotHeightPx) && slotHeightPx > 0 @@ -37,7 +35,7 @@ export default function ShiftSlot({ style={{ minHeight: `${outerMinHeightPx}px` }} className={`border-t pt-1 pb-1.5 transition-colors ${ active ? 'border-blue-500/50 bg-blue-950/20 rounded' : 'border-gray-700/60' - } ${isPrevious ? 'bg-gray-700/15' : ''} ${clickable ? 'cursor-pointer hover:bg-gray-700/25 focus:outline-none focus:ring-1 focus:ring-cyan-400/70' : ''}`} + } ${clickable ? 'cursor-pointer hover:bg-gray-700/25 focus:outline-none focus:ring-1 focus:ring-cyan-400/70' : ''}`} >
)) )} diff --git a/frontend/src/components/TestCard.jsx b/frontend/src/components/TestCard.jsx index 0458883..29727bf 100644 --- a/frontend/src/components/TestCard.jsx +++ b/frontend/src/components/TestCard.jsx @@ -46,7 +46,7 @@ function formatConfig(config) { return formattedEntries.length > 0 ? formattedEntries.join('; ') : '—' } -export default function TestCard({ test, isPrevious = false }) { +export default function TestCard({ test }) { const style = STATUS_STYLES[test.status] ?? STATUS_STYLES.pending const deviceAccentClass = getDeviceAccentClass(test.device) const cardRef = useRef(null) @@ -90,7 +90,7 @@ export default function TestCard({ test, isPrevious = false }) { return (