diff --git a/src/components/ComponentUsage.astro b/src/components/ComponentUsage.astro new file mode 100644 index 000000000000000..f933b22d039a939 --- /dev/null +++ b/src/components/ComponentUsage.astro @@ -0,0 +1,41 @@ +--- +import { z } from "astro:schema"; +import { getComponentsUsage } from "~/util/components"; +import Details from "./Details.astro"; + +type Props = z.infer; + +const props = z.object({ + component: z.string(), +}); + +const { component } = props.parse(Astro.props); + +const usage = await getComponentsUsage(component); +--- + +<> +

+ {component} is used {usage.count} times on{" "} + {usage.pages.size} pages. +

+
+ +
+ diff --git a/src/components/ComponentsUsage.astro b/src/components/ComponentsUsage.astro index 3b79b5c3fba9a69..91f00a3107bd575 100644 --- a/src/components/ComponentsUsage.astro +++ b/src/components/ComponentsUsage.astro @@ -1,7 +1,7 @@ --- import { getComponentsUsage } from "~/util/components"; import AnchorHeading from "./AnchorHeading.astro"; -import Details from "./Details.astro"; +import ComponentUsage from "./ComponentUsage.astro"; const components = await getComponentsUsage(); @@ -11,30 +11,10 @@ const alphabetical = Object.entries(components).sort(([a], [b]) => --- { - alphabetical.map(([component, usage]) => ( + alphabetical.map(([component]) => ( <> -

- {component} is used {usage.count} times on{" "} - {usage.pages.size} pages. -

-
-
    - {[...usage.pages].map((path) => ( -
  • - - {path} - -
  • - ))} -
-
+ )) } diff --git a/src/components/index.ts b/src/components/index.ts index e65928d09c7609a..f401e399bbc8e96 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -9,6 +9,7 @@ export { default as APIRequest } from "./APIRequest.astro"; export { default as AvailableNotifications } from "./AvailableNotifications.astro"; export { default as CompatibilityFlag } from "./CompatibilityFlag.astro"; export { default as CompatibilityFlags } from "./CompatibilityFlags.astro"; +export { default as ComponentUsage } from "./ComponentUsage.astro"; export { default as ComponentsUsage } from "./ComponentsUsage.astro"; export { default as CopyPageButton } from "./CopyPageButton.tsx"; export { default as CURL } from "./CURL.astro"; diff --git a/src/components/overrides/PageTitle.astro b/src/components/overrides/PageTitle.astro index 05a0b12ade3bf45..31660c99c031e5d 100644 --- a/src/components/overrides/PageTitle.astro +++ b/src/components/overrides/PageTitle.astro @@ -5,11 +5,11 @@ import { marked } from "marked"; import { Breadcrumbs } from "astro-breadcrumbs"; import "astro-breadcrumbs/breadcrumbs.css"; -import { Aside } from "@astrojs/starlight/components"; import Description from "~/components/Description.astro"; import SpotlightAuthorDetails from "~/components/SpotlightAuthorDetails.astro"; import LastReviewed from "~/components/LastReviewed.astro"; import CopyPageButton from "~/components/CopyPageButton.tsx"; +import ComponentUsage from "~/components/ComponentUsage.astro"; import { getEntry } from "astro:content"; @@ -122,13 +122,9 @@ const hideBreadcrumbs = Astro.locals.starlightRoute.hideBreadcrumbs; { component && ( - +
+ +
) } diff --git a/src/util/components.ts b/src/util/components.ts index 9dfe372264c5b42..7aac65ac48bf345 100644 --- a/src/util/components.ts +++ b/src/util/components.ts @@ -9,9 +9,15 @@ import { } from "mdast-util-mdx"; import { visit } from "unist-util-visit"; -let usages: Record }>; +type Usage = { count: number; pages: Set }; -export const getComponentsUsage = async () => { +let usages: Record; + +export function getComponentsUsage(): Promise>; +export function getComponentsUsage(component: string): Promise; +export async function getComponentsUsage( + component?: string, +): Promise> { if (!usages) { usages = {}; @@ -48,5 +54,9 @@ export const getComponentsUsage = async () => { } } + if (component) { + return usages[component] || { count: 0, pages: new Set() }; + } + return usages; -}; +}