120 lines
2.6 KiB
TypeScript

import { headers as getHeaders } from 'next/headers.js'
import { getPayload, PaginatedDocs } from 'payload'
import { Checkout, Repository } from '@/payload-types'
import config from '@/payload.config'
import ManagePageClient from './page.client'
import { PageBreadCrumb, Route } from '@/components/PageBreadCrumb'
const breadcrumRoutes: Route[] = [
{
label: 'Home',
href: '/',
},
{
label: 'Manage',
href: '/manage',
},
]
const ManagePage = async () => {
const headers = await getHeaders()
const payloadConfig = await config
const payload = await getPayload({ config: payloadConfig })
const { user } = await payload.auth({ headers })
let userRepos: PaginatedDocs<Repository> | null = null
if (user?.id)
userRepos = (await payload.find({
collection: 'repositories',
depth: 3,
limit: 10,
select: {
name: true,
abbreviation: true,
image: true,
description: true,
dateOpenToPublic: true,
holdRequests: true,
},
where: {
'owner.id': {
equals: user.id,
},
},
joins: {
holdRequests: {
limit: 100,
},
},
})) as PaginatedDocs<Repository>
let userBorrows: PaginatedDocs<Checkout> | null = null
if (user?.id)
userBorrows = await payload.find({
collection: 'checkouts',
depth: 3,
limit: 10,
select: {
id: true,
copy: true,
dateDue: true,
ownerVerifiedReturnedDate: true,
loaneeReturnedDate: true,
},
sort: 'dateDue',
where: {
and: [
{
isReturned: {
not_equals: true,
},
},
{
'user.id': {
equals: user.id,
},
},
],
},
})
let userLoans: PaginatedDocs<Checkout> | null = null
if (user?.id)
userLoans = await payload.find({
collection: 'checkouts',
depth: 2,
limit: 10,
select: {
id: true,
copy: true,
dateDue: true,
ownerVerifiedReturnedDate: true,
loaneeReturnedDate: true,
},
sort: 'dateDue',
where: {
and: [
{
isReturned: {
not_equals: true,
},
},
{
'copy.repository.owner.id': {
equals: user.id,
},
},
],
},
})
return (
<>
<PageBreadCrumb routes={breadcrumRoutes} />
<ManagePageClient repos={userRepos} borrows={userBorrows} user={user} loans={userLoans} />
</>
)
}
export default ManagePage