JezK
Edit File: address-b8e2e4c8.js.map
{"file":"address-b8e2e4c8.js","mappings":";;;AAiDA,MAAM,IAAI,GAAG,CAAA,MAAA,MAAM,CAAC,MAAM,0CAAE,MAAM,KAAI,SAAS,CAAC,QAAQ,KAAK,SAAiB,aAAjB,SAAS,uBAAT,SAAS,CAAU,eAAe,CAAA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtI,IAAI,oBAAoB,GAAmD,IAAI,CAAC;AAChF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAe,CAAC;MAEtC,cAAc,GAAG;;IAC5B,IAAI,oBAAoB,EAAE;QACxB,OAAO,oBAAoB,CAAC;KAC7B;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,0CAA0C,EAAE;QACnE,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,OAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,EAAE,CAAC,0CAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAA4C,CAAC;IACzI,oBAAoB,GAAG,CAAC,MAAA,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,EAAE,0CAAE,KAAK,0CAAE,YAAY,mDAAG,4BAA4B,EAAE,SAAS,CAA6C,KAAI,SAAS,CAAC;IAC5J,OAAO,oBAAoB,CAAC;AAC9B,EAAE;MAEW,iBAAiB,GAAG,OAAO,WAAmB;IACzD,IAAI,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;QACxC,OAAO,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KAC7C;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,4CAA4C,WAAW,EAAE,EAAE;QAClF,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,EAAE;MAEW,iBAAiB,GAAG,OAAO,OAAe;IACrD,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,EAAE,CAAC;KACX;IAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,KAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAqC,MAAM;QAC7E,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,KAAK,EAAE,KAAK,CAAC,IAAI;KAClB,CAAC,CAAC,CAAC;AACN;;;;","names":[],"sources":["src/functions/address.ts"],"sourcesContent":["import { __ } from '@wordpress/i18n';\nimport { addQueryArgs } from '@wordpress/url';\nimport { Address } from '../types';\nexport const STATE_INCLUDED_COUNTRIES = ['AU', 'BR', 'CA', 'CH', 'ES', 'HK', 'IE', 'IN', 'IT', 'JP', 'MY', 'MX', 'US'];\nexport const POSTAL_CODE_EXCLUDED_COUNTRIES = ['HK'];\nexport const CITY_EXCLUDED_COUNTRIES = ['SG'];\nimport countries from './countries.json';\n\nexport const hasPostal = (countryCode: string) => {\n return !POSTAL_CODE_EXCLUDED_COUNTRIES.includes(countryCode);\n};\n\nexport const hasCity = (countryCode: string) => {\n return !CITY_EXCLUDED_COUNTRIES.includes(countryCode);\n};\n\nexport const hasState = (countryCode: string) => {\n return STATE_INCLUDED_COUNTRIES.includes(countryCode);\n};\n\nexport const hasCompleteAddress = args => {\n const { country, state } = args;\n // does it have the fields filled out?\n if (!hasRequiredFields(args)) {\n return false;\n }\n return hasState(country) ? hasCorrectState(country, state) : true;\n};\n\nexport const hasCorrectState = (country, state) => {\n return (countries?.[country] || ([] as Array<{ value: string; label: string }>)).some(({ value }) => value === state);\n};\n\nexport const hasRequiredFields = ({ city, country, line_1, postal_code, state }) => {\n if (!country) {\n return false;\n }\n if (hasPostal(country) && !postal_code) {\n return false;\n }\n if (hasCity(country) && !city) {\n return false;\n }\n if (hasState(country) && !state) {\n return false;\n }\n return !!line_1;\n};\n\nconst lang = window.scData?.locale || navigator.language || (navigator as any)?.browserLanguage || (navigator.languages || ['en'])[0];\n\nlet cachedCountryChoices: Array<{ value: string; label: string }> | null = null;\nconst countryDetailsCache = new Map<string, any>();\n\nexport const countryChoices = async () => {\n if (cachedCountryChoices) {\n return cachedCountryChoices;\n }\n\n const url = addQueryArgs(`https://api.surecart.com/v1/public/atlas`, {\n locale: lang,\n });\n const response = await fetch(url);\n const data: any = await response.json();\n const countries = (data?.data || [])?.map(({ code, name }) => ({ value: code, label: name })) as Array<{ value: string; label: string }>;\n cachedCountryChoices = (window?.wp?.hooks?.applyFilters?.('surecart_address_countries', countries) as Array<{ value: string; label: string }>) || countries;\n return cachedCountryChoices;\n};\n\nexport const getCountryDetails = async (countryCode: string) => {\n if (countryDetailsCache.has(countryCode)) {\n return countryDetailsCache.get(countryCode);\n }\n\n const url = addQueryArgs(`https://api.surecart.com/v1/public/atlas/${countryCode}`, {\n locale: lang,\n });\n const response = await fetch(url);\n const details = await response.json();\n countryDetailsCache.set(countryCode, details);\n return details;\n};\n\nexport const getCountryRegions = async (country: string) => {\n if (!country) {\n return [];\n }\n\n const details = await getCountryDetails(country);\n return (details?.states || []).map((state: { code: string; name: string }) => ({\n value: state.code,\n label: state.name,\n }));\n};\n\nexport const isAddressComplete = (address: Partial<Address>) => {\n return (\n address?.country && // must have country\n address?.line_1 && // must have line 1\n (hasPostal(address.country) ? address?.postal_code : true) && // should have postal code if applicable\n (hasCity(address.country) ? address?.city : true) && // should have city if applicable\n (hasState(address.country) ? address?.state : true) // should have state if applicable\n );\n};\n\nexport const isAddressCompleteEnough = (address: Partial<Address>) => {\n return (\n address?.country && // must have country\n (hasPostal(address.country) ? address?.postal_code : true) && // should have postal code if applicable\n (hasCity(address.country) ? address?.city : true) && // should have city if applicable\n (hasState(address.country) ? address?.state : true) // should have state if applicable\n );\n};\n"],"version":3}