Skip to content

Commit b706835

Browse files
committed
Add preference page
1 parent cf1b710 commit b706835

5 files changed

Lines changed: 257 additions & 1 deletion

File tree

src/AppRoutes.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import HelpPage from "~/pages/HelpPage";
88
import HomePage from "~/pages/HomePage";
99
import LibraryPage from "~/pages/LibraryPage";
1010
import ListsPage from "~/pages/ListsPage";
11+
import PreferencesPage from "~/pages/PreferencesPage";
1112
import SearchPage from "~/pages/SearchPage";
1213
import SettingsPage from "~/pages/SettingsPage";
1314
import TagsPage from "~/pages/TagsPage";
@@ -26,6 +27,7 @@ function AppRoutes(): JSX.Element {
2627
<Route path="/claim/*" element={<ClaimPage />} />
2728
<Route path="/wallet" element={<WalletPage />} />
2829
<Route path="/search" element={<SearchPage />} />
30+
<Route path="/preferences" element={<PreferencesPage />} />
2931
<Route path="/settings" element={<SettingsPage />} />
3032
<Route path="/help" element={<HelpPage />} />
3133

src/Constants.tsx

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,192 @@
1+
export const LANGUAGES: Record<string, string[]> = {
2+
aa: ["Afar", "Afar"],
3+
ab: ["Abkhazian", "Аҧсуа"],
4+
af: ["Afrikaans", "Afrikaans"],
5+
ak: ["Akan", "Akana"],
6+
am: ["Amharic", "አማርኛ"],
7+
an: ["Aragonese", "Aragonés"],
8+
ar: ["Arabic", "العربية", "rtl"],
9+
as: ["Assamese", "অসমীয়া"],
10+
av: ["Avar", "Авар"],
11+
ay: ["Aymara", "Aymar"],
12+
az: ["Azerbaijani", "Azərbaycanca / آذربايجان"],
13+
ba: ["Bashkir", "Башҡорт"],
14+
be: ["Belarusian", "Беларуская"],
15+
bg: ["Bulgarian", "Български"],
16+
bh: ["Bihari", "भोजपुरी"],
17+
bi: ["Bislama", "Bislama"],
18+
bm: ["Bambara", "Bamanankan"],
19+
bn: ["Bengali", "বাংলা"],
20+
bo: ["Tibetan", "བོད་ཡིག / Bod skad"],
21+
br: ["Breton", "Brezhoneg"],
22+
bs: ["Bosnian", "Bosanski"],
23+
ca: ["Catalan", "Català"],
24+
ce: ["Chechen", "Нохчийн"],
25+
ch: ["Chamorro", "Chamoru"],
26+
co: ["Corsican", "Corsu"],
27+
cr: ["Cree", "Nehiyaw"],
28+
cs: ["Czech", "Česky"],
29+
cu: ["Old Church Slavonic / Old Bulgarian", "словѣньскъ / slověnĭskŭ"],
30+
cv: ["Chuvash", "Чăваш"],
31+
cy: ["Welsh", "Cymraeg"],
32+
da: ["Danish", "Dansk"],
33+
de: ["German", "Deutsch"],
34+
dv: ["Divehi", "ދިވެހިބަސް"],
35+
dz: ["Dzongkha", "ཇོང་ཁ"],
36+
ee: ["Ewe", "Ɛʋɛ"],
37+
el: ["Greek", "Ελληνικά"],
38+
en: ["English", "English"],
39+
eo: ["Esperanto", "Esperanto"],
40+
es: ["Spanish", "Español"],
41+
et: ["Estonian", "Eesti"],
42+
eu: ["Basque", "Euskara"],
43+
fa: ["Persian", "فارسی", "rtl"],
44+
ff: ["Peul", "Fulfulde"],
45+
fi: ["Finnish", "Suomi"],
46+
fj: ["Fijian", "Na Vosa Vakaviti"],
47+
fo: ["Faroese", "Føroyskt"],
48+
fr: ["French", "Français"],
49+
fy: ["West Frisian", "Frysk"],
50+
ga: ["Irish", "Gaeilge"],
51+
gd: ["Scottish Gaelic", "Gàidhlig"],
52+
gl: ["Galician", "Galego"],
53+
gn: ["Guarani", "Avañe'ẽ"],
54+
gu: ["Gujarati", "ગુજરાતી"],
55+
gv: ["Manx", "Gaelg"],
56+
ha: ["Hausa", "هَوُسَ"],
57+
he: ["Hebrew", "עברית", "rtl"],
58+
hi: ["Hindi", "हिन्दी"],
59+
ho: ["Hiri Motu", "Hiri Motu"],
60+
hr: ["Croatian", "Hrvatski"],
61+
ht: ["Haitian", "Krèyol ayisyen"],
62+
hu: ["Hungarian", "Magyar"],
63+
hy: ["Armenian", "Հայերեն"],
64+
hz: ["Herero", "Otsiherero"],
65+
ia: ["Interlingua", "Interlingua"],
66+
id: ["Indonesian", "Bahasa Indonesia"],
67+
ie: ["Interlingue", "Interlingue"],
68+
ig: ["Igbo", "Igbo"],
69+
ii: ["Sichuan Yi", "ꆇꉙ / 四川彝语"],
70+
ik: ["Inupiak", "Iñupiak"],
71+
io: ["Ido", "Ido"],
72+
is: ["Icelandic", "Íslenska"],
73+
it: ["Italian", "Italiano"],
74+
iu: ["Inuktitut", "ᐃᓄᒃᑎᑐᑦ"],
75+
ja: ["Japanese", "日本語"],
76+
jv: ["Javanese", "Basa Jawa"],
77+
ka: ["Georgian", "ქართული"],
78+
kg: ["Kongo", "KiKongo"],
79+
ki: ["Kikuyu", "Gĩkũyũ"],
80+
kj: ["Kuanyama", "Kuanyama"],
81+
kk: ["Kazakh", "Қазақша"],
82+
kl: ["Greenlandic", "Kalaallisut"],
83+
km: ["Khmer", "ភាសាខ្មែរ"],
84+
kn: ["Kannada", "ಕನ್ನಡ"],
85+
ko: ["Korean", "한국어"],
86+
kr: ["Kanuri", "Kanuri"],
87+
ks: ["Kashmiri", "कश्मीरी / كشميري"],
88+
ku: ["Kurdish", "Kurdî / كوردی"],
89+
kv: ["Komi", "Коми"],
90+
kw: ["Cornish", "Kernewek"],
91+
ky: ["Kirghiz", "Kırgızca / Кыргызча"],
92+
la: ["Latin", "Latina"],
93+
lb: ["Luxembourgish", "Lëtzebuergesch"],
94+
lg: ["Ganda", "Luganda"],
95+
li: ["Limburgian", "Limburgs"],
96+
ln: ["Lingala", "Lingála"],
97+
lo: ["Laotian", "ລາວ / Pha xa lao"],
98+
lt: ["Lithuanian", "Lietuvių"],
99+
lv: ["Latvian", "Latviešu"],
100+
mg: ["Malagasy", "Malagasy"],
101+
mh: ["Marshallese", "Kajin Majel / Ebon"],
102+
mi: ["Maori", "Māori"],
103+
mk: ["Macedonian", "Македонски"],
104+
ml: ["Malayalam", "മലയാളം"],
105+
mn: ["Mongolian", "Монгол"],
106+
mo: ["Moldovan", "Moldovenească"],
107+
mr: ["Marathi", "मराठी"],
108+
ms: ["Malay", "Bahasa Melayu"],
109+
mt: ["Maltese", "bil-Malti"],
110+
my: ["Burmese", "Myanmasa"],
111+
na: ["Nauruan", "Dorerin Naoero"],
112+
nd: ["North Ndebele", "Sindebele"],
113+
ne: ["Nepali", "नेपाली"],
114+
ng: ["Ndonga", "Oshiwambo"],
115+
nl: ["Dutch", "Nederlands"],
116+
nn: ["Norwegian Nynorsk", "Norsk (nynorsk)"],
117+
no: ["Norwegian", "Norsk (bokmål / riksmål)"],
118+
nr: ["South Ndebele", "isiNdebele"],
119+
nv: ["Navajo", "Diné bizaad"],
120+
ny: ["Chichewa", "Chi-Chewa"],
121+
oc: ["Occitan", "Occitan"],
122+
oj: ["Ojibwa", "ᐊᓂᔑᓈᐯᒧᐎᓐ / Anishinaabemowin"],
123+
om: ["Oromo", "Oromoo"],
124+
or: ["Oriya", "ଓଡ଼ିଆ"],
125+
os: ["Ossetian / Ossetic", "Иронау"],
126+
pa: ["Panjabi / Punjabi", "ਪੰਜਾਬੀ / पंजाबी / پنجابي"],
127+
pi: ["Pali", "Pāli / पाऴि"],
128+
pl: ["Polish", "Polski"],
129+
ps: ["Pashto", "پښتو"],
130+
pt: ["Portuguese", "Português"],
131+
"pt-BR": ["Portuguese (Brazil)", "Português (Brasil)"],
132+
qu: ["Quechua", "Runa Simi"],
133+
rm: ["Raeto Romance", "Rumantsch"],
134+
rn: ["Kirundi", "Kirundi"],
135+
ro: ["Romanian", "Română"],
136+
ru: ["Russian", "Русский"],
137+
rw: ["Rwandi", "Kinyarwandi"],
138+
sa: ["Sanskrit", "संस्कृतम्"],
139+
sc: ["Sardinian", "Sardu"],
140+
sd: ["Sindhi", "सिनधि"],
141+
se: ["Northern Sami", "Sámegiella"],
142+
sg: ["Sango", "Sängö"],
143+
sh: ["Serbo-Croatian", "Srpskohrvatski / Српскохрватски"],
144+
si: ["Sinhalese", "සිංහල"],
145+
sk: ["Slovak", "Slovenčina"],
146+
sl: ["Slovenian", "Slovenščina"],
147+
sm: ["Samoan", "Gagana Samoa"],
148+
sn: ["Shona", "chiShona"],
149+
so: ["Somalia", "Soomaaliga"],
150+
sq: ["Albanian", "Shqip"],
151+
sr: ["Serbian", "Српски"],
152+
ss: ["Swati", "SiSwati"],
153+
st: ["Southern Sotho", "Sesotho"],
154+
su: ["Sundanese", "Basa Sunda"],
155+
sv: ["Swedish", "Svenska"],
156+
sw: ["Swahili", "Kiswahili"],
157+
ta: ["Tamil", "தமிழ்"],
158+
te: ["Telugu", "తెలుగు"],
159+
tg: ["Tajik", "Тоҷикӣ"],
160+
th: ["Thai", "ไทย / Phasa Thai"],
161+
ti: ["Tigrinya", "ትግርኛ"],
162+
tk: ["Turkmen", "Туркмен / تركمن"],
163+
tl: ["Tagalog", "Tagalog"],
164+
tn: ["Tswana", "Setswana"],
165+
to: ["Tonga", "Lea Faka-Tonga"],
166+
tr: ["Turkish", "Türkçe"],
167+
ts: ["Tsonga", "Xitsonga"],
168+
tt: ["Tatar", "Tatarça"],
169+
tw: ["Twi", "Twi"],
170+
ty: ["Tahitian", "Reo Mā`ohi"],
171+
ug: ["Uyghur", "Uyƣurqə / ئۇيغۇرچە"],
172+
uk: ["Ukrainian", "Українська"],
173+
ur: ["Urdu", "اردو", "rtl"],
174+
uz: ["Uzbek", "Ўзбек"],
175+
ve: ["Venda", "Tshivenḓa"],
176+
vi: ["Vietnamese", "Tiếng Việt"],
177+
vo: ["Volapük", "Volapük"],
178+
wa: ["Walloon", "Walon"],
179+
wo: ["Wolof", "Wollof"],
180+
xh: ["Xhosa", "isiXhosa"],
181+
yi: ["Yiddish", "ייִדיש"],
182+
yo: ["Yoruba", "Yorùbá"],
183+
za: ["Zhuang", "Cuengh / Tôô / 壮语"],
184+
zh: ["Chinese", "中文"],
185+
"zh-Hans": ["Chinese (Simplified)", "中文 (简体)"],
186+
"zh-Hant": ["Chinese (Traditional)", "中文 (繁體)"],
187+
zu: ["Zulu", "isiZulu"],
188+
};
189+
1190
export const NOT_TAGS: string[] = [
2191
"porn",
3192
"porno",

src/components/Header.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,23 @@ function Header({ menuOpen, menuOpenSetter }): JSX.Element {
389389
</NavLink>
390390
{headerMenu === "settings" ? (
391391
<ul ref={settingsMenu}>
392+
<li>
393+
<NavLink to="/preferences">
394+
<CustomSVG
395+
icon="account"
396+
viewBox="0 0 24 24"
397+
style={{
398+
fill: "transparent",
399+
height: "18px",
400+
paddingRight: "4px",
401+
stroke: "white",
402+
strokeWidth: "2px",
403+
verticalAlign: "middle",
404+
}}
405+
/>{" "}
406+
<span>Preferences</span>
407+
</NavLink>
408+
</li>
392409
<li>
393410
<NavLink to="/settings">
394411
<CustomSVG

src/pages/PreferencesPage.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import React, { JSX, useEffect, useState } from "react";
2+
import LBRY from "~/LBRY";
3+
import Error from "~/components/Error";
4+
import Loader from "~/components/Loader";
5+
6+
function PreferencesPage(): JSX.Element {
7+
const [preferencesResponse, setPreferencesResponse] = useState<
8+
object | undefined
9+
>(undefined);
10+
11+
useEffect((): void => {
12+
LBRY.rpc(
13+
LBRY.getDaemonRPC(),
14+
LBRY.PREFERENCE_GET,
15+
undefined,
16+
undefined,
17+
LBRY.isUsingProxy(),
18+
).then((json: object): void => {
19+
setPreferencesResponse(json);
20+
});
21+
}, []);
22+
23+
return (
24+
<>
25+
<h1>Preferences</h1>
26+
{preferencesResponse ? (
27+
preferencesResponse.error ? (
28+
<Error message={preferencesResponse.error.message} />
29+
) : (
30+
<div id="preferences" style={{ padding: "16px 0" }}>
31+
{JSON.stringify(preferencesResponse)}
32+
</div>
33+
)
34+
) : (
35+
<Loader />
36+
)}
37+
</>
38+
);
39+
}
40+
41+
export default PreferencesPage;

src/pages/SettingsPage.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { JSX, useEffect, useState } from "react";
2+
import { LANGUAGES } from "~/Constants";
23
import LBRY from "~/LBRY";
34
import Error from "~/components/Error";
45
import Loader from "~/components/Loader";
@@ -47,7 +48,13 @@ function SettingsPage(): JSX.Element {
4748
<br />
4849
<br />
4950
<select>
50-
<option value="en">English</option>
51+
{Object.keys(LANGUAGES).map(
52+
(languageTag: string, i: number): JSX.Element => (
53+
<option selected={false} value={languageTag}>
54+
{LANGUAGES[languageTag][0]}
55+
</option>
56+
),
57+
)}
5158
</select>
5259
<hr />
5360
<b>Search only in the selected language by default</b>

0 commit comments

Comments
 (0)