@@ -4,145 +4,146 @@ import useDaemonRPC from "~/DaemonRPC";
44import LBRY from "~/LBRY" ;
55import ClaimPreviewTile from "~/components/ClaimPreviewTile" ;
66import CustomSVG from "~/components/CustomSVG" ;
7- import Loader from "~/components/Loader" ;
87import Error from "~/components/Error" ;
8+ import Loader from "~/components/Loader" ;
99
1010function Tags ( ) : JSX . Element {
1111 const daemonRPC : string = useDaemonRPC ( ) ;
1212
13- const [ localPreferenceResponse , setLocalPreferenceResponse ] = useState < object > ( undefined ) ;
14- const [ tags , setTags ] = useState < string [ ] > ( [ ] ) ;
15- const [ items , setItems ] = useState < object [ ] | string | null > ( null ) ;
16- const [ toggle , setToggle ] = useState < string > ( "new" ) ;
13+ const [ localPreferenceResponse , setLocalPreferenceResponse ] =
14+ useState < object > ( undefined ) ;
15+ const [ tags , setTags ] = useState < string [ ] > ( [ ] ) ;
16+ const [ items , setItems ] = useState < object [ ] | string | null > ( null ) ;
17+ const [ toggle , setToggle ] = useState < string > ( "new" ) ;
1718
18- useEffect ( ( ) : void => {
19- LBRY . rpc (
20- daemonRPC ,
21- LBRY . PREFERENCE_GET ,
22- { key : ' local' } ,
23- null ,
24- LBRY . isUsingProxy ( ) ,
25- ) . then ( ( json : object ) : void => {
26- setLocalPreferenceResponse ( json ) ;
27- if ( json ?. result ?. local ?. tags ) {
28- setTags ( json ?. result ?. local ?. tags ) ;
29- }
30- } ) ;
31- } , [ ] ) ;
19+ useEffect ( ( ) : void => {
20+ LBRY . rpc (
21+ daemonRPC ,
22+ LBRY . PREFERENCE_GET ,
23+ { key : " local" } ,
24+ null ,
25+ LBRY . isUsingProxy ( ) ,
26+ ) . then ( ( json : object ) : void => {
27+ setLocalPreferenceResponse ( json ) ;
28+ if ( json ?. result ?. local ?. tags ) {
29+ setTags ( json ?. result ?. local ?. tags ) ;
30+ }
31+ } ) ;
32+ } , [ ] ) ;
3233
33- useEffect ( ( ) : void => {
34- const orderBy : string =
35- ( toggle === "new" ? "release_time" : "" ) +
36- ( toggle === "trending" ? "trending_score" : "" ) +
37- ( toggle === "top" ? "effective_amount" : "" ) ;
34+ useEffect ( ( ) : void => {
35+ const orderBy : string =
36+ ( toggle === "new" ? "release_time" : "" ) +
37+ ( toggle === "trending" ? "trending_score" : "" ) +
38+ ( toggle === "top" ? "effective_amount" : "" ) ;
3839
39- const hourAgo : number = ( Date . now ( ) - 3600000 ) / 1000 ;
40+ const hourAgo : number = ( Date . now ( ) - 3600000 ) / 1000 ;
4041
41- const releaseTime : string =
42- ( toggle === "new" ? "<" + hourAgo : "" ) +
43- ( toggle === "trending" ? "<" + hourAgo : "" ) +
44- ( toggle === "top" ? ">" + hourAgo : "" ) ;
42+ const releaseTime : string =
43+ ( toggle === "new" ? "<" + hourAgo : "" ) +
44+ ( toggle === "trending" ? "<" + hourAgo : "" ) +
45+ ( toggle === "top" ? ">" + hourAgo : "" ) ;
4546
46- // "<1765920600"
47+ // "<1765920600"
4748
48- const searchOptions : object = {
49- page_size : 20 ,
50- page : 1 ,
51- claim_type : [ "stream" , "repost" , "channel" ] ,
52- no_totals : true ,
53- not_channel_ids : [ ] ,
54- not_tags : NOT_TAGS ,
55- order_by : [ orderBy ] ,
56- has_source : true ,
57- any_tags : tags ,
58- release_time : releaseTime ,
59- include_purchase_receipt : true ,
60- } ;
49+ const searchOptions : object = {
50+ page_size : 20 ,
51+ page : 1 ,
52+ claim_type : [ "stream" , "repost" , "channel" ] ,
53+ no_totals : true ,
54+ not_channel_ids : [ ] ,
55+ not_tags : NOT_TAGS ,
56+ order_by : [ orderBy ] ,
57+ has_source : true ,
58+ any_tags : tags ,
59+ release_time : releaseTime ,
60+ include_purchase_receipt : true ,
61+ } ;
6162
62- LBRY . rpc (
63- daemonRPC ,
64- LBRY . CLAIM_SEARCH ,
65- searchOptions ,
66- null ,
67- LBRY . isUsingProxy ( ) ,
68- ) . then ( ( json : object ) : void => {
69- setItems ( json . result . items || json . error ?. message || "Unknown error" ) ;
70- } ) ;
71- } , [ daemonRPC , tags , toggle ] ) ;
63+ LBRY . rpc (
64+ daemonRPC ,
65+ LBRY . CLAIM_SEARCH ,
66+ searchOptions ,
67+ null ,
68+ LBRY . isUsingProxy ( ) ,
69+ ) . then ( ( json : object ) : void => {
70+ setItems ( json . result . items || json . error ?. message || "Unknown error" ) ;
71+ } ) ;
72+ } , [ daemonRPC , tags , toggle ] ) ;
7273
73- if ( localPreferenceResponse ) {
74- if ( localPreferenceResponse . error ) {
75- return < Error message = { localPreferenceResponse . error . message } /> ;
76- }
77- return (
78- < >
79- < div >
80- < CustomSVG
81- style = { {
82- fill : "transparent" ,
83- height : "24" ,
84- width : "24" ,
85- verticalAlign : "middle" ,
86- stroke : "white" ,
87- strokeWidth : "2px" ,
88- padding : open ? "0px 8px 0px 12px" : null ,
89- } }
90- icon = "tag"
91- viewBox = "0 0 24 24"
92- />
93- < h1 style = { { display : "inline-block" , verticalAlign : "middle" } } >
94- Your Tags
95- </ h1 >
96- < div style = { { padding : "16px 0" } } >
97- < button
98- onClick = { ( ) : void => {
99- if ( toggle !== "new" ) {
100- setItems ( null ) ;
101- }
102- setToggle ( "new" ) ;
103- } }
104- >
105- New
106- </ button >
107- < button
108- onClick = { ( ) : void => {
109- if ( toggle !== "trending" ) {
110- setItems ( null ) ;
111- }
112- setToggle ( "trending" ) ;
113- } }
114- >
115- Trending
116- </ button >
117- < button
118- onClick = { ( ) : void => {
119- if ( toggle !== "top" ) {
120- setItems ( null ) ;
121- }
122- setToggle ( "top" ) ;
123- } }
124- >
125- Top
126- </ button >
127- </ div >
128- < div style = { { padding : "16px 0" , textAlign : "center" } } >
129- { items === null ? (
130- < Loader />
131- ) : "string" === typeof items ? (
132- < span style = { { color : "red" } } > { items } </ span >
133- ) : items . length > 0 ? (
134- items . map ( ( cell : unknown , i : number ) => (
135- < ClaimPreviewTile claim = { cell } key = { i } />
136- ) )
137- ) : (
138- "No items"
139- ) }
140- </ div >
141- </ div >
142- </ >
143- ) ;
74+ if ( localPreferenceResponse ) {
75+ if ( localPreferenceResponse . error ) {
76+ return < Error message = { localPreferenceResponse . error . message } /> ;
77+ }
78+ return (
79+ < >
80+ < div >
81+ < CustomSVG
82+ style = { {
83+ fill : "transparent" ,
84+ height : "24" ,
85+ width : "24" ,
86+ verticalAlign : "middle" ,
87+ stroke : "white" ,
88+ strokeWidth : "2px" ,
89+ padding : open ? "0px 8px 0px 12px" : null ,
90+ } }
91+ icon = "tag"
92+ viewBox = "0 0 24 24"
93+ />
94+ < h1 style = { { display : "inline-block" , verticalAlign : "middle" } } >
95+ Your Tags
96+ </ h1 >
97+ < div style = { { padding : "16px 0" } } >
98+ < button
99+ onClick = { ( ) : void => {
100+ if ( toggle !== "new" ) {
101+ setItems ( null ) ;
102+ }
103+ setToggle ( "new" ) ;
104+ } }
105+ >
106+ New
107+ </ button >
108+ < button
109+ onClick = { ( ) : void => {
110+ if ( toggle !== "trending" ) {
111+ setItems ( null ) ;
112+ }
113+ setToggle ( "trending" ) ;
114+ } }
115+ >
116+ Trending
117+ </ button >
118+ < button
119+ onClick = { ( ) : void => {
120+ if ( toggle !== "top" ) {
121+ setItems ( null ) ;
122+ }
123+ setToggle ( "top" ) ;
124+ } }
125+ >
126+ Top
127+ </ button >
128+ </ div >
129+ < div style = { { padding : "16px 0" , textAlign : "center" } } >
130+ { items === null ? (
131+ < Loader />
132+ ) : "string" === typeof items ? (
133+ < span style = { { color : "red" } } > { items } </ span >
134+ ) : items . length > 0 ? (
135+ items . map ( ( cell : unknown , i : number ) => (
136+ < ClaimPreviewTile claim = { cell } key = { i } />
137+ ) )
138+ ) : (
139+ "No items"
140+ ) }
141+ </ div >
142+ </ div >
143+ </ >
144+ ) ;
144145 }
145- return < Loader /> ;
146+ return < Loader /> ;
146147}
147148
148149export default Tags ;
0 commit comments