diff --git a/packages/fakeyou.com/src/hooks/useVoiceDetailsStore.ts b/packages/fakeyou.com/src/hooks/useVoiceDetailsStore.ts new file mode 100644 index 0000000000..003385a5de --- /dev/null +++ b/packages/fakeyou.com/src/hooks/useVoiceDetailsStore.ts @@ -0,0 +1,27 @@ +import { create } from "zustand"; + +interface VoiceDetailsState { + name: string; + vocalType: any; + tags: any; + description: string; + visibility: any; + setName: (name: string) => void; + setVocalType: (vocalType: any) => void; + setTags: (tags: any) => void; + setDescription: (description: string) => void; + setVisibility: (visibility: any) => void; +} + +export const useVoiceDetailsStore = create((set) => ({ + name: "", + vocalType: null, + tags: null, + description: "", + visibility: null, + setName: (name) => set({ name }), + setVocalType: (vocalType) => set({ vocalType }), + setTags: (tags) => set({ tags }), + setDescription: (description) => set({ description }), + setVisibility: (visibility) => set({ visibility }), +})); diff --git a/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerPage.tsx b/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerPage.tsx index 3eb20324fb..237afa5175 100644 --- a/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerPage.tsx @@ -11,12 +11,18 @@ import { container } from "data/animation"; import { UploadSamples } from "./components/steps/UploadSamples"; import { VoiceDetails } from "./components/steps/VoiceDetails"; import { Complete } from "./components/steps/Complete"; +import { Processing } from "./components/steps/Processing"; function VoiceDesignerPage() { usePrefixedDocumentTitle("Voice Designer"); const [currentStep, setCurrentStep] = useState(0); - const steps = ["Upload Samples", "Voice Details", "Complete"]; + const steps = [ + "Upload Samples", + "Voice Details", + "Process Voice", + "Complete", + ]; const displayStep = (step: any) => { switch (step) { @@ -25,6 +31,8 @@ function VoiceDesignerPage() { case 1: return ; case 2: + return ; + case 3: return ; default: } @@ -36,8 +44,16 @@ function VoiceDesignerPage() { } }; - const handleNext = () => { - if (currentStep < steps.length - 1) { + const handleNext = async () => { + if (currentStep === 1) { + // When moving from Voice Details to Processing + setCurrentStep(2); // Move to processing step immediately + + // Simulating a 3-second delay to mimic API call + setTimeout(() => { + setCurrentStep(3); + }, 3000); + } else if (currentStep < steps.length - 1) { setCurrentStep(currentStep + 1); } }; diff --git a/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/StepperControls.tsx b/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/StepperControls.tsx index f17fcd5180..6ea05b5f6f 100644 --- a/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/StepperControls.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/StepperControls.tsx @@ -15,17 +15,17 @@ const StepperControls: React.FC = ({ }) => { return ( <> - {currentStep !== steps.length - 1 && ( + {currentStep !== 3 && (
- {currentStep !== 0 && ( + {currentStep !== 0 && currentStep !== 2 && ( )} - {currentStep !== steps.length - 1 && ( + {currentStep < steps.length - 2 && ( )}
diff --git a/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/Processing.tsx b/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/Processing.tsx new file mode 100644 index 0000000000..e8152b4968 --- /dev/null +++ b/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/Processing.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faSpinner } from "@fortawesome/free-solid-svg-icons"; + +function Processing() { + return ( +
+ +

Processing your voice data...

+
+ ); +} + +export { Processing }; diff --git a/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/VoiceDetails.tsx b/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/VoiceDetails.tsx index cd941e5569..4df21c9e84 100644 --- a/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/VoiceDetails.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/voice_designer/components/steps/VoiceDetails.tsx @@ -4,6 +4,7 @@ import { faTags, } from "@fortawesome/pro-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useVoiceDetailsStore } from "hooks/useVoiceDetailsStore"; import React from "react"; import Select from "react-select"; @@ -23,6 +24,19 @@ export const SearchFieldClass = { }; function VoiceDetails() { + const { + name, + vocalType, + tags, + description, + visibility, + setName, + setVocalType, + setTags, + setDescription, + setVisibility, + } = useVoiceDetailsStore(); + return (
@@ -32,6 +46,8 @@ function VoiceDetails() { className="form-control" type="text" placeholder="Voice name" + value={name} + onChange={(e) => setName(e.target.value)} />
@@ -40,7 +56,11 @@ function VoiceDetails() { - setVocalType(e.target.value)} + />
@@ -51,7 +71,11 @@ function VoiceDetails() { - setTags(e.target.value)} + /> @@ -60,6 +84,8 @@ function VoiceDetails() {