mainpage-deploy

This commit is contained in:
Untone 2024-07-18 07:33:23 +03:00
parent 8fbc85615c
commit 8c5ef2fd54
5 changed files with 733 additions and 501 deletions

1133
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@
"@graphql-codegen/typescript-operations": "^4.2.3", "@graphql-codegen/typescript-operations": "^4.2.3",
"@graphql-codegen/typescript-urql": "^4.0.0", "@graphql-codegen/typescript-urql": "^4.0.0",
"@hocuspocus/provider": "^2.13.5", "@hocuspocus/provider": "^2.13.5",
"@playwright/test": "^1.45.1", "@playwright/test": "^1.45.2",
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",
"@solid-primitives/media": "^2.2.9", "@solid-primitives/media": "^2.2.9",
"@solid-primitives/memo": "^1.3.9", "@solid-primitives/memo": "^1.3.9",
@ -36,39 +36,39 @@
"@solid-primitives/upload": "^0.0.117", "@solid-primitives/upload": "^0.0.117",
"@solidjs/meta": "^0.29.4", "@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.13.6", "@solidjs/router": "^0.13.6",
"@solidjs/start": "^1.0.4", "@solidjs/start": "^1.0.5",
"@tiptap/core": "^2.5.1", "@tiptap/core": "^2.5.4",
"@tiptap/extension-blockquote": "^2.5.1", "@tiptap/extension-blockquote": "^2.5.4",
"@tiptap/extension-bold": "^2.5.1", "@tiptap/extension-bold": "^2.5.4",
"@tiptap/extension-bubble-menu": "^2.5.1", "@tiptap/extension-bubble-menu": "^2.5.4",
"@tiptap/extension-bullet-list": "^2.5.1", "@tiptap/extension-bullet-list": "^2.5.4",
"@tiptap/extension-character-count": "^2.5.1", "@tiptap/extension-character-count": "^2.5.4",
"@tiptap/extension-collaboration": "^2.5.1", "@tiptap/extension-collaboration": "^2.5.4",
"@tiptap/extension-collaboration-cursor": "^2.5.1", "@tiptap/extension-collaboration-cursor": "^2.5.4",
"@tiptap/extension-document": "^2.5.1", "@tiptap/extension-document": "^2.5.4",
"@tiptap/extension-dropcursor": "^2.5.1", "@tiptap/extension-dropcursor": "^2.5.4",
"@tiptap/extension-floating-menu": "^2.5.1", "@tiptap/extension-floating-menu": "^2.5.4",
"@tiptap/extension-focus": "^2.5.1", "@tiptap/extension-focus": "^2.5.4",
"@tiptap/extension-gapcursor": "^2.5.1", "@tiptap/extension-gapcursor": "^2.5.4",
"@tiptap/extension-hard-break": "^2.5.1", "@tiptap/extension-hard-break": "^2.5.4",
"@tiptap/extension-heading": "^2.5.1", "@tiptap/extension-heading": "^2.5.4",
"@tiptap/extension-highlight": "^2.5.1", "@tiptap/extension-highlight": "^2.5.4",
"@tiptap/extension-history": "^2.5.1", "@tiptap/extension-history": "^2.5.4",
"@tiptap/extension-horizontal-rule": "^2.5.1", "@tiptap/extension-horizontal-rule": "^2.5.4",
"@tiptap/extension-image": "^2.5.1", "@tiptap/extension-image": "^2.5.4",
"@tiptap/extension-italic": "^2.5.1", "@tiptap/extension-italic": "^2.5.4",
"@tiptap/extension-link": "^2.5.1", "@tiptap/extension-link": "^2.5.4",
"@tiptap/extension-list-item": "^2.5.1", "@tiptap/extension-list-item": "^2.5.4",
"@tiptap/extension-ordered-list": "^2.5.1", "@tiptap/extension-ordered-list": "^2.5.4",
"@tiptap/extension-paragraph": "^2.5.1", "@tiptap/extension-paragraph": "^2.5.4",
"@tiptap/extension-placeholder": "^2.5.1", "@tiptap/extension-placeholder": "^2.5.4",
"@tiptap/extension-strike": "^2.5.1", "@tiptap/extension-strike": "^2.5.4",
"@tiptap/extension-text": "^2.5.1", "@tiptap/extension-text": "^2.5.4",
"@tiptap/extension-underline": "^2.5.1", "@tiptap/extension-underline": "^2.5.4",
"@tiptap/extension-youtube": "^2.5.1", "@tiptap/extension-youtube": "^2.5.4",
"@types/cookie": "^0.6.0", "@types/cookie": "^0.6.0",
"@types/cookie-signature": "^1.1.2", "@types/cookie-signature": "^1.1.2",
"@types/node": "^20.14.10", "@types/node": "^20.14.11",
"@types/throttle-debounce": "^5.0.2", "@types/throttle-debounce": "^5.0.2",
"@urql/core": "^5.0.4", "@urql/core": "^5.0.4",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
@ -86,7 +86,7 @@
"javascript-time-ago": "^2.5.10", "javascript-time-ago": "^2.5.10",
"patch-package": "^8.0.0", "patch-package": "^8.0.0",
"prosemirror-history": "^1.4.1", "prosemirror-history": "^1.4.1",
"prosemirror-trailing-node": "^2.0.8", "prosemirror-trailing-node": "^2.0.9",
"prosemirror-view": "^1.33.8", "prosemirror-view": "^1.33.8",
"rollup-plugin-visualizer": "^5.12.0", "rollup-plugin-visualizer": "^5.12.0",
"sass": "1.76.0", "sass": "1.76.0",

