"use client"; import { SearchInput } from "@pythnetwork/component-library/SearchInput"; import { Select } from "@pythnetwork/component-library/Select"; import { Table } from "@pythnetwork/component-library/Table"; import { useMemo, useState } from "react"; import { useCollator, useFilter } from "react-aria"; import styles from "./coming-soon-list.module.scss"; import { usePriceFeeds } from "../../hooks/use-price-feeds"; import { AssetClassTag } from "../AssetClassTag"; import { NoResults } from "../NoResults"; import { PriceFeedTag } from "../PriceFeedTag"; type Props = { comingSoonSymbols: string[]; }; export const ComingSoonList = ({ comingSoonSymbols }: Props) => { const [search, setSearch] = useState(""); const [assetClass, setAssetClass] = useState(""); const collator = useCollator(); const filter = useFilter({ sensitivity: "base", usage: "search" }); const feeds = usePriceFeeds(); const comingSoonFeeds = useMemo( () => comingSoonSymbols.map((symbol) => { const feed = feeds.get(symbol); if (feed) { return { symbol, assetClass: feed.assetClass, displaySymbol: feed.displaySymbol, }; } else { throw new NoSuchFeedError(symbol); } }), [feeds, comingSoonSymbols], ); const assetClasses = useMemo( () => [ ...new Set(comingSoonFeeds.map((priceFeed) => priceFeed.assetClass)), ].sort((a, b) => collator.compare(a, b)), [comingSoonFeeds, collator], ); const sortedFeeds = useMemo( () => comingSoonFeeds.sort((a, b) => collator.compare(a.displaySymbol, b.displaySymbol), ), [collator, comingSoonFeeds], ); const feedsFilteredByAssetClass = useMemo( () => assetClass ? sortedFeeds.filter((feed) => feed.assetClass === assetClass) : sortedFeeds, [assetClass, sortedFeeds], ); const filteredFeeds = useMemo( () => search === "" ? feedsFilteredByAssetClass : feedsFilteredByAssetClass.filter((feed) => filter.contains(feed.displaySymbol, search), ), [search, feedsFilteredByAssetClass, filter], ); const rows = useMemo( () => filteredFeeds.map(({ symbol }) => ({ id: symbol, data: { priceFeedName: , assetClass: , }, })), [filteredFeeds], ); return (