// Posts list — grid + filters. const { useState: useStatePo } = React; function Posts({ org, data, onOpen }) { const { Button, IconButton, Card, Badge, Pill, TextInput, SectionHead, EmptyState } = window.UI; const I = window.Icons; const { SlideThumb } = window.Carousel; const [filter, setFilter] = useStatePo('all'); const [net, setNet] = useStatePo('all'); const [q, setQ] = useStatePo(''); const filtered = data.posts.filter((p) => { if (filter !== 'all' && p.status !== filter) return false; if (net !== 'all') { if (net === 'ig' && !(p.network === 'ig' || p.network === 'both')) return false; if (net === 'tg' && !(p.network === 'tg' || p.network === 'both')) return false; } if (q && !p.title.toLowerCase().includes(q.toLowerCase())) return false; return true; }); return (
} onClick={() => onOpen.navigate('generate')}>Новая карусель} />
{[ { v: 'all', label: 'Все', count: data.posts.length }, { v: 'pending', label: 'Ждут одобрения', count: data.posts.filter(p => p.status === 'pending').length }, { v: 'ready', label: 'Готовы', count: data.posts.filter(p => p.status === 'ready').length }, { v: 'draft', label: 'Черновики', count: data.posts.filter(p => p.status === 'draft').length }, { v: 'sent', label: 'Опубликованы', count: data.posts.filter(p => p.status === 'sent').length }, ].map((f) => ( setFilter(f.v)}>{f.label} {f.count} ))}
setNet('all')}>Все сети setNet('ig')}> Instagram setNet('tg')}> Telegram
} size="sm"/>
{filtered.length === 0 ? ( } title="Ничего не нашли" sub="Попробуйте другой фильтр или поиск."/> ) : (
{filtered.map((p) => ( ))}
)}
); } window.Screens = window.Screens || {}; window.Screens.Posts = Posts;