Skip to content

Commit 6442f7b

Browse files
feat: group hide
1 parent 3a439f4 commit 6442f7b

4 files changed

Lines changed: 49 additions & 19 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@base-ui/react": "^1.3.0",
1717
"@better-auth/passkey": "^1.5.5",
1818
"@hookform/resolvers": "^3.9.1",
19-
"@polinetwork/backend": "^0.15.7",
19+
"@polinetwork/backend": "^0.15.10",
2020
"@radix-ui/react-dialog": "^1.1.15",
2121
"@t3-oss/env-nextjs": "^0.13.10",
2222
"@tanstack/react-query": "^5.90.19",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app/dashboard/(active)/telegram/groups/page.tsx

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
"use client"
2-
import { useQueryClient } from "@tanstack/react-query"
3-
import { ArrowLeft, Copy, Search, X } from "lucide-react"
2+
import { useMutation, useQueryClient } from "@tanstack/react-query"
3+
import { ArrowLeft, Copy, Pen, Search, X } from "lucide-react"
44
import Link from "next/link"
55
import { useState } from "react"
66
import { toast } from "sonner"
7+
import { Badge } from "@/components/ui/badge"
78
import { Button } from "@/components/ui/button"
89
import { Input } from "@/components/ui/input"
910
import { Label } from "@/components/ui/label"
@@ -17,14 +18,25 @@ export default function TgGroups() {
1718

1819
const trpc = useTRPC()
1920
const qc = useQueryClient()
20-
const queryOpts = trpc.tg.groups.search.queryOptions({ query, limit: 20 })
21+
const queryOpts = trpc.tg.groups.search.queryOptions({ query, limit: 20, showHidden: true })
2122

2223
const [rows, setRows] = useState<Groups>([])
23-
async function search(e: React.FormEvent<HTMLFormElement>) {
24-
e.preventDefault()
2524

25+
async function search() {
2626
const res = await qc.fetchQuery(queryOpts)
2727
setRows(res.groups)
28+
return res
29+
}
30+
31+
async function invalidate() {
32+
await qc.invalidateQueries(queryOpts)
33+
await search()
34+
}
35+
36+
async function submit(e: React.FormEvent<HTMLFormElement>) {
37+
e.preventDefault()
38+
39+
const res = await search()
2840
if (res.count === 0) toast.warning("No groups found with this query")
2941
else toast.info(`Found ${res.count} groups`)
3042
}
@@ -39,7 +51,7 @@ export default function TgGroups() {
3951
<Link href="/dashboard/telegram" className="flex gap-1 items-center text-muted-foreground mb-2 hover:underline">
4052
<ArrowLeft size={16} /> Back
4153
</Link>
42-
<form onSubmit={search} className="pt-2 gap-y-4 flex flex-col justify-start items-start">
54+
<form onSubmit={submit} className="pt-2 gap-y-4 flex flex-col justify-start items-start">
4355
<div className="flex gap-2 flex-col items-start justify-start">
4456
<Label htmlFor="email" className="text-base">
4557
Search
@@ -70,23 +82,35 @@ export default function TgGroups() {
7082
</div>
7183
</form>
7284
<div className="flex flex-col w-full items-start justify-start py-4">
73-
<div className="grid gap-4 items-center grid-cols-4 w-full border-b py-2">
85+
<div className="grid gap-4 items-center grid-cols-5 w-full border-b py-2">
7486
<p>telegram ID</p>
7587
<p>Title</p>
7688
<p>Tag</p>
7789
<p>Invite Link</p>
90+
<p>Hide</p>
7891
</div>
7992
{rows.map((r) => (
80-
<GroupRow row={r} key={r.telegramId} />
93+
<GroupRow row={r} key={r.telegramId} invalidate={invalidate} />
8194
))}
8295
</div>
8396
</div>
8497
)
8598
}
8699

87-
function GroupRow({ row: r }: { row: Groups[number] }) {
100+
function GroupRow({ row: r, invalidate }: { row: Groups[number]; invalidate: () => void }) {
101+
const trpc = useTRPC()
102+
const { mutateAsync: hideMutate } = useMutation(trpc.tg.groups.setHide.mutationOptions())
103+
104+
async function toggleHide() {
105+
const ok = await hideMutate({ telegramId: r.telegramId, hide: !r.hide }).catch(() => false)
106+
if (!ok) toast.error("The field cannot be modified")
107+
108+
toast.success("Hide option toggled!")
109+
invalidate()
110+
}
111+
88112
return (
89-
<div className="grid gap-4 items-center grid-cols-4 border-b py-2 w-full">
113+
<div className="grid gap-4 items-center grid-cols-5 border-b py-2 w-full">
90114
<p>{r.telegramId}</p>
91115
<p>{r.title}</p>
92116
<p className={r.tag ? "" : "text-muted-foreground italic"}>{r.tag ? `@${r.tag}` : `<unset>`}</p>
@@ -97,15 +121,15 @@ function GroupRow({ row: r }: { row: Groups[number] }) {
97121
target="_blank"
98122
rel="noopener noreferrer"
99123
aria-label={`Link for group ${r.title}`}
100-
className="hover:underline"
124+
className="hover:underline text-xs"
101125
>
102126
{r.link}
103127
</a>
104128
)}
105129
<Button
106130
type="button"
107131
variant="outline"
108-
size="icon"
132+
size="icon-sm"
109133
className={!r.link ? "hidden" : ""}
110134
onClick={async () => {
111135
try {
@@ -121,6 +145,12 @@ function GroupRow({ row: r }: { row: Groups[number] }) {
121145
<Copy />
122146
</Button>
123147
</div>
148+
<div className="flex items-center justify-start gap-2">
149+
<p>{r.hide ? <Badge className="bg-yellow-800">HIDDEN</Badge> : <Badge variant="secondary">Visibile</Badge>}</p>
150+
<Button type="button" variant="outline" size="icon-sm" className={!r.link ? "hidden" : ""} onClick={toggleHide}>
151+
<Pen />
152+
</Button>
153+
</div>
124154
</div>
125155
)
126156
}

src/app/dashboard/(active)/telegram/users/new-group-admin.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function NewGroupAdmin({ user, alreadyIn }: { user: User; alreadyIn: numb
3838
const [groups, setGroups] = useState<Groups>([])
3939
const [selectedGroup, setSelectedGroup] = useState<Groups[number] | null>(null)
4040

41-
const queryOpts = trpc.tg.groups.search.queryOptions({ query: groupQuery, limit: 20 })
41+
const queryOpts = trpc.tg.groups.search.queryOptions({ query: groupQuery, limit: 20, showHidden: true })
4242

4343
async function searchGroup(e: React.FormEvent<HTMLFormElement>) {
4444
e.preventDefault()

0 commit comments

Comments
 (0)