import React, { useState } from 'react'; import { useDispatch, useSelector } from 'react-redux' export const DropDown = () => { const arr = [ ['https://howardhwang.s3-us-west-1.amazonaws.com/headphone-stand.json', 'headphone-stand'], ] const dispatch = useDispatch() const [open, setOpen] = useState(false) const handleOutsideClick = (ev) => { /* this handles inside click as well due to bubbling, sets the open/close state of drop down */ setOpen(state => !state) // handle click on button & dropdown, always a toggle document.addEventListener( // handles click outside dropdown & button 'pointerdown', (e) => { !e.path.includes(ev.target.parentNode) && setOpen(false) } , { capture: true, once: true } // capture phase to allow for stopPropogation on others ) } const handleInsideClick = (e) => { // handles click inside dropdown, business logic here const idx = Array.prototype.indexOf.call(e.target.parentNode.children, e.target) if (idx !== -1) { console.log(idx) fetch(arr[idx][0]) .then(res => res.text()) .then(text => { dispatch({ type: 'restore-state', state: sc.loadState(text) }) sc.render() }) } } const fileHandle = useSelector(state => state.ui.fileHandle) return
Demo Parts
{ open &&
{arr.map(([url, name], idx) => (
{name}
))}
}
}