Spaces:
No application file
No application file
| import Link from "next/link"; | |
| import Image from "next/image"; | |
| import React, { useState, useEffect } from "react"; | |
| import DrawerIcon from "../../public/icons/drawer.svg"; | |
| import SettingsIcon from "../../public/icons/settings.svg"; | |
| import BotIcon from "../../public/icons/bot.svg"; | |
| import DropdownIcon from "../../public/icons/dropdown.svg"; | |
| import TwitterIcon from "../../public/icons/twitter.svg"; | |
| import GithubIcon from "../../public/icons/github.svg"; | |
| import LinkedinIcon from "../../public/icons/linkedin.svg"; | |
| export default function Sidebar() { | |
| const [bots, setBots] = useState([]); | |
| useEffect(() => { | |
| const fetchBots = async () => { | |
| const response = await fetch("/api/get_bots"); | |
| const data = await response.json(); | |
| setBots(data); | |
| }; | |
| fetchBots(); | |
| }, []); | |
| const toggleDropdown = () => { | |
| const dropdown = document.getElementById("dropdown-toggle"); | |
| dropdown.classList.toggle("hidden"); | |
| }; | |
| return ( | |
| <> | |
| {/* Mobile Toggle */} | |
| <button | |
| data-drawer-target="logo-sidebar" | |
| data-drawer-toggle="logo-sidebar" | |
| aria-controls="logo-sidebar" | |
| type="button" | |
| className="inline-flex items-center p-2 mt-2 ml-3 text-sm text-gray-500 rounded-lg sm:hidden hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-gray-200" | |
| > | |
| <DrawerIcon className="w-6 h-6" /> | |
| </button> | |
| {/* Sidebar */} | |
| <div | |
| id="logo-sidebar" | |
| className="fixed top-0 left-0 z-40 w-64 h-screen transition-transform -translate-x-full sm:translate-x-0" | |
| > | |
| <div className="flex flex-col h-full px-3 py-4 overflow-y-auto bg-gray-100"> | |
| <div className="pb-10"> | |
| <Link href="/" className="flex items-center justify-evenly mb-5"> | |
| <Image | |
| src="/images/embedchain.png" | |
| alt="Embedchain Logo" | |
| width={45} | |
| height={0} | |
| className="block h-auto w-auto" | |
| /> | |
| <span className="self-center text-2xl font-bold whitespace-nowrap"> | |
| Embedchain | |
| </span> | |
| </Link> | |
| <ul className="space-y-2 font-medium text-lg"> | |
| {/* Settings */} | |
| <li> | |
| <Link | |
| href="/" | |
| className="flex items-center p-2 text-gray-900 rounded-lg hover:bg-gray-200 group" | |
| > | |
| <SettingsIcon className="w-6 h-6 text-gray-600 transition duration-75 group-hover:text-gray-900" /> | |
| <span className="ml-3">Settings</span> | |
| </Link> | |
| </li> | |
| {/* Bots */} | |
| {bots.length !== 0 && ( | |
| <li> | |
| <button | |
| type="button" | |
| className="flex items-center w-full p-2 text-base text-gray-900 transition duration-75 rounded-lg group hover:bg-gray-200" | |
| onClick={toggleDropdown} | |
| > | |
| <BotIcon className="w-6 h-6 text-gray-600 transition duration-75 group-hover:text-gray-900" /> | |
| <span className="flex-1 ml-3 text-left whitespace-nowrap"> | |
| Bots | |
| </span> | |
| <DropdownIcon className="w-3 h-3" /> | |
| </button> | |
| <ul | |
| id="dropdown-toggle" | |
| className="hidden text-sm py-2 space-y-2" | |
| > | |
| {bots.map((bot, index) => ( | |
| <React.Fragment key={index}> | |
| <li> | |
| <Link | |
| href={`/${bot.slug}/app`} | |
| className="flex items-center w-full p-2 text-gray-900 transition duration-75 rounded-lg pl-11 group hover:bg-gray-200" | |
| > | |
| {bot.name} | |
| </Link> | |
| </li> | |
| </React.Fragment> | |
| ))} | |
| </ul> | |
| </li> | |
| )} | |
| </ul> | |
| </div> | |
| <div className="bg-gray-200 absolute bottom-0 left-0 right-0 h-20"></div> | |
| {/* Social Icons */} | |
| <div className="mt-auto mb-3 flex flex-row justify-evenly sticky bottom-3"> | |
| <a href="https://twitter.com/embedchain" target="blank"> | |
| <TwitterIcon className="w-6 h-6 text-gray-600 transition duration-75 hover:text-gray-900" /> | |
| </a> | |
| <a href="https://github.com/embedchain/embedchain" target="blank"> | |
| <GithubIcon className="w-6 h-6 text-gray-600 transition duration-75 hover:text-gray-900" /> | |
| </a> | |
| <a | |
| href="https://www.linkedin.com/company/embedchain" | |
| target="blank" | |
| > | |
| <LinkedinIcon className="w-6 h-6 text-gray-600 transition duration-75 hover:text-gray-900" /> | |
| </a> | |
| </div> | |
| </div> | |
| </div> | |
| </> | |
| ); | |
| } | |