'use client' import { Book, Genre, HoldRequest, Repository } from '@/payload-types' import { Combobox, ComboboxLabel, ComboboxOption, ComboboxDescription } from '@/components/combobox' import { Field, Label } from '@/components/fieldset' import type { PaginatedDocs } from 'payload' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Loader2 } from 'lucide-react' import { RichText } from '@/components/RichText' import { useMemo, useState } from 'react' import requestHold from '../../serverCalls/requestHold' import { useGlobal } from '@/providers/GlobalProvider' import Link from 'next/link' type DropDownProps = { currentRepository: Repository repositories: Repository[] isDisabled: boolean doesHoldExist: boolean isRequesting: boolean onClickRequest: () => void onChange: (repo: Repository | null) => void } function RepoDropdown({ currentRepository, repositories, isRequesting, doesHoldExist, isDisabled, onClickRequest, onChange, }: DropDownProps) { return ( {doesHoldExist ? ( You have requested a hold for this book ) : ( <>
repo?.name} defaultValue={currentRepository} className="" onChange={(repo) => onChange(repo)} > {(repo) => ( {repo.abbreviation} {repo.name} )}
)}
) } type Props = { book: Book repositories: PaginatedDocs existingHolds: PaginatedDocs | null } export default function BookByIdPageClient(props: Props) { const { book, repositories, existingHolds } = props const repos = repositories.docs const { user } = useGlobal() console.log(user) const [isRequestingCopy, setIsRequestingCopy] = useState(false) const [selectedRepository, setSelectedRepository] = useState( repos.length ? repos[0] : null, ) const [doesHoldExist, setDoesHoldExist] = useState(!!existingHolds?.totalDocs) const isRequestDisabled = useMemo(() => { return isRequestingCopy }, [isRequestingCopy]) const onClickRequest = async () => { if (isRequestingCopy || !selectedRepository || !book || doesHoldExist) return setIsRequestingCopy(true) const newHoldResponse = await requestHold({ repositoryId: selectedRepository.id, bookId: book.id, }) if (newHoldResponse?.id) setDoesHoldExist(true) setIsRequestingCopy(false) } return (
{/* Book Cover */}
book cover art
{/* Book details */}

{book.title}

Book information

{book.publication && ( Published:  )}

{book.summary}

{!user ? ( Sign in to request a hold ) : ( setSelectedRepository(repo)} /> )}

Genres

    {(book.genre as Genre[])?.map((g) => ( {g.name} ))}
{book.description && (

Description

)}
) }