@@ -9,9 +9,20 @@ import button from "@chainlink/design-system/button.module.css"
99import { CheckHeartbeat } from "./pause-notice/CheckHeartbeat.tsx"
1010import { monitoredFeeds , FeedDataItem } from "~/features/data/index.ts"
1111import { StreamsNetworksData , type NetworkData } from "../data/StreamsNetworksData.ts"
12- import { type Docs } from "~/features/data/api/index.ts"
12+ import { type ChainMetadata } from "~/features/data/api/index.ts"
1313
1414const feedItems = monitoredFeeds . mainnet
15+
16+ // Helper functions for SVR feed categorization
17+ const isSharedSVR = ( metadata : ChainMetadata ) : boolean => {
18+ // Check for marketing.path or fallback to path field
19+ const pathToCheck = ( metadata as ChainMetadata & { marketing ?: { path ?: string } } ) ?. marketing ?. path || metadata . path
20+ return typeof pathToCheck === "string" && / - s h a r e d - s v r $ / . test ( pathToCheck )
21+ }
22+
23+ const isAaveSVR = ( metadata : ChainMetadata ) : boolean => {
24+ return ! ! metadata ?. secondaryProxyAddress && ! isSharedSVR ( metadata )
25+ }
1526const feedCategories = {
1627 low : (
1728 < span
@@ -213,9 +224,15 @@ const DefaultTr = ({ network, metadata, showExtraDetails }) => (
213224 href = "/data-feeds/svr-feeds"
214225 target = "_blank"
215226 className = { tableStyles . feedVariantBadge }
216- title = "SVR-enabled Feed"
227+ title = {
228+ isAaveSVR ( metadata )
229+ ? "Aave Dedicated SVR Feed"
230+ : isSharedSVR ( metadata )
231+ ? "Shared SVR Feed"
232+ : "SVR-enabled Feed"
233+ }
217234 >
218- SVR
235+ { isAaveSVR ( metadata ) ? "Aave SVR" : isSharedSVR ( metadata ) ? "Shared SVR" : "SVR" }
219236 </ a >
220237 </ div >
221238 ) }
@@ -304,7 +321,7 @@ const DefaultTr = ({ network, metadata, showExtraDetails }) => (
304321 < div className = { tableStyles . separator } />
305322 < div className = { tableStyles . assetAddress } >
306323 < dt >
307- < span className = "label" > AAVE SVR Proxy:</ span >
324+ < span className = "label" > { isAaveSVR ( metadata ) ? " AAVE SVR Proxy:" : "SVR Proxy:" } </ span >
308325 </ dt >
309326 < dd >
310327 < button
@@ -331,14 +348,25 @@ const DefaultTr = ({ network, metadata, showExtraDetails }) => (
331348 </ a >
332349 </ dd >
333350 </ div >
334- < div className = { clsx ( tableStyles . aaveCallout ) } >
335- < strong > ⚠️ Aave Dedicated Feed:</ strong > This SVR proxy feed is dedicated exclusively for use by the
336- Aave protocol. Learn more about{ " " }
337- < a href = "/data-feeds/svr-feeds" target = "_blank" >
338- SVR-enabled Feeds
339- </ a >
340- .
341- </ div >
351+ { isAaveSVR ( metadata ) && (
352+ < div className = { clsx ( tableStyles . aaveCallout ) } >
353+ < strong > ⚠️ Aave Dedicated Feed:</ strong > This SVR proxy feed is dedicated exclusively for use by the
354+ Aave protocol. Learn more about{ " " }
355+ < a href = "/data-feeds/svr-feeds" target = "_blank" >
356+ SVR-enabled Feeds
357+ </ a >
358+ .
359+ </ div >
360+ ) }
361+ { isSharedSVR ( metadata ) && (
362+ < div className = { clsx ( tableStyles . sharedCallout ) } >
363+ < strong > 🔗 Shared SVR Feed:</ strong > This SVR proxy feed is usable by any protocol. Learn more about{ " " }
364+ < a href = "/data-feeds/svr-feeds" target = "_blank" >
365+ SVR-enabled Feeds
366+ </ a >
367+ .
368+ </ div >
369+ ) }
342370 </ >
343371 ) }
344372 </ dl >
@@ -903,6 +931,7 @@ export const MainnetTable = ({
903931 network,
904932 showExtraDetails,
905933 showOnlySVR,
934+ svrFilter = "all" , // "all" | "aave" | "shared"
906935 showOnlyMVRFeeds,
907936 showOnlyDEXFeeds,
908937 dataFeedType,
@@ -918,6 +947,7 @@ export const MainnetTable = ({
918947 network : ChainNetwork
919948 showExtraDetails : boolean
920949 showOnlySVR : boolean
950+ svrFilter ?: "all" | "aave" | "shared"
921951 showOnlyMVRFeeds : boolean
922952 showOnlyDEXFeeds : boolean
923953 dataFeedType : string
@@ -940,8 +970,17 @@ export const MainnetTable = ({
940970 const filteredMetadata = network . metadata
941971 . sort ( ( a , b ) => ( a . name < b . name ? - 1 : 1 ) )
942972 . filter ( ( metadata ) => {
943- if ( showOnlySVR && ! metadata . secondaryProxyAddress ) {
944- return false
973+ // Handle SVR filtering with granular options
974+ if ( showOnlySVR ) {
975+ if ( svrFilter === "aave" && ! isAaveSVR ( metadata ) ) {
976+ return false
977+ }
978+ if ( svrFilter === "shared" && ! isSharedSVR ( metadata ) ) {
979+ return false
980+ }
981+ if ( svrFilter === "all" && ! metadata . secondaryProxyAddress ) {
982+ return false
983+ }
945984 }
946985
947986 if ( isDeprecating ) return ! ! metadata . docs . shutdownDate
@@ -1095,7 +1134,7 @@ export const TestnetTable = ({
10951134 lastAddr = 1000 ,
10961135 addrPerPage = 8 ,
10971136 currentPage = 1 ,
1098- paginate = ( _page : number ) => {
1137+ paginate = ( ) => {
10991138 /* Default no-op function */
11001139 } ,
11011140 searchValue = "" ,
0 commit comments