{"version":3,"file":"Modal.mjs","sources":["../../../../../../../../web/src/adminPortal/components/Modal.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport {\n  CircularProgress,\n  Dialog,\n  DialogActions,\n  DialogContent,\n  DialogTitle,\n  IconButton,\n  styled,\n  Theme,\n  useMediaQuery,\n} from '@mui/material';\nimport React, { FC, ReactNode, useState } from 'react';\n\nimport { useUniqueId } from '../../utils/uniqueId';\nimport { ModalStateType } from '../shared/components/Modal';\nimport { Button } from './Button';\nimport { FlexBox } from './FlexBox';\nimport { Typography } from './Typography';\n\nexport { type ModalStateType, useModalState } from '../shared/components/Modal';\n\nconst useAsyncState = useState;\n\nconst CloseButton = styled(IconButton)(({ theme }) => ({\n  position: 'absolute',\n  right: theme.spacing(1),\n  top: theme.spacing(1),\n}));\n\nexport type ModalProps = Omit<ModalStateType, 'open'> & {\n  cancelButtonText?: string;\n  description?: string;\n  confirmButtonText?: string;\n  disableConfirm?: boolean;\n  warning?: boolean;\n  title: string;\n  showLoadingOnConfirm?: boolean;\n  noCancelButton?: boolean;\n  keepOpenOnConfirm?: boolean;\n  children?: ReactNode;\n};\n\nexport const Modal: FC<ModalProps> = ({\n  cancelButtonText,\n  children,\n  description,\n  confirmButtonText,\n  disableConfirm,\n  warning,\n  close,\n  confirm,\n  title,\n  showLoadingOnConfirm,\n  noCancelButton,\n  isOpen,\n  keepOpenOnConfirm,\n}) => {\n  const [confirming, setConfirming] = useAsyncState(false);\n  const isXsScreen = useMediaQuery<Theme>((theme) => theme.breakpoints.down('xs'));\n\n  const descriptionId = useUniqueId('confirmation-modal-description');\n  const titleId = useUniqueId('confirmation-modal-title');\n\n  const handleConfirm: React.FormEventHandler = async (e) => {\n    e.preventDefault();\n    setConfirming(true);\n    try {\n      return await confirm();\n    } finally {\n      setConfirming(false);\n      if (!keepOpenOnConfirm) {\n        close();\n      }\n    }\n  };\n\n  const onClose = () => {\n    close();\n  };\n\n  const confirmDisabled = confirming || disableConfirm;\n\n  return (\n    <Dialog\n      aria-describedby={descriptionId}\n      aria-labelledby={titleId}\n      fullScreen={isXsScreen}\n      onClose={onClose}\n      open={isOpen}\n    >\n      {isXsScreen && !noCancelButton && (\n        <CloseButton onClick={onClose} size=\"large\">\n          <CloseIcon fontSize=\"small\" />\n        </CloseButton>\n      )}\n      <DialogTitle id={titleId}>\n        <Typography variant=\"h2\">{title}</Typography>\n      </DialogTitle>\n      <form onSubmit={handleConfirm}>\n        <DialogContent>\n          {description && <Typography>{description}</Typography>}\n          {children && <FlexBox flexDirection=\"column\">{children}</FlexBox>}\n        </DialogContent>\n        <DialogActions>\n          {!noCancelButton && (\n            <Button autoFocus={warning} disabled={confirming} onClick={onClose} variant=\"ghost\" compact>\n              {cancelButtonText ?? `Cancel`}\n            </Button>\n          )}\n          <Button\n            autoFocus={!warning}\n            disabled={confirmDisabled}\n            type=\"submit\"\n            variant=\"primary\"\n            warning={warning}\n            compact\n          >\n            {confirming && showLoadingOnConfirm ? <CircularProgress size={18} /> : (confirmButtonText ?? 'Ok')}\n          </Button>\n        </DialogActions>\n      </form>\n    </Dialog>\n  );\n};\n"],"names":["useAsyncState","useState","CloseButton","styled","IconButton","theme","position","right","spacing","top","Modal","cancelButtonText","children","description","confirmButtonText","disableConfirm","warning","close","confirm","title","showLoadingOnConfirm","noCancelButton","isOpen","keepOpenOnConfirm","confirming","setConfirming","isXsScreen","useMediaQuery","breakpoints","down","descriptionId","useUniqueId","titleId","handleConfirm","e","preventDefault","onClose","confirmDisabled","React","Dialog","aria-describedby","aria-labelledby","fullScreen","open","onClick","size","CloseIcon","fontSize","DialogTitle","id","Typography","variant","form","onSubmit","DialogContent","FlexBox","flexDirection","DialogActions","Button","autoFocus","disabled","compact","type","CircularProgress"],"mappings":"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"}