From 1c6764da737311e38c8d1850b8ba33b0b568e794 Mon Sep 17 00:00:00 2001 From: Elliot Braem <16282460+elliotBraem@users.noreply.github.com> Date: Thu, 1 Feb 2024 17:50:44 -0700 Subject: [PATCH] some improvements to merged index feed --- apps/bos-blocks/widget/PR/MergedIndexFeed.jsx | 82 +++++++++++++------ apps/builddao/widget/config/feed.jsx | 9 ++ 2 files changed, 66 insertions(+), 25 deletions(-) diff --git a/apps/bos-blocks/widget/PR/MergedIndexFeed.jsx b/apps/bos-blocks/widget/PR/MergedIndexFeed.jsx index 5818013f..b88ab2c5 100644 --- a/apps/bos-blocks/widget/PR/MergedIndexFeed.jsx +++ b/apps/bos-blocks/widget/PR/MergedIndexFeed.jsx @@ -37,27 +37,60 @@ const computeFetchFrom = (items, limit, desc) => { return desc ? blockHeight - 1 : blockHeight + 1; }; -const mergeItems = (iIndex, oldItems, newItems, desc) => { - const index = indices[iIndex]; - const items = [ - ...new Set( - [ - ...newItems.map((item) => ({ - ...item, - action: index.action, - key: index.key, - index: iIndex, - })), - ...oldItems, - ].map((i) => JSON.stringify(i)) - ), - ].map((i) => JSON.parse(i)); - items.sort((a, b) => a.blockHeight - b.blockHeight); - if (desc) { - items.reverse(); - } - return items; -}; +function mergeItems(iIndex, oldItems, newItems, desc) { + const itemMap = new Map(); + + const generateKey = (item) => ({ + accountId: item.accountId, + blockHeight: item.blockHeight, + }); + + // Add old items to the map + oldItems.forEach((item) => { + const key = generateKey(item); + itemMap.set(key, item); + }); + + newItems.forEach((item) => { + const key = generateKey(item); + if (!itemMap.has(key)) { + itemMap.set(key, { + ...item, + index: iIndex, + }); + } + }); + + // Convert the Map values to an array + let mergedItems = Array.from(itemMap.values()); + + // Sort items by blockHeight, ascending or descending based on the `desc` flag + mergedItems.sort((a, b) => + desc ? b.blockHeight - a.blockHeight : a.blockHeight - b.blockHeight + ); + + return mergedItems; +} + +// const mergeItems = (iIndex, newItems, desc) => { +// const uniqueItems = new Map(); + +// newItems.forEach((item) => { +// const key = { blockHeight: item.blockHeight, accountId: item.accountId }; +// if (!uniqueItems.has(key)) { +// uniqueItems.set(key, { +// ...item, +// index: iIndex, +// }); +// } +// }); + +// const sortedItems = Array.from(uniqueItems.values()).sort((a, b) => +// desc ? b.blockHeight - a.blockHeight : a.blockHeight - b.blockHeight +// ); + +// return sortedItems; +// }; const jIndices = JSON.stringify(indices); if (jIndices !== state.jIndices) { @@ -145,12 +178,11 @@ if (requiredIndices.length > 0) { } } // Compute the intersection of uniqueIdentifiers across all required indices - commonUniqueIdentifiers = itemsByRequiredIndex.reduce((a, b) => - a.filter((c) => b.includes(c)) - ); + commonUniqueIdentifiers = + itemsByRequiredIndex.length && + itemsByRequiredIndex.reduce((a, b) => a.filter((c) => b.includes(c))); } - // Construct merged feed and compute usage per feed. const filteredItems = []; diff --git a/apps/builddao/widget/config/feed.jsx b/apps/builddao/widget/config/feed.jsx index fc771e52..ef0a352f 100644 --- a/apps/builddao/widget/config/feed.jsx +++ b/apps/builddao/widget/config/feed.jsx @@ -11,6 +11,15 @@ const feedLink = "https://nearbuilders.org/feed"; return { type: "app", // every.near/type/app routes: { + all: { + path: "buildhub.near/widget/Feed", + blockHeight: "final", + init: { + name: "All", // maybe these should be moved to navbar specific + icon: "bi-list", + requiredHashtags: ["build"] + }, + }, resolutions: { path: "buildhub.near/widget/Feed", blockHeight: "final",