v0.12.17 schedule view update
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rosterchirp-frontend",
|
||||
"version": "0.12.16",
|
||||
"version": "0.12.17",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -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 */}
|
||||
|
||||
Reference in New Issue
Block a user