feat: discover overhaul (filters!) (#3232)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { encodeURIExtraParams } from '@app/hooks/useSearchInput';
|
||||
import { MediaStatus } from '@server/constants/media';
|
||||
import useSWRInfinite from 'swr/infinite';
|
||||
import useSettings from './useSettings';
|
||||
@@ -27,9 +28,13 @@ interface DiscoverResult<T, S> {
|
||||
firstResultData?: BaseSearchResult<T> & S;
|
||||
}
|
||||
|
||||
const useDiscover = <T extends BaseMedia, S = Record<string, never>>(
|
||||
const useDiscover = <
|
||||
T extends BaseMedia,
|
||||
S = Record<string, never>,
|
||||
O = Record<string, unknown>
|
||||
>(
|
||||
endpoint: string,
|
||||
options?: Record<string, unknown>,
|
||||
options?: O,
|
||||
{ hideAvailable = true } = {}
|
||||
): DiscoverResult<T, S> => {
|
||||
const settings = useSettings();
|
||||
@@ -47,7 +52,10 @@ const useDiscover = <T extends BaseMedia, S = Record<string, never>>(
|
||||
};
|
||||
|
||||
const finalQueryString = Object.keys(params)
|
||||
.map((paramKey) => `${paramKey}=${params[paramKey]}`)
|
||||
.map(
|
||||
(paramKey) =>
|
||||
`${paramKey}=${encodeURIExtraParams(params[paramKey] as string)}`
|
||||
)
|
||||
.join('&');
|
||||
|
||||
return `${endpoint}?${finalQueryString}`;
|
||||
|
||||
@@ -132,3 +132,20 @@ export const useUpdateQueryParams = (
|
||||
[filter, updateQueryParams]
|
||||
);
|
||||
};
|
||||
|
||||
export const useBatchUpdateQueryParams = (
|
||||
filter: ParsedUrlQuery
|
||||
): ((items: Record<string, string>) => void) => {
|
||||
const updateQueryParams = useQueryParams();
|
||||
|
||||
return useCallback(
|
||||
(items: Record<string, string>) => {
|
||||
const query = {
|
||||
...filter,
|
||||
...items,
|
||||
};
|
||||
updateQueryParams(query, 'replace');
|
||||
},
|
||||
[filter, updateQueryParams]
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user