47 lines
1.5 KiB
TypeScript
Executable File
47 lines
1.5 KiB
TypeScript
Executable File
import type { CloneModalProps } from "../types/cloneModal"
|
|
import { useCloneFormState } from "./useCloneFormState"
|
|
import { useCloneSubmit } from "./useCloneSubmit"
|
|
|
|
/**
|
|
* 音色克隆弹窗主业务 Hook
|
|
* 组合表单状态 + 提交流程两个子 Hook
|
|
*/
|
|
const useCloneModal = ({ open, onClose, onSuccess }: CloneModalProps) => {
|
|
const formState = useCloneFormState({ open, onClose })
|
|
|
|
const { handleSubmit } = useCloneSubmit({
|
|
voiceName: formState.voiceName,
|
|
voiceDescription: formState.voiceDescription,
|
|
selectedFile: formState.selectedFile,
|
|
recordedBlob: formState.recordedBlob,
|
|
setPhase: formState.setPhase,
|
|
setErrorMessage: formState.setErrorMessage,
|
|
validateForm: formState.validateForm,
|
|
onSuccess,
|
|
onClose: formState.handleClose,
|
|
})
|
|
|
|
return {
|
|
phase: formState.phase,
|
|
voiceName: formState.voiceName,
|
|
voiceDescription: formState.voiceDescription,
|
|
selectedFile: formState.selectedFile,
|
|
dragActive: formState.dragActive,
|
|
errorMessage: formState.errorMessage,
|
|
isRecording: formState.isRecording,
|
|
recordTime: formState.recordTime,
|
|
recordedBlob: formState.recordedBlob,
|
|
canSubmit: formState.canSubmit,
|
|
isProcessing: formState.isProcessing,
|
|
setVoiceName: formState.setVoiceName,
|
|
setVoiceDescription: formState.setVoiceDescription,
|
|
setDragActive: formState.setDragActive,
|
|
handleFileSelect: formState.handleFileSelect,
|
|
handleRecordToggle: formState.handleRecordToggle,
|
|
handleClose: formState.handleClose,
|
|
handleSubmit,
|
|
}
|
|
}
|
|
|
|
export default useCloneModal
|