138 lines
4.4 KiB
TypeScript
138 lines
4.4 KiB
TypeScript
import type { Language } from "@/lib/i18n";
|
|
import type { Province } from "@/types/province";
|
|
|
|
const provinceByTerytPrefix: Record<string, Province> = {
|
|
"02": "dolnośląskie",
|
|
"04": "kujawsko-pomorskie",
|
|
"06": "lubelskie",
|
|
"08": "lubuskie",
|
|
"10": "łódzkie",
|
|
"12": "małopolskie",
|
|
"14": "mazowieckie",
|
|
"16": "opolskie",
|
|
"18": "podkarpackie",
|
|
"20": "podlaskie",
|
|
"22": "pomorskie",
|
|
"24": "śląskie",
|
|
"26": "świętokrzyskie",
|
|
"28": "warmińsko-mazurskie",
|
|
"30": "wielkopolskie",
|
|
"32": "zachodniopomorskie",
|
|
};
|
|
|
|
const provinceByStationId: Record<string, Province> = {
|
|
"12100": "zachodniopomorskie",
|
|
"12105": "zachodniopomorskie",
|
|
"12115": "pomorskie",
|
|
"12120": "pomorskie",
|
|
"12125": "pomorskie",
|
|
"12135": "pomorskie",
|
|
"12155": "pomorskie",
|
|
"12160": "warmińsko-mazurskie",
|
|
"12185": "warmińsko-mazurskie",
|
|
"12195": "podlaskie",
|
|
"12200": "zachodniopomorskie",
|
|
"12205": "zachodniopomorskie",
|
|
"12210": "zachodniopomorskie",
|
|
"12215": "zachodniopomorskie",
|
|
"12230": "wielkopolskie",
|
|
"12235": "pomorskie",
|
|
"12250": "kujawsko-pomorskie",
|
|
"12270": "mazowieckie",
|
|
"12272": "warmińsko-mazurskie",
|
|
"12280": "warmińsko-mazurskie",
|
|
"12285": "mazowieckie",
|
|
"12295": "podlaskie",
|
|
"12300": "lubuskie",
|
|
"12310": "lubuskie",
|
|
"12330": "wielkopolskie",
|
|
"12345": "wielkopolskie",
|
|
"12360": "mazowieckie",
|
|
"12375": "mazowieckie",
|
|
"12385": "mazowieckie",
|
|
"12399": "lubelskie",
|
|
"12400": "lubuskie",
|
|
"12415": "dolnośląskie",
|
|
"12418": "wielkopolskie",
|
|
"12424": "dolnośląskie",
|
|
"12435": "wielkopolskie",
|
|
"12455": "łódzkie",
|
|
"12465": "łódzkie",
|
|
"12469": "łódzkie",
|
|
"12488": "mazowieckie",
|
|
"12495": "lubelskie",
|
|
"12497": "lubelskie",
|
|
"12500": "dolnośląskie",
|
|
"12510": "dolnośląskie",
|
|
"12520": "dolnośląskie",
|
|
"12530": "opolskie",
|
|
"12540": "śląskie",
|
|
"12550": "śląskie",
|
|
"12560": "śląskie",
|
|
"12566": "małopolskie",
|
|
"12570": "świętokrzyskie",
|
|
"12575": "małopolskie",
|
|
"12580": "podkarpackie",
|
|
"12585": "świętokrzyskie",
|
|
"12595": "lubelskie",
|
|
"12600": "śląskie",
|
|
"12625": "małopolskie",
|
|
"12650": "małopolskie",
|
|
"12660": "małopolskie",
|
|
"12670": "podkarpackie",
|
|
"12690": "podkarpackie",
|
|
"12695": "podkarpackie",
|
|
};
|
|
|
|
const provinceLabels: Record<Province, Record<Language, string>> = {
|
|
"dolnośląskie": { pl: "dolnośląskie", en: "Lower Silesian" },
|
|
"kujawsko-pomorskie": { pl: "kujawsko-pomorskie", en: "Kuyavian-Pomeranian" },
|
|
"lubelskie": { pl: "lubelskie", en: "Lublin" },
|
|
"lubuskie": { pl: "lubuskie", en: "Lubusz" },
|
|
"łódzkie": { pl: "łódzkie", en: "Łódź" },
|
|
"małopolskie": { pl: "małopolskie", en: "Lesser Poland" },
|
|
"mazowieckie": { pl: "mazowieckie", en: "Masovian" },
|
|
"opolskie": { pl: "opolskie", en: "Opole" },
|
|
"podkarpackie": { pl: "podkarpackie", en: "Subcarpathian" },
|
|
"podlaskie": { pl: "podlaskie", en: "Podlaskie" },
|
|
"pomorskie": { pl: "pomorskie", en: "Pomeranian" },
|
|
"śląskie": { pl: "śląskie", en: "Silesian" },
|
|
"świętokrzyskie": { pl: "świętokrzyskie", en: "Świętokrzyskie" },
|
|
"warmińsko-mazurskie": { pl: "warmińsko-mazurskie", en: "Warmian-Masurian" },
|
|
"wielkopolskie": { pl: "wielkopolskie", en: "Greater Poland" },
|
|
"zachodniopomorskie": { pl: "zachodniopomorskie", en: "West Pomeranian" },
|
|
};
|
|
|
|
function simplifyProvinceName(value: string) {
|
|
return value
|
|
.normalize("NFD")
|
|
.replace(/\p{Diacritic}/gu, "")
|
|
.toLocaleLowerCase("pl-PL")
|
|
.replace(/^wojewodztwo\s+/, "")
|
|
.trim();
|
|
}
|
|
|
|
const provinceBySimplifiedName = Object.fromEntries(
|
|
Object.keys(provinceLabels).map((province) => [simplifyProvinceName(province), province]),
|
|
) as Record<string, Province>;
|
|
|
|
export function getProvinceFromTeryt(code: string) {
|
|
return provinceByTerytPrefix[code.trim().slice(0, 2)] ?? null;
|
|
}
|
|
|
|
export function getProvinceForStation(stationId: string | null) {
|
|
return stationId ? provinceByStationId[stationId] ?? null : null;
|
|
}
|
|
|
|
export function normalizeProvinceName(value: string | null | undefined) {
|
|
return value ? provinceBySimplifiedName[simplifyProvinceName(value)] ?? null : null;
|
|
}
|
|
|
|
export function getProvinceForSelection(locationProvince: string | null | undefined, stationId: string | null) {
|
|
return normalizeProvinceName(locationProvince) ?? getProvinceForStation(stationId);
|
|
}
|
|
|
|
export function formatProvinceName(province: Province, language: Language) {
|
|
return provinceLabels[province][language];
|
|
}
|