summaryrefslogtreecommitdiff
path: root/src/core/components/elements/Popup
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-03-01 09:18:52 +0000
commita7abbf4ddc70068620e9f44b74dc162ce2e16ee2 (patch)
tree74f66253717515d364ce74bd8275015c1f829cbc /src/core/components/elements/Popup
parent90e1edab9b6a8ccc09a49fed3addbec2cbc4e4c3 (diff)
parenta1b9b647a6c4bda1f5db63879639d44543f9557e (diff)
Merged in refactor (pull request #1)
Refactor
Diffstat (limited to 'src/core/components/elements/Popup')
-rw-r--r--src/core/components/elements/Popup/BottomPopup.jsx54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/core/components/elements/Popup/BottomPopup.jsx b/src/core/components/elements/Popup/BottomPopup.jsx
new file mode 100644
index 00000000..24366802
--- /dev/null
+++ b/src/core/components/elements/Popup/BottomPopup.jsx
@@ -0,0 +1,54 @@
+import { XMarkIcon } from '@heroicons/react/24/outline'
+import { AnimatePresence, motion } from 'framer-motion'
+import { useEffect } from 'react'
+
+const transition = { ease: 'linear', duration: 0.2 }
+
+const BottomPopup = ({ children, active = false, title, close }) => {
+ useEffect(() => {
+ if (active) {
+ document.querySelector('html, body').classList.add('overflow-hidden')
+ } else {
+ document.querySelector('html, body').classList.remove('overflow-hidden')
+ }
+ }, [active])
+
+ return (
+ <>
+ <AnimatePresence>
+ {active && (
+ <>
+ <motion.div
+ className='overlay'
+ initial={{ opacity: 0 }}
+ animate={{ opacity: 1 }}
+ exit={{ opacity: 0 }}
+ transition={transition}
+ onClick={close}
+ />
+ <motion.div
+ initial={{ bottom: '-100%' }}
+ animate={{ bottom: 0 }}
+ exit={{ bottom: '-100%' }}
+ transition={transition}
+ className='fixed left-0 w-full border-t border-gray_r-6 rounded-t-xl z-[60] p-4 pt-0 bg-white'
+ >
+ <div className='flex justify-between py-4'>
+ <div className='font-semibold text-h-sm'>{title}</div>
+ <button
+ type='button'
+ onClick={close}
+ >
+ <XMarkIcon className='w-5 stroke-2' />
+ </button>
+ </div>
+ {children}
+ </motion.div>
+ </>
+ )}
+ </AnimatePresence>
+ </>
+ )
+}
+
+export default BottomPopup