Spaces:
Configuration error
Configuration error
import { useCallback, useEffect, useState } from "react"; | |
import Select from "react-select"; | |
import { useLiveAPIContext } from "../../contexts/LiveAPIContext"; | |
const voiceOptions = [ | |
{ value: "Puck", label: "Puck" }, | |
{ value: "Charon", label: "Charon" }, | |
{ value: "Kore", label: "Kore" }, | |
{ value: "Fenrir", label: "Fenrir" }, | |
{ value: "Aoede", label: "Aoede" }, | |
]; | |
export default function VoiceSelector() { | |
const { config, setConfig } = useLiveAPIContext(); | |
useEffect(() => { | |
const voiceName = | |
config.generationConfig?.speechConfig?.voiceConfig?.prebuiltVoiceConfig | |
?.voiceName || "Atari02"; | |
const voiceOption = { value: voiceName, label: voiceName }; | |
setSelectedOption(voiceOption); | |
}, [config]); | |
const [selectedOption, setSelectedOption] = useState<{ | |
value: string; | |
label: string; | |
} | null>(voiceOptions[5]); | |
const updateConfig = useCallback( | |
(voiceName: string) => { | |
setConfig({ | |
...config, | |
generationConfig: { | |
...config.generationConfig, | |
speechConfig: { | |
voiceConfig: { | |
prebuiltVoiceConfig: { | |
voiceName: voiceName, | |
}, | |
}, | |
}, | |
}, | |
}); | |
}, | |
[config, setConfig] | |
); | |
return ( | |
<div className="select-group"> | |
<label htmlFor="voice-selector">Voice</label> | |
<Select | |
id="voice-selector" | |
className="react-select" | |
classNamePrefix="react-select" | |
styles={{ | |
control: (baseStyles) => ({ | |
...baseStyles, | |
background: "var(--Neutral-15)", | |
color: "var(--Neutral-90)", | |
minHeight: "33px", | |
maxHeight: "33px", | |
border: 0, | |
}), | |
option: (styles, { isFocused, isSelected }) => ({ | |
...styles, | |
backgroundColor: isFocused | |
? "var(--Neutral-30)" | |
: isSelected | |
? "var(--Neutral-20)" | |
: undefined, | |
}), | |
}} | |
value={selectedOption} | |
defaultValue={selectedOption} | |
options={voiceOptions} | |
onChange={(e) => { | |
setSelectedOption(e); | |
if (e) { | |
updateConfig(e.value); | |
} | |
}} | |
/> | |
</div> | |
); | |
} | |