feat: social graph features
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Country helpers for the profile country field.
|
||||
*
|
||||
* We store ISO-3166-1 alpha-2 codes (e.g. "IN") on the account and render
|
||||
* human names with the platform's `Intl.DisplayNames` so labels localise
|
||||
* for free and we don't ship a 250-entry name table. The code list below
|
||||
* is the static ISO alpha-2 set; names are derived at module load.
|
||||
*/
|
||||
|
||||
// ISO-3166-1 alpha-2 codes (officially assigned).
|
||||
const CODES: string[] = [
|
||||
"AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ",
|
||||
"BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS",
|
||||
"BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN",
|
||||
"CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE",
|
||||
"EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF",
|
||||
"GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM",
|
||||
"HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM",
|
||||
"JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC",
|
||||
"LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK",
|
||||
"ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA",
|
||||
"NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG",
|
||||
"PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW",
|
||||
"SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS",
|
||||
"ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO",
|
||||
"TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI",
|
||||
"VN","VU","WF","WS","YE","YT","ZA","ZM","ZW",
|
||||
];
|
||||
|
||||
const regionNames =
|
||||
typeof Intl !== "undefined" && "DisplayNames" in Intl
|
||||
? new Intl.DisplayNames(["en"], { type: "region" })
|
||||
: null;
|
||||
|
||||
/** Localized country name for an ISO-2 code, or null when the code is
|
||||
* empty/unknown. Falls back to the raw code if the platform can't name it. */
|
||||
export function countryName(code: string | null | undefined): string | null {
|
||||
if (!code) return null;
|
||||
const cc = code.toUpperCase();
|
||||
try {
|
||||
return regionNames?.of(cc) ?? cc;
|
||||
} catch {
|
||||
return cc;
|
||||
}
|
||||
}
|
||||
|
||||
/** `{ code, name }` for every country, sorted by name — feeds the picker. */
|
||||
export const COUNTRIES: { code: string; name: string }[] = CODES.map((c) => ({
|
||||
code: c,
|
||||
name: countryName(c) || c,
|
||||
})).sort((a, b) => a.name.localeCompare(b.name));
|
||||
Reference in New Issue
Block a user