v0.9.84 bug fixes

This commit is contained in:
2026-03-18 20:11:34 -04:00
parent a069407fbb
commit 71575f278e
11 changed files with 31 additions and 25 deletions

View File

@@ -100,7 +100,7 @@ function MiniCalendar({ selected, onChange, eventDates=new Set() }) {
}
// ── Mobile Filter Bar (Schedule view: keyword+type filters with month nav; Day view: calendar accordion) ──
function MobileScheduleFilter({ selected, onMonthChange, view, eventTypes, filterKeyword, onFilterKeyword, filterTypeId, onFilterTypeId, eventDates=new Set() }) {
function MobileScheduleFilter({ selected, onMonthChange, view, eventTypes, filterKeyword, onFilterKeyword, filterTypeId, onFilterTypeId, eventDates=new Set(), onInputFocus, onInputBlur }) {
// Day view: keep accordion calendar
const [open, setOpen] = useState(false);
const y=selected.getFullYear(), m=selected.getMonth();
@@ -158,8 +158,10 @@ function MobileScheduleFilter({ selected, onMonthChange, view, eventTypes, filte
<input
value={filterKeyword}
onChange={e=>onFilterKeyword(e.target.value)}
onFocus={onInputFocus}
onBlur={onInputBlur}
placeholder="Search events…"
autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck={false}
autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false}
style={{width:'100%',padding:'7px 8px 7px 28px',border:'1px solid var(--border)',borderRadius:'var(--radius)',background:'var(--background)',color:'var(--text-primary)',fontSize:13,boxSizing:'border-box'}}
/>
</div>
@@ -976,6 +978,7 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
const [editingEvent, setEditingEvent] = useState(null);
const [filterKeyword, setFilterKeyword] = useState('');
const [filterTypeId, setFilterTypeId] = useState('');
const [inputFocused, setInputFocused] = useState(false); // hides footer when keyboard open on mobile
const [detailEvent, setDetailEvent] = useState(null);
const [loading, setLoading] = useState(true);
const [createOpen, setCreateOpen] = useState(false);
@@ -1080,7 +1083,7 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
placeholder={`Keyword… (space = OR, "phrase")`}
value={filterKeyword}
onChange={e=>setFilterKeyword(e.target.value)}
autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck={false}
autoComplete="new-password" autoCorrect="off" autoCapitalize="off" spellCheck={false}
style={{ marginBottom:8, fontSize:13 }}
/>
<select
@@ -1150,6 +1153,8 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
onFilterKeyword={setFilterKeyword}
filterTypeId={filterTypeId}
onFilterTypeId={setFilterTypeId}
onInputFocus={()=>setInputFocused(true)}
onInputBlur={()=>setInputFocused(false)}
eventDates={eventDates}
onMonthChange={(dir, exactDate) => {
if(exactDate) { setSelDate(exactDate); }
@@ -1193,8 +1198,8 @@ export default function SchedulePage({ isToolManager, isMobile, onProfile, onHel
)}
</div>
{/* Mobile bottom bar — position:fixed so keyboard doesn't push it up */}
{isMobile && (
{/* Mobile bottom bar — hidden when keyboard open to avoid being pushed up */}
{isMobile && !inputFocused && (
<div style={{ position:'fixed', bottom:0, left:0, right:0, zIndex:20, background:'var(--surface)', borderTop:'1px solid var(--border)' }}>
<UserFooter onProfile={onProfile} onHelp={onHelp} onAbout={onAbout} />
</div>