diff --git a/server/db/schema.ts b/server/db/schema.ts index 36b384b..e784c52 100644 --- a/server/db/schema.ts +++ b/server/db/schema.ts @@ -130,8 +130,10 @@ export const userOrgs = sqliteTable("userOrgs", { .notNull() .references(() => users.userId), orgId: text("orgId") - .notNull() - .references(() => orgs.orgId), + .references(() => orgs.orgId, { + onDelete: "cascade" + }) + .notNull(), roleId: integer("roleId") .notNull() .references(() => roles.roleId), diff --git a/src/app/[orgId]/settings/general/page.tsx b/src/app/[orgId]/settings/general/page.tsx index e089b7c..d134715 100644 --- a/src/app/[orgId]/settings/general/page.tsx +++ b/src/app/[orgId]/settings/general/page.tsx @@ -31,7 +31,8 @@ import { CardTitle } from "@/components/ui/card"; import { AxiosResponse } from "axios"; -import { DeleteOrgResponse } from "@server/routers/org"; +import { DeleteOrgResponse, ListOrgsResponse } from "@server/routers/org"; +import { redirect, useRouter } from "next/navigation"; const GeneralFormSchema = z.object({ name: z.string() @@ -43,6 +44,7 @@ export default function GeneralPage() { const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const { orgUser } = userOrgUserContext(); + const router = useRouter(); const { org } = useOrgContext(); const { toast } = useToast(); const api = createApiClient(useEnvContext()); @@ -61,7 +63,7 @@ export default function GeneralPage() { `/org/${org?.org.orgId}` ); if (res.status === 200) { - console.log("Org deleted"); + pickNewOrgAndNavigate(); } } catch (err) { console.error(err); @@ -76,6 +78,36 @@ export default function GeneralPage() { } } + async function pickNewOrgAndNavigate() { + try { + + const res = await api.get>( + `/orgs` + ); + + if (res.status === 200) { + if (res.data.data.orgs.length > 0) { + const orgId = res.data.data.orgs[0].orgId; + // go to `/${orgId}/settings`); + router.push(`/${orgId}/settings`); + } else { + // go to `/setup` + router.push("/setup"); + } + } + } catch (err) { + console.error(err); + toast({ + variant: "destructive", + title: "Failed to fetch orgs", + description: formatAxiosError( + err, + "An error occurred while listing your orgs" + ) + }); + } + } + async function onSubmit(data: GeneralFormValues) { await api .post(`/org/${org?.org.orgId}`, {