import { useState, useEffect } from 'react'; import { Button } from './ui/button'; export default function RecipeActivityEditor({ activities, setActivities, }: { activities: string[]; setActivities: (prev: string[]) => void; }) { const [newActivity, setNewActivity] = useState(''); const [messageContent, setMessageContent] = useState(''); // Extract message content from activities on component mount and when activities change useEffect(() => { const messageActivity = activities.find((activity) => activity.toLowerCase().startsWith('message:') ); if (messageActivity) { setMessageContent(messageActivity.replace(/^message:/i, '').trim()); } }, [activities]); // Get activities that are not messages const nonMessageActivities = activities.filter( (activity) => !activity.toLowerCase().startsWith('message:') ); const handleAddActivity = () => { if (newActivity.trim()) { setActivities([...activities, newActivity.trim()]); setNewActivity(''); } }; const handleRemoveActivity = (activity: string) => { setActivities(activities.filter((a) => a !== activity)); }; const handleMessageChange = (value: string) => { setMessageContent(value); // Update activities array - remove existing message and add new one if not empty const otherActivities = activities.filter( (activity) => !activity.toLowerCase().startsWith('message:') ); if (value.trim()) { setActivities([`message:${value}`, ...otherActivities]); } else { setActivities(otherActivities); } }; return (

The top-line prompts and activities that will display within your goose home page.

{/* Message Field */}

A formatted message that will appear at the top of the recipe. Supports markdown formatting.