Skip to content

Commit 166e731

Browse files
committed
feat: add dropdown configuration for podcast filtering and sorting; remove global loading context
1 parent b50fded commit 166e731

File tree

4 files changed

+53
-81
lines changed

4 files changed

+53
-81
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { QueryParamsChannelsType, QueryParamsChannelsSort, QueryParamsStatsRange } from "podverse-helpers";
2+
3+
export const typeDropdownMenuItems = [
4+
{ label: "All", param: "type", value: "all" },
5+
{ label: "Subscribed", param: "type", value: "subscribed" },
6+
{ label: "Category", param: "type", value: "category" }
7+
];
8+
9+
export const sortDropdownMenuItems = [
10+
{ label: "Recent", param: "sort", value: "recent" },
11+
{ label: "Oldest", param: "sort", value: "oldest" },
12+
{ label: "A - Z", param: "sort", value: "alphabetical" },
13+
{ label: "Top", param: "sort", value: "top" },
14+
];
15+
16+
export const rangeDropdownMenuItems = [
17+
{ label: "Day", param: "range", value: "day" },
18+
{ label: "Week", param: "range", value: "week" },
19+
{ label: "Month", param: "range", value: "month" },
20+
{ label: "All Time", param: "range", value: "all-time" },
21+
];
22+
23+
export function getDropdownConfig(type?: QueryParamsChannelsType, sort?: QueryParamsChannelsSort, range?: QueryParamsStatsRange) {
24+
let currentSort = sort;
25+
let currentRange = range;
26+
let showRangeDropdown = false;
27+
28+
let typeMenuItems = typeDropdownMenuItems;
29+
let sortMenuItems = sortDropdownMenuItems;
30+
let rangeMenuItems = rangeDropdownMenuItems;
31+
32+
if (type === "all" || type === "category") {
33+
sortMenuItems = [{ label: "Top", param: "sort", value: "top" }];
34+
currentSort = "top";
35+
currentRange = currentRange || "day";
36+
} else if (type === "subscribed") {
37+
sortMenuItems = sortDropdownMenuItems;
38+
currentSort = currentSort || "alphabetical";
39+
}
40+
41+
if (currentSort !== "top") {
42+
showRangeDropdown = false;
43+
rangeMenuItems = [];
44+
} else {
45+
showRangeDropdown = true;
46+
}
47+
48+
return { typeMenuItems, sortMenuItems, rangeMenuItems, currentSort, currentRange, showRangeDropdown };
49+
}

src/app/podcasts/page.tsx

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { CATEGORY_MAPPING_KEYS, QUERY_PARAMS_STATS_RANGE_VALUES, QUERY_PARAMS_CHANNELS_SORT_VALUES,
2-
QUERY_PARAMS_CHANNELS_TYPE_VALUES, getTotalPages,
3-
QueryParamsChannelsType,
4-
QueryParamsChannelsSort,
5-
QueryParamsStatsRange} from "podverse-helpers";
2+
QUERY_PARAMS_CHANNELS_TYPE_VALUES, getTotalPages, QueryParamsChannelsType,
3+
QueryParamsChannelsSort, QueryParamsStatsRange } from "podverse-helpers";
64
import { z } from "zod";
5+
import { getDropdownConfig } from "./PodcastsDropdownConfig";
76
import PodcastsClient from "./PodcastsClient";
87
import { getSSRAuthService } from "../../utils/auth/ssrAuth";
98

@@ -53,7 +52,6 @@ export default async function Podcasts({ searchParams }: { searchParams?: Promis
5352
async function parseSearchParams(params: PodcastPageProps, isAuthenticated: boolean) {
5453
const parsed = searchParamsSchema.safeParse(params);
5554
if (!parsed.success) {
56-
console.warn("Invalid search parameters:", parsed.error);
5755
return {};
5856
}
5957
const data = parsed.data;
@@ -62,51 +60,3 @@ async function parseSearchParams(params: PodcastPageProps, isAuthenticated: bool
6260
}
6361
return data;
6462
}
65-
66-
const typeDropdownMenuItems = [
67-
{ label: "All", param: "type", value: "all" },
68-
{ label: "Subscribed", param: "type", value: "subscribed" },
69-
{ label: "Category", param: "type", value: "category" }
70-
];
71-
72-
const sortDropdownMenuItems = [
73-
{ label: "Recent", param: "sort", value: "recent" },
74-
{ label: "Oldest", param: "sort", value: "oldest" },
75-
{ label: "A - Z", param: "sort", value: "alphabetical" },
76-
{ label: "Top", param: "sort", value: "top" },
77-
];
78-
79-
const rangeDropdownMenuItems = [
80-
{ label: "Day", param: "range", value: "day" },
81-
{ label: "Week", param: "range", value: "week" },
82-
{ label: "Month", param: "range", value: "month" },
83-
{ label: "All Time", param: "range", value: "all-time" },
84-
];
85-
86-
function getDropdownConfig(type?: QueryParamsChannelsType, sort?: QueryParamsChannelsSort, range?: QueryParamsStatsRange) {
87-
let currentSort = sort;
88-
let currentRange = range;
89-
let showRangeDropdown = false;
90-
91-
let typeMenuItems = typeDropdownMenuItems;
92-
let sortMenuItems = sortDropdownMenuItems;
93-
let rangeMenuItems = rangeDropdownMenuItems;
94-
95-
if (type === "all" || type === "category") {
96-
sortMenuItems = [{ label: "Top", param: "sort", value: "top" }];
97-
currentSort = "top";
98-
currentRange = currentRange || "day";
99-
} else if (type === "subscribed") {
100-
sortMenuItems = sortDropdownMenuItems;
101-
currentSort = currentSort || "alphabetical";
102-
}
103-
104-
if (currentSort !== "top") {
105-
showRangeDropdown = false;
106-
rangeMenuItems = [];
107-
} else {
108-
showRangeDropdown = true;
109-
}
110-
111-
return { typeMenuItems, sortMenuItems, rangeMenuItems, currentSort, currentRange, showRangeDropdown };
112-
}

src/contexts/LoadingGlobal.tsx

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/providers/Providers.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { DTOAccount } from 'podverse-helpers';
55
import { AccountProvider } from '../contexts/Account';
66
import { ThemeProvider } from '../contexts/Theme';
77
import { ModalsProvider } from '../contexts/Modals';
8-
import { LoadingSpinnerGlobalProvider } from '../contexts/LoadingGlobal';
98
import { UITheme } from '../utils/theme';
109

1110
export default function Providers({
@@ -26,9 +25,7 @@ export default function Providers({
2625
<ThemeProvider initialTheme={theme}>
2726
<AccountProvider ssrLoggedInAccount={ssrLoggedInAccount}>
2827
<ModalsProvider>
29-
<LoadingSpinnerGlobalProvider>
30-
{children}
31-
</LoadingSpinnerGlobalProvider>
28+
{children}
3229
</ModalsProvider>
3330
</AccountProvider>
3431
</ThemeProvider>

0 commit comments

Comments
 (0)