// Useful.jsx — вкладка «Полезное»: статьи по неделям и категориям
(function () {
const { useState } = React;
const { t, getTrimester, fetusAsset } = window.AliaData;
const { CATEGORIES, ARTICLES, weeklyArticle, getCategory, articlesByCat, getArticle } = window.AliaArticles;
function coverFor(article, lang) {
if (article.week) return fetusAsset(article.week);
const cat = getCategory(article.cat);
return 'assets/cover-' + (cat ? cat.cover : 'default') + '.svg';
}
/* ── Article reader ──────────────────────────────────────────── */
function ArticleReader({ article, lang, onBack }) {
const ru = lang === 'ru';
const s = {
wrap:{ height:'100%', overflowY:'auto', WebkitOverflowScrolling:'touch', paddingBottom:'24px' },
hero:{ position:'relative', height:200, backgroundSize:'cover', backgroundPosition:'center',
backgroundImage:`url(${coverFor(article, lang)})`, display:'flex', alignItems:'flex-end' },
back:{ position:'absolute', top:14, left:14, width:38, height:38, borderRadius:'50%', border:'none',
background:'rgba(0,0,0,0.35)', color:'#fff', fontSize:20, cursor:'pointer', backdropFilter:'blur(4px)' },
heroPad:{ padding:'16px', width:'100%', background:'linear-gradient(transparent, rgba(0,0,0,0.45))' },
heroTitle:{ color:'#fff', fontSize:24, fontWeight:900, lineHeight:1.15, textShadow:'0 1px 6px rgba(0,0,0,0.4)' },
body:{ padding:'18px 18px 0', maxWidth:560, margin:'0 auto' },
meta:{ fontSize:12, color:'var(--text-2)', fontWeight:700, marginBottom:14, textTransform:'uppercase', letterSpacing:'0.4px' },
h:{ fontSize:17, fontWeight:800, color:'var(--text)', margin:'18px 0 7px' },
p:{ fontSize:15.5, lineHeight:1.6, color:'var(--text)', opacity:0.92 },
li:{ fontSize:15, lineHeight:1.55, color:'var(--text)', opacity:0.92, marginBottom:7, paddingLeft:18, position:'relative' },
bullet:{ position:'absolute', left:0, top:0, color:'var(--primary)', fontWeight:900 },
disc:{ marginTop:22, padding:'12px 14px', background:'var(--primary-light)', borderRadius:12, fontSize:13, color:'var(--text-2)', lineHeight:1.5 },
};
const cat = getCategory(article.cat);
return (
{cat ? (ru ? cat.ru : cat.en) : ''} · {article.minutes} {t('readMin', lang)}
{article.sections.map((sec, i) => (
{sec.h &&
{sec.h}
}
{sec.p &&
{sec.p}
}
{sec.list && sec.list.map((li, j) => (
•{li}
))}
))}
{ru
? 'Материал носит информационный характер и не заменяет консультацию врача.'
: 'This content is informational and does not replace medical advice.'}
);
}
/* ── Card ────────────────────────────────────────────────────── */
function ArticleCard({ article, lang, onOpen, wide }) {
const s = {
card:{ flexShrink:0, width: wide ? 240 : 170, cursor:'pointer' },
img:{ width:'100%', height: wide ? 150 : 120, borderRadius:16, backgroundSize:'cover', backgroundPosition:'center',
backgroundImage:`url(${coverFor(article, lang)})`, boxShadow:'0 3px 14px var(--shadow)',
position:'relative', display:'flex', alignItems:'flex-start', padding:10 },
tag:{ background:'rgba(0,0,0,0.4)', color:'#fff', fontSize:10, fontWeight:700, padding:'3px 8px', borderRadius:8, backdropFilter:'blur(3px)' },
title:{ fontSize:14, fontWeight:800, color:'var(--text)', marginTop:8, lineHeight:1.25 },
sum:{ fontSize:12, color:'var(--text-2)', marginTop:3, lineHeight:1.35, display:'-webkit-box',
WebkitLineClamp:2, WebkitBoxOrient:'vertical', overflow:'hidden' },
};
return (
onOpen(article)}>
{lang === 'ru' ? 'Статья' : 'Article'}
{article.title}
{article.summary}
);
}
/* ── Main screen ─────────────────────────────────────────────── */
function UsefulScreen({ lang, currentWeek, appMode }) {
const [open, setOpen] = useState(null);
const ru = lang === 'ru';
if (open) return setOpen(null)} />;
const week = Math.max(4, Math.min(40, currentWeek || 12));
const weekArticles = appMode === 'pregnancy'
? [0, 1, 2].map(d => weeklyArticle(Math.min(40, week + d), lang)).filter(Boolean)
: [];
// Категории, релевантные режиму: в режиме цикла/ttc показываем фертильность первой
const cats = appMode === 'pregnancy'
? CATEGORIES.filter(c => c.id !== 'fertility')
: [CATEGORIES.find(c => c.id === 'fertility'),
CATEGORIES.find(c => c.id === 'body'),
CATEGORIES.find(c => c.id === 'nutrition'),
CATEGORIES.find(c => c.id === 'psychology'),
CATEGORIES.find(c => c.id === 'lifestyle')].filter(Boolean);
const s = {
wrap:{ height:'100%', overflowY:'auto', WebkitOverflowScrolling:'touch', paddingBottom:'24px' },
inner:{ padding:'18px 0 0', maxWidth:600, margin:'0 auto' },
h1:{ fontSize:26, fontWeight:900, color:'var(--text)', padding:'0 16px 6px' },
secTitle:{ fontSize:18, fontWeight:800, color:'var(--text)', padding:'18px 16px 10px' },
rail:{ display:'flex', gap:14, overflowX:'auto', padding:'0 16px 6px', scrollbarWidth:'none' },
};
return (
{t('usefulTitle', lang)}
{weekArticles.length > 0 && (
<>
{t('byWeeks', lang)}
{weekArticles.map(a =>
)}
>
)}
{cats.map(cat => {
const list = articlesByCat(cat.id);
if (!list.length) return null;
return (
);
})}
);
}
Object.assign(window, { UsefulScreen });
})();