Skip to content

Commit

Permalink
Merge pull request #61 from code4rena-dev/develop
Browse files Browse the repository at this point in the history
Bug Fix - Dropdown Updates
  • Loading branch information
leo95oliveira committed Apr 9, 2024
2 parents 635cd70 + a3b18f6 commit 6633072
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 7 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@code4rena/components-library",
"version": "4.0.0",
"version": "4.0.1",
"description": "Code4rena's official components library ",
"types": "./dist/lib.d.ts",
"exports": {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/Dropdown/Dropdown.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ SampleComponent.parameters = {
},
};
SampleComponent.args = {
id: "",
id: "storybook-dropdown",
wrapperClass: "",
triggerButtonClass: "",
openOnHover: true,
Expand Down
29 changes: 26 additions & 3 deletions src/lib/Dropdown/Dropdown.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useState } from "react";
import React, { useCallback, useEffect, useState } from "react";
import clsx from "clsx";
import { DropdownProps } from "./Dropdown.types";
import "./Dropdown.scss";
Expand Down Expand Up @@ -26,12 +26,35 @@ export const Dropdown = ({
}: DropdownProps) => {
const [isOpen, setIsOpen] = useState(false);


const onClickObserver = useCallback((e: Event) => {
const dropdownElement = document.querySelector(`#${id} .c4dropdown--listcontainer`);
const dropdownTrigger = document.querySelector(`#${id} .c4dropdown--trigger`);

if (!dropdownElement?.contains(e.target as Node) && !dropdownTrigger?.contains(e.target as Node)) {
setIsOpen(false);
}
}, []);

useEffect(() => {
if (!openOnHover && id != null && id.length > 0) {
window.addEventListener('click', onClickObserver);
} else {
window.removeEventListener('click', onClickObserver);
}

return () => window.removeEventListener('click', onClickObserver);
}, [openOnHover]);

return (
<div
id={id ? id : undefined}
id={id ?? undefined}
onMouseEnter={openOnHover ? () => setIsOpen(true) : undefined}
onMouseLeave={openOnHover ? () => setIsOpen(false) : undefined}
className={clsx("c4dropdown", wrapperClass && wrapperClass)}
className={clsx(
"c4dropdown",
wrapperClass && wrapperClass
)}
>
<button
onClick={() => setIsOpen(!isOpen)}
Expand Down

0 comments on commit 6633072

Please sign in to comment.