bw-mini-app/src/pages/index/index.tsx

95 lines
2.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { View } from '@tarojs/components'
import { useState } from 'react'
import { navigateTo } from '@tarojs/taro'
import './index.css'
import { useSdk, useUploadVideo } from '../../hooks/index'
import UploadButton from '../../components/UploadButton'
import LoadingOverlay from '../../components/LoadingOverlay'
import ErrorOverlay from '../../components/ErrorOverlay'
import { createPlatformFactory } from '../../platforms'
type PageStep = 'upload' | 'loading' | 'error'
interface AppState {
step: PageStep;
error: string | null;
}
export default function Index() {
const sdk = useSdk()
const [state, setState] = useState<AppState>({
step: 'upload',
error: null
})
const [videoPath, setVidePath] = useState<string>()
useUploadVideo((res) => {
console.log(res)
return {
videoPath: videoPath,
titleConfig: {
title: `视频发布`
},
success() {
console.log("视频发布/挂载成功");
},
fail() {
console.log("视频发布/挂载失败");
},
}
})
const chooseAndGenerateImage = async () => {
try {
// 选择图片选择完成后会自动触发loading状态
const task_id = await sdk.chooseAndGenerateImage({
onImageSelected: () => {
// 选择图片完成后立即显示loading
setState({ step: 'loading', error: null })
}
})
// 等待生成完成
await new Promise((resolve) => setTimeout(resolve, 5000))
const urls = await sdk.getTaskStatus(task_id)
// 跳转到结果页面
navigateTo({
url: `/pages/result/index?images=${encodeURIComponent(JSON.stringify(urls))}`
})
// 重置状态
setState({ step: 'upload', error: null })
} catch (error) {
const errorMsg = error instanceof Error ? error.message : '生成失败'
setState({ step: 'error', error: errorMsg })
}
}
const resetToUpload = () => {
setState({ step: 'upload', error: null })
}
const renderCurrentStep = () => {
switch (state.step) {
case 'upload':
return <UploadButton onUpload={chooseAndGenerateImage} />
case 'loading':
return <LoadingOverlay />
case 'error':
return <ErrorOverlay onRetry={resetToUpload} />
default:
return <UploadButton onUpload={chooseAndGenerateImage} />
}
}
return (
<View className='index'>
{renderCurrentStep()}
</View>
)
}