[Update] Main Page: Language Settings. Translation Engines. To selectable.

This commit is contained in:
Sakamoto Shiina
2024-09-22 12:02:50 +09:00
parent 8e8eeeb239
commit 586aaf0091
7 changed files with 116 additions and 39 deletions

19
data.js
View File

@@ -1,17 +1,12 @@
export const translator_list = [ export const translator_status = [
{ translator_key: "DeepL", translator_name: "DeepL", is_available: true }, { translator_id: "DeepL", translator_name: "DeepL", is_available: true },
{ translator_key: "DeepL_API", translator_name: `DeepL\nAPI`, is_available: false }, { translator_id: "DeepL_API", translator_name: `DeepL\nAPI`, is_available: false },
{ translator_key: "Google", translator_name: "Google", is_available: true }, { translator_id: "Google", translator_name: "Google", is_available: true },
{ translator_key: "Bing", translator_name: "Bing", is_available: true }, { translator_id: "Bing", translator_name: "Bing", is_available: true },
{ translator_key: "Papago", translator_name: "Papago", is_available: true }, { translator_id: "Papago", translator_name: "Papago", is_available: true },
{ translator_key: "CTranslate2", translator_name: `Internal\n(Default)`, is_available: true }, { translator_id: "CTranslate2", translator_name: `Internal\n(Default)`, is_available: true },
]; ];
export const test_device_list = {
a: "Device A",
"device b": "Device B",
};
export const generateTestData = (num) => { export const generateTestData = (num) => {
const testDataArray = []; const testDataArray = [];

View File

@@ -51,7 +51,14 @@ const StartPythonFacadeComponent = () => {
const { getSendMessageButtonType } = useSendMessageButtonType(); const { getSendMessageButtonType } = useSendMessageButtonType();
const { getUiLanguage } = useUiLanguage(); const { getUiLanguage } = useUiLanguage();
const { getSelectedPresetTabNumber, getEnableMultiTranslation, getSelectedYourLanguages, getSelectedTargetLanguages } = useLanguageSettings(); const {
getSelectedPresetTabNumber,
getEnableMultiTranslation,
getSelectedYourLanguages,
getSelectedTargetLanguages,
getTranslationEngines,
getSelectedTranslationEngines,
} = useLanguageSettings();
const { getSelectableLanguageList } = useSelectableLanguageList(); const { getSelectableLanguageList } = useSelectableLanguageList();
@@ -68,6 +75,8 @@ const StartPythonFacadeComponent = () => {
getSelectedYourLanguages(); getSelectedYourLanguages();
getSelectedTargetLanguages(); getSelectedTargetLanguages();
getSelectableLanguageList(); getSelectableLanguageList();
getTranslationEngines();
getSelectedTranslationEngines();
getEnableAutoMicSelect(); getEnableAutoMicSelect();
getEnableAutoSpeakerSelect(); getEnableAutoSpeakerSelect();

View File

@@ -2,27 +2,45 @@ import { useTranslation } from "react-i18next";
import styles from "./TranslatorSelectorOpenButton.module.scss"; import styles from "./TranslatorSelectorOpenButton.module.scss";
import { TranslatorSelector } from "./translator_selector/TranslatorSelector"; import { TranslatorSelector } from "./translator_selector/TranslatorSelector";
import { useStore_TranslatorList, useStore_SelectedTranslatorId, useStore_IsOpenedTranslatorSelector } from "@store"; import { useStore_IsOpenedTranslatorSelector } from "@store";
import { useLanguageSettings } from "@logics_main/useLanguageSettings";
export const TranslatorSelectorOpenButton = () => { export const TranslatorSelectorOpenButton = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const { currentSelectedTranslatorId } = useStore_SelectedTranslatorId(); const {
const { currentTranslatorList } = useStore_TranslatorList(); currentSelectedPresetTabNumber,
const currentTranslator = currentTranslatorList.find( currentTranslationEngines,
translator_data => translator_data.translator_key === currentSelectedTranslatorId getTranslationEngines,
); currentSelectedTranslationEngines,
} = useLanguageSettings();
// console.log(currentTranslationEngines, currentSelectedTranslationEngines);
const selected_translator_name = (currentTranslationEngines.state === "loading")
? "Loading..."
: currentTranslationEngines.data.find(
translator_data => translator_data.translator_id === currentSelectedTranslationEngines[currentSelectedPresetTabNumber.data]
)?.translator_name;
const { currentIsOpenedTranslatorSelector, updateIsOpenedTranslatorSelector} = useStore_IsOpenedTranslatorSelector(); const { currentIsOpenedTranslatorSelector, updateIsOpenedTranslatorSelector} = useStore_IsOpenedTranslatorSelector();
const openTranslatorSelector = () => updateIsOpenedTranslatorSelector(!currentIsOpenedTranslatorSelector); const openTranslatorSelector = () => {
getTranslationEngines();
updateIsOpenedTranslatorSelector(!currentIsOpenedTranslatorSelector);
};
return ( return (
<div className={styles.container}> <div className={styles.container}>
<div className={styles.translator_selector_button} onClick={openTranslatorSelector}> <div className={styles.translator_selector_button} onClick={openTranslatorSelector}>
<p className={styles.label}>{t("main_page.translator")}</p> <p className={styles.label}>{t("main_page.translator")}: </p>
<p className={styles.label}>{currentTranslator?.translator_name}</p> <p className={styles.label}>{selected_translator_name}</p>
</div> </div>
{currentIsOpenedTranslatorSelector && <TranslatorSelector />} {currentIsOpenedTranslatorSelector &&
<TranslatorSelector
selected_translator_id={currentSelectedTranslationEngines}
translation_engines={currentTranslationEngines}
/>
}
</div> </div>
); );
}; };

View File

@@ -1,22 +1,24 @@
import styles from "./TranslatorSelector.module.scss"; import styles from "./TranslatorSelector.module.scss";
import { chunkArray } from "@utils/chunkArray"; import { chunkArray } from "@utils/chunkArray";
import { useStore_TranslatorList, useStore_SelectedTranslatorId, useStore_IsOpenedTranslatorSelector } from "@store"; import { useStore_IsOpenedTranslatorSelector } from "@store";
export const TranslatorSelector = () => { import { useLanguageSettings } from "@logics_main/useLanguageSettings";
const { currentTranslatorList } = useStore_TranslatorList();
const columns = chunkArray(currentTranslatorList, 2); export const TranslatorSelector = ({selected_translator_id, translation_engines}) => {
const columns = (translation_engines.data !== undefined) ? chunkArray(translation_engines.data, 2) : [];
return ( return (
<div className={styles.container}> <div className={styles.container}>
<div className={styles.wrapper}> <div className={styles.wrapper}>
{columns.map((column, column_index) => ( {columns.map((column, column_index) => (
<div className={styles.column_wrapper} key={`column_${column_index}`}> <div className={styles.column_wrapper} key={`column_${column_index}`}>
{column.map(({ translator_key, translator_name, is_available }) => ( {column.map(({ translator_id, translator_name, is_available }) => (
<TranslatorBox <TranslatorBox
key={translator_key} key={translator_id}
translator_id={translator_key} translator_id={translator_id}
translator_name={translator_name} translator_name={translator_name}
is_available={is_available} is_available={is_available}
is_selected={(translator_id === selected_translator_id)}
/> />
))} ))}
</div> </div>
@@ -28,17 +30,17 @@ export const TranslatorSelector = () => {
import clsx from "clsx"; import clsx from "clsx";
const TranslatorBox = (props) => { const TranslatorBox = (props) => {
const { currentSelectedTranslatorId, updateSelectedTranslatorId} = useStore_SelectedTranslatorId(); const { currentSelectedPresetTabNumber, currentSelectedTranslationEngines, setSelectedTranslationEngines} = useLanguageSettings();
const { updateIsOpenedTranslatorSelector} = useStore_IsOpenedTranslatorSelector(); const { updateIsOpenedTranslatorSelector} = useStore_IsOpenedTranslatorSelector();
const box_class_name = clsx( const box_class_name = clsx(
styles.box, styles.box,
{ [styles["is_selected"]]: (currentSelectedTranslatorId === props.translator_id) ? true : false }, { [styles["is_selected"]]: (currentSelectedTranslationEngines[currentSelectedPresetTabNumber.data] === props.translator_id) ? true : false },
{ [styles["is_available"]]: (props.is_available === true) ? true : false } { [styles["is_available"]]: (props.is_available === true) ? true : false }
); );
const selectTranslator = () => { const selectTranslator = () => {
updateSelectedTranslatorId(props.translator_id); setSelectedTranslationEngines(props.translator_id);
updateIsOpenedTranslatorSelector(false); updateIsOpenedTranslatorSelector(false);
}; };
return ( return (

View File

@@ -1,4 +1,4 @@
import { useStore_SelectedPresetTabNumber, useStore_EnableMultiTranslation, useStore_SelectedYourLanguages, useStore_SelectedTargetLanguages } from "@store"; import { useStore_SelectedPresetTabNumber, useStore_EnableMultiTranslation, useStore_SelectedYourLanguages, useStore_SelectedTargetLanguages, useStore_TranslationEngines, useStore_SelectedTranslationEngines } from "@store";
import { useStdoutToPython } from "@logics/useStdoutToPython"; import { useStdoutToPython } from "@logics/useStdoutToPython";
export const useLanguageSettings = () => { export const useLanguageSettings = () => {
@@ -7,6 +7,8 @@ export const useLanguageSettings = () => {
const { currentSelectedYourLanguages, updateSelectedYourLanguages } = useStore_SelectedYourLanguages(); const { currentSelectedYourLanguages, updateSelectedYourLanguages } = useStore_SelectedYourLanguages();
const { currentSelectedTargetLanguages, updateSelectedTargetLanguages } = useStore_SelectedTargetLanguages(); const { currentSelectedTargetLanguages, updateSelectedTargetLanguages } = useStore_SelectedTargetLanguages();
const { currentSelectedPresetTabNumber, updateSelectedPresetTabNumber } = useStore_SelectedPresetTabNumber(); const { currentSelectedPresetTabNumber, updateSelectedPresetTabNumber } = useStore_SelectedPresetTabNumber();
const { currentTranslationEngines, updateTranslationEngines } = useStore_TranslationEngines();
const { currentSelectedTranslationEngines, updateSelectedTranslationEngines } = useStore_SelectedTranslationEngines();
const getEnableMultiTranslation = () => { const getEnableMultiTranslation = () => {
updateEnableMultiTranslation(() => new Promise(() => {})); updateEnableMultiTranslation(() => new Promise(() => {}));
@@ -60,6 +62,27 @@ export const useLanguageSettings = () => {
asyncStdoutToPython("/set/selected_target_languages", send_obj); asyncStdoutToPython("/set/selected_target_languages", send_obj);
}; };
const getTranslationEngines = () => {
updateTranslationEngines(() => new Promise(() => {}));
asyncStdoutToPython("/get/list_translation_engines");
};
const getSelectedTranslationEngines = () => {
updateSelectedTranslationEngines(() => new Promise(() => {}));
asyncStdoutToPython("/get/selected_translator_engines");
};
const setSelectedTranslationEngines = (selected_translator) => {
// updateSelectedTranslationEngines(() => new Promise(() => {}));
let send_obj = currentSelectedTranslationEngines;
send_obj[currentSelectedPresetTabNumber.data] = selected_translator;
asyncStdoutToPython("/set/selected_translator_engines", send_obj);
};
return { return {
currentSelectedPresetTabNumber, currentSelectedPresetTabNumber,
getSelectedPresetTabNumber, getSelectedPresetTabNumber,
@@ -80,5 +103,14 @@ export const useLanguageSettings = () => {
getSelectedTargetLanguages, getSelectedTargetLanguages,
updateSelectedTargetLanguages, updateSelectedTargetLanguages,
setSelectedTargetLanguages, setSelectedTargetLanguages,
currentTranslationEngines,
getTranslationEngines,
updateTranslationEngines,
currentSelectedTranslationEngines,
getSelectedTranslationEngines,
updateSelectedTranslationEngines,
setSelectedTranslationEngines,
}; };
}; };

View File

@@ -1,3 +1,5 @@
import { translator_status } from "@data";
import { arrayToObject } from "@utils/arrayToObject"; import { arrayToObject } from "@utils/arrayToObject";
import { useMainFunction } from "@logics_main/useMainFunction"; import { useMainFunction } from "@logics_main/useMainFunction";
import { useMessage } from "@logics_common/useMessage"; import { useMessage } from "@logics_common/useMessage";
@@ -31,7 +33,9 @@ export const useReceiveRoutes = () => {
updateSelectedPresetTabNumber, updateSelectedPresetTabNumber,
updateEnableMultiTranslation, updateEnableMultiTranslation,
updateSelectedYourLanguages, updateSelectedYourLanguages,
updateSelectedTargetLanguages updateSelectedTargetLanguages,
updateTranslationEngines,
updateSelectedTranslationEngines,
} = useLanguageSettings(); } = useLanguageSettings();
const { updateSelectableLanguageList } = useSelectableLanguageList(); const { updateSelectableLanguageList } = useSelectableLanguageList();
const { const {
@@ -78,6 +82,21 @@ export const useReceiveRoutes = () => {
"/set/selected_your_languages": updateSelectedYourLanguages, "/set/selected_your_languages": updateSelectedYourLanguages,
"/get/selected_target_languages": updateSelectedTargetLanguages, "/get/selected_target_languages": updateSelectedTargetLanguages,
"/set/selected_target_languages": updateSelectedTargetLanguages, "/set/selected_target_languages": updateSelectedTargetLanguages,
"/get/list_translation_engines": (payload) => {
const updateTranslatorAvailability = (keys) => {
return translator_status.map(translator => ({
...translator,
is_available: keys.includes(translator.translator_id),
}));
};
const updated_list = updateTranslatorAvailability(payload);
updateTranslationEngines(updated_list);
},
"/get/selected_translator_engines": updateSelectedTranslationEngines,
"/set/selected_translator_engines": updateSelectedTranslationEngines,
// Language Selector // Language Selector
"/get/list_languages": updateSelectableLanguageList, "/get/list_languages": updateSelectableLanguageList,
@@ -155,7 +174,7 @@ export const useReceiveRoutes = () => {
break; break;
case 348: case 348:
console.log(`from backend: %c ${JSON.stringify(parsed_data)}`, style_348); // console.log(`from backend: %c ${JSON.stringify(parsed_data)}`, style_348);
break; break;
default: default:

View File

@@ -5,7 +5,7 @@ import {
} from "jotai"; } from "jotai";
import { import {
translator_list, translator_status,
generateTestData, generateTestData,
word_filter_list, word_filter_list,
} from "@data"; } from "@data";
@@ -116,6 +116,10 @@ export const { atomInstance: Atom_SelectedYourLanguages, useHook: useStore_Selec
export const { atomInstance: Atom_SelectedTargetLanguages, useHook: useStore_SelectedTargetLanguages } = createAsyncAtomWithHook({}, "SelectedTargetLanguages"); export const { atomInstance: Atom_SelectedTargetLanguages, useHook: useStore_SelectedTargetLanguages } = createAsyncAtomWithHook({}, "SelectedTargetLanguages");
export const { atomInstance: Atom_TranslationEngines, useHook: useStore_TranslationEngines } = createAsyncAtomWithHook(translator_status, "TranslationEngines");
export const { atomInstance: Atom_SelectedTranslationEngines, useHook: useStore_SelectedTranslationEngines } = createAtomWithHook({}, "SelectedTranslationEngines");
export const { atomInstance: Atom_IsOpenedConfigPage, useHook: useStore_IsOpenedConfigPage } = createAtomWithHook(false, "IsOpenedConfigPage"); export const { atomInstance: Atom_IsOpenedConfigPage, useHook: useStore_IsOpenedConfigPage } = createAtomWithHook(false, "IsOpenedConfigPage");
export const { atomInstance: Atom_SelectedConfigTabId, useHook: useStore_SelectedConfigTabId } = createAtomWithHook("device", "SelectedConfigTabId"); export const { atomInstance: Atom_SelectedConfigTabId, useHook: useStore_SelectedConfigTabId } = createAtomWithHook("device", "SelectedConfigTabId");
export const { atomInstance: Atom_IsOpenedDropdownMenu, useHook: useStore_IsOpenedDropdownMenu } = createAtomWithHook("", "IsOpenedDropdownMenu"); export const { atomInstance: Atom_IsOpenedDropdownMenu, useHook: useStore_IsOpenedDropdownMenu } = createAtomWithHook("", "IsOpenedDropdownMenu");
@@ -186,8 +190,6 @@ export const { atomInstance: Atom_EnableAutoClearMessageBox, useHook: useStore_E
export const { atomInstance: Atom_SendMessageButtonType, useHook: useStore_SendMessageButtonType } = createAsyncAtomWithHook("show", "SendMessageButtonType"); export const { atomInstance: Atom_SendMessageButtonType, useHook: useStore_SendMessageButtonType } = createAsyncAtomWithHook("show", "SendMessageButtonType");
export const { atomInstance: Atom_TranslatorList, useHook: useStore_TranslatorList } = createAtomWithHook(translator_list, "TranslatorList");
export const { atomInstance: Atom_SelectedTranslatorId, useHook: useStore_SelectedTranslatorId } = createAtomWithHook("CTranslate2", "SelectedTranslatorId");
export const { atomInstance: Atom_IsOpenedTranslatorSelector, useHook: useStore_IsOpenedTranslatorSelector } = createAtomWithHook(false, "IsOpenedTranslatorSelector"); export const { atomInstance: Atom_IsOpenedTranslatorSelector, useHook: useStore_IsOpenedTranslatorSelector } = createAtomWithHook(false, "IsOpenedTranslatorSelector");
export const { atomInstance: Atom_VrctPosterIndex, useHook: useStore_VrctPosterIndex } = createAtomWithHook(0, "VrctPosterIndex"); export const { atomInstance: Atom_VrctPosterIndex, useHook: useStore_VrctPosterIndex } = createAtomWithHook(0, "VrctPosterIndex");