File tree Expand file tree Collapse file tree 3 files changed +47
-17
lines changed
Expand file tree Collapse file tree 3 files changed +47
-17
lines changed Original file line number Diff line number Diff line change @@ -38,6 +38,7 @@ export default function Editor() {
3838 activeProject,
3939 loadProject,
4040 createNewProject,
41+ savedProjects,
4142 isInvalidProjectId,
4243 markProjectIdAsInvalid,
4344 } = useProjectStore ( ) ;
@@ -109,7 +110,27 @@ export default function Editor() {
109110 markProjectIdAsInvalid ( projectId ) ;
110111
111112 try {
112- const newProjectId = await createNewProject ( "Untitled Project" ) ;
113+ const projectExists = savedProjects . some (
114+ ( p ) => p . name === "Untitled Project"
115+ ) ;
116+ if ( ! projectExists ) {
117+ const newProjectId = await createNewProject ( "Untitled Project" ) ;
118+ router . replace ( `/editor/${ newProjectId } ` ) ;
119+ return ;
120+ }
121+
122+ let newProjectNumber = 2 ;
123+ while (
124+ savedProjects . some (
125+ ( p ) => p . name === `Untitled Project ${ newProjectNumber } `
126+ )
127+ ) {
128+ newProjectNumber ++ ;
129+ }
130+
131+ const newProjectId = await createNewProject (
132+ `Untitled Project ${ newProjectNumber } `
133+ ) ;
113134
114135 // Check again if component was unmounted
115136 if ( isCancelled ) {
@@ -146,6 +167,7 @@ export default function Editor() {
146167 loadProject ,
147168 createNewProject ,
148169 router ,
170+ savedProjects ,
149171 isInvalidProjectId ,
150172 markProjectIdAsInvalid ,
151173 ] ) ;
Original file line number Diff line number Diff line change @@ -90,8 +90,20 @@ export default function ProjectsPage() {
9090 ) ;
9191
9292 const handleCreateProject = async ( ) => {
93- const projectId = await createNewProject ( "New Project" ) ;
94- console . log ( "projectId" , projectId ) ;
93+ const projectExists = savedProjects . some ( ( p ) => p . name === "New Project" ) ;
94+ if ( ! projectExists ) {
95+ const projectId = await createNewProject ( "New Project" ) ;
96+ console . log ( "projectId" , projectId ) ;
97+ router . push ( `/editor/${ projectId } ` ) ;
98+ return ;
99+ }
100+
101+ let newProjectNumber = 2 ;
102+ while ( savedProjects . some ( ( p ) => p . name === `Project ${ newProjectNumber } ` ) ) {
103+ newProjectNumber ++ ;
104+ }
105+
106+ const projectId = await createNewProject ( `Project ${ newProjectNumber } ` ) ;
95107 router . push ( `/editor/${ projectId } ` ) ;
96108 } ;
97109
Original file line number Diff line number Diff line change @@ -339,25 +339,21 @@ export const useProjectStore = create<ProjectStore>((set, get) => ({
339339 const { savedProjects } = get ( ) ;
340340
341341 // Extract the base name (remove any existing numbering)
342- const numberMatch = project . name . match ( / ^ \( ( \d + ) \) \s + ( .+ ) $ / ) ;
343- const baseName = numberMatch ? numberMatch [ 2 ] : project . name ;
344- const existingNumbers : number [ ] = [ ] ;
345-
346- // Check for pattern "(number) baseName" in existing projects
347- savedProjects . forEach ( ( p ) => {
348- const match = p . name . match ( / ^ \( ( \d + ) \) \s + ( .+ ) $ / ) ;
349- if ( match && match [ 2 ] === baseName ) {
350- existingNumbers . push ( parseInt ( match [ 1 ] , 10 ) ) ;
351- }
352- } ) ;
342+ const baseName = project . name . replace ( / \( \d + \) $ / , "" ) ;
343+ let newName = `${ baseName } (1)` ;
344+ let counter = 1 ;
345+
346+ const existingNames = new Set ( savedProjects . map ( ( p ) => p . name ) ) ;
353347
354- const nextNumber =
355- existingNumbers . length > 0 ? Math . max ( ...existingNumbers ) + 1 : 1 ;
348+ while ( existingNames . has ( newName ) ) {
349+ counter ++ ;
350+ newName = `${ baseName } (${ counter } )` ;
351+ }
356352
357353 const newProject : TProject = {
358354 ...project , // Copy all properties from the original project
359355 id : generateUUID ( ) ,
360- name : `( ${ nextNumber } ) ${ baseName } ` ,
356+ name : newName ,
361357 createdAt : new Date ( ) ,
362358 updatedAt : new Date ( ) ,
363359 } ;
You can’t perform that action at this time.
0 commit comments