import React, { useEffect } from "react";
import { TreeNode } from "designable-core";
import { uid } from "designable-shared";
import { generateRandomId } from "../components/Interactive/Condition";
import cloneDeep from "lodash/cloneDeep";
interface useKeyboardProps {
node: TreeNode;
clickObject: any;
fn?: any;
}
export const useKeyboard: React.FC<useKeyboardProps> = (
node,
clickObject,
cutValue
) => {
const [keyId, setKeyId] = React.useState("");
const [copyValue, setCopyValue] = React.useState(111);
console.log("🐕💨[useKeyboard]>>useKeyboard>>copyValue:", copyValue);
useEffect(() => {
const PopupKeyUp = (e) => {
console.log("🐕💨[useKeyboard]>>PopupKeyUp>>e:", e);
switch (e.code){
case "Delete":
switch (clickObject.type) {
case "event":
node.deleteEventName(clickObject.value);
setKeyId(uid());
break;
case "condition":
node.deleteCondition(clickObject.eventName, clickObject.value);
setKeyId(uid());
break;
case "action":
node.deleteActionOnEvent(
clickObject.eventName,
clickObject.actionName,
clickObject.value
);
break;
case "target":
node.deleteTargerOnAction(
clickObject.eventName,
clickObject.fnName,
Number(clickObject.value.split("-")[1]),
clickObject.value.split("-")[0]
);
break;
}
break;
case e.ctrlKey && e.keyCode === 67:
console.log("用户按下了Ctrl+C", node.eventMaps, 11, clickObject);
const newNode = cloneDeep(node.eventMaps);
switch (clickObject.type) {
case "event":
setCopyValue({
events: newNode[clickObject.value],
eventName: clickObject.value,
type: "event",
});
break;
case "condition":
let conditionObject = newNode[clickObject.eventName].find((item) =>
item.hasOwnProperty("condition")
);
let findObject = conditionObject.condition.find(
(item) => item.cid === clickObject.value
);
let findEvent = newNode[clickObject.eventName].filter(
(item) => item.cid === clickObject.value
);
console.log('🐕💨[useKeyboard]>>PopupKeyUp>>conditionObject:', conditionObject)
setCopyValue({
condition: findObject,
event: findEvent,
type: "condition",
});
break;
case "action":
}
break;
case e.ctrlKey && e.keyCode === 66:
console.log(
"🐕💨[useKeyboard]>>PopupKeyUp>>copyValue:",
copyValue,
111,
clickObject
);
const uuid = uid();
const cid = generateRandomId();
if (copyValue.type === "event") {
node.pasteEvent(
copyValue.events,
copyValue.eventName,
clickObject.value
);
} else if (copyValue) {
copyValue?.aid
? node.pasteAction(
copyValue,
clickObject.eventName,
clickObject.value,
"",
"event"
)
: node.pasteCondition(clickObject.eventName, copyValue, uuid, cid);
}
break;
}
};
//监听键盘事件
document.addEventListener("keyup", PopupKeyUp, true);
return () => {
//销毁键盘事件
document.removeEventListener("keyup", PopupKeyUp, true);
};
}, [clickObject]);
return { keyId, copyValue };
};
个人自用啊啊啊
最新推荐文章于 2024-07-23 11:32:13 发布