This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
outline/frontend/scenes/Search/Search.js

75 lines
1.8 KiB
JavaScript
Raw Normal View History

2017-05-12 00:23:56 +00:00
// @flow
import React from 'react';
2016-07-18 03:59:32 +00:00
import { observer } from 'mobx-react';
2016-08-12 12:56:39 +00:00
import _ from 'lodash';
2016-08-05 15:44:15 +00:00
import { Flex } from 'reflexbox';
2016-07-19 07:30:47 +00:00
2017-05-10 07:02:11 +00:00
import SearchField from './components/SearchField';
2016-07-19 07:30:47 +00:00
import styles from './Search.scss';
import SearchStore from './SearchStore';
2016-07-18 03:59:32 +00:00
2017-05-10 07:02:11 +00:00
import Layout, { Title } from 'components/Layout';
import CenteredContent from 'components/CenteredContent';
import DocumentPreview from 'components/DocumentPreview';
2017-05-12 00:23:56 +00:00
type Props = {
2017-05-17 07:11:13 +00:00
notFound: ?boolean,
2017-05-12 00:23:56 +00:00
};
@observer class Search extends React.Component {
2017-05-12 00:23:56 +00:00
props: Props;
store: SearchStore;
2016-07-19 07:30:47 +00:00
2017-05-12 00:23:56 +00:00
constructor(props: Props) {
2016-07-19 07:30:47 +00:00
super(props);
this.store = new SearchStore();
}
2016-07-18 03:59:32 +00:00
render() {
const search = _.debounce(searchTerm => {
2016-07-19 07:30:47 +00:00
this.store.search(searchTerm);
}, 250);
2017-05-12 00:23:56 +00:00
const title = <Title content="Search" />;
2016-07-19 07:30:47 +00:00
2016-07-18 03:59:32 +00:00
return (
<Layout
title={title}
2016-07-18 03:59:32 +00:00
titleText="Search"
search={false}
loading={this.store.isFetching}
2016-07-18 03:59:32 +00:00
>
<CenteredContent>
2017-05-17 07:11:13 +00:00
{this.props.notFound &&
2017-02-10 03:57:35 +00:00
<div>
<h1>Not Found</h1>
<p>We're unable to find the page you're accessing.</p>
<hr />
</div>}
2017-02-10 03:57:35 +00:00
2016-08-05 15:44:15 +00:00
<Flex column auto>
<Flex auto>
2016-07-19 07:30:47 +00:00
<img
src={require('assets/icons/search.svg')}
className={styles.icon}
2016-08-05 15:44:15 +00:00
alt="Search"
2016-07-19 07:30:47 +00:00
/>
<SearchField
searchTerm={this.store.searchTerm}
onChange={search}
2016-07-19 07:30:47 +00:00
/>
</Flex>
{this.store.documents &&
this.store.documents.map(document => {
return (
<DocumentPreview key={document.id} document={document} />
);
})}
2016-07-18 03:59:32 +00:00
</Flex>
</CenteredContent>
</Layout>
);
}
}
export default Search;