improve dashboard badges display
This commit is contained in:
commit
dd938a4943
2 changed files with 34 additions and 18 deletions
|
|
@ -6,30 +6,23 @@ import { ListQuestion, LoadingBar } from 'components';
|
|||
import { PaginatedList } from 'controllers';
|
||||
import { searchQuestions } from 'services/questionsServices';
|
||||
|
||||
const recent = {};
|
||||
const best = { sort: 'u' };
|
||||
const interesting = { match: JSON.stringify({ answers: 0 }), sort: 'uvc' };
|
||||
const hot = { match: JSON.stringify({ hasAcceptedAnswer: false }), sort: 'uvac' };
|
||||
const sortObjArr = [recent, best, interesting, hot];
|
||||
|
||||
export default function Buffet() {
|
||||
const [sort, setSort] = useState(0);
|
||||
const [sort, setSort] = useState('');
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [, setSearchParams] = useSearchParams();
|
||||
|
||||
const getData = async ({ question_id }) => {
|
||||
const { questions } = await searchQuestions({
|
||||
...sortObjArr[sort],
|
||||
after: question_id,
|
||||
sort,
|
||||
});
|
||||
|
||||
setLoading(() => false);
|
||||
return questions;
|
||||
};
|
||||
|
||||
const handleSortChange = (_, newSort) => {
|
||||
setSearchParams(sortObjArr[newSort]);
|
||||
setSort(newSort);
|
||||
const handleSortChange = (_, value) => {
|
||||
setSearchParams({ sort: value });
|
||||
setSort(value);
|
||||
};
|
||||
|
||||
return (
|
||||
|
|
@ -60,10 +53,10 @@ export default function Buffet() {
|
|||
onChange={handleSortChange}
|
||||
style={{ display: 'block', marginTop: '1%' }}
|
||||
>
|
||||
<ToggleButton value={0}>Recent</ToggleButton>
|
||||
<ToggleButton value={1}>Best</ToggleButton>
|
||||
<ToggleButton value={2}>Interesting</ToggleButton>
|
||||
<ToggleButton value={3}>Hot</ToggleButton>
|
||||
<ToggleButton value=''>Recent</ToggleButton>
|
||||
<ToggleButton value='u'>Best</ToggleButton>
|
||||
<ToggleButton value='uvc'>Interesting</ToggleButton>
|
||||
<ToggleButton value='uvac'>Hot</ToggleButton>
|
||||
</ToggleButtonGroup>
|
||||
</Box>
|
||||
{loading && <LoadingBar />}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ const config = require('server/config.json');
|
|||
const Question = require('server/db/models/Question');
|
||||
|
||||
async function Search(req, res) {
|
||||
const { creator, title, text, tags, createdAt } = req.query;
|
||||
const { creator, title, text, tags, createdAt, sort } = req.query;
|
||||
|
||||
let searchQuery = {};
|
||||
if (creator) {
|
||||
|
|
@ -28,7 +28,30 @@ async function Search(req, res) {
|
|||
searchQuery['createdAt'] = createdAt;
|
||||
}
|
||||
|
||||
const questions = await Question.find(searchQuery).sort({ createdAt: 'asc' });
|
||||
let sortQuery = [[createdAt, 'desc']];
|
||||
switch (sort) {
|
||||
case 'u':
|
||||
sortQuery = [['upvotes', 'desc']];
|
||||
break;
|
||||
case 'uvc':
|
||||
sortQuery = [
|
||||
['upvotes', 'desc'],
|
||||
['view', 'desc'],
|
||||
['comments', 'desc'],
|
||||
];
|
||||
break;
|
||||
case 'uvac':
|
||||
sortQuery = [
|
||||
['upvotes', 'desc'],
|
||||
['view', 'desc'],
|
||||
['answers', 'desc'],
|
||||
['comments', 'desc'],
|
||||
];
|
||||
searchQuery['hasAcceptedAnswer'] = false;
|
||||
break;
|
||||
}
|
||||
|
||||
const questions = await Question.find(searchQuery).sort(sortQuery);
|
||||
|
||||
return res.send({ questions });
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue