Add option to declare an array
This commit is contained in:
parent
9b606114df
commit
c005020048
@ -12,6 +12,7 @@ import { IconDeleteStroked } from "@douyinfe/semi-icons";
|
|||||||
import { useDiagram, useUndoRedo } from "../../../hooks";
|
import { useDiagram, useUndoRedo } from "../../../hooks";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { dbToTypes } from "../../../data/datatypes";
|
import { dbToTypes } from "../../../data/datatypes";
|
||||||
|
import { databases } from "../../../data/databases";
|
||||||
|
|
||||||
export default function FieldDetails({ data, tid, index }) {
|
export default function FieldDetails({ data, tid, index }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@ -98,7 +99,7 @@ export default function FieldDetails({ data, tid, index }) {
|
|||||||
<div className="font-semibold">{t("size")}</div>
|
<div className="font-semibold">{t("size")}</div>
|
||||||
<InputNumber
|
<InputNumber
|
||||||
className="my-2 w-full"
|
className="my-2 w-full"
|
||||||
placeholder="Set length"
|
placeholder={t("size")}
|
||||||
value={data.size}
|
value={data.size}
|
||||||
onChange={(value) => updateField(tid, index, { size: value })}
|
onChange={(value) => updateField(tid, index, { size: value })}
|
||||||
onFocus={(e) => setEditField({ size: e.target.value })}
|
onFocus={(e) => setEditField({ size: e.target.value })}
|
||||||
@ -230,7 +231,9 @@ export default function FieldDetails({ data, tid, index }) {
|
|||||||
<Checkbox
|
<Checkbox
|
||||||
value="increment"
|
value="increment"
|
||||||
checked={data.increment}
|
checked={data.increment}
|
||||||
disabled={!dbToTypes[database][data.type].canIncrement}
|
disabled={
|
||||||
|
!dbToTypes[database][data.type].canIncrement || data.isArray
|
||||||
|
}
|
||||||
onChange={(checkedValues) => {
|
onChange={(checkedValues) => {
|
||||||
setUndoStack((prev) => [
|
setUndoStack((prev) => [
|
||||||
...prev,
|
...prev,
|
||||||
@ -260,6 +263,42 @@ export default function FieldDetails({ data, tid, index }) {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
{databases[database].hasArrays && (
|
||||||
|
<div className="flex justify-between items-center my-3">
|
||||||
|
<div className="font-medium">{t("declare_array")}</div>
|
||||||
|
<Checkbox
|
||||||
|
value="isArray"
|
||||||
|
checked={data.isArray}
|
||||||
|
onChange={(checkedValues) => {
|
||||||
|
setUndoStack((prev) => [
|
||||||
|
...prev,
|
||||||
|
{
|
||||||
|
action: Action.EDIT,
|
||||||
|
element: ObjectType.TABLE,
|
||||||
|
component: "field",
|
||||||
|
tid: tid,
|
||||||
|
fid: index,
|
||||||
|
undo: {
|
||||||
|
[checkedValues.target.value]: !checkedValues.target.checked,
|
||||||
|
},
|
||||||
|
redo: {
|
||||||
|
[checkedValues.target.value]: checkedValues.target.checked,
|
||||||
|
},
|
||||||
|
message: t("edit_table", {
|
||||||
|
tableName: tables[tid].name,
|
||||||
|
extra: "[field]",
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
setRedoStack([]);
|
||||||
|
updateField(tid, index, {
|
||||||
|
isArray: checkedValues.target.checked,
|
||||||
|
increment: data.isArray ? data.increment : false,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div className="font-semibold">{t("comment")}</div>
|
<div className="font-semibold">{t("comment")}</div>
|
||||||
<TextArea
|
<TextArea
|
||||||
className="my-2"
|
className="my-2"
|
||||||
|
@ -81,7 +81,7 @@ export default function DiagramContextProvider({ children }) {
|
|||||||
action: Action.DELETE,
|
action: Action.DELETE,
|
||||||
element: ObjectType.TABLE,
|
element: ObjectType.TABLE,
|
||||||
data: { table: tables[id], relationship: rels },
|
data: { table: tables[id], relationship: rels },
|
||||||
message: t("delete_table", { tableName: tables[id] }),
|
message: t("delete_table", { tableName: tables[id].name }),
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
setRedoStack([]);
|
setRedoStack([]);
|
||||||
|
@ -19,6 +19,7 @@ export const databases = {
|
|||||||
image: postgresImage,
|
image: postgresImage,
|
||||||
hasTypes: true,
|
hasTypes: true,
|
||||||
hasEnums: true,
|
hasEnums: true,
|
||||||
|
hasArrays: true,
|
||||||
},
|
},
|
||||||
[DB.SQLITE]: {
|
[DB.SQLITE]: {
|
||||||
name: "SQLite",
|
name: "SQLite",
|
||||||
|
@ -1087,15 +1087,6 @@ const postgresTypesBase = {
|
|||||||
hasQuotes: true,
|
hasQuotes: true,
|
||||||
noDefault: true,
|
noDefault: true,
|
||||||
},
|
},
|
||||||
ARRAY: {
|
|
||||||
type: "ARRAY",
|
|
||||||
checkDefault: (field) => true,
|
|
||||||
hasCheck: false,
|
|
||||||
isSized: false,
|
|
||||||
hasPrecision: false,
|
|
||||||
hasQuotes: false,
|
|
||||||
noDefault: true,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const postgresTypes = new Proxy(postgresTypesBase, {
|
export const postgresTypes = new Proxy(postgresTypesBase, {
|
||||||
|
@ -225,6 +225,7 @@ const en = {
|
|||||||
duplicate_enums: "Duplicate enums with the name '{{enumName}}'",
|
duplicate_enums: "Duplicate enums with the name '{{enumName}}'",
|
||||||
no_enums: "No enums",
|
no_enums: "No enums",
|
||||||
no_enums_text: "Define enums here",
|
no_enums_text: "Define enums here",
|
||||||
|
declare_array: "Declare array",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ export function toPostgres(diagram) {
|
|||||||
(field) =>
|
(field) =>
|
||||||
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t"${
|
`${field.comment === "" ? "" : `\t-- ${field.comment}\n`}\t"${
|
||||||
field.name
|
field.name
|
||||||
}" ${field.type}${field.notNull ? " NOT NULL" : ""}${field.unique ? " UNIQUE" : ""}${
|
}" ${field.type}${field.isArray ? " ARRAY" : ""}${field.notNull ? " NOT NULL" : ""}${field.unique ? " UNIQUE" : ""}${
|
||||||
field.default.trim() !== ""
|
field.default.trim() !== ""
|
||||||
? ` DEFAULT ${parseDefault(field, diagram.database)}`
|
? ` DEFAULT ${parseDefault(field, diagram.database)}`
|
||||||
: ""
|
: ""
|
||||||
|
Loading…
Reference in New Issue
Block a user