From 804ae8f6fc1a825f589f345f28d0c2a0059d54f5 Mon Sep 17 00:00:00 2001 From: km2025 Date: Tue, 27 Jan 2026 15:06:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E8=BF=87=E6=BB=A4=E5=92=8C?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(tabs)/sync.tsx | 62 +++++++++++++------------- hooks/data/use-template-generations.ts | 37 +++++++-------- 2 files changed, 45 insertions(+), 54 deletions(-) diff --git a/app/(tabs)/sync.tsx b/app/(tabs)/sync.tsx index 052f995..ec0686e 100644 --- a/app/(tabs)/sync.tsx +++ b/app/(tabs)/sync.tsx @@ -78,39 +78,37 @@ const Sync = observer(() => { // 将生成记录转换为 posts 格式 const posts = useMemo(() => { - const generations = generationsData?.data || [] - return generations - .filter((gen: any) => gen?.id) // 过滤掉没有 id 的记录 - .map((gen: any) => { - const imageUrl = Array.isArray(gen?.resultUrl) ? gen?.resultUrl[0] : gen?.resultUrl - const coverUrl = gen?.template?.coverImageUrl - return { - id: gen?.id, + const generations = generationsData || [] + return generations?.map((gen: any) => { + const imageUrl = Array.isArray(gen?.resultUrl) ? gen?.resultUrl[0] : gen?.resultUrl + const coverUrl = gen?.template?.coverImageUrl + return { + id: gen?.id, - // 模板静态图片 - coverUrl: coverUrl, + // 模板静态图片 + coverUrl: coverUrl, - imageUrl: imageUrl, - url: imageUrl, + imageUrl: imageUrl, + url: imageUrl, - webpPreviewUrl: gen.webpPreviewUrl, - webpHighPreviewUrl: gen.webpHighPreviewUrl, + webpPreviewUrl: gen.webpPreviewUrl, + webpHighPreviewUrl: gen.webpHighPreviewUrl, - originalUrl: gen?.originalUrl, - templateId: gen?.templateId, - type: gen?.type, - status: gen?.status, - createdAt: gen?.createdAt, - price: gen?.template?.price || -1, - title: `生成-${gen?.id.slice(0, 6)}`, - rank: 'S', - author: user?.name || 'User', - avatarUrl: - user?.image || - 'https://image.pollinations.ai/prompt/cool%20anime%20boy%20avatar%20hoodie?seed=123&nologo=true', - } - }) - }, [generationsData, user]) + originalUrl: gen?.originalUrl, + templateId: gen?.templateId, + type: gen?.type, + status: gen?.status, + createdAt: gen?.createdAt, + price: gen?.template?.price || -1, + title: `生成-${gen?.id.slice(0, 6)}`, + rank: 'S', + author: user?.name || 'User', + avatarUrl: + user?.image || + 'https://image.pollinations.ai/prompt/cool%20anime%20boy%20avatar%20hoodie?seed=123&nologo=true', + } + }) + }, [generationsData]) useEffect(() => { if (!selectedItem?.id && posts.length > 0) { @@ -425,9 +423,9 @@ const Sync = observer(() => { } keyExtractor={(item: any) => item?.id} ListFooterComponent={ListFooter} @@ -439,7 +437,7 @@ const Sync = observer(() => { } onEndReached={onLoadMore} - onEndReachedThreshold={0.1} + onEndReachedThreshold={0.3} /> diff --git a/hooks/data/use-template-generations.ts b/hooks/data/use-template-generations.ts index 06ac2c2..0ae8add 100644 --- a/hooks/data/use-template-generations.ts +++ b/hooks/data/use-template-generations.ts @@ -1,36 +1,32 @@ import { root } from '@repo/core' -import { - type ListTemplateGenerationsInput, - type ListTemplateGenerationsResult, - TemplateGenerationController, -} from '@repo/sdk' +import { type ListTemplateGenerationsInput, type TemplateGeneration, TemplateGenerationController } from '@repo/sdk' import { useCallback, useRef, useState } from 'react' import { type ApiError } from '@/lib/types' import { handleError } from './use-error' +const pageSize = 12 + export const useTemplateGenerations = () => { - const [loading, setLoading] = useState(false) + const [loading, setLoading] = useState(true) const [loadingMore, setLoadingMore] = useState(false) const [error, setError] = useState(null) - const [data, setData] = useState() + const [data, setData] = useState([]) const currentPageRef = useRef(1) const hasMoreRef = useRef(true) - const pageSize = 12 - const load = useCallback(async (params?: ListTemplateGenerationsInput) => { setLoading(true) setError(null) - currentPageRef.current = params?.page || 1 + currentPageRef.current = 1 const templateGeneration = root.get(TemplateGenerationController) const { data, error } = await handleError( async () => await templateGeneration.list({ - page: params?.page || 1, + page: currentPageRef.current, limit: params?.limit || pageSize, ...params, }), @@ -39,24 +35,23 @@ export const useTemplateGenerations = () => { if (error) { setError(error) setLoading(false) - return { data: undefined, error } + return } const items = data?.data || [] + hasMoreRef.current = items.length >= (params?.limit || pageSize) - // console.log(' hasMoreRef.current----------------', hasMoreRef.current) - setData(data) + const filterData = items?.filter((item) => !!item.id) + + setData(filterData) setLoading(false) return { data, error: null } }, []) const loadMore = useCallback( async (params?: Omit) => { - const hasMore = loadingMore || loading || hasMoreRef.current - - // console.log('loadmOre-----------', hasMore) - + const hasMore = hasMoreRef.current if (!hasMore) return setLoadingMore(true) @@ -82,10 +77,8 @@ export const useTemplateGenerations = () => { hasMoreRef.current = newItems.length >= (params?.limit || pageSize) currentPageRef.current = nextPage - setData((prev) => ({ - ...newData, - data: [...prev?.data, ...newItems], - })) + const filterData = newItems?.filter((item) => !!item.id) + setData((prev) => [...prev, ...filterData]) setLoadingMore(false) return { data: newData, error: null } },