Feat: Implement shortcut to open CodeModal
This commit is contained in:
parent
7969849c1d
commit
fff3995c11
7 changed files with 56 additions and 56 deletions
|
|
@ -22,6 +22,7 @@ import useFlowStore from "./stores/flowStore";
|
|||
import useFlowsManagerStore from "./stores/flowsManagerStore";
|
||||
import { useStoreStore } from "./stores/storeStore";
|
||||
import { useTypesStore } from "./stores/typesStore";
|
||||
import { useShortcutsStore } from "./stores/shortcuts";
|
||||
|
||||
export default function App() {
|
||||
const removeFromTempNotificationList = useAlertStore(
|
||||
|
|
@ -45,32 +46,6 @@ export default function App() {
|
|||
const refreshStars = useDarkStore((state) => state.refreshStars);
|
||||
const checkHasStore = useStoreStore((state) => state.checkHasStore);
|
||||
|
||||
const handleModalWShortcut = useFlowStore(
|
||||
(state) => state.handleModalWShortcut
|
||||
);
|
||||
const nodes = useFlowStore((state) => state.nodes);
|
||||
|
||||
useEffect(() => {
|
||||
const onKeyDown = (event: KeyboardEvent) => {
|
||||
const selectedNode = nodes.filter((obj) => obj.selected);
|
||||
if (
|
||||
(event.ctrlKey || event.metaKey) &&
|
||||
event.shiftKey &&
|
||||
event.key === "C" &&
|
||||
selectedNode.length > 0
|
||||
) {
|
||||
event.preventDefault();
|
||||
handleModalWShortcut("code");
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener("keydown", onKeyDown);
|
||||
|
||||
return () => {
|
||||
document.removeEventListener("keydown", onKeyDown);
|
||||
};
|
||||
}, [handleModalWShortcut, nodes]);
|
||||
|
||||
useEffect(() => {
|
||||
refreshStars();
|
||||
refreshVersion();
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ export default function CodeAreaComponent({
|
|||
id = "",
|
||||
readonly = false,
|
||||
openModal,
|
||||
selected,
|
||||
}: CodeAreaComponentType) {
|
||||
const [myValue, setMyValue] = useState(
|
||||
typeof value == "string" ? value : JSON.stringify(value)
|
||||
|
|
@ -33,6 +34,7 @@ export default function CodeAreaComponent({
|
|||
return (
|
||||
<div className={disabled ? "pointer-events-none w-full " : " w-full"}>
|
||||
<CodeAreaModal
|
||||
selected={selected}
|
||||
openModal={openModal}
|
||||
readonly={readonly}
|
||||
dynamic={dynamic}
|
||||
|
|
|
|||
|
|
@ -36,17 +36,25 @@ export default function CodeAreaModal({
|
|||
dynamic,
|
||||
readonly = false,
|
||||
openModal,
|
||||
selected,
|
||||
}: codeAreaModalPropsType): JSX.Element {
|
||||
const [code, setCode] = useState(value);
|
||||
const dark = useDarkStore((state) => state.dark);
|
||||
const unselectAll = useFlowStore((state) => state.unselectAll);
|
||||
|
||||
const [height, setHeight] = useState<string | null>(null);
|
||||
const setSuccessData = useAlertStore((state) => state.setSuccessData);
|
||||
const setErrorData = useAlertStore((state) => state.setErrorData);
|
||||
const [error, setError] = useState<{
|
||||
detail: { error: string | undefined; traceback: string | undefined };
|
||||
} | null>(null);
|
||||
const handleModalWShortcut = useFlowStore(
|
||||
(state) => state.handleModalWShortcut
|
||||
);
|
||||
const openCodeModalWShortcut = useFlowStore(
|
||||
(state) => state.openCodeModalWShortcut
|
||||
);
|
||||
const [open, setOpen] = useState(false);
|
||||
const nodes = useFlowStore((state) => state.nodes);
|
||||
|
||||
useEffect(() => {
|
||||
// if nodeClass.template has more fields other than code and dynamic is true
|
||||
|
|
@ -54,39 +62,31 @@ export default function CodeAreaModal({
|
|||
if (dynamic && Object.keys(nodeClass!.template).length > 2) {
|
||||
return;
|
||||
}
|
||||
}, []);
|
||||
|
||||
const handleModalWShortcut = useFlowStore(
|
||||
(state) => state.handleModalWShortcut
|
||||
);
|
||||
const openCodeModalWShortcut = useFlowStore(
|
||||
(state) => state.openCodeModalWShortcut
|
||||
);
|
||||
const nodes = useFlowStore((state) => state.nodes);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const onKeyDown = (event: KeyboardEvent) => {
|
||||
const selectedNode = nodes.filter((obj) => obj.selected);
|
||||
const handleKeyDown = (event: KeyboardEvent) => {
|
||||
if (
|
||||
(event.ctrlKey || event.metaKey) &&
|
||||
event.shiftKey &&
|
||||
event.key === "C" &&
|
||||
selectedNode.length > 0
|
||||
(event.key === "C" || event.key === "c") &&
|
||||
(event.metaKey || event.ctrlKey) &&
|
||||
selected
|
||||
) {
|
||||
event.preventDefault();
|
||||
setOpen(openCodeModalWShortcut);
|
||||
console.log("entrou")
|
||||
setOpen((oldState) => !oldState);
|
||||
}
|
||||
};
|
||||
document.addEventListener("keydown", onKeyDown);
|
||||
|
||||
document.addEventListener("keydown", handleKeyDown);
|
||||
return () => {
|
||||
document.removeEventListener("keydown", onKeyDown);
|
||||
document.removeEventListener("keydown", handleKeyDown);
|
||||
};
|
||||
}, []);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
console.log(open)
|
||||
if (openModal) setOpen(true);
|
||||
}, [openModal]);
|
||||
}, [openModal, open]);
|
||||
|
||||
function processNonDynamicField() {
|
||||
postValidateCode(code)
|
||||
|
|
@ -171,14 +171,14 @@ export default function CodeAreaModal({
|
|||
};
|
||||
}, [error, setHeight]);
|
||||
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
setCode(value);
|
||||
}, [value, open]);
|
||||
console.log(selected)
|
||||
|
||||
return (
|
||||
<BaseModal open={open} setOpen={setOpen}>
|
||||
<BaseModal open={(open && selected)} setOpen={setOpen}>
|
||||
<BaseModal.Trigger>{children}</BaseModal.Trigger>
|
||||
<BaseModal.Header description={CODE_PROMPT_DIALOG_SUBTITLE}>
|
||||
<span className="pr-2"> {editCodeTitle} </span>
|
||||
|
|
|
|||
|
|
@ -97,10 +97,6 @@ export default function NodeToolbarComponent({
|
|||
(state) => state.handleModalWShortcut
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
setOpenModal(openCodeModalWShortcut);
|
||||
}, [openCodeModalWShortcut, handleModalWShortcut]);
|
||||
|
||||
const setLastCopiedSelection = useFlowStore(
|
||||
(state) => state.setLastCopiedSelection
|
||||
);
|
||||
|
|
@ -217,6 +213,8 @@ export default function NodeToolbarComponent({
|
|||
const [openModal, setOpenModal] = useState(false);
|
||||
const hasCode = Object.keys(data.node!.template).includes("code");
|
||||
|
||||
console.log((selected && openModal))
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="w-26 h-10">
|
||||
|
|
@ -231,8 +229,9 @@ export default function NodeToolbarComponent({
|
|||
data-testid="code-button-modal"
|
||||
>
|
||||
<div className="hidden">
|
||||
<CodeAreaComponent
|
||||
openModal={openModal}
|
||||
{selected && (
|
||||
<CodeAreaComponent
|
||||
openModal={(openModal || selected)}
|
||||
readonly={
|
||||
data.node?.flow && data.node.template[name].dynamic
|
||||
? true
|
||||
|
|
@ -245,7 +244,9 @@ export default function NodeToolbarComponent({
|
|||
value={data.node?.template[name].value ?? ""}
|
||||
onChange={handleOnNewValue}
|
||||
id={"code-input-node-toolbar-" + name}
|
||||
/>
|
||||
selected={selected}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<IconComponent name="TerminalSquare" className="h-4 w-4" />
|
||||
</button>
|
||||
|
|
|
|||
15
src/frontend/src/stores/shortcuts.ts
Normal file
15
src/frontend/src/stores/shortcuts.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { create } from "zustand";
|
||||
import { shortcutsStoreType } from "../types/store";
|
||||
|
||||
export const useShortcutsStore = create<shortcutsStoreType>((set, get) => ({
|
||||
openCodeModalWShortcut: false,
|
||||
handleModalWShortcut: (modal) => {
|
||||
switch (modal) {
|
||||
case "code":
|
||||
set({
|
||||
openCodeModalWShortcut: !get().openCodeModalWShortcut,
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
|
@ -113,6 +113,7 @@ export type CodeAreaComponentType = {
|
|||
id?: string;
|
||||
readonly?: boolean;
|
||||
openModal?: boolean;
|
||||
selected?: boolean;
|
||||
};
|
||||
|
||||
export type FileComponentType = {
|
||||
|
|
@ -519,6 +520,7 @@ export type codeAreaModalPropsType = {
|
|||
dynamic?: boolean;
|
||||
readonly?: boolean;
|
||||
openModal?: boolean;
|
||||
selected?: boolean;
|
||||
};
|
||||
|
||||
export type chatMessagePropsType = {
|
||||
|
|
|
|||
|
|
@ -18,3 +18,8 @@ export type StoreComponentResponse = {
|
|||
authorized: boolean;
|
||||
results: storeComponent[];
|
||||
};
|
||||
|
||||
export type shortcutsStoreType = {
|
||||
openCodeModalWShortcut: boolean;
|
||||
handleModalWShortcut: (str: string) => void;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue