Compare commits

...

4 Commits

Author SHA1 Message Date
H0llyW00dzZ
f1adbce160
Merge 138548ad45 into 557a2cce35 2025-08-04 10:41:43 +00:00
H0llyW00dzZ
138548ad45
Feat [Terminal] [Chats] enhance local storage
- [+] feat(chat.tsx): enhance local storage handling for chat input
2024-02-05 22:10:02 +07:00
H0llyW00dzZ
e05af75891
Fix [UI/UX] [Chat] [Front End] React Warning
- [+] refactor(chat.tsx): capture current input reference value for use in component unmount or dependencies change
2024-02-05 20:42:12 +07:00
H0llyW00dzZ
67ce78cac2
Improve [UI/UX] [Chat] [Front End] unfinished input
- [+] refactor(chat.tsx): improve unfinished input handling in chat component
- [+] feat(chat.tsx): add session id dependency to useEffect for better session handling
- [+] feat(chat.tsx): skip saving commands to local storage
2024-02-05 20:42:12 +07:00

View File

@ -1494,20 +1494,36 @@ function _Chat() {
// remember unfinished input
useEffect(() => {
// try to load from local storage
// Define the key for storing unfinished input based on the session ID.
const key = UNFINISHED_INPUT(session.id);
// Attempt to load unfinished input from local storage.
const mayBeUnfinishedInput = localStorage.getItem(key);
if (mayBeUnfinishedInput && userInput.length === 0) {
setUserInput(mayBeUnfinishedInput);
// Clear the unfinished input from local storage after loading it.
localStorage.removeItem(key);
}
const dom = inputRef.current;
// Capture the current value of the input reference.
const currentInputRef = inputRef.current;
// This function will be called when the component unmounts or dependencies change.
return () => {
localStorage.setItem(key, dom?.value ?? "");
// Save the current input to local storage only if it is not a command.
// Use the captured value from the input reference.
const currentInputValue = currentInputRef?.value ?? "";
// Save the input to local storage only if it's not empty and not a command.
if (currentInputValue && !currentInputValue.startsWith(ChatCommandPrefix)) {
localStorage.setItem(key, currentInputValue);
} else {
// If there's no value, ensure we don't create an empty key in local storage.
localStorage.removeItem(key);
}
};
// The effect should depend on the session ID to ensure it runs when the session changes.
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}, [session.id]);
const handlePaste = useCallback(
async (event: React.ClipboardEvent<HTMLTextAreaElement>) => {