From f39f7ab4cd8e5839e52df2c64402320c9387cc6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CSalar?= <“salar.sali97@gmail.com”>
Date: Wed, 17 Aug 2022 20:29:00 +0300
Subject: [PATCH 1/2] Dropdown has been modified - Button converted to Link

---
 src/components/ContextMenu.tsx       | 115 +++++++++++++++++++++++++++
 src/components/ContextMenuAction.tsx |  34 ++++++++
 2 files changed, 149 insertions(+)
 create mode 100644 src/components/ContextMenu.tsx
 create mode 100644 src/components/ContextMenuAction.tsx

diff --git a/src/components/ContextMenu.tsx b/src/components/ContextMenu.tsx
new file mode 100644
index 0000000..0073083
--- /dev/null
+++ b/src/components/ContextMenu.tsx
@@ -0,0 +1,115 @@
+/* -------------------------------------------------------------------------- */
+/*                                   Imports                                  */
+/* -------------------------------------------------------------------------- */
+import React, { Fragment } from "react";
+import { Menu, Transition } from "@headlessui/react";
+import { PropsPartion } from "./ContextMenuItem";
+import classNames from "classnames";
+import { ReactComponent as SelectIcon } from "assets/svg/select-arrow.svg";
+type ChildType = React.ReactElement<any & PropsPartion[]>;
+type ChildrenType = ChildType[] | ChildType;
+
+/* -------------------------------------------------------------------------- */
+/*                               Component props                              */
+/* -------------------------------------------------------------------------- */
+
+type MenuProps = {
+  emphasis?: "high" | "low";
+  disabled?: boolean;
+  className?: string | undefined;
+  button: React.ReactNode;
+  children: ChildrenType;
+};
+/* -------------------------------------------------------------------------- */
+/*                                Styles                                      */
+/* -------------------------------------------------------------------------- */
+
+const MenuButtonStyle = `
+inline-flex 
+justify-center w-full
+cursor-default    
+rounded
+border border-gray-100
+outline-8
+py-2
+px-2 
+text-base`;
+
+const MenuItemStyle = `
+absolute
+left-0 
+mt-2 w-60 
+origin-top-left 
+rounded 
+shadow-lg 
+focus:outline-none 
+py-2 px-4 sm:text-sm`;
+
+/* -------------------------------------------------------------------------- */
+/*                          Component implementation                          */
+/* -------------------------------------------------------------------------- */
+/**
+ *   Use width ContextMenuAction.tsx , for example:
+ *   <ContextMenu button="MyButton" emphasis="low/high">
+ *   <ContextMenuAction
+ *   caption="First Menu"
+ *   icon={icon}
+ *   action={() => alert('click')}
+ *   ></ContextMenuAction>
+ *   ...
+ *  </ContextMenu>
+ */
+export default function ContextMenu({
+  button,
+  children,
+  className,
+  emphasis = "low",
+}: MenuProps) {
+  return (
+    <Menu as="div" className="relative inline-block text-right">
+      {({ open }) => (
+        <>
+          <Menu.Button
+            className={classNames([
+              `${MenuButtonStyle}`,
+              {
+                "hover:bg-gray-100 font-bold uppercase": emphasis === "high",
+              },
+              className,
+            ])}
+          >
+            {button}
+            <SelectIcon
+              className={`${
+                open ? "rotate-180 transform" : "font-normal"
+              } my-2 mx-3 h-2 w-3 flex-center`}
+              aria-hidden="true"
+            />
+          </Menu.Button>
+
+          <Transition
+            as={Fragment}
+            show={open}
+            enter="transition ease-out duration-100"
+            enterFrom="transform opacity-0 scale-95"
+            enterTo="transform opacity-100 scale-100"
+            leave="transition ease-in duration-75"
+            leaveFrom="transform opacity-100 scale-100"
+            leaveTo="transform opacity-0 scale-95"
+          >
+            <Menu.Items
+              static
+              className={classNames([
+                className,
+                `${MenuItemStyle}`,
+                { "ml-2": emphasis === "high" },
+              ])}
+            >
+              {children}
+            </Menu.Items>
+          </Transition>
+        </>
+      )}
+    </Menu>
+  );
+}
diff --git a/src/components/ContextMenuAction.tsx b/src/components/ContextMenuAction.tsx
new file mode 100644
index 0000000..9d3af26
--- /dev/null
+++ b/src/components/ContextMenuAction.tsx
@@ -0,0 +1,34 @@
+import classNames from "classnames";
+import React from "react";
+
+type Props = {
+  action: Function;
+  caption: string;
+  disabled?: boolean;
+  icon?: React.ReactNode;
+  className?: string | undefined;
+};
+
+export default function ContextMenuAction({
+  action,
+  caption,
+  disabled,
+  icon,
+  className,
+}: Props) {
+  return (
+    <a
+      href="#"
+      onClick={(e) => action(e)}
+      // disabled={disabled}
+      className={classNames([
+        "group flex px-2 rounded items-center text-base hover:bg-gray-100",
+        // { "opacity-50": disabled, "cursor-default": !disabled },
+        className,
+      ])}
+    >
+      {icon && <div className="mr-2 h-5 w-5">{icon}</div>}
+      <span className="px-2 py-2">{caption}</span>
+    </a>
+  );
+}

From e8f8777fa85b84382d2055709e6470f9c981859d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9CSalar?= <“salar.sali97@gmail.com”>
Date: Thu, 18 Aug 2022 12:22:41 +0300
Subject: [PATCH 2/2] Unimportant comments have been removed

---
 src/components/ContextMenuAction.tsx | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/components/ContextMenuAction.tsx b/src/components/ContextMenuAction.tsx
index 9d3af26..8d1e653 100644
--- a/src/components/ContextMenuAction.tsx
+++ b/src/components/ContextMenuAction.tsx
@@ -20,10 +20,8 @@ export default function ContextMenuAction({
     <a
       href="#"
       onClick={(e) => action(e)}
-      // disabled={disabled}
       className={classNames([
         "group flex px-2 rounded items-center text-base hover:bg-gray-100",
-        // { "opacity-50": disabled, "cursor-default": !disabled },
         className,
       ])}
     >