From 87c4cdabc7436fcae9af2cf85b3d2a54fe3da74e Mon Sep 17 00:00:00 2001 From: Innei Date: Mon, 29 Jul 2024 14:18:03 +0800 Subject: [PATCH] fix: add `scrollSeekConfiguration` Signed-off-by: Innei --- .../src/modules/entry-column/article-item.tsx | 16 +++++----- .../src/modules/entry-column/audio-item.tsx | 10 +++---- .../src/modules/entry-column/index.tsx | 16 ++++++++-- .../src/modules/entry-column/item.tsx | 29 ++++++++++--------- .../entry-column/notification-item.tsx | 10 +++---- .../src/modules/entry-column/picture-item.tsx | 10 +++---- .../entry-column/social-media-item.tsx | 24 +++++++-------- .../src/modules/entry-column/video-item.tsx | 10 +++---- 8 files changed, 70 insertions(+), 55 deletions(-) diff --git a/src/renderer/src/modules/entry-column/article-item.tsx b/src/renderer/src/modules/entry-column/article-item.tsx index 3ea83220f..768a452d4 100644 --- a/src/renderer/src/modules/entry-column/article-item.tsx +++ b/src/renderer/src/modules/entry-column/article-item.tsx @@ -21,23 +21,23 @@ export const ArticleItemSkeleton = (
-
+
-
+
· -
+
-
-
+
+
-
-
+
+
-
+
diff --git a/src/renderer/src/modules/entry-column/audio-item.tsx b/src/renderer/src/modules/entry-column/audio-item.tsx index 38e3b281e..083255fdc 100644 --- a/src/renderer/src/modules/entry-column/audio-item.tsx +++ b/src/renderer/src/modules/entry-column/audio-item.tsx @@ -23,17 +23,17 @@ export const AudioItemSkeleton = (
-
+
· -
+
-
-
+
+
-
+
diff --git a/src/renderer/src/modules/entry-column/index.tsx b/src/renderer/src/modules/entry-column/index.tsx index 576a8a515..56e76829c 100644 --- a/src/renderer/src/modules/entry-column/index.tsx +++ b/src/renderer/src/modules/entry-column/index.tsx @@ -51,12 +51,20 @@ import { useState, } from "react" import { useHotkeys } from "react-hotkeys-hook" -import type { VirtuosoHandle, VirtuosoProps } from "react-virtuoso" +import type { + ScrollSeekConfiguration, + VirtuosoHandle, + VirtuosoProps, +} from "react-virtuoso" import { Virtuoso, VirtuosoGrid } from "react-virtuoso" import { useEntriesByView, useEntryMarkReadHandler } from "./hooks" import { EntryItem, EntryItemSkeleton } from "./item" +const scrollSeekConfiguration: ScrollSeekConfiguration = { + enter: (velocity) => Math.abs(velocity) > 500, + exit: (velocity) => Math.abs(velocity) < 500, +} export function EntryColumn() { const virtuosoRef = useRef(null) const entries = useEntriesByView({ @@ -95,12 +103,16 @@ export function EntryColumn() { const virtuosoOptions = { components: { List: ListContent, - Footer: useCallback(() => { if (!isFetchingNextPage) return null return }, [isFetchingNextPage, view]), + ScrollSeekPlaceholder: useCallback( + () => , + [view], + ), }, + scrollSeekConfiguration, rangeChanged: (...args: any[]) => { handleMarkReadInRange && // @ts-expect-error diff --git a/src/renderer/src/modules/entry-column/item.tsx b/src/renderer/src/modules/entry-column/item.tsx index ccd711b53..67d438f5f 100644 --- a/src/renderer/src/modules/entry-column/item.tsx +++ b/src/renderer/src/modules/entry-column/item.tsx @@ -188,7 +188,6 @@ function EntryItemImpl({ onDoubleClick={handleDoubleClick} onContextMenu={handleContextMenu} > -
) -export const EntryItemSkeleton: FC<{ view: FeedViewType }> = memo( - ({ view }) => { - const SkeletonItem = SkeletonItemMap[view] - return SkeletonItem ? - ( -
{createSkeletonItems(SkeletonItem)}
- ) : - ( - LoadingCircleFallback - ) - }, -) +export const EntryItemSkeleton: FC<{ + view: FeedViewType + single?: boolean +}> = memo(({ view, single }) => { + const SkeletonItem = SkeletonItemMap[view] + if (single) { + return SkeletonItem + } + return SkeletonItem ? + ( +
{createSkeletonItems(SkeletonItem)}
+ ) : + ( + LoadingCircleFallback + ) +}) const createSkeletonItems = (element: ReactNode) => { const children = [] as ReactNode[] diff --git a/src/renderer/src/modules/entry-column/notification-item.tsx b/src/renderer/src/modules/entry-column/notification-item.tsx index 024a45fee..765c88692 100644 --- a/src/renderer/src/modules/entry-column/notification-item.tsx +++ b/src/renderer/src/modules/entry-column/notification-item.tsx @@ -19,16 +19,16 @@ export function NotificationItem({ export const NotificationItemSkeleton = (
-
+
-
+
· -
+
-
-
+
+
diff --git a/src/renderer/src/modules/entry-column/picture-item.tsx b/src/renderer/src/modules/entry-column/picture-item.tsx index 1cfa6deef..f0d0dec8d 100644 --- a/src/renderer/src/modules/entry-column/picture-item.tsx +++ b/src/renderer/src/modules/entry-column/picture-item.tsx @@ -51,18 +51,18 @@ export const PictureItemSkeleton = (
-
+
-
+
-
-
+
+
· -
+
diff --git a/src/renderer/src/modules/entry-column/social-media-item.tsx b/src/renderer/src/modules/entry-column/social-media-item.tsx index 4065663f8..751ce62b6 100644 --- a/src/renderer/src/modules/entry-column/social-media-item.tsx +++ b/src/renderer/src/modules/entry-column/social-media-item.tsx @@ -139,31 +139,31 @@ export const SocialMediaItemSkeleton = (
-
+
-
+
· -
+
-
-
-
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/src/renderer/src/modules/entry-column/video-item.tsx b/src/renderer/src/modules/entry-column/video-item.tsx index cd4b5af90..d877aa748 100644 --- a/src/renderer/src/modules/entry-column/video-item.tsx +++ b/src/renderer/src/modules/entry-column/video-item.tsx @@ -144,18 +144,18 @@ export const VideoItemSkeleton = (
-
+
-
+
-
-
+
+
· -
+