feat(reviews): add reviews route

allows seeing all reviews with optional filters.
works sans JS as well

closes https://github.com/zyachel/libremdb/issues/25
closes https://codeberg.org/zyachel/libremdb/issues/19
This commit is contained in:
zyachel
2024-03-31 15:37:44 +05:30
parent cf71cd39e1
commit dc42b3204c
29 changed files with 1053 additions and 31 deletions

View File

@@ -2,7 +2,7 @@ import { ChangeEventHandler, FormEventHandler, useRef, useState } from 'react';
import { useRouter } from 'next/router';
import { cleanQueryStr } from 'src/utils/helpers';
import { QueryTypes } from 'src/interfaces/shared/search';
import { resultTypes, resultTitleTypes } from 'src/utils/constants/find';
import { resultTypes, resultTitleTypes, findFilterable } from 'src/utils/constants/find';
import styles from 'src/styles/modules/components/form/find.module.scss';
type Props = {
@@ -29,13 +29,15 @@ const Form = ({ className }: Props) => {
const formEl = formRef.current!;
const formData = new FormData(formEl);
const query = (formData.get('q') as string).trim();
const query = formData.get('q');
if (typeof query !== 'string' || !query.trim()) return setIsDisabled(false);
const entries = [...formData.entries()] as [string, string][];
const queryStr = cleanQueryStr(entries);
const queryParams = Object.fromEntries(
formData.entries() as IterableIterator<[string, string]>
);
const queryStr = cleanQueryStr(queryParams, findFilterable);
if (query) router.push(`/find?${queryStr}`);
else setIsDisabled(false);
router.push(`/find?${queryStr}`);
formEl.reset();
};
@@ -117,5 +119,4 @@ const RadioBtns = ({
</>
);
export default Form;