Canvas: Auto-select first project

Change-Id: I1065b20f866f9fa7152ca65b7853a60c58ac5de2
diff --git a/apps/canvas/front/src/ProjectSelect.tsx b/apps/canvas/front/src/ProjectSelect.tsx
index a643eaa..699fb04 100644
--- a/apps/canvas/front/src/ProjectSelect.tsx
+++ b/apps/canvas/front/src/ProjectSelect.tsx
@@ -13,17 +13,30 @@
 	const { toast } = useToast();
 	const store = useStateStore();
 	const [projects, setProjects] = useState<Project[]>([]);
+	const projectId = useProjectId();
+
 	const refreshProjects = useCallback(async () => {
 		try {
 			const resp = await fetch("/api/project");
-			setProjects(await resp.json());
+			const projectList = await resp.json();
+			const sortedProjects = [...projectList].sort((a, b) =>
+				a.name.localeCompare(b.name, undefined, { sensitivity: "base" }),
+			);
+			setProjects(sortedProjects);
 		} catch (e) {
 			console.log(e);
 		}
 	}, [setProjects]);
+
+	useEffect(() => {
+		if (projects.length > 0 && (projectId == null || !projects.some((p) => p.id === projectId))) {
+			store.setProject(projects[0].id);
+		}
+	}, [projectId, projects, store]);
 	useEffect(() => {
 		refreshProjects();
 	}, [refreshProjects]);
+
 	const project = useProjectId();
 	const [createNewOpen, setCreateNewOpen] = useState(false);
 	const onSelect = useCallback(