From de5c8566390f56eb500d32261a40cc465d93d049 Mon Sep 17 00:00:00 2001 From: LadyBluenotes Date: Wed, 22 Oct 2025 20:32:37 -0700 Subject: [PATCH 1/2] community resource page --- src/components/DocsLayout.tsx | 8 + src/routeTree.gen.ts | 23 +++ ...$version.docs.community-resources[.]md.tsx | 159 ++++++++++++++++++ src/utils/docs.ts | 1 + 4 files changed, 191 insertions(+) create mode 100644 src/routes/$libraryId/$version.docs.community-resources[.]md.tsx diff --git a/src/components/DocsLayout.tsx b/src/components/DocsLayout.tsx index 8818e7e8..94005219 100644 --- a/src/components/DocsLayout.tsx +++ b/src/components/DocsLayout.tsx @@ -74,6 +74,14 @@ const useMenuConfig = ({ label: 'Contributors', to: '/$libraryId/$version/docs/contributors', }, + ...(config.sections.find((d) => d.label === 'Community Resources') + ? [ + { + label: 'Community Resources', + to: '/$libraryId/$version/docs/community-resources', + }, + ] + : []), { label: (
diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index efca7c5c..74234e27 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -55,6 +55,7 @@ import { Route as LibrariesConfigVersionIndexRouteImport } from './routes/_libra import { Route as LibraryIdVersionDocsIndexRouteImport } from './routes/$libraryId/$version.docs.index' import { Route as LibraryIdVersionDocsChar123Char125DotmdRouteImport } from './routes/$libraryId/$version.docs.{$}[.]md' import { Route as LibraryIdVersionDocsContributorsRouteImport } from './routes/$libraryId/$version.docs.contributors' +import { Route as LibraryIdVersionDocsCommunityResourcesDotmdRouteImport } from './routes/$libraryId/$version.docs.community-resources[.]md' import { Route as LibraryIdVersionDocsSplatRouteImport } from './routes/$libraryId/$version.docs.$' import { Route as LibraryIdVersionDocsFrameworkIndexRouteImport } from './routes/$libraryId/$version.docs.framework.index' import { Route as LibraryIdVersionDocsFrameworkFrameworkIndexRouteImport } from './routes/$libraryId/$version.docs.framework.$framework.index' @@ -305,6 +306,12 @@ const LibraryIdVersionDocsContributorsRoute = path: '/contributors', getParentRoute: () => LibraryIdVersionDocsRoute, } as any) +const LibraryIdVersionDocsCommunityResourcesDotmdRoute = + LibraryIdVersionDocsCommunityResourcesDotmdRouteImport.update({ + id: '/community-resources.md', + path: '/community-resources.md', + getParentRoute: () => LibraryIdVersionDocsRoute, + } as any) const LibraryIdVersionDocsSplatRoute = LibraryIdVersionDocsSplatRouteImport.update({ id: '/$', @@ -374,6 +381,7 @@ export interface FileRoutesByFullPath { '/blog/': typeof LibrariesBlogIndexRoute '/stats/npm': typeof StatsNpmIndexRoute '/$libraryId/$version/docs/$': typeof LibraryIdVersionDocsSplatRoute + '/$libraryId/$version/docs/community-resources.md': typeof LibraryIdVersionDocsCommunityResourcesDotmdRoute '/$libraryId/$version/docs/contributors': typeof LibraryIdVersionDocsContributorsRoute '/$libraryId/$version/docs/{$}.md': typeof LibraryIdVersionDocsChar123Char125DotmdRoute '/$libraryId/$version/docs/': typeof LibraryIdVersionDocsIndexRoute @@ -423,6 +431,7 @@ export interface FileRoutesByTo { '/blog': typeof LibrariesBlogIndexRoute '/stats/npm': typeof StatsNpmIndexRoute '/$libraryId/$version/docs/$': typeof LibraryIdVersionDocsSplatRoute + '/$libraryId/$version/docs/community-resources.md': typeof LibraryIdVersionDocsCommunityResourcesDotmdRoute '/$libraryId/$version/docs/contributors': typeof LibraryIdVersionDocsContributorsRoute '/$libraryId/$version/docs/{$}.md': typeof LibraryIdVersionDocsChar123Char125DotmdRoute '/$libraryId/$version/docs': typeof LibraryIdVersionDocsIndexRoute @@ -478,6 +487,7 @@ export interface FileRoutesById { '/_libraries/blog/': typeof LibrariesBlogIndexRoute '/stats/npm/': typeof StatsNpmIndexRoute '/$libraryId/$version/docs/$': typeof LibraryIdVersionDocsSplatRoute + '/$libraryId/$version/docs/community-resources.md': typeof LibraryIdVersionDocsCommunityResourcesDotmdRoute '/$libraryId/$version/docs/contributors': typeof LibraryIdVersionDocsContributorsRoute '/$libraryId/$version/docs/{$}.md': typeof LibraryIdVersionDocsChar123Char125DotmdRoute '/$libraryId/$version/docs/': typeof LibraryIdVersionDocsIndexRoute @@ -533,6 +543,7 @@ export interface FileRouteTypes { | '/blog/' | '/stats/npm' | '/$libraryId/$version/docs/$' + | '/$libraryId/$version/docs/community-resources.md' | '/$libraryId/$version/docs/contributors' | '/$libraryId/$version/docs/{$}.md' | '/$libraryId/$version/docs/' @@ -582,6 +593,7 @@ export interface FileRouteTypes { | '/blog' | '/stats/npm' | '/$libraryId/$version/docs/$' + | '/$libraryId/$version/docs/community-resources.md' | '/$libraryId/$version/docs/contributors' | '/$libraryId/$version/docs/{$}.md' | '/$libraryId/$version/docs' @@ -636,6 +648,7 @@ export interface FileRouteTypes { | '/_libraries/blog/' | '/stats/npm/' | '/$libraryId/$version/docs/$' + | '/$libraryId/$version/docs/community-resources.md' | '/$libraryId/$version/docs/contributors' | '/$libraryId/$version/docs/{$}.md' | '/$libraryId/$version/docs/' @@ -995,6 +1008,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof LibraryIdVersionDocsContributorsRouteImport parentRoute: typeof LibraryIdVersionDocsRoute } + '/$libraryId/$version/docs/community-resources.md': { + id: '/$libraryId/$version/docs/community-resources.md' + path: '/community-resources.md' + fullPath: '/$libraryId/$version/docs/community-resources.md' + preLoaderRoute: typeof LibraryIdVersionDocsCommunityResourcesDotmdRouteImport + parentRoute: typeof LibraryIdVersionDocsRoute + } '/$libraryId/$version/docs/$': { id: '/$libraryId/$version/docs/$' path: '/$' @@ -1042,6 +1062,7 @@ declare module '@tanstack/react-router' { interface LibraryIdVersionDocsRouteChildren { LibraryIdVersionDocsSplatRoute: typeof LibraryIdVersionDocsSplatRoute + LibraryIdVersionDocsCommunityResourcesDotmdRoute: typeof LibraryIdVersionDocsCommunityResourcesDotmdRoute LibraryIdVersionDocsContributorsRoute: typeof LibraryIdVersionDocsContributorsRoute LibraryIdVersionDocsChar123Char125DotmdRoute: typeof LibraryIdVersionDocsChar123Char125DotmdRoute LibraryIdVersionDocsIndexRoute: typeof LibraryIdVersionDocsIndexRoute @@ -1054,6 +1075,8 @@ interface LibraryIdVersionDocsRouteChildren { const LibraryIdVersionDocsRouteChildren: LibraryIdVersionDocsRouteChildren = { LibraryIdVersionDocsSplatRoute: LibraryIdVersionDocsSplatRoute, + LibraryIdVersionDocsCommunityResourcesDotmdRoute: + LibraryIdVersionDocsCommunityResourcesDotmdRoute, LibraryIdVersionDocsContributorsRoute: LibraryIdVersionDocsContributorsRoute, LibraryIdVersionDocsChar123Char125DotmdRoute: LibraryIdVersionDocsChar123Char125DotmdRoute, diff --git a/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx b/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx new file mode 100644 index 00000000..ec92c8d5 --- /dev/null +++ b/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx @@ -0,0 +1,159 @@ +import { createFileRoute } from '@tanstack/react-router' +import { twMerge } from 'tailwind-merge' +import { DocContainer } from '~/components/DocContainer' +import { DocTitle } from '~/components/DocTitle' +import { findLibrary, getBranch, getLibrary } from '~/libraries' +import { seo } from '~/utils/seo' +import { loadDocs } from '~/utils/docs' + +export const Route = createFileRoute( + '/$libraryId/$version/docs/community-resources.md' +)({ + staleTime: 1000 * 60 * 5, + loader: async (ctx) => { + const { libraryId, version } = ctx.params + const library = findLibrary(libraryId) + + if (!library) return { doc: null as null | any } + + const root = library.docsRoot || 'docs' + + try { + const doc = await loadDocs({ + repo: library.repo, + branch: getBranch(library, version), + docsPath: `${root}/community-resources`, + currentPath: ctx.location.pathname, + redirectPath: `/${library.id}/${version}/docs/overview`, + }) + + return { doc } + } catch { + return { doc: null as null | any } + } + }, + head: ({ params, loaderData }) => { + const library = getLibrary(params.libraryId) + const doc = (loaderData as any)?.doc + return { + meta: seo({ + title: + (doc?.frontmatter?.title as string | undefined) || + `${library.name} Community Resources`, + description: + (doc?.frontmatter?.description as string | undefined) || + `A curated list of community resources for ${library.name}.`, + }), + } + }, + component: RouteComponent, +}) + +type ResourceType = 'article' | 'media' | 'utility' | 'other' + +type Resource = { + title: string + description: string + url: string +} + +function RouteComponent() { + const { libraryId } = Route.useParams() + const library = getLibrary(libraryId) + const data = Route.useLoaderData().doc?.frontmatter + + return ( + +
+
+
+ + {(data?.title as string | undefined) || + `${library.name} Community Resources`} + +
+
+
+ + {(data?.frontmatter?.description as string | undefined) || ( + <> + Discover resources created by the{' '} + {library.name} community. Have something to + share?{' '} + + Submit a PR on GitHub + {' '} + to contribute to this list. + + )} + + {data?.frontmatter?.articles > 1 && ( + + )} + {data?.frontmatter?.media > 1 && ( + + )} + {data?.frontmatter?.utilities > 1 && ( + + )} + {data?.frontmatter?.others > 1 && ( + + )} +
+
+ + ) +} + +function CommunitySection({ + resources, + type, +}: { + resources: Resource[] + type: ResourceType +}) { + return ( +
+

{type}

+
+ {resources.map((res) => ( + + + {res.title} + +
+ ) +} diff --git a/src/utils/docs.ts b/src/utils/docs.ts index 31ce0d27..ae42a9d1 100644 --- a/src/utils/docs.ts +++ b/src/utils/docs.ts @@ -85,6 +85,7 @@ export const fetchDocs = createServerFn({ method: 'GET' }) description, filePath, content: frontMatter.content, + frontmatter: frontMatter.data, } }) From c750f5fb3a667164670a1226340649279043bab0 Mon Sep 17 00:00:00 2001 From: LadyBluenotes Date: Wed, 22 Oct 2025 20:37:50 -0700 Subject: [PATCH 2/2] fix some things --- .../$libraryId/$version.docs.community-resources[.]md.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx b/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx index ec92c8d5..6eba20d2 100644 --- a/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx +++ b/src/routes/$libraryId/$version.docs.community-resources[.]md.tsx @@ -37,12 +37,8 @@ export const Route = createFileRoute( const doc = (loaderData as any)?.doc return { meta: seo({ - title: - (doc?.frontmatter?.title as string | undefined) || - `${library.name} Community Resources`, - description: - (doc?.frontmatter?.description as string | undefined) || - `A curated list of community resources for ${library.name}.`, + title: `${library.name} Community Resources`, + description: `A collection of community resources for ${library.name}.`, }), } },