const regionsJSON = [{
nom: "Bretagne",
code: "53"
}, {
nom: "Grand Est",
aliases: ["Alsace", "Champagne-Ardenne", "Lorraine"],
code: "44"
}];
const delimiters = ["-", " "];
const normalizeStr = (s) =>
s
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.toLowerCase();
const localeContains = (str, sub) => {
if (!str || !sub || !str.length || (sub.length > str.length)) {
return false;
}
let totalStr = "" + sub;
if (sub.length > totalStr.length) {
return false;
}
// if (totalStr.includes(" ")) {
// totalStr = totalStr.replace(" ", "-");
// }
return normalizeStr(str).includes(normalizeStr(totalStr));
};
const transformAliases = (aliases) => {
const transformed = [];
aliases.forEach((alias) => {
const aliasDelimiter = delimiters.find((delim) =>
alias.includes(delim)
);
if (aliasDelimiter) {
delimiters
.filter((delim) => delim !== aliasDelimiter)
.forEach((delim) => transformed.push(alias.replace(aliasDelimiter, delim)));
}
transformed.push(alias);
});
// console.log({ transformed });
return transformed;
};
const getPlaceName = (name, aliases) => {
return aliases.length
? `${transformAliases(aliases).join(" ")} ${name}`
: name;
};
const foundRegions = (search) => regionsJSON
.filter(({ nom, aliases = [] }) =>
localeContains(getPlaceName(nom, aliases), search)
)
.map((region) => ({
code: region.code,
place_name: region.nom,
label: "region",
type: "region",
}));
console.log(foundRegions("Champagne Ardenne"));
console.log(foundRegions("Champagne-Ardenne"));
console.log(foundRegions("ChamArde"));
console.log(foundRegions("Champ"));