From 7ca7acc487f0d5c292721abc408e460afff79a98 Mon Sep 17 00:00:00 2001 From: Untone Date: Wed, 28 Aug 2024 11:53:40 +0300 Subject: [PATCH] loadmore+viewed-fix --- src/components/_shared/LoadMoreWrapper.tsx | 6 ++++-- src/routes/topic/[slug]/[...tab].tsx | 11 +++++++---- src/utils/paginate.ts | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/components/_shared/LoadMoreWrapper.tsx b/src/components/_shared/LoadMoreWrapper.tsx index dc5f5c0c..9f83d3b1 100644 --- a/src/components/_shared/LoadMoreWrapper.tsx +++ b/src/components/_shared/LoadMoreWrapper.tsx @@ -19,11 +19,12 @@ export const LoadMoreWrapper = (props: LoadMoreProps) => { const { t } = useLocalize() const [items, setItems] = createSignal([]) const [offset, setOffset] = createSignal(0) - const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false) + const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(props.hidden) const [isLoading, setIsLoading] = createSignal(false) createEffect( on(items, (iii) => { + // console.debug('LoadMoreWrapper.fx:', iii) if (Array.isArray(iii)) { setIsLoadMoreButtonVisible(iii.length - offset() >= 0) setOffset(iii.length) @@ -36,7 +37,8 @@ export const LoadMoreWrapper = (props: LoadMoreProps) => { saveScrollPosition() const newItems = await props.loadFunction(offset()) if (!Array.isArray(newItems)) return - setItems( + if (newItems.length === 0) setIsLoadMoreButtonVisible(false) + else setItems( (prev) => Array.from(new Set([...prev, ...newItems])).sort( byCreated as SortFunction diff --git a/src/routes/topic/[slug]/[...tab].tsx b/src/routes/topic/[slug]/[...tab].tsx index 3110e436..3348de8c 100644 --- a/src/routes/topic/[slug]/[...tab].tsx +++ b/src/routes/topic/[slug]/[...tab].tsx @@ -39,10 +39,10 @@ export type TopicPageProps = { articles?: Shout[]; topics: Topic[]; authors?: Au export default function TopicPage(props: RouteSectionProps) { const { t } = useLocalize() - const { addTopics } = useTopics() - const [loadingError, setLoadingError] = createSignal(false) // all topics + const { addTopics } = useTopics() + const [loadingError, setLoadingError] = createSignal(false) const topics = createAsync(async () => { const result = props.data.topics || (await fetchAllTopics()) if (!result) setLoadingError(true) @@ -61,7 +61,7 @@ export default function TopicPage(props: RouteSectionProps) { const [title, setTitle] = createSignal('') const [desc, setDesc] = createSignal('') const [cover, setCover] = createSignal('') - + const [viewed, setViewed] = createSignal(false) createEffect(on([topics, () => window], ([ttt, win]) => { if (ttt && win) { // console.debug('all topics:', ttt) @@ -80,11 +80,14 @@ export default function TopicPage(props: RouteSectionProps) { ) // views google counter increment - window?.gtag?.('event', 'page_view', { + if (viewed()) { + window?.gtag?.('event', 'page_view', { page_title: tpc.title, page_location: window?.location.href, page_path: window?.location.pathname }) + setViewed(true) + } } }, {})) diff --git a/src/utils/paginate.ts b/src/utils/paginate.ts index 76ecdb32..3dd983b0 100644 --- a/src/utils/paginate.ts +++ b/src/utils/paginate.ts @@ -16,7 +16,7 @@ export function paginate(arr: T[], startIndex: number, pageSize: number): T[] } // Добавляем текущий элемент на последнюю страницу - acc.at(-1)?.push(item) + acc[acc.length - 1].push(item) return acc }, [] as T[][]) // Инициализируем аккумулятор как пустой массив массивов }