{"version":3,"sources":["../../../src/lib/resend-invite-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { useResendUserInvite } from \"./api/user.js\";\nimport { AlertDialog, Button, Dialog } from \"./elements.js\";\nimport { Member } from \"../api/endpoint.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface ResendInviteDialogProps extends AlertDialog.RootProps {\n  user: Member;\n  children?: React.ReactNode;\n}\n\nexport function ResendInviteDialog({\n  children,\n  user,\n  ...props\n}: ResendInviteDialogProps) {\n  const resendInvite = useResendUserInvite();\n  const cancelButtonRef = React.useRef<HTMLButtonElement>(null);\n  const successButtonRef = React.useRef<HTMLButtonElement>(null);\n  const [successDialogIsOpen, setSuccessDialogIsOpen] = React.useState(false);\n\n  const onSubmitForm = () => {\n    resendInvite.mutate(\n      { userId: user.id },\n      {\n        onSuccess: () => {\n          setSuccessDialogIsOpen(true);\n        },\n      },\n    );\n  };\n\n  return (\n    <>\n      <AlertDialog.Root {...props}>\n        {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n        <AlertDialog.Content\n          maxWidth=\"480px\"\n          onOpenAutoFocus={() => {\n            requestAnimationFrame(() => {\n              cancelButtonRef.current?.focus();\n            });\n          }}\n        >\n          <AlertDialog.Title>\n            <Translation\n              defaultMessage=\"Resend invite?\"\n              id=\"oSINc8\"\n              description=\"Dialog title asking to confirm resending an invitation\"\n            />\n          </AlertDialog.Title>\n          <Flex mb=\"4\" direction=\"column\" gap=\"3\">\n            <AlertDialog.Description>\n              <Translation\n                defaultMessage=\"Are you sure you want to resend the invite to {email}?\"\n                id=\"46jEJT\"\n                description=\"Confirmation message asking if user wants to resend invite to specific email\"\n                values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n              />\n            </AlertDialog.Description>\n          </Flex>\n\n          {resendInvite.error ? (\n            <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n              <Callout.Text>\n                {getMutationErrorMessage(resendInvite.error)}\n              </Callout.Text>\n            </Callout.Root>\n          ) : null}\n\n          <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n            <form\n              onSubmit={(event) => {\n                event.preventDefault();\n                onSubmitForm();\n              }}\n            >\n              <AlertDialog.Cancel>\n                <Button\n                  type=\"button\"\n                  variant=\"secondary\"\n                  ref={cancelButtonRef}\n                  disabled={resendInvite.isPending}\n                >\n                  <Translation\n                    defaultMessage=\"Cancel\"\n                    id=\"Ecig7v\"\n                    description=\"Button to cancel resending invite\"\n                  />\n                </Button>\n              </AlertDialog.Cancel>\n              <Button\n                variant=\"destructive\"\n                type=\"submit\"\n                loading={resendInvite.isPending}\n              >\n                <Translation\n                  defaultMessage=\"Resend\"\n                  id=\"t73qag\"\n                  description=\"Button to confirm resending the invitation\"\n                />\n              </Button>\n            </form>\n          </Flex>\n        </AlertDialog.Content>\n\n        {/* mirror errors in a live region */}\n        <VisuallyHidden asChild>\n          <section aria-live=\"polite\">\n            {getMutationErrorMessage(resendInvite.error)}\n          </section>\n        </VisuallyHidden>\n      </AlertDialog.Root>\n      <Dialog.Root\n        open={successDialogIsOpen}\n        onOpenChange={(isOpen) => {\n          if (!isOpen) {\n            props.onOpenChange?.(false);\n          }\n          setSuccessDialogIsOpen(isOpen);\n        }}\n      >\n        <Dialog.Content\n          maxWidth=\"360px\"\n          onOpenAutoFocus={() => {\n            requestAnimationFrame(() => {\n              successButtonRef.current?.focus();\n            });\n          }}\n        >\n          <Dialog.Title>\n            <Translation\n              defaultMessage=\"Invite sent\"\n              id=\"5uMNqG\"\n              description=\"Dialog title confirming invite was sent\"\n            />\n          </Dialog.Title>\n          <Dialog.Description>\n            <Translation\n              defaultMessage=\"The invite email has been resent to {email}\"\n              id=\"fb2S3+\"\n              description=\"Message confirming invite was resent to specific email\"\n              values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n            />\n          </Dialog.Description>\n          <Flex gap=\"3\" justify=\"end\" mt=\"5\">\n            <Dialog.Close>\n              <Button ref={successButtonRef}>\n                <Translation\n                  defaultMessage=\"Close\"\n                  id=\"Mixw+w\"\n                  description=\"Button to close the success dialog\"\n                />\n              </Button>\n            </Dialog.Close>\n          </Flex>\n        </Dialog.Content>\n      </Dialog.Root>\n    </>\n  );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n  if (!error) {\n    return \"\";\n  }\n  // TODO Handle server errors\n  return (\n    <Translation\n      defaultMessage=\"There was an error sending the invite. Please try again.\"\n      id=\"090qDK\"\n      description=\"Error message shown when resending invite fails\"\n    />\n  );\n}\n"],"mappings":"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","names":[]}