fix: require explicit business form choices

This commit is contained in:
2026-07-02 18:59:42 -07:00
parent 12c3ca560c
commit 6efe3a6615
3 changed files with 165 additions and 121 deletions

View File

@@ -36,7 +36,6 @@ export function OrganizationInviteDialog({
() => roles.filter((role) => role.scope === "organization" && role.organizationId === organization.id && role.isEnabled),
[organization.id, roles],
);
const defaultRoleId = organizationRoles.find((role) => role.key === "caregiver")?.id ?? organizationRoles[0]?.id ?? "";
function closeDialog(): void {
if (isPending) {
@@ -52,14 +51,20 @@ export function OrganizationInviteDialog({
event.preventDefault();
setMessage("");
setLastInviteHref("");
setIsPending(true);
const formData = new FormData(event.currentTarget);
const roleId = String(formData.get("roleId") ?? "");
if (!roleId) {
setMessage("请选择邀请角色");
return;
}
setIsPending(true);
const response = await fetch(`/api/organizations/${organization.id}/invitations`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
email: String(formData.get("email") ?? ""),
roleId: String(formData.get("roleId") ?? ""),
roleId,
}),
});
const result = (await response.json()) as ApiResult<{ invitation: OrganizationInvitation }>;
@@ -94,11 +99,14 @@ export function OrganizationInviteDialog({
<span className="font-medium"></span>
<Select
aria-label="邀请角色"
defaultValue={defaultRoleId}
defaultValue=""
disabled={organizationRoles.length === 0}
key={organization.id}
name="roleId"
options={organizationRoles.map((role) => ({ value: role.id, label: role.label }))}
options={[
{ value: "", label: "选择邀请角色", disabled: true },
...organizationRoles.map((role) => ({ value: role.id, label: role.label })),
]}
required
/>
</label>
@@ -125,7 +133,7 @@ export function OrganizationInviteDialog({
<Button disabled={isPending} onClick={closeDialog} type="button" variant="outline">
</Button>
<Button disabled={isPending || !defaultRoleId} type="submit">
<Button disabled={isPending || organizationRoles.length === 0} type="submit">
<Send className="size-4" aria-hidden="true" />
</Button>