import "@webscopeio/react-textarea-autocomplete/style.css"; import "./Textarea.css"; import Nostrich from "../nostrich.jpg"; import { useLiveQuery } from "dexie-react-hooks"; import ReactTextareaAutocomplete from "@webscopeio/react-textarea-autocomplete"; import TextareaAutosize from "react-textarea-autosize"; import Nip05 from "./Nip05"; import { hexToBech32 } from "../Util"; import { db } from "../db"; import { MetadataCache } from "../db/User"; function searchUsers(query: string, users: MetadataCache[]) { const q = query.toLowerCase() return users.filter(({ name, display_name, about, nip05 }: MetadataCache) => { return name?.toLowerCase().includes(q) || display_name?.toLowerCase().includes(q) || about?.toLowerCase().includes(q) || nip05?.toLowerCase().includes(q) }).slice(0, 3) } const UserItem = ({ pubkey, display_name, picture, nip05, ...rest }: MetadataCache) => { return (
{picture && }
{display_name || rest.name}
) } const Textarea = ({ users, onChange, ...rest }: any) => { const allUsers = useLiveQuery( () => db.users.toArray() ); return ( Loading....} placeholder="Say something!" onChange={onChange} textAreaComponent={TextareaAutosize} trigger={{ "@": { afterWhitespace: true, dataProvider: token => allUsers ? searchUsers(token, allUsers) : [], component: (props: any) => , output: (item: any) => `@${hexToBech32("npub", item.pubkey)}` } }} /> ) } export default Textarea