This commit is contained in:
parent
c488a1e4e6
commit
3d18410763
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
|
@ -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: '' } }
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ export const AllAuthorsPage = (props: PageProps) => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await loadAllAuthors() // default limit, offset: 60, 0
|
await loadAllAuthors()
|
||||||
setIsLoaded(true)
|
setIsLoaded(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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: {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user