diff --git a/platforms/pictique/client/src/routes/(protected)/messages/+page.svelte b/platforms/pictique/client/src/routes/(protected)/messages/+page.svelte index dba9abb66..6378d10c7 100644 --- a/platforms/pictique/client/src/routes/(protected)/messages/+page.svelte +++ b/platforms/pictique/client/src/routes/(protected)/messages/+page.svelte @@ -18,6 +18,7 @@ let openNewGroupModal = $state(false); let searchValue = $state(''); let groupName = $state(''); + let isStartingChat = $state(false); let debounceTimer: NodeJS.Timeout; // Pagination and loading state @@ -189,45 +190,34 @@ }, 300); } - async function createChat() { - if (selectedMembers.length === 0) return; + function openNewMessageModal() { + searchValue = ''; + searchResults.set([]); + openNewChatModal = true; + } + + async function startDirectMessage(member: { id: string; name?: string; handle?: string }) { + if (isStartingChat) return; + isStartingChat = true; try { - if (selectedMembers.length === 1) { - // Create direct message - await apiClient.post('/api/chats', { - name: allMembers.find((m) => m.id === selectedMembers[0])?.name ?? 'New Chat', - participantIds: [selectedMembers[0]] - }); - } else { - // Create group chat - const groupMembers = allMembers.filter((m) => m.id === selectedMembers[0]); - const groupName = groupMembers.map((m) => m.name ?? m.handle ?? m.ename).join(', '); - - // Create group chat via API - await apiClient.post('/api/chats', { - name: groupName, - participantIds: selectedMembers, - isGroup: true - }); - } + // Omit `name` so the API treats this as a 1-to-1 chat and returns the + // existing conversation between these two users instead of duplicating it. + const { data: chat } = await apiClient.post('/api/chats', { + participantIds: [member.id] + }); - // Navigate to the new chat instead of hard refresh - if (selectedMembers.length === 1) { - // For direct messages, we need to find the chat ID - // For now, redirect to messages and let the user click on the new chat - goto('/messages'); - } else { - // For group chats, redirect to messages - goto('/messages'); - } - } catch (err) { - console.error('Failed to create chat:', err); - alert('Failed to create chat. Please try again.'); - } finally { + heading.set(member.name ?? member.handle ?? 'Chat'); openNewChatModal = false; - selectedMembers = []; searchValue = ''; + searchResults.set([]); + + goto(`/messages/${chat.id}`); + } catch (err) { + console.error('Failed to start chat:', err); + alert('Failed to start chat. Please try again.'); + } finally { + isStartingChat = false; } } @@ -261,16 +251,26 @@
- +
+ + +
{#if isLoading && messages.length === 0}
@@ -328,7 +328,7 @@ class="w-[90vw] max-w-md rounded-3xl border border-gray-200 bg-white p-6 shadow-xl" >
-

Start a New Chat

+

New Message

{/each}
{/if} - - {#if selectedMembers.length > 0} -
-

- {selectedMembers.length === 1 - ? 'Direct message will be created' - : `Group chat with ${selectedMembers.length} members will be created`} -

-
- {/if} - -
- - -