import { Collapse, Row, Col, Select, Button, Popover, Table, } from "@douyinfe/semi-ui"; import { IconDeleteStroked, IconLoopTextStroked, IconMore, } from "@douyinfe/semi-icons"; import { Cardinality, Constraint, Action, ObjectType, } from "../../../data/constants"; import { useTables, useUndoRedo } from "../../../hooks"; import i18n from "../../../i18n/i18n"; import { useTranslation } from "react-i18next"; const columns = [ { title: i18n.t("primary"), dataIndex: "primary", }, { title: i18n.t("foreign"), dataIndex: "foreign", }, ]; export default function RelationshipInfo({ data }) { const { setUndoStack, setRedoStack } = useUndoRedo(); const { tables, setRelationships, deleteRelationship } = useTables(); const { t } = useTranslation(); const swapKeys = () => { setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.RELATIONSHIP, rid: data.id, undo: { startTableId: data.startTableId, startFieldId: data.startFieldId, endTableId: data.endTableId, endFieldId: data.endFieldId, }, redo: { startTableId: data.endTableId, startFieldId: data.endFieldId, endTableId: data.startTableId, endFieldId: data.startFieldId, }, message: t("edit_relationship", { refName: data.name, extra: "[swap keys]", }), }, ]); setRedoStack([]); setRelationships((prev) => prev.map((e, idx) => idx === data.id ? { ...e, name: `${tables[e.startTableId].name}_${ tables[e.startTableId].fields[e.startFieldId].name }_fk`, startTableId: e.endTableId, startFieldId: e.endFieldId, endTableId: e.startTableId, endFieldId: e.startFieldId, } : e, ), ); }; const changeCardinality = (value) => { setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.RELATIONSHIP, rid: data.id, undo: { cardinality: data.cardinality }, redo: { cardinality: value }, message: t("edit_relationship", { refName: data.name, extra: "[cardinality]", }), }, ]); setRedoStack([]); setRelationships((prev) => prev.map((e, idx) => idx === data.id ? { ...e, cardinality: value } : e, ), ); }; const changeConstraint = (key, value) => { const undoKey = `${key}Constraint`; console.log({ action: Action.EDIT, element: ObjectType.RELATIONSHIP, rid: data.id, undo: { [undoKey]: data[undoKey] }, redo: { [undoKey]: value }, message: t("edit_relationship", { refName: data.name, extra: "[constraint]", }), }); setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.RELATIONSHIP, rid: data.id, undo: { [undoKey]: data[undoKey] }, redo: { [undoKey]: value }, message: t("edit_relationship", { refName: data.name, extra: "[constraint]", }), }, ]); setRedoStack([]); setRelationships((prev) => prev.map((e, idx) => (idx === data.id ? { ...e, [undoKey]: value } : e)), ); }; return (