Skip to content

Commit b5e5e4b

Browse files
authored
feat(tools): add toggle to see unfeatured tools for admins (#1474)
feat(tools): add toggle to see unfeatured tools
1 parent 87d3884 commit b5e5e4b

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

src/routes/tools/+page.server.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const load = async ({ url, locals }) => {
2323
const sort = url.searchParams.get("sort")?.trim() ?? SortKey.TRENDING;
2424
const createdByCurrentUser = locals.user?.username && locals.user.username === username;
2525
const activeOnly = url.searchParams.get("active") === "true";
26+
const showUnfeatured = url.searchParams.get("showUnfeatured") === "true";
2627

2728
let user: Pick<User, "_id"> | null = null;
2829
if (username) {
@@ -44,7 +45,9 @@ export const load = async ({ url, locals }) => {
4445
const queryTokens = !!query && generateQueryTokens(query);
4546

4647
const filter: Filter<CommunityToolDB> = {
47-
...(!createdByCurrentUser && !activeOnly && !locals.user?.isAdmin && { featured: true }),
48+
...(!createdByCurrentUser &&
49+
!activeOnly &&
50+
!(locals.user?.isAdmin && showUnfeatured) && { featured: true }),
4851
...(user && { createdById: user._id }),
4952
...(queryTokens && { searchTokens: { $all: queryTokens } }),
5053
...(activeOnly && {
@@ -90,5 +93,6 @@ export const load = async ({ url, locals }) => {
9093
numItemsPerPage: NUM_PER_PAGE,
9194
query,
9295
sort,
96+
showUnfeatured,
9397
};
9498
};

src/routes/tools/+page.svelte

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
let isFilterInPorgress = false;
3737
let sortValue = data.sort as SortKey;
3838
39+
let showUnfeatured = data.showUnfeatured;
40+
3941
const resetFilter = () => {
4042
filterValue = "";
4143
isFilterInPorgress = false;
@@ -73,6 +75,15 @@
7375
goto(newUrl);
7476
};
7577
78+
const toggleShowUnfeatured = () => {
79+
showUnfeatured = !showUnfeatured;
80+
const newUrl = getHref($page.url, {
81+
newKeys: { showUnfeatured: showUnfeatured ? "true" : undefined },
82+
existingKeys: { behaviour: "delete", keys: [] },
83+
});
84+
goto(newUrl);
85+
};
86+
7687
const goToActiveUrl = () => {
7788
return getHref($page.url, {
7889
newKeys: { active: "true" },
@@ -112,6 +123,12 @@
112123
>. Consider sharing your feedback with us!
113124
</h4>
114125
<div class="ml-auto mt-6 flex justify-between gap-2 max-sm:flex-col sm:items-center">
126+
{#if data.user?.isAdmin}
127+
<label class="mr-auto flex items-center gap-1 text-red-500" title="Admin only feature">
128+
<input type="checkbox" checked={showUnfeatured} on:change={toggleShowUnfeatured} />
129+
Show unfeatured tools
130+
</label>
131+
{/if}
115132
<a
116133
href={`${base}/tools/new`}
117134
class="flex items-center gap-1 whitespace-nowrap rounded-lg border bg-white py-1 pl-1.5 pr-2.5 shadow-sm hover:bg-gray-50 hover:shadow-none dark:border-gray-600 dark:bg-gray-700 dark:hover:bg-gray-700"
@@ -211,7 +228,10 @@
211228
{@const isOfficial = !tool.createdByName}
212229
<a
213230
href="{base}/tools/{tool._id.toString()}"
214-
class="relative flex flex-row items-center gap-4 overflow-hidden text-balance rounded-xl border bg-gray-50/50 px-4 text-center shadow hover:bg-gray-50 hover:shadow-inner dark:border-gray-800/70 dark:bg-gray-950/20 dark:hover:bg-gray-950/40 max-sm:px-4 sm:h-24"
231+
class="relative flex flex-row items-center gap-4 overflow-hidden text-balance rounded-xl border bg-gray-50/50 px-4 text-center shadow hover:bg-gray-50 hover:shadow-inner dark:bg-gray-950/20 dark:hover:bg-gray-950/40 max-sm:px-4 sm:h-24 {!tool.featured &&
232+
!isOfficial
233+
? ' border-red-500/30'
234+
: 'dark:border-gray-800/70'}"
215235
class:!border-blue-600={isActive}
216236
>
217237
<ToolLogo color={tool.color} icon={tool.icon} />

0 commit comments

Comments
 (0)