MCPcopy Create free account
hub / github.com/Linen-dev/linen.dev / Example

Function Example

apps/web/ui/Dropdown/index.tsx:16–52  ·  view source on GitHub ↗
({ button, items }: Props)

Source from the content-addressed store, hash-verified

14}
15
16export default function Example({ button, items }: Props) {
17 const [open, setOpen] = useState(false);
18 const ref = useRef(null);
19 const onOutsideClick = (event: any) => {
20 const node = ref.current as HTMLDivElement | null;
21 if (node && !node.contains(event.target)) {
22 setOpen(false);
23 }
24 };
25
26 useEffect(() => {
27 document.addEventListener('click', onOutsideClick, false);
28 return () => {
29 document.removeEventListener('click', onOutsideClick, false);
30 };
31 }, []);
32
33 return (
34 <div ref={ref} className={styles.dropdown}>
35 <div className={styles.button} onClick={() => setOpen((open) => !open)}>
36 {button}
37 </div>
38 <div className={classNames(styles.menu, { [styles.open]: open })}>
39 {items.map((item, index) => {
40 return (
41 <div key={`menu-item-${item.label}-${index}`}>
42 <div className={styles.action} onClick={item.onClick}>
43 {item.icon}
44 {item.label}
45 </div>
46 </div>
47 );
48 })}
49 </div>
50 </div>
51 );
52}

Callers

nothing calls this directly

Calls 1

mapMethod · 0.80

Tested by

no test coverage detected