v0.12.17 schedule view update

This commit is contained in:
2026-03-24 09:40:49 -04:00
parent b5672eb4a2
commit ce6e03d66b
4 changed files with 32 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
import { useState, useEffect, useCallback, useRef } from 'react';
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
import ReactDOM from 'react-dom';
import { api } from '../utils/api.js';
import { useToast } from '../contexts/ToastContext.jsx';
@@ -231,10 +231,36 @@ function TimeInput({ value, onChange, style }) {
}
// ── Mini Calendar (desktop) ───────────────────────────────────────────────────
function MiniCalendar({ selected, onChange, eventDates=new Set() }) {
function MiniCalendar({ selected, onChange, events=[] }) {
const [cur, setCur] = useState(()=>{ const d=new Date(selected||Date.now()); d.setDate(1); return d; });
// BUG FIX: sync displayed month when selected date changes (e.g. switching Day/Week/Month view resets to today)
useEffect(() => {
const n = new Date(selected || Date.now());
n.setDate(1); n.setHours(0,0,0,0);
setCur(prev => (prev.getFullYear()===n.getFullYear()&&prev.getMonth()===n.getMonth()) ? prev : n);
}, [selected]);
const y=cur.getFullYear(), m=cur.getMonth(), first=new Date(y,m,1).getDay(), total=daysInMonth(y,m), today=new Date();
const cells=[]; for(let i=0;i<first;i++) cells.push(null); for(let d=1;d<=total;d++) cells.push(d);
// BUG FIX: expand recurring events for the displayed month so all occurrences show as dots
const eventDates = useMemo(() => {
const rangeStart = new Date(y, m, 1);
const rangeEnd = new Date(y, m+1, 0, 23, 59, 59);
const s = new Set();
for (const ev of events) {
const occs = expandRecurringEvent(ev, rangeStart, rangeEnd);
for (const occ of occs) {
if (!occ.start_at) continue;
const d = new Date(occ.start_at);
if (d.getFullYear()===y && d.getMonth()===m)
s.add(`${y}-${String(m+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`);
}
}
return s;
}, [events, y, m]);
return (
<div style={{userSelect:'none'}}>
<div style={{display:'flex',alignItems:'center',justifyContent:'space-between',marginBottom:8,fontSize:13,fontWeight:600}}>
@@ -1469,7 +1495,7 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
setFilterKeyword('');
setFilterTypeId('');
setFilterAvailability(false);
}} eventDates={eventDates}/>
}} events={events}/>
</div>
{/* List view filters — only shown in Schedule list view */}