import { For, createSignal, Show, onMount, createEffect, createMemo } from 'solid-js' import type { Author, Chat, Message as MessageType } from '../../graphql/types.gen' import { Icon } from '../_shared/Icon' import DialogCard from '../Inbox/DialogCard' import Search from '../Inbox/Search' import { useSession } from '../../context/session' import { createClient } from '@urql/core' import Message from '../Inbox/Message' import { loadRecipients, loadMessages } from '../../stores/inbox' import { t } from '../../utils/intl' import { Modal } from '../Nav/Modal' import { showModal } from '../../stores/ui' import CreateModalContent from '../Inbox/CreateModalContent' import { clsx } from 'clsx' import '../../styles/Inbox.scss' import { useInbox } from '../../context/inbox' import DialogHeader from '../Inbox/DialogHeader' import { apiClient } from '../../utils/apiClient' const userSearch = (array: Author[], keyword: string) => { const searchTerm = keyword.toLowerCase() return array.filter((value) => { return value.name.toLowerCase().match(new RegExp(searchTerm, 'g')) }) } export const InboxView = () => { const { chats, actions: { loadChats } } = useInbox() const [messages, setMessages] = createSignal([]) const [recipients, setRecipients] = createSignal([]) const [postMessageText, setPostMessageText] = createSignal('') const [sortByGroup, setSortByGroup] = createSignal(false) const [sortByPerToPer, setSortByPerToPer] = createSignal(false) const [currentDialog, setCurrentDialog] = createSignal() const { session } = useSession() const currentUserId = createMemo(() => session()?.user?.id) // Поиск по диалогам const getQuery = (query) => { // if (query().length >= 2) { // const match = userSearch(recipients(), query()) // setRecipients(match) // } else { // setRecipients(cashedRecipients()) // } } let chatWindow const handleOpenChat = async (chat) => { setCurrentDialog(chat) try { await loadMessages({ chat: chat.id }) } catch (error) { console.error('[loadMessages]', error) } finally { chatWindow.scrollTop = chatWindow.scrollHeight } } onMount(async () => { try { const response = await loadRecipients({ days: 365 }) setRecipients(response as unknown as Author[]) } catch (error) { console.log(error) } await loadChats() }) const handleSubmit = async () => { try { const post = await apiClient.createMessage({ body: postMessageText().toString(), chat: currentDialog().id.toString() }) setMessages((prev) => [...prev, post.message]) setPostMessageText('') chatWindow.scrollTop = chatWindow.scrollHeight } catch (error) { console.error('[post message error]:', error) } } let textareaParent // textarea autoresize ghost element const handleChangeMessage = (event) => { setPostMessageText(event.target.value) } createEffect(() => { textareaParent.dataset.replicatedValue = postMessageText() }) const handleOpenInviteModal = (event: Event) => { event.preventDefault() showModal('inviteToChat') } const chatsToShow = () => { if (sortByPerToPer()) { return chats().filter((chat) => chat.title.trim().length === 0) } else if (sortByGroup()) { return chats().filter((chat) => chat.title.trim().length > 0) } else { return chats() } } createEffect(() => { console.log('!!! messages():', messages()) console.log('!!! currentDialog():', currentDialog()) }) return (
  • { setSortByPerToPer(false) setSortByGroup(false) }} > {t('All')}
  • { setSortByPerToPer(true) setSortByGroup(false) }} > {t('Personal')}
  • { setSortByGroup(true) setSortByPerToPer(false) }} > {t('Groups')}
{(chat) => ( handleOpenChat(chat)} title={chat.title} members={chat.members} ownId={currentUserId()} /> )}
{(message) => ( )} {/*
*/} {/* */} {/*
*/}