Adding scrollbar on overflow itens modal (#400)
Description: This pull request proposes the addition of a scrollbar to the modal window containing advanced settings when the number of input fields exceeds the limit of the screen. This enhancement aims to improve user experience by providing a convenient way to access all settings, even when the available screen space is limited. The number of inputs in the screen is limited by a variable on Utils that can be easily changed in the future if It's needed.
This commit is contained in:
commit
77c00c7894
3 changed files with 45 additions and 5 deletions
|
|
@ -12,7 +12,15 @@ import PromptAreaComponent from "../../../../components/promptComponent";
|
||||||
import CodeAreaComponent from "../../../../components/codeAreaComponent";
|
import CodeAreaComponent from "../../../../components/codeAreaComponent";
|
||||||
import { classNames } from "../../../../utils";
|
import { classNames } from "../../../../utils";
|
||||||
|
|
||||||
export default function ModalField({ data, title, required, id, name, type }) {
|
export default function ModalField({
|
||||||
|
data,
|
||||||
|
title,
|
||||||
|
required,
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
index,
|
||||||
|
}) {
|
||||||
const { save } = useContext(TabsContext);
|
const { save } = useContext(TabsContext);
|
||||||
const [enabled, setEnabled] = useState(
|
const [enabled, setEnabled] = useState(
|
||||||
data.node.template[name]?.value ?? false
|
data.node.template[name]?.value ?? false
|
||||||
|
|
@ -30,7 +38,17 @@ export default function ModalField({ data, title, required, id, name, type }) {
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
"flex flex-row w-full items-center justify-between",
|
"flex flex-row w-full items-center justify-between",
|
||||||
display ? "" : "hidden"
|
display ? "" : "hidden",
|
||||||
|
Object.keys(data.node.template).filter(
|
||||||
|
(t) =>
|
||||||
|
t.charAt(0) !== "_" &&
|
||||||
|
data.node.template[t].advanced &&
|
||||||
|
data.node.template[t].show
|
||||||
|
).length -
|
||||||
|
1 ===
|
||||||
|
index
|
||||||
|
? "pb-4"
|
||||||
|
: ""
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{display && (
|
{display && (
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,14 @@ import { XMarkIcon } from "@heroicons/react/24/outline";
|
||||||
import { Fragment, useContext, useRef, useState } from "react";
|
import { Fragment, useContext, useRef, useState } from "react";
|
||||||
import { PopUpContext } from "../../contexts/popUpContext";
|
import { PopUpContext } from "../../contexts/popUpContext";
|
||||||
import { NodeDataType } from "../../types/flow";
|
import { NodeDataType } from "../../types/flow";
|
||||||
import { nodeColors, nodeIcons, toNormalCase, toTitleCase } from "../../utils";
|
import {
|
||||||
|
classNames,
|
||||||
|
limitScrollFieldsModal,
|
||||||
|
nodeColors,
|
||||||
|
nodeIcons,
|
||||||
|
toNormalCase,
|
||||||
|
toTitleCase,
|
||||||
|
} from "../../utils";
|
||||||
import { typesContext } from "../../contexts/typesContext";
|
import { typesContext } from "../../contexts/typesContext";
|
||||||
import ModalField from "./components/ModalField";
|
import ModalField from "./components/ModalField";
|
||||||
|
|
||||||
|
|
@ -84,8 +91,20 @@ export default function NodeModal({ data }: { data: NodeDataType }) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="h-full w-full bg-gray-200 dark:bg-gray-900 p-4 gap-4 flex flex-row justify-center items-center">
|
<div className="h-full w-full bg-gray-200 dark:bg-gray-900 p-4 gap-4 flex flex-row justify-center items-center">
|
||||||
<div className="flex h-full w-full">
|
<div className="flex w-full h-[445px]">
|
||||||
<div className="overflow-hidden px-4 sm:p-4 w-full rounded-lg bg-white dark:bg-gray-800 shadow">
|
<div
|
||||||
|
className={classNames(
|
||||||
|
"px-4 sm:p-4 w-full rounded-lg bg-white dark:bg-gray-800 shadow",
|
||||||
|
Object.keys(data.node.template).filter(
|
||||||
|
(t) =>
|
||||||
|
t.charAt(0) !== "_" &&
|
||||||
|
data.node.template[t].advanced &&
|
||||||
|
data.node.template[t].show
|
||||||
|
).length > limitScrollFieldsModal
|
||||||
|
? "overflow-scroll overflow-x-hidden custom-scroll"
|
||||||
|
: "overflow-hidden"
|
||||||
|
)}
|
||||||
|
>
|
||||||
<div className="flex flex-col h-full gap-5">
|
<div className="flex flex-col h-full gap-5">
|
||||||
{Object.keys(data.node.template)
|
{Object.keys(data.node.template)
|
||||||
.filter(
|
.filter(
|
||||||
|
|
@ -116,6 +135,7 @@ export default function NodeModal({ data }: { data: NodeDataType }) {
|
||||||
}
|
}
|
||||||
name={t}
|
name={t}
|
||||||
type={data.node.template[t].type}
|
type={data.node.template[t].type}
|
||||||
|
index={idx}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ export function classNames(...classes: Array<string>) {
|
||||||
return classes.filter(Boolean).join(" ");
|
return classes.filter(Boolean).join(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const limitScrollFieldsModal = 7;
|
||||||
|
|
||||||
export enum TypeModal {
|
export enum TypeModal {
|
||||||
TEXT = 1,
|
TEXT = 1,
|
||||||
PROMPT = 2,
|
PROMPT = 2,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue