import { For, createSignal, Show, onMount, createEffect } from 'solid-js' import type { Author } from '../../graphql/types.gen' import { AuthorCard } from '../Author/Card' import { Icon } from '../_shared/Icon' import { Loading } from '../Loading' import DialogCard from '../Inbox/DialogCard' import Search from '../Inbox/Search' import { useAuthorsStore } from '../../stores/zine/authors' import MarkdownIt from 'markdown-it' // const { session } = useAuthStore() import '../../styles/Inbox.scss' // Для моков import { createClient } from '@urql/core' import { findAndLoadGraphQLConfig } from '@graphql-codegen/cli' // import { useAuthStore } from '../../stores/auth' import { useSession } from '../../context/session' const md = new MarkdownIt({ linkify: true }) const OWNER_ID = '501' const client = createClient({ url: 'https://graphqlzero.almansi.me/api' }) // console.log('!!! session:', session) // interface InboxProps { // chats?: Chat[] // messages?: Message[] // } const messageQuery = ` query Comments ($options: PageQueryOptions) { comments(options: $options) { data { id body email } } } ` const newMessageQuery = ` mutation postComment($messageBody: String!) { createComment( input: { body: $messageBody, email: "test@test.com", name: "User" } ) { id body name email } } ` const userSearch = (array: Author[], keyword: string) => { const searchTerm = keyword.toLowerCase() return array.filter((value) => { return value.name.toLowerCase().match(new RegExp(searchTerm, 'g')) }) } const postMessage = async (msg: string) => { const response = await client.mutation(newMessageQuery, { messageBody: msg }).toPromise() return response.data.createComment } export const InboxView = () => { const [messages, setMessages] = createSignal([]) const [authors, setAuthors] = createSignal([]) const [postMessageText, setPostMessageText] = createSignal('') const [loading, setLoading] = createSignal(false) const [currentSlug, setCurrentSlug] = createSignal() const { session } = useSession() const { sortedAuthors } = useAuthorsStore() createEffect(() => { setAuthors(sortedAuthors()) console.log('!!! session():', session()) setCurrentSlug(session()?.user?.slug) }) // Поиск по диалогам const getQuery = (query) => { if (query().length >= 2) { const match = userSearch(authors(), query()) console.log('!!! match:', match) setAuthors(match) } else { setAuthors(sortedAuthors()) } } const fetchMessages = async (query) => { const response = await client .query(query, { options: { slice: { start: 0, end: 3 } } }) .toPromise() if (response.error) console.debug('getMessages', response.error) setMessages(response.data.comments.data) } let chatWindow onMount(async () => { setLoading(true) try { await fetchMessages(messageQuery) } catch (error) { setLoading(false) console.error([fetchMessages], error) } finally { setLoading(false) chatWindow.scrollTop = chatWindow.scrollHeight } }) const handleSubmit = async () => { try { const post = await postMessage(postMessageText()) setMessages((prev) => [...prev, post]) setPostMessageText('') chatWindow.scrollTop = chatWindow.scrollHeight } catch (error) { console.error('[post message error]:', error) } } let formParent // autoresize ghost element const handleChangeMessage = (event) => { setPostMessageText(event.target.value) } createEffect(() => { formParent.dataset.replicatedValue = postMessageText() }) return (
  • Все
  • Переписки
  • Группы
{(author) => }
Online
{(comment: { body: string; id: string; email: string }) => (
{comment.email} id: {comment.id}
)} {/*
*/} {/* */} {/*
*/}