File size: 3,179 Bytes
f5ed9bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
'use client';

import { cn } from '@/lib/utils';
import { BookOpenText, Home, Search, SquarePen, Settings } from 'lucide-react';
import Link from 'next/link';
import { useSelectedLayoutSegments } from 'next/navigation';
import React, { Fragment, useState } from 'react';
import Layout from './Layout';
import { Dialog, Transition } from '@headlessui/react';
import SettingsDialog from './SettingsDialog';

const Sidebar = ({ children }: { children: React.ReactNode }) => {
  const segments = useSelectedLayoutSegments();

  const [isSettingsOpen, setIsSettingsOpen] = useState(false);

  const navLinks = [
    {
      icon: Home,
      href: '/',
      active: segments.length === 0,
      label: 'Home',
    },
    {
      icon: Search,
      href: '/discover',
      active: segments.includes('discover'),
      label: 'Discover',
    },
    {
      icon: BookOpenText,
      href: '/library',
      active: segments.includes('library'),
      label: 'Library',
    },
  ];

  return (
    <div>

      <div className="hidden lg:fixed lg:inset-y-0 lg:z-50 lg:flex lg:w-20 lg:flex-col">

        <div className="flex grow flex-col items-center justify-between gap-y-5 overflow-y-auto bg-[#111111] px-2 py-8">

          <a href="/">

            <SquarePen className="text-white cursor-pointer" />

          </a>

          <div className="flex flex-col items-center gap-y-3 w-full">

            {navLinks.map((link, i) => (

              <Link

                key={i}

                href={link.href}

                className={cn(

                  'relative flex flex-row items-center justify-center cursor-pointer hover:bg-white/10 hover:text-white duration-150 transition w-full py-2 rounded-lg',

                  link.active ? 'text-white' : 'text-white/70',

                )}

              >

                <link.icon />

                {link.active && (

                  <div className="absolute right-0 -mr-2 h-full w-1 rounded-l-lg bg-white" />

                )}

              </Link>

            ))}

          </div>

          <Settings

            onClick={() => setIsSettingsOpen(!isSettingsOpen)}

            className="text-white cursor-pointer"

          />

          <SettingsDialog

            isOpen={isSettingsOpen}

            setIsOpen={setIsSettingsOpen}

          />

        </div>

      </div>



      <div className="fixed bottom-0 w-full z-50 flex flex-row items-center gap-x-6 bg-[#111111] px-4 py-4 shadow-sm lg:hidden">

        {navLinks.map((link, i) => (

          <Link

            href={link.href}

            key={i}

            className={cn(

              'relative flex flex-col items-center space-y-1 text-center w-full',

              link.active ? 'text-white' : 'text-white/70',

            )}

          >

            {link.active && (

              <div className="absolute top-0 -mt-4 h-1 w-full rounded-b-lg bg-white" />

            )}

            <link.icon />

            <p className="text-xs">{link.label}</p>

          </Link>

        ))}

      </div>



      <Layout>{children}</Layout>

    </div>
  );
};

export default Sidebar;