diff --git a/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx b/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx
new file mode 100644
index 000000000..81946de8d
--- /dev/null
+++ b/frontend/src/layouts/OrganizationLayout/components/NavBar/NewSubOrganizationForm.tsx
@@ -0,0 +1,80 @@
+import { Controller, useForm } from "react-hook-form";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { z } from "zod";
+
+import { createNotification } from "@app/components/notifications";
+import { Button, FormControl, Input } from "@app/components/v2";
+import { GenericResourceNameSchema } from "@app/lib/schemas";
+import { useCreateSubOrganization } from "@app/hooks/api";
+
+type ContentProps = {
+ onClose: () => void;
+};
+
+const AddOrgSchema = z.object({
+ name: GenericResourceNameSchema.nonempty("Suborganization name required")
+});
+
+type FormData = z.infer
;
+
+export const NewSubOrganizationForm = ({ onClose }: ContentProps) => {
+ const createSubOrg = useCreateSubOrganization();
+
+ const {
+ handleSubmit,
+ control,
+ formState: { isSubmitting }
+ } = useForm({
+ defaultValues: {
+ name: "",
+ invitees: []
+ },
+ resolver: zodResolver(AddOrgSchema)
+ });
+
+ const onSubmit = async ({ name }: FormData) => {
+ try {
+ await createSubOrg.mutateAsync({
+ name
+ });
+
+ createNotification({
+ type: "success",
+ text: "Successfully created sub organization"
+ });
+ onClose();
+ } catch {
+ createNotification({
+ text: "Failed to create sub organization",
+ type: "error"
+ });
+ }
+ };
+
+ return (
+
+ );
+};
diff --git a/frontend/src/pages/organization/layout.tsx b/frontend/src/pages/organization/layout.tsx
index 79bdbf216..233b490b3 100644
--- a/frontend/src/pages/organization/layout.tsx
+++ b/frontend/src/pages/organization/layout.tsx
@@ -1,7 +1,14 @@
-import { createFileRoute } from "@tanstack/react-router";
+import { createFileRoute, retainSearchParams } from "@tanstack/react-router";
import { OrganizationLayout } from "@app/layouts/OrganizationLayout";
+import { z } from "zod";
export const Route = createFileRoute("/_authenticate/_inject-org-details/_org-layout")({
- component: OrganizationLayout
+ component: OrganizationLayout,
+ validateSearch: z.object({
+ subOrganization: z.string().optional()
+ }),
+ search: {
+ middlewares: [retainSearchParams(["subOrganization"])]
+ }
});