src/theme/BlogPostItem/Footer/index.tsx (74 lines of code) (raw):

import React from 'react'; import clsx from 'clsx'; import {useBlogPost} from '@docusaurus/plugin-content-blog/client'; import {ThemeClassNames} from '@docusaurus/theme-common'; import EditMetaRow from '@theme/EditMetaRow'; import TagsListInline from '@theme/TagsListInline'; import ReadMoreLink from '@theme/BlogPostItem/Footer/ReadMoreLink'; export default function BlogPostItemFooter(): JSX.Element | null { const {metadata, isBlogPostPage} = useBlogPost(); const { tags, title, editUrl, hasTruncateMarker, lastUpdatedBy, lastUpdatedAt, } = metadata; // A post is truncated if it's in the "list view" and it has a truncate marker const truncatedPost = !isBlogPostPage && hasTruncateMarker; const tagsExists = tags.length > 0; const renderFooter = tagsExists || truncatedPost || editUrl; if (!renderFooter) { return null; } // BlogPost footer - details view if (isBlogPostPage) { const canDisplayEditMetaRow = !!(editUrl || lastUpdatedAt || lastUpdatedBy); return ( <footer className="docusaurus-mt-lg"> {tagsExists && ( <div className={clsx( 'row', 'margin-top--sm', ThemeClassNames.blog.blogFooterEditMetaRow, )}> <div className="col"> <TagsListInline tags={tags} /> </div> </div> )} {canDisplayEditMetaRow && ( <EditMetaRow className={clsx( 'margin-top--sm', ThemeClassNames.blog.blogFooterEditMetaRow, )} editUrl={editUrl} lastUpdatedAt={lastUpdatedAt} lastUpdatedBy={lastUpdatedBy} /> )} </footer> ); } // BlogPost footer - list view else { return ( <footer className="row docusaurus-mt-lg"> {tagsExists && ( <div className={clsx('col', {'col--9': truncatedPost})}> <TagsListInline tags={tags} /> </div> )} {truncatedPost && ( <div className={clsx('col text--right', { 'col--3': tagsExists, })}> <ReadMoreLink blogPostTitle={title} to={metadata.permalink} /> </div> )} </footer> ); } }