import clsx from 'clsx' import dayjs from 'dayjs' import { useState } from 'react' import Textarea from 'react-expanding-textarea' import { CATEGORY_LIST } from '../../../common/categories' import { Contract } from 'common/contract' import { parseTags, exhibitExts } from 'common/util/parse' import { useAdmin } from 'web/hooks/use-admin' import { updateContract } from 'web/lib/firebase/contracts' import { Row } from '../layout/row' import { TagsList } from '../tags-list' import { Content } from '../editor' import { Editor } from '@tiptap/react' export function ContractDescription(props: { contract: Contract isCreator: boolean className?: string }) { const { contract, isCreator, className } = props const descriptionTimestamp = () => `${dayjs().format('MMM D, h:mma')}: ` const isAdmin = useAdmin() const desc = contract.description ?? '' // Append the new description (after a newline) async function saveDescription(newText: string) { const editor = new Editor({ content: desc, extensions: exhibitExts }) editor .chain() .focus('end') .insertContent('

') .insertContent(newText.trim()) .run() const tags = parseTags( `${editor.getText()} ${contract.tags.map((tag) => `#${tag}`).join(' ')}` ) const lowercaseTags = tags.map((tag) => tag.toLowerCase()) await updateContract(contract.id, { description: editor.getJSON(), tags, lowercaseTags, }) } const { tags } = contract const categories = tags.filter((tag) => CATEGORY_LIST.includes(tag.toLowerCase()) ) return (
{categories.length > 0 && (
)}
{isCreator && ( )} {isAdmin && ( updateContract(contract.id, { question })} buttonText="ADMIN: Edit question" /> )} {/* {isAdmin && ( updateContract(contract.id, { createdTime: Number(time) }) } buttonText="ADMIN: Edit createdTime" /> )} */}
) } function EditContract(props: { text: string onSave: (newText: string) => void buttonText: string }) { const [text, setText] = useState(props.text) const [editing, setEditing] = useState(false) const onSave = (newText: string) => { setEditing(false) setText(props.text) // Reset to original text props.onSave(newText) } return editing ? (