forked from admin/zeropost-tool
feat: drafts UI — /drafts review page + batch generate button
/drafts page: список черновиков по статусам (pending/approved/rejected)
Одобрить + выбрать время → scheduled_post в календарь
Редактировать текст inline, отклонить, удалить
Header: ссылка 'Черновики' (FileText иконка)
ChannelView: кнопка 'Авто ×N' для batch-генерации (async)
ChannelEdit AI-стиль: секция авто-черновиков (toggle + count + time)
API routes: /api/drafts, /api/drafts/[id]/{approve,reject}
/api/channels/[channelId]/drafts/generate
This commit is contained in:
@@ -62,6 +62,8 @@ export default function ChannelView({ channel }) {
|
||||
const [showPhotoSearch, setShowPhotoSearch] = useState(false);
|
||||
const [showFromUrl, setShowFromUrl] = useState(false);
|
||||
const [showPoll, setShowPoll] = useState(false);
|
||||
const [batchCount, setBatchCount] = useState(3);
|
||||
const [batchLoading, setBatchLoading] = useState(false);
|
||||
|
||||
// Трансформации
|
||||
const [transforming, setTransforming] = useState(false);
|
||||
@@ -400,6 +402,31 @@ export default function ChannelView({ channel }) {
|
||||
Опрос
|
||||
</button>
|
||||
)}
|
||||
{/* Batch-генерация черновиков */}
|
||||
<div className="flex items-center gap-1">
|
||||
<button
|
||||
onClick={async () => {
|
||||
setBatchLoading(true);
|
||||
try {
|
||||
const res = await fetch(`/api/channels/${channel.id}/drafts/generate?count=${batchCount}`, {
|
||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||
}).then(r => r.json());
|
||||
if (res.ok) alert(`✅ Генерирую ${batchCount} черновиков — через несколько минут появятся в /drafts`);
|
||||
else alert(res.error || 'Ошибка');
|
||||
} catch { alert('Ошибка'); }
|
||||
setBatchLoading(false);
|
||||
}}
|
||||
disabled={batchLoading}
|
||||
className="text-xs inline-flex items-center gap-1 text-purple-400 hover:text-purple-300 transition-colors"
|
||||
>
|
||||
<span>{batchLoading ? '⏳' : '⚡'}</span>
|
||||
Авто ×
|
||||
</button>
|
||||
<select value={batchCount} onChange={e => setBatchCount(+e.target.value)}
|
||||
className="text-xs bg-surface2 border border-border rounded px-1 py-0.5 text-gray-400">
|
||||
{[1,2,3,5,7,10].map(n => <option key={n} value={n}>{n}</option>)}
|
||||
</select>
|
||||
</div>
|
||||
<button
|
||||
onClick={fetchIdeas}
|
||||
disabled={loadingIdeas}
|
||||
|
||||
Reference in New Issue
Block a user