inbox-authors-preload-2
All checks were successful
deploy / test (push) Successful in 1m9s

This commit is contained in:
Untone 2023-12-27 02:28:26 +03:00
parent c488a1e4e6
commit 3d18410763
5 changed files with 31 additions and 13 deletions

View File

@ -8,6 +8,7 @@ import { useInbox } from '../../context/inbox'
import { useLocalize } from '../../context/localize' import { useLocalize } from '../../context/localize'
import { useSession } from '../../context/session' import { useSession } from '../../context/session'
import { useRouter } from '../../stores/router' import { useRouter } from '../../stores/router'
import { AuthorsSortBy, useAuthorsStore } from '../../stores/zine/authors'
import { showModal } from '../../stores/ui' import { showModal } from '../../stores/ui'
import { Icon } from '../_shared/Icon' import { Icon } from '../_shared/Icon'
import { Popover } from '../_shared/Popover' import { Popover } from '../_shared/Popover'
@ -23,6 +24,7 @@ import { Modal } from '../Nav/Modal'
import styles from '../../styles/Inbox.module.scss' import styles from '../../styles/Inbox.module.scss'
type InboxSearchParams = { type InboxSearchParams = {
by?: string
initChat: string initChat: string
chat: string chat: string
} }
@ -35,14 +37,18 @@ const handleOpenInviteModal = () => {
showModal('inviteToChat') showModal('inviteToChat')
} }
export const InboxView = () => { type Props = {
authors: Author[]
isLoaded: boolean
}
export const InboxView = (props: Props) => {
const { t } = useLocalize() const { t } = useLocalize()
const { const {
chats, chats,
messages, messages,
actions: { loadChats, loadRecipients, getMessages, sendMessage, createChat }, actions: { loadChats, loadRecipients, getMessages, sendMessage, createChat },
} = useInbox() } = useInbox()
const [recipients, setRecipients] = createSignal<Author[]>([]) const [recipients, setRecipients] = createSignal<Author[]>([])
const [sortByGroup, setSortByGroup] = createSignal(false) const [sortByGroup, setSortByGroup] = createSignal(false)
const [sortByPerToPer, setSortByPerToPer] = createSignal(false) const [sortByPerToPer, setSortByPerToPer] = createSignal(false)
@ -53,7 +59,10 @@ export const InboxView = () => {
const { author } = useSession() const { author } = useSession()
const currentUserId = createMemo(() => author()?.id) const currentUserId = createMemo(() => author()?.id)
const { changeSearchParams, searchParams } = useRouter<InboxSearchParams>() const { changeSearchParams, searchParams } = useRouter<InboxSearchParams>()
const { sortedAuthors } = useAuthorsStore({
authors: props.authors,
sortBy: (searchParams()?.by as AuthorsSortBy) || 'name',
})
const messagesContainerRef: { current: HTMLDivElement } = { const messagesContainerRef: { current: HTMLDivElement } = {
current: null, current: null,
} }

View File

@ -4,7 +4,7 @@ import type { PageContext } from '../renderer/types'
import { apiClient } from '../graphql/client/core' import { apiClient } from '../graphql/client/core'
export const onBeforeRender = async (_pageContext: PageContext) => { export const onBeforeRender = async (_pageContext: PageContext) => {
const allAuthors = await apiClient.getAllAuthors() // limit 50, offset 0 const allAuthors = await apiClient.getAllAuthors()
const pageProps: PageProps = { allAuthors, seo: { title: '' } } const pageProps: PageProps = { allAuthors, seo: { title: '' } }

View File

@ -17,7 +17,7 @@ export const AllAuthorsPage = (props: PageProps) => {
return return
} }
await loadAllAuthors() // default limit, offset: 60, 0 await loadAllAuthors()
setIsLoaded(true) setIsLoaded(true)
}) })

View File

@ -3,15 +3,27 @@ import { ShowOnlyOnClient } from '../components/_shared/ShowOnlyOnClient'
import { InboxView } from '../components/Views/Inbox' import { InboxView } from '../components/Views/Inbox'
import { InboxProvider } from '../context/inbox' import { InboxProvider } from '../context/inbox'
import { useLocalize } from '../context/localize' import { useLocalize } from '../context/localize'
import type { PageProps } from './types'
import { createSignal, onMount } from 'solid-js'
import { loadAllAuthors } from '../stores/zine/authors'
export const InboxPage = () => { export const InboxPage = (props: PageProps) => {
const { t } = useLocalize() const { t } = useLocalize()
const [isLoaded, setIsLoaded] = createSignal<boolean>(Boolean(props.allAuthors))
onMount(async () => {
if (isLoaded()) {
return
}
await loadAllAuthors()
setIsLoaded(true)
})
return ( return (
<PageLayout hideFooter={true} title={t('Inbox')}> <PageLayout hideFooter={true} title={t('Inbox')}>
<ShowOnlyOnClient> <ShowOnlyOnClient>
<InboxProvider> <InboxProvider>
<InboxView /> <InboxView isLoaded={isLoaded()} authors={props.allAuthors} />
</InboxProvider> </InboxProvider>
</ShowOnlyOnClient> </ShowOnlyOnClient>
</PageLayout> </PageLayout>

View File

@ -1,15 +1,12 @@
import type { PageProps } from './types' import type { PageProps } from './types'
import type { PageContext } from '../renderer/types' import type { PageContext } from '../renderer/types'
import { PRERENDERED_ARTICLES_COUNT } from '../components/Views/Home'
import { apiClient } from '../graphql/client/core' import { apiClient } from '../graphql/client/core'
export const onBeforeRender = async (_pageContext: PageContext) => { export const onBeforeRender = async (_pageContext: PageContext) => {
const homeShouts = await apiClient.getShouts({ const allAuthors = await apiClient.getAllAuthors()
filters: { published: true },
limit: PRERENDERED_ARTICLES_COUNT, const pageProps: PageProps = { allAuthors, seo: { title: '' } }
})
const pageProps: PageProps = { homeShouts, seo: { title: '' } }
return { return {
pageContext: { pageContext: {