@rocketsofawesome/mirage
Version:
[Live Demo of the Pattern Library](https://rocketsofawesome.github.io/mirage/)
80 lines (67 loc) • 1.81 kB
JavaScript
import React from 'react'
import PropTypes from 'prop-types'
import { createClient } from 'contentful'
let client
function initContentful () {
let host = 'cdn.contentful.com'
if (parseInt(process.env.REACT_APP_CONTENTFUL_PREVIEW, 10) === 1) {
host = 'preview.contentful.com'
}
client = createClient({
space: process.env.REACT_APP_CONTENTFUL_SPACE_KEY,
accessToken: process.env.REACT_APP_CONTENTFUL_ACCESS_TOKEN,
host: host
})
return client.getSpace()
.then((space) => {
return space
})
}
function getClient () {
return client
}
export const getUrl = (entry) => entry.fields.file.url
export const getAlt = (entry) => entry.fields.description
export const getContentType = (entry) => {
return entry.sys.contentType.sys.id
}
export const getAssetType = (entry) => /([a-z]*)\//.exec(entry.fields.file.contentType)[1]
export { initContentful, getClient }
initContentful()
export default class Contentful extends React.Component {
constructor(props) {
super(props)
this.state = {
response: null
}
}
componentDidMount() {
const { operation: inOp, id, query } = this.props
const client = getClient()
try {
if (inOp !== 'getEntries') {
client[inOp](id).then((response) => {
this.setState({response: response})
})
} else {
client[inOp](query).then((response) => {
this.setState({response: response.items[0]})
})
}
} catch (err) {
console.warn(err)
}
}
render() {
const { children } = this.props
const { response } = this.state
if (response) {
return React.createElement(children.type, {...children.props, ...response,})
} else {
return null
}
}
}
Contentful.propTypes = {
operation: PropTypes.string
}