ConfirmDialog.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { t } from "../i18n";
  2. import { Dialog, DialogProps } from "./Dialog";
  3. import "./ConfirmDialog.scss";
  4. import DialogActionButton from "./DialogActionButton";
  5. import { useSetAtom } from "jotai";
  6. import { isLibraryMenuOpenAtom } from "./LibraryMenuHeaderContent";
  7. import { useExcalidrawSetAppState } from "./App";
  8. interface Props extends Omit<DialogProps, "onCloseRequest"> {
  9. onConfirm: () => void;
  10. onCancel: () => void;
  11. confirmText?: string;
  12. cancelText?: string;
  13. }
  14. const ConfirmDialog = (props: Props) => {
  15. const {
  16. onConfirm,
  17. onCancel,
  18. children,
  19. confirmText = t("buttons.confirm"),
  20. cancelText = t("buttons.cancel"),
  21. className = "",
  22. ...rest
  23. } = props;
  24. const setAppState = useExcalidrawSetAppState();
  25. const setIsLibraryMenuOpen = useSetAtom(isLibraryMenuOpenAtom);
  26. return (
  27. <Dialog
  28. onCloseRequest={onCancel}
  29. small={true}
  30. {...rest}
  31. className={`confirm-dialog ${className}`}
  32. >
  33. {children}
  34. <div className="confirm-dialog-buttons">
  35. <DialogActionButton
  36. label={cancelText}
  37. onClick={() => {
  38. setAppState({ openMenu: null });
  39. setIsLibraryMenuOpen(false);
  40. onCancel();
  41. }}
  42. />
  43. <DialogActionButton
  44. label={confirmText}
  45. onClick={() => {
  46. setAppState({ openMenu: null });
  47. setIsLibraryMenuOpen(false);
  48. onConfirm();
  49. }}
  50. actionType="danger"
  51. />
  52. </div>
  53. </Dialog>
  54. );
  55. };
  56. export default ConfirmDialog;