added tons of features

This commit is contained in:
2025-02-05 08:01:14 +02:00
parent 4ae0d8c545
commit 8138da6b1d
195 changed files with 12619 additions and 415 deletions

View File

@@ -0,0 +1,19 @@
import {auth} from '@/auth'
import {CreateForm} from '@/components/(protected)/admin/category/create-form'
import {dump} from '@/lib/utils'
export default async function Page({
params
}: {
params: Promise<{slug?: string[]}>
}) {
const session = await auth()
const {slug} = await params
switch ((slug || [])[0]) {
case 'create':
return <CreateForm />
}
return <div>{dump(slug)}</div>
}

View File

@@ -0,0 +1,14 @@
import Link from 'next/link'
import AdminPermission from '@/components/(protected)/admin/auth/permission'
export default function AdminCategoryPage() {
return (
<div>
<AdminPermission />
<p>
<Link href='/admin/category/create'>Створити</Link>
</p>
</div>
)
}

View File

@@ -0,0 +1,65 @@
import {cookies} from 'next/headers'
import {ReactNode} from 'react'
import {auth} from '@/auth'
import AdminPermission from '@/components/(protected)/admin/auth/permission'
import {AdminSidebar} from '@/components/(protected)/admin/sidebar'
import {
SidebarInset,
SidebarProvider,
SidebarTrigger
} from '@/components/ui/sidebar'
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator
} from '@/ui/breadcrumb'
import {Separator} from '@/ui/separator'
export default async function AdminLayout({children}: {children: ReactNode}) {
//const session = await auth()
if (!(await auth())) return <AdminPermission />
const cookieStore = await cookies()
const defaultOpen = cookieStore.get('sidebar:state')?.value === 'true'
return (
<SidebarProvider
defaultOpen={defaultOpen}
style={{
// @ts-ignore
'--sidebar-width': '16rem',
'--sidebar-width-mobile': '18rem'
}}
>
<AdminSidebar />
<SidebarInset>
<header className='flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12'>
<div className='flex items-center gap-2 px-4'>
<SidebarTrigger className='-ml-1' />
<Separator orientation='vertical' className='mr-2 h-4' />
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem className='hidden md:block'>
<BreadcrumbLink href='#'>
Building Your Application
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator className='hidden md:block' />
<BreadcrumbItem>
<BreadcrumbPage>Data Fetching</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
</header>
<main id='admin-bw-panel' className='container'>
{children}
</main>
</SidebarInset>
</SidebarProvider>
)
}

View File

@@ -0,0 +1,5 @@
import AdminPermission from '@/components/(protected)/admin/auth/permission'
export default async function AdminPage() {
return <AdminPermission />
}

View File

@@ -0,0 +1,30 @@
import ProductCreateEditForm from '@/components/(protected)/admin/product/create-edit-form'
import {getProductById} from '@/lib/data/models/product'
import {dump} from '@/lib/utils'
export default async function Page({
params
}: {
params: Promise<{slug?: string[]}>
}) {
const {slug} = await params
const [method, id] = slug || []
let data = null
if (id) {
data = await getProductById(parseInt(id))
if (data) {
data = JSON.parse(JSON.stringify(data))
}
}
switch (method) {
case 'create':
return <ProductCreateEditForm />
case 'update':
return <ProductCreateEditForm data={data} />
default:
return <div>{dump(slug)}</div>
}
}

View File

@@ -0,0 +1,34 @@
import {Product} from '@prisma/client'
import {LayoutList} from 'lucide-react'
import Link from 'next/link'
import AdminPermission from '@/components/(protected)/admin/auth/permission'
import dayjs from '@/lib/config/dayjs'
import {getProducts} from '@/lib/data/models/product'
import {dump} from '@/lib/utils'
//const products = await getProducts()
export default async function AdminProductPage() {
return (
<>
<AdminPermission />
<p>
<Link href='/admin/product/create'>Створити</Link>
</p>
{/*<section className={'mt-12'}>
{products
? products.map((product: Product) => (
<article
key={product.id}
className={'flex flex-row items-center justify-evenly'}
>
<LayoutList />
{product.locales[0].headingTitle || product.locales[0].title}
</article>
))
: null}
</section>*/}
</>
)
}