// Prayer tab — 4 columns per page, inline-editable. Add/remove items, add pages. function PrayerTab({ pages, setPages, canEdit, lastUpdate, onTouch }){ const [pi, setPi] = React.useState(0); const page = pages[pi] || []; function commit(updater){ setPages(prev => { const next = prev.map(p => p.map(c => ({ ...c, items:[...c.items] }))); updater(next); return next; }); onTouch && onTouch(); } const setTitle = (ci, val)=> commit(n => { n[pi][ci].title = val; }); const setItem = (ci, ii, val)=> commit(n => { n[pi][ci].items[ii] = val; }); const addItem = (ci)=> commit(n => { n[pi][ci].items.push('New item'); }); const delItem = (ci, ii)=> commit(n => { n[pi][ci].items.splice(ii,1); }); const toggleMark = (ci)=> commit(n => { n[pi][ci].ordered = !n[pi][ci].ordered; }); function addPage(){ setPages(prev => [...prev, [ {title:'NEW SECTION',ordered:true,items:['Item one']}, {title:'NEW SECTION',ordered:true,items:['Item one']}, {title:'NEW SECTION',ordered:true,items:['Item one']}, {title:'NEW SECTION',ordered:true,items:['Item one']} ]]); onTouch && onTouch(); setPi(pages.length); } return (
{page.map((col, ci)=>(
{}:undefined} onBlur={e=>setTitle(ci, e.target.textContent)}>{col.title}
{col.lead && (
commit(n=>{ n[pi][ci].lead = e.target.textContent; })}>{col.lead}
)} {col.items.map((it, ii)=>(
{col.ordered ? (ii+1)+'.' : '\u2022'} setItem(ci, ii, e.target.textContent)}>{it} {canEdit && }
))} {canEdit && (
)}
))}
Last Update: {lastUpdate}
{canEdit && } Page {pi+1} of {pages.length}
); } window.PrayerTab = PrayerTab;