fix project naming issues on frontend

This commit is contained in:
Ramnique Singh 2025-08-18 12:02:44 +05:30
parent abbc2f0d2a
commit 9b7894dcd4
6 changed files with 6 additions and 68 deletions

View file

@ -1,57 +1,12 @@
'use client';
import { Project } from "@/src/entities/models/project";
import { useEffect, useState } from "react";
import { z } from "zod";
import { listProjects } from "../actions/project.actions";
import { BuildAssistantSection } from "./components/build-assistant-section";
export default function App() {
const [projects, setProjects] = useState<z.infer<typeof Project>[]>([]);
const [defaultName, setDefaultName] = useState('Assistant 1');
const getNextAssistantNumber = (projects: z.infer<typeof Project>[]) => {
const untitledProjects = projects
.map(p => p.name)
.filter(name => name.startsWith('Assistant '))
.map(name => {
const num = parseInt(name.replace('Assistant ', ''));
return isNaN(num) ? 0 : num;
});
if (untitledProjects.length === 0) return 1;
return Math.max(...untitledProjects) + 1;
};
useEffect(() => {
let ignore = false;
async function fetchProjects() {
const projects = await listProjects();
if (!ignore) {
const sortedProjects = [...projects].sort((a, b) =>
new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
);
setProjects(sortedProjects);
const nextNumber = getNextAssistantNumber(sortedProjects);
const newDefaultName = `Assistant ${nextNumber}`;
setDefaultName(newDefaultName);
}
}
fetchProjects();
return () => {
ignore = true;
}
}, []);
return (
<div className="min-h-screen bg-white dark:bg-gray-900">
<BuildAssistantSection defaultName={defaultName} />
<BuildAssistantSection />
</div>
);
}

View file

@ -19,13 +19,9 @@ import Link from 'next/link';
interface BuildAssistantSectionProps {
defaultName: string;
}
const ITEMS_PER_PAGE = 6;
export function BuildAssistantSection({ defaultName }: BuildAssistantSectionProps) {
export function BuildAssistantSection() {
const [userPrompt, setUserPrompt] = useState('');
const [isCreating, setIsCreating] = useState(false);
const [promptError, setPromptError] = useState<string | null>(null);
@ -83,8 +79,8 @@ export function BuildAssistantSection({ defaultName }: BuildAssistantSectionProp
};
// Handle template selection
const handleTemplateSelect = async (templateId: string, templateName: string) => {
await createProjectFromTemplate(templateId, templateName, router);
const handleTemplateSelect = async (templateId: string) => {
await createProjectFromTemplate(templateId, router);
};
const fetchProjects = async () => {
@ -111,7 +107,6 @@ export function BuildAssistantSection({ defaultName }: BuildAssistantSectionProp
setIsCreating(true);
try {
await createProjectWithOptions({
name: defaultName,
prompt: userPrompt.trim(),
router,
onError: (error) => {
@ -153,7 +148,6 @@ export function BuildAssistantSection({ defaultName }: BuildAssistantSectionProp
// Create project from imported JSON
await createProjectFromJsonWithOptions({
name: defaultName,
workflowJson: text,
router,
onError: (error) => {
@ -395,7 +389,7 @@ export function BuildAssistantSection({ defaultName }: BuildAssistantSectionProp
{templates.map((template) => (
<button
key={template.id}
onClick={() => handleTemplateSelect(template.id, template.name)}
onClick={() => handleTemplateSelect(template.id)}
className="block p-4 border border-gray-200 dark:border-gray-700 rounded-xl hover:border-blue-300 dark:hover:border-blue-600 hover:bg-gray-50 dark:hover:bg-gray-700/50 transition-all group hover:shadow-md text-left"
>
<div className="space-y-2">

View file

@ -170,7 +170,6 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe
setAutoCreateLoading(true);
try {
await createProjectWithOptions({
name: 'New Assistant', // Default name for auto-creation
template: urlTemplate || undefined,
prompt: urlPrompt || undefined,
router,
@ -281,7 +280,6 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe
if (importedJson) {
// Use imported JSON
await createProjectFromJsonWithOptions({
name,
workflowJson: importedJson,
router,
onError: (error) => {
@ -297,7 +295,6 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe
}
await createProjectWithOptions({
name,
template: urlTemplate || undefined,
prompt: customPrompt,
router,
@ -312,7 +309,6 @@ export function CreateProject({ defaultName, onOpenProjectPane, isProjectPaneOpe
async function handleSubmitWithTemplate(template: string) {
await createProjectWithOptions({
name,
template,
router,
onError: (error) => {

View file

@ -52,7 +52,7 @@ export function TemplatesSection({}: TemplatesSectionProps) {
// Handle template selection
const handleTemplateSelect = async (templateId: string, templateName: string) => {
await createProjectFromTemplate(templateId, templateName, router);
await createProjectFromTemplate(templateId, router);
};
useEffect(() => {

View file

@ -75,7 +75,6 @@ export default function Sidebar({ projectId, useAuth, collapsed = false, onToggl
setIsCreatingAssistant(true);
try {
await createProjectWithOptions({
name: assistantName || 'New Assistant',
prompt: assistantPrompt,
router,
onSuccess: () => {

View file

@ -3,7 +3,6 @@
import { createProject, createProjectFromWorkflowJson } from "@/app/actions/project.actions";
export interface CreateProjectOptions {
name: string;
template?: string;
prompt?: string;
router: any; // NextJS router instance
@ -12,7 +11,6 @@ export interface CreateProjectOptions {
}
export interface CreateProjectFromJsonOptions {
name: string;
workflowJson: string;
router: any; // NextJS router instance
onSuccess?: (projectId: string) => void;
@ -25,7 +23,6 @@ export interface CreateProjectFromJsonOptions {
export async function createProjectWithOptions(options: CreateProjectOptions): Promise<void> {
try {
const formData = new FormData();
formData.append('name', options.name);
if (options.template) {
formData.append('template', options.template);
@ -71,7 +68,6 @@ export async function createProjectWithOptions(options: CreateProjectOptions): P
export async function createProjectFromJsonWithOptions(options: CreateProjectFromJsonOptions): Promise<void> {
try {
const formData = new FormData();
formData.append('name', options.name);
formData.append('workflowJson', options.workflowJson);
const response = await createProjectFromWorkflowJson(formData);
@ -108,12 +104,10 @@ export async function createProjectFromJsonWithOptions(options: CreateProjectFro
*/
export async function createProjectFromTemplate(
templateId: string,
templateName: string,
router: any,
onError?: (error: any) => void
): Promise<void> {
return createProjectWithOptions({
name: templateName,
template: templateId,
router,
onError