1+ import { parseFixed } from "@delvtech/fixed-point-wasm" ;
12import {
23 AdjustmentsHorizontalIcon ,
34 BarsArrowDownIcon ,
5+ ChevronDownIcon ,
46} from "@heroicons/react/20/solid" ;
57import { ArrowUpIcon } from "@heroicons/react/24/outline" ;
68import { useNavigate , useSearch } from "@tanstack/react-router" ;
@@ -9,19 +11,28 @@ import { ReactElement, ReactNode } from "react";
911import { Fade } from "react-awesome-reveal" ;
1012import { useAppConfigForConnectedChain } from "src/ui/appconfig/useAppConfigForConnectedChain" ;
1113import LoadingState from "src/ui/base/components/LoadingState" ;
12- import { MultiSelect } from "src/ui/base/components/MultiSelect" ;
14+ import {
15+ MultiSelect ,
16+ MultiSelectButton ,
17+ } from "src/ui/base/components/MultiSelect" ;
1318import { NonIdealState } from "src/ui/base/components/NonIdealState" ;
1419import { Well } from "src/ui/base/components/Well/Well" ;
1520import { LANDING_ROUTE } from "src/ui/landing/routes" ;
1621import { PoolRow } from "src/ui/markets/PoolRow/PoolRow" ;
1722import { sortOptions , usePoolsList } from "src/ui/markets/hooks/usePoolsList" ;
1823import { useAccount } from "wagmi" ;
24+
1925export function PoolsList ( ) : ReactElement {
2026 const { address : account } = useAccount ( ) ;
2127 const appConfig = useAppConfigForConnectedChain ( ) ;
22- const { chains : selectedChains , assets : selectedAssets } = useSearch ( {
28+ const {
29+ chains : selectedChains ,
30+ assets : selectedAssets ,
31+ hideLowTvl = true ,
32+ } = useSearch ( {
2333 from : LANDING_ROUTE ,
2434 } ) ;
35+ const lowTvlThreshold = parseFixed ( 10_000 ) ;
2536 const {
2637 filters,
2738 status,
@@ -32,6 +43,10 @@ export function PoolsList(): ReactElement {
3243 } = usePoolsList ( {
3344 selectedChains,
3445 selectedAssets,
46+ hideLowTvl : {
47+ enabled : hideLowTvl ,
48+ threshold : lowTvlThreshold ,
49+ } ,
3550 } ) ;
3651
3752 const navigate = useNavigate ( { from : LANDING_ROUTE } ) ;
@@ -60,14 +75,26 @@ export function PoolsList(): ReactElement {
6075 ) : pools ? (
6176 < >
6277 { /* List controls */ }
63- < div className = "relative z-20 flex items-center justify-between gap-10 " >
78+ < div className = "relative z-20 flex items-stretch justify-between gap-2 " >
6479 { /* Filters */ }
65- < div className = "flex items-center gap-2" >
66- < AdjustmentsHorizontalIcon className = "size-5 sm:mr-1" />
80+ < div className = "flex items-stretch gap-2" >
81+ < AdjustmentsHorizontalIcon className = "hidden size-5 sm:mr-1 sm:block " />
6782 { /* Chain filter */ }
6883 { filters && filters . chains . length > 1 && (
6984 < MultiSelect
70- title = "Filter by chain"
85+ button = {
86+ < MultiSelectButton
87+ title = "Filter by chain"
88+ className = "h-full py-2 sm:py-0"
89+ >
90+ { selectedChains ?. length === 1
91+ ? appConfig . chains [ selectedChains [ 0 ] ] . name
92+ : `${
93+ selectedChains ?. length || filters ?. chains . length
94+ } chains`}
95+ < ChevronDownIcon className = "hidden size-5 sm:block" />
96+ </ MultiSelectButton >
97+ }
7198 selected = { selectedChains || [ ] }
7299 onChange = { ( chains ) => {
73100 window . plausible ( "filterChange" , {
@@ -86,13 +113,6 @@ export function PoolsList(): ReactElement {
86113 } ,
87114 } ) ;
88115 } }
89- displayValue = {
90- selectedChains ?. length === 1
91- ? appConfig . chains [ selectedChains [ 0 ] ] . name
92- : `${
93- selectedChains ?. length || filters ?. chains . length
94- } chains`
95- }
96116 searchEnabled
97117 options = { filters . chains . map ( ( { chain, count } ) => {
98118 return {
@@ -111,7 +131,19 @@ export function PoolsList(): ReactElement {
111131 { /* Assets filter */ }
112132 { filters && filters . assets . length > 1 && (
113133 < MultiSelect
114- title = "Filter by deposit asset"
134+ button = {
135+ < MultiSelectButton
136+ title = "Filter by deposit asset"
137+ className = "h-full py-2 sm:py-0"
138+ >
139+ { selectedAssets ?. length === 1
140+ ? selectedAssets [ 0 ]
141+ : `${
142+ selectedAssets ?. length || filters . assets . length
143+ } assets`}
144+ < ChevronDownIcon className = "hidden size-5 sm:block" />
145+ </ MultiSelectButton >
146+ }
115147 selected = { selectedAssets || [ ] }
116148 onChange = { ( assets ) => {
117149 window . plausible ( "filterChange" , {
@@ -130,13 +162,6 @@ export function PoolsList(): ReactElement {
130162 } ,
131163 } ) ;
132164 } }
133- displayValue = {
134- selectedAssets ?. length === 1
135- ? selectedAssets [ 0 ]
136- : `${
137- selectedAssets ?. length || filters . assets . length
138- } assets`
139- }
140165 searchEnabled
141166 options = { filters . assets . map ( ( { asset, count } ) => {
142167 return {
@@ -151,6 +176,39 @@ export function PoolsList(): ReactElement {
151176 />
152177 ) }
153178
179+ { /* Hide low TVL filter */ }
180+ < span className = "daisy-badge flex h-auto items-center self-stretch border-gray-600 py-2 sm:py-1" >
181+ < label className = "flex h-full cursor-pointer flex-col content-center items-center gap-2 sm:flex-row" >
182+ < span className = "daisy-label-text text-nowrap text-center" >
183+ Hide low TVL
184+ </ span >
185+ < input
186+ type = "checkbox"
187+ title = { `Hide pools with less than ${ lowTvlThreshold . format ( ) } in TVL` }
188+ className = "daisy-toggle daisy-toggle-sm"
189+ defaultChecked = { hideLowTvl }
190+ onChange = { ( e ) => {
191+ window . plausible ( "filterChange" , {
192+ props : {
193+ name : "Hide low TVL" ,
194+ value : String ( e . target . checked ) ,
195+ connectedWallet : account ,
196+ } ,
197+ } ) ;
198+ navigate ( {
199+ search : ( current ) => {
200+ return {
201+ ...current ,
202+ hideLowTvl : e . target . checked ,
203+ } ;
204+ } ,
205+ } ) ;
206+ } }
207+ />
208+ </ label >
209+ </ span >
210+
211+ { /* Matching pools count */ }
154212 < span className = "daisy-badge hidden h-auto items-center self-stretch text-neutral-content sm:flex" >
155213 { pools . length }
156214 { pools . length === 1 ? " pool" : " pools" }
@@ -164,7 +222,7 @@ export function PoolsList(): ReactElement {
164222 role = "button"
165223 title = "Sort by"
166224 className = { classNames (
167- "daisy-btn daisy-btn-outline daisy-btn-sm flex items-center justify-center border-gray-600" ,
225+ "daisy-btn daisy-btn-outline daisy-btn-sm flex h-full items-center justify-center border-gray-600 py-2 sm:py-0 " ,
168226 {
169227 "daisy-btn-disabled" : ! isSortingEnabled ,
170228 } ,
0 commit comments