This commit is contained in:
imeepos 2025-12-25 18:32:56 +08:00
parent deaa68f048
commit fa8cc1705f
18 changed files with 86 additions and 23 deletions

View File

@ -354,7 +354,7 @@ export default function Index() {
}, [selectedCategoryId])
const displayTemplates = useMemo(() => {
const recommended = recommendedTemplates.data?.recommendedTemplates || []
const recommended = recommendedTemplates.data?.templates || []
const regular = templates.data?.templates || []
const all = selectedCategoryId

View File

@ -15,6 +15,7 @@ import { useUserBalance } from '@/hooks/core/use-user-balance'
import { useTemplates } from '@/hooks/data/use-templates'
import { usePublicTemplates } from '@/hooks/data/use-public-templates'
import { useFavoriteTemplates } from '@/hooks/data/use-favorite-templates'
import type { GetUserFavoritesResponse } from '@repo/sdk'
import { useAigcTask } from '@/hooks/actions/use-aigc-task'
import { useTemplateInteraction } from '@/hooks/actions/use-template-interaction'
@ -369,7 +370,7 @@ export default function Sync() {
setHasMore(false)
return
}
newItems = data.favorites.filter((fav) => fav.template && !fav.template.isDeleted).map((fav) => transformTemplateToMediaItem(fav.template!))
newItems = data.favorites.filter((fav: GetUserFavoritesResponse['favorites'][number]) => fav.template && !fav.template.isDeleted).map((fav: GetUserFavoritesResponse['favorites'][number]) => transformTemplateToMediaItem(fav.template!))
} else if (activeTab === 'new') {
if (isAuthenticated) {
const { data, error } = await loadTemplates({ limit, page: 1, sortBy: 'createdAt', sortOrder: 'desc' })
@ -450,7 +451,7 @@ export default function Sync() {
setHasMore(false)
return
}
newItems = data.favorites.filter((fav) => fav.template && !fav.template.isDeleted).map((fav) => transformTemplateToMediaItem(fav.template!))
newItems = data.favorites.filter((fav: GetUserFavoritesResponse['favorites'][number]) => fav.template && !fav.template.isDeleted).map((fav: GetUserFavoritesResponse['favorites'][number]) => transformTemplateToMediaItem(fav.template!))
} else if (activeTab === 'new') {
if (!isAuthenticated) {
setHasMore(false)

View File

@ -19,7 +19,7 @@ export default function MessageScreen() {
const { load, loading, error, data } = useActivities()
useEffect(() => {
load({ isActive: true })
load({ page: 1, limit: 20, orderBy: 'createdAt', order: 'desc' })
}, [])
const activities = data?.activities || []

View File

@ -147,7 +147,7 @@ export default function GenerateVideoScreen() {
const { generation, error: createError } = await createGeneration({
templateId: String(templateData.id),
type: 'video',
type: 'VIDEO',
resultUrl: videoUrls,
originalUrl: uploadedImageUrl,
status: 'completed',

View File

@ -98,7 +98,7 @@ export default function GenerationRecordScreen() {
const { generation: newGeneration, error: createError } = await createGeneration({
templateId: generation.templateId,
type: 'video',
type: 'VIDEO',
resultUrl: videoUrls,
originalUrl: generation.originalUrl || '',
status: 'completed',

View File

@ -44,7 +44,7 @@ export const useTemplateInteraction = () => {
const checkLiked = useCallback(async (templateId: string) => {
const templateSocial = root.get(TemplateSocialController)
const { data, error } = await useError(async () => await templateSocial.checkLiked({ query: { templateId } }))
const { data, error } = await useError(async () => await templateSocial.checkLiked({ templateId }))
if (error) {
return { liked: false, error }
@ -89,7 +89,7 @@ export const useTemplateInteraction = () => {
const checkFavorited = useCallback(async (templateId: string) => {
const templateSocial = root.get(TemplateSocialController)
const { data, error } = await useError(async () => await templateSocial.checkFavorited({ query: { templateId } }))
const { data, error } = await useError(async () => await templateSocial.checkFavorited({ templateId }))
if (error) {
return { favorited: false, error }

View File

@ -22,7 +22,14 @@ export const useCategories = () => {
try {
setLoading(true)
const category = root.get(CategoryController)
const { data, error } = await useError(async () => await category.list({ ...params, ownerId: OWNER_ID }))
const { data, error } = await useError(async () => await category.list({
page: params?.page || 1,
limit: params?.limit || 20,
orderBy: 'createdAt',
order: 'desc',
...params,
ownerId: OWNER_ID
}))
if (error) {
setError(error)

View File

@ -19,11 +19,9 @@ export const useFavoriteTemplates = () => {
setError(null)
const templateSocial = root.get(TemplateSocialController)
const { data, error } = await useError(async () => await templateSocial.favorites({
query: {
page: params?.page?.toString() || '1',
limit: params?.limit?.toString() || '20'
}
const { data, error } = await useError(async () => await templateSocial.getUserFavorites({
page: params?.page || 1,
limit: params?.limit || 20
}))
if (error) {

View File

@ -1,9 +1,12 @@
import { ApiError } from "@/lib/types"
import { useState, useCallback } from "react"
import { root } from '@repo/core'
import { RecommendedTemplateController, ListPublicRecommendedTemplatesResult } from "@repo/sdk"
import { RecommendedTemplateController } from "@repo/sdk"
import { useError } from "./use-error"
type ApiListResult = Awaited<ReturnType<RecommendedTemplateController['listPublic']>>
type ListPublicRecommendedTemplatesResult = NonNullable<ApiListResult>
interface UsePublicTemplatesParams {
limit?: number
sortBy?: 'sortOrder' | 'likeCount' | 'viewCount' | 'createdAt' | 'updatedAt'
@ -21,7 +24,9 @@ export const usePublicTemplates = () => {
const recommendedTemplate = root.get(RecommendedTemplateController)
const { data, error } = await useError(async () => await recommendedTemplate.listPublic({
limit: params?.limit || 20
limit: params?.limit || 20,
sortBy: params?.sortBy || 'sortOrder',
sortOrder: params?.sortOrder || 'desc'
}))
if (error) {

View File

@ -25,7 +25,9 @@ export const useRecommendedTemplates = () => {
const recommendedTemplate = root.get(RecommendedTemplateController)
const { data, error } = await useError(async () => await recommendedTemplate.listPublic({
limit: params?.limit || 20
limit: params?.limit || 20,
sortBy: 'sortOrder',
sortOrder: 'desc'
}))
if (error) {

View File

@ -19,7 +19,14 @@ export const useTags = () => {
try {
setLoading(true)
const tag = root.get(TagController)
const { data, error } = await useError(async () => await tag.list({ ...params, ownerId: OWNER_ID }))
const { data, error } = await useError(async () => await tag.list({
page: params?.page || 1,
limit: params?.limit || 20,
orderBy: 'createdAt',
order: 'desc',
...params,
ownerId: OWNER_ID
}))
if (error) {
setError(error)

View File

@ -18,7 +18,7 @@ export const useTemplateDetail = () => {
setError(null)
const template = root.get(TemplateController)
const { data, error } = await useError(async () => await template.get({ query: params }))
const { data, error } = await useError(async () => await template.get(params.id))
if (error) {
setError(error)

View File

@ -19,7 +19,7 @@ export const useTemplateGenerationDetail = () => {
setError(null)
const templateGeneration = root.get(TemplateGenerationController)
const { data, error } = await useError(async () => await templateGeneration.get({ query: params }))
const { data, error } = await useError(async () => await templateGeneration.get(params.id))
if (error) {
setError(error)

View File

@ -27,7 +27,11 @@ export const useTemplateGenerations = () => {
setError(null)
const templateGeneration = root.get(TemplateGenerationController)
const { data, error } = await useError(async () => await templateGeneration.list(params || {}))
const { data, error } = await useError(async () => await templateGeneration.list({
page: params?.page || 1,
limit: params?.limit || 20,
...params
}))
if (error) {
setError(error)

View File

@ -25,7 +25,14 @@ export const useTemplates = () => {
setError(null)
const template = root.get(TemplateController)
const { data, error } = await useError(async () => await template.list({ ...params, ownerId: OWNER_ID }))
const { data, error } = await useError(async () => await template.list({
page: params?.page || 1,
limit: params?.limit || 20,
sortBy: params?.sortBy || 'createdAt',
sortOrder: params?.sortOrder || 'desc',
...params,
ownerId: OWNER_ID
}))
if (error) {
setError(error)
setLoading(false)

15
storage.native.ts Normal file
View File

@ -0,0 +1,15 @@
import * as SecureStore from "expo-secure-store";
export const storage = {
async getItem(key: string): Promise<string | null> {
return await SecureStore.getItemAsync(key);
},
async setItem(key: string, value: string): Promise<void> {
await SecureStore.setItemAsync(key, value);
},
async removeItem(key: string): Promise<void> {
await SecureStore.deleteItemAsync(key);
},
};

16
storage.ts Normal file
View File

@ -0,0 +1,16 @@
export const storage = {
async getItem(key: string): Promise<string | null> {
if (typeof window === "undefined") return null;
return window.localStorage.getItem(key);
},
async setItem(key: string, value: string): Promise<void> {
if (typeof window === "undefined") return;
window.localStorage.setItem(key, value);
},
async removeItem(key: string): Promise<void> {
if (typeof window === "undefined") return;
window.localStorage.removeItem(key);
},
};

View File

@ -4,10 +4,11 @@
"strict": true,
"jsx": "react-native",
"baseUrl": ".",
"lib": ["ES2020", "DOM"],
"paths": {
"@/*": ["./*"]
}
},
"include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts", "nativewind-env.d.ts"],
"exclude": ["scripts/**/*"]
"exclude": ["scripts/**/*", "storage.ts"]
}