@ai-growth/nextjs
Version:
Seamlessly integrate Sanity CMS with Next.js applications for automated blog routing and rendering
40 lines (39 loc) • 3.13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContentHeader = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const DefaultTemplate_module_css_1 = __importDefault(require("./DefaultTemplate.module.css"));
/**
* ContentHeader component for displaying content title, type, and metadata
*/
const ContentHeader = ({ title, contentType, publishedAt, metadata, showMetadata = true, className = '', }) => {
const formatDate = (dateString) => {
try {
const date = new Date(dateString);
return date.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
});
}
catch {
return dateString;
}
};
const getContentTypeLabel = (type) => {
const labels = {
post: 'Blog Post',
page: 'Page',
article: 'Article',
news: 'News',
event: 'Event',
};
return labels[type] || type.charAt(0).toUpperCase() + type.slice(1);
};
return ((0, jsx_runtime_1.jsxs)("header", { className: `${DefaultTemplate_module_css_1.default.contentHeader} ${className}`, children: [(0, jsx_runtime_1.jsx)("div", { className: DefaultTemplate_module_css_1.default.contentTypeBadge, children: (0, jsx_runtime_1.jsx)("span", { className: DefaultTemplate_module_css_1.default.contentTypeLabel, children: getContentTypeLabel(contentType) }) }), (0, jsx_runtime_1.jsx)("h1", { className: DefaultTemplate_module_css_1.default.contentTitle, children: title }), showMetadata && ((0, jsx_runtime_1.jsxs)("div", { className: DefaultTemplate_module_css_1.default.contentMetadata, children: [publishedAt && ((0, jsx_runtime_1.jsx)("div", { className: DefaultTemplate_module_css_1.default.publishedDate, children: (0, jsx_runtime_1.jsx)("time", { dateTime: publishedAt, className: DefaultTemplate_module_css_1.default.dateTime, children: formatDate(publishedAt) }) })), metadata?.description && ((0, jsx_runtime_1.jsx)("div", { className: DefaultTemplate_module_css_1.default.contentDescription, children: (0, jsx_runtime_1.jsx)("p", { className: DefaultTemplate_module_css_1.default.description, children: metadata.description }) })), metadata?.readingTime && ((0, jsx_runtime_1.jsx)("div", { className: DefaultTemplate_module_css_1.default.readingTime, children: (0, jsx_runtime_1.jsxs)("span", { className: DefaultTemplate_module_css_1.default.readingTimeLabel, children: [metadata.readingTime, " min read"] }) })), metadata?.tags && Array.isArray(metadata.tags) && metadata.tags.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: DefaultTemplate_module_css_1.default.contentTags, children: metadata.tags.map((tag, index) => ((0, jsx_runtime_1.jsx)("span", { className: DefaultTemplate_module_css_1.default.tag, children: tag }, index))) }))] }))] }));
};
exports.ContentHeader = ContentHeader;
exports.default = exports.ContentHeader;