import React, { useState } from "react"; // ui import { Icon } from "components/ui"; import { ChevronDown, PenSquare } from "lucide-react"; // headless ui import { Menu, Transition } from "@headlessui/react"; // hooks import useLocalStorage from "hooks/use-local-storage"; // components import { CreateUpdateDraftIssueModal } from "components/issues"; // mobx store import { useMobxStore } from "lib/mobx/store-provider"; export const WorkspaceSidebarQuickAction = () => { const store: any = useMobxStore(); const [isDraftIssueModalOpen, setIsDraftIssueModalOpen] = useState(false); const { storedValue, clearValue } = useLocalStorage<any>( "draftedIssue", JSON.stringify(undefined) ); return ( <> <CreateUpdateDraftIssueModal isOpen={isDraftIssueModalOpen} handleClose={() => setIsDraftIssueModalOpen(false)} prePopulateData={storedValue ? JSON.parse(storedValue) : {}} onSubmit={() => { localStorage.removeItem("draftedIssue"); clearValue(); setIsDraftIssueModalOpen(false); }} fieldsToShow={["all"]} /> <div className={`relative flex items-center justify-between w-full cursor-pointer px-4 mt-4 ${ store?.theme?.sidebarCollapsed ? "flex-col gap-1" : "gap-2" }`} > <div className={`flex items-center justify-between w-full rounded cursor-pointer px-2 gap-1 group ${ store?.theme?.sidebarCollapsed ? "px-2 hover:bg-custom-sidebar-background-80" : "px-3 shadow border-[0.5px] border-custom-border-300" }`} > <button type="button" className="flex items-center gap-2 flex-grow rounded flex-shrink-0 py-1.5" onClick={() => { const e = new KeyboardEvent("keydown", { key: "c" }); document.dispatchEvent(e); }} > <Icon iconName="edit_square" className="!text-lg !leading-4 text-custom-sidebar-text-300" /> {!store?.theme?.sidebarCollapsed && ( <span className="text-sm font-medium">New Issue</span> )} </button> {storedValue && <div className="h-8 w-0.5 bg-custom-sidebar-background-80" />} {storedValue && ( <div className="relative"> <Menu as={React.Fragment}> {({ open }) => ( <> <div> <Menu.Button type="button" className={`flex items-center justify-center rounded flex-shrink-0 p-1.5 ${ open ? "rotate-180 pl-0" : "rotate-0 pr-0" }`} > <ChevronDown size={16} className="!text-custom-sidebar-text-300 transform transition-transform duration-300" /> </Menu.Button> </div> <Transition as={React.Fragment} 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 className="absolute -right-4 mt-1 w-52 bg-custom-background-300"> <div className="px-1 py-1 "> <Menu.Item> <button onClick={() => setIsDraftIssueModalOpen(true)} className="w-full flex text-sm items-center rounded flex-shrink-0 py-[10px] px-3 bg-custom-background-100 shadow border-[0.5px] border-custom-border-300 text-custom-text-300" > <PenSquare size={16} className="!text-lg !leading-4 text-custom-sidebar-text-300 mr-2" /> Last Drafted Issue </button> </Menu.Item> </div> </Menu.Items> </Transition> </> )} </Menu> </div> )} </div> <button className={`flex items-center justify-center rounded flex-shrink-0 p-2 ${ store?.theme?.sidebarCollapsed ? "hover:bg-custom-sidebar-background-80" : "shadow border-[0.5px] border-custom-border-300" }`} onClick={() => { const e = new KeyboardEvent("keydown", { key: "k", ctrlKey: true, metaKey: true }); document.dispatchEvent(e); }} > <Icon iconName="search" className="!text-lg !leading-4 text-custom-sidebar-text-300" /> </button> </div> </> ); };