🐛 fix(parameterComponent): import KeypairListComponent from correct path to fix compilation error

✨ feat(parameterComponent): add support for editing key-value pairs in the parameter component
🐛 fix(genericIconComponent): fix stroke width prop name to strokeWidth to fix SVG rendering issue
🐛 fix(keypairListComponent): import GenericModal from correct path to fix compilation error
✨ feat(keypairListComponent): add support for editing key-value pairs in the keypair list component
🐛 fix(editNodeModal): import KeypairListComponent from correct path to fix compilation error
✨ feat(editNodeModal): add support for editing key-value pairs in the edit node modal
🐛 fix(types): change value type in KeyPairListComponent to any to allow for any key-value pair
This commit is contained in:
Cristhian Zanforlin Lousa 2023-08-30 16:37:53 -03:00
commit 35322e7d55
5 changed files with 114 additions and 62 deletions

View file

@ -16,6 +16,7 @@ import InputComponent from "../../../../components/inputComponent";
import InputFileComponent from "../../../../components/inputFileComponent"; import InputFileComponent from "../../../../components/inputFileComponent";
import InputListComponent from "../../../../components/inputListComponent"; import InputListComponent from "../../../../components/inputListComponent";
import IntComponent from "../../../../components/intComponent"; import IntComponent from "../../../../components/intComponent";
import KeypairListComponent from "../../../../components/keypairListComponent";
import PromptAreaComponent from "../../../../components/promptComponent"; import PromptAreaComponent from "../../../../components/promptComponent";
import TextAreaComponent from "../../../../components/textAreaComponent"; import TextAreaComponent from "../../../../components/textAreaComponent";
import ToggleShadComponent from "../../../../components/toggleShadComponent"; import ToggleShadComponent from "../../../../components/toggleShadComponent";
@ -31,7 +32,6 @@ import {
nodeNames, nodeNames,
} from "../../../../utils/styleUtils"; } from "../../../../utils/styleUtils";
import { classNames, groupByFamily } from "../../../../utils/utils"; import { classNames, groupByFamily } from "../../../../utils/utils";
import KeypairListComponent from "../../../../components/keypairListComponent";
export default function ParameterComponent({ export default function ParameterComponent({
left, left,
@ -94,21 +94,44 @@ export default function ParameterComponent({
renderTooltips(); renderTooltips();
}; };
const [arrayOfObjects, setArrayOfObjects] = useState([ const [dict, setDict] = useState({
{ key1: "value1", key2: "value2" }, key1: "value1",
{ key3: "value3", key4: "value4" }, key2: "value2",
{ key5: "value5", key6: "value6" }, key3: "value3",
]) key4: "value4",
key5: "value5",
key6: "value6",
} as {});
const [dictArr, setDictArr] = useState([]);
useEffect(() => {
convertToArray(dict);
}, [dict]);
const handleOnNewValueTest = (newValue): void => { const convertToArray = (singleObject) => {
let newData = cloneDeep(arrayOfObjects); let arrConverted: any = [];
newData = newValue; for (const key in singleObject) {
setArrayOfObjects(newData); if (singleObject.hasOwnProperty(key)) {
const newObj = {};
newObj[key] = singleObject[key];
arrConverted.push(newObj);
}
}
setDictArr(arrConverted);
}; };
const convertToDict = (newValue): void => {
const flattenedObject = {};
for (const obj of newValue) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
flattenedObject[key] = obj[key];
}
}
}
let newData = cloneDeep(flattenedObject);
setDict(newData);
};
useEffect(() => { useEffect(() => {
if (name === "openai_api_base") console.log(info); if (name === "openai_api_base") console.log(info);
@ -225,6 +248,15 @@ export default function ParameterComponent({
type === "int") && type === "int") &&
!optionalHandle ? ( !optionalHandle ? (
<></> <></>
) : left === true && type === "str" ? (
<div className="mt-2 w-full">
<KeypairListComponent
disabled={disabled}
editNode={false}
value={dictArr}
onChange={convertToDict}
/>
</div>
) : ( ) : (
<ShadTooltip <ShadTooltip
styleClasses={"tooltip-fixed-width custom-scroll nowheel"} styleClasses={"tooltip-fixed-width custom-scroll nowheel"}
@ -358,20 +390,7 @@ export default function ParameterComponent({
onChange={handleOnNewValue} onChange={handleOnNewValue}
/> />
</div> </div>
) ) : (
: left === true && type === "keypair" ? (
<div className="mt-2 w-full">
<KeypairListComponent
disabled={disabled}
editNode={false}
value={
arrayOfObjects
}
onChange={handleOnNewValueTest}
/>
</div>
)
: (
<></> <></>
)} )}
</> </>

View file

@ -11,7 +11,7 @@ export default function IconComponent({
<TargetIcon <TargetIcon
className={className} className={className}
style={{ color: iconColor }} style={{ color: iconColor }}
stroke-width={1.5} strokeWidth={1.5}
/> />
); );
} }

View file

@ -2,6 +2,8 @@ import { useEffect } from "react";
import { KeyPairListComponent } from "../../types/components"; import { KeyPairListComponent } from "../../types/components";
import _ from "lodash"; import _ from "lodash";
import { TypeModal } from "../../constants/enums";
import GenericModal from "../../modals/genericModal";
import { classNames } from "../../utils/utils"; import { classNames } from "../../utils/utils";
import IconComponent from "../genericIconComponent"; import IconComponent from "../genericIconComponent";
import { Input } from "../ui/input"; import { Input } from "../ui/input";
@ -26,10 +28,10 @@ export default function KeypairListComponent({
onChange(newInputList); onChange(newInputList);
}; };
const handleChangeValue = (event, idx) => { const handleChangeValue = (newValue, idx) => {
const newInputList = _.cloneDeep(value); const newInputList = _.cloneDeep(value);
const key = Object.keys(newInputList[idx])[0]; const key = Object.keys(newInputList[idx])[0];
newInputList[idx][key] = event.target.value; newInputList[idx][key] = newValue;
onChange(newInputList); onChange(newInputList);
}; };
@ -58,20 +60,24 @@ export default function KeypairListComponent({
} }
}} }}
/> />
<GenericModal
type={TypeModal.TEXT}
value={obj[key]}
buttonText="Save"
modalTitle="Edit Value"
setValue={(value: string) => {
handleChangeValue(value, index);
}}
>
<Input <Input
disabled={disabled} disabled={true}
type="text" type="text"
value={obj[key]} value={obj[key]}
className={editNode ? "input-edit-node" : ""} className={editNode ? "input-edit-node cursor-pointer" : "cursor-pointer"}
placeholder="Type value..." placeholder="Click to input a value..."
onChange={(event) => handleChangeValue(event, index)}
onKeyDown={(e) => {
if (e.ctrlKey && e.key === "Backspace") {
e.preventDefault();
e.stopPropagation();
}
}}
/> />
</GenericModal>
{index === value.length - 1 ? ( {index === value.length - 1 ? (
<button <button
onClick={() => { onClick={() => {

View file

@ -79,16 +79,43 @@ const EditNodeModal = forwardRef(
setMyData(data); // reset data to what it is on node when opening modal setMyData(data); // reset data to what it is on node when opening modal
}, [modalOpen]); }, [modalOpen]);
const [arrayOfObjects, setArrayOfObjects] = useState([ const [dict, setDict] = useState({
{ key1: "value1", key2: "value2" }, key1: "value1",
{ key3: "value3", key4: "value4" }, key2: "value2",
{ key5: "value5", key6: "value6" }, key3: "value3",
]); key4: "value4",
key5: "value5",
key6: "value6",
} as {});
const [dictArr, setDictArr] = useState([]);
const handleOnNewValueTest = (newValue): void => { useEffect(() => {
let newData = cloneDeep(arrayOfObjects); convertToArray(dict);
newData = newValue; }, [dict]);
setArrayOfObjects(newData);
const convertToArray = (singleObject) => {
let arrConverted: any = [];
for (const key in singleObject) {
if (singleObject.hasOwnProperty(key)) {
const newObj = {};
newObj[key] = singleObject[key];
arrConverted.push(newObj);
}
}
setDictArr(arrConverted);
};
const convertToDict = (newValue): void => {
const flattenedObject = {};
for (const obj of newValue) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
flattenedObject[key] = obj[key];
}
}
}
let newData = cloneDeep(flattenedObject);
setDict(newData);
}; };
return ( return (
@ -112,7 +139,7 @@ const EditNodeModal = forwardRef(
className={classNames( className={classNames(
"edit-node-modal-box", "edit-node-modal-box",
nodeLength > limitScrollFieldsModal || nodeLength > limitScrollFieldsModal ||
nodeLength > arrayOfObjects.length nodeLength > dictArr.length
? "overflow-scroll overflow-x-hidden custom-scroll" ? "overflow-scroll overflow-x-hidden custom-scroll"
: "overflow-hidden" : "overflow-hidden"
)} )}
@ -180,6 +207,16 @@ const EditNodeModal = forwardRef(
handleOnNewValue(value, templateParam); handleOnNewValue(value, templateParam);
}} }}
/> />
) : myData.node?.template[templateParam]
.type === "str" ? (
<div className="mt-2 w-full">
<KeypairListComponent
disabled={disabled}
editNode={true}
value={dictArr}
onChange={convertToDict}
/>
</div>
) : myData.node.template[templateParam] ) : myData.node.template[templateParam]
.multiline ? ( .multiline ? (
<TextAreaComponent <TextAreaComponent
@ -350,16 +387,6 @@ const EditNodeModal = forwardRef(
}} }}
/> />
</div> </div>
) : myData.node?.template[templateParam].type ===
"keypair" ? (
<div className="mt-2 w-full">
<KeypairListComponent
disabled={disabled}
value={arrayOfObjects}
onChange={handleOnNewValueTest}
editNode={true}
/>
</div>
) : myData.node?.template[templateParam].type === ) : myData.node?.template[templateParam].type ===
"Any" ? ( "Any" ? (
"-" "-"

View file

@ -55,7 +55,7 @@ export type InputListComponentType = {
}; };
export type KeyPairListComponent = { export type KeyPairListComponent = {
value: any[]; value: any;
onChange: (value: string[]) => void; onChange: (value: string[]) => void;
disabled: boolean; disabled: boolean;
editNode?: boolean; editNode?: boolean;