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 StringArrayEditor = require('../stringArrayEditor/stringArrayEditor.jsx');
const request = require('../../utils/request-middleware.js');
const ArchivePage = createClass({
displayName : 'ArchivePage',
getDefaultProps : function () {
return {};
},
getInitialState : function () {
return {
//request
title : this.props.query.title || '',
//tags : {},
legacy : `${this.props.query.legacy === 'false' ? false : true }`,
v3 : `${this.props.query.v3 === 'false' ? false : true }`,
pageSize : this.props.query.size || 10,
page : parseInt(this.props.query.page) || 1,
//response
brewCollection : null,
totalPages : null,
totalBrews : null,
searching : false,
error : null,
};
},
componentDidMount : function() {
if (this.state.title !== '') {
this.loadPage(this.state.page, false);
}
},
updateStateWithBrews : function (brews, page, totalPages, totalBrews) {
this.setState({
brewCollection : brews || null,
page : parseInt(page) || 1,
totalPages : totalPages || 1,
totalBrews : totalBrews,
searching : false
});
},
updateStateWithForm : function() {
const title = document.getElementById( 'title' ).value || "";
const size = document.getElementById( 'size' ).value || 10;
const page = 1;
const v3 = document.getElementById('v3').checked;
const legacy = document.getElementById('legacy').checked;
this.setState({
title: title,
pageSize: size,
v3: v3,
legacy: legacy
});
this.updateUrl(title, page, size, v3, legacy);
},
updateUrl : function(title, page, size, v3, legacy) {
const url = new URL(window.location.href);
const urlParams = new URLSearchParams(url.search);
//clean all params
urlParams.delete('title');
urlParams.delete('page');
urlParams.delete('size');
urlParams.delete('v3');
urlParams.delete('legacy');
urlParams.set('title', title);
urlParams.set('page', page);
urlParams.set('size', size);
urlParams.set('v3', v3);
urlParams.set('legacy', legacy);
url.search = urlParams.toString(); // Convert URLSearchParams to string
window.history.replaceState(null, null, url);
},
loadPage : async function(page, update) {
if(update === true) {
this.updateStateWithForm();
};
if (title !== '') {
try {
this.setState({ searching: true, error: null });
const title = encodeURIComponent(this.state.title);
const size = parseInt(this.state.pageSize);
const {legacy, v3} = this.state;
await request.get(`/api/archive?title=${title}&page=${page}&size=${size}&v3=${v3}&legacy=${legacy}`)
.then((response)=>{
if(response.ok) {
this.updateStateWithBrews(response.body.brews, page, response.body.totalPages, response.body.totalBrews);
}
});
} catch (error) {
this.setState({ error: `${error.response.status}` })
this.updateStateWithBrews([], 1, 1, 0);
}
console.log(!this.state.brewCollection || brewCollection.length === 0);
if(!this.state.brewCollection) {
this.setState({ error: '404'});
}
}
},
renderNavItems : function () {
return (