Skip to content

Commit da499c1

Browse files
committed
Fix tag page
1 parent 2852656 commit da499c1

1 file changed

Lines changed: 120 additions & 2 deletions

File tree

src/Tags.tsx

Lines changed: 120 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,125 @@
1-
import { JSX } from "react";
1+
import React, { JSX, useEffect, useState } from "react";
2+
import { NOT_TAGS } from "~/Constants";
3+
import useDaemonRPC from "~/DaemonRPC";
4+
import LBRY from "~/LBRY";
5+
import ClaimPreviewTile from "~/components/ClaimPreviewTile";
6+
import CustomSVG from "~/components/CustomSVG";
7+
import Loader from "~/components/Loader";
28

39
function Tags(): JSX.Element {
4-
return <>TODO Tags page</>;
10+
const daemonRPC: string = useDaemonRPC();
11+
12+
const [items, setItems] = useState<object[] | string | null>(null);
13+
const [tags, setTags] = useState<string[]>([]);
14+
const [toggle, setToggle] = useState<string>("new");
15+
16+
useEffect((): void => {
17+
const orderBy: string =
18+
(toggle === "new" ? "release_time" : "") +
19+
(toggle === "trending" ? "trending_score" : "") +
20+
(toggle === "top" ? "effective_amount" : "");
21+
22+
const hourAgo: number = (Date.now() - 3600000) / 1000;
23+
24+
const releaseTime: string =
25+
(toggle === "new" ? "<" + hourAgo : "") +
26+
(toggle === "trending" ? "<" + hourAgo : "") +
27+
(toggle === "top" ? ">" + hourAgo : "");
28+
29+
// "<1765920600"
30+
31+
const searchOptions: object = {
32+
page_size: 20,
33+
page: 1,
34+
claim_type: ["stream", "repost", "channel"],
35+
no_totals: true,
36+
not_channel_ids: [],
37+
not_tags: NOT_TAGS,
38+
order_by: [orderBy],
39+
has_source: true,
40+
any_tags: tags,
41+
release_time: releaseTime,
42+
include_purchase_receipt: true,
43+
};
44+
45+
LBRY.rpc(
46+
daemonRPC,
47+
LBRY.CLAIM_SEARCH,
48+
searchOptions,
49+
null,
50+
LBRY.isUsingProxy(),
51+
).then((json: object): void => {
52+
setItems(json.result.items || json.error?.message || "Unknown error");
53+
});
54+
}, [daemonRPC, tags, toggle]);
55+
56+
return (
57+
<>
58+
<div>
59+
<CustomSVG
60+
style={{
61+
fill: "transparent",
62+
height: "24",
63+
width: "24",
64+
verticalAlign: "middle",
65+
stroke: "white",
66+
strokeWidth: "2px",
67+
padding: open ? "0px 8px 0px 12px" : null,
68+
}}
69+
icon="tag"
70+
viewBox="0 0 24 24"
71+
/>
72+
<h1 style={{ display: "inline-block", verticalAlign: "middle" }}>
73+
Your Tags
74+
</h1>
75+
<div style={{ padding: "16px 0" }}>
76+
<button
77+
onClick={(): void => {
78+
if (toggle !== "new") {
79+
setItems(null);
80+
}
81+
setToggle("new");
82+
}}
83+
>
84+
New
85+
</button>
86+
<button
87+
onClick={(): void => {
88+
if (toggle !== "trending") {
89+
setItems(null);
90+
}
91+
setToggle("trending");
92+
}}
93+
>
94+
Trending
95+
</button>
96+
<button
97+
onClick={(): void => {
98+
if (toggle !== "top") {
99+
setItems(null);
100+
}
101+
setToggle("top");
102+
}}
103+
>
104+
Top
105+
</button>
106+
</div>
107+
<div style={{ padding: "16px 0", textAlign: "center" }}>
108+
{items === null ? (
109+
<Loader />
110+
) : "string" === typeof items ? (
111+
<span style={{ color: "red" }}>{items}</span>
112+
) : items.length > 0 ? (
113+
items.map((cell: unknown, i: number) => (
114+
<ClaimPreviewTile claim={cell} key={i} />
115+
))
116+
) : (
117+
"No items"
118+
)}
119+
</div>
120+
</div>
121+
</>
122+
);
5123
}
6124

7125
export default Tags;

0 commit comments

Comments
 (0)