Skip to content

Commit 56db3ec

Browse files
committed
extract functionality, new "isFeedsVisible" util
1 parent 6258f2f commit 56db3ec

File tree

2 files changed

+75
-42
lines changed

2 files changed

+75
-42
lines changed

src/features/feeds/components/FeedList.tsx

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import button from "@chainlink/design-system/button.module.css"
1515
import { updateTableOfContents } from "~/components/TableOfContents/tocStore.ts"
1616
import alertIcon from "../../../components/Alert/Assets/alert-icon.svg"
1717
import { ChainSelector } from "~/components/ChainSelector/ChainSelector.tsx"
18+
import { isFeedVisible } from "../utils/feedVisibility.ts"
1819

1920
export type DataFeedType =
2021
| "default"
@@ -499,49 +500,9 @@ export const FeedList = ({
499500
return true
500501
})
501502
.filter((network) => {
502-
// After tag-level filtering, ensure the network still has at least one visible feed for the current dataFeedType
503+
// Ensure the network has at least one visible feed for the current dataFeedType
503504
const feeds = network.metadata || []
504-
const hasVisibleFeed = feeds.some((feed: any) => {
505-
// Universal hidden exclusions
506-
if (feed.feedCategory === "hidden" || feed.docs?.hidden) return false
507-
if (isDeprecating && feed.feedCategory !== "deprecating") return false
508-
509-
if (isStreams) {
510-
if (dataFeedType === "streamsCrypto")
511-
return feed.contractType === "verifier" && ["Crypto", "Crypto-DEX"].includes(feed.docs?.feedType)
512-
if (dataFeedType === "streamsRwa")
513-
return feed.contractType === "verifier" && ["Equities", "Forex"].includes(feed.docs?.feedType)
514-
if (dataFeedType === "streamsNav")
515-
return feed.contractType === "verifier" && feed.docs?.feedType === "Net Asset Value"
516-
if (dataFeedType === "streamsExRate")
517-
return feed.contractType === "verifier" && feed.docs?.productTypeCode === "ExRate"
518-
if (dataFeedType === "streamsBacked")
519-
return feed.contractType === "verifier" && feed.docs?.feedType === "Tokenized Equities"
520-
return false
521-
}
522-
if (isSmartData) {
523-
if (feed.docs?.deliveryChannelCode === "DS") return false
524-
return (
525-
feed.docs?.isMVR === true ||
526-
feed.docs?.productType === "Proof of Reserve" ||
527-
feed.docs?.productType === "NAVLink" ||
528-
feed.docs?.productType === "SmartAUM"
529-
)
530-
}
531-
if (isUSGovernmentMacroeconomicData) return feed.docs?.productTypeCode === "RefMacro"
532-
if (isRates) return feed.docs?.productType === "Rates"
533-
// Default set
534-
return (
535-
!feed.docs?.porType &&
536-
feed.contractType !== "verifier" &&
537-
feed.docs?.productType !== "Proof of Reserve" &&
538-
feed.docs?.productType !== "NAVLink" &&
539-
feed.docs?.productType !== "SmartAUM" &&
540-
feed.docs?.productTypeCode !== "RefMacro" &&
541-
!feed.docs?.isMVR
542-
)
543-
})
544-
return hasVisibleFeed
505+
return feeds.some((feed: any) => isFeedVisible(feed, dataFeedType, ecosystem))
545506
})
546507

547508
// Check available network types
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { DataFeedType } from "../components/FeedList.tsx"
2+
3+
/**
4+
* Determines if a feed should be visible based on:
5+
* - Hidden flags (feedCategory === "hidden" or docs.hidden)
6+
* - Data feed type filtering (streams, smartdata, rates, etc.)
7+
* - Ecosystem filtering (deprecating)
8+
*
9+
* This logic is shared between table filtering and network availability checks.
10+
*/
11+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
12+
export function isFeedVisible(feed: any, dataFeedType: DataFeedType, ecosystem = ""): boolean {
13+
// Universal hidden exclusions
14+
if (feed.feedCategory === "hidden" || feed.docs?.hidden) return false
15+
16+
const isDeprecating = ecosystem === "deprecating"
17+
const isStreams =
18+
dataFeedType === "streamsCrypto" ||
19+
dataFeedType === "streamsRwa" ||
20+
dataFeedType === "streamsNav" ||
21+
dataFeedType === "streamsExRate" ||
22+
dataFeedType === "streamsBacked"
23+
const isSmartData = dataFeedType === "smartdata"
24+
const isRates = dataFeedType === "rates"
25+
const isUSGovernmentMacroeconomicData = dataFeedType === "usGovernmentMacroeconomicData"
26+
27+
// Deprecating ecosystem: only show feeds with deprecating category
28+
if (isDeprecating && feed.feedCategory !== "deprecating") return false
29+
30+
// Streams filtering by sub-type
31+
if (isStreams) {
32+
if (dataFeedType === "streamsCrypto")
33+
return feed.contractType === "verifier" && ["Crypto", "Crypto-DEX"].includes(feed.docs?.feedType)
34+
if (dataFeedType === "streamsRwa")
35+
return feed.contractType === "verifier" && ["Equities", "Forex"].includes(feed.docs?.feedType)
36+
if (dataFeedType === "streamsNav")
37+
return feed.contractType === "verifier" && feed.docs?.feedType === "Net Asset Value"
38+
if (dataFeedType === "streamsExRate")
39+
return feed.contractType === "verifier" && feed.docs?.productTypeCode === "ExRate"
40+
if (dataFeedType === "streamsBacked")
41+
return feed.contractType === "verifier" && feed.docs?.feedType === "Tokenized Equities"
42+
return false
43+
}
44+
45+
// SmartData filtering
46+
if (isSmartData) {
47+
if (feed.docs?.deliveryChannelCode === "DS") return false
48+
return (
49+
feed.docs?.isMVR === true ||
50+
feed.docs?.productType === "Proof of Reserve" ||
51+
feed.docs?.productType === "NAVLink" ||
52+
feed.docs?.productType === "SmartAUM"
53+
)
54+
}
55+
56+
// US Government Macroeconomic Data
57+
if (isUSGovernmentMacroeconomicData) return feed.docs?.productTypeCode === "RefMacro"
58+
59+
// Rates
60+
if (isRates) return feed.docs?.productType === "Rates"
61+
62+
// Default data feeds: exclude MVR, verifier, and SmartData product types
63+
return (
64+
!feed.docs?.porType &&
65+
feed.contractType !== "verifier" &&
66+
feed.docs?.productType !== "Proof of Reserve" &&
67+
feed.docs?.productType !== "NAVLink" &&
68+
feed.docs?.productType !== "SmartAUM" &&
69+
feed.docs?.productTypeCode !== "RefMacro" &&
70+
!feed.docs?.isMVR
71+
)
72+
}

0 commit comments

Comments
 (0)