v0.12.27 schedule list view update
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rosterchirp-frontend",
|
||||
"version": "0.12.26",
|
||||
"version": "0.12.27",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
@@ -952,11 +952,15 @@ function expandRecurringEvent(ev, rangeStart, rangeEnd) {
|
||||
const endDate = rule.ends === 'on' && rule.endDate ? new Date(rule.endDate + 'T23:59:59') : null;
|
||||
const endCount = rule.ends === 'after' ? (rule.endCount || 13) : null;
|
||||
|
||||
// totalOcc counts ALL occurrences from origStart regardless of range,
|
||||
// so endCount is respected even when rangeStart is after the event's start.
|
||||
let totalOcc = 0;
|
||||
|
||||
// Start from original and step forward
|
||||
while (count < maxOccurrences) {
|
||||
// Check end conditions
|
||||
if (endDate && cur > endDate) break;
|
||||
if (endCount && occurrences.length >= endCount) break;
|
||||
if (endCount && totalOcc >= endCount) break;
|
||||
if (cur > rangeEnd) break;
|
||||
|
||||
if (byDay && (rule.freq === 'weekly' || freq === 'week')) {
|
||||
@@ -964,12 +968,14 @@ function expandRecurringEvent(ev, rangeStart, rangeEnd) {
|
||||
const weekStart = new Date(cur);
|
||||
weekStart.setDate(cur.getDate() - cur.getDay()); // Sunday of this week
|
||||
for (const dayKey of byDay) {
|
||||
if (endCount && totalOcc >= endCount) break;
|
||||
const dayNum = DAY_MAP[dayKey];
|
||||
const occ = new Date(weekStart);
|
||||
occ.setDate(weekStart.getDate() + dayNum);
|
||||
occ.setHours(origStart.getHours(), origStart.getMinutes(), origStart.getSeconds());
|
||||
if (occ >= rangeStart && occ <= rangeEnd) {
|
||||
if (!endDate || occ <= endDate) {
|
||||
if (!endDate || occ <= endDate) {
|
||||
totalOcc++;
|
||||
if (occ >= rangeStart && occ <= rangeEnd) {
|
||||
const occEnd = new Date(occ.getTime() + durMs);
|
||||
occurrences.push({...ev, start_at: occ.toISOString(), end_at: occEnd.toISOString(), _virtual: true});
|
||||
}
|
||||
@@ -977,6 +983,7 @@ function expandRecurringEvent(ev, rangeStart, rangeEnd) {
|
||||
}
|
||||
cur = step(cur);
|
||||
} else {
|
||||
totalOcc++;
|
||||
if (cur >= rangeStart && cur <= rangeEnd) {
|
||||
const occEnd = new Date(cur.getTime() + durMs);
|
||||
occurrences.push({...ev, start_at: cur.toISOString(), end_at: occEnd.toISOString(), _virtual: cur.toISOString() !== ev.start_at});
|
||||
@@ -1110,7 +1117,8 @@ function ScheduleView({ events, selectedDate, onSelect, filterKeyword='', filter
|
||||
{/* Date column */}
|
||||
<div style={{width:datW,textAlign:'center',flexShrink:0}}>
|
||||
<div style={{fontSize:datFs,fontWeight:700,lineHeight:1,color:textColor}}>{s.getDate()}</div>
|
||||
<div style={{fontSize:datSFs,color:'var(--text-tertiary)',textTransform:'uppercase'}}>{SHORT_MONTHS[s.getMonth()]}, {DAYS[s.getDay()]}</div>
|
||||
<div style={{fontSize:datSFs,color:'var(--text-tertiary)',textTransform:'uppercase',lineHeight:1.5}}>{SHORT_MONTHS[s.getMonth()]}</div>
|
||||
<div style={{fontSize:datSFs,color:'var(--text-tertiary)',textTransform:'uppercase',lineHeight:1.5}}>{DAYS[s.getDay()]}</div>
|
||||
</div>
|
||||
{/* Time + dot column */}
|
||||
<div style={{width:timeW,flexShrink:0,display:'flex',alignItems:'flex-start',gap:timeGap,fontSize:timeFs,color:subColor}}>
|
||||
@@ -1417,6 +1425,7 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
|
||||
if (view==='day') d.setDate(d.getDate()+dir);
|
||||
else if (view==='week') d.setDate(d.getDate()+dir*7);
|
||||
else {
|
||||
d.setDate(1); // prevent overflow (e.g. Jan 31 + 1 month = Mar 3 without this)
|
||||
d.setMonth(d.getMonth()+dir);
|
||||
// Month nav: clear mini-calendar filter and show full month
|
||||
setFilterFromDate(null);
|
||||
|
||||
Reference in New Issue
Block a user