120 lines
2.6 KiB
TypeScript
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
|