import React, { useEffect, useMemo, useState } from 'react' import CommentRoot from '../Comment/Comment' import AddComment from '../AddComment/AddComment' import { Comment, } from '../types' import { createWorkerFactory, useWorker } from '@shopify/react-web-worker' import { useAppSelector } from "src/utils/hooks"; import * as CommentsWorker from './comments.worker' import { Post_Type } from 'src/graphql' import useComments from './useComments' import IconButton from 'src/Components/IconButton/IconButton' import { AiOutlineClose } from 'react-icons/ai' import { Link } from 'react-router-dom' import { createRoute } from 'src/utils/routing' import Preferences from 'src/services/preferences.service' // const createWorker = createWorkerFactory(() => import('./comments.worker')); interface Props { type: Post_Type, id: number | string }; export default function CommentsSection({ type, id }: Props) { // const worker = useWorker(createWorker); // const commentsTree = useMemo(() => convertCommentsToTree(comments), [comments]) // const [commentsTree, setCommentsTree] = useState([]) const user = useAppSelector(state => state.user.me); const [showTooltip, setShowTooltip] = useState(Preferences.get('showNostrCommentsTooltip')) // const filter = useMemo(() => `boltfun ${type}_comment ${id}` + (process.env.NODE_ENV === 'development' ? ' dev' : ""), [id, type]) // useEffect(() => { // CommentsWorker.connect(); // const unsub = CommentsWorker.sub(filter, (newComments) => { // setCommentsTree(newComments) // }) // return () => { // unsub(); // } // }, [filter]); const { commentsTree, postComment, connectionStatus } = useComments({ type, id }) const handleNewComment = async (content: string, parentId?: string) => { try { await postComment({ content, parentId }); return true; } catch (error) { return false } } const closeTooltip = () => { Preferences.update('showNostrCommentsTooltip', false); setShowTooltip(false); } return (
Discussion
{connectionStatus.status === 'Connected' &&
• Connected to {connectionStatus.connectedRelaysCount} relays 📡
} {connectionStatus.status === 'Connecting' &&
• Connecting to relays ⌛
} {connectionStatus.status === 'Not Connected' &&
• Not connected 📡
}
{showTooltip &&
💬

Learn about how your data is stored with Nostr comments and relays

} {!!user &&
handleNewComment(content)} avatar={user.avatar} />
}
{commentsTree.map(comment => handleNewComment(content, comment.nostr_id.toString())} />)}
) }