()
| 91 | } |
| 92 | |
| 93 | export function OrgMenuSlot() { |
| 94 | const auth = useAuth(); |
| 95 | const [createOrganizationOpen, setCreateOrganizationOpen] = useState(false); |
| 96 | |
| 97 | const suggestedOrganizationName = |
| 98 | auth.status === "authenticated" && auth.user.name?.trim() !== "" && auth.user.name != null |
| 99 | ? `${auth.user.name}'s Organization` |
| 100 | : "New Organization"; |
| 101 | |
| 102 | const form = useCreateOrganizationForm({ |
| 103 | defaultName: suggestedOrganizationName, |
| 104 | // Land on the new org's URL root — a reload would keep the old slug and |
| 105 | // the slug gate would switch the session right back. |
| 106 | onSuccess: (org) => { |
| 107 | window.location.href = `/${org.slug}`; |
| 108 | }, |
| 109 | }); |
| 110 | |
| 111 | if (auth.status !== "authenticated") return null; |
| 112 | |
| 113 | const openCreateOrganization = () => { |
| 114 | form.reset(suggestedOrganizationName); |
| 115 | setCreateOrganizationOpen(true); |
| 116 | }; |
| 117 | |
| 118 | return ( |
| 119 | <> |
| 120 | <DropdownMenuLabel className="text-xs font-normal text-muted-foreground"> |
| 121 | Organization |
| 122 | </DropdownMenuLabel> |
| 123 | <DropdownMenuSub> |
| 124 | <DropdownMenuSubTrigger className="text-xs"> |
| 125 | <span className="min-w-0 flex-1 truncate"> |
| 126 | {auth.organization?.name ?? "No organization"} |
| 127 | </span> |
| 128 | </DropdownMenuSubTrigger> |
| 129 | <DropdownMenuSubContent className="w-56"> |
| 130 | <OrganizationSwitcherItems activeOrganizationId={auth.organization?.id ?? null} /> |
| 131 | <DropdownMenuSeparator /> |
| 132 | <DropdownMenuItem |
| 133 | className="text-xs" |
| 134 | onSelect={(event) => { |
| 135 | event.preventDefault(); |
| 136 | openCreateOrganization(); |
| 137 | }} |
| 138 | > |
| 139 | Create organization |
| 140 | </DropdownMenuItem> |
| 141 | </DropdownMenuSubContent> |
| 142 | </DropdownMenuSub> |
| 143 | <DropdownMenuSeparator /> |
| 144 | |
| 145 | <Dialog |
| 146 | open={createOrganizationOpen} |
| 147 | onOpenChange={(open) => { |
| 148 | setCreateOrganizationOpen(open); |
| 149 | if (!open) form.reset(suggestedOrganizationName); |
| 150 | }} |
nothing calls this directly
no test coverage detected