Files
grungnet/src/components/Modal.js

67 lines
1.4 KiB
JavaScript
Raw Normal View History

import React from "react";
import Modal from "react-modal";
import { useThemeUI, Close } from "theme-ui";
2021-05-24 17:28:57 +10:00
import { useSpring, animated, config } from "react-spring";
2020-04-14 16:05:44 +10:00
function StyledModal({
isOpen,
onRequestClose,
children,
allowClose,
style,
2020-04-14 16:05:44 +10:00
...props
}) {
const { theme } = useThemeUI();
2021-05-24 17:28:57 +10:00
const openAnimation = useSpring({
opacity: isOpen ? 1 : 0,
transform: isOpen ? "scale(1)" : "scale(0.99)",
config: config.default,
});
return (
<Modal
isOpen={isOpen}
onRequestClose={onRequestClose}
style={{
overlay: {
backgroundColor: "rgba(0, 0, 0, 0.73)",
zIndex: 100,
display: "flex",
alignItems: "center",
justifyContent: "center",
},
content: {
backgroundColor: theme.colors.background,
inset: "initial",
maxHeight: "100%",
...style,
},
}}
2021-05-24 17:28:57 +10:00
contentElement={(props, content) => (
<animated.div {...props} style={{ ...props.style, ...openAnimation }}>
{content}
</animated.div>
)}
2020-04-13 18:29:46 +10:00
{...props}
>
{children}
{allowClose && (
<Close
m={0}
sx={{ position: "absolute", top: 0, right: 0 }}
onClick={onRequestClose}
/>
)}
</Modal>
);
}
2020-04-14 16:05:44 +10:00
StyledModal.defaultProps = {
allowClose: true,
style: {},
2020-04-14 16:05:44 +10:00
};
export default StyledModal;