|
175 | 175 | let chatFiles = []; |
176 | 176 | let files = []; |
177 | 177 | let params = {}; |
| 178 | + let oldParams = {}; |
| 179 | + let oldChatFiles = []; |
| 180 | + let controlsSaveTimer: ReturnType<typeof setTimeout> | null = null; |
| 181 | +
|
| 182 | + $: if (!equal(params, oldParams) || !equal(chatFiles, oldChatFiles)) { |
| 183 | + oldParams = structuredClone(params); |
| 184 | + oldChatFiles = structuredClone(chatFiles); |
| 185 | + if (!loading && !$temporaryChatEnabled && $chatId) { |
| 186 | + clearTimeout(controlsSaveTimer); |
| 187 | + controlsSaveTimer = setTimeout(() => { |
| 188 | + controlsSaveTimer = null; |
| 189 | + saveControlsHandler().catch((err) => { |
| 190 | + console.error('[saveControlsHandler]', err); |
| 191 | + toast.error($i18n.t('Failed to save chat controls')); |
| 192 | + }); |
| 193 | + }, 400); |
| 194 | + } |
| 195 | + } |
178 | 196 |
|
179 | 197 | $: if (chatIdProp) { |
180 | 198 | navigateHandler(); |
|
187 | 205 | updateLastReadAt($chatId); |
188 | 206 | } |
189 | 207 |
|
| 208 | + if (controlsSaveTimer !== null) { |
| 209 | + clearTimeout(controlsSaveTimer); |
| 210 | + controlsSaveTimer = null; |
| 211 | + await saveControlsHandler().catch((err) => console.error('[saveControlsHandler]', err)); |
| 212 | + } |
| 213 | +
|
190 | 214 | loading = true; |
191 | 215 |
|
192 | 216 | prompt = ''; |
|
821 | 845 |
|
822 | 846 | return () => { |
823 | 847 | try { |
| 848 | + if (controlsSaveTimer !== null) { |
| 849 | + clearTimeout(controlsSaveTimer); |
| 850 | + controlsSaveTimer = null; |
| 851 | + saveControlsHandler().catch((err) => console.error('[saveControlsHandler]', err)); |
| 852 | + } |
824 | 853 | if (chatIdProp && !$temporaryChatEnabled) { |
825 | 854 | updateLastReadAt(chatIdProp); |
826 | 855 | } |
|
2716 | 2745 | return _chatId; |
2717 | 2746 | }; |
2718 | 2747 |
|
| 2748 | + const saveControlsHandler = async () => { |
| 2749 | + const _chatId = $chatId; |
| 2750 | + if (!_chatId || $temporaryChatEnabled || loading) return; |
| 2751 | + await updateChatById(localStorage.token, _chatId, { |
| 2752 | + params: params, |
| 2753 | + files: chatFiles |
| 2754 | + }); |
| 2755 | + }; |
| 2756 | +
|
2719 | 2757 | const saveChatHandler = async (_chatId, history) => { |
2720 | 2758 | if ($chatId == _chatId) { |
2721 | 2759 | if (!$temporaryChatEnabled) { |
|
0 commit comments