diff --git a/apps/rowboat/app/projects/select/app.tsx b/apps/rowboat/app/projects/select/app.tsx index 8e8e39bc..5c7259df 100644 --- a/apps/rowboat/app/projects/select/app.tsx +++ b/apps/rowboat/app/projects/select/app.tsx @@ -44,6 +44,10 @@ export default function App() { const nextNumber = getNextAssistantNumber(sortedProjects); const newDefaultName = `Assistant ${nextNumber}`; setDefaultName(newDefaultName); + // Default open project pane if there is at least one project + if (sortedProjects.length > 0) { + setIsProjectPaneOpen(true); + } } } diff --git a/apps/rowboat/app/projects/select/components/create-project.tsx b/apps/rowboat/app/projects/select/components/create-project.tsx index 42202bcc..cd7ed294 100644 --- a/apps/rowboat/app/projects/select/components/create-project.tsx +++ b/apps/rowboat/app/projects/select/components/create-project.tsx @@ -17,7 +17,7 @@ import { BillingUpgradeModal } from "@/components/common/billing-upgrade-modal"; import { z } from 'zod'; import { Workflow } from '@/app/lib/types/workflow_types'; import { Modal } from '@/components/ui/modal'; -import { PlusIcon } from "lucide-react"; +import { FileDown, Send } from "lucide-react"; // Add glow animation styles const glowStyles = ` @@ -64,14 +64,12 @@ const glowStyles = ` const TabType = { Describe: 'describe', - Blank: 'blank', - Example: 'example', Import: 'import', } as const; type TabState = typeof TabType[keyof typeof TabType]; -const isNotBlankTemplate = (tab: TabState): boolean => tab !== 'blank'; +const isNotBlankTemplate = (tab: TabState): boolean => true; const tabStyles = clsx( "px-4 py-2 text-sm font-medium", @@ -138,8 +136,6 @@ interface CreateProjectProps { export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpen }: CreateProjectProps) { const [selectedTab, setSelectedTab] = useState(TabType.Describe); - const [isExamplesDropdownOpen, setIsExamplesDropdownOpen] = useState(false); - const dropdownRef = useRef(null); const [customPrompt, setCustomPrompt] = useState(""); const [name, setName] = useState(defaultName); const [promptError, setPromptError] = useState(null); @@ -166,70 +162,30 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe }; }, []); - // Add click outside handler - useEffect(() => { - function handleClickOutside(event: MouseEvent) { - if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { - setIsExamplesDropdownOpen(false); - } - } - - if (isExamplesDropdownOpen) { - document.addEventListener('mousedown', handleClickOutside); - } - - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [isExamplesDropdownOpen]); + // Removed dropdownRef and isExamplesDropdownOpen effect const handleTabChange = (tab: TabState) => { setSelectedTab(tab); - setIsExamplesDropdownOpen(false); setImportError(null); - if (tab === TabType.Blank) { - setCustomPrompt(''); - } else if (tab === TabType.Describe) { + if (tab === TabType.Describe) { setCustomPrompt(''); } else if (tab === TabType.Import) { setImportJson(''); } }; - const handleBlankTemplateClick = (e: React.MouseEvent) => { - e.preventDefault(); - handleTabChange(TabType.Blank); - }; - - const handleExampleSelect = (exampleName: string) => { - setSelectedTab(TabType.Example); - setCustomPrompt(starting_copilot_prompts[exampleName] || ''); - setIsExamplesDropdownOpen(false); - }; - async function handleSubmit() { try { - if (selectedTab !== TabType.Blank && !customPrompt.trim()) { + if (!customPrompt.trim()) { setPromptError("Prompt cannot be empty"); return; } - - let response; - - if (selectedTab === TabType.Blank) { - const newFormData = new FormData(); - newFormData.append('name', name); - newFormData.append('template', 'default'); - response = await createProject(newFormData); - } else { - const newFormData = new FormData(); - newFormData.append('name', name); - newFormData.append('prompt', customPrompt); - response = await createProjectFromPrompt(newFormData); - } - + const newFormData = new FormData(); + newFormData.append('name', name); + newFormData.append('prompt', customPrompt); + const response = await createProjectFromPrompt(newFormData); if ('id' in response) { - if (selectedTab !== TabType.Blank && customPrompt) { + if (customPrompt) { localStorage.setItem(`project_prompt_${response.id}`, customPrompt); } router.push(`/projects/${response.id}/workflow`); @@ -293,7 +249,7 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe {USE_MULTIPLE_PROJECTS && ( <>
-

+

Create new assistant

{!isProjectPaneOpen && ( @@ -310,225 +266,136 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe )} -
- {/* Tab Section */} -
-
- - ✨ Get started - -
- - {/* Tab Navigation */} -
- - -
- - - {isExamplesDropdownOpen && ( -
-
- {Object.entries(starting_copilot_prompts) - .filter(([name]) => name !== 'Blank Template') - .map(([name]) => ( - - )) - } -
-
- )} -
- -
-
- - {/* Import JSON Section */} - {selectedTab === TabType.Import && ( -
-
- -