/* pages-inner.jsx — Kurse, KW-Plan, Checkliste, 7-Tage-Plan, Shop */
/* persistent state helper */
function useStore(key, initial) {
const [val, setVal] = useState(() => {
try { const r = localStorage.getItem(key); return r ? JSON.parse(r) : initial; }
catch (e) { return initial; }
});
useEffect(() => {
try { localStorage.setItem(key, JSON.stringify(val)); } catch (e) {}
}, [key, val]);
return [val, setVal];
}
function PageHeader({ eyebrow, title, lead, children }) {
return (
{eyebrow}
{title}
{lead &&
{lead}
}
{children}
);
}
/* ============================== Kurse ============================== */
function KursePage({ onNav }) {
return (
{COURSE_CATEGORIES.map(cat => (
{cat.courses.length} Kurse
{cat.courses.map((c, i) => (
{c.t}
{c.tag && {c.tag}}
{c.lvl}
{c.units} Einheiten
{c.dur}
))}
))}
);
}
/* ============================== KW-Plan ============================== */
function KwPlanPage({ onNav }) {
const [done, setDone] = useStore('rs.kw.done', {});
const allTasks = KW_PLAN.flatMap(w => w.tasks.map(t => t.id));
const doneCount = allTasks.filter(id => done[id]).length;
const toggle = (id) => setDone(d => ({ ...d, [id]: !d[id] }));
return (
{doneCount} / {allTasks.length} Aufgaben erledigt
{Math.round((doneCount / allTasks.length) * 100)} %
{KW_PLAN.map(w => {
const wd = w.tasks.filter(t => done[t.id]).length;
const complete = wd === w.tasks.length;
return (
KW {w.kw}
{w.phase}
{complete && }
Woche {w.week}
);
})}
);
}
/* ============================== Checkliste ============================== */
function ChecklistePage({ onNav }) {
const [done, setDone] = useStore('rs.check.done', {});
const all = CHECKLIST.flatMap((g, gi) => g.items.map((_, ii) => `${gi}-${ii}`));
const doneCount = all.filter(k => done[k]).length;
const toggle = (k) => setDone(d => ({ ...d, [k]: !d[k] }));
const reset = () => setDone({});
return (
{doneCount} / {all.length} erledigt
{CHECKLIST.map((g, gi) => {
const gd = g.items.filter((_, ii) => done[`${gi}-${ii}`]).length;
return (
{g.group}
{gd}/{g.items.length}
);
})}
);
}
/* ============================== 7-Tage-Plan ============================== */
function Plan7Page({ onNav }) {
const [done, setDone] = useStore('rs.p7.done', {});
const toggle = (k) => setDone(d => ({ ...d, [k]: !d[k] }));
return (
{PLAN_7.map((day, di) => (
-
{di + 1}
{di < PLAN_7.length - 1 && }
{day.d}
{day.focus}
{di === PLAN_7.length - 1 && Dienststart}
))}
);
}
/* ============================== Shop ============================== */
function ShopPage({ onNav }) {
return (
{SHOP.map(s => (
{s.name}
{s.badge && {s.badge}}
{s.desc}
{s.items.map((it, i) => - {it}
)}
{s.price}
))}
Preise inkl. MwSt. Digitale Inhalte sind nach dem Kauf sofort verfügbar. Kein offizielles Angebot der Bundeswehr.
);
}
Object.assign(window, { KursePage, KwPlanPage, ChecklistePage, Plan7Page, ShopPage, useStore });