Skip to content

Commit 52248f1

Browse files
committed
Fix field type not updating when Type name is changed (#193 part1)
1 parent 1a2ac74 commit 52248f1

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/components/EditorHeader/ControlPanel.jsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,13 @@ export default function ControlPanel({
298298
);
299299
} else if (a.component === "self") {
300300
updateType(a.tid, a.undo);
301+
if (a.updatedFields) {
302+
if (a.undo.name) {
303+
a.updatedFields.forEach((x) =>
304+
updateField(x.tid, x.fid, { type: a.undo.name.toUpperCase() }),
305+
);
306+
}
307+
}
301308
}
302309
} else if (a.element === ObjectType.ENUM) {
303310
updateEnum(a.id, a.undo);
@@ -460,6 +467,13 @@ export default function ControlPanel({
460467
});
461468
} else if (a.component === "self") {
462469
updateType(a.tid, a.redo);
470+
if (a.updatedFields) {
471+
if (a.redo.name) {
472+
a.updatedFields.forEach((x) =>
473+
updateField(x.tid, x.fid, { type: a.redo.name.toUpperCase() }),
474+
);
475+
}
476+
}
463477
}
464478
} else if (a.element === ObjectType.ENUM) {
465479
updateEnum(a.id, a.redo);

src/components/EditorSidePanel/TypesTab/TypeInfo.jsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ import {
1010
Card,
1111
} from "@douyinfe/semi-ui";
1212
import { IconDeleteStroked, IconPlus } from "@douyinfe/semi-icons";
13-
import { useUndoRedo, useTypes } from "../../../hooks";
13+
import { useUndoRedo, useTypes, useDiagram } from "../../../hooks";
1414
import TypeField from "./TypeField";
1515
import { useTranslation } from "react-i18next";
1616

1717
export default function TypeInfo({ index, data }) {
1818
const { deleteType, updateType } = useTypes();
19+
const { tables, updateField } = useDiagram();
1920
const { setUndoStack, setRedoStack } = useUndoRedo();
2021
const [editField, setEditField] = useState({});
2122
const { t } = useTranslation();
@@ -37,10 +38,27 @@ export default function TypeInfo({ index, data }) {
3738
validateStatus={data.name === "" ? "error" : "default"}
3839
placeholder={t("name")}
3940
className="ms-2"
40-
onChange={(value) => updateType(index, { name: value })}
41+
onChange={(value) => {
42+
updateType(index, { name: value });
43+
tables.forEach((table, i) => {
44+
table.fields.forEach((field, j) => {
45+
if (field.type.toLowerCase() === data.name.toLowerCase()) {
46+
updateField(i, j, { type: value.toUpperCase() });
47+
}
48+
});
49+
});
50+
}}
4151
onFocus={(e) => setEditField({ name: e.target.value })}
4252
onBlur={(e) => {
4353
if (e.target.value === editField.name) return;
54+
55+
const updatedFields = tables.reduce((acc, table) => {
56+
table.fields.forEach((_, i) => {
57+
acc.push({ tid: table.id, fid: i });
58+
});
59+
return acc;
60+
}, []);
61+
4462
setUndoStack((prev) => [
4563
...prev,
4664
{
@@ -50,6 +68,7 @@ export default function TypeInfo({ index, data }) {
5068
tid: index,
5169
undo: editField,
5270
redo: { name: e.target.value },
71+
updatedFields,
5372
message: t("edit_type", {
5473
typeName: data.name,
5574
extra: "[name]",

0 commit comments

Comments
 (0)