import { useState } from "react"; import { Input, TextArea, Button, TagInput, InputNumber, Checkbox, } from "@douyinfe/semi-ui"; import { Action, ObjectType } from "../../../data/constants"; import { IconDeleteStroked } from "@douyinfe/semi-icons"; import { useDiagram, useUndoRedo } from "../../../hooks"; import { useTranslation } from "react-i18next"; import { dbToTypes } from "../../../data/datatypes"; import { databases } from "../../../data/databases"; export default function FieldDetails({ data, tid, index }) { const { t } = useTranslation(); const { tables, database } = useDiagram(); const { setUndoStack, setRedoStack } = useUndoRedo(); const { updateField, deleteField } = useDiagram(); const [editField, setEditField] = useState({}); return (
{t("default_value")}
updateField(tid, index, { default: value })} onFocus={(e) => setEditField({ default: e.target.value })} onBlur={(e) => { if (e.target.value === editField.default) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "field", tid: tid, fid: index, undo: editField, redo: { default: e.target.value }, message: t("edit_table", { tableName: tables[tid].name, extra: "[field]", }), }, ]); setRedoStack([]); }} /> {(data.type === "ENUM" || data.type === "SET") && ( <>
{data.type} {t("values")}
updateField(tid, index, { values: v })} onFocus={() => setEditField({ values: data.values })} onBlur={() => { if ( JSON.stringify(editField.values) === JSON.stringify(data.values) ) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "field", tid: tid, fid: index, undo: editField, redo: { values: data.values }, message: t("edit_table", { tableName: tables[tid].name, extra: "[field]", }), }, ]); setRedoStack([]); }} /> )} {dbToTypes[database][data.type].isSized && ( <>
{t("size")}
updateField(tid, index, { size: value })} onFocus={(e) => setEditField({ size: e.target.value })} onBlur={(e) => { if (e.target.value === editField.size) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "field", tid: tid, fid: index, undo: editField, redo: { size: e.target.value }, message: t("edit_table", { tableName: tables[tid].name, extra: "[field]", }), }, ]); setRedoStack([]); }} /> )} {dbToTypes[database][data.type].hasPrecision && ( <>
{t("precision")}
updateField(tid, index, { size: value })} onFocus={(e) => setEditField({ size: e.target.value })} onBlur={(e) => { if (e.target.value === editField.size) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "field", tid: tid, fid: index, undo: editField, redo: { size: e.target.value }, message: t("edit_table", { tableName: tables[tid].name, extra: "[field]", }), }, ]); setRedoStack([]); }} /> )} {dbToTypes[database][data.type].hasCheck && ( <>
{t("check")}
updateField(tid, index, { check: value })} onFocus={(e) => setEditField({ check: e.target.value })} onBlur={(e) => { if (e.target.value === editField.check) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.TABLE, component: "field", tid: tid, fid: index, undo: editField, redo: { check: e.target.value }, message: t("edit_table", { tableName: tables[tid].name, extra: "[field]", }), }, ]); setRedoStack([]); }} />
{t("this_will_appear_as_is")}
)}
{t("unique")}
{ 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, }, }, ]); setRedoStack([]); updateField(tid, index, { [checkedValues.target.value]: checkedValues.target.checked, }); }} />
{t("autoincrement")}
{ 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, { increment: !data.increment, check: data.increment ? data.check : "", }); }} />
{databases[database].hasArrays && (
{t("declare_array")}
{ 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, }); }} />
)} {databases[database].hasUnsignedTypes && dbToTypes[database][data.type].signed && (
{t("Unsigned")}
{ 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, { unsigned: checkedValues.target.checked, }); }} />
)}
{t("comment")}