diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx
index 4a283ad..6f4c40c 100644
--- a/src/components/Settings.tsx
+++ b/src/components/Settings.tsx
@@ -1,7 +1,8 @@
import { themeChange } from "theme-change";
-import { useRef } from "react";
+import { useRef, useCallback } from "react";
import { useContext, useEffect, useState, Dispatch } from "react";
+import React from "react";
import { clearTotalCost, getTotalCost } from "@/utils/totalCost";
import { ChatStore, TemplateChatStore, TemplateTools } from "@/types/chatstore";
import { models } from "@/types/models";
@@ -179,46 +180,70 @@ const SelectModel = (props: { help: string }) => {
);
};
-const LongInput = (props: {
- field: "systemMessageContent" | "toolsString";
- label: string;
- help: string;
-}) => {
- const { chatStore, setChatStore } = useContext(AppChatStoreContext);
- return (
-
-
+const LongInput = React.memo(
+ (props: {
+ field: "systemMessageContent" | "toolsString";
+ label: string;
+ help: string;
+ }) => {
+ const { chatStore, setChatStore } = useContext(AppChatStoreContext);
+ const textareaRef = useRef(null);
+ const [localValue, setLocalValue] = useState(chatStore[props.field]);
-
- );
-};
+ // Update height when value changes
+ useEffect(() => {
+ if (textareaRef.current) {
+ autoHeight(textareaRef.current);
+ }
+ }, [localValue]);
+
+ // Sync local value with chatStore when it changes externally
+ useEffect(() => {
+ setLocalValue(chatStore[props.field]);
+ }, [chatStore[props.field]]);
+
+ const handleChange = (event: React.ChangeEvent) => {
+ setLocalValue(event.target.value);
+ };
+
+ const handleBlur = () => {
+ if (localValue !== chatStore[props.field]) {
+ chatStore[props.field] = localValue;
+ setChatStore({ ...chatStore });
+ }
+ };
+
+ return (
+
+
+
+
+
+ );
+ }
+);
const InputField = (props: {
field: