Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
117
fork

Configure Feed

Select the types of activity you want to include in your feed.

at a876aae44ea07494ebea9727350aa060b81f317b 302 lines 4.8 kB view raw
1import {useMemo} from 'react' 2 3import {deviceLocales} from '#/locale/deviceLocales' 4import {useLanguagePrefs} from '#/state/preferences' 5import {useGeolocation} from '#/geolocation' 6 7/** 8 * From react-native-localize 9 * 10 * MIT License 11 * Copyright (c) 2017-present, Mathieu Acthernoene 12 * 13 * @see https://github.com/zoontek/react-native-localize/blob/master/LICENSE 14 * @see https://github.com/zoontek/react-native-localize/blob/ee5bf25e0bb8f3b8e4f3fd055f67ad46269c81ea/src/constants.ts 15 */ 16export const countryCodeToCurrency: Record<string, string> = { 17 ad: 'eur', 18 ae: 'aed', 19 af: 'afn', 20 ag: 'xcd', 21 ai: 'xcd', 22 al: 'all', 23 am: 'amd', 24 an: 'ang', 25 ao: 'aoa', 26 ar: 'ars', 27 as: 'usd', 28 at: 'eur', 29 au: 'aud', 30 aw: 'awg', 31 ax: 'eur', 32 az: 'azn', 33 ba: 'bam', 34 bb: 'bbd', 35 bd: 'bdt', 36 be: 'eur', 37 bf: 'xof', 38 bg: 'bgn', 39 bh: 'bhd', 40 bi: 'bif', 41 bj: 'xof', 42 bl: 'eur', 43 bm: 'bmd', 44 bn: 'bnd', 45 bo: 'bob', 46 bq: 'usd', 47 br: 'brl', 48 bs: 'bsd', 49 bt: 'btn', 50 bv: 'nok', 51 bw: 'bwp', 52 by: 'byn', 53 bz: 'bzd', 54 ca: 'cad', 55 cc: 'aud', 56 cd: 'cdf', 57 cf: 'xaf', 58 cg: 'xaf', 59 ch: 'chf', 60 ci: 'xof', 61 ck: 'nzd', 62 cl: 'clp', 63 cm: 'xaf', 64 cn: 'cny', 65 co: 'cop', 66 cr: 'crc', 67 cu: 'cup', 68 cv: 'cve', 69 cw: 'ang', 70 cx: 'aud', 71 cy: 'eur', 72 cz: 'czk', 73 de: 'eur', 74 dj: 'djf', 75 dk: 'dkk', 76 dm: 'xcd', 77 do: 'dop', 78 dz: 'dzd', 79 ec: 'usd', 80 ee: 'eur', 81 eg: 'egp', 82 eh: 'mad', 83 er: 'ern', 84 es: 'eur', 85 et: 'etb', 86 fi: 'eur', 87 fj: 'fjd', 88 fk: 'fkp', 89 fm: 'usd', 90 fo: 'dkk', 91 fr: 'eur', 92 ga: 'xaf', 93 gb: 'gbp', 94 gd: 'xcd', 95 ge: 'gel', 96 gf: 'eur', 97 gg: 'gbp', 98 gh: 'ghs', 99 gi: 'gip', 100 gl: 'dkk', 101 gm: 'gmd', 102 gn: 'gnf', 103 gp: 'eur', 104 gq: 'xaf', 105 gr: 'eur', 106 gs: 'gbp', 107 gt: 'gtq', 108 gu: 'usd', 109 gw: 'xof', 110 gy: 'gyd', 111 hk: 'hkd', 112 hm: 'aud', 113 hn: 'hnl', 114 hr: 'hrk', 115 ht: 'htg', 116 hu: 'huf', 117 id: 'idr', 118 ie: 'eur', 119 il: 'ils', 120 im: 'gbp', 121 in: 'inr', 122 io: 'usd', 123 iq: 'iqd', 124 ir: 'irr', 125 is: 'isk', 126 it: 'eur', 127 je: 'gbp', 128 jm: 'jmd', 129 jo: 'jod', 130 jp: 'jpy', 131 ke: 'kes', 132 kg: 'kgs', 133 kh: 'khr', 134 ki: 'aud', 135 km: 'kmf', 136 kn: 'xcd', 137 kp: 'kpw', 138 kr: 'krw', 139 kw: 'kwd', 140 ky: 'kyd', 141 kz: 'kzt', 142 la: 'lak', 143 lb: 'lbp', 144 lc: 'xcd', 145 li: 'chf', 146 lk: 'lkr', 147 lr: 'lrd', 148 ls: 'lsl', 149 lt: 'eur', 150 lu: 'eur', 151 lv: 'eur', 152 ly: 'lyd', 153 ma: 'mad', 154 mc: 'eur', 155 md: 'mdl', 156 me: 'eur', 157 mf: 'eur', 158 mg: 'mga', 159 mh: 'usd', 160 mk: 'mkd', 161 ml: 'xof', 162 mm: 'mmk', 163 mn: 'mnt', 164 mo: 'mop', 165 mp: 'usd', 166 mq: 'eur', 167 mr: 'mro', 168 ms: 'xcd', 169 mt: 'eur', 170 mu: 'mur', 171 mv: 'mvr', 172 mw: 'mwk', 173 mx: 'mxn', 174 my: 'myr', 175 mz: 'mzn', 176 na: 'nad', 177 nc: 'xpf', 178 ne: 'xof', 179 nf: 'aud', 180 ng: 'ngn', 181 ni: 'nio', 182 nl: 'eur', 183 no: 'nok', 184 np: 'npr', 185 nr: 'aud', 186 nu: 'nzd', 187 nz: 'nzd', 188 om: 'omr', 189 pa: 'pab', 190 pe: 'pen', 191 pf: 'xpf', 192 pg: 'pgk', 193 ph: 'php', 194 pk: 'pkr', 195 pl: 'pln', 196 pm: 'eur', 197 pn: 'nzd', 198 pr: 'usd', 199 ps: 'ils', 200 pt: 'eur', 201 pw: 'usd', 202 py: 'pyg', 203 qa: 'qar', 204 re: 'eur', 205 ro: 'ron', 206 rs: 'rsd', 207 ru: 'rub', 208 rw: 'rwf', 209 sa: 'sar', 210 sb: 'sbd', 211 sc: 'scr', 212 sd: 'sdg', 213 se: 'sek', 214 sg: 'sgd', 215 sh: 'shp', 216 si: 'eur', 217 sj: 'nok', 218 sk: 'eur', 219 sl: 'sll', 220 sm: 'eur', 221 sn: 'xof', 222 so: 'sos', 223 sr: 'srd', 224 ss: 'ssp', 225 st: 'std', 226 sv: 'svc', 227 sx: 'ang', 228 sy: 'syp', 229 sz: 'szl', 230 tc: 'usd', 231 td: 'xaf', 232 tf: 'eur', 233 tg: 'xof', 234 th: 'thb', 235 tj: 'tjs', 236 tk: 'nzd', 237 tl: 'usd', 238 tm: 'tmt', 239 tn: 'tnd', 240 to: 'top', 241 tr: 'try', 242 tt: 'ttd', 243 tv: 'aud', 244 tw: 'twd', 245 tz: 'tzs', 246 ua: 'uah', 247 ug: 'ugx', 248 um: 'usd', 249 us: 'usd', 250 uy: 'uyu', 251 uz: 'uzs', 252 va: 'eur', 253 vc: 'xcd', 254 ve: 'vef', 255 vg: 'usd', 256 vi: 'usd', 257 vn: 'vnd', 258 vu: 'vuv', 259 wf: 'xpf', 260 ws: 'wst', 261 ye: 'yer', 262 yt: 'eur', 263 za: 'zar', 264 zm: 'zmw', 265 zw: 'zwl', 266} 267 268/** 269 * Best-guess currency formatting. 270 * 271 * Attempts to use `getLocales` from `expo-localization` if available, 272 * otherwise falls back to the `persisted.appLanguage` setting, and geolocation 273 * API for region. 274 */ 275export function useFormatCurrency( 276 options?: Parameters<typeof Intl.NumberFormat>[1], 277) { 278 const geolocation = useGeolocation() 279 const {appLanguage} = useLanguagePrefs() 280 return useMemo(() => { 281 const locale = deviceLocales.at(0) 282 const languageTag = locale?.languageTag || appLanguage || 'en-US' 283 const countryCode = ( 284 locale?.regionCode || 285 geolocation?.countryCode || 286 'us' 287 ).toLowerCase() 288 const currency = countryCodeToCurrency[countryCode] || 'usd' 289 const format = new Intl.NumberFormat(languageTag, { 290 ...(options || {}), 291 style: 'currency', 292 currency: currency, 293 }).format 294 295 return { 296 format, 297 currency, 298 countryCode, 299 languageTag, 300 } 301 }, [geolocation, appLanguage, options]) 302}