瀏覽代碼

Navigate after delete

Owen Schwartz 6 月之前
父節點
當前提交
c8676ce06a
共有 2 個文件被更改,包括 38 次插入4 次删除
  1. 4 2
      server/db/schema.ts
  2. 34 2
      src/app/[orgId]/settings/general/page.tsx

+ 4 - 2
server/db/schema.ts

@@ -130,8 +130,10 @@ export const userOrgs = sqliteTable("userOrgs", {
         .notNull()
         .notNull()
         .references(() => users.userId),
         .references(() => users.userId),
     orgId: text("orgId")
     orgId: text("orgId")
-        .notNull()
-        .references(() => orgs.orgId),
+        .references(() => orgs.orgId, {
+            onDelete: "cascade"
+        })
+        .notNull(),
     roleId: integer("roleId")
     roleId: integer("roleId")
         .notNull()
         .notNull()
         .references(() => roles.roleId),
         .references(() => roles.roleId),

+ 34 - 2
src/app/[orgId]/settings/general/page.tsx

@@ -31,7 +31,8 @@ import {
     CardTitle
     CardTitle
 } from "@/components/ui/card";
 } from "@/components/ui/card";
 import { AxiosResponse } from "axios";
 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({
 const GeneralFormSchema = z.object({
     name: z.string()
     name: z.string()
@@ -43,6 +44,7 @@ export default function GeneralPage() {
     const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
     const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
 
 
     const { orgUser } = userOrgUserContext();
     const { orgUser } = userOrgUserContext();
+    const router = useRouter();
     const { org } = useOrgContext();
     const { org } = useOrgContext();
     const { toast } = useToast();
     const { toast } = useToast();
     const api = createApiClient(useEnvContext());
     const api = createApiClient(useEnvContext());
@@ -61,7 +63,7 @@ export default function GeneralPage() {
                 `/org/${org?.org.orgId}`
                 `/org/${org?.org.orgId}`
             );
             );
             if (res.status === 200) {
             if (res.status === 200) {
-                console.log("Org deleted");
+                pickNewOrgAndNavigate();
             }
             }
         } catch (err) {
         } catch (err) {
             console.error(err);
             console.error(err);
@@ -76,6 +78,36 @@ export default function GeneralPage() {
         }
         }
     }
     }
 
 
+    async function pickNewOrgAndNavigate() {
+        try {
+
+            const res = await api.get<AxiosResponse<ListOrgsResponse>>(
+                `/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) {
     async function onSubmit(data: GeneralFormValues) {
         await api
         await api
             .post(`/org/${org?.org.orgId}`, {
             .post(`/org/${org?.org.orgId}`, {