fix: improve skeleton loading states in feed preview (#3265)

This commit is contained in:
Whitewater 2025-03-24 16:31:59 +08:00 committed by GitHub
parent 149ca034f6
commit cc03e7d8fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 17 deletions

View File

@ -63,26 +63,23 @@ const LoadingCircleFallback = (
export const EntryItemSkeleton: FC<{
view: FeedViewType
count?: number
}> = memo(({ view, count }) => {
}> = memo(({ view, count = 10 }) => {
const SkeletonItem = getSkeletonItemComponentByView(view)
if (!SkeletonItem) {
return LoadingCircleFallback
}
if (count === 1) {
return SkeletonItem
}
return SkeletonItem ? (
return (
<div className={cn(views[view]!.gridMode ? girdClassNames : "flex flex-col")}>
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{SkeletonItem}
{Array.from({ length: count }).map((_, index) => (
// eslint-disable-next-line @eslint-react/no-array-index-key -- index is unique
<div key={index}>{SkeletonItem}</div>
))}
</div>
) : (
LoadingCircleFallback
)
})

View File

@ -175,7 +175,7 @@ const SubscriptionItem: FC<{
) : (
<>
<FollowIcon className="mr-1 size-3" />
{APP_NAME}
{t("feed_form.follow")}
</>
)}
</Button>

View File

@ -1,11 +1,12 @@
import { Card, CardContent, CardHeader } from "@follow/components/ui/card/index.jsx"
import { views } from "@follow/constants"
import { FeedViewType, views } from "@follow/constants"
import type { EntryModelSimple, FeedModel } from "@follow/models"
import { cn } from "@follow/utils/utils"
import { cloneElement, forwardRef } from "react"
import { useI18n } from "~/hooks/common"
import { EntryItemSkeleton } from "../entry-column/item"
import { EntryItemStateless } from "../entry-column/item-stateless"
export const ViewSelectorRadioGroup = forwardRef<
@ -50,12 +51,14 @@ export const ViewSelectorRadioGroup = forwardRef<
</div>
))}
</CardHeader>
{!!feed && !!entries && (
{!!feed && !!entries ? (
<CardContent className="space-y-2 p-2">
{entries.slice(0, 2).map((entry) => (
<EntryItemStateless entry={entry} feed={feed} view={view} key={entry.guid} />
))}
</CardContent>
) : (
<EntryItemSkeleton view={view ?? FeedViewType.Articles} count={2} />
)}
</Card>
)