Lucas Lentz
7 years ago
4 changed files with 123 additions and 83 deletions
@ -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 = { |
||||
|
disabled: false |
||||
|
} |
||||
|
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) { |
||||
|
docsearch({ |
||||
|
apiKey: '36221914cce388c46d0420343e0bb32e', |
||||
|
indexName: 'react', |
||||
|
inputSelector: '#algolia-doc-search', |
||||
|
}); |
||||
|
} else { |
||||
|
this.setState({ disabled: true}) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
render() { |
||||
|
const {disabled} = this.state |
||||
|
|
||||
|
return ( |
||||
|
<form |
||||
|
css={{ |
||||
|
display: 'flex', |
||||
|
flex: '0 0 auto', |
||||
|
flexDirection: 'row', |
||||
|
alignItems: 'center', |
||||
|
paddingLeft: '0.5rem', |
||||
|
paddingRight: '0.5rem', |
||||
|
|
||||
|
[media.lessThan('small')]: { |
||||
|
justifyContent: 'flex-end', |
||||
|
}, |
||||
|
[media.lessThan('large')]: { |
||||
|
marginRight: 10, |
||||
|
}, |
||||
|
[media.between('small', 'medium')]: { |
||||
|
width: 'calc(100% / 3)', |
||||
|
}, |
||||
|
[media.between('medium', 'xlarge')]: { |
||||
|
width: 'calc(100% / 6)', |
||||
|
}, |
||||
|
[media.greaterThan('small')]: { |
||||
|
minWidth: 120, |
||||
|
}, |
||||
|
}}> |
||||
|
<input |
||||
|
disabled={disabled} |
||||
|
css={{ |
||||
|
appearance: 'none', |
||||
|
background: 'transparent', |
||||
|
border: 0, |
||||
|
color: colors.white, |
||||
|
fontSize: 18, |
||||
|
fontWeight: 300, |
||||
|
fontFamily: 'inherit', |
||||
|
position: 'relative', |
||||
|
padding: '5px 5px 5px 29px', |
||||
|
backgroundImage: 'url(/search.svg)', |
||||
|
backgroundSize: '16px 16px', |
||||
|
backgroundRepeat: 'no-repeat', |
||||
|
backgroundPositionY: 'center', |
||||
|
backgroundPositionX: '5px', |
||||
|
|
||||
|
':focus': { |
||||
|
outline: 0, |
||||
|
backgroundColor: colors.lighter, |
||||
|
borderRadius: '0.25rem', |
||||
|
}, |
||||
|
|
||||
|
[media.lessThan('large')]: { |
||||
|
fontSize: 16, |
||||
|
}, |
||||
|
[media.greaterThan('small')]: { |
||||
|
width: '100%', |
||||
|
}, |
||||
|
[media.lessThan('small')]: { |
||||
|
width: '16px', |
||||
|
transition: 'width 0.2s ease, padding 0.2s ease', |
||||
|
paddingLeft: '16px', |
||||
|
|
||||
|
':focus': { |
||||
|
paddingLeft: '29px', |
||||
|
width: '8rem', |
||||
|
outline: 'none', |
||||
|
}, |
||||
|
}, |
||||
|
}} |
||||
|
id="algolia-doc-search" |
||||
|
type="search" |
||||
|
placeholder="Search docs" |
||||
|
aria-label="Search docs" |
||||
|
/> |
||||
|
</form> |
||||
|
); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default DocSearch; |
@ -0,0 +1,11 @@ |
|||||
|
/** |
||||
|
* Copyright (c) 2013-present, Facebook, Inc. |
||||
|
* |
||||
|
* @emails react-core |
||||
|
*/ |
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
import DocSearch from './DocSearch'; |
||||
|
|
||||
|
export default DocSearch; |
Loading…
Reference in new issue