Compare commits

..

4 Commits

Author SHA1 Message Date
H0llyW00dzZ
74a87c5692 Merge 138548ad45 into 48469bd8ca 2025-03-23 09:30:55 +08: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
3 changed files with 26 additions and 26 deletions

View File

@@ -40,12 +40,13 @@ English / [简体中文](./README_CN.md)
</div>
## 🥳 Cheer for NextChat iOS Version Online!
> [ 👉 Click Here Install Now](https://apps.apple.com/us/app/nextchat-ai/id6743085599)
![Github iOS Image](https://github.com/user-attachments/assets/e0aa334f-4c13-4dc9-8310-e3b09fa4b9f3)
## 🥳 Cheer for DeepSeek, China's AI star!
> Purpose-Built UI for DeepSeek Reasoner Model
<img src="https://github.com/user-attachments/assets/f3952210-3af1-4dc0-9b81-40eaa4847d9a"/>
## 🫣 NextChat Support MCP !
> Before build, please set env ENABLE_MCP=true

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>) => {

View File

@@ -417,14 +417,6 @@ export const KnowledgeCutOffDate: Record<string, string> = {
"gpt-4-turbo": "2023-12",
"gpt-4-turbo-2024-04-09": "2023-12",
"gpt-4-turbo-preview": "2023-12",
"gpt-4.1": "2024-06",
"gpt-4.1-2025-04-14": "2024-06",
"gpt-4.1-mini": "2024-06",
"gpt-4.1-mini-2025-04-14": "2024-06",
"gpt-4.1-nano": "2024-06",
"gpt-4.1-nano-2025-04-14": "2024-06",
"gpt-4.5-preview": "2023-10",
"gpt-4.5-preview-2025-02-27": "2023-10",
"gpt-4o": "2023-10",
"gpt-4o-2024-05-13": "2023-10",
"gpt-4o-2024-08-06": "2023-10",
@@ -466,7 +458,6 @@ export const DEFAULT_TTS_VOICES = [
export const VISION_MODEL_REGEXES = [
/vision/,
/gpt-4o/,
/gpt-4\.1/,
/claude-3/,
/gemini-1\.5/,
/gemini-exp/,
@@ -494,14 +485,6 @@ const openaiModels = [
"gpt-4-32k-0613",
"gpt-4-turbo",
"gpt-4-turbo-preview",
"gpt-4.1",
"gpt-4.1-2025-04-14",
"gpt-4.1-mini",
"gpt-4.1-mini-2025-04-14",
"gpt-4.1-nano",
"gpt-4.1-nano-2025-04-14",
"gpt-4.5-preview",
"gpt-4.5-preview-2025-02-27",
"gpt-4o",
"gpt-4o-2024-05-13",
"gpt-4o-2024-08-06",