import { useStore } from '@nanostores/react' import { $interactions, $interactionsData, $hasInteractionChanges, $saveInteractions, $changedInteractionFields } from '../stores/interactions' import { addToast } from '../stores/app' import { SaveBar, EngagementPageSkeleton, PageHeader } from '../components/shared' import { Toggle, Input } from '../components/ui' export default function EngagementPage() { const config = useStore($interactions) const { data } = useStore($interactionsData) const hasChanges = useStore($hasInteractionChanges) const changedFields = useStore($changedInteractionFields) const saveInteractions = useStore($saveInteractions) const handleSave = async () => { try { await saveInteractions.mutate(config) addToast('Settings saved', 'success') } catch { addToast('Failed to save settings', 'error') } } if (!data) return return (
{/* Panel container - full-bleed borders */}
{/* Comments - single row toggle */}
Comments
Allow readers to comment on your posts
$interactions.setKey('comments_enabled', v)} />
{/* Reactions - toggle with expandable options */}
Reactions
Let readers react to your posts
$interactions.setKey('reactions_enabled', v)} />
{config.reactions_enabled && (
{['emoji', 'upvote'].map(mode => ( ))}
{config.reaction_mode === 'emoji' && (
$interactions.setKey('reaction_emojis', v)} placeholder="👍 ❤️ 🎉 🤔" />

Space-separated list of emoji reactions

)} {config.reaction_mode === 'upvote' && (
$interactions.setKey('upvote_icon', v)} placeholder="👍" />
)}
Require Authentication
Users must be logged in to react
$interactions.setKey('reactions_require_auth', v)} />
)}
{hasChanges && }
) }