diff --git a/src/components/table.jsx b/src/components/table.jsx
index 168472a..4145293 100644
--- a/src/components/table.jsx
+++ b/src/components/table.jsx
@@ -23,6 +23,7 @@ import {
TextArea,
Card,
Checkbox,
+ TagInput,
Row,
Col,
Popover,
@@ -342,10 +343,22 @@ export default function Table(props) {
},
]);
setRedoStack([]);
- updateField(props.tableData.id, j, {
- type: value,
- length: value === "VARCHAR" ? 255 : "n/a",
- });
+ const incr =
+ f.increment &&
+ (value === "INT" ||
+ value === "BIGINT" ||
+ value === "SMALLINT");
+ updateField(
+ props.tableData.id,
+ j,
+ value === "ENUM"
+ ? { type: value, enumValues: [], increment: incr }
+ : {
+ type: value,
+ length: value === "VARCHAR" ? 255 : "n/a",
+ increment: incr,
+ }
+ );
}}
>
@@ -437,35 +450,79 @@ export default function Table(props) {
setRedoStack([]);
}}
/>
-
Length
-
- updateField(props.tableData.id, j, { length: value })
- }
- onFocus={(e) =>
- setEditField({ length: e.target.value })
- }
- onBlur={(e) => {
- if (e.target.value === editField.length) return;
- setUndoStack((prev) => [
- ...prev,
- {
- action: Action.EDIT,
- element: ObjectType.TABLE,
- component: "field",
- tid: props.tableData.id,
- fid: j,
- undo: editField,
- redo: { length: e.target.value },
- },
- ]);
- setRedoStack([]);
- }}
- />
+ {f.type === "ENUM" && (
+ <>
+ Enum values
+
+ updateField(props.tableData.id, j, {
+ enumValues: v,
+ })
+ }
+ onFocus={(e) =>
+ setEditField({ enumValues: f.enumValues })
+ }
+ onBlur={(e) => {
+ if (
+ JSON.stringify(editField.enumValues) ===
+ JSON.stringify(f.enumValues)
+ )
+ return;
+ setUndoStack((prev) => [
+ ...prev,
+ {
+ action: Action.EDIT,
+ element: ObjectType.TABLE,
+ component: "field",
+ tid: props.tableData.id,
+ fid: j,
+ undo: editField,
+ redo: { enumValues: f.enumValues },
+ },
+ ]);
+ setRedoStack([]);
+ }}
+ />
+ >
+ )}
+ {f.type === "VARCHAR" && (
+ <>
+ Length
+
+ updateField(props.tableData.id, j, {
+ length: value,
+ })
+ }
+ onFocus={(e) =>
+ setEditField({ length: e.target.value })
+ }
+ onBlur={(e) => {
+ if (e.target.value === editField.length) return;
+ setUndoStack((prev) => [
+ ...prev,
+ {
+ action: Action.EDIT,
+ element: ObjectType.TABLE,
+ component: "field",
+ tid: props.tableData.id,
+ fid: j,
+ undo: editField,
+ redo: { length: e.target.value },
+ },
+ ]);
+ setRedoStack([]);
+ }}
+ />
+ >
+ )}
Check Expression
@@ -272,35 +286,78 @@ export default function TableOverview(props) {
setRedoStack([]);
}}
/>
- Length
-
- updateField(i, j, { length: value })
- }
- onFocus={(e) =>
- setEditField({ length: e.target.value })
- }
- onBlur={(e) => {
- if (e.target.value === editField.length) return;
- setUndoStack((prev) => [
- ...prev,
- {
- action: Action.EDIT,
- element: ObjectType.TABLE,
- component: "field",
- tid: i,
- fid: j,
- undo: editField,
- redo: { length: e.target.value },
- },
- ]);
- setRedoStack([]);
- }}
- />
+ {f.type === "ENUM" && (
+ <>
+
+ Enum values
+
+
+ updateField(i, j, { enumValues: v })
+ }
+ onFocus={(e) =>
+ setEditField({ enumValues: f.enumValues })
+ }
+ onBlur={(e) => {
+ if (
+ JSON.stringify(editField.enumValues) ===
+ JSON.stringify(f.enumValues)
+ )
+ return;
+ setUndoStack((prev) => [
+ ...prev,
+ {
+ action: Action.EDIT,
+ element: ObjectType.TABLE,
+ component: "field",
+ tid: i,
+ fid: j,
+ undo: editField,
+ redo: { enumValues: f.enumValues },
+ },
+ ]);
+ setRedoStack([]);
+ }}
+ />
+ >
+ )}
+ {f.type === "VARCHAR" && (
+ <>
+ Length
+
+ updateField(i, j, { length: value })
+ }
+ onFocus={(e) =>
+ setEditField({ length: e.target.value })
+ }
+ onBlur={(e) => {
+ if (e.target.value === editField.length)
+ return;
+ setUndoStack((prev) => [
+ ...prev,
+ {
+ action: Action.EDIT,
+ element: ObjectType.TABLE,
+ component: "field",
+ tid: i,
+ fid: j,
+ undo: editField,
+ redo: { length: e.target.value },
+ },
+ ]);
+ setRedoStack([]);
+ }}
+ />
+ >
+ )}
Check Expression
diff --git a/src/data/data.js b/src/data/data.js
index ec07981..04f3bb1 100644
--- a/src/data/data.js
+++ b/src/data/data.js
@@ -19,6 +19,7 @@ const sqlDataTypes = [
"VARBINARY",
"BLOB",
"JSON",
+ "ENUM",
];
const tableThemes = [
diff --git a/src/utils/index.js b/src/utils/index.js
index fe74f18..e15062a 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -59,7 +59,11 @@ function jsonToSQL(obj) {
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t\`${
field.name
}\` ${field.type}${
- field.length !== "n/a" ? `(${field.length})` : ""
+ field.length !== "n/a"
+ ? `(${field.length})`
+ : field.enumValues
+ ? `(${field.enumValues.map((v) => `"${v}"`).join(", ")})`
+ : ""
}${field.notNull ? " NOT NULL" : ""}${
field.increment ? " AUTO_INCREMENT" : ""
}${field.unique ? " UNIQUE" : ""}${