feat: explore sidebar

This commit is contained in:
金伟强 2023-05-15 18:57:47 +08:00
parent 878ee6ef22
commit 32d2888628
4 changed files with 98 additions and 10 deletions

View File

@ -1,5 +1,6 @@
import type { FC } from 'react'
import React from 'react'
import Sidebar from '@/app/components/explore/sidebar'
export type IAppDetail = {
children: React.ReactNode
@ -7,9 +8,12 @@ export type IAppDetail = {
const AppDetail: FC<IAppDetail> = ({ children }) => {
return (
<>
<div className='flex h-full bg-gray-100 border-t border-gray-200'>
<Sidebar />
<div className='grow'>
{children}
</>
</div>
</div>
)
}

View File

@ -0,0 +1,41 @@
'use client'
import { useSelectedLayoutSegment } from 'next/navigation'
import cn from 'classnames'
import Link from 'next/link'
import s from './style.module.css'
export default function NavLink({
name,
id,
}: {
name: string
id: string
}) {
const segment = useSelectedLayoutSegment()
const url = `/explore/installed/${id}`
const isActive = id === segment?.toLowerCase()
return (
<Link
prefetch
key={name}
href={url}
className={cn(
s.item,
isActive && s.itemActive,
'flex h-8 items-center px-2 rounded-lg text-sm font-normal',
)}
>
<div
className={cn(
'shrink-0 mr-2 h-6 w-6 rounded-md border bg-[#D5F5F6]',
)}
style={{
borderColor: '0.5px solid rgba(0, 0, 0, 0.05)'
}}
/>
<div className='overflow-hidden text-ellipsis whitespace-nowrap'>{name}</div>
</Link>
)
}

View File

@ -0,0 +1,9 @@
.item:hover,
.item.active {
border: 0.5px solid #EAECF0;
box-shadow: 0px 1px 2px rgba(16, 24, 40, 0.05);
border-radius: 8px;
background: #FFFFFF;
color: #344054;
font-weight: 500;
}

View File

@ -1,14 +1,48 @@
'use client'
import React, { FC } from 'react'
import s from './style.module.css'
export interface ISideBarProps {
}
const SideBar: FC<ISideBarProps> = ({
}) => {
import Item from './app-nav-item'
const list = [
{
id: '1',
name: 'Story Bot',
},
{
id: '2',
name: 'Fancy title'
}
]
const DiscoveryIcon = () => (
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fillRule="evenodd" clipRule="evenodd" d="M13.4135 1.11725C13.5091 1.09983 13.6483 1.08355 13.8078 1.11745C14.0143 1.16136 14.2017 1.26953 14.343 1.42647C14.4521 1.54766 14.5076 1.67634 14.5403 1.76781C14.5685 1.84673 14.593 1.93833 14.6136 2.01504L15.5533 5.5222C15.5739 5.5989 15.5985 5.69049 15.6135 5.77296C15.6309 5.86852 15.6472 6.00771 15.6133 6.16722C15.5694 6.37378 15.4612 6.56114 15.3043 6.70245C15.1831 6.81157 15.0544 6.86706 14.9629 6.89975C14.884 6.92796 14.7924 6.95247 14.7157 6.97299L14.676 6.98364C14.3365 7.07461 14.0437 7.15309 13.7972 7.19802C13.537 7.24543 13.2715 7.26736 12.9946 7.20849C12.7513 7.15677 12.5213 7.06047 12.3156 6.92591L9.63273 7.64477C9.86399 7.97104 9.99992 8.36965 9.99992 8.80001C9.99992 9.2424 9.85628 9.65124 9.6131 9.98245L12.5508 14.291C12.7582 14.5952 12.6797 15.01 12.3755 15.2174C12.0713 15.4248 11.6566 15.3464 11.4492 15.0422L8.51171 10.7339C8.34835 10.777 8.17682 10.8 7.99992 10.8C7.82305 10.8 7.65155 10.777 7.48823 10.734L4.5508 15.0422C4.34338 15.3464 3.92863 15.4248 3.62442 15.2174C3.32021 15.01 3.24175 14.5952 3.44916 14.291L6.3868 9.98254C6.14358 9.65132 5.99992 9.24244 5.99992 8.80001C5.99992 8.73795 6.00274 8.67655 6.00827 8.61594L4.59643 8.99424C4.51973 9.01483 4.42813 9.03941 4.34567 9.05444C4.25011 9.07185 4.11092 9.08814 3.95141 9.05423C3.74485 9.01033 3.55748 8.90215 3.41618 8.74522C3.38535 8.71097 3.3588 8.67614 3.33583 8.64171L2.49206 8.8678C2.41536 8.88838 2.32376 8.91296 2.2413 8.92799C2.14574 8.94541 2.00655 8.96169 1.84704 8.92779C1.64048 8.88388 1.45311 8.77571 1.31181 8.61877C1.20269 8.49759 1.1472 8.3689 1.1145 8.27744C1.08629 8.1985 1.06177 8.10689 1.04125 8.03018L0.791701 7.09885C0.771119 7.02215 0.746538 6.93055 0.731508 6.84809C0.714092 6.75253 0.697808 6.61334 0.731712 6.45383C0.775619 6.24726 0.883793 6.0599 1.04073 5.9186C1.16191 5.80948 1.2906 5.75399 1.38206 5.72129C1.461 5.69307 1.55261 5.66856 1.62932 5.64804L2.47318 5.42193C2.47586 5.38071 2.48143 5.33735 2.49099 5.29237C2.5349 5.08581 2.64307 4.89844 2.80001 4.75714C2.92119 4.64802 3.04988 4.59253 3.14134 4.55983C3.22027 4.53162 3.31189 4.50711 3.3886 4.48658L11.1078 2.41824C11.2186 2.19888 11.3697 2.00049 11.5545 1.83406C11.7649 1.64462 12.0058 1.53085 12.2548 1.44183C12.4907 1.35749 12.7836 1.27904 13.123 1.18809L13.1628 1.17744C13.2395 1.15686 13.3311 1.13228 13.4135 1.11725ZM13.3642 2.5039C13.0648 2.58443 12.8606 2.64126 12.7036 2.69735C12.5325 2.75852 12.4742 2.80016 12.4467 2.82492C12.3421 2.91912 12.2699 3.04403 12.2407 3.18174C12.233 3.21793 12.2261 3.28928 12.2587 3.46805C12.2927 3.6545 12.3564 3.89436 12.4559 4.26563L12.5594 4.652C12.6589 5.02328 12.7236 5.26287 12.7874 5.44133C12.8486 5.61244 12.8902 5.67079 12.915 5.69829C13.0092 5.80291 13.1341 5.87503 13.2718 5.9043C13.308 5.91199 13.3793 5.91887 13.5581 5.88629C13.7221 5.85641 13.9273 5.80352 14.2269 5.72356L13.3642 2.5039Z" fill="#155EEF"/>
</svg>
)
const SideBar: FC = () => {
return (
<div>
111
<div className='w-[216px] shrink-0 pt-6 px-4 border-r border-gray-200'>
<div>
<div
className='flex items-center h-9 pl-3 space-x-2 rounded-lg bg-white'
style={{boxShadow: '0px 1px 2px rgba(16, 24, 40, 0.05)'}}
>
<DiscoveryIcon />
<div className='text-sm text-primary-600 font-semibold'>Discovery</div>
</div>
</div>
<div className='mt-10'>
<div className='pl-2 text-xs text-gray-500 font-medium'>Workspace</div>
<div className='mt-1 space-y-1'>
{list.map(({id, name}) => {
return (
<Item key={id} name={name} id={id} />
)
})}
</div>
</div>
</div>
)
}
export default React.memo(SideBar)