From c6679e6084ce22f6a3c249e9a001c9238c01c502 Mon Sep 17 00:00:00 2001
From: Himanshu Aggarwal <aggarwah@mcmaster.ca>
Date: Mon, 14 Mar 2022 14:34:39 -0400
Subject: [PATCH] Add dropdown component

---
 .../components/dropdown/Dropdown.js           | 70 +++++++++++++++++++
 1 file changed, 70 insertions(+)
 create mode 100644 src/cryptometrics/components/dropdown/Dropdown.js

diff --git a/src/cryptometrics/components/dropdown/Dropdown.js b/src/cryptometrics/components/dropdown/Dropdown.js
new file mode 100644
index 0000000..746bae4
--- /dev/null
+++ b/src/cryptometrics/components/dropdown/Dropdown.js
@@ -0,0 +1,70 @@
+import React, { useState, useEffect } from "react";
+import classNames from "classnames";
+import { ChevronDownIcon } from "@heroicons/react/outline";
+
+function getCoin(list, id) {
+  for (let i = 0; i < list.length; i++) {
+    if (list[i].id == id) {
+      return list[i];
+    }
+  }
+  return null;
+}
+
+function Dropdown({ list, value, setValue }) {
+  const [open, setOpen] = useState(false);
+
+  useEffect(() => {
+    setOpen(false);
+  }, [value]);
+
+  return (
+    <div className="relative">
+      <button
+        className={classNames(" px-3 py-2 rounded-md font-light", {
+          "dark:bg-white dark:text-gray-800": false,
+          "dark:bg-black dark:text-gray-400": true,
+        })}
+        onClick={() => setOpen(!open)}
+      >
+        <div className="flex flex-row items-center space-x-2">
+          <p>{getCoin(list, value).name}</p>
+          <ChevronDownIcon className="h-5 w-5" />
+        </div>
+      </button>
+      {open && (
+        <div className="absolute h-fit max-h-52 min-w-[9rem] w-fit bg-dark-900 top-12 right-0 rounded-xl z-50 overflow-y-scroll">
+          <div className="my-2">
+            {list.map((coin, index) => {
+              return (
+                <DropdownItem
+                  onClick={() => setValue(coin.id)}
+                  key={index}
+                  selected={coin.id === value}
+                >
+                  {coin.name}
+                </DropdownItem>
+              );
+            })}
+          </div>
+        </div>
+      )}
+    </div>
+  );
+}
+
+function DropdownItem({ children, onClick, selected }) {
+  return (
+    <div
+      className={classNames("py-2 px-4 rounded-xl mx-2", {
+        "bg-white dark:text-black": selected,
+        "hover:bg-dark-600 dark:text-white": !selected,
+      })}
+      onClick={!selected && onClick}
+    >
+      {children}
+    </div>
+  );
+}
+
+export default Dropdown;
-- 
GitLab