UNPKG

gatsby-theme-try-ghost

Version:

A Gatsby theme for building flaring fast blogs from headless Ghost CMS.

125 lines (116 loc) 3.22 kB
import React from 'react' import PropTypes from 'prop-types' import { StaticQuery, graphql } from 'gatsby' import url from 'url' import ArticleMeta from './ArticleMeta' import WebsiteMeta from './WebsiteMeta' import AuthorMeta from './AuthorMeta' /** * MetaData will generate all relevant meta data information incl. * JSON-LD (schema.org), Open Graph (Facebook) and Twitter properties. * */ const MetaData = ({ data, settings, title, description, image, location, }) => { const config = settings.site.siteMetadata let canonical = url.resolve(config.siteUrl, location.pathname) const { ghostPost, ghostTag, ghostAuthor, ghostPage } = data settings = settings.allGhostSettings.edges[0].node if (ghostPost) { if (ghostPost.canonical_url) { canonical = ghostPost.canonical_url } return ( <ArticleMeta data={ghostPost} canonical={canonical} /> ) } else if (ghostTag) { return ( <WebsiteMeta data={ghostTag} canonical={canonical} type="Series" /> ) } else if (ghostAuthor) { return ( <AuthorMeta data={ghostAuthor} canonical={canonical} /> ) } else if (ghostPage) { return ( <WebsiteMeta data={ghostPage} canonical={canonical} type="WebSite" /> ) } else { title = title || config.siteTitleMeta || settings.title description = description || config.siteDescriptionMeta || settings.description return ( <WebsiteMeta data={{}} canonical={canonical} title={title} description={description} image={image} type="WebSite" /> ) } } MetaData.defaultProps = { data: {}, } MetaData.propTypes = { data: PropTypes.shape({ ghostPost: PropTypes.object, ghostTag: PropTypes.object, ghostAuthor: PropTypes.object, ghostPage: PropTypes.object, }).isRequired, settings: PropTypes.shape({ allGhostSettings: PropTypes.object.isRequired, site: PropTypes.object.isRequired, }).isRequired, location: PropTypes.shape({ pathname: PropTypes.string.isRequired, }).isRequired, title: PropTypes.string, description: PropTypes.string, image: PropTypes.object, } const MetaDataQuery = props => ( <StaticQuery query={graphql` query GhostSettingsMetaData { allGhostSettings { edges { node { title description } } } site { siteMetadata { ...SiteMetadataFields } } } `} render={data => <MetaData settings={data} {...props} />} /> ) export default MetaDataQuery