added tons of features
This commit is contained in:
19
app/(protected)/admin/category/[...slug]/page.tsx
Normal file
19
app/(protected)/admin/category/[...slug]/page.tsx
Normal 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>
|
||||
}
|
||||
14
app/(protected)/admin/category/page.tsx
Normal file
14
app/(protected)/admin/category/page.tsx
Normal 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>
|
||||
)
|
||||
}
|
||||
65
app/(protected)/admin/layout.tsx
Normal file
65
app/(protected)/admin/layout.tsx
Normal 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>
|
||||
)
|
||||
}
|
||||
5
app/(protected)/admin/page.tsx
Normal file
5
app/(protected)/admin/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
||||
import AdminPermission from '@/components/(protected)/admin/auth/permission'
|
||||
|
||||
export default async function AdminPage() {
|
||||
return <AdminPermission />
|
||||
}
|
||||
30
app/(protected)/admin/product/[...slug]/page.tsx
Normal file
30
app/(protected)/admin/product/[...slug]/page.tsx
Normal 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>
|
||||
}
|
||||
}
|
||||
34
app/(protected)/admin/product/page.tsx
Normal file
34
app/(protected)/admin/product/page.tsx
Normal 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>*/}
|
||||
</>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user