'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 ( From Repository repo?.name} defaultValue={currentRepository} className="" onChange={(repo) => onChange(repo)} > {(repo) => ( {repo.abbreviation} {repo.name} )} {isRequesting && } Request Copy ) } 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 details */} {book.title} Book information {book.publication && ( Published: {book.publication} )} {book.summary} setSelectedRepository(repo)} /> Genres {(book.genre as Genre[])?.map((g) => ( {g.name} ))} {book.description && ( Description )} ) }
{book.publication && ( Published: {book.publication} )}
{book.summary}