View File

@ -1,12 +1,11 @@
import { type RouteDefinition, type RouteSectionProps, createAsync } from '@solidjs/router' import { type RouteDefinition, type RouteSectionProps, createAsync } from '@solidjs/router'
import { Show, createEffect } from 'solid-js' import { createEffect } from 'solid-js'
import { LoadMoreItems, LoadMoreWrapper } from '~/components/_shared/LoadMoreWrapper' import { LoadMoreItems, LoadMoreWrapper } from '~/components/_shared/LoadMoreWrapper'
import { useFeed } from '~/context/feed' import { useFeed } from '~/context/feed'
import { useTopics } from '~/context/topics' import { useTopics } from '~/context/topics'
import { loadShouts, loadTopics } from '~/graphql/api/public' import { loadShouts, loadTopics } from '~/graphql/api/public'
import { LoadShoutsOptions, Shout } from '~/graphql/schema/core.gen' import { LoadShoutsOptions, Shout } from '~/graphql/schema/core.gen'
import { HomeView, HomeViewProps } from '../components/Views/Home' import { HomeView, HomeViewProps } from '../components/Views/Home'
import { Loading } from '../components/_shared/Loading'
import { PageLayout } from '../components/_shared/PageLayout' import { PageLayout } from '../components/_shared/PageLayout'
import { useLocalize } from '../context/localize' import { useLocalize } from '../context/localize'
@ -110,17 +109,15 @@ export default function HomePage(props: RouteSectionProps<HomeViewProps>) {
return ( return (
<PageLayout withPadding={true} title={t('Discours')} key="home"> <PageLayout withPadding={true} title={t('Discours')} key="home">
<Show when={(featuredFeed() || []).length > 0} fallback={<Loading />}> <LoadMoreWrapper loadFunction={loadMoreFeatured} pageSize={SHOUTS_PER_PAGE}>
<LoadMoreWrapper loadFunction={loadMoreFeatured} pageSize={SHOUTS_PER_PAGE}> <HomeView
<HomeView featuredShouts={featuredFeed() || (shouts() as Shout[])}
featuredShouts={featuredFeed() || (shouts() as Shout[])} topMonthShouts={topMonthFeed() as Shout[]}
topMonthShouts={topMonthFeed() as Shout[]} topViewedShouts={topViewedFeed() as Shout[]}
topViewedShouts={topViewedFeed() as Shout[]} topRatedShouts={topRatedFeed() as Shout[]}
topRatedShouts={topRatedFeed() as Shout[]} topCommentedShouts={topCommentedFeed() as Shout[]}
topCommentedShouts={topCommentedFeed() as Shout[]} />
/> </LoadMoreWrapper>
</LoadMoreWrapper>
</Show>
</PageLayout> </PageLayout>
) )
} }

View File

@ -118,7 +118,7 @@ export default function AuthorPage(props: RouteSectionProps<AuthorPageProps>) {
> >
<ReactionsProvider> <ReactionsProvider>
<LoadMoreWrapper <LoadMoreWrapper
loadFunction={(selectedTab() === 'comments' ? loadMoreComments : loadMoreAuthorShouts)} loadFunction={selectedTab() === 'comments' ? loadMoreComments : loadMoreAuthorShouts}
pageSize={SHOUTS_PER_PAGE} pageSize={SHOUTS_PER_PAGE}
hidden={selectedTab() !== '' || selectedTab() !== 'comments'} hidden={selectedTab() !== '' || selectedTab() !== 'comments'}
> >
@ -126,7 +126,7 @@ export default function AuthorPage(props: RouteSectionProps<AuthorPageProps>) {
author={author() as Author} author={author() as Author}
selectedTab={selectedTab()} selectedTab={selectedTab()}
authorSlug={props.params.slug} authorSlug={props.params.slug}
shouts={feedByAuthor()[props.params.slug] || articles() as Shout[]} shouts={feedByAuthor()[props.params.slug] || (articles() as Shout[])}
topics={topics()} topics={topics()}
/> />
</LoadMoreWrapper> </LoadMoreWrapper>

View File

@ -12,11 +12,11 @@ export function paginate<T>(arr: T[], startIndex: number, pageSize: number): T[]
// Начинаем новую страницу, когда индекс кратен размеру страницы // Начинаем новую страницу, когда индекс кратен размеру страницы
if (index % pageSize === 0) { if (index % pageSize === 0) {
// Создаем новый подмассив (страницу) // Создаем новый подмассив (страницу)
acc.push([]); acc.push([])
} }
// Добавляем текущий элемент на последнюю страницу // Добавляем текущий элемент на последнюю страницу
acc.at(-1)?.push(item); acc.at(-1)?.push(item)
return acc; return acc
}, [] as T[][]); // Инициализируем аккумулятор как пустой массив массивов }, [] as T[][]) // Инициализируем аккумулятор как пустой массив массивов
} }