import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { COLLECTION_DESCRIPTION_MAX, COLLECTION_NAME_MAX } from "@/db/limits" import { Tables } from "@/supabase/types" import { CollectionFile } from "@/types" import { IconBooks } from "@tabler/icons-react" import { FC, useState } from "react" import { SidebarItem } from "../all/sidebar-display-item" import { CollectionFileSelect } from "./collection-file-select" interface CollectionItemProps { collection: Tables<"collections"> } export const CollectionItem: FC = ({ collection }) => { const [name, setName] = useState(collection.name) const [isTyping, setIsTyping] = useState(false) const [description, setDescription] = useState(collection.description) const handleFileSelect = ( file: CollectionFile, setSelectedCollectionFiles: React.Dispatch< React.SetStateAction > ) => { setSelectedCollectionFiles(prevState => { const isFileAlreadySelected = prevState.find( selectedFile => selectedFile.id === file.id ) if (isFileAlreadySelected) { return prevState.filter(selectedFile => selectedFile.id !== file.id) } else { return [...prevState, file] } }) } return ( } updateState={{ name, description }} renderInputs={(renderState: { startingCollectionFiles: CollectionFile[] setStartingCollectionFiles: React.Dispatch< React.SetStateAction > selectedCollectionFiles: CollectionFile[] setSelectedCollectionFiles: React.Dispatch< React.SetStateAction > }) => { return ( <>
!renderState.selectedCollectionFiles.some( selectedFile => selectedFile.id === startingFile.id ) ), ...renderState.selectedCollectionFiles.filter( selectedFile => !renderState.startingCollectionFiles.some( startingFile => startingFile.id === selectedFile.id ) ) ] } onCollectionFileSelect={file => handleFileSelect(file, renderState.setSelectedCollectionFiles) } />
setName(e.target.value)} maxLength={COLLECTION_NAME_MAX} />
setDescription(e.target.value)} maxLength={COLLECTION_DESCRIPTION_MAX} />
) }} /> ) }