gatsby-remark-dictionary
Version:
Create a dictionary of word and phrases to be converted to highlighted values and links. define once and all phrases will be converted during build time.
95 lines (84 loc) • 2.17 kB
JavaScript
import React from 'react';
import { connectSearchBox } from 'react-instantsearch-dom';
import styled from '@emotion/styled';
import { css } from '@emotion/core';
import { Search } from 'styled-icons/fa-solid/Search';
const SearchIcon = styled(Search)`
width: 1em;
pointer-events: none;
margin-right: 10px;
position: absolute;
left: 15px;
color: #2fd2c5;
`;
const focus = props => css`
background: white;
color: ${props => props.theme.darkBlue};
cursor: text;
width: 5em;
+ ${SearchIcon} {
color: ${props => props.theme.darkBlue};
margin: 0.3em;
}
`;
const collapse = props => css`
width: 0;
cursor: pointer;
color: ${props => props.theme.lightBlue};
+ ${SearchIcon} {
color: white;
}
${props => props.focus && focus()}
margin-left: ${props => (props.focus ? `-1.6em` : `-1em`)};
padding-left: ${props => (props.focus ? `1.6em` : `1em`)};
::placeholder {
color: ${props => props.theme.gray};
}
`;
const expand = props => css`
background: ${props => props.theme.veryLightGray};
width: 6em;
margin-left: -1.6em;
padding-left: 1.6em;
+ ${SearchIcon} {
margin: 0.3em;
}
`;
const collapseExpand = props => css`
${props => (props.collapse ? collapse() : expand())}
`;
const Input = styled.input`
outline: none;
border: none;
font-size: 1em;
background: white;
transition: ${props => props.theme.shortTrans};
border-radius: ${props => props.theme.smallBorderRadius};
{collapseExpand}
`;
const Form = styled.form`
display: flex;
align-items: center;
@media only screen and (max-width: 767px) {
width: 100%;
margin-left: 15px;
}
`;
export default connectSearchBox(({ refine, ...rest }) => {
const preventSubmit = e => {
e.preventDefault();
};
return (
<Form className={'formElement'} onSubmit={preventSubmit}>
<SearchIcon />
<Input
className={'searchInput '}
type="text"
placeholder="Search"
aria-label="Search"
onChange={e => refine(e.target.value)}
{...rest}
/>
</Form>
);
});