import React, { useEffect, useMemo, useState } from "react" import { useAppState } from "./001_provider/001_AppStateProvider"; import { AnimationTypes, HeaderButton, HeaderButtonProps } from "./components/101_HeaderButton"; export const useSpeakerSetting = () => { const appState = useAppState() const [editSpeakerTargetId, setEditSpeakerTargetId] = useState(0) const [editSpeakerTargetName, setEditSpeakerTargetName] = useState("") const accodionButton = useMemo(() => { const accodionButtonProps: HeaderButtonProps = { stateControlCheckbox: appState.frontendManagerState.stateControls.openSpeakerSettingCheckbox, tooltip: "Open/Close", onIcon: ["fas", "caret-up"], offIcon: ["fas", "caret-up"], animation: AnimationTypes.spinner, tooltipClass: "tooltip-right", }; return ; }, []); // const calcDefaultF0Factor = (srcId: number, dstId: number) => { // const src = appState.clientSetting.clientSetting.correspondences?.find(x => { // return x.sid == srcId // }) // const dst = appState.clientSetting.clientSetting.correspondences?.find(x => { // return x.sid == dstId // }) // const recommendedF0Factor = dst && src ? dst.correspondence / src.correspondence : 0 // return recommendedF0Factor // } // useEffect(() => { // const recF0 = calcDefaultF0Factor(appState.serverSetting.serverSetting.srcId, appState.serverSetting.serverSetting.dstId) // appState.serverSetting.updateServerSettings({ ...appState.serverSetting.serverSetting, f0Factor: recF0 }) // }, [appState.clientSetting.clientSetting.correspondences]) const srcIdRow = useMemo(() => { return (
Source Speaker Id
) }, [appState.serverSetting.serverSetting.srcId, appState.serverSetting.serverSetting.dstId, appState.clientSetting.clientSetting.speakers, appState.serverSetting.updateServerSettings]) const dstIdRow = useMemo(() => { return (
Destination Speaker Id
) }, [appState.serverSetting.serverSetting.srcId, appState.serverSetting.serverSetting.dstId, appState.clientSetting.clientSetting.speakers, appState.serverSetting.updateServerSettings]) const editSpeakerIdMappingRow = useMemo(() => { const onSetSpeakerMappingClicked = async () => { const targetId = editSpeakerTargetId const targetName = editSpeakerTargetName const targetSpeaker = appState.clientSetting.clientSetting.speakers.find(x => { return x.id == targetId }) if (targetSpeaker) { if (targetName.length == 0) { // Delete const newSpeakers = appState.clientSetting.clientSetting.speakers.filter(x => { return x.id != targetId }) appState.clientSetting.updateClientSetting({ ...appState.clientSetting.clientSetting, speakers: newSpeakers }) } else { // Update targetSpeaker.name = targetName appState.clientSetting.updateClientSetting({ ...appState.clientSetting.clientSetting, speakers: [...appState.clientSetting.clientSetting.speakers] }) } } else { if (targetName.length == 0) { // Noop } else {// add appState.clientSetting.clientSetting.speakers.push({ id: targetId, name: targetName }) appState.clientSetting.updateClientSetting({ ...appState.clientSetting.clientSetting, speakers: [...appState.clientSetting.clientSetting.speakers] }) } } } return (
Edit Speaker Mapping
{ const id = Number(e.target.value) setEditSpeakerTargetId(id) setEditSpeakerTargetName(appState.clientSetting.clientSetting.speakers.find(x => { return x.id == id })?.name || "") }} />
{ setEditSpeakerTargetName(e.target.value) }} />
set
) }, [appState.clientSetting.clientSetting.speakers, editSpeakerTargetId, editSpeakerTargetName]) const speakerSetting = useMemo(() => { return ( <> {appState.frontendManagerState.stateControls.openSpeakerSettingCheckbox.trigger}
{accodionButton} { appState.frontendManagerState.stateControls.openSpeakerSettingCheckbox.updateState(!appState.frontendManagerState.stateControls.openSpeakerSettingCheckbox.checked()) }}> Speaker Setting
{srcIdRow} {dstIdRow} {editSpeakerIdMappingRow}
) }, [srcIdRow, dstIdRow, editSpeakerIdMappingRow]) return { speakerSetting, } }