require('./archivePage.less'); const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); const Nav = require('naturalcrit/nav/nav.jsx'); const Navbar = require('../../navbar/navbar.jsx'); const RecentNavItem = require('../../navbar/recent.navitem.jsx').both; const Account = require('../../navbar/account.navitem.jsx'); const NewBrew = require('../../navbar/newbrew.navitem.jsx'); const HelpNavItem = require('../../navbar/help.navitem.jsx'); const BrewItem = require('../basePages/listPage/brewItem/brewItem.jsx'); const request = require('superagent'); const ArchivePage = createClass({ displayName : 'ArchivePage', getDefaultProps : function () { return {}; }, getInitialState : function () { return { title : this.props.query.title || '', brewCollection : null, page : 1, totalPages : 1, searching : false, error : null, }; }, componentDidMount : function() { }, handleChange(e) { this.setState({ title: e.target.value }); }, updateStateWithBrews : (brews, page, totalPages)=>{ this.setState({ brewCollection : brews, page : page, totalPages : totalPages, searching : false }); }, loadPage : async function(page) { if(this.state.title == '') {} else { try { //this.updateUrl(); this.setState({ searching: true, error: null }); const title = encodeURIComponent(this.state.title); const response = await fetch(`/archive?title=${title}&page=${page}`); if(response.ok) { const res = await response.json(); this.updateStateWithBrews(res.brews, page, res.totalPages); } } catch (error) { console.log(`LoadPage error: ${error}`); } } }, updateUrl : function() { const url = new URL(window.location.href); const urlParams = new URLSearchParams(url.search); // Set the title and page parameters urlParams.set('title', this.state.title); urlParams.set('page', this.state.page); url.search = urlParams.toString(); // Convert URLSearchParams to string window.history.replaceState(null, null, url); }, renderFoundBrews() { const { title, brewCollection, page, totalPages, error } = this.state; if(title === '') {return (

Whenever you want, just start typing...

);} if(error !== null) { return (

I'm sorry, your request didn't work


Your search is not specific enough. Too many brews meet this criteria for us to display them.

); } if(!brewCollection || brewCollection.length === 0) { return (

We haven't found brews meeting your request.

); } return (
{`Brews Found: ${brewCollection.length}`} {brewCollection.map((brew, index)=>( ))}
{page > 1 && ( )} Page {page} {page < totalPages && ( )}
); }, renderForm : function () { return (

Brew Lookup

{ if(e.key === 'Enter') { this.handleChange(e); this.loadPage(1); } }} placeholder='v3 Reference Document' /> {/* In the future, we should be able to filter the results by adding tags. */}
); }, renderNavItems : function () { return ( Archive: Search for brews ); }, render : function () { return (
{this.renderNavItems()}

Welcome to the Archive

{this.renderForm()}

Your results, my lordship

{this.renderFoundBrews()}
); }, }); module.exports = ArchivePage;