drawDB/src/components/EditorSidePanel/EnumsTab/EnumDetails.jsx

84 lines
2.6 KiB
React
Raw Normal View History

2024-06-30 18:19:21 +08:00
import { useState } from "react";
import { Button, Input, TagInput } from "@douyinfe/semi-ui";
import { IconDeleteStroked } from "@douyinfe/semi-icons";
import { useEnums, useUndoRedo } from "../../../hooks";
import { Action, ObjectType } from "../../../data/constants";
import { useTranslation } from "react-i18next";
export default function EnumDetails({ data, i }) {
const { t } = useTranslation();
const { deleteEnum, updateEnum } = useEnums();
const { setUndoStack, setRedoStack } = useUndoRedo();
const [editField, setEditField] = useState({});
return (
2024-07-04 02:21:44 +08:00
<>
<div className="flex justify-center items-center gap-2">
2024-06-30 18:19:21 +08:00
<div className="font-semibold">{t("Name")}: </div>
<Input
value={data.name}
placeholder={t("name")}
2024-07-04 07:10:24 +08:00
validateStatus={data.name.trim() === "" ? "error" : "default"}
2024-07-04 02:21:44 +08:00
onChange={(value) => updateEnum(i, { name: value })}
2024-06-30 18:19:21 +08:00
onFocus={(e) => setEditField({ name: e.target.value })}
onBlur={(e) => {
if (e.target.value === editField.name) return;
setUndoStack((prev) => [
...prev,
{
action: Action.EDIT,
element: ObjectType.ENUM,
2024-07-04 02:21:44 +08:00
id: i,
2024-06-30 18:19:21 +08:00
undo: editField,
redo: { name: e.target.value },
message: t("edit_enum", {
enumName: e.target.value,
extra: "[name]",
}),
},
]);
setRedoStack([]);
}}
/>
</div>
<TagInput
separator={[",", ", ", " ,"]}
value={data.values}
addOnBlur
className="my-2"
placeholder={t("values")}
2024-07-04 07:10:24 +08:00
validateStatus={data.values.length === 0 ? "error" : "default"}
2024-06-30 18:19:21 +08:00
onChange={(v) => updateEnum(i, { values: v })}
onFocus={() => setEditField({ values: data.values })}
onBlur={() => {
if (JSON.stringify(editField.values) === JSON.stringify(data.values))
return;
setUndoStack((prev) => [
...prev,
{
action: Action.EDIT,
2024-07-04 02:21:44 +08:00
element: ObjectType.ENUM,
id: i,
2024-06-30 18:19:21 +08:00
undo: editField,
redo: { values: data.values },
message: t("edit_enum", {
enumName: data.name,
extra: "[values]",
}),
},
]);
setRedoStack([]);
}}
/>
<Button
block
icon={<IconDeleteStroked />}
type="danger"
onClick={() => deleteEnum(i, true)}
>
{t("delete")}
</Button>
2024-07-04 02:21:44 +08:00
</>
2024-06-30 18:19:21 +08:00
);
}