22301014 | 4ce0587 | 2025-06-08 22:33:28 +0800 | [diff] [blame^] | 1 | import { useCallback, useState } from "react"; |
| 2 | import { useNavigate } from "react-router"; |
| 3 | import type { |
| 4 | WorkFormData, |
| 5 | BasicInfo, |
| 6 | CoverInfo, |
| 7 | VersionFormData, |
| 8 | ArtworkCategory |
| 9 | } from './types'; |
| 10 | |
| 11 | // ==================== Hook ==================== |
| 12 | export const useCreateWorkForm = () => { |
| 13 | const navigate = useNavigate(); |
| 14 | const [currentStep, setCurrentStep] = useState<number>(0); |
| 15 | const [formData, setFormData] = useState<WorkFormData>({ |
| 16 | basicInfo: { |
| 17 | artworkName: '', |
| 18 | artworkCategory: '概念设计' as ArtworkCategory, |
| 19 | artworkDescription: '' |
| 20 | }, |
| 21 | coverInfo: {}, |
| 22 | versions: [], |
| 23 | }); |
| 24 | |
| 25 | const handleUpdateFormData = useCallback((field: keyof WorkFormData, value: BasicInfo | CoverInfo | VersionFormData[]) => { |
| 26 | setFormData(prev => ({ ...prev, [field]: value })); |
| 27 | }, []); |
| 28 | |
| 29 | const handleNext = useCallback(() => setCurrentStep(prev => Math.min(prev + 1, 3)), []); |
| 30 | const handlePrev = useCallback(() => setCurrentStep(prev => Math.max(prev - 1, 0)), []); |
| 31 | const handlePublish = useCallback(() => navigate('/work/new-work-id'), [navigate]); |
| 32 | |
| 33 | return { currentStep, formData, handleUpdateFormData, handleNext, handlePrev, handlePublish }; |
| 34 | }; |