diff --git a/src/components/LayoutHeader/DocSearch.js b/src/components/LayoutHeader/DocSearch.js new file mode 100644 index 00000000000..8619e314364 --- /dev/null +++ b/src/components/LayoutHeader/DocSearch.js @@ -0,0 +1,110 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * @emails react-core + */ + +import React, {Component} from 'react'; +import {colors, media} from 'theme'; + +class DocSearch extends Component { + state = { + enabled: true, + }; + componentDidMount() { + // Initialize Algolia search. + // TODO Is this expensive? Should it be deferred until a user is about to search? + // eslint-disable-next-line no-undef + if (window.docsearch) { + window.docsearch({ + apiKey: '36221914cce388c46d0420343e0bb32e', + indexName: 'react', + inputSelector: '#algolia-doc-search', + }); + } else { + console.warn('Search has failed to load and now is being disabled'); + this.setState({enabled: false}); + } + } + + render() { + const {enabled} = this.state; + + return enabled ? ( +
+ ) : null; + } +} + +export default DocSearch; diff --git a/src/components/LayoutHeader/Header.js b/src/components/LayoutHeader/Header.js index d3bc48fa7f2..9b2d95606d4 100644 --- a/src/components/LayoutHeader/Header.js +++ b/src/components/LayoutHeader/Header.js @@ -13,6 +13,7 @@ import React from 'react'; import {colors, fonts, media} from 'theme'; import {version} from 'site-constants'; import ExternalLinkSvg from 'templates/components/ExternalLinkSvg'; +import DocSearch from './DocSearch'; import logoSvg from 'icons/logo.svg'; @@ -135,78 +136,7 @@ const Header = ({location}) => ( /> - +