Skip to content

Commit 25afa1d

Browse files
committed
show borrows breakdown
1 parent 858d412 commit 25afa1d

File tree

3 files changed

+87
-13
lines changed

3 files changed

+87
-13
lines changed

src/containers/ProtocolOverview/index.tsx

Lines changed: 73 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -311,18 +311,7 @@ export const KeyMetrics = (props: IKeyMetricsProps) => {
311311
)}
312312
</p>
313313
) : null}
314-
{props.currentTvlByChain?.borrowed != null ? (
315-
<p className="group flex flex-wrap justify-between gap-4 border-b border-(--cards-border) py-1 first:pt-0 last:border-none last:pb-0">
316-
<span className="text-(--text-label)">Borrowed</span>
317-
<Flag
318-
protocol={props.name}
319-
dataType="Borrowed"
320-
isLending={props.category === 'Lending'}
321-
className="mr-auto opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100"
322-
/>
323-
<span className="font-jetbrains">{props.formatPrice(props.currentTvlByChain.borrowed)}</span>
324-
</p>
325-
) : null}
314+
<BorrowedBreakdown {...props} />
326315
<TokenLiquidity {...props} />
327316
<Treasury {...props} />
328317
<Raises {...props} />
@@ -333,6 +322,78 @@ export const KeyMetrics = (props: IKeyMetricsProps) => {
333322
)
334323
}
335324

325+
const BorrowedBreakdown = (props: IKeyMetricsProps) => {
326+
if (props.currentTvlByChain?.borrowed == null) return null
327+
328+
if (props.borrowedBreakdown?.chains.length === 0 && props.borrowedBreakdown?.tokens.length === 0) {
329+
return (
330+
<p className="group flex flex-wrap justify-between gap-4 border-b border-(--cards-border) py-1 first:pt-0 last:border-none last:pb-0">
331+
<span className="text-(--text-label)">Borrowed</span>
332+
<Flag
333+
protocol={props.name}
334+
dataType="Borrowed"
335+
isLending={props.category === 'Lending'}
336+
className="mr-auto opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100"
337+
/>
338+
<span className="font-jetbrains">{props.formatPrice(props.currentTvlByChain.borrowed)}</span>
339+
</p>
340+
)
341+
}
342+
343+
return (
344+
<details className="group">
345+
<summary className="flex flex-wrap justify-start gap-4 border-b border-(--cards-border) py-1 group-last:border-none group-open:border-none group-open:font-semibold">
346+
<span className="text-(--text-label)">Borrowed</span>
347+
<Icon
348+
name="chevron-down"
349+
height={16}
350+
width={16}
351+
className="relative top-0.5 -ml-3 transition-transform duration-100 group-open:rotate-180"
352+
/>
353+
<Flag
354+
protocol={props.name}
355+
dataType="Borrowed"
356+
isLending={props.category === 'Lending'}
357+
className="mr-auto opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100"
358+
/>
359+
<span className="font-jetbrains ml-auto">{props.formatPrice(props.currentTvlByChain.borrowed)}</span>
360+
</summary>
361+
<div className="mb-3 flex flex-col">
362+
{props.borrowedBreakdown?.chains.length > 0 ? (
363+
<details className="group/1">
364+
<summary className="flex flex-wrap justify-start gap-4 border-b border-(--cards-border) py-1 group-last/1:border-none group-open/1:border-none group-open/1:font-semibold">
365+
<span className="text-(--text-label)">Borrowed by Chain</span>
366+
<Icon
367+
name="chevron-down"
368+
height={16}
369+
width={16}
370+
className="relative top-0.5 -ml-3 transition-transform duration-100 group-open/1:rotate-180"
371+
/>
372+
<Flag
373+
protocol={props.name}
374+
dataType="Borrowed by Chain"
375+
isLending={props.category === 'Lending'}
376+
className="mr-auto opacity-0 group-hover/1:opacity-100 group-focus-visible/1:opacity-100"
377+
/>
378+
</summary>
379+
<div className="mb-3 flex flex-col">
380+
{props.borrowedBreakdown?.chains.map(([chain, tvl]) => (
381+
<p
382+
key={`${chain}-${tvl}-${props.name}`}
383+
className="flex items-center justify-between gap-1 border-b border-dashed border-[#e6e6e6] py-1 group-last:border-none dark:border-[#222224]"
384+
>
385+
<span className="text-(--text-label)">{chain}</span>
386+
<span className="font-jetbrains">{props.formatPrice(tvl)}</span>
387+
</p>
388+
))}
389+
</div>
390+
</details>
391+
) : null}
392+
</div>
393+
</details>
394+
)
395+
}
396+
336397
const Articles = (props: IProtocolOverviewPageData) => {
337398
if (!props.articles?.length) return null
338399

src/containers/ProtocolOverview/queries.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,14 @@ export const getProtocolOverviewPageData = async ({
835835
seoDescription += ' and their methodologies'
836836
seoKeywords += `, ${name.toLowerCase()} methodologies`
837837

838+
const borrowedBreakdown = { chains: [], tokens: [] }
839+
840+
for (const chain in protocolData.currentChainTvls ?? {}) {
841+
if (chain.endsWith('-borrowed')) {
842+
borrowedBreakdown.chains.push([chain.split('-')[0], protocolData.currentChainTvls[chain]])
843+
}
844+
}
845+
838846
return {
839847
id: String(protocolData.id),
840848
name: name,
@@ -954,7 +962,11 @@ export const getProtocolOverviewPageData = async ({
954962
optionsNotionalVolumeData?.defaultChartView ??
955963
'daily',
956964
seoDescription,
957-
seoKeywords
965+
seoKeywords,
966+
borrowedBreakdown: {
967+
chains: borrowedBreakdown.chains.sort((a, b) => b[1] - a[1]),
968+
tokens: borrowedBreakdown.tokens.sort((a, b) => b[1] - a[1])
969+
}
958970
}
959971
}
960972

src/containers/ProtocolOverview/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ export interface IProtocolOverviewPageData {
262262
defaultChartView?: 'daily' | 'weekly' | 'monthly'
263263
seoDescription: string
264264
seoKeywords: string
265+
borrowedBreakdown?: { chains: Array<[string, number]>; tokens: Array<[string, number]> }
265266
}
266267

267268
interface ICredit {

0 commit comments

Comments
 (0)