fix: normalize recharge seller country
This commit is contained in:
parent
911cdac101
commit
b24ef884f6
@ -343,6 +343,7 @@
|
|||||||
const DEFAULT_API_BASE = "https://jvapi.haiyihy.com/";
|
const DEFAULT_API_BASE = "https://jvapi.haiyihy.com/";
|
||||||
const DEFAULT_API_PREFIX = "/go";
|
const DEFAULT_API_PREFIX = "/go";
|
||||||
const SELF_PROFILE_ENDPOINT = "/team/member/profile";
|
const SELF_PROFILE_ENDPOINT = "/team/member/profile";
|
||||||
|
const COUNTRY_CONFIG_ENDPOINT = "/sys/config/country";
|
||||||
const SELLER_ENDPOINT = "/app/h5/recharge-agency-list/sellers";
|
const SELLER_ENDPOINT = "/app/h5/recharge-agency-list/sellers";
|
||||||
const DEFAULT_LIST_LIMIT = "500";
|
const DEFAULT_LIST_LIMIT = "500";
|
||||||
const DEFAULT_AVATAR = "../../assets/defaultAvatar-CdxWBK1k.png";
|
const DEFAULT_AVATAR = "../../assets/defaultAvatar-CdxWBK1k.png";
|
||||||
@ -351,6 +352,7 @@
|
|||||||
const listNode = document.querySelector("[data-agency-list]");
|
const listNode = document.querySelector("[data-agency-list]");
|
||||||
const browserLang = typeof navigator !== "undefined" ? navigator.language : "en";
|
const browserLang = typeof navigator !== "undefined" ? navigator.language : "en";
|
||||||
const currentLang = normalizeLanguage(readParam(["lang"]) || browserLang);
|
const currentLang = normalizeLanguage(readParam(["lang"]) || browserLang);
|
||||||
|
let countryFlagMap = Object.create(null);
|
||||||
|
|
||||||
function trimValue(value) {
|
function trimValue(value) {
|
||||||
return String(value || "").trim();
|
return String(value || "").trim();
|
||||||
@ -698,9 +700,89 @@
|
|||||||
return raw ? raw.split(",").map(trimValue).filter(Boolean) : [];
|
return raw ? raw.split(",").map(trimValue).filter(Boolean) : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizeLookupKey(value) {
|
||||||
|
return trimValue(value).toLowerCase().replace(/\s+/g, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
function addCountryFlag(map, key, flag) {
|
||||||
|
const normalizedKey = normalizeLookupKey(key);
|
||||||
|
const flagURL = trimValue(flag);
|
||||||
|
if (normalizedKey && flagURL && !map[normalizedKey]) {
|
||||||
|
map[normalizedKey] = flagURL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function splitCountryRegion(countryName, regionCode) {
|
||||||
|
const country = trimValue(countryName);
|
||||||
|
const region = trimValue(regionCode);
|
||||||
|
if (!country || region) {
|
||||||
|
return { countryName: country, regionCode: region };
|
||||||
|
}
|
||||||
|
const parts = country.split(/\s+[-\u2013\u2014]\s+/).map(trimValue).filter(Boolean);
|
||||||
|
if (parts.length <= 1) {
|
||||||
|
return { countryName: country, regionCode: region };
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
countryName: parts[0],
|
||||||
|
regionCode: parts.slice(1).join(" - ")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildCountryFlagMap(json) {
|
||||||
|
const body = json && (json.body || json.data || json);
|
||||||
|
const countries = [];
|
||||||
|
const pushCountries = function (value) {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
value.forEach(function (country) { countries.push(country); });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
pushCountries(body);
|
||||||
|
if (body && typeof body === "object") {
|
||||||
|
pushCountries(body.openCountry);
|
||||||
|
pushCountries(body.tops);
|
||||||
|
pushCountries(body.countries);
|
||||||
|
pushCountries(body.records);
|
||||||
|
pushCountries(body.list);
|
||||||
|
}
|
||||||
|
|
||||||
|
const map = Object.create(null);
|
||||||
|
countries.forEach(function (country) {
|
||||||
|
if (!country || typeof country !== "object") return;
|
||||||
|
const flag = firstNonBlank(country.nationalFlag, country.countryFlag, country.flag);
|
||||||
|
addCountryFlag(map, country.countryName, flag);
|
||||||
|
addCountryFlag(map, country.aliasName, flag);
|
||||||
|
addCountryFlag(map, country.enName, flag);
|
||||||
|
addCountryFlag(map, country.alphaTwo, flag);
|
||||||
|
addCountryFlag(map, country.alphaThree, flag);
|
||||||
|
addCountryFlag(map, country.countryCode, flag);
|
||||||
|
if (Array.isArray(country.countryCodeAliases)) {
|
||||||
|
country.countryCodeAliases.forEach(function (alias) {
|
||||||
|
addCountryFlag(map, alias, flag);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
function findCountryFlag() {
|
||||||
|
for (let index = 0; index < arguments.length; index += 1) {
|
||||||
|
const key = normalizeLookupKey(arguments[index]);
|
||||||
|
if (key && countryFlagMap[key]) return countryFlagMap[key];
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
function normalizeSeller(item) {
|
function normalizeSeller(item) {
|
||||||
const source = item || {};
|
const source = item || {};
|
||||||
const userBaseInfo = source.userBaseInfo || {};
|
const userBaseInfo = source.userBaseInfo || {};
|
||||||
|
const rawCountryName = firstNonBlank(source.countryName, userBaseInfo.countryName);
|
||||||
|
const countryRegion = splitCountryRegion(
|
||||||
|
rawCountryName,
|
||||||
|
firstNonBlank(source.regionCode, userBaseInfo.regionCode)
|
||||||
|
);
|
||||||
|
const countryCode = firstNonBlank(source.countryCode, userBaseInfo.countryCode);
|
||||||
|
const nationalFlag = normalizeFlagList(source.nationalFlag || source.nationalFlags);
|
||||||
|
const explicitCountryFlag = firstNonBlank(source.ownNationalFlag, source.countryFlag);
|
||||||
return {
|
return {
|
||||||
id: firstNonBlank(source.id, userBaseInfo.id),
|
id: firstNonBlank(source.id, userBaseInfo.id),
|
||||||
sysOrigin: firstNonBlank(source.sysOrigin, userBaseInfo.originSys),
|
sysOrigin: firstNonBlank(source.sysOrigin, userBaseInfo.originSys),
|
||||||
@ -712,14 +794,18 @@
|
|||||||
),
|
),
|
||||||
userAvatar: firstNonBlank(source.userAvatar, userBaseInfo.userAvatar),
|
userAvatar: firstNonBlank(source.userAvatar, userBaseInfo.userAvatar),
|
||||||
userNickname: firstNonBlank(source.userNickname, userBaseInfo.userNickname, userBaseInfo.account),
|
userNickname: firstNonBlank(source.userNickname, userBaseInfo.userNickname, userBaseInfo.account),
|
||||||
countryCode: firstNonBlank(source.countryCode, userBaseInfo.countryCode),
|
countryCode: countryCode,
|
||||||
countryName: firstNonBlank(source.countryName, userBaseInfo.countryName),
|
countryName: countryRegion.countryName,
|
||||||
regionCode: firstNonBlank(source.regionCode, userBaseInfo.regionCode),
|
regionCode: countryRegion.regionCode,
|
||||||
contactInfo: firstNonBlank(source.contactInfo, source.contact, source.phone),
|
contactInfo: firstNonBlank(source.contactInfo, source.contact, source.phone),
|
||||||
whatsapp: firstNonBlank(source.whatsapp, source.whatsApp, source.contactInfo, source.contact, source.phone),
|
whatsapp: firstNonBlank(source.whatsapp, source.whatsApp, source.contactInfo, source.contact, source.phone),
|
||||||
nationalFlag: normalizeFlagList(source.nationalFlag || source.nationalFlags),
|
nationalFlag: nationalFlag,
|
||||||
ownNationalFlag: firstNonBlank(source.ownNationalFlag),
|
ownNationalFlag: firstNonBlank(source.ownNationalFlag),
|
||||||
countryFlag: firstNonBlank(source.ownNationalFlag, source.countryFlag, normalizeFlagList(source.nationalFlag || source.nationalFlags)[0]),
|
countryFlag: firstNonBlank(
|
||||||
|
explicitCountryFlag,
|
||||||
|
findCountryFlag(countryRegion.countryName, rawCountryName, countryCode),
|
||||||
|
nationalFlag[0]
|
||||||
|
),
|
||||||
transactionCount: source.transactionCount
|
transactionCount: source.transactionCount
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -750,6 +836,15 @@
|
|||||||
return json && (json.body || json.data || json);
|
return json && (json.body || json.data || json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function fetchCountryConfig(authorization) {
|
||||||
|
try {
|
||||||
|
const json = await requestJSON(buildURL(resolveAPIBase(), COUNTRY_CONFIG_ENDPOINT), authorization);
|
||||||
|
countryFlagMap = buildCountryFlagMap(json);
|
||||||
|
} catch (_) {
|
||||||
|
countryFlagMap = Object.create(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function fetchSellerList(authorization) {
|
async function fetchSellerList(authorization) {
|
||||||
const json = await requestJSON(buildSellerURL(), authorization);
|
const json = await requestJSON(buildSellerURL(), authorization);
|
||||||
return normalizePayload(json);
|
return normalizePayload(json);
|
||||||
@ -764,6 +859,7 @@
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await fetchSelfProfile(authorization);
|
await fetchSelfProfile(authorization);
|
||||||
|
await fetchCountryConfig(authorization);
|
||||||
const records = await fetchSellerList(authorization);
|
const records = await fetchSellerList(authorization);
|
||||||
if (!records.length) {
|
if (!records.length) {
|
||||||
renderState("No agencies available.");
|
renderState("No agencies available.");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user