diff --git a/client/homebrew/pages/vaultPage/vaultPage.jsx b/client/homebrew/pages/vaultPage/vaultPage.jsx
index bad1fbd57..a51039345 100644
--- a/client/homebrew/pages/vaultPage/vaultPage.jsx
+++ b/client/homebrew/pages/vaultPage/vaultPage.jsx
@@ -1,3 +1,5 @@
+/*eslint max-lines: ["warn", {"max": 400, "skipBlankLines": true, "skipComments": true}]*/
+/*eslint max-params:["warn", { max: 10 }], */
require('./vaultPage.less');
const React = require('react');
@@ -18,13 +20,15 @@ const request = require('../../utils/request-middleware.js');
const VaultPage = (props)=>{
const [pageState, setPageState] = useState(parseInt(props.query.page) || 1);
+ const [sortState, setSort] = useState(props.query.sort || 'title');
+ const [dirState, setdir] = useState(props.query.dir || 'asc');
+
//Response state
const [brewCollection, setBrewCollection] = useState(null);
const [totalBrews, setTotalBrews] = useState(null);
const [searching, setSearching] = useState(false);
const [error, setError] = useState(null);
-
const titleRef = useRef(null);
const authorRef = useRef(null);
const countRef = useRef(null);
@@ -34,7 +38,7 @@ const VaultPage = (props)=>{
useEffect(()=>{
disableSubmitIfFormInvalid();
- loadPage(pageState, true);
+ loadPage(pageState, true, props.query.sort, props.query.dir);
}, []);
const updateStateWithBrews = (brews, page)=>{
@@ -43,7 +47,7 @@ const VaultPage = (props)=>{
setSearching(false);
};
- const updateUrl = (titleValue, authorValue, countValue, v3Value, legacyValue, page)=>{
+ const updateUrl = (titleValue, authorValue, countValue, v3Value, legacyValue, page, sort, dir)=>{
const url = new URL(window.location.href);
const urlParams = new URLSearchParams(url.search);
@@ -53,21 +57,23 @@ const VaultPage = (props)=>{
urlParams.set('v3', v3Value);
urlParams.set('legacy', legacyValue);
urlParams.set('page', page);
+ urlParams.set('sort', sort);
+ urlParams.set('dir', dir);
url.search = urlParams.toString();
window.history.replaceState(null, '', url.toString());
};
- const performSearch = async (title, author, count, v3, legacy, page)=>{
- updateUrl(title, author, count, v3, legacy, page);
+ const performSearch = async (title, author, count, v3, legacy, page, sort, dir)=>{
+ updateUrl(title, author, count, v3, legacy, page, sort, dir);
- const response = await request.get(
- `/api/vault?title=${title}&author=${author}&v3=${v3}&legacy=${legacy}&count=${count}&page=${page}`
- ).catch((error)=>{
- console.log('error at loadPage: ', error);
- setError(error);
- updateStateWithBrews([], 1);
- });
+ const response = await request
+ .get(`/api/vault?title=${title}&author=${author}&v3=${v3}&legacy=${legacy}&count=${count}&page=${page}&sort=${sort}&dir=${dir}`)
+ .catch((error)=>{
+ console.log('error at loadPage: ', error);
+ setError(error);
+ updateStateWithBrews([], 1);
+ });
if(response.ok)
updateStateWithBrews(response.body.brews, page);
@@ -76,9 +82,8 @@ const VaultPage = (props)=>{
const loadTotal = async (title, author, v3, legacy)=>{
setTotalBrews(null);
- const response = await request.get(
- `/api/vault/total?title=${title}&author=${author}&v3=${v3}&legacy=${legacy}`
- ).catch((error)=>{
+ const response = await request.get(`/api/vault/total?title=${title}&author=${author}&v3=${v3}&legacy=${legacy}`)
+ .catch((error)=>{
console.log('error at loadTotal: ', error);
setError(error);
updateStateWithBrews([], 1);
@@ -88,9 +93,8 @@ const VaultPage = (props)=>{
setTotalBrews(response.body.totalBrews);
};
- const loadPage = async (page, updateTotal)=>{
- if(!validateForm())
- return;
+ const loadPage = async (page, updateTotal, sort, dir)=>{
+ if(!validateForm()) return;
setSearching(true);
setError(null);
@@ -100,8 +104,14 @@ const VaultPage = (props)=>{
const count = countRef.current.value || 10;
const v3 = v3Ref.current.checked != false;
const legacy = legacyRef.current.checked != false;
+ const sortOption = sort || 'title';
+ const dirOption = dir || 'asc';
+ const pageProp = page || 1;
- performSearch(title, author, count, v3, legacy, page);
+ setSort(sortOption);
+ setdir(dirOption);
+
+ performSearch(title, author, count, v3, legacy, pageProp, sortOption, dirOption);
if(updateTotal)
loadTotal(title, author, v3, legacy);
@@ -248,6 +258,33 @@ const VaultPage = (props)=>{
);
+ const renderSortOption = (optionTitle, optionValue)=>{
+ const oppositeDir = dirState === 'asc' ? 'desc' : 'asc';
+
+ return (
+
+
+ {sortState === optionValue && (
+
+ )}
+
+ );
+ };
+
+ const renderSortBar = ()=>{
+
+ return (
+
+ {renderSortOption('Title', 'title', props.query.dir)}
+ {renderSortOption('Created Date', 'createdAt', props.query.dir)}
+ {renderSortOption('Updated Date', 'updatedAt', props.query.dir)}
+ {renderSortOption('Views', 'views', props.query.dir)}
+
+ );
+ };
+
const renderPaginationControls = ()=>{
if(!totalBrews) return null;
@@ -271,10 +308,8 @@ const VaultPage = (props)=>{
.map((_, index)=>(
loadPage(startPage + index, false)}
+ className={`pageNumber ${pageState === startPage + index ? 'currentPage' : ''}`}
+ onClick={()=>loadPage(startPage + index, false, sortState, dirState)}
>
{startPage + index}
@@ -284,7 +319,7 @@ const VaultPage = (props)=>{