/* global React */ const { useState, useMemo } = window.ReactHooks; function CatalogPage() { const [cat, setCat] = useState("All"); const [sort, setSort] = useState("Popular"); const products = window.PRODUCTS; const categories = ["All", ...Array.from(new Set(products.map((p) => p.category)))]; const list = useMemo(() => { let l = products; if (cat !== "All") l = l.filter((p) => p.category === cat); l = [...l]; if (sort === "Popular") l.sort((a, b) => b.downloads - a.downloads); if (sort === "Newest") l.sort((a, b) => b.updated.localeCompare(a.updated)); if (sort === "Price") l.sort((a, b) => a.price - b.price); if (sort === "Rating") l.sort((a, b) => b.rating - a.rating); return l; }, [cat, sort]); return (
Home/Catalog

Catalog

Ten custom visuals for Power BI, maintained on independent roadmaps and supported directly by TC engineers. Pilot any visual free for 30 days.

{categories.map((c) => ( ))}
Sort
{list.map((p) => (
{p.category}
{p.name}
{p.tagline}
v{p.version} · {p.rating}★ ${p.price} / seat / mo
))}
); } window.CatalogPage = CatalogPage;