From 239b08b56621510ae2e2f53f70e1acacbbdcb1c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A5=D0=B0=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=A0=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BC?= Date: Mon, 16 Mar 2026 15:22:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=B8?= =?UTF-8?q?=20=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Host/Controllers/ConfigController.cs | 2 ++ apps/server-net/src/Modules/Chats/Class1.cs | 6 ------ apps/server-net/src/Modules/Identity/Class1.cs | 6 ------ .../src/Shared/Knot.Shared.Infrastructure/Class1.cs | 6 ------ .../src/Shared/Knot.Shared.Kernel/Class1.cs | 6 ------ apps/web/src/components/EmojiPicker.tsx | 6 +++++- apps/web/src/components/MessageInput.tsx | 2 ++ apps/web/src/lib/api.ts | 4 ++++ apps/web/src/stores/authStore.ts | 11 ++++++----- 9 files changed, 19 insertions(+), 30 deletions(-) delete mode 100644 apps/server-net/src/Modules/Chats/Class1.cs delete mode 100644 apps/server-net/src/Modules/Identity/Class1.cs delete mode 100644 apps/server-net/src/Shared/Knot.Shared.Infrastructure/Class1.cs delete mode 100644 apps/server-net/src/Shared/Knot.Shared.Kernel/Class1.cs diff --git a/apps/server-net/src/Host/Controllers/ConfigController.cs b/apps/server-net/src/Host/Controllers/ConfigController.cs index c7d3a51..4261480 100644 --- a/apps/server-net/src/Host/Controllers/ConfigController.cs +++ b/apps/server-net/src/Host/Controllers/ConfigController.cs @@ -1,8 +1,10 @@ using Knot.Shared.Kernel.Configuration; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; namespace Host.Controllers; +[Authorize] [ApiController] [Route("api/[controller]")] public class ConfigController : ControllerBase diff --git a/apps/server-net/src/Modules/Chats/Class1.cs b/apps/server-net/src/Modules/Chats/Class1.cs deleted file mode 100644 index 362e391..0000000 --- a/apps/server-net/src/Modules/Chats/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Knot.Modules.Chats; - -public class Class1 -{ - -} diff --git a/apps/server-net/src/Modules/Identity/Class1.cs b/apps/server-net/src/Modules/Identity/Class1.cs deleted file mode 100644 index a8baf85..0000000 --- a/apps/server-net/src/Modules/Identity/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Knot.Modules.Identity; - -public class Class1 -{ - -} diff --git a/apps/server-net/src/Shared/Knot.Shared.Infrastructure/Class1.cs b/apps/server-net/src/Shared/Knot.Shared.Infrastructure/Class1.cs deleted file mode 100644 index 8f00c44..0000000 --- a/apps/server-net/src/Shared/Knot.Shared.Infrastructure/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Knot.Shared.Infrastructure; - -public class Class1 -{ - -} diff --git a/apps/server-net/src/Shared/Knot.Shared.Kernel/Class1.cs b/apps/server-net/src/Shared/Knot.Shared.Kernel/Class1.cs deleted file mode 100644 index bb20771..0000000 --- a/apps/server-net/src/Shared/Knot.Shared.Kernel/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Knot.Shared.Kernel; - -public class Class1 -{ - -} diff --git a/apps/web/src/components/EmojiPicker.tsx b/apps/web/src/components/EmojiPicker.tsx index 2467dff..5a1ef74 100644 --- a/apps/web/src/components/EmojiPicker.tsx +++ b/apps/web/src/components/EmojiPicker.tsx @@ -81,7 +81,11 @@ export default function EmojiPicker({ onSelect, onSelectGif, onClose }: EmojiPic }, [tab, klipyApiKey, klipyCustomerId]); const searchGifs = useCallback((q: string) => { - if (!klipyApiKey || !q.trim()) { setGifs([]); return; } + if (!klipyApiKey || !q.trim()) { + setGifs([]); + setGifLoading(false); + return; + } setGifLoading(true); fetch(`https://api.klipy.com/api/v1/${klipyApiKey}/gifs/search?page=1&per_page=30&q=${encodeURIComponent(q)}&customer_id=${klipyCustomerId}`) .then(async (r) => { diff --git a/apps/web/src/components/MessageInput.tsx b/apps/web/src/components/MessageInput.tsx index b080c2d..337bd61 100644 --- a/apps/web/src/components/MessageInput.tsx +++ b/apps/web/src/components/MessageInput.tsx @@ -419,6 +419,7 @@ export default function MessageInput({ chatId }: MessageInputProps) { fileSize: result.size }], replyToId: replyTo?.id || null, + quote: replyTo?.quote || null, }); setReplyTo(null); } @@ -882,6 +883,7 @@ export default function MessageInput({ chatId }: MessageInputProps) { fileSize: 0, }], replyToId: replyTo?.id || null, + quote: replyTo?.quote || null, }); setReplyTo(null); } diff --git a/apps/web/src/lib/api.ts b/apps/web/src/lib/api.ts index f1432d5..dd47d83 100644 --- a/apps/web/src/lib/api.ts +++ b/apps/web/src/lib/api.ts @@ -64,6 +64,10 @@ class ApiClient { return this.request<{ user: User }>('/auth/me'); } + async getConfig() { + return this.request('/config'); + } + // \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 async searchUsers(query: string) { return this.request(`/users/search?q=${encodeURIComponent(query)}`); diff --git a/apps/web/src/stores/authStore.ts b/apps/web/src/stores/authStore.ts index 2e8df1d..2c18c5b 100644 --- a/apps/web/src/stores/authStore.ts +++ b/apps/web/src/stores/authStore.ts @@ -25,11 +25,10 @@ export const useAuthStore = create((set, get) => ({ config: null, fetchConfig: async () => { + if (!get().token) return; try { - const res = await fetch('/api/config'); - if (res.ok) { - set({ config: await res.json() }); - } + const res = await api.getConfig(); + set({ config: res }); } catch {} }, @@ -41,6 +40,7 @@ export const useAuthStore = create((set, get) => ({ api.setToken(token); connectSocket(token); set({ token, user, isLoading: false }); + await get().fetchConfig(); } catch (err: unknown) { const msg = err instanceof Error ? err.message : String(err); set({ error: msg, isLoading: false }); @@ -56,6 +56,7 @@ export const useAuthStore = create((set, get) => ({ api.setToken(token); connectSocket(token); set({ token, user, isLoading: false }); + await get().fetchConfig(); } catch (err: unknown) { const msg = err instanceof Error ? err.message : String(err); set({ error: msg, isLoading: false }); @@ -71,7 +72,6 @@ export const useAuthStore = create((set, get) => ({ }, checkAuth: async () => { - get().fetchConfig(); const token = get().token; if (!token) { set({ isLoading: false }); @@ -86,6 +86,7 @@ export const useAuthStore = create((set, get) => ({ const { user } = await api.getMe(); connectSocket(token); set({ user, isLoading: false }); + await get().fetchConfig(); return; } catch (err) { lastError = err;