state.deleteEverything);
const audioProps = useFile({}); // contains upload inout state and controls, see docs
const datasetInputs = [
@@ -72,6 +73,7 @@ function VoiceDesignerFormPage({ enqueueInferenceJob }: { enqueueInferenceJob: a
const initialStep = history.location.pathname.includes("/upload") ? 1 : 0;
const [currentStep, setCurrentStep] = useState(initialStep);
+ const [audioSamplesReady, setAudioSamplesReady] = useState(false);
const steps = isEditMode
? ["Edit Details", "Edit Samples"]
@@ -83,7 +85,7 @@ function VoiceDesignerFormPage({ enqueueInferenceJob }: { enqueueInferenceJob: a
return
;
case 1:
return (
-
+
);
default:
return null;
@@ -111,6 +113,7 @@ function VoiceDesignerFormPage({ enqueueInferenceJob }: { enqueueInferenceJob: a
idempotency_token: uuidv4(),
}).then((res: any) => {
if (res && res.success && res.token) {
+ deleteEverything();
history.push(`/voice-designer/dataset/${ res.token }/upload`);
}
});
@@ -140,6 +143,7 @@ function VoiceDesignerFormPage({ enqueueInferenceJob }: { enqueueInferenceJob: a
voice_dataset_token: dataset_token || "",
})
.then((res: any) => {
+ deleteEverything();
if (res && res.success) {
enqueueInferenceJob(
res.inference_job_token,
@@ -194,6 +198,7 @@ function VoiceDesignerFormPage({ enqueueInferenceJob }: { enqueueInferenceJob: a
onBack={handleBack}
onNext={handleNext}
onCreate={handleCreateVoice}
+ createDisabled={!audioSamplesReady}
/>
diff --git a/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerMainPage.tsx b/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerMainPage.tsx
index 395fda1c90..007662764d 100644
--- a/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerMainPage.tsx
+++ b/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerMainPage.tsx
@@ -20,28 +20,43 @@ import {
function VoiceDesignerMainPage({ inferenceJobsByCategory }: { inferenceJobsByCategory: any }) {
const { pathname } = useLocation();
const { t } = useLocalize("FaceAnimator");
- const { datasets, voices } = useVoiceRequests({ requestDatasets: true, requestVoices: true });
- const [isDeleteVoiceModalOpen, setIsDeleteVoiceModalOpen] = useState(false);
- const [isDeleteDatasetModalOpen, setIsDeleteDatasetModalOpen] =
- useState(false);
+ const { datasets, voices } = useVoiceRequests({
+ requestDatasets: true,
+ requestVoices: true,
+ });
+ const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
const view = ["/voice-designer/datasets", "/voice-designer/voices"].indexOf(
pathname
);
+ const [deleteItem, setDeleteItem] = useState("");
+ const [deleteType, setDeleteType] = useState("");
+ const [deleteText, setDeleteText] = useState({
+ title: "",
+ text: "",
+ });
- // const openDeleteVoiceModal = () => {
- // setIsDeleteVoiceModalOpen(true);
- // };
-
- const closeDeleteVoiceModal = () => {
- setIsDeleteVoiceModalOpen(false);
+ const openDeleteModal = (token: string, type: string) => {
+ setDeleteItem(token);
+ setDeleteType(type);
+ setDeleteText({
+ title: `Delete ${type}`,
+ text: `Are you sure you want to delete this ${type}?`,
+ });
+ setIsDeleteModalOpen(true);
};
- // const openDeleteDatasetModal = () => {
- // setIsDeleteDatasetModalOpen(true);
- // };
+ const handleDelete = () => {
+ if (deleteType === "voice") {
+ voices.delete(deleteItem);
+ } else if (deleteType === "dataset") datasets.delete(deleteItem);
+ setDeleteItem("");
+ setDeleteType("");
+ };
- const closeDeleteDatasetModal = () => {
- setIsDeleteDatasetModalOpen(false);
+ const closeDeleteModal = () => {
+ setIsDeleteModalOpen(false);
+ setDeleteItem("");
+ setDeleteType("");
};
const history = useHistory();
@@ -57,15 +72,16 @@ function VoiceDesignerMainPage({ inferenceJobsByCategory }: { inferenceJobsByCat
const voiceClick =
(todo: any, type: string) =>
({ target }: { target: any }) => {
- let voiceToken = voices.list[target.name.split(",")[0].split(":")[1]].voice_token;
+ let voiceToken =
+ voices.list[target.name.split(",")[0].split(":")[1]].voice_token;
todo(voiceToken, type);
};
-
const datasetClick =
(todo: any, type: string) =>
({ target }: { target: any }) => {
- let datasetToken = datasets.list[target.name.split(",")[0].split(":")[1]].dataset_token;
+ let datasetToken =
+ datasets.list[target.name.split(",")[0].split(":")[1]].dataset_token;
todo(datasetToken, type);
};
@@ -84,7 +100,7 @@ function VoiceDesignerMainPage({ inferenceJobsByCategory }: { inferenceJobsByCat
label: "Delete",
small: true,
variant: "danger",
- onClick: datasetClick(datasets.delete, "dataset"),
+ onClick: datasetClick(openDeleteModal, "dataset"),
},
],
name: dataset.title,
@@ -106,7 +122,7 @@ function VoiceDesignerMainPage({ inferenceJobsByCategory }: { inferenceJobsByCat
label: "Delete",
small: true,
variant: "danger",
- onClick: voiceClick(voices.delete, "voice"),
+ onClick: voiceClick(openDeleteModal, "voice"),
},
{
label: "Use Voice",
@@ -181,31 +197,13 @@ function VoiceDesignerMainPage({ inferenceJobsByCategory }: { inferenceJobsByCat
- {/* Delete Voice Modal */}
+ {/* Delete Modal */}
- Are you sure you want to delete "[Voice Name]"?
-
- This cannot be undone.
-
- }
- />
- {/* Delete Dataset Modal */}
-
- Are you sure you want to delete "[Dataset Name]"?
-
- This cannot be undone.
-
- }
+ show={isDeleteModalOpen}
+ handleClose={closeDeleteModal}
+ title={deleteText.title}
+ content={{deleteText.text}
}
+ onConfirm={handleDelete}
/>
>
);
diff --git a/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerUseVoicePage.tsx b/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerUseVoicePage.tsx
index 9d8bec8723..f66555a637 100644
--- a/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerUseVoicePage.tsx
+++ b/packages/fakeyou.com/src/v2/view/pages/voice_designer/VoiceDesignerUseVoicePage.tsx
@@ -19,7 +19,7 @@ import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapp
import Container from "components/common/Container/Container";
import TextArea from "components/common/TextArea";
import { Button } from "components/common";
-import { SessionTtsInferenceResultList } from "v2/view/_common/SessionTtsInferenceResultsList";
+import { SessionVoiceDesignerInferenceResultsList } from "v2/view/_common/SessionVoiceDesignerInferenceResultsList";
import {
FrontendInferenceJobType,
InferenceJob,
@@ -230,7 +230,7 @@ export default function VoiceDesignerUseVoicePage(
Session TTS Results
-
void;
onNext: () => void;
onCreate: () => void;
+ createDisabled: boolean;
steps: string[];
currentStep: number;
}
@@ -14,6 +15,7 @@ const StepperControls: React.FC = ({
steps,
currentStep,
onCreate,
+ createDisabled
}) => {
return (
@@ -30,7 +32,7 @@ const StepperControls: React.FC
= ({
)}
{currentStep === 1 && (
-