From 2611f0077b177ef79163b0884e868995ef565a03 Mon Sep 17 00:00:00 2001 From: gourav Date: Thu, 17 Jul 2025 21:41:45 +0530 Subject: [PATCH 01/11] feat: group --- .../src/lib/fragments/Group/Group.svelte | 59 +++++ platforms/pictique/src/lib/fragments/index.ts | 1 + .../(protected)/group/[id]/+page.svelte | 205 ++++++++++++++++++ .../routes/(protected)/messages/+page.svelte | 3 + 4 files changed, 268 insertions(+) create mode 100644 platforms/pictique/src/lib/fragments/Group/Group.svelte create mode 100644 platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte diff --git a/platforms/pictique/src/lib/fragments/Group/Group.svelte b/platforms/pictique/src/lib/fragments/Group/Group.svelte new file mode 100644 index 00000000..928de7ae --- /dev/null +++ b/platforms/pictique/src/lib/fragments/Group/Group.svelte @@ -0,0 +1,59 @@ + + + + + diff --git a/platforms/pictique/src/lib/fragments/index.ts b/platforms/pictique/src/lib/fragments/index.ts index abe4ed0e..bba6128a 100644 --- a/platforms/pictique/src/lib/fragments/index.ts +++ b/platforms/pictique/src/lib/fragments/index.ts @@ -17,3 +17,4 @@ export { default as Comment } from './Comment/Comment.svelte'; export { default as SettingsDeleteButton } from './SettingsDeleteButton/SettingsDeleteButton.svelte'; export { default as UserRequest } from './UserRequest/UserRequest.svelte'; export { default as UploadedPostView } from './UploadedPostView/UploadedPostView.svelte'; +export { default as Group } from "./Group/Group.svelte"; diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte new file mode 100644 index 00000000..d16f4341 --- /dev/null +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -0,0 +1,205 @@ + + +
+
+ +
+

{group.name}

+

{group.description}

