@ai-growth/nextjs
Version:
Seamlessly integrate Sanity CMS with Next.js applications for automated blog routing and rendering
94 lines (93 loc) • 3.07 kB
JavaScript
import { SimpleDefaultTemplate } from './SimpleDefaultTemplate';
import { PostTemplate } from './PostTemplate';
import { PageTemplate } from './PageTemplate';
import { BlogTemplate } from './BlogTemplate';
/**
* Create a default template registry with common content types
*
* @param config Configuration options for the registry
* @returns Template registry with default templates
*/
export function createDefaultTemplateRegistry(config = {}) {
const { includeWildcardPatterns = true, customTemplates = {}, defaultTemplate = SimpleDefaultTemplate, } = config;
const registry = {
// Base templates
post: PostTemplate,
page: PageTemplate,
blog: BlogTemplate,
default: defaultTemplate,
// Wildcard patterns
'blog.*': includeWildcardPatterns ? BlogTemplate : defaultTemplate,
// Custom templates override defaults
...customTemplates,
};
return registry;
}
/**
* Create a minimal template registry with just the default template
*
* @param defaultTemplate The template to use as default (optional)
* @returns Minimal template registry
*/
export function createMinimalTemplateRegistry(defaultTemplate = SimpleDefaultTemplate) {
return {
default: defaultTemplate,
};
}
/**
* Create a comprehensive template registry with all available templates
*
* @param customTemplates Additional custom templates to include
* @returns Comprehensive template registry
*/
export function createComprehensiveTemplateRegistry(customTemplates = {}) {
return {
// Content type templates
post: PostTemplate,
page: PageTemplate,
blog: BlogTemplate,
article: PostTemplate, // Alias for post
// Wildcard patterns
'blog.*': BlogTemplate,
'post.*': PostTemplate,
'page.*': PageTemplate,
'article.*': PostTemplate,
// Default fallback
default: SimpleDefaultTemplate,
// Custom templates
...customTemplates,
};
}
/**
* Utility function to extend an existing template registry
*
* @param existingRegistry The existing template registry
* @param extensions Additional templates to add
* @returns Extended template registry
*/
export function extendTemplateRegistry(existingRegistry, extensions) {
return {
...existingRegistry,
...extensions,
};
}
/**
* Utility function to create a template registry for specific content types
*
* @param contentTypes Array of content types to create templates for
* @param templateComponent The template component to use for all types
* @returns Template registry with specified content types
*/
export function createContentTypeRegistry(contentTypes, templateComponent = SimpleDefaultTemplate) {
const registry = {
default: templateComponent,
};
contentTypes.forEach(contentType => {
registry[contentType] = templateComponent;
});
return registry;
}
/**
* Default export - the standard template registry
*/
export default createDefaultTemplateRegistry;