From b097c06656fe3dcab50ed6886e9963620449e065 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 16 Dec 2024 12:01:22 +0530 Subject: [PATCH 1/3] fix: simplify draft checks. --- .../message-[message]/emailMessage.svelte | 18 +++++++----------- .../message-[message]/updateTargets.svelte | 12 +++++++----- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/emailMessage.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/emailMessage.svelte index 6fcaad6d47..36c479683b 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/emailMessage.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/emailMessage.svelte @@ -60,25 +60,21 @@ subject === message.data.subject && content === message.data.content && html === ((message.data['html'] ?? false) as boolean); + + $: isDraft = message.status === 'draft';
- +
Message
- - + + Enable the HTML mode if your message contains HTML tags. diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte index 8c112fba95..c05bdce614 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -93,11 +93,13 @@ } } + $: isDraft = message.status === 'draft'; + $: disabled = symmetricDifference(targetIds, Object.keys(selectedTargetsById)).length === 0; - + Targets {@const sum = targetIds.length} @@ -106,7 +108,7 @@
Target
- {#if message.status == 'draft'} + {#if isDraft} + . +

+ + + {/if} +
+
From 11f15b1d4487a638b32517ca2d38ed5802cbffce Mon Sep 17 00:00:00 2001 From: Darshan Date: Tue, 28 Jan 2025 17:53:05 +0530 Subject: [PATCH 3/3] address comments: ui changes as per designs. --- .../messaging/message-[message]/+layout.ts | 11 +- .../messaging/message-[message]/+page.svelte | 7 +- .../message-[message]/recipients.svelte | 91 ---------------- .../message-[message]/updateTargets.svelte | 102 ++++++++++++++++-- 4 files changed, 103 insertions(+), 108 deletions(-) delete mode 100644 src/routes/(console)/project-[project]/messaging/message-[message]/recipients.svelte diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/+layout.ts b/src/routes/(console)/project-[project]/messaging/message-[message]/+layout.ts index 637631dd93..2d2cdb624c 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/+layout.ts +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/+layout.ts @@ -43,9 +43,14 @@ export const load: LayoutLoad = async ({ params, depends }) => { const messageRecipients: Record> = {}; const messageRecipientsPromise = Object.values(message.users).map((userId) => - sdk.forProject.users.get(userId).then((user) => { - messageRecipients[user.$id] = user; - }) + sdk.forProject.users + .get(userId) + .then((user) => { + messageRecipients[user.$id] = user; + }) + .catch(() => { + messageRecipients[userId] = null; + }) ); await Promise.allSettled([usersPromise, messageRecipientsPromise]); diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/+page.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/+page.svelte index 6e299cc847..26cfca0fd0 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/+page.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/+page.svelte @@ -12,7 +12,6 @@ import { MessagingProviderType } from '@appwrite.io/console'; import UpdateTopics from './updateTopics.svelte'; import UpdateTargets from './updateTargets.svelte'; - import Recipients from './recipients.svelte'; import { onMount } from 'svelte'; export let data: PageData; @@ -34,8 +33,10 @@ {/if} - - + {#if $message.status !== 'processing'} {/if} diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/recipients.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/recipients.svelte deleted file mode 100644 index fcce2439d3..0000000000 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/recipients.svelte +++ /dev/null @@ -1,91 +0,0 @@ - - - - Users - - {@const sum = messageRecipients.length} - {#if sum} -
- - - Name - Identifier - - - {#each messageRecipients.slice(offset, offset + limit) as recipient (recipient.$id)} - - -
- - {recipient.name} - -
-
- - - {getIdentifier(recipient)} - - -
- {/each} -
-
-
-

Total users: {messageRecipients.length}

- -
-
- {:else} - -
- No users have been selected. -

- Need a hand? Check out our - - . -

-
-
- {/if} -
-
diff --git a/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte b/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte index c05bdce614..a4ef930090 100644 --- a/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte +++ b/src/routes/(console)/project-[project]/messaging/message-[message]/updateTargets.svelte @@ -8,7 +8,14 @@ TableHeader, TableRow } from '$lib/elements/table'; - import { CardGrid, Heading, Empty, PaginationInline, EmptySearch } from '$lib/components'; + import { + CardGrid, + Heading, + Empty, + PaginationInline, + EmptySearch, + Alert + } from '$lib/components'; import { onMount } from 'svelte'; import { sdk } from '$lib/stores/sdk'; import { invalidate } from '$app/navigation'; @@ -22,6 +29,7 @@ export let message: Models.Message & { data: Record }; export let selectedTargetsById: Record; + export let selectedRecipients: Record>; let providerType: MessagingProviderType; let offset = 0; @@ -96,17 +104,74 @@ $: isDraft = message.status === 'draft'; $: disabled = symmetricDifference(targetIds, Object.keys(selectedTargetsById)).length === 0; + + $: recipients = message.users.reduce((acc, userId) => { + const recipient = selectedRecipients[userId]; + if (recipient) { + const target = recipient.targets.find((t) => t.providerType === message.providerType); + + if (target) { + acc[userId] = { + $id: recipient.$id, + name: recipient.name, + identifier: target.identifier, + providerType: message.providerType + }; + } + } else { + // user id exists but the user is null means the user account was deleted. + acc[userId] = null; + } + return acc; + }, {}); + + $: recipientsAvailable = recipientsCount > 0; + $: recipientsCount = Object.keys(recipients).filter((user) => user !== null).length; + $: hasDeletedUsers = Object.values(recipients).some((source) => source == null); Targets - {@const sum = targetIds.length} - {#if sum} + {@const sum = targetIds.length || Object.values(recipients).length} + {@const dataSource = + targets.length > 0 + ? targets + : Object.values(recipients).filter((user) => user !== null)} + + {#if hasDeletedUsers} +
+ {#if hasDeletedUsers && !dataSource.length} + + There are no targets to show + This message was sent to users who are no longer available, so their information + cannot be displayed. + + {:else} + 0} + on:dismiss={() => (hasDeletedUsers = false)}> + This message was sent to users who are no longer available, so their + information cannot be displayed. + + {/if} +
+ {/if} + + {#if sum && dataSource.length}
-
+
Target + + {#if recipientsAvailable} + Identifier + + + + {/if}
{#if isDraft}
+
- + + {#if recipientsAvailable} + + {/if} + + - {#each targets.slice(offset, offset + limit) as target (target.$id)} + + {#each dataSource.slice(offset, offset + limit) as source (source['$id'])}
- {#if target.providerType === MessagingProviderType.Push} - {target.name} + {#if source['providerType'] === MessagingProviderType.Push} + {source['name']} {:else} - {target.identifier} + {source['identifier']} {/if}
+ {#if recipientsAvailable} + + + {source['name']} + + + {/if} + {#if isDraft}
removeTarget(target.$id)}> + on:click={() => removeTarget(source['$id'])}>
{:else if isDraft} (showTargets = true)}>Add a target - {:else} + {:else if !sum && !hasDeletedUsers}
No targets have been selected.