diff --git a/backend/user/serializers.py b/backend/user/serializers.py index 2a8a6f47..8f5cbd51 100644 --- a/backend/user/serializers.py +++ b/backend/user/serializers.py @@ -5,7 +5,7 @@ from common.src.helper import get_stylesheets from rest_framework import serializers from user.models import Account -from video.src.constants import OrderEnum, SortEnum +from video.src.constants import OrderEnum, SortEnum, VideoTypeEnum class AccountSerializer(serializers.ModelSerializer): @@ -37,6 +37,9 @@ class UserMeConfigSerializer(serializers.Serializer): view_style_channel = serializers.ChoiceField(choices=["grid", "list"]) view_style_downloads = serializers.ChoiceField(choices=["grid", "list"]) view_style_playlist = serializers.ChoiceField(choices=["grid", "list"]) + vid_type_filter = serializers.ChoiceField( + choices=VideoTypeEnum.values_known(), allow_null=True + ) grid_items = serializers.IntegerField(max_value=7, min_value=3) hide_watched = serializers.BooleanField(allow_null=True) file_size_unit = serializers.ChoiceField(choices=["binary", "metric"]) diff --git a/backend/user/src/user_config.py b/backend/user/src/user_config.py index c9861926..137fa681 100644 --- a/backend/user/src/user_config.py +++ b/backend/user/src/user_config.py @@ -20,6 +20,7 @@ class UserConfigType(TypedDict, total=False): view_style_channel: str view_style_downloads: str view_style_playlist: str + vid_type_filter: str | None grid_items: int hide_watched: bool | None file_size_unit: str @@ -43,6 +44,7 @@ class UserConfig: view_style_channel="list", view_style_downloads="list", view_style_playlist="grid", + vid_type_filter=None, grid_items=3, hide_watched=False, file_size_unit="binary", diff --git a/frontend/src/api/actions/updateUserConfig.ts b/frontend/src/api/actions/updateUserConfig.ts index 038384fc..2f2a3a4e 100644 --- a/frontend/src/api/actions/updateUserConfig.ts +++ b/frontend/src/api/actions/updateUserConfig.ts @@ -1,6 +1,6 @@ import { ViewStylesType } from '../../configuration/constants/ViewStyle'; import APIClient from '../../functions/APIClient'; -import { SortByType, SortOrderType } from '../loader/loadVideoListByPage'; +import { SortByType, SortOrderType, VideoTypes } from '../loader/loadVideoListByPage'; export type ColourVariants = | 'dark.css' @@ -31,6 +31,7 @@ export type UserConfigType = { view_style_channel: ViewStylesType; view_style_downloads: ViewStylesType; view_style_playlist: ViewStylesType; + vid_type_filter: VideoTypes | null; grid_items: number; hide_watched: boolean | null; file_size_unit: 'binary' | 'metric'; diff --git a/frontend/src/components/Filterbar.tsx b/frontend/src/components/Filterbar.tsx index 73b5a473..7a27aeac 100644 --- a/frontend/src/components/Filterbar.tsx +++ b/frontend/src/components/Filterbar.tsx @@ -13,15 +13,16 @@ import { SortByType, SortOrderEnum, SortOrderType, + VideoTypes, } from '../api/loader/loadVideoListByPage'; type FilterbarProps = { - hideToggleText: string; viewStyle: ViewStyleNamesType; showSort?: boolean; + showTypeFilter?: boolean; }; -const Filterbar = ({ hideToggleText, viewStyle, showSort = true }: FilterbarProps) => { +const Filterbar = ({ viewStyle, showSort = true, showTypeFilter = false }: FilterbarProps) => { const { userConfig, setUserConfig } = useUserConfigStore(); const [showHidden, setShowHidden] = useState(false); @@ -29,8 +30,6 @@ const Filterbar = ({ hideToggleText, viewStyle, showSort = true }: FilterbarProp const currentViewStyle = userConfig[viewStyle]; const isGridView = currentViewStyle === ViewStylesEnum.Grid; - console.log(hideToggleText); - useEffect(() => { if (!showSort) { return; @@ -67,30 +66,23 @@ const Filterbar = ({ hideToggleText, viewStyle, showSort = true }: FilterbarProp - - {/*