{"version":3,"sources":["../../../src/lib/delete-user-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport { useDeleteUser } from \"./api/user.js\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport { Member } from \"../api/endpoint.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface DeleteUserDialogProps extends AlertDialog.RootProps {\n  open: boolean;\n  onOpenChange: (open: boolean) => void;\n  user: Member;\n  children?: React.ReactNode;\n}\n\nexport function DeleteUserDialog({\n  children,\n  user,\n  ...props\n}: DeleteUserDialogProps) {\n  const deleteUser = useDeleteUser();\n  const inputRef = React.useRef<HTMLInputElement>(null);\n\n  const onSubmitForm = () => {\n    deleteUser.mutate(\n      { userId: user.id },\n      {\n        onSuccess: () => {\n          props.onOpenChange(false);\n        },\n      },\n    );\n  };\n\n  return (\n    <AlertDialog.Root {...props}>\n      {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n      <AlertDialog.Content\n        maxWidth=\"480px\"\n        onOpenAutoFocus={() => {\n          requestAnimationFrame(() => {\n            inputRef.current?.focus();\n          });\n        }}\n      >\n        <AlertDialog.Title>\n          <Translation\n            defaultMessage=\"Remove user\"\n            id=\"N8aD60\"\n            description=\"Dialog title for removing a user\"\n          />\n        </AlertDialog.Title>\n        <Flex direction=\"column\" gap=\"3\">\n          <AlertDialog.Description>\n            <Translation\n              defaultMessage=\"Are you sure you want to remove {email}? This action is immediate and cannot be undone.\"\n              id=\"4zDwGl\"\n              description=\"Warning message for removing a user\"\n              values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n            />\n          </AlertDialog.Description>\n        </Flex>\n\n        {deleteUser.error ? (\n          <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n            <Callout.Text>\n              {getMutationErrorMessage(deleteUser.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 variant=\"secondary\" disabled={deleteUser.isPending}>\n                <Translation\n                  defaultMessage=\"Cancel\"\n                  id=\"hHNj31\"\n                  description=\"Cancel button text\"\n                />\n              </Button>\n            </AlertDialog.Cancel>\n\n            <Button\n              variant=\"destructive\"\n              type=\"submit\"\n              loading={deleteUser.isPending}\n            >\n              <Translation\n                defaultMessage=\"Remove\"\n                id=\"DJXWAJ\"\n                description=\"Confirm button text to remove user\"\n              />\n            </Button>\n          </form>\n        </Flex>\n        {/* mirror errors in a live region */}\n        <VisuallyHidden asChild>\n          <section aria-live=\"polite\">\n            {getMutationErrorMessage(deleteUser.error)}\n          </section>\n        </VisuallyHidden>\n      </AlertDialog.Content>\n    </AlertDialog.Root>\n  );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n  if (!error) {\n    return null;\n  }\n  // TODO Handle server errors\n  return \"There was an error removing the user. Please try again.\";\n}\n\n// Note: Error messages in getMutationErrorMessage are kept as plain strings\n// since they are displayed dynamically\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCmB;AAnCnB,YAAuB;AACvB,oBAAoD;AACpD,kBAA8B;AAC9B,sBAAoC;AAEpC,yBAA4B;AASrB,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,QAAM,iBAAa,2BAAc;AACjC,QAAM,WAAW,MAAM,OAAyB,IAAI;AAEpD,QAAM,eAAe,MAAM;AACzB,eAAW;AAAA,MACT,EAAE,QAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,QACE,WAAW,MAAM;AACf,gBAAM,aAAa,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE,6CAAC,4BAAY,MAAZ,EAAkB,GAAG,OACnB;AAAA,gBAAY,4CAAC,4BAAY,SAAZ,EAAqB,UAAS;AAAA,IAE5C;AAAA,MAAC,4BAAY;AAAA,MAAZ;AAAA,QACC,UAAS;AAAA,QACT,iBAAiB,MAAM;AACrB,gCAAsB,MAAM;AAC1B,qBAAS,SAAS,MAAM;AAAA,UAC1B,CAAC;AAAA,QACH;AAAA,QAEA;AAAA,sDAAC,4BAAY,OAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA;AAAA,UACd,GACF;AAAA,UACA,4CAAC,sBAAK,WAAU,UAAS,KAAI,KAC3B,sDAAC,4BAAY,aAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA,cACZ,QAAQ,EAAE,OAAO,4CAAC,sBAAK,QAAO,QAAQ,eAAK,OAAM,EAAQ;AAAA;AAAA,UAC3D,GACF,GACF;AAAA,UAEC,WAAW,QACV,4CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,IAAG,KAAI,IAAG,MAClC,sDAAC,sBAAQ,MAAR,EACE,kCAAwB,WAAW,KAAK,GAC3C,GACF,IACE;AAAA,UAEJ,4CAAC,sBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,SAAO,MACxC;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,UAAU;AACnB,sBAAM,eAAe;AACrB,6BAAa;AAAA,cACf;AAAA,cAEA;AAAA,4DAAC,4BAAY,QAAZ,EACC,sDAAC,0BAAO,SAAQ,aAAY,UAAU,WAAW,WAC/C;AAAA,kBAAC;AAAA;AAAA,oBACC,gBAAe;AAAA,oBACf,IAAG;AAAA,oBACH,aAAY;AAAA;AAAA,gBACd,GACF,GACF;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,WAAW;AAAA,oBAEpB;AAAA,sBAAC;AAAA;AAAA,wBACC,gBAAe;AAAA,wBACf,IAAG;AAAA,wBACH,aAAY;AAAA;AAAA,oBACd;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UACF,GACF;AAAA,UAEA,4CAAC,gCAAe,SAAO,MACrB,sDAAC,aAAQ,aAAU,UAChB,kCAAwB,WAAW,KAAK,GAC3C,GACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,SAAS,wBAAwB,OAAgB;AAC/C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}