Skip to content

Commit 9f7bf2d

Browse files
committed
Increment project names automatically for less confusion
1 parent e98e400 commit 9f7bf2d

File tree

3 files changed

+47
-17
lines changed

3 files changed

+47
-17
lines changed

apps/web/src/app/editor/[project_id]/page.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff 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
]);

apps/web/src/app/projects/page.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff 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

apps/web/src/stores/project-store.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff 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
};

0 commit comments

Comments
 (0)