// Theirs import React from 'react' import Head from 'next/head' import { withRouter } from 'next/router' // Ours import ApiContext from '../../components/ApiContext' import { StylesheetLink, CodeMirrorLink, MetaTags } from '../../components/Meta' import Font from '../../components/style/Font' import Carbon from '../../components/Carbon' import { DEFAULT_CODE, DEFAULT_SETTINGS } from '../../lib/constants' import { getRouteState } from '../../lib/routing' const Page = props => ( Carbon Embeds {props.children} ) class Embed extends React.Component { static contextType = ApiContext state = { ...DEFAULT_SETTINGS, code: DEFAULT_CODE, mounted: false, readOnly: true, key: 0, } snippet = {} async componentDidMount() { const { queryState } = getRouteState(this.props.router) this.setState( { ...this.props.snippet, ...queryState, copyable: queryState.copy !== false, readOnly: queryState.readonly !== false, mounted: true, }, this.postMessage ) } ref = React.createRef() postMessage = () => { setTimeout( () => window.top.postMessage( JSON.stringify({ // Used by embed provider src: window.location.toString(), context: 'iframe.resize', height: this.ref.current.offsetHeight, }), '*' ), 0 ) } updateCode = code => { this.setState({ code }, this.postMessage) window.top.postMessage( { id: this.state.id ? `carbon:${this.state.id}` : 'carbon', code, }, '*' ) } render() { return ( ) } } export default withRouter(Embed)