From 34f3e9387945b72d9e0dc6d082f44b2919fd0728 Mon Sep 17 00:00:00 2001 From: seamus Date: Mon, 5 Jan 2026 13:53:38 -0500 Subject: [PATCH 1/2] [wip] --- js/app/packages/app/component/soupFilters.ts | 7 ++++++- .../macro-entity/src/components/EntityWithEverything.tsx | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/js/app/packages/app/component/soupFilters.ts b/js/app/packages/app/component/soupFilters.ts index d2d76f921d2..83e8e8da123 100644 --- a/js/app/packages/app/component/soupFilters.ts +++ b/js/app/packages/app/component/soupFilters.ts @@ -1,4 +1,4 @@ -import type { EntityData } from '@macro-entity'; +import { type EntityData, isTaskEntity } from '@macro-entity'; import type { APIEmailThreadPreviewMetadata } from '@service-email/generated/schemas'; import type { SoupEmailThreadPreviewMetadata } from '@service-storage/generated/schemas'; import { makePersisted } from '@solid-primitives/storage'; @@ -253,6 +253,11 @@ export const signalFilter: ClientFilter = { return hasRecentlyViewed(entity); } case 'document': { + if (isTaskEntity(entity)) { + // TODO: once we have task.isCompleted, we should consider filtering on + // that. + return true; + } return hasRecentlyViewed(entity); } case 'email': { diff --git a/js/app/packages/macro-entity/src/components/EntityWithEverything.tsx b/js/app/packages/macro-entity/src/components/EntityWithEverything.tsx index 308212e435c..916469c5ffe 100644 --- a/js/app/packages/macro-entity/src/components/EntityWithEverything.tsx +++ b/js/app/packages/macro-entity/src/components/EntityWithEverything.tsx @@ -277,6 +277,9 @@ function NotificationRow(props: { ) { return 'shared'; } + if (props.notification.notificationEventType === 'task_assigned') { + return 'assigned to you'; + } const metadata = tryToTypedNotification( props.notification From cfddf8e55b38813d12c5174d0aae62642ce5eb10 Mon Sep 17 00:00:00 2001 From: seamus Date: Mon, 5 Jan 2026 14:20:26 -0500 Subject: [PATCH 2/2] invalidate queries on task notif --- js/app/packages/app/component/Soup.tsx | 13 +++++++++++++ js/app/packages/app/component/soupFilters.ts | 3 +-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/js/app/packages/app/component/Soup.tsx b/js/app/packages/app/component/Soup.tsx index b24900e3139..5a98af0d831 100644 --- a/js/app/packages/app/component/Soup.tsx +++ b/js/app/packages/app/component/Soup.tsx @@ -325,6 +325,19 @@ export function Soup() { }); }); + createEffectOnEntityTypeNotification( + notificationSource, + 'document', + (notification) => { + if (notification.notificationEventType === 'task_assigned') { + entityQueryClient.invalidateQueries({ + queryKey: queryKeys.all.dss, + }); + invalidateEntityNotifications(notification.entity_id); + } + } + ); + const saveViewMutation = useUpsertSavedViewMutation(); let tabsRef: HTMLDivElement | undefined; diff --git a/js/app/packages/app/component/soupFilters.ts b/js/app/packages/app/component/soupFilters.ts index 83e8e8da123..f8929a218c5 100644 --- a/js/app/packages/app/component/soupFilters.ts +++ b/js/app/packages/app/component/soupFilters.ts @@ -254,8 +254,7 @@ export const signalFilter: ClientFilter = { } case 'document': { if (isTaskEntity(entity)) { - // TODO: once we have task.isCompleted, we should consider filtering on - // that. + // TODO (seamus) : filter on isCompleted return true; } return hasRecentlyViewed(entity);