From 9260ee4b677f4782a9d06c27198f7704804b07d9 Mon Sep 17 00:00:00 2001 From: lukicenturi Date: Thu, 18 Jul 2024 23:02:14 +0700 Subject: [PATCH] fix(integration): make sure no duplicate protocols --- composables/integrations.ts | 31 ++++++++++++++++++++++++++++--- types/integrations.ts | 2 ++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/composables/integrations.ts b/composables/integrations.ts index d409489c..a57f0724 100644 --- a/composables/integrations.ts +++ b/composables/integrations.ts @@ -1,5 +1,5 @@ import { convertKeys } from '~/utils/api'; -import { IntegrationData } from '~/types/integrations'; +import { IntegrationData, type IntegrationItem } from '~/types/integrations'; import LocalIntegrationData from '~/public/integrations/all.json'; export const useIntegrationsData = createSharedComposable(() => { @@ -31,14 +31,39 @@ export const useIntegrationsData = createSharedComposable(() => { } }; + const filterDuplicateData = (data: IntegrationData): IntegrationData => { + const uniqueProtocols: Record = {}; + + data.protocols.forEach((protocol) => { + const firstWord = protocol.label.split(' ')[0]; // Get the first word of label + + // Check if we already have an entry with this first word and same image + if (!(firstWord in uniqueProtocols) || uniqueProtocols[firstWord].image !== protocol.image) { + // If not, add it to uniqueProtocols + uniqueProtocols[firstWord] = protocol; + } + else { + // If there's a duplicate, modify the label of the existing one + uniqueProtocols[firstWord].label = firstWord; + } + }); + + const uniqueProtocolList = Object.values(uniqueProtocols); + + return { + ...data, + protocols: uniqueProtocolList, + }; + }; + const data = asyncComputed(async () => { if (isDev) - return LocalIntegrationData; + return filterDuplicateData(LocalIntegrationData); const remoteData = await getRemoteIntegrationData(); if (remoteData) - return remoteData; + return filterDuplicateData(remoteData); return defaultData(); }, defaultData()); diff --git a/types/integrations.ts b/types/integrations.ts index 90723ada..d1bdac34 100644 --- a/types/integrations.ts +++ b/types/integrations.ts @@ -5,6 +5,8 @@ export const IntegrationItem = z.object({ label: z.string(), }); +export type IntegrationItem = z.infer; + export const IntegrationData = z.object({ blockchains: z.array(IntegrationItem), exchanges: z.array(IntegrationItem),