From 7355570a0bcec5398040223c4f700a6c66beff34 Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Mon, 29 Dec 2025 05:50:50 +0000 Subject: [PATCH] select newly created project/org --- packages/frontend/src/Index.tsx | 38 ++++++++++++++++--- .../src/components/create-organisation.tsx | 11 +++++- .../src/components/create-project.tsx | 11 +++++- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/packages/frontend/src/Index.tsx b/packages/frontend/src/Index.tsx index 8c66c2c..1c46376 100644 --- a/packages/frontend/src/Index.tsx +++ b/packages/frontend/src/Index.tsx @@ -45,7 +45,7 @@ function Index() { const [issues, setIssues] = useState([]); const [selectedIssue, setSelectedIssue] = useState(null); - const refetchOrganisations = async () => { + const refetchOrganisations = async (options?: { selectOrganisationId?: number }) => { try { const res = await fetch(`${serverURL}/organisation/by-user?userId=${user.id}`, { headers: getAuthHeaders(), @@ -54,7 +54,16 @@ function Index() { setOrganisations(data); - // attempt to retain selected organisation (avoid re-fetching projects and issues) + // select newly created organisation + if (options?.selectOrganisationId) { + const created = data.find((o) => o.Organisation.id === options.selectOrganisationId); + if (created) { + setSelectedOrganisation(created); + return; + } + } + + // preserve previously selected organisation setSelectedOrganisation((prev) => { if (!prev) return data[0] || null; const stillExists = data.find((o) => o.Organisation.id === prev.Organisation.id); @@ -71,7 +80,7 @@ function Index() { void refetchOrganisations(); }, [user.id]); - const refetchProjects = async (organisationId: number) => { + const refetchProjects = async (organisationId: number, options?: { selectProjectId?: number }) => { try { const res = await fetch( `${serverURL}/projects/by-organisation?organisationId=${organisationId}`, @@ -83,6 +92,16 @@ function Index() { const data = (await res.json()) as ProjectResponse[]; setProjects(data); + // select newly created project + if (options?.selectProjectId) { + const created = data.find((p) => p.Project.id === options.selectProjectId); + if (created) { + setSelectedProject(created); + return; + } + } + + // preserve previously selected project setSelectedProject((prev) => { if (!prev) return data[0] || null; const stillExists = data.find((p) => p.Project.id === prev.Project.id); @@ -175,7 +194,12 @@ function Index() { Create Organisation } - completeAction={refetchOrganisations} + completeAction={async (organisationId) => { + if (!selectedOrganisation) return; + await refetchOrganisations({ + selectOrganisationId: organisationId, + }); + }} /> @@ -229,9 +253,11 @@ function Index() { Create Project } - completeAction={async () => { + completeAction={async (projectId) => { if (!selectedOrganisation) return; - await refetchProjects(selectedOrganisation.Organisation.id); + await refetchProjects(selectedOrganisation.Organisation.id, { + selectProjectId: projectId, + }); }} /> diff --git a/packages/frontend/src/components/create-organisation.tsx b/packages/frontend/src/components/create-organisation.tsx index 610a169..b4f246c 100644 --- a/packages/frontend/src/components/create-organisation.tsx +++ b/packages/frontend/src/components/create-organisation.tsx @@ -25,7 +25,7 @@ export function CreateOrganisation({ completeAction, }: { trigger?: React.ReactNode; - completeAction?: () => void | Promise; + completeAction?: (organisationId: number) => void | Promise; }) { const serverURL = import.meta.env.VITE_SERVER_URL?.trim() || "http://localhost:3000"; @@ -109,10 +109,17 @@ export function CreateOrganisation({ return; } + const organisation = (await res.json()) as { id?: number }; + if (!organisation.id) { + setError("failed to create organisation"); + setSubmitting(false); + return; + } + setOpen(false); reset(); try { - await completeAction?.(); + await completeAction?.(organisation.id); } catch (actionErr) { console.error(actionErr); } diff --git a/packages/frontend/src/components/create-project.tsx b/packages/frontend/src/components/create-project.tsx index 0d3e7f7..c9d01d3 100644 --- a/packages/frontend/src/components/create-project.tsx +++ b/packages/frontend/src/components/create-project.tsx @@ -25,7 +25,7 @@ export function CreateProject({ }: { organisationId?: number; trigger?: React.ReactNode; - completeAction?: () => void | Promise; + completeAction?: (projectId: number) => void | Promise; }) { const serverURL = import.meta.env.VITE_SERVER_URL?.trim() || "http://localhost:3000"; @@ -113,10 +113,17 @@ export function CreateProject({ return; } + const project = (await res.json()) as { id?: number }; + if (!project.id) { + setError("failed to create project"); + setSubmitting(false); + return; + } + setOpen(false); reset(); try { - await completeAction?.(); + await completeAction?.(project.id); } catch (actionErr) { console.error(actionErr); }