diff --git a/components/LazerPriceIdTable.tsx b/components/LazerPriceIdTable.tsx index ad8214d7..3c84214b 100644 --- a/components/LazerPriceIdTable.tsx +++ b/components/LazerPriceIdTable.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { ChangeEvent, useCallback, useEffect, useMemo, useState } from "react"; import { StyledTd } from "./Table"; import { Spinner } from "./Spinner"; const fetchLazerPriceIdMetadata = async () => { @@ -57,6 +57,66 @@ const useLazerPriceIdState = () => { return state; }; +const LoadedLazerPriceIdTable = ({ + priceFeeds, +}: { + priceFeeds: LazerPriceIdMetadata[]; +}) => { + const [search, setSearch] = useState(""); + + const updateSearch = useCallback((event: ChangeEvent) => { + setSearch(event.target.value); + }, []); + + const filteredFeeds = useMemo(() => { + return priceFeeds.filter((feed) => { + const searchLower = search.toLowerCase(); + return ( + feed.symbol.toLowerCase().includes(searchLower) || + feed.name.toLowerCase().includes(searchLower) || + feed.description.toLowerCase().includes(searchLower) || + feed.pyth_lazer_id.toString().includes(searchLower) + ); + }); + }, [priceFeeds, search]); + + return ( +
+ + + + + + + + + + + + + + {filteredFeeds.map((priceFeed) => ( + + {priceFeed.asset_type} + {priceFeed.description} + {priceFeed.name} + {priceFeed.symbol} + {priceFeed.pyth_lazer_id} + {priceFeed.exponent} + + ))} + +
Asset TypeDescriptionNameSymbolPyth Lazer IdExponent
+
+ ); +}; + export function LazerPriceIdTable() { const lazerPriceIdState = useLazerPriceIdState(); @@ -67,30 +127,7 @@ export function LazerPriceIdTable() { return ; case LazerPriceIdStateType.Loaded: return ( - - - - - - - - - - - - - {lazerPriceIdState.priceFeeds.map((priceFeed) => ( - - {priceFeed.asset_type} - {priceFeed.description} - {priceFeed.name} - {priceFeed.symbol} - {priceFeed.pyth_lazer_id} - {priceFeed.exponent} - - ))} - -
Asset TypeDescriptionNameSymbolPyth Lazer IdExponent
+ ); case LazerPriceIdStateType.Error: return
Error
;