mirror of
https://github.com/drawdb-io/drawdb.git
synced 2025-10-13 05:35:15 +00:00
Fix language change applied without confirmation in modal (#634)
This commit is contained in:
@@ -1,22 +1,21 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
|
||||||
import { useSettings } from "../../../hooks";
|
import { useSettings } from "../../../hooks";
|
||||||
import { languages } from "../../../i18n/i18n";
|
import { languages } from "../../../i18n/i18n";
|
||||||
|
|
||||||
export default function Language() {
|
export default function Language({ language, setLanguage }) {
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
const { i18n } = useTranslation();
|
const isDarkMode = settings.mode === "dark";
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="grid grid-cols-4 md:grid-cols-2 gap-4">
|
<div className="grid grid-cols-4 md:grid-cols-2 gap-4">
|
||||||
{languages.map((l) => (
|
{languages.map((l) => (
|
||||||
<button
|
<button
|
||||||
key={l.code}
|
key={l.code}
|
||||||
onClick={() => i18n.changeLanguage(l.code)}
|
onClick={() => setLanguage(l.code)}
|
||||||
className={`space-y-1 py-3 px-4 rounded-md border-2 ${
|
className={`space-y-1 py-3 px-4 rounded-md border-2 ${
|
||||||
settings.mode === "dark"
|
isDarkMode
|
||||||
? "bg-zinc-700 hover:bg-zinc-600"
|
? "bg-zinc-700 hover:bg-zinc-600"
|
||||||
: "bg-zinc-100 hover:bg-zinc-200"
|
: "bg-zinc-100 hover:bg-zinc-200"
|
||||||
} ${i18n.language === l.code ? "border-zinc-400" : "border-transparent"}`}
|
} ${language === l.code ? "border-zinc-400" : "border-transparent"}`}
|
||||||
>
|
>
|
||||||
<div className="flex justify-between items-center">
|
<div className="flex justify-between items-center">
|
||||||
<div className="font-semibold">{l.native_name}</div>
|
<div className="font-semibold">{l.native_name}</div>
|
||||||
|
@@ -1,45 +1,45 @@
|
|||||||
import {
|
import {
|
||||||
Spin,
|
|
||||||
Input,
|
|
||||||
Image,
|
Image,
|
||||||
Toast,
|
Input,
|
||||||
Modal as SemiUIModal,
|
Modal as SemiUIModal,
|
||||||
|
Spin,
|
||||||
|
Toast,
|
||||||
} from "@douyinfe/semi-ui";
|
} from "@douyinfe/semi-ui";
|
||||||
import { DB, MODAL, STATUS, State } from "../../../data/constants";
|
|
||||||
import { useState } from "react";
|
|
||||||
import { db } from "../../../data/db";
|
|
||||||
import {
|
|
||||||
useAreas,
|
|
||||||
useEnums,
|
|
||||||
useNotes,
|
|
||||||
useDiagram,
|
|
||||||
useTransform,
|
|
||||||
useTypes,
|
|
||||||
useUndoRedo,
|
|
||||||
useTasks,
|
|
||||||
useSaveState,
|
|
||||||
} from "../../../hooks";
|
|
||||||
import { saveAs } from "file-saver";
|
import { saveAs } from "file-saver";
|
||||||
import { Parser } from "node-sql-parser";
|
import { Parser } from "node-sql-parser";
|
||||||
import { Parser as OracleParser } from "oracle-sql-parser";
|
import { Parser as OracleParser } from "oracle-sql-parser";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { DB, MODAL, STATUS, State } from "../../../data/constants";
|
||||||
|
import { databases } from "../../../data/databases";
|
||||||
|
import { db } from "../../../data/db";
|
||||||
|
import {
|
||||||
|
useAreas,
|
||||||
|
useDiagram,
|
||||||
|
useEnums,
|
||||||
|
useNotes,
|
||||||
|
useSaveState,
|
||||||
|
useTasks,
|
||||||
|
useTransform,
|
||||||
|
useTypes,
|
||||||
|
useUndoRedo,
|
||||||
|
} from "../../../hooks";
|
||||||
|
import { isRtl } from "../../../i18n/utils/rtl";
|
||||||
|
import { importSQL } from "../../../utils/importSQL";
|
||||||
import {
|
import {
|
||||||
getModalTitle,
|
getModalTitle,
|
||||||
getModalWidth,
|
getModalWidth,
|
||||||
getOkText,
|
getOkText,
|
||||||
} from "../../../utils/modalData";
|
} from "../../../utils/modalData";
|
||||||
import Rename from "./Rename";
|
import CodeEditor from "../../CodeEditor";
|
||||||
import Open from "./Open";
|
|
||||||
import New from "./New";
|
|
||||||
import ImportDiagram from "./ImportDiagram";
|
import ImportDiagram from "./ImportDiagram";
|
||||||
import ImportSource from "./ImportSource";
|
import ImportSource from "./ImportSource";
|
||||||
import SetTableWidth from "./SetTableWidth";
|
|
||||||
import Language from "./Language";
|
import Language from "./Language";
|
||||||
|
import New from "./New";
|
||||||
|
import Open from "./Open";
|
||||||
|
import Rename from "./Rename";
|
||||||
|
import SetTableWidth from "./SetTableWidth";
|
||||||
import Share from "./Share";
|
import Share from "./Share";
|
||||||
import CodeEditor from "../../CodeEditor";
|
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
import { importSQL } from "../../../utils/importSQL";
|
|
||||||
import { databases } from "../../../data/databases";
|
|
||||||
import { isRtl } from "../../../i18n/utils/rtl";
|
|
||||||
|
|
||||||
const extensionToLanguage = {
|
const extensionToLanguage = {
|
||||||
md: "markdown",
|
md: "markdown",
|
||||||
@@ -70,6 +70,9 @@ export default function Modal({
|
|||||||
const { setUndoStack, setRedoStack } = useUndoRedo();
|
const { setUndoStack, setRedoStack } = useUndoRedo();
|
||||||
const { setSaveState } = useSaveState();
|
const { setSaveState } = useSaveState();
|
||||||
const [uncontrolledTitle, setUncontrolledTitle] = useState(title);
|
const [uncontrolledTitle, setUncontrolledTitle] = useState(title);
|
||||||
|
const [uncontrolledLanguage, setUncontrolledLanguage] = useState(
|
||||||
|
i18n.language,
|
||||||
|
);
|
||||||
const [importSource, setImportSource] = useState({
|
const [importSource, setImportSource] = useState({
|
||||||
src: "",
|
src: "",
|
||||||
overwrite: false,
|
overwrite: false,
|
||||||
@@ -254,8 +257,12 @@ export default function Modal({
|
|||||||
setModal(MODAL.NONE);
|
setModal(MODAL.NONE);
|
||||||
return;
|
return;
|
||||||
case MODAL.NEW:
|
case MODAL.NEW:
|
||||||
setModal(MODAL.NONE);
|
|
||||||
createNewDiagram(selectedTemplateId);
|
createNewDiagram(selectedTemplateId);
|
||||||
|
setModal(MODAL.NONE);
|
||||||
|
return;
|
||||||
|
case MODAL.LANGUAGE:
|
||||||
|
i18n.changeLanguage(uncontrolledLanguage);
|
||||||
|
setModal(MODAL.NONE);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
setModal(MODAL.NONE);
|
setModal(MODAL.NONE);
|
||||||
@@ -347,7 +354,12 @@ export default function Modal({
|
|||||||
case MODAL.TABLE_WIDTH:
|
case MODAL.TABLE_WIDTH:
|
||||||
return <SetTableWidth />;
|
return <SetTableWidth />;
|
||||||
case MODAL.LANGUAGE:
|
case MODAL.LANGUAGE:
|
||||||
return <Language />;
|
return (
|
||||||
|
<Language
|
||||||
|
language={uncontrolledLanguage}
|
||||||
|
setLanguage={setUncontrolledLanguage}
|
||||||
|
/>
|
||||||
|
);
|
||||||
case MODAL.SHARE:
|
case MODAL.SHARE:
|
||||||
return <Share title={title} setModal={setModal} />;
|
return <Share title={title} setModal={setModal} />;
|
||||||
default:
|
default:
|
||||||
@@ -379,6 +391,7 @@ export default function Modal({
|
|||||||
}}
|
}}
|
||||||
onCancel={() => {
|
onCancel={() => {
|
||||||
if (modal === MODAL.RENAME) setUncontrolledTitle(title);
|
if (modal === MODAL.RENAME) setUncontrolledTitle(title);
|
||||||
|
if (modal === MODAL.LANGUAGE) setUncontrolledLanguage(i18n.language);
|
||||||
setModal(MODAL.NONE);
|
setModal(MODAL.NONE);
|
||||||
}}
|
}}
|
||||||
centered
|
centered
|
||||||
|
Reference in New Issue
Block a user