2023-01-14 10:07:49 +00:00
|
|
|
import { Component } from "react";
|
|
|
|
|
|
|
|
import ReactTextareaAutocomplete from "@webscopeio/react-textarea-autocomplete";
|
|
|
|
|
|
|
|
import Nip05, { useIsVerified } from "./Nip05";
|
2023-01-14 10:18:01 +00:00
|
|
|
import "@webscopeio/react-textarea-autocomplete/style.css";
|
2023-01-14 10:07:49 +00:00
|
|
|
import "./Textarea.css";
|
|
|
|
import Nostrich from "../nostrich.jpg";
|
|
|
|
|
|
|
|
function searchUsers(query, users) {
|
2023-01-14 10:18:01 +00:00
|
|
|
const q = query.toLowerCase()
|
|
|
|
return Object.values(users).filter(({ name, display_name, about }) => {
|
|
|
|
return name.toLowerCase().includes(q) || display_name?.includes(q) || about?.includes(q)
|
|
|
|
}).slice(0, 3)
|
2023-01-14 10:07:49 +00:00
|
|
|
}
|
|
|
|
|
2023-01-14 10:18:01 +00:00
|
|
|
const UserItem = ({ pubkey, display_name, picture, nip05, ...rest }) => {
|
2023-01-14 10:07:49 +00:00
|
|
|
const { isVerified, couldNotVerify, name, domain } = useIsVerified(nip05, pubkey)
|
|
|
|
return (
|
2023-01-14 10:18:01 +00:00
|
|
|
<div key={pubkey} className="user-item">
|
2023-01-14 10:07:49 +00:00
|
|
|
<div className="user-picture">
|
|
|
|
{picture && <img src={picture ? picture : Nostrich} className="picture" />}
|
|
|
|
</div>
|
|
|
|
<div className="user-details">
|
2023-01-14 10:18:01 +00:00
|
|
|
<strong>{display_name || rest.name}</strong>
|
2023-01-14 10:07:49 +00:00
|
|
|
<Nip05 name={name} domain={domain} isVerified={isVerified} couldNotVerify={couldNotVerify} />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default class Textarea extends Component {
|
|
|
|
render() {
|
|
|
|
const { users, onChange, ...rest } = this.props
|
|
|
|
return (
|
|
|
|
<ReactTextareaAutocomplete
|
|
|
|
{...rest}
|
|
|
|
loadingComponent={() => <span>Loading....</span>}
|
|
|
|
placeholder="Say something!"
|
|
|
|
ref={rta => {
|
|
|
|
this.rta = rta;
|
|
|
|
}}
|
|
|
|
onChange={onChange}
|
|
|
|
trigger={{
|
|
|
|
"@": {
|
2023-01-14 10:18:01 +00:00
|
|
|
afterWhitespace: true,
|
2023-01-14 10:07:49 +00:00
|
|
|
dataProvider: token => searchUsers(token, users),
|
|
|
|
component: ({ entity }) => <UserItem {...entity} />,
|
|
|
|
output: (item, trigger) => `@${item.pubkey}`
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|