sutty-base-jekyll-theme/_packs/controllers/postal_code_controller.js

199 lines
5.3 KiB
JavaScript
Raw Normal View History

2021-11-22 17:51:50 +00:00
import { Controller } from "stimulus";
2021-06-01 21:33:49 +00:00
/*
* Subscribes to the country change event and changes the validation
* pattern of its input.
*/
export default class extends Controller {
2021-11-22 17:51:50 +00:00
static targets = ["code"];
2021-06-01 21:33:49 +00:00
/*
* Twitter CLDR is pretty big and we only need the postal codes
* patterns.
*
* @see {https://github.com/twitter/twitter-cldr-npm/blob/4388dfc55900b0feb80eafcac030f9f26981a41d/full/core.js#L1999}
*/
2021-11-22 17:51:50 +00:00
postal_codes = {
ad: "^AD\\d{3}$",
am: "^(37)?\\d{4}$",
ar: "^([A-HJ-NP-Z])?\\d{4}([A-Z]{3})?$",
as: "^96799$",
at: "^\\d{4}$",
au: "^\\d{4}$",
ax: "^22\\d{3}$",
az: "^\\d{4}$",
ba: "^\\d{5}$",
bb: "^(BB\\d{5})?$",
bd: "^\\d{4}$",
be: "^\\d{4}$",
bg: "^\\d{4}$",
bh: "^((1[0-2]|[2-9])\\d{2})?$",
bm: "^[A-Z]{2}[ ]?[A-Z0-9]{2}$",
bn: "^[A-Z]{2}[ ]?\\d{4}$",
br: "^\\d{5}[\\-]?\\d{3}$",
by: "^\\d{6}$",
ca: "^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ ]?\\d[ABCEGHJ-NPRSTV-Z]\\d$",
cc: "^6799$",
ch: "^\\d{4}$",
ck: "^\\d{4}$",
cl: "^\\d{7}$",
cn: "^\\d{6}$",
cr: "^\\d{4,5}|\\d{3}-\\d{4}$",
cs: "^\\d{5}$",
cv: "^\\d{4}$",
cx: "^6798$",
cy: "^\\d{4}$",
cz: "^\\d{3}[ ]?\\d{2}$",
de: "^\\d{5}$",
dk: "^\\d{4}$",
do: "^\\d{5}$",
dz: "^\\d{5}$",
ec: "^([A-Z]\\d{4}[A-Z]|(?:[A-Z]{2})?\\d{6})?$",
ee: "^\\d{5}$",
eg: "^\\d{5}$",
es: "^\\d{5}$",
et: "^\\d{4}$",
fi: "^\\d{5}$",
fk: "^FIQQ 1ZZ$",
fm: "^(9694[1-4])([ \\-]\\d{4})?$",
fo: "^\\d{3}$",
fr: "^\\d{2}[ ]?\\d{3}$",
gb: "^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}$",
ge: "^\\d{4}$",
gf: "^9[78]3\\d{2}$",
gg: "^GY\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$",
gl: "^39\\d{2}$",
gn: "^\\d{3}$",
gp: "^9[78][01]\\d{2}$",
gr: "^\\d{3}[ ]?\\d{2}$",
gs: "^SIQQ 1ZZ$",
gt: "^\\d{5}$",
gu: "^969[123]\\d([ \\-]\\d{4})?$",
gw: "^\\d{4}$",
hm: "^\\d{4}$",
hn: "^(?:\\d{5})?$",
hr: "^\\d{5}$",
ht: "^\\d{4}$",
hu: "^\\d{4}$",
id: "^\\d{5}$",
il: "^\\d{5}$",
im: "^IM\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$",
in: "^\\d{6}$",
io: "^BBND 1ZZ$",
iq: "^\\d{5}$",
is: "^\\d{3}$",
it: "^\\d{5}$",
je: "^JE\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}$",
jo: "^\\d{5}$",
jp: "^\\d{3}-\\d{4}$",
ke: "^\\d{5}$",
kg: "^\\d{6}$",
kh: "^\\d{5}$",
kr: "^\\d{3}[\\-]\\d{3}$",
kw: "^\\d{5}$",
kz: "^\\d{6}$",
la: "^\\d{5}$",
lb: "^(\\d{4}([ ]?\\d{4})?)?$",
li: "^(948[5-9])|(949[0-7])$",
lk: "^\\d{5}$",
lr: "^\\d{4}$",
ls: "^\\d{3}$",
lt: "^\\d{5}$",
lu: "^\\d{4}$",
lv: "^\\d{4}$",
ma: "^\\d{5}$",
mc: "^980\\d{2}$",
md: "^\\d{4}$",
me: "^8\\d{4}$",
mg: "^\\d{3}$",
mh: "^969[67]\\d([ \\-]\\d{4})?$",
mk: "^\\d{4}$",
mn: "^\\d{6}$",
mp: "^9695[012]([ \\-]\\d{4})?$",
mq: "^9[78]2\\d{2}$",
mt: "^[A-Z]{3}[ ]?\\d{2,4}$",
mu: "^(\\d{3}[A-Z]{2}\\d{3})?$",
mv: "^\\d{5}$",
mx: "^\\d{5}$",
my: "^\\d{5}$",
nc: "^988\\d{2}$",
ne: "^\\d{4}$",
nf: "^2899$",
ng: "^(\\d{6})?$",
ni: "^((\\d{4}-)?\\d{3}-\\d{3}(-\\d{1})?)?$",
nl: "^\\d{4}[ ]?[A-Z]{2}$",
no: "^\\d{4}$",
np: "^\\d{5}$",
nz: "^\\d{4}$",
om: "^(PC )?\\d{3}$",
pf: "^987\\d{2}$",
pg: "^\\d{3}$",
ph: "^\\d{4}$",
pk: "^\\d{5}$",
pl: "^\\d{2}-\\d{3}$",
pm: "^9[78]5\\d{2}$",
pn: "^PCRN 1ZZ$",
pr: "^00[679]\\d{2}([ \\-]\\d{4})?$",
pt: "^\\d{4}([\\-]\\d{3})?$",
pw: "^96940$",
py: "^\\d{4}$",
re: "^9[78]4\\d{2}$",
ro: "^\\d{6}$",
rs: "^\\d{6}$",
ru: "^\\d{6}$",
sa: "^\\d{5}$",
se: "^\\d{3}[ ]?\\d{2}$",
sg: "^\\d{6}$",
sh: "^(ASCN|STHL) 1ZZ$",
si: "^\\d{4}$",
sj: "^\\d{4}$",
sk: "^\\d{3}[ ]?\\d{2}$",
sm: "^4789\\d$",
sn: "^\\d{5}$",
so: "^\\d{5}$",
sz: "^[HLMS]\\d{3}$",
tc: "^TKCA 1ZZ$",
th: "^\\d{5}$",
tj: "^\\d{6}$",
tm: "^\\d{6}$",
tn: "^\\d{4}$",
tr: "^\\d{5}$",
tw: "^\\d{3}(\\d{2})?$",
ua: "^\\d{5}$",
us: "^\\d{5}([ \\-]\\d{4})?$",
uy: "^\\d{5}$",
uz: "^\\d{6}$",
va: "^00120$",
ve: "^\\d{4}$",
vi: "^008(([0-4]\\d)|(5[01]))([ \\-]\\d{4})?$",
wf: "^986\\d{2}$",
xk: "^\\d{5}$",
yt: "^976\\d{2}$",
yu: "^\\d{5}$",
za: "^\\d{4}$",
zm: "^\\d{5}$",
};
2021-06-01 21:33:49 +00:00
2021-11-22 17:51:50 +00:00
connect() {
window.addEventListener("cart:country:update", (event) => {
if (this.data.get("group") !== event.detail.group) return;
2021-06-01 21:33:49 +00:00
2021-11-22 17:51:50 +00:00
const zipcodeRequired = event.detail.data.zipcodeRequired == "true";
2021-06-01 21:33:49 +00:00
2021-11-22 17:51:50 +00:00
this.codeTarget.value = "";
this.codeTarget.disabled = !zipcodeRequired;
this.codeTarget.required = zipcodeRequired;
2021-06-01 21:33:49 +00:00
2021-11-22 17:51:50 +00:00
if (!zipcodeRequired) return;
2021-06-01 21:33:49 +00:00
2021-11-22 17:51:50 +00:00
this.codeTarget.pattern =
this.postal_codes[event.detail.iso.toLowerCase()] || ".*";
2021-06-01 21:33:49 +00:00
if (event.detail.selectedZipcode) {
2021-11-22 17:51:50 +00:00
this.codeTarget.value = event.detail.selectedZipcode;
this.codeTarget.dispatchEvent(new Event("change"));
2021-06-01 21:33:49 +00:00
}
2021-11-22 17:51:50 +00:00
});
2021-06-01 21:33:49 +00:00
}
}