Feat: add shortcut to minimize/expand a node (ctrl Q)
This commit is contained in:
parent
5facaac995
commit
0e9910b666
6 changed files with 34 additions and 4 deletions
|
|
@ -16,6 +16,7 @@ export default function CodeAreaComponent({
|
||||||
readonly = false,
|
readonly = false,
|
||||||
openModal,
|
openModal,
|
||||||
selected,
|
selected,
|
||||||
|
setOpenModal,
|
||||||
}: CodeAreaComponentType) {
|
}: CodeAreaComponentType) {
|
||||||
const [myValue, setMyValue] = useState(
|
const [myValue, setMyValue] = useState(
|
||||||
typeof value == "string" ? value : JSON.stringify(value)
|
typeof value == "string" ? value : JSON.stringify(value)
|
||||||
|
|
@ -36,6 +37,7 @@ export default function CodeAreaComponent({
|
||||||
<CodeAreaModal
|
<CodeAreaModal
|
||||||
selected={selected}
|
selected={selected}
|
||||||
openModal={openModal}
|
openModal={openModal}
|
||||||
|
setOpenModal={setOpenModal}
|
||||||
readonly={readonly}
|
readonly={readonly}
|
||||||
dynamic={dynamic}
|
dynamic={dynamic}
|
||||||
value={myValue}
|
value={myValue}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ const SelectContent = React.forwardRef<
|
||||||
<SelectPrimitive.Content
|
<SelectPrimitive.Content
|
||||||
ref={ref}
|
ref={ref}
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
"relative z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
||||||
position === "popper" &&
|
position === "popper" &&
|
||||||
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
||||||
className
|
className
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ function ConfirmationModal({
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BaseModal size={size} open={modalOpen} setOpen={setModalOpen}>
|
<BaseModal size={size} open={open} setOpen={setModalOpen}>
|
||||||
<BaseModal.Trigger>{triggerChild}</BaseModal.Trigger>
|
<BaseModal.Trigger>{triggerChild}</BaseModal.Trigger>
|
||||||
<BaseModal.Header description={titleHeader ?? null}>
|
<BaseModal.Header description={titleHeader ?? null}>
|
||||||
<span className="pr-2">{title}</span>
|
<span className="pr-2">{title}</span>
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ export default function CodeAreaModal({
|
||||||
readonly = false,
|
readonly = false,
|
||||||
openModal,
|
openModal,
|
||||||
selected,
|
selected,
|
||||||
|
setOpenModal,
|
||||||
}: codeAreaModalPropsType): JSX.Element {
|
}: codeAreaModalPropsType): JSX.Element {
|
||||||
const [code, setCode] = useState(value);
|
const [code, setCode] = useState(value);
|
||||||
const dark = useDarkStore((state) => state.dark);
|
const dark = useDarkStore((state) => state.dark);
|
||||||
|
|
@ -50,6 +51,7 @@ export default function CodeAreaModal({
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const nodes = useFlowStore((state) => state.nodes);
|
const nodes = useFlowStore((state) => state.nodes);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// if nodeClass.template has more fields other than code and dynamic is true
|
// if nodeClass.template has more fields other than code and dynamic is true
|
||||||
// do not run handleClick
|
// do not run handleClick
|
||||||
|
|
|
||||||
|
|
@ -209,6 +209,24 @@ export default function NodeToolbarComponent({
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
function onKeyDown(event: KeyboardEvent) {
|
function onKeyDown(event: KeyboardEvent) {
|
||||||
|
if (
|
||||||
|
(selected && isMinimal) &&
|
||||||
|
(event.ctrlKey || event.metaKey) &&
|
||||||
|
event.key === "q"
|
||||||
|
) {
|
||||||
|
event.preventDefault();
|
||||||
|
setShowNode(data.showNode ?? true ? false : true);
|
||||||
|
unselectAll();
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
selected &&
|
||||||
|
(event.ctrlKey || event.metaKey) &&
|
||||||
|
event.shiftKey &&
|
||||||
|
event.key === "C"
|
||||||
|
) {
|
||||||
|
event.preventDefault();
|
||||||
|
setOpenModal(state => !state);
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
selected &&
|
selected &&
|
||||||
(event.ctrlKey || event.metaKey) &&
|
(event.ctrlKey || event.metaKey) &&
|
||||||
|
|
@ -270,6 +288,7 @@ export default function NodeToolbarComponent({
|
||||||
<div className="hidden">
|
<div className="hidden">
|
||||||
<CodeAreaComponent
|
<CodeAreaComponent
|
||||||
openModal={openModal}
|
openModal={openModal}
|
||||||
|
setOpenModal={setOpenModal}
|
||||||
readonly={
|
readonly={
|
||||||
data.node?.flow && data.node.template[name].dynamic
|
data.node?.flow && data.node.template[name].dynamic
|
||||||
? true
|
? true
|
||||||
|
|
@ -494,12 +513,17 @@ export default function NodeToolbarComponent({
|
||||||
{isMinimal && (
|
{isMinimal && (
|
||||||
<SelectItem value={"show"}>
|
<SelectItem value={"show"}>
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<IconComponent
|
<IconComponent
|
||||||
name={showNode ? "Minimize2" : "Maximize2"}
|
name={showNode ? "Minimize2" : "Maximize2"}
|
||||||
className="relative top-0.5 mr-2 h-4 w-4"
|
className="relative top-0.5 mr-2 h-4 w-4"
|
||||||
/>
|
/>
|
||||||
{showNode ? "Minimize" : "Expand"}
|
{showNode ? "Minimize" : "Expand"}
|
||||||
</div>
|
<IconComponent
|
||||||
|
name="Command"
|
||||||
|
className="absolute right-[1.25rem] top-[0.65em] h-3.5 w-3.5 stroke-2"
|
||||||
|
></IconComponent>
|
||||||
|
<span className="absolute right-2 top-[0.46em]">Q</span>
|
||||||
|
</div>
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
)}
|
)}
|
||||||
{isGroup && (
|
{isGroup && (
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ export type PromptAreaComponentType = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export type CodeAreaComponentType = {
|
export type CodeAreaComponentType = {
|
||||||
|
setOpenModal?: (bool: boolean) => void;
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
onChange: (value: string[] | string) => void;
|
onChange: (value: string[] | string) => void;
|
||||||
value: string;
|
value: string;
|
||||||
|
|
@ -513,6 +514,7 @@ export type modalHeaderType = {
|
||||||
|
|
||||||
export type codeAreaModalPropsType = {
|
export type codeAreaModalPropsType = {
|
||||||
setValue: (value: string) => void;
|
setValue: (value: string) => void;
|
||||||
|
setOpenModal?: (bool: boolean) => void;
|
||||||
value: string;
|
value: string;
|
||||||
nodeClass: APIClassType | undefined;
|
nodeClass: APIClassType | undefined;
|
||||||
setNodeClass: (Class: APIClassType, code?: string) => void | undefined;
|
setNodeClass: (Class: APIClassType, code?: string) => void | undefined;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue