Skip to content

Commit a48e6ef

Browse files
authored
Fix language change applied without confirmation in modal (#634)
1 parent 5a48e98 commit a48e6ef

File tree

2 files changed

+39
-27
lines changed

2 files changed

+39
-27
lines changed

src/components/EditorHeader/Modal/Language.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
import { useTranslation } from "react-i18next";
21
import { useSettings } from "../../../hooks";
32
import { languages } from "../../../i18n/i18n";
43

5-
export default function Language() {
4+
export default function Language({ language, setLanguage }) {
65
const { settings } = useSettings();
7-
const { i18n } = useTranslation();
6+
const isDarkMode = settings.mode === "dark";
87

98
return (
109
<div className="grid grid-cols-4 md:grid-cols-2 gap-4">
1110
{languages.map((l) => (
1211
<button
1312
key={l.code}
14-
onClick={() => i18n.changeLanguage(l.code)}
13+
onClick={() => setLanguage(l.code)}
1514
className={`space-y-1 py-3 px-4 rounded-md border-2 ${
16-
settings.mode === "dark"
15+
isDarkMode
1716
? "bg-zinc-700 hover:bg-zinc-600"
1817
: "bg-zinc-100 hover:bg-zinc-200"
19-
} ${i18n.language === l.code ? "border-zinc-400" : "border-transparent"}`}
18+
} ${language === l.code ? "border-zinc-400" : "border-transparent"}`}
2019
>
2120
<div className="flex justify-between items-center">
2221
<div className="font-semibold">{l.native_name}</div>

src/components/EditorHeader/Modal/Modal.jsx

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
import {
2-
Spin,
3-
Input,
42
Image,
5-
Toast,
3+
Input,
64
Modal as SemiUIModal,
5+
Spin,
6+
Toast,
77
} from "@douyinfe/semi-ui";
8-
import { DB, MODAL, STATUS, State } from "../../../data/constants";
8+
import { saveAs } from "file-saver";
9+
import { Parser } from "node-sql-parser";
10+
import { Parser as OracleParser } from "oracle-sql-parser";
911
import { useState } from "react";
12+
import { useTranslation } from "react-i18next";
13+
import { DB, MODAL, STATUS, State } from "../../../data/constants";
14+
import { databases } from "../../../data/databases";
1015
import { db } from "../../../data/db";
1116
import {
1217
useAreas,
18+
useDiagram,
1319
useEnums,
1420
useNotes,
15-
useDiagram,
21+
useSaveState,
22+
useTasks,
1623
useTransform,
1724
useTypes,
1825
useUndoRedo,
19-
useTasks,
20-
useSaveState,
2126
} from "../../../hooks";
22-
import { saveAs } from "file-saver";
23-
import { Parser } from "node-sql-parser";
24-
import { Parser as OracleParser } from "oracle-sql-parser";
27+
import { isRtl } from "../../../i18n/utils/rtl";
28+
import { importSQL } from "../../../utils/importSQL";
2529
import {
2630
getModalTitle,
2731
getModalWidth,
2832
getOkText,
2933
} from "../../../utils/modalData";
30-
import Rename from "./Rename";
31-
import Open from "./Open";
32-
import New from "./New";
34+
import CodeEditor from "../../CodeEditor";
3335
import ImportDiagram from "./ImportDiagram";
3436
import ImportSource from "./ImportSource";
35-
import SetTableWidth from "./SetTableWidth";
3637
import Language from "./Language";
38+
import New from "./New";
39+
import Open from "./Open";
40+
import Rename from "./Rename";
41+
import SetTableWidth from "./SetTableWidth";
3742
import Share from "./Share";
38-
import CodeEditor from "../../CodeEditor";
39-
import { useTranslation } from "react-i18next";
40-
import { importSQL } from "../../../utils/importSQL";
41-
import { databases } from "../../../data/databases";
42-
import { isRtl } from "../../../i18n/utils/rtl";
4343

4444
const extensionToLanguage = {
4545
md: "markdown",
@@ -70,6 +70,9 @@ export default function Modal({
7070
const { setUndoStack, setRedoStack } = useUndoRedo();
7171
const { setSaveState } = useSaveState();
7272
const [uncontrolledTitle, setUncontrolledTitle] = useState(title);
73+
const [uncontrolledLanguage, setUncontrolledLanguage] = useState(
74+
i18n.language,
75+
);
7376
const [importSource, setImportSource] = useState({
7477
src: "",
7578
overwrite: false,
@@ -254,8 +257,12 @@ export default function Modal({
254257
setModal(MODAL.NONE);
255258
return;
256259
case MODAL.NEW:
257-
setModal(MODAL.NONE);
258260
createNewDiagram(selectedTemplateId);
261+
setModal(MODAL.NONE);
262+
return;
263+
case MODAL.LANGUAGE:
264+
i18n.changeLanguage(uncontrolledLanguage);
265+
setModal(MODAL.NONE);
259266
return;
260267
default:
261268
setModal(MODAL.NONE);
@@ -347,7 +354,12 @@ export default function Modal({
347354
case MODAL.TABLE_WIDTH:
348355
return <SetTableWidth />;
349356
case MODAL.LANGUAGE:
350-
return <Language />;
357+
return (
358+
<Language
359+
language={uncontrolledLanguage}
360+
setLanguage={setUncontrolledLanguage}
361+
/>
362+
);
351363
case MODAL.SHARE:
352364
return <Share title={title} setModal={setModal} />;
353365
default:
@@ -379,6 +391,7 @@ export default function Modal({
379391
}}
380392
onCancel={() => {
381393
if (modal === MODAL.RENAME) setUncontrolledTitle(title);
394+
if (modal === MODAL.LANGUAGE) setUncontrolledLanguage(i18n.language);
382395
setModal(MODAL.NONE);
383396
}}
384397
centered

0 commit comments

Comments
 (0)