/** * BoostMedia AI Content Generator Admin - Select Reporter Step * * @package BoostMedia_AI * @license GPL-2.0-or-later */ import { useCallback, useEffect, useRef, useState } from 'react' import { ChevronLeft, ChevronRight, Sparkles, Star } from 'lucide-react' import { Badge, Button, Loader } from '../common' import { ReporterBuilder } from '../reporters/ReporterBuilder' import { endpoints } from '../../api/client' import type { Reporter } from '../../types' import type { GenerationConfig } from './SelectPostTypeStep' import { t, isRtl } from '../../lib/i18n' interface SelectReporterStepProps { config: GenerationConfig onUpdate: (config: GenerationConfig) => void onBack: () => void onNext: () => void } function formatReporterSummary(reporter: Reporter): string { return [reporter.writing_style, reporter.tone, reporter.depth_level].map((item) => t(item)).join(' / ') } export interface SelectReporterContentProps { config: GenerationConfig onUpdate: (config: GenerationConfig) => void } export function SelectReporterContent({ config, onUpdate, }: SelectReporterContentProps) { const [reporters, setReporters] = useState([]) const [loading, setLoading] = useState(true) const [builderOpen, setBuilderOpen] = useState(false) const configRef = useRef(config) useEffect(() => { configRef.current = config }, [config]) const loadReporters = useCallback(async () => { setLoading(true) try { const res = await endpoints.getReporters() const items = (res.data as Reporter[]) || [] setReporters(items) if (!configRef.current.reporterId && items.length > 0) { const defaultReporter = items.find((item) => item.is_default) || items[0] onUpdate({ ...configRef.current, reporterId: defaultReporter.id, }) } } finally { setLoading(false) } }, [onUpdate]) useEffect(() => { void loadReporters() }, [loadReporters]) if (loading) { return (
) } return (
{reporters.map((reporter) => ( ))}
setBuilderOpen(false)} onSaved={(reporter) => { setBuilderOpen(false) void loadReporters() onUpdate({ ...configRef.current, reporterId: reporter.id, }) }} onUseManualDraft={() => { setBuilderOpen(false) }} />
) } export function SelectReporterStep({ config, onUpdate, onBack, onNext, }: SelectReporterStepProps) { return (

{t('Select Reporter')}

{t('Choose the reporter persona that should shape this generation')}

) }