From f7bd5c5951d6cbf392959eaf224eaa87d8b56c89 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 6 Dec 2022 14:48:41 -0600 Subject: [PATCH] deduplicateById: fix Entity types --- app/soapbox/utils/queries.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/soapbox/utils/queries.ts b/app/soapbox/utils/queries.ts index 3016b0546..0a0983e41 100644 --- a/app/soapbox/utils/queries.ts +++ b/app/soapbox/utils/queries.ts @@ -8,10 +8,17 @@ export interface PaginatedResult { link?: string, } +interface Entity { + id: string, +} + +const isEntity = (object: T): object is T & Entity => { + return object && typeof object === 'object' && 'id' in object; +}; + /** Deduplicate an array of entities by their ID. */ -const deduplicate = (entities: T[]): T[] => { +const deduplicateById = (entities: T[]): T[] => { const map = entities.reduce>((result, entity) => { - // @ts-expect-error Entity might not have an ID... but it probably does. return result.set(entity.id, entity); }, new Map()); @@ -26,8 +33,10 @@ const flattenPages = (queryData: InfiniteData> | undefined [], ); - if (data) { - return deduplicate(data); + if (data && data.every(isEntity)) { + return deduplicateById(data); + } else if (data) { + return data; } };