Skip to content

Commit 77bdb77

Browse files
committed
Enable editing index names
1 parent 1283f66 commit 77bdb77

File tree

5 files changed

+55
-7
lines changed

5 files changed

+55
-7
lines changed

src/components/EditorSidePanel/TablesTab/IndexDetails.jsx

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import { Input, Button, Popover, Checkbox, Select } from "@douyinfe/semi-ui";
33
import { IconMore, IconDeleteStroked } from "@douyinfe/semi-icons";
44
import { useTables, useUndoRedo } from "../../../hooks";
55
import { useTranslation } from "react-i18next";
6+
import { useState } from "react";
67

78
export default function IndexDetails({ data, fields, iid, tid }) {
89
const { t } = useTranslation();
910
const { tables, updateTable } = useTables();
1011
const { setUndoStack, setRedoStack } = useUndoRedo();
12+
const [editField, setEditField] = useState({});
1113

1214
return (
1315
<div className="flex justify-between items-center mb-2">
@@ -29,11 +31,9 @@ export default function IndexDetails({ data, fields, iid, tid }) {
2931
iid: iid,
3032
undo: {
3133
fields: [...data.fields],
32-
name: `${data.fields.join("_")}_index`,
3334
},
3435
redo: {
3536
fields: [...value],
36-
name: `${value.join("_")}_index`,
3737
},
3838
message: t("edit_table", {
3939
tableName: tables[tid].name,
@@ -48,7 +48,6 @@ export default function IndexDetails({ data, fields, iid, tid }) {
4848
? {
4949
...index,
5050
fields: [...value],
51-
name: `${value.join("_")}_index`,
5251
}
5352
: index,
5453
),
@@ -59,7 +58,48 @@ export default function IndexDetails({ data, fields, iid, tid }) {
5958
content={
6059
<div className="px-1 popover-theme">
6160
<div className="font-semibold mb-1">{t("name")}: </div>
62-
<Input value={data.name} placeholder={t("name")} disabled />
61+
<Input
62+
value={data.name}
63+
placeholder={t("name")}
64+
validateStatus={data.name.trim() === "" ? "error" : "default"}
65+
onFocus={() =>
66+
setEditField({
67+
name: data.name,
68+
})
69+
}
70+
onChange={(value) =>
71+
updateTable(tid, {
72+
indices: tables[tid].indices.map((index) =>
73+
index.id === iid
74+
? {
75+
...index,
76+
name: value,
77+
}
78+
: index,
79+
),
80+
})
81+
}
82+
onBlur={(e) => {
83+
if (e.target.value === editField.name) return;
84+
setUndoStack((prev) => [
85+
...prev,
86+
{
87+
action: Action.EDIT,
88+
element: ObjectType.TABLE,
89+
component: "index",
90+
tid: tid,
91+
iid: iid,
92+
undo: editField,
93+
redo: { name: e.target.value },
94+
message: t("edit_table", {
95+
tableName: tables[tid].name,
96+
extra: "[index]",
97+
}),
98+
},
99+
]);
100+
setRedoStack([]);
101+
}}
102+
/>
63103
<div className="flex justify-between items-center my-3">
64104
<div className="font-medium">{t("unique")}</div>
65105
<Checkbox

src/components/EditorSidePanel/TablesTab/TableField.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default function TableField({ data, tid, index }) {
2020
<Col span={7}>
2121
<Input
2222
value={data.name}
23-
validateStatus={data.name === "" ? "error" : "default"}
23+
validateStatus={data.name.trim() === "" ? "error" : "default"}
2424
placeholder="Name"
2525
onChange={(value) => updateField(tid, index, { name: value })}
2626
onFocus={(e) => setEditField({ name: e.target.value })}

src/components/EditorSidePanel/TablesTab/TableInfo.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default function TableInfo({ data }) {
3333
<div className="text-md font-semibold break-keep">{t("name")}: </div>
3434
<Input
3535
value={data.name}
36-
validateStatus={data.name === "" ? "error" : "default"}
36+
validateStatus={data.name.trim() === "" ? "error" : "default"}
3737
placeholder={t("name")}
3838
className="ms-2"
3939
onChange={(value) => updateTable(data.id, { name: value })}
@@ -290,7 +290,7 @@ export default function TableInfo({ data }) {
290290
...data.indices,
291291
{
292292
id: data.indices.length,
293-
name: `index_${data.indices.length}`,
293+
name: `${data.name}_index_${data.indices.length}`,
294294
unique: false,
295295
fields: [],
296296
},

src/i18n/locales/en.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ const en = {
212212
edit_relationship: "{{extra}} Edit relationship {{refName}}",
213213
delete_relationship: "Delete relationship {{refName}}",
214214
not_found: "Not found",
215+
empty_index_name: "Declared an index with no name in table '{{tableName}}'",
215216
},
216217
};
217218

src/utils/issues.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,13 @@ export function getIssues(diagram) {
168168
});
169169

170170
table.indices.forEach((index) => {
171+
if (index.name.trim() === "") {
172+
issues.push(
173+
i18n.t("empty_index_name", {
174+
tableName: table.name,
175+
}),
176+
);
177+
}
171178
if (index.fields.length === 0) {
172179
issues.push(
173180
i18n.t("empty_index", {

0 commit comments

Comments
 (0)