+
+
+ +
+ +{#if showMembers} +
+ {#each group.members as member (member.id)} +
+
+ +
+ {member.name} + {#if member.role !== 'member'} + ({member.role}) + {/if} +
+
+ + {#if canManage(member)} +
(openMenuId = null)}> + + + {#if openMenuId === member.id} +
+
    + + {#if currentUserRole() === 'owner' && member.role === 'member'} + + +
  • promoteToAdmin(member.id)} + > + Make admin +
  • + {/if} + + +
  • removeMember(member.id)} + > + Remove member +
  • +
+
+ {/if} +
+ {/if} +
+ {/each} + + +
+{/if} + +
+
+ {#each messages as msg (msg.id)} + + {/each} +
+ + +
diff --git a/platforms/pictique/src/routes/(protected)/messages/+page.svelte b/platforms/pictique/src/routes/(protected)/messages/+page.svelte index 892c4269..854bab27 100644 --- a/platforms/pictique/src/routes/(protected)/messages/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/messages/+page.svelte @@ -4,6 +4,7 @@ import { onMount } from 'svelte'; import { apiClient } from '$lib/utils/axios'; import { heading } from '../../store'; + import Group from '$lib/fragments/Group/Group.svelte'; let messages = $state([]); @@ -45,5 +46,7 @@ You don't have any messages yet, please start a Direct Message with Someone by searching their name + + goto("/group/123")}/> {/if} From d70a8b40f1a91f19d3cf9cc0b45e3f5464cc2581 Mon Sep 17 00:00:00 2001 From: gourav Date: Thu, 17 Jul 2025 22:14:37 +0530 Subject: [PATCH 02/11] fix: separate page added for members --- .../(protected)/group/[id]/+page.svelte | 104 +------------- .../group/[id]/members/+page.svelte | 129 ++++++++++++++++++ 2 files changed, 134 insertions(+), 99 deletions(-) create mode 100644 platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index d16f4341..07abd324 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -2,13 +2,14 @@ import { onMount } from 'svelte'; import { ChatMessage, MessageInput } from '$lib/fragments'; import { Avatar, Button } from '$lib/ui'; - import { clickOutside } from '$lib/utils'; + import { goto } from '$app/navigation'; + import { page } from '$app/state'; let messagesContainer: HTMLDivElement; let messageValue = $state(''); - let showMembers = $state(false); let userId = 'user-1'; + let id = page.params.id; let group = { id: 'group-123', @@ -66,42 +67,6 @@ messageValue = ''; setTimeout(scrollToBottom, 0); } - - function currentUserRole() { - return group.members.find((m) => m.id === userId)?.role; - } - - function canManage(member: { id?: string; name?: string; avatar?: string; role: any; }) { - const current = currentUserRole(); - if (member.role === 'owner') return false; - if (current === 'owner') return true; - if (current === 'admin' && member.role === 'member') return true; - return false; - } - - function promoteToAdmin(memberId: string) { - const m = group.members.find((m) => m.id === memberId); - if (m && m.role === 'member') m.role = 'admin'; - openMenuId = null; - } - - function removeMember(memberId: string) { - group.members = group.members.filter((m) => m.id !== memberId || m.role === 'owner'); - openMenuId = null; - } - - function addMember() { - const newId = `user-${Date.now()}`; - group.members = [ - ...group.members, - { - id: newId, - name: `New Member ${group.members.length + 1}`, - avatar: `https://i.pravatar.cc/150?u=${newId}`, - role: 'member' - } - ]; - }
@@ -117,72 +82,13 @@ size="sm" class="w-[max-content]" callback={() => { - showMembers = !showMembers; - openMenuId = null; + goto(`/group/${id}/members`) }} > - {showMembers ? 'Hide Members' : 'View Members'} + View Members
-{#if showMembers} -
- {#each group.members as member (member.id)} -
-
- -
- {member.name} - {#if member.role !== 'member'} - ({member.role}) - {/if} -
-
- - {#if canManage(member)} -
(openMenuId = null)}> - - - {#if openMenuId === member.id} -
-
    - - {#if currentUserRole() === 'owner' && member.role === 'member'} - - -
  • promoteToAdmin(member.id)} - > - Make admin -
  • - {/if} - - -
  • removeMember(member.id)} - > - Remove member -
  • -
-
- {/if} -
- {/if} -
- {/each} - - -
-{/if} -
{#each messages as msg (msg.id)} diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte new file mode 100644 index 00000000..3a441f84 --- /dev/null +++ b/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte @@ -0,0 +1,129 @@ + + +
+
+
+ +
+

{group.name}

+

{group.description}

+
+
+ +
+ {#each group.members as member (member.id)} +
+
+ +
+

{member.name}

+ {#if member.role !== 'member'} +

{member.role}

+ {/if} +
+
+ + {#if canManage(member)} +
(openMenuId = null)}> + + + {#if openMenuId === member.id} +
+ +
    + {#if currentUserRole() === 'owner' && member.role === 'member'} + + +
  • promoteToAdmin(member.id)} + > + Make admin +
  • + {/if} + + +
  • removeMember(member.id)} + > + Remove member +
  • +
+
+ {/if} +
+ {/if} +
+ {/each} +
+
+ +
+ +
+
From 5202216942beb9fa3291d3619c578a2c71d9a880 Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 12:22:11 +0530 Subject: [PATCH 03/11] fix: added a edit modal --- .../(protected)/group/[id]/+page.svelte | 105 +++++++++++++++--- .../group/[id]/members/+page.svelte | 2 +- 2 files changed, 93 insertions(+), 14 deletions(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index 07abd324..e96875ac 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -1,12 +1,17 @@ +
@@ -77,18 +111,26 @@

{group.description}

- +
+ + +
+
{#each messages as msg (msg.id)} @@ -109,3 +151,40 @@ {handleSend} />
+ + openEditDialog = false} onclose={() => (openEditDialog = false)} class="absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-4" > +
+
+ { + groupImageDataUrl = ''; + groupImageFiles = undefined; + }} + /> + {#if groupImageDataUrl} + Group preview + {/if} +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte index 3a441f84..f351c05f 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/members/+page.svelte @@ -5,7 +5,7 @@ let groupId = page.params.id; - let userId = 'user-1'; // Simulated current user + let userId = 'user-1'; let group = $state({ id: groupId, From 0c50d7e5b55b42d99363d700c40412f3d74e59b5 Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 12:46:15 +0530 Subject: [PATCH 04/11] fix: responsiveness --- .../(protected)/group/[id]/+page.svelte | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index e96875ac..b52a94a0 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -3,20 +3,21 @@ import { ChatMessage, MessageInput } from '$lib/fragments'; import { Avatar, Button, Input, Label } from '$lib/ui'; import { InputFile } from '$lib/fragments'; - import { HugeiconsFreeIcons, Edit01FreeIcons } from '@hugeicons/core-free-icons'; + import { Edit01FreeIcons } from '@hugeicons/core-free-icons'; + import {HugeiconsIcon} from "@hugeicons/svelte"; import { goto } from '$app/navigation'; import { page } from '$app/state'; import Settings from '$lib/icons/Settings.svelte'; import { clickOutside } from '$lib/utils'; + import VerticalDots from '$lib/icons/VerticalDots.svelte'; let messagesContainer: HTMLDivElement; let messageValue = $state(''); - let openMenuId = $state(null); let userId = 'user-1'; let id = page.params.id; - let group = { + let group = $state({ id: 'group-123', name: 'Design Team', avatar: 'https://i.pravatar.cc/150?img=15', @@ -26,7 +27,7 @@ { id: 'user-2', name: 'Bob', avatar: 'https://i.pravatar.cc/150?img=2', role: 'admin' }, { id: 'user-3', name: 'Charlie', avatar: 'https://i.pravatar.cc/150?img=3', role: 'member' } ] - }; + }); let messages = $state([ { @@ -71,7 +72,6 @@ setTimeout(scrollToBottom, 0); } - // Edit Dialog state and logic let openEditDialog = $state(false); let groupName = $state(group.name); let groupDescription = $state(group.description); @@ -102,8 +102,7 @@ } - -
+
@@ -124,13 +123,13 @@
-
{#each messages as msg (msg.id)} @@ -152,7 +151,7 @@ />
- openEditDialog = false} onclose={() => (openEditDialog = false)} class="absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-4" > + openEditDialog = false} onclose={() => (openEditDialog = false)} class="w-full max-w-[300px] z-50 absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-2 border border-gray-100 rounded-4xl" >
{#if groupImageDataUrl} - Group preview {/if}
From d3d2485b70eab5843c52d223e1fc6d96e5a717ba Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 12:46:31 +0530 Subject: [PATCH 05/11] fix: responsiveness --- .../pictique/src/routes/(protected)/group/[id]/+page.svelte | 3 --- 1 file changed, 3 deletions(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index b52a94a0..d1a43573 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -3,13 +3,10 @@ import { ChatMessage, MessageInput } from '$lib/fragments'; import { Avatar, Button, Input, Label } from '$lib/ui'; import { InputFile } from '$lib/fragments'; - import { Edit01FreeIcons } from '@hugeicons/core-free-icons'; - import {HugeiconsIcon} from "@hugeicons/svelte"; import { goto } from '$app/navigation'; import { page } from '$app/state'; import Settings from '$lib/icons/Settings.svelte'; import { clickOutside } from '$lib/utils'; - import VerticalDots from '$lib/icons/VerticalDots.svelte'; let messagesContainer: HTMLDivElement; let messageValue = $state(''); From be3ec6f4e578e3a9941595a53dc64b49e5941390 Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 13:10:58 +0530 Subject: [PATCH 06/11] fix: role based editing --- .../(protected)/group/[id]/+page.svelte | 91 +++++++++++-------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index d1a43573..a311b583 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -1,8 +1,7 @@
@@ -118,12 +116,14 @@ > View Members - + {#if canEdit} + + {/if}
@@ -148,40 +148,55 @@ /> - openEditDialog = false} onclose={() => (openEditDialog = false)} class="w-full max-w-[300px] z-50 absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-2 border border-gray-100 rounded-4xl" > + (openEditDialog = false)} + onclose={() => (openEditDialog = false)} + class="w-[90vw] md:max-w-[30vw] z-50 absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-4 border border-gray-400 rounded-3xl bg-white shadow-xl" +>
- { - groupImageDataUrl = ''; - groupImageFiles = undefined; - }} - /> - {#if groupImageDataUrl} - { + groupImageDataUrl = ''; + groupImageFiles = undefined; + }} /> {/if} + {#if groupImageDataUrl} + + {/if}
- + {#if canEdit} + + {:else} +

{group.name}

+ {/if}
- + {#if canEdit} + + {:else} +

{group.description}

+ {/if}

- +
+ + {#if canEdit} + + {/if} +
From cf4617dc585e0b71a66ea9fe06f7372f587ea81c Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 13:20:10 +0530 Subject: [PATCH 07/11] fix: user role based edit in group info --- .../src/routes/(protected)/group/[id]/+page.svelte | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index a311b583..1ee3f300 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -116,14 +116,12 @@ > View Members - {#if canEdit} - - {/if} + From 25613d5e8569951984d69a8baf992a8db10d010e Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 13:37:11 +0530 Subject: [PATCH 08/11] fix: edit image with pencil icon --- .../(protected)/group/[id]/+page.svelte | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index 1ee3f300..71d3fe53 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -6,6 +6,8 @@ import { page } from '$app/state'; import Settings from '$lib/icons/Settings.svelte'; import { clickOutside } from '$lib/utils'; + import { Pen01FreeIcons } from '@hugeicons/core-free-icons'; + import {HugeiconsIcon} from "@hugeicons/svelte" let messagesContainer: HTMLDivElement; let messageValue = $state(''); @@ -153,21 +155,30 @@ class="w-[90vw] md:max-w-[30vw] z-50 absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-4 border border-gray-400 rounded-3xl bg-white shadow-xl" >
-
+ +
+ Group Avatar {#if canEdit} -
@@ -180,6 +191,7 @@ {/if}
+
{#if canEdit} @@ -190,6 +202,7 @@

+
{#if canEdit} @@ -198,3 +211,4 @@
+ From a0ff772a938ff9d689cf079649c7c52a87fad1f6 Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 14:12:37 +0530 Subject: [PATCH 09/11] fix: added a text area --- .../src/lib/fragments/Group/Group.svelte | 10 +- .../SettingsNavigationButton.svelte | 2 +- platforms/pictique/src/lib/fragments/index.ts | 2 +- .../pictique/src/lib/store/store.svelte.ts | 1 - platforms/pictique/src/lib/stores/posts.ts | 106 +++++++++--------- platforms/pictique/src/lib/types.ts | 66 +++++------ .../(protected)/group/[id]/+page.svelte | 9 +- 7 files changed, 94 insertions(+), 102 deletions(-) diff --git a/platforms/pictique/src/lib/fragments/Group/Group.svelte b/platforms/pictique/src/lib/fragments/Group/Group.svelte index 928de7ae..d4967445 100644 --- a/platforms/pictique/src/lib/fragments/Group/Group.svelte +++ b/platforms/pictique/src/lib/fragments/Group/Group.svelte @@ -10,19 +10,13 @@ callback: () => void; } - const { - avatar, - name, - unread = false, - callback, - ...restProps - }: IGroupProps = $props(); + const { avatar, name, unread = false, callback, ...restProps }: IGroupProps = $props(); + + + {#if messages.length > 0} +

Messages

{#each messages as message} {/each} - {:else} -
- You don't have any messages yet, please start a Direct Message with Someone by searching - their name + {/if} + + {#if groups.length > 0} +

Groups

+ {#each groups as group} + goto(`/group/${group.id}`)} + /> + {/each} + {:else if messages.length === 0} +
+ You don't have any messages yet. Start a Direct Message by searching a name.
- - goto("/group/123")}/> {/if} + + (openNewChatModal = false)} + onclose={() => (openNewChatModal = false)} + class="w-[90vw] md:max-w-[40vw] z-50 absolute start-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] p-4 border border-gray-400 rounded-3xl bg-white shadow-xl" + > +
+

Start a New Chat

+ + handleSearch((e.target as HTMLInputElement).value)} + /> + + {#if $isSearching} +
Searching...
+ {:else if $searchError} +
{$searchError}
+ {/if} + +
+ {#each $searchResults.filter(m => m.id !== currentUserId) as member} + + {/each} +
+ +
+ + +
+
+
From de6a1b4c87cd4d50d8157badc25422b655e192ce Mon Sep 17 00:00:00 2001 From: gourav Date: Fri, 18 Jul 2025 15:30:32 +0530 Subject: [PATCH 11/11] feat: new group functionality and textarea fixed --- .../pictique/src/routes/(protected)/group/[id]/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte index 53a24267..cabebf45 100644 --- a/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte +++ b/platforms/pictique/src/routes/(protected)/group/[id]/+page.svelte @@ -194,7 +194,7 @@ {#if canEdit}