voice-changer/client/demo/src/000_index.tsx

101 lines
3.1 KiB
TypeScript
Raw Normal View History

2023-01-07 14:07:39 +03:00
import * as React from "react";
import { createRoot } from "react-dom/client";
import "./css/App.css"
2023-01-08 10:18:20 +03:00
import { useMemo, } from "react";
2023-01-07 14:07:39 +03:00
import { useMicrophoneOptions } from "./100_options_microphone";
2023-02-16 18:09:56 +03:00
import { AppStateProvider, useAppState } from "./001_provider/001_AppStateProvider";
import { library } from "@fortawesome/fontawesome-svg-core";
import { fas } from "@fortawesome/free-solid-svg-icons";
import { far } from "@fortawesome/free-regular-svg-icons";
import { fab } from "@fortawesome/free-brands-svg-icons";
2023-02-16 20:11:03 +03:00
import { AppRootProvider } from "./001_provider/001_AppRootProvider";
2023-02-16 18:09:56 +03:00
library.add(fas, far, fab);
2023-01-07 14:07:39 +03:00
const container = document.getElementById("app")!;
const root = createRoot(container);
const App = () => {
2023-02-16 18:09:56 +03:00
const appState = useAppState()
const { voiceChangerSetting } = useMicrophoneOptions()
2023-01-07 14:07:39 +03:00
2023-02-16 18:09:56 +03:00
const titleRow = useMemo(() => {
return (
<div className="top-title">
<span className="title">Voice Changer Setting</span>
<span className="top-title-version">for v.1.5.x</span>
<span className="belongings">
<a className="link" href="https://github.com/w-okada/voice-changer" target="_blank" rel="noopener noreferrer">
<img src="./assets/icons/github.svg" />
<span>github</span>
</a>
<a className="link" href="https://zenn.dev/wok/books/0003_vc-helper-v_1_5" target="_blank" rel="noopener noreferrer">
<img src="./assets/icons/help-circle.svg" />
<span>manual</span>
</a>
</span>
<span className="belongings">
2023-01-07 14:07:39 +03:00
2023-02-16 18:09:56 +03:00
</span>
</div>
)
}, [])
2023-01-07 14:07:39 +03:00
const clearRow = useMemo(() => {
2023-02-16 18:09:56 +03:00
const onClearSettingClicked = async () => {
await appState.clearSetting()
location.reload()
}
2023-01-07 14:07:39 +03:00
return (
<>
<div className="body-row split-3-3-4 left-padding-1">
<div className="body-button-container">
<div className="body-button" onClick={onClearSettingClicked}>clear setting</div>
</div>
<div className="body-item-text"></div>
<div className="body-item-text"></div>
</div>
</>
)
}, [])
2023-02-16 18:09:56 +03:00
const mainSetting = useMemo(() => {
return (
<>
<div className="main-body">
{titleRow}
{clearRow}
{voiceChangerSetting}
</div>
</>
2023-01-07 14:07:39 +03:00
2023-02-16 18:09:56 +03:00
)
}, [voiceChangerSetting])
2023-01-07 14:07:39 +03:00
return (
2023-02-16 18:09:56 +03:00
<>
{mainSetting}
</>
)
}
const AppStateWrapper = () => {
2023-02-16 20:11:03 +03:00
// const appRoot = useAppRoot()
// if (!appRoot.audioContextState.audioContext) {
// return <>please click window</>
// }
2023-02-16 18:09:56 +03:00
return (
<AppStateProvider>
<App></App>
</AppStateProvider>
2023-01-07 14:07:39 +03:00
)
}
root.render(
2023-02-16 18:09:56 +03:00
<AppRootProvider>
<AppStateWrapper></AppStateWrapper>
</AppRootProvider>
2023-01-07 14:07:39 +03:00
);