'use client' import { Book, Genre, 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' type DropDownProps = { currentRepository: Repository repositories: Repository[] isDisabled: boolean isRequesting: boolean onClickRequest: () => void onChange: (repo: Repository | null) => void } function RepoDropdown({ currentRepository, repositories, isRequesting, isDisabled, onClickRequest, onChange, }: DropDownProps) { return (
repo?.name} defaultValue={currentRepository} className="" onChange={(repo) => onChange(repo)} > {(repo) => ( {repo.abbreviation} {repo.name} )}
) } type Props = { book: Book repositories: PaginatedDocs } export default function BookByIdPageClient(props: Props) { const { book, repositories } = props const repos = repositories.docs const [isRequestingCopy, setIsRequestingCopy] = useState(false) const [selectedRepository, setSelectedRepository] = useState( repos.length ? repos[0] : null, ) const isRequestDisabled = useMemo(() => { return isRequestingCopy }, [isRequestingCopy]) const onClickRequest = async () => { if (isRequestingCopy || !selectedRepository || !book) return setIsRequestingCopy(true) const response = await requestHold({ repositoryId: selectedRepository.id, bookId: book.id, }) console.log(response) setIsRequestingCopy(false) } return (
{/* Book */}
{/* Book Cover */}
book cover art
{/* Book details */}

{book.title}

Book information

{book.publication && ( Published:  )}

{book.summary}

setSelectedRepository(repo)} />

Genres

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

Description

)}
) }