From 0143f6c851191f37f273b2918c45c3feb9d98535 Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:45:30 +0300 Subject: [PATCH 1/8] Enable jest tests --- apps/climatemappedafrica/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/climatemappedafrica/package.json b/apps/climatemappedafrica/package.json index 460c2aa51..0cd6ee70c 100644 --- a/apps/climatemappedafrica/package.json +++ b/apps/climatemappedafrica/package.json @@ -28,7 +28,7 @@ "dev": "NODE_OPTIONS='--inspect' TS_NODE_PROJECT=tsconfig.server.json tsx server.ts", "lint-check": "TIMING=1 eslint './'", "lint": "TIMING=1 eslint --fix './'", - "jest": "jest --passWithNoTests", + "jest": "jest", "playwright": "npx playwright test", "clean": "rm -rf .next .turbo node_modules" }, From b89a7b62672604dc0531b8bf1274c6bd8be1a6aa Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:47:38 +0300 Subject: [PATCH 2/8] Implement blocks (Summary and Team) --- apps/climatemappedafrica/next.config.js | 12 ++++-- .../src/payload/blocks/Summary.js | 43 +++++++++++++++++++ .../src/payload/blocks/Team.js | 16 +++++++ .../src/payload/fields/socialLinks.js | 2 +- 4 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 apps/climatemappedafrica/src/payload/blocks/Summary.js create mode 100644 apps/climatemappedafrica/src/payload/blocks/Team.js diff --git a/apps/climatemappedafrica/next.config.js b/apps/climatemappedafrica/next.config.js index fa6f8ae11..ed809bcc4 100644 --- a/apps/climatemappedafrica/next.config.js +++ b/apps/climatemappedafrica/next.config.js @@ -32,19 +32,25 @@ module.exports = { "@hurumap/next", ], webpack: (config) => { + const fileLoaderRule = config.module.rules.find((rule) => + rule.test?.test?.(".svg"), + ); config.module.rules.push( { + ...fileLoaderRule, test: /\.svg$/i, - type: "asset", resourceQuery: /url/, // *.svg?url }, { test: /\.svg$/i, - issuer: /\.[jt]sx?$/, - resourceQuery: { not: [/url/] }, // exclude react component if *.svg?url + issuer: fileLoaderRule.issuer, + resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] }, // exclude if *.svg?url use: ["@svgr/webpack"], }, ); + // Since *.svg files are now handled ☝️, we can safely ignore file loader rule. + fileLoaderRule.exclude = /\.svg$/i; + config.experiments = { ...config.experiments, topLevelAwait: true }; // eslint-disable-line no-param-reassign // eslint-disable-next-line no-param-reassign config.resolve.fallback = { ...config.resolve.fallback, diff --git a/apps/climatemappedafrica/src/payload/blocks/Summary.js b/apps/climatemappedafrica/src/payload/blocks/Summary.js new file mode 100644 index 000000000..c3d71796b --- /dev/null +++ b/apps/climatemappedafrica/src/payload/blocks/Summary.js @@ -0,0 +1,43 @@ +import { slateEditor } from "@payloadcms/richtext-slate"; + +import richText from "../fields/richText"; + +const Summary = { + slug: "summary", + fields: [ + { + name: "title", + label: { + en: "Title", + }, + type: "text", + required: true, + localized: true, + }, + { + name: "subtitle", + label: { + en: "Subtitle", + }, + type: "text", + required: true, + localized: true, + }, + richText({ + name: "content", + label: { + en: "Content", + }, + editor: slateEditor({ + admin: { + elements: ["link", "ol", "ul", "indent"], + leaves: ["bold", "code", "italic", "underline"], + }, + }), + required: true, + localized: true, + }), + ], +}; + +export default Summary; diff --git a/apps/climatemappedafrica/src/payload/blocks/Team.js b/apps/climatemappedafrica/src/payload/blocks/Team.js new file mode 100644 index 000000000..c5831807d --- /dev/null +++ b/apps/climatemappedafrica/src/payload/blocks/Team.js @@ -0,0 +1,16 @@ +const Team = { + slug: "team", + fields: [ + { + name: "title", + label: { + en: "Title", + }, + type: "text", + required: true, + localized: true, + }, + ], +}; + +export default Team; diff --git a/apps/climatemappedafrica/src/payload/fields/socialLinks.js b/apps/climatemappedafrica/src/payload/fields/socialLinks.js index be10a90c4..b81e4edc6 100644 --- a/apps/climatemappedafrica/src/payload/fields/socialLinks.js +++ b/apps/climatemappedafrica/src/payload/fields/socialLinks.js @@ -57,7 +57,7 @@ function socialLinks(overrides) { if ( data?.[linksName]?.filter((l) => l.platform === val)?.length > 1 ) { - return t("codeforafrica.validation:uniquePlatforms"); + return t("climatemappedafrica.validation:uniquePlatforms"); } const { From 683af6c8cf86d8cfc3ea85d2d26ffeb4434ef021 Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:48:09 +0300 Subject: [PATCH 3/8] Implement Members collection and add blocks to Pages collection --- .../src/payload/collections/Members.js | 48 +++++++++++++++++++ .../src/payload/collections/Pages.js | 4 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 apps/climatemappedafrica/src/payload/collections/Members.js diff --git a/apps/climatemappedafrica/src/payload/collections/Members.js b/apps/climatemappedafrica/src/payload/collections/Members.js new file mode 100644 index 000000000..c55e4832d --- /dev/null +++ b/apps/climatemappedafrica/src/payload/collections/Members.js @@ -0,0 +1,48 @@ +import { allCountries } from "../../lib/data/countries"; +import image from "../fields/image"; +import slug from "../fields/slug"; + +const Members = { + slug: "members", + admin: { + defaultColumns: ["name", "title", "country", "updatedAt"], + enableRichTextLink: false, + group: "Project", + useAsTitle: "name", + }, + fields: [ + image({ + overrides: { + required: true, + }, + }), + { + name: "name", + type: "text", + required: true, + localized: true, + index: true, + }, + { + name: "title", + type: "text", + required: true, + localized: true, + }, + slug({ fieldToUse: "name" }), + { + name: "country", + type: "select", + options: allCountries, + }, + { + name: "active", + type: "checkbox", + label: "Is Active?", + required: true, + defaultValue: true, + }, + ], +}; + +export default Members; diff --git a/apps/climatemappedafrica/src/payload/collections/Pages.js b/apps/climatemappedafrica/src/payload/collections/Pages.js index 9aadce21e..666cfd805 100644 --- a/apps/climatemappedafrica/src/payload/collections/Pages.js +++ b/apps/climatemappedafrica/src/payload/collections/Pages.js @@ -1,3 +1,5 @@ +import Summary from "../blocks/Summary"; +import Team from "../blocks/Team"; import fullTitle from "../fields/fullTitle"; import slug from "../fields/slug"; import formatDraftUrl from "../utils/formatDraftUrl"; @@ -27,7 +29,7 @@ const Pages = { { name: "blocks", type: "blocks", - blocks: [], + blocks: [Summary, Team], localized: true, admin: { initCollapsed: true, From 10d737784757ddef9805c27013d02d99c1f72c1c Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:49:18 +0300 Subject: [PATCH 4/8] Add CMS data management for Team and Summary --- .../src/lib/data/blockify/index.js | 12 +- .../src/lib/data/blockify/team.js | 40 + .../src/lib/data/common/index.js | 2 +- .../src/lib/data/countries.js | 4227 +++++++++++++++++ .../src/lib/data/utils/getMembers.js | 43 + .../src/lib/data/utils/index.js | 7 + .../src/utils/equalsIgnoreCase.js | 5 + apps/climatemappedafrica/src/utils/index.js | 2 + 8 files changed, 4333 insertions(+), 5 deletions(-) create mode 100644 apps/climatemappedafrica/src/lib/data/blockify/team.js create mode 100644 apps/climatemappedafrica/src/lib/data/countries.js create mode 100644 apps/climatemappedafrica/src/lib/data/utils/getMembers.js create mode 100644 apps/climatemappedafrica/src/lib/data/utils/index.js create mode 100644 apps/climatemappedafrica/src/utils/equalsIgnoreCase.js create mode 100644 apps/climatemappedafrica/src/utils/index.js diff --git a/apps/climatemappedafrica/src/lib/data/blockify/index.js b/apps/climatemappedafrica/src/lib/data/blockify/index.js index 3d7836feb..af50c6631 100644 --- a/apps/climatemappedafrica/src/lib/data/blockify/index.js +++ b/apps/climatemappedafrica/src/lib/data/blockify/index.js @@ -1,14 +1,16 @@ -/* eslint-disable import/prefer-default-export */ +import team from "./team"; -const propsifyBlockBySlug = {}; +const propsifyBlockBySlug = { + team, +}; -export const blockify = async (blocks, api) => { +export const blockify = async (blocks, api, context) => { const promises = blocks?.map(async (block) => { const slug = block.blockType; const propsifyBlock = propsifyBlockBySlug[slug]; if (propsifyBlock) { - return propsifyBlock(block, api); + return propsifyBlock(block, api, context); } return { ...block, @@ -21,3 +23,5 @@ export const blockify = async (blocks, api) => { } return blocks ?? null; }; + +export default undefined; diff --git a/apps/climatemappedafrica/src/lib/data/blockify/team.js b/apps/climatemappedafrica/src/lib/data/blockify/team.js new file mode 100644 index 000000000..ccc51693e --- /dev/null +++ b/apps/climatemappedafrica/src/lib/data/blockify/team.js @@ -0,0 +1,40 @@ +import { countries } from "@/climatemappedafrica/lib/data/countries"; +import { + getMembers, + imageFromMedia, +} from "@/climatemappedafrica/lib/data/utils"; +import { equalsIgnoreCase } from "@/climatemappedafrica/utils"; + +const getCountryFromCode = (alpha3) => + countries.find((c) => equalsIgnoreCase(c.alpha3, alpha3)) ?? null; + +async function team(block, api, context) { + const { query } = context; + const data = await getMembers(api, query); + let members = null; + if (data?.results?.length) { + members = data.results.map((member) => { + const { alt, src: image } = imageFromMedia(member.image); + let description = member.title; + const country = getCountryFromCode(member.country); + if (country) { + description = `${description}, ${country.label.en}`; + } + const title = member.name; + + return { + alt, + description, + title, + image, + }; + }); + } + return { + ...block, + members, + slug: block.blockType, + }; +} + +export default team; diff --git a/apps/climatemappedafrica/src/lib/data/common/index.js b/apps/climatemappedafrica/src/lib/data/common/index.js index 15b838a2e..b97d27209 100644 --- a/apps/climatemappedafrica/src/lib/data/common/index.js +++ b/apps/climatemappedafrica/src/lib/data/common/index.js @@ -49,7 +49,7 @@ export async function getPageProps(api, context) { return null; } - const blocks = await blockify(page.blocks, api); + const blocks = await blockify(page.blocks, api, context); const siteSettings = await api.findGlobal("settings-site"); const footer = getFooter(siteSettings); diff --git a/apps/climatemappedafrica/src/lib/data/countries.js b/apps/climatemappedafrica/src/lib/data/countries.js new file mode 100644 index 000000000..6a73f772b --- /dev/null +++ b/apps/climatemappedafrica/src/lib/data/countries.js @@ -0,0 +1,4227 @@ +export const countries = [ + { + region: "Asia", + continent: "Asia", + value: "Afghanistan", + label: { pt: "Afeganistão", en: "Afghanistan", fr: "Afghanistan" }, + slug: "AFG", + name: "Afghanistan", + alpha3: "AFG", + alpha2: "AF", + countryCode: "004", + iso: "ISO 3166-2:AF", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Åland Islands", + label: { en: "Åland Islands" }, + slug: "ALA", + name: "Åland Islands", + alpha3: "ALA", + alpha2: "AX", + countryCode: "248", + iso: "ISO 3166-2:AX", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Albania", + label: { pt: "Albânia", en: "Albania", fr: "Albanie" }, + slug: "ALB", + name: "Albania", + alpha3: "ALB", + alpha2: "AL", + countryCode: "008", + iso: "ISO 3166-2:AL", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Algeria", + label: { pt: "Argélia", en: "Algeria", fr: "Algérie" }, + slug: "DZA", + name: "Algeria", + alpha3: "DZA", + alpha2: "DZ", + countryCode: "012", + iso: "ISO 3166-2:DZ", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "American Samoa", + label: { en: "American Samoa" }, + slug: "ASM", + name: "American Samoa", + alpha3: "ASM", + alpha2: "AS", + countryCode: "016", + iso: "ISO 3166-2:AS", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Andorra", + label: { pt: "Andorra", en: "Andorra", fr: "Andorre" }, + slug: "AND", + name: "Andorra", + alpha3: "AND", + alpha2: "AD", + countryCode: "020", + iso: "ISO 3166-2:AD", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Angola", + label: { pt: "Angola", en: "Angola", fr: "Angola" }, + slug: "AGO", + name: "Angola", + alpha3: "AGO", + alpha2: "AO", + countryCode: "024", + iso: "ISO 3166-2:AO", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Americas", + value: "Anguilla", + label: { en: "Anguilla" }, + slug: "AIA", + name: "Anguilla", + alpha3: "AIA", + alpha2: "AI", + countryCode: "660", + iso: "ISO 3166-2:AI", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "", + value: "Antarctica", + label: { en: "Antarctica" }, + slug: "ATA", + name: "Antarctica", + alpha3: "ATA", + alpha2: "AQ", + countryCode: "010", + iso: "ISO 3166-2:AQ", + subRegion: "", + intermediateRegion: "", + regionCode: "", + subRegionCode: "", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Antigua and Barbuda", + label: { + pt: "Antígua e Barbuda", + en: "Antigua and Barbuda", + fr: "Antigua-et-Barbuda", + }, + slug: "ATG", + name: "Antigua and Barbuda", + alpha3: "ATG", + alpha2: "AG", + countryCode: "028", + iso: "ISO 3166-2:AG", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + continent: "South America", + value: "Argentina", + label: { pt: "Argentina", en: "Argentina", fr: "Argentine" }, + slug: "ARG", + name: "Argentina", + alpha3: "ARG", + alpha2: "AR", + countryCode: "032", + iso: "ISO 3166-2:AR", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Asia", + continent: "Asia", + value: "Armenia", + label: { pt: "Armênia", en: "Armenia", fr: "Arménie" }, + slug: "ARM", + name: "Armenia", + alpha3: "ARM", + alpha2: "AM", + countryCode: "051", + iso: "ISO 3166-2:AM", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Aruba", + label: { en: "Aruba" }, + slug: "ABW", + name: "Aruba", + alpha3: "ABW", + alpha2: "AW", + countryCode: "533", + iso: "ISO 3166-2:AW", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Australia", + label: { pt: "Austrália", en: "Australia", fr: "Australie" }, + slug: "AUS", + name: "Australia", + alpha3: "AUS", + alpha2: "AU", + countryCode: "036", + iso: "ISO 3166-2:AU", + subRegion: "Australia and New Zealand", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "053", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Austria", + label: { pt: "Áustria", en: "Austria", fr: "Autriche" }, + slug: "AUT", + name: "Austria", + alpha3: "AUT", + alpha2: "AT", + countryCode: "040", + iso: "ISO 3166-2:AT", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Azerbaijan", + label: { pt: "Azerbaijão", en: "Azerbaijan", fr: "Azerbaïdjan" }, + slug: "AZE", + name: "Azerbaijan", + alpha3: "AZE", + alpha2: "AZ", + countryCode: "031", + iso: "ISO 3166-2:AZ", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Bahamas", + label: { pt: "Bahamas", en: "Bahamas", fr: "Bahamas" }, + slug: "BHS", + name: "Bahamas", + alpha3: "BHS", + alpha2: "BS", + countryCode: "044", + iso: "ISO 3166-2:BS", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Asia", + continent: "Asia", + value: "Bahrain", + label: { pt: "Bahrein", en: "Bahrain", fr: "Bahreïn" }, + slug: "BHR", + name: "Bahrain", + alpha3: "BHR", + alpha2: "BH", + countryCode: "048", + iso: "ISO 3166-2:BH", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Bangladesh", + label: { pt: "Bangladesh", en: "Bangladesh", fr: "Bangladesh" }, + slug: "BGD", + name: "Bangladesh", + alpha3: "BGD", + alpha2: "BD", + countryCode: "050", + iso: "ISO 3166-2:BD", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Barbados", + label: { pt: "Barbados", en: "Barbados", fr: "Barbade" }, + slug: "BRB", + name: "Barbados", + alpha3: "BRB", + alpha2: "BB", + countryCode: "052", + iso: "ISO 3166-2:BB", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Europe", + continent: "Europe", + value: "Belarus", + label: { pt: "Belarus", en: "Belarus", fr: "Biélorussie" }, + slug: "BLR", + name: "Belarus", + alpha3: "BLR", + alpha2: "BY", + countryCode: "112", + iso: "ISO 3166-2:BY", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Belgium", + label: { pt: "Bélgica", en: "Belgium", fr: "Belgique" }, + slug: "BEL", + name: "Belgium", + alpha3: "BEL", + alpha2: "BE", + countryCode: "056", + iso: "ISO 3166-2:BE", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Belize", + label: { pt: "Belize", en: "Belize", fr: "Belize" }, + slug: "BLZ", + name: "Belize", + alpha3: "BLZ", + alpha2: "BZ", + countryCode: "084", + iso: "ISO 3166-2:BZ", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Africa", + continent: "Africa", + value: "Benin", + label: { pt: "Benin", en: "Benin", fr: "Bénin" }, + slug: "BEN", + name: "Benin", + alpha3: "BEN", + alpha2: "BJ", + countryCode: "204", + iso: "ISO 3166-2:BJ", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Americas", + value: "Bermuda", + label: { en: "Bermuda" }, + slug: "BMU", + name: "Bermuda", + alpha3: "BMU", + alpha2: "BM", + countryCode: "060", + iso: "ISO 3166-2:BM", + subRegion: "Northern America", + intermediateRegion: "", + regionCode: "019", + subRegionCode: "021", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Bhutan", + label: { pt: "Butão", en: "Bhutan", fr: "Bhoutan" }, + slug: "BTN", + name: "Bhutan", + alpha3: "BTN", + alpha2: "BT", + countryCode: "064", + iso: "ISO 3166-2:BT", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Bolivia (Plurinational State of)", + label: { en: "Bolivia (Plurinational State of)" }, + slug: "BOL", + name: "Bolivia (Plurinational State of)", + alpha3: "BOL", + alpha2: "BO", + countryCode: "068", + iso: "ISO 3166-2:BO", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Americas", + value: "Bonaire, Sint Eustatius and Saba", + label: { en: "Bonaire, Sint Eustatius and Saba" }, + slug: "BES", + name: "Bonaire, Sint Eustatius and Saba", + alpha3: "BES", + alpha2: "BQ", + countryCode: "535", + iso: "ISO 3166-2:BQ", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Europe", + continent: "Europe", + value: "Bosnia and Herzegovina", + label: { + pt: "Bósnia e Herzegovina", + en: "Bosnia and Herzegovina", + fr: "Bosnie-Herzégovine", + }, + slug: "BIH", + name: "Bosnia and Herzegovina", + alpha3: "BIH", + alpha2: "BA", + countryCode: "070", + iso: "ISO 3166-2:BA", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Botswana", + label: { pt: "Botsuana", en: "Botswana", fr: "Botswana" }, + slug: "BWA", + name: "Botswana", + alpha3: "BWA", + alpha2: "BW", + countryCode: "072", + iso: "ISO 3166-2:BW", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Southern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "018", + }, + { + region: "Americas", + value: "Bouvet Island", + label: { en: "Bouvet Island" }, + slug: "BVT", + name: "Bouvet Island", + alpha3: "BVT", + alpha2: "BV", + countryCode: "074", + iso: "ISO 3166-2:BV", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Americas", + continent: "South America", + value: "Brazil", + label: { pt: "Brasil", en: "Brazil", fr: "Brésil" }, + slug: "BRA", + name: "Brazil", + alpha3: "BRA", + alpha2: "BR", + countryCode: "076", + iso: "ISO 3166-2:BR", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Africa", + value: "British Indian Ocean Territory", + label: { en: "British Indian Ocean Territory" }, + slug: "IOT", + name: "British Indian Ocean Territory", + alpha3: "IOT", + alpha2: "IO", + countryCode: "086", + iso: "ISO 3166-2:IO", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Asia", + value: "Brunei Darussalam", + label: { en: "Brunei Darussalam" }, + slug: "BRN", + name: "Brunei Darussalam", + alpha3: "BRN", + alpha2: "BN", + countryCode: "096", + iso: "ISO 3166-2:BN", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Bulgaria", + label: { pt: "Bulgária", en: "Bulgaria", fr: "Bulgarie" }, + slug: "BGR", + name: "Bulgaria", + alpha3: "BGR", + alpha2: "BG", + countryCode: "100", + iso: "ISO 3166-2:BG", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Burkina Faso", + label: { pt: "Burquina Faso", en: "Burkina Faso", fr: "Burkina Faso" }, + slug: "BFA", + name: "Burkina Faso", + alpha3: "BFA", + alpha2: "BF", + countryCode: "854", + iso: "ISO 3166-2:BF", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Africa", + continent: "Africa", + value: "Burundi", + label: { pt: "Burundi", en: "Burundi", fr: "Burundi" }, + slug: "BDI", + name: "Burundi", + alpha3: "BDI", + alpha2: "BI", + countryCode: "108", + iso: "ISO 3166-2:BI", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + continent: "Africa", + value: "Cabo Verde", + label: { pt: "Cabo Verde", en: "Cabo Verde", fr: "Cap-Vert" }, + slug: "CPV", + name: "Cabo Verde", + alpha3: "CPV", + alpha2: "CV", + countryCode: "132", + iso: "ISO 3166-2:CV", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Asia", + continent: "Asia", + value: "Cambodia", + label: { pt: "Camboja", en: "Cambodia", fr: "Cambodge" }, + slug: "KHM", + name: "Cambodia", + alpha3: "KHM", + alpha2: "KH", + countryCode: "116", + iso: "ISO 3166-2:KH", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Cameroon", + label: { pt: "Camarões", en: "Cameroon", fr: "Cameroun" }, + slug: "CMR", + name: "Cameroon", + alpha3: "CMR", + alpha2: "CM", + countryCode: "120", + iso: "ISO 3166-2:CM", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Americas", + continent: "North America", + value: "Canada", + label: { pt: "Canadá", en: "Canada", fr: "Canada" }, + slug: "CAN", + name: "Canada", + alpha3: "CAN", + alpha2: "CA", + countryCode: "124", + iso: "ISO 3166-2:CA", + subRegion: "Northern America", + intermediateRegion: "", + regionCode: "019", + subRegionCode: "021", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Cayman Islands", + label: { en: "Cayman Islands" }, + slug: "CYM", + name: "Cayman Islands", + alpha3: "CYM", + alpha2: "KY", + countryCode: "136", + iso: "ISO 3166-2:KY", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Africa", + continent: "Africa", + value: "Central African Republic", + label: { + pt: "República Centro-Africana", + en: "Central African Republic", + fr: "République centrafricaine", + }, + slug: "CAF", + name: "Central African Republic", + alpha3: "CAF", + alpha2: "CF", + countryCode: "140", + iso: "ISO 3166-2:CF", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Africa", + continent: "Africa", + value: "Chad", + label: { pt: "Chade", en: "Chad", fr: "Tchad" }, + slug: "TCD", + name: "Chad", + alpha3: "TCD", + alpha2: "TD", + countryCode: "148", + iso: "ISO 3166-2:TD", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Americas", + continent: "South America", + value: "Chile", + label: { pt: "Chile", en: "Chile", fr: "Chili" }, + slug: "CHL", + name: "Chile", + alpha3: "CHL", + alpha2: "CL", + countryCode: "152", + iso: "ISO 3166-2:CL", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Asia", + continent: "Asia", + value: "China", + label: { pt: "China", en: "China", fr: "Chine" }, + slug: "CHN", + name: "China", + alpha3: "CHN", + alpha2: "CN", + countryCode: "156", + iso: "ISO 3166-2:CN", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "Christmas Island", + label: { en: "Christmas Island" }, + slug: "CXR", + name: "Christmas Island", + alpha3: "CXR", + alpha2: "CX", + countryCode: "162", + iso: "ISO 3166-2:CX", + subRegion: "Australia and New Zealand", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "053", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "Cocos (Keeling) Islands", + label: { en: "Cocos (Keeling) Islands" }, + slug: "CCK", + name: "Cocos (Keeling) Islands", + alpha3: "CCK", + alpha2: "CC", + countryCode: "166", + iso: "ISO 3166-2:CC", + subRegion: "Australia and New Zealand", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "053", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "South America", + value: "Colombia", + label: { pt: "Colômbia", en: "Colombia", fr: "Colombie" }, + slug: "COL", + name: "Colombia", + alpha3: "COL", + alpha2: "CO", + countryCode: "170", + iso: "ISO 3166-2:CO", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Africa", + continent: "Africa", + value: "Comoros", + label: { pt: "Comores", en: "Comoros", fr: "Comores" }, + slug: "COM", + name: "Comoros", + alpha3: "COM", + alpha2: "KM", + countryCode: "174", + iso: "ISO 3166-2:KM", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + value: "Congo", + label: { en: "Congo" }, + slug: "COG", + name: "Congo", + alpha3: "COG", + alpha2: "CG", + countryCode: "178", + iso: "ISO 3166-2:CG", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Africa", + value: "Congo, Democratic Republic of the", + label: { en: "Congo, Democratic Republic of the" }, + slug: "COD", + name: "Congo, Democratic Republic of the", + alpha3: "COD", + alpha2: "CD", + countryCode: "180", + iso: "ISO 3166-2:CD", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Oceania", + value: "Cook Islands", + label: { en: "Cook Islands" }, + slug: "COK", + name: "Cook Islands", + alpha3: "COK", + alpha2: "CK", + countryCode: "184", + iso: "ISO 3166-2:CK", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Costa Rica", + label: { pt: "Costa Rica", en: "Costa Rica", fr: "Costa Rica" }, + slug: "CRI", + name: "Costa Rica", + alpha3: "CRI", + alpha2: "CR", + countryCode: "188", + iso: "ISO 3166-2:CR", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Africa", + continent: "Africa", + value: "Côte d'Ivoire", + label: { pt: "Costa do Marfim", en: "Côte d'Ivoire", fr: "Côte d'Ivoire" }, + slug: "CIV", + name: "Côte d'Ivoire", + alpha3: "CIV", + alpha2: "CI", + countryCode: "384", + iso: "ISO 3166-2:CI", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Europe", + continent: "Europe", + value: "Croatia", + label: { pt: "Croácia", en: "Croatia", fr: "Croatie" }, + slug: "HRV", + name: "Croatia", + alpha3: "HRV", + alpha2: "HR", + countryCode: "191", + iso: "ISO 3166-2:HR", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Cuba", + label: { pt: "Cuba", en: "Cuba", fr: "Cuba" }, + slug: "CUB", + name: "Cuba", + alpha3: "CUB", + alpha2: "CU", + countryCode: "192", + iso: "ISO 3166-2:CU", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + value: "Curaçao", + label: { en: "Curaçao" }, + slug: "CUW", + name: "Curaçao", + alpha3: "CUW", + alpha2: "CW", + countryCode: "531", + iso: "ISO 3166-2:CW", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Asia", + continent: "Asia", + value: "Cyprus", + label: { pt: "Chipre", en: "Cyprus", fr: "Chypre" }, + slug: "CYP", + name: "Cyprus", + alpha3: "CYP", + alpha2: "CY", + countryCode: "196", + iso: "ISO 3166-2:CY", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Czechia", + label: { en: "Czechia" }, + slug: "CZE", + name: "Czechia", + alpha3: "CZE", + alpha2: "CZ", + countryCode: "203", + iso: "ISO 3166-2:CZ", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Denmark", + label: { pt: "Dinamarca", en: "Denmark", fr: "Danemark" }, + slug: "DNK", + name: "Denmark", + alpha3: "DNK", + alpha2: "DK", + countryCode: "208", + iso: "ISO 3166-2:DK", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Djibouti", + label: { pt: "Djibuti", en: "Djibouti", fr: "Djibouti" }, + slug: "DJI", + name: "Djibouti", + alpha3: "DJI", + alpha2: "DJ", + countryCode: "262", + iso: "ISO 3166-2:DJ", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Americas", + continent: "North America", + value: "Dominica", + label: { pt: "Dominica", en: "Dominica", fr: "Dominique" }, + slug: "DMA", + name: "Dominica", + alpha3: "DMA", + alpha2: "DM", + countryCode: "212", + iso: "ISO 3166-2:DM", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + continent: "North America", + value: "Dominican Republic", + label: { + pt: "República Dominicana", + en: "Dominican Republic", + fr: "République dominicaine", + }, + slug: "DOM", + name: "Dominican Republic", + alpha3: "DOM", + alpha2: "DO", + countryCode: "214", + iso: "ISO 3166-2:DO", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + continent: "South America", + value: "Ecuador", + label: { pt: "Equador", en: "Ecuador", fr: "Équateur" }, + slug: "ECU", + name: "Ecuador", + alpha3: "ECU", + alpha2: "EC", + countryCode: "218", + iso: "ISO 3166-2:EC", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Africa", + continent: "Africa", + value: "Egypt", + label: { pt: "Egito", en: "Egypt", fr: "Égypte" }, + slug: "EGY", + name: "Egypt", + alpha3: "EGY", + alpha2: "EG", + countryCode: "818", + iso: "ISO 3166-2:EG", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "El Salvador", + label: { pt: "El Salvador", en: "El Salvador", fr: "El Salvador" }, + slug: "SLV", + name: "El Salvador", + alpha3: "SLV", + alpha2: "SV", + countryCode: "222", + iso: "ISO 3166-2:SV", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Africa", + continent: "Africa", + value: "Equatorial Guinea", + label: { + pt: "Guiné Equatorial", + en: "Equatorial Guinea", + fr: "Guinée équatoriale", + }, + slug: "GNQ", + name: "Equatorial Guinea", + alpha3: "GNQ", + alpha2: "GQ", + countryCode: "226", + iso: "ISO 3166-2:GQ", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Africa", + continent: "Africa", + value: "Eritrea", + label: { pt: "Eritreia", en: "Eritrea", fr: "Érythrée" }, + slug: "ERI", + name: "Eritrea", + alpha3: "ERI", + alpha2: "ER", + countryCode: "232", + iso: "ISO 3166-2:ER", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Europe", + continent: "Europe", + value: "Estonia", + label: { pt: "Estônia", en: "Estonia", fr: "Estonie" }, + slug: "EST", + name: "Estonia", + alpha3: "EST", + alpha2: "EE", + countryCode: "233", + iso: "ISO 3166-2:EE", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Eswatini", + label: { pt: "Eswatini", en: "Eswatini", fr: "Eswatini" }, + slug: "SWZ", + name: "Eswatini", + alpha3: "SWZ", + alpha2: "SZ", + countryCode: "748", + iso: "ISO 3166-2:SZ", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Southern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "018", + }, + { + region: "Africa", + continent: "Africa", + value: "Ethiopia", + label: { pt: "Etiópia", en: "Ethiopia", fr: "Éthiopie" }, + slug: "ETH", + name: "Ethiopia", + alpha3: "ETH", + alpha2: "ET", + countryCode: "231", + iso: "ISO 3166-2:ET", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Americas", + value: "Falkland Islands (Malvinas)", + label: { en: "Falkland Islands (Malvinas)" }, + slug: "FLK", + name: "Falkland Islands (Malvinas)", + alpha3: "FLK", + alpha2: "FK", + countryCode: "238", + iso: "ISO 3166-2:FK", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Europe", + value: "Faroe Islands", + label: { en: "Faroe Islands" }, + slug: "FRO", + name: "Faroe Islands", + alpha3: "FRO", + alpha2: "FO", + countryCode: "234", + iso: "ISO 3166-2:FO", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Fiji", + label: { pt: "Fiji", en: "Fiji", fr: "Fidji" }, + slug: "FJI", + name: "Fiji", + alpha3: "FJI", + alpha2: "FJ", + countryCode: "242", + iso: "ISO 3166-2:FJ", + subRegion: "Melanesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "054", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Finland", + label: { pt: "Finlândia", en: "Finland", fr: "Finlande" }, + slug: "FIN", + name: "Finland", + alpha3: "FIN", + alpha2: "FI", + countryCode: "246", + iso: "ISO 3166-2:FI", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "France", + label: { pt: "França", en: "France", fr: "France" }, + slug: "FRA", + name: "France", + alpha3: "FRA", + alpha2: "FR", + countryCode: "250", + iso: "ISO 3166-2:FR", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "French Guiana", + label: { en: "French Guiana" }, + slug: "GUF", + name: "French Guiana", + alpha3: "GUF", + alpha2: "GF", + countryCode: "254", + iso: "ISO 3166-2:GF", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Oceania", + value: "French Polynesia", + label: { en: "French Polynesia" }, + slug: "PYF", + name: "French Polynesia", + alpha3: "PYF", + alpha2: "PF", + countryCode: "258", + iso: "ISO 3166-2:PF", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Africa", + value: "French Southern Territories", + label: { en: "French Southern Territories" }, + slug: "ATF", + name: "French Southern Territories", + alpha3: "ATF", + alpha2: "TF", + countryCode: "260", + iso: "ISO 3166-2:TF", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + continent: "Africa", + value: "Gabon", + label: { pt: "Gabão", en: "Gabon", fr: "Gabon" }, + slug: "GAB", + name: "Gabon", + alpha3: "GAB", + alpha2: "GA", + countryCode: "266", + iso: "ISO 3166-2:GA", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Africa", + continent: "Africa", + value: "Gambia", + label: { pt: "Gâmbia", en: "Gambia", fr: "Gambie" }, + slug: "GMB", + name: "Gambia", + alpha3: "GMB", + alpha2: "GM", + countryCode: "270", + iso: "ISO 3166-2:GM", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Asia", + continent: "Asia", + value: "Georgia", + label: { pt: "Geórgia", en: "Georgia", fr: "Géorgie" }, + slug: "GEO", + name: "Georgia", + alpha3: "GEO", + alpha2: "GE", + countryCode: "268", + iso: "ISO 3166-2:GE", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Germany", + label: { pt: "Alemanha", en: "Germany", fr: "Allemagne" }, + slug: "DEU", + name: "Germany", + alpha3: "DEU", + alpha2: "DE", + countryCode: "276", + iso: "ISO 3166-2:DE", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Ghana", + label: { pt: "Gana", en: "Ghana", fr: "Ghana" }, + slug: "GHA", + name: "Ghana", + alpha3: "GHA", + alpha2: "GH", + countryCode: "288", + iso: "ISO 3166-2:GH", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Europe", + value: "Gibraltar", + label: { en: "Gibraltar" }, + slug: "GIB", + name: "Gibraltar", + alpha3: "GIB", + alpha2: "GI", + countryCode: "292", + iso: "ISO 3166-2:GI", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Greece", + label: { pt: "Grécia", en: "Greece", fr: "Grèce" }, + slug: "GRC", + name: "Greece", + alpha3: "GRC", + alpha2: "GR", + countryCode: "300", + iso: "ISO 3166-2:GR", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Greenland", + label: { en: "Greenland" }, + slug: "GRL", + name: "Greenland", + alpha3: "GRL", + alpha2: "GL", + countryCode: "304", + iso: "ISO 3166-2:GL", + subRegion: "Northern America", + intermediateRegion: "", + regionCode: "019", + subRegionCode: "021", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Grenada", + label: { pt: "Granada", en: "Grenada", fr: "Grenade" }, + slug: "GRD", + name: "Grenada", + alpha3: "GRD", + alpha2: "GD", + countryCode: "308", + iso: "ISO 3166-2:GD", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + value: "Guadeloupe", + label: { en: "Guadeloupe" }, + slug: "GLP", + name: "Guadeloupe", + alpha3: "GLP", + alpha2: "GP", + countryCode: "312", + iso: "ISO 3166-2:GP", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Oceania", + value: "Guam", + label: { en: "Guam" }, + slug: "GUM", + name: "Guam", + alpha3: "GUM", + alpha2: "GU", + countryCode: "316", + iso: "ISO 3166-2:GU", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Guatemala", + label: { pt: "Guatemala", en: "Guatemala", fr: "Guatemala" }, + slug: "GTM", + name: "Guatemala", + alpha3: "GTM", + alpha2: "GT", + countryCode: "320", + iso: "ISO 3166-2:GT", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Europe", + value: "Guernsey", + label: { en: "Guernsey" }, + slug: "GGY", + name: "Guernsey", + alpha3: "GGY", + alpha2: "GG", + countryCode: "831", + iso: "ISO 3166-2:GG", + subRegion: "Northern Europe", + intermediateRegion: "Channel Islands", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "830", + }, + { + region: "Africa", + continent: "Africa", + value: "Guinea", + label: { pt: "Guiné", en: "Guinea", fr: "Guinée" }, + slug: "GIN", + name: "Guinea", + alpha3: "GIN", + alpha2: "GN", + countryCode: "324", + iso: "ISO 3166-2:GN", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Africa", + continent: "Africa", + value: "Guinea-Bissau", + label: { pt: "Guiné-Bissau", en: "Guinea-Bissau", fr: "Guinée-Bissau" }, + slug: "GNB", + name: "Guinea-Bissau", + alpha3: "GNB", + alpha2: "GW", + countryCode: "624", + iso: "ISO 3166-2:GW", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Americas", + continent: "South America", + value: "Guyana", + label: { pt: "Guiana", en: "Guyana", fr: "Guyana" }, + slug: "GUY", + name: "Guyana", + alpha3: "GUY", + alpha2: "GY", + countryCode: "328", + iso: "ISO 3166-2:GY", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Americas", + continent: "North America", + value: "Haiti", + label: { pt: "Haiti", en: "Haiti", fr: "Haïti" }, + slug: "HTI", + name: "Haiti", + alpha3: "HTI", + alpha2: "HT", + countryCode: "332", + iso: "ISO 3166-2:HT", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Oceania", + value: "Heard Island and McDonald Islands", + label: { en: "Heard Island and McDonald Islands" }, + slug: "HMD", + name: "Heard Island and McDonald Islands", + alpha3: "HMD", + alpha2: "HM", + countryCode: "334", + iso: "ISO 3166-2:HM", + subRegion: "Australia and New Zealand", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "053", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Holy See", + label: { en: "Holy See" }, + slug: "VAT", + name: "Holy See", + alpha3: "VAT", + alpha2: "VA", + countryCode: "336", + iso: "ISO 3166-2:VA", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Honduras", + label: { pt: "Honduras", en: "Honduras", fr: "Honduras" }, + slug: "HND", + name: "Honduras", + alpha3: "HND", + alpha2: "HN", + countryCode: "340", + iso: "ISO 3166-2:HN", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Asia", + value: "Hong Kong", + label: { en: "Hong Kong" }, + slug: "HKG", + name: "Hong Kong", + alpha3: "HKG", + alpha2: "HK", + countryCode: "344", + iso: "ISO 3166-2:HK", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Hungary", + label: { pt: "Hungria", en: "Hungary", fr: "Hongrie" }, + slug: "HUN", + name: "Hungary", + alpha3: "HUN", + alpha2: "HU", + countryCode: "348", + iso: "ISO 3166-2:HU", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Iceland", + label: { pt: "Islândia", en: "Iceland", fr: "Islande" }, + slug: "ISL", + name: "Iceland", + alpha3: "ISL", + alpha2: "IS", + countryCode: "352", + iso: "ISO 3166-2:IS", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "India", + label: { pt: "Índia", en: "India", fr: "Inde" }, + slug: "IND", + name: "India", + alpha3: "IND", + alpha2: "IN", + countryCode: "356", + iso: "ISO 3166-2:IN", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Indonesia", + label: { pt: "Indonésia", en: "Indonesia", fr: "Indonésie" }, + slug: "IDN", + name: "Indonesia", + alpha3: "IDN", + alpha2: "ID", + countryCode: "360", + iso: "ISO 3166-2:ID", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Iran (Islamic Republic of)", + label: { en: "Iran (Islamic Republic of)" }, + slug: "IRN", + name: "Iran (Islamic Republic of)", + alpha3: "IRN", + alpha2: "IR", + countryCode: "364", + iso: "ISO 3166-2:IR", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Iraq", + label: { pt: "Iraque", en: "Iraq", fr: "Irak" }, + slug: "IRQ", + name: "Iraq", + alpha3: "IRQ", + alpha2: "IQ", + countryCode: "368", + iso: "ISO 3166-2:IQ", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Ireland", + label: { pt: "Irlanda", en: "Ireland", fr: "Irlande" }, + slug: "IRL", + name: "Ireland", + alpha3: "IRL", + alpha2: "IE", + countryCode: "372", + iso: "ISO 3166-2:IE", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Isle of Man", + label: { en: "Isle of Man" }, + slug: "IMN", + name: "Isle of Man", + alpha3: "IMN", + alpha2: "IM", + countryCode: "833", + iso: "ISO 3166-2:IM", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Israel", + label: { pt: "Israel", en: "Israel", fr: "Israël" }, + slug: "ISR", + name: "Israel", + alpha3: "ISR", + alpha2: "IL", + countryCode: "376", + iso: "ISO 3166-2:IL", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Italy", + label: { pt: "Itália", en: "Italy", fr: "Italie" }, + slug: "ITA", + name: "Italy", + alpha3: "ITA", + alpha2: "IT", + countryCode: "380", + iso: "ISO 3166-2:IT", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Jamaica", + label: { pt: "Jamaica", en: "Jamaica", fr: "Jamaïque" }, + slug: "JAM", + name: "Jamaica", + alpha3: "JAM", + alpha2: "JM", + countryCode: "388", + iso: "ISO 3166-2:JM", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Asia", + continent: "Asia", + value: "Japan", + label: { pt: "Japão", en: "Japan", fr: "Japon" }, + slug: "JPN", + name: "Japan", + alpha3: "JPN", + alpha2: "JP", + countryCode: "392", + iso: "ISO 3166-2:JP", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Jersey", + label: { en: "Jersey" }, + slug: "JEY", + name: "Jersey", + alpha3: "JEY", + alpha2: "JE", + countryCode: "832", + iso: "ISO 3166-2:JE", + subRegion: "Northern Europe", + intermediateRegion: "Channel Islands", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "830", + }, + { + region: "Asia", + continent: "Asia", + value: "Jordan", + label: { pt: "Jordânia", en: "Jordan", fr: "Jordanie" }, + slug: "JOR", + name: "Jordan", + alpha3: "JOR", + alpha2: "JO", + countryCode: "400", + iso: "ISO 3166-2:JO", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Kazakhstan", + label: { pt: "Cazaquistão", en: "Kazakhstan", fr: "Kazakhstan" }, + slug: "KAZ", + name: "Kazakhstan", + alpha3: "KAZ", + alpha2: "KZ", + countryCode: "398", + iso: "ISO 3166-2:KZ", + subRegion: "Central Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "143", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Kenya", + label: { pt: "Quênia", en: "Kenya", fr: "Kenya" }, + slug: "KEN", + name: "Kenya", + alpha3: "KEN", + alpha2: "KE", + countryCode: "404", + iso: "ISO 3166-2:KE", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Kiribati", + label: { pt: "Kiribati", en: "Kiribati", fr: "Kiribati" }, + slug: "KIR", + name: "Kiribati", + alpha3: "KIR", + alpha2: "KI", + countryCode: "296", + iso: "ISO 3166-2:KI", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Korea (Democratic People's Republic of)", + label: { en: "Korea (Democratic People's Republic of)" }, + slug: "PRK", + name: "Korea (Democratic People's Republic of)", + alpha3: "PRK", + alpha2: "KP", + countryCode: "408", + iso: "ISO 3166-2:KP", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Korea, Republic of", + label: { en: "Korea, Republic of" }, + slug: "KOR", + name: "Korea, Republic of", + alpha3: "KOR", + alpha2: "KR", + countryCode: "410", + iso: "ISO 3166-2:KR", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Kuwait", + label: { pt: "Kuwait", en: "Kuwait", fr: "Koweït" }, + slug: "KWT", + name: "Kuwait", + alpha3: "KWT", + alpha2: "KW", + countryCode: "414", + iso: "ISO 3166-2:KW", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Kyrgyzstan", + label: { pt: "Quirguistão", en: "Kyrgyzstan", fr: "Kirghizistan" }, + slug: "KGZ", + name: "Kyrgyzstan", + alpha3: "KGZ", + alpha2: "KG", + countryCode: "417", + iso: "ISO 3166-2:KG", + subRegion: "Central Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "143", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Lao People's Democratic Republic", + label: { en: "Lao People's Democratic Republic" }, + slug: "LAO", + name: "Lao People's Democratic Republic", + alpha3: "LAO", + alpha2: "LA", + countryCode: "418", + iso: "ISO 3166-2:LA", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Latvia", + label: { pt: "Letônia", en: "Latvia", fr: "Lettonie" }, + slug: "LVA", + name: "Latvia", + alpha3: "LVA", + alpha2: "LV", + countryCode: "428", + iso: "ISO 3166-2:LV", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Lebanon", + label: { pt: "Líbano", en: "Lebanon", fr: "Liban" }, + slug: "LBN", + name: "Lebanon", + alpha3: "LBN", + alpha2: "LB", + countryCode: "422", + iso: "ISO 3166-2:LB", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Lesotho", + label: { pt: "Lesoto", en: "Lesotho", fr: "Lesotho" }, + slug: "LSO", + name: "Lesotho", + alpha3: "LSO", + alpha2: "LS", + countryCode: "426", + iso: "ISO 3166-2:LS", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Southern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "018", + }, + { + region: "Africa", + continent: "Africa", + value: "Liberia", + label: { pt: "Libéria", en: "Liberia", fr: "Libéria" }, + slug: "LBR", + name: "Liberia", + alpha3: "LBR", + alpha2: "LR", + countryCode: "430", + iso: "ISO 3166-2:LR", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Africa", + continent: "Africa", + value: "Libya", + label: { pt: "Líbia", en: "Libya", fr: "Libye" }, + slug: "LBY", + name: "Libya", + alpha3: "LBY", + alpha2: "LY", + countryCode: "434", + iso: "ISO 3166-2:LY", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Liechtenstein", + label: { pt: "Liechtenstein", en: "Liechtenstein", fr: "Liechtenstein" }, + slug: "LIE", + name: "Liechtenstein", + alpha3: "LIE", + alpha2: "LI", + countryCode: "438", + iso: "ISO 3166-2:LI", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Lithuania", + label: { pt: "Lituânia", en: "Lithuania", fr: "Lituanie" }, + slug: "LTU", + name: "Lithuania", + alpha3: "LTU", + alpha2: "LT", + countryCode: "440", + iso: "ISO 3166-2:LT", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Luxembourg", + label: { pt: "Luxemburgo", en: "Luxembourg", fr: "Luxembourg" }, + slug: "LUX", + name: "Luxembourg", + alpha3: "LUX", + alpha2: "LU", + countryCode: "442", + iso: "ISO 3166-2:LU", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Macao", + label: { en: "Macao" }, + slug: "MAC", + name: "Macao", + alpha3: "MAC", + alpha2: "MO", + countryCode: "446", + iso: "ISO 3166-2:MO", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Madagascar", + label: { pt: "Madagáscar", en: "Madagascar", fr: "Madagascar" }, + slug: "MDG", + name: "Madagascar", + alpha3: "MDG", + alpha2: "MG", + countryCode: "450", + iso: "ISO 3166-2:MG", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + continent: "Africa", + value: "Malawi", + label: { pt: "Malawi", en: "Malawi", fr: "Malawi" }, + slug: "MWI", + name: "Malawi", + alpha3: "MWI", + alpha2: "MW", + countryCode: "454", + iso: "ISO 3166-2:MW", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Asia", + continent: "Asia", + value: "Malaysia", + label: { pt: "Malásia", en: "Malaysia", fr: "Malaisie" }, + slug: "MYS", + name: "Malaysia", + alpha3: "MYS", + alpha2: "MY", + countryCode: "458", + iso: "ISO 3166-2:MY", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Maldives", + label: { pt: "Maldivas", en: "Maldives", fr: "Maldives" }, + slug: "MDV", + name: "Maldives", + alpha3: "MDV", + alpha2: "MV", + countryCode: "462", + iso: "ISO 3166-2:MV", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Mali", + label: { pt: "Mali", en: "Mali", fr: "Mali" }, + slug: "MLI", + name: "Mali", + alpha3: "MLI", + alpha2: "ML", + countryCode: "466", + iso: "ISO 3166-2:ML", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Europe", + continent: "Europe", + value: "Malta", + label: { pt: "Malta", en: "Malta", fr: "Malte" }, + slug: "MLT", + name: "Malta", + alpha3: "MLT", + alpha2: "MT", + countryCode: "470", + iso: "ISO 3166-2:MT", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Marshall Islands", + label: { + pt: "Ilhas Marshall", + en: "Marshall Islands", + fr: "Îles Marshall", + }, + slug: "MHL", + name: "Marshall Islands", + alpha3: "MHL", + alpha2: "MH", + countryCode: "584", + iso: "ISO 3166-2:MH", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Martinique", + label: { en: "Martinique" }, + slug: "MTQ", + name: "Martinique", + alpha3: "MTQ", + alpha2: "MQ", + countryCode: "474", + iso: "ISO 3166-2:MQ", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Africa", + continent: "Africa", + value: "Mauritania", + label: { pt: "Mauritânia", en: "Mauritania", fr: "Mauritanie" }, + slug: "MRT", + name: "Mauritania", + alpha3: "MRT", + alpha2: "MR", + countryCode: "478", + iso: "ISO 3166-2:MR", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Africa", + continent: "Africa", + value: "Mauritius", + label: { pt: "Maurício", en: "Mauritius", fr: "Maurice" }, + slug: "MUS", + name: "Mauritius", + alpha3: "MUS", + alpha2: "MU", + countryCode: "480", + iso: "ISO 3166-2:MU", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + value: "Mayotte", + label: { en: "Mayotte" }, + slug: "MYT", + name: "Mayotte", + alpha3: "MYT", + alpha2: "YT", + countryCode: "175", + iso: "ISO 3166-2:YT", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Americas", + continent: "North America", + value: "Mexico", + label: { pt: "México", en: "Mexico", fr: "Mexique" }, + slug: "MEX", + name: "Mexico", + alpha3: "MEX", + alpha2: "MX", + countryCode: "484", + iso: "ISO 3166-2:MX", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Oceania", + value: "Micronesia (Federated States of)", + label: { en: "Micronesia (Federated States of)" }, + slug: "FSM", + name: "Micronesia (Federated States of)", + alpha3: "FSM", + alpha2: "FM", + countryCode: "583", + iso: "ISO 3166-2:FM", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Moldova, Republic of", + label: { en: "Moldova, Republic of" }, + slug: "MDA", + name: "Moldova, Republic of", + alpha3: "MDA", + alpha2: "MD", + countryCode: "498", + iso: "ISO 3166-2:MD", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Monaco", + label: { pt: "Mônaco", en: "Monaco", fr: "Monaco" }, + slug: "MCO", + name: "Monaco", + alpha3: "MCO", + alpha2: "MC", + countryCode: "492", + iso: "ISO 3166-2:MC", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Mongolia", + label: { pt: "Mongólia", en: "Mongolia", fr: "Mongolie" }, + slug: "MNG", + name: "Mongolia", + alpha3: "MNG", + alpha2: "MN", + countryCode: "496", + iso: "ISO 3166-2:MN", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Montenegro", + label: { pt: "Montenegro", en: "Montenegro", fr: "Monténégro" }, + slug: "MNE", + name: "Montenegro", + alpha3: "MNE", + alpha2: "ME", + countryCode: "499", + iso: "ISO 3166-2:ME", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Montserrat", + label: { en: "Montserrat" }, + slug: "MSR", + name: "Montserrat", + alpha3: "MSR", + alpha2: "MS", + countryCode: "500", + iso: "ISO 3166-2:MS", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Africa", + continent: "Africa", + value: "Morocco", + label: { pt: "Marrocos", en: "Morocco", fr: "Maroc" }, + slug: "MAR", + name: "Morocco", + alpha3: "MAR", + alpha2: "MA", + countryCode: "504", + iso: "ISO 3166-2:MA", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Mozambique", + label: { pt: "Moçambique", en: "Mozambique", fr: "Mozambique" }, + slug: "MOZ", + name: "Mozambique", + alpha3: "MOZ", + alpha2: "MZ", + countryCode: "508", + iso: "ISO 3166-2:MZ", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Asia", + continent: "Asia", + value: "Myanmar", + label: { pt: "Myanmar", en: "Myanmar", fr: "Myanmar" }, + slug: "MMR", + name: "Myanmar", + alpha3: "MMR", + alpha2: "MM", + countryCode: "104", + iso: "ISO 3166-2:MM", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Namibia", + label: { pt: "Namíbia", en: "Namibia", fr: "Namibie" }, + slug: "NAM", + name: "Namibia", + alpha3: "NAM", + alpha2: "NA", + countryCode: "516", + iso: "ISO 3166-2:NA", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Southern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "018", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Nauru", + label: { pt: "Nauru", en: "Nauru", fr: "Nauru" }, + slug: "NRU", + name: "Nauru", + alpha3: "NRU", + alpha2: "NR", + countryCode: "520", + iso: "ISO 3166-2:NR", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Nepal", + label: { pt: "Nepal", en: "Nepal", fr: "Népal" }, + slug: "NPL", + name: "Nepal", + alpha3: "NPL", + alpha2: "NP", + countryCode: "524", + iso: "ISO 3166-2:NP", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Netherlands", + label: { pt: "Países Baixos", en: "Netherlands", fr: "Pays-Bas" }, + slug: "NLD", + name: "Netherlands", + alpha3: "NLD", + alpha2: "NL", + countryCode: "528", + iso: "ISO 3166-2:NL", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "New Caledonia", + label: { en: "New Caledonia" }, + slug: "NCL", + name: "New Caledonia", + alpha3: "NCL", + alpha2: "NC", + countryCode: "540", + iso: "ISO 3166-2:NC", + subRegion: "Melanesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "054", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "New Zealand", + label: { pt: "Nova Zelândia", en: "New Zealand", fr: "Nouvelle-Zélande" }, + slug: "NZL", + name: "New Zealand", + alpha3: "NZL", + alpha2: "NZ", + countryCode: "554", + iso: "ISO 3166-2:NZ", + subRegion: "Australia and New Zealand", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "053", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Nicaragua", + label: { pt: "Nicarágua", en: "Nicaragua", fr: "Nicaragua" }, + slug: "NIC", + name: "Nicaragua", + alpha3: "NIC", + alpha2: "NI", + countryCode: "558", + iso: "ISO 3166-2:NI", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Africa", + continent: "Africa", + value: "Niger", + label: { pt: "Níger", en: "Niger", fr: "Niger" }, + slug: "NER", + name: "Niger", + alpha3: "NER", + alpha2: "NE", + countryCode: "562", + iso: "ISO 3166-2:NE", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Africa", + continent: "Africa", + value: "Nigeria", + label: { pt: "Nigéria", en: "Nigeria", fr: "Nigeria" }, + slug: "NGA", + name: "Nigeria", + alpha3: "NGA", + alpha2: "NG", + countryCode: "566", + iso: "ISO 3166-2:NG", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Oceania", + value: "Niue", + label: { en: "Niue" }, + slug: "NIU", + name: "Niue", + alpha3: "NIU", + alpha2: "NU", + countryCode: "570", + iso: "ISO 3166-2:NU", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "Norfolk Island", + label: { en: "Norfolk Island" }, + slug: "NFK", + name: "Norfolk Island", + alpha3: "NFK", + alpha2: "NF", + countryCode: "574", + iso: "ISO 3166-2:NF", + subRegion: "Australia and New Zealand", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "053", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "North Macedonia", + label: { + pt: "Macedônia do Norte", + en: "North Macedonia", + fr: "Macédoine du Nord", + }, + slug: "MKD", + name: "North Macedonia", + alpha3: "MKD", + alpha2: "MK", + countryCode: "807", + iso: "ISO 3166-2:MK", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "Northern Mariana Islands", + label: { en: "Northern Mariana Islands" }, + slug: "MNP", + name: "Northern Mariana Islands", + alpha3: "MNP", + alpha2: "MP", + countryCode: "580", + iso: "ISO 3166-2:MP", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Norway", + label: { pt: "Noruega", en: "Norway", fr: "Norvège" }, + slug: "NOR", + name: "Norway", + alpha3: "NOR", + alpha2: "NO", + countryCode: "578", + iso: "ISO 3166-2:NO", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Oman", + label: { pt: "Omã", en: "Oman", fr: "Oman" }, + slug: "OMN", + name: "Oman", + alpha3: "OMN", + alpha2: "OM", + countryCode: "512", + iso: "ISO 3166-2:OM", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Pakistan", + label: { pt: "Paquistão", en: "Pakistan", fr: "Pakistan" }, + slug: "PAK", + name: "Pakistan", + alpha3: "PAK", + alpha2: "PK", + countryCode: "586", + iso: "ISO 3166-2:PK", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Palau", + label: { pt: "Palau", en: "Palau", fr: "Palaos" }, + slug: "PLW", + name: "Palau", + alpha3: "PLW", + alpha2: "PW", + countryCode: "585", + iso: "ISO 3166-2:PW", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Palestine, State of", + label: { en: "Palestine, State of" }, + slug: "PSE", + name: "Palestine, State of", + alpha3: "PSE", + alpha2: "PS", + countryCode: "275", + iso: "ISO 3166-2:PS", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Panama", + label: { pt: "Panamá", en: "Panama", fr: "Panama" }, + slug: "PAN", + name: "Panama", + alpha3: "PAN", + alpha2: "PA", + countryCode: "591", + iso: "ISO 3166-2:PA", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Central America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "013", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Papua New Guinea", + label: { + pt: "Papua-Nova Guiné", + en: "Papua New Guinea", + fr: "Papouasie-Nouvelle-Guinée", + }, + slug: "PNG", + name: "Papua New Guinea", + alpha3: "PNG", + alpha2: "PG", + countryCode: "598", + iso: "ISO 3166-2:PG", + subRegion: "Melanesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "054", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "South America", + value: "Paraguay", + label: { pt: "Paraguai", en: "Paraguay", fr: "Paraguay" }, + slug: "PRY", + name: "Paraguay", + alpha3: "PRY", + alpha2: "PY", + countryCode: "600", + iso: "ISO 3166-2:PY", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Americas", + continent: "South America", + value: "Peru", + label: { pt: "Peru", en: "Peru", fr: "Pérou" }, + slug: "PER", + name: "Peru", + alpha3: "PER", + alpha2: "PE", + countryCode: "604", + iso: "ISO 3166-2:PE", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Asia", + continent: "Asia", + value: "Philippines", + label: { pt: "Filipinas", en: "Philippines", fr: "Philippines" }, + slug: "PHL", + name: "Philippines", + alpha3: "PHL", + alpha2: "PH", + countryCode: "608", + iso: "ISO 3166-2:PH", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "Pitcairn", + label: { en: "Pitcairn" }, + slug: "PCN", + name: "Pitcairn", + alpha3: "PCN", + alpha2: "PN", + countryCode: "612", + iso: "ISO 3166-2:PN", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Poland", + label: { pt: "Polônia", en: "Poland", fr: "Pologne" }, + slug: "POL", + name: "Poland", + alpha3: "POL", + alpha2: "PL", + countryCode: "616", + iso: "ISO 3166-2:PL", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Portugal", + label: { pt: "Portugal", en: "Portugal", fr: "Portugal" }, + slug: "PRT", + name: "Portugal", + alpha3: "PRT", + alpha2: "PT", + countryCode: "620", + iso: "ISO 3166-2:PT", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Puerto Rico", + label: { en: "Puerto Rico" }, + slug: "PRI", + name: "Puerto Rico", + alpha3: "PRI", + alpha2: "PR", + countryCode: "630", + iso: "ISO 3166-2:PR", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Asia", + continent: "Asia", + value: "Qatar", + label: { pt: "Catar", en: "Qatar", fr: "Qatar" }, + slug: "QAT", + name: "Qatar", + alpha3: "QAT", + alpha2: "QA", + countryCode: "634", + iso: "ISO 3166-2:QA", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Africa", + value: "Réunion", + label: { en: "Réunion" }, + slug: "REU", + name: "Réunion", + alpha3: "REU", + alpha2: "RE", + countryCode: "638", + iso: "ISO 3166-2:RE", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Europe", + continent: "Europe", + value: "Romania", + label: { pt: "Romênia", en: "Romania", fr: "Roumanie" }, + slug: "ROU", + name: "Romania", + alpha3: "ROU", + alpha2: "RO", + countryCode: "642", + iso: "ISO 3166-2:RO", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "Russian Federation", + label: { en: "Russian Federation" }, + slug: "RUS", + name: "Russian Federation", + alpha3: "RUS", + alpha2: "RU", + countryCode: "643", + iso: "ISO 3166-2:RU", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Rwanda", + label: { pt: "Ruanda", en: "Rwanda", fr: "Rwanda" }, + slug: "RWA", + name: "Rwanda", + alpha3: "RWA", + alpha2: "RW", + countryCode: "646", + iso: "ISO 3166-2:RW", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Americas", + value: "Saint Barthélemy", + label: { en: "Saint Barthélemy" }, + slug: "BLM", + name: "Saint Barthélemy", + alpha3: "BLM", + alpha2: "BL", + countryCode: "652", + iso: "ISO 3166-2:BL", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Africa", + value: "Saint Helena, Ascension and Tristan da Cunha", + label: { en: "Saint Helena, Ascension and Tristan da Cunha" }, + slug: "SHN", + name: "Saint Helena, Ascension and Tristan da Cunha", + alpha3: "SHN", + alpha2: "SH", + countryCode: "654", + iso: "ISO 3166-2:SH", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Americas", + continent: "North America", + value: "Saint Kitts and Nevis", + label: { + pt: "São Cristóvão e Nevis", + en: "Saint Kitts and Nevis", + fr: "Saint-Christophe-et-Niévès", + }, + slug: "KNA", + name: "Saint Kitts and Nevis", + alpha3: "KNA", + alpha2: "KN", + countryCode: "659", + iso: "ISO 3166-2:KN", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + continent: "North America", + value: "Saint Lucia", + label: { pt: "Santa Lúcia", en: "Saint Lucia", fr: "Sainte-Lucie" }, + slug: "LCA", + name: "Saint Lucia", + alpha3: "LCA", + alpha2: "LC", + countryCode: "662", + iso: "ISO 3166-2:LC", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + value: "Saint Martin (French part)", + label: { en: "Saint Martin (French part)" }, + slug: "MAF", + name: "Saint Martin (French part)", + alpha3: "MAF", + alpha2: "MF", + countryCode: "663", + iso: "ISO 3166-2:MF", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + value: "Saint Pierre and Miquelon", + label: { en: "Saint Pierre and Miquelon" }, + slug: "SPM", + name: "Saint Pierre and Miquelon", + alpha3: "SPM", + alpha2: "PM", + countryCode: "666", + iso: "ISO 3166-2:PM", + subRegion: "Northern America", + intermediateRegion: "", + regionCode: "019", + subRegionCode: "021", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Saint Vincent and the Grenadines", + label: { + pt: "São Vicente e Granadinas", + en: "Saint Vincent and the Grenadines", + fr: "Saint-Vincent-et-les Grenadines", + }, + slug: "VCT", + name: "Saint Vincent and the Grenadines", + alpha3: "VCT", + alpha2: "VC", + countryCode: "670", + iso: "ISO 3166-2:VC", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Samoa", + label: { pt: "Samoa", en: "Samoa", fr: "Samoa" }, + slug: "WSM", + name: "Samoa", + alpha3: "WSM", + alpha2: "WS", + countryCode: "882", + iso: "ISO 3166-2:WS", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "San Marino", + label: { pt: "San Marino", en: "San Marino", fr: "Saint-Marin" }, + slug: "SMR", + name: "San Marino", + alpha3: "SMR", + alpha2: "SM", + countryCode: "674", + iso: "ISO 3166-2:SM", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Sao Tome and Principe", + label: { + pt: "São Tomé e Príncipe", + en: "Sao Tome and Principe", + fr: "Sao Tomé-et-Principe", + }, + slug: "STP", + name: "Sao Tome and Principe", + alpha3: "STP", + alpha2: "ST", + countryCode: "678", + iso: "ISO 3166-2:ST", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Middle Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "017", + }, + { + region: "Asia", + continent: "Asia", + value: "Saudi Arabia", + label: { pt: "Arábia Saudita", en: "Saudi Arabia", fr: "Arabie saoudite" }, + slug: "SAU", + name: "Saudi Arabia", + alpha3: "SAU", + alpha2: "SA", + countryCode: "682", + iso: "ISO 3166-2:SA", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Senegal", + label: { pt: "Senegal", en: "Senegal", fr: "Sénégal" }, + slug: "SEN", + name: "Senegal", + alpha3: "SEN", + alpha2: "SN", + countryCode: "686", + iso: "ISO 3166-2:SN", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Europe", + continent: "Europe", + value: "Serbia", + label: { pt: "Sérvia", en: "Serbia", fr: "Serbie" }, + slug: "SRB", + name: "Serbia", + alpha3: "SRB", + alpha2: "RS", + countryCode: "688", + iso: "ISO 3166-2:RS", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Seychelles", + label: { pt: "Seychelles", en: "Seychelles", fr: "Seychelles" }, + slug: "SYC", + name: "Seychelles", + alpha3: "SYC", + alpha2: "SC", + countryCode: "690", + iso: "ISO 3166-2:SC", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + continent: "Africa", + value: "Sierra Leone", + label: { pt: "Serra Leoa", en: "Sierra Leone", fr: "Sierra Leone" }, + slug: "SLE", + name: "Sierra Leone", + alpha3: "SLE", + alpha2: "SL", + countryCode: "694", + iso: "ISO 3166-2:SL", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Asia", + continent: "Asia", + value: "Singapore", + label: { pt: "Singapura", en: "Singapore", fr: "Singapour" }, + slug: "SGP", + name: "Singapore", + alpha3: "SGP", + alpha2: "SG", + countryCode: "702", + iso: "ISO 3166-2:SG", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Sint Maarten (Dutch part)", + label: { en: "Sint Maarten (Dutch part)" }, + slug: "SXM", + name: "Sint Maarten (Dutch part)", + alpha3: "SXM", + alpha2: "SX", + countryCode: "534", + iso: "ISO 3166-2:SX", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Europe", + continent: "Europe", + value: "Slovakia", + label: { pt: "Eslováquia", en: "Slovakia", fr: "Slovaquie" }, + slug: "SVK", + name: "Slovakia", + alpha3: "SVK", + alpha2: "SK", + countryCode: "703", + iso: "ISO 3166-2:SK", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Slovenia", + label: { pt: "Eslovênia", en: "Slovenia", fr: "Slovénie" }, + slug: "SVN", + name: "Slovenia", + alpha3: "SVN", + alpha2: "SI", + countryCode: "705", + iso: "ISO 3166-2:SI", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Solomon Islands", + label: { pt: "Ilhas Salomão", en: "Solomon Islands", fr: "Îles Salomon" }, + slug: "SLB", + name: "Solomon Islands", + alpha3: "SLB", + alpha2: "SB", + countryCode: "090", + iso: "ISO 3166-2:SB", + subRegion: "Melanesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "054", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Somalia", + label: { pt: "Somália", en: "Somalia", fr: "Somalie" }, + slug: "SOM", + name: "Somalia", + alpha3: "SOM", + alpha2: "SO", + countryCode: "706", + iso: "ISO 3166-2:SO", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + continent: "Africa", + value: "South Africa", + label: { pt: "África do Sul", en: "South Africa", fr: "Afrique du Sud" }, + slug: "ZAF", + name: "South Africa", + alpha3: "ZAF", + alpha2: "ZA", + countryCode: "710", + iso: "ISO 3166-2:ZA", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Southern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "018", + }, + { + region: "Americas", + value: "South Georgia and the South Sandwich Islands", + label: { en: "South Georgia and the South Sandwich Islands" }, + slug: "SGS", + name: "South Georgia and the South Sandwich Islands", + alpha3: "SGS", + alpha2: "GS", + countryCode: "239", + iso: "ISO 3166-2:GS", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Africa", + continent: "Africa", + value: "South Sudan", + label: { pt: "Sudão do Sul", en: "South Sudan", fr: "Soudan du Sud" }, + slug: "SSD", + name: "South Sudan", + alpha3: "SSD", + alpha2: "SS", + countryCode: "728", + iso: "ISO 3166-2:SS", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Europe", + continent: "Europe", + value: "Spain", + label: { pt: "Espanha", en: "Spain", fr: "Espagne" }, + slug: "ESP", + name: "Spain", + alpha3: "ESP", + alpha2: "ES", + countryCode: "724", + iso: "ISO 3166-2:ES", + subRegion: "Southern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "039", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Sri Lanka", + label: { pt: "Sri Lanka", en: "Sri Lanka", fr: "Sri Lanka" }, + slug: "LKA", + name: "Sri Lanka", + alpha3: "LKA", + alpha2: "LK", + countryCode: "144", + iso: "ISO 3166-2:LK", + subRegion: "Southern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "034", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Sudan", + label: { pt: "Sudão", en: "Sudan", fr: "Soudan" }, + slug: "SDN", + name: "Sudan", + alpha3: "SDN", + alpha2: "SD", + countryCode: "729", + iso: "ISO 3166-2:SD", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "South America", + value: "Suriname", + label: { pt: "Suriname", en: "Suriname", fr: "Suriname" }, + slug: "SUR", + name: "Suriname", + alpha3: "SUR", + alpha2: "SR", + countryCode: "740", + iso: "ISO 3166-2:SR", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Europe", + value: "Svalbard and Jan Mayen", + label: { en: "Svalbard and Jan Mayen" }, + slug: "SJM", + name: "Svalbard and Jan Mayen", + alpha3: "SJM", + alpha2: "SJ", + countryCode: "744", + iso: "ISO 3166-2:SJ", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Sweden", + label: { pt: "Suécia", en: "Sweden", fr: "Suède" }, + slug: "SWE", + name: "Sweden", + alpha3: "SWE", + alpha2: "SE", + countryCode: "752", + iso: "ISO 3166-2:SE", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Europe", + continent: "Europe", + value: "Switzerland", + label: { pt: "Suíça", en: "Switzerland", fr: "Suisse" }, + slug: "CHE", + name: "Switzerland", + alpha3: "CHE", + alpha2: "CH", + countryCode: "756", + iso: "ISO 3166-2:CH", + subRegion: "Western Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "155", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Syrian Arab Republic", + label: { en: "Syrian Arab Republic" }, + slug: "SYR", + name: "Syrian Arab Republic", + alpha3: "SYR", + alpha2: "SY", + countryCode: "760", + iso: "ISO 3166-2:SY", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Asia", + value: "Taiwan, Province of China", + label: { en: "Taiwan, Province of China" }, + slug: "TWN", + name: "Taiwan, Province of China", + alpha3: "TWN", + alpha2: "TW", + countryCode: "158", + iso: "ISO 3166-2:TW", + subRegion: "Eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "030", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Tajikistan", + label: { pt: "Tajiquistão", en: "Tajikistan", fr: "Tadjikistan" }, + slug: "TJK", + name: "Tajikistan", + alpha3: "TJK", + alpha2: "TJ", + countryCode: "762", + iso: "ISO 3166-2:TJ", + subRegion: "Central Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "143", + intermediateRegionCode: "", + }, + { + region: "Africa", + value: "Tanzania, United Republic of", + label: { en: "Tanzania, United Republic of" }, + slug: "TZA", + name: "Tanzania, United Republic of", + alpha3: "TZA", + alpha2: "TZ", + countryCode: "834", + iso: "ISO 3166-2:TZ", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Asia", + continent: "Asia", + value: "Thailand", + label: { pt: "Tailândia", en: "Thailand", fr: "Thaïlande" }, + slug: "THA", + name: "Thailand", + alpha3: "THA", + alpha2: "TH", + countryCode: "764", + iso: "ISO 3166-2:TH", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Timor-Leste", + label: { pt: "Timor-Leste", en: "Timor-Leste", fr: "Timor oriental" }, + slug: "TLS", + name: "Timor-Leste", + alpha3: "TLS", + alpha2: "TL", + countryCode: "626", + iso: "ISO 3166-2:TL", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Togo", + label: { pt: "Togo", en: "Togo", fr: "Togo" }, + slug: "TGO", + name: "Togo", + alpha3: "TGO", + alpha2: "TG", + countryCode: "768", + iso: "ISO 3166-2:TG", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Western Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "011", + }, + { + region: "Oceania", + value: "Tokelau", + label: { en: "Tokelau" }, + slug: "TKL", + name: "Tokelau", + alpha3: "TKL", + alpha2: "TK", + countryCode: "772", + iso: "ISO 3166-2:TK", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Tonga", + label: { pt: "Tonga", en: "Tonga", fr: "Tonga" }, + slug: "TON", + name: "Tonga", + alpha3: "TON", + alpha2: "TO", + countryCode: "776", + iso: "ISO 3166-2:TO", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "North America", + value: "Trinidad and Tobago", + label: { + pt: "Trinidad e Tobago", + en: "Trinidad and Tobago", + fr: "Trinidad-et-Tobago", + }, + slug: "TTO", + name: "Trinidad and Tobago", + alpha3: "TTO", + alpha2: "TT", + countryCode: "780", + iso: "ISO 3166-2:TT", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Africa", + continent: "Africa", + value: "Tunisia", + label: { pt: "Tunísia", en: "Tunisia", fr: "Tunisie" }, + slug: "TUN", + name: "Tunisia", + alpha3: "TUN", + alpha2: "TN", + countryCode: "788", + iso: "ISO 3166-2:TN", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Turkey", + label: { pt: "Turquia", en: "Turkey", fr: "Turquie" }, + slug: "TUR", + name: "Turkey", + alpha3: "TUR", + alpha2: "TR", + countryCode: "792", + iso: "ISO 3166-2:TR", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Turkmenistan", + label: { pt: "Turcomenistão", en: "Turkmenistan", fr: "Turkménistan" }, + slug: "TKM", + name: "Turkmenistan", + alpha3: "TKM", + alpha2: "TM", + countryCode: "795", + iso: "ISO 3166-2:TM", + subRegion: "Central Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "143", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Turks and Caicos Islands", + label: { en: "Turks and Caicos Islands" }, + slug: "TCA", + name: "Turks and Caicos Islands", + alpha3: "TCA", + alpha2: "TC", + countryCode: "796", + iso: "ISO 3166-2:TC", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Tuvalu", + label: { pt: "Tuvalu", en: "Tuvalu", fr: "Tuvalu" }, + slug: "TUV", + name: "Tuvalu", + alpha3: "TUV", + alpha2: "TV", + countryCode: "798", + iso: "ISO 3166-2:TV", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Uganda", + label: { pt: "Uganda", en: "Uganda", fr: "Ouganda" }, + slug: "UGA", + name: "Uganda", + alpha3: "UGA", + alpha2: "UG", + countryCode: "800", + iso: "ISO 3166-2:UG", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Europe", + continent: "Europe", + value: "Ukraine", + label: { pt: "Ucrânia", en: "Ukraine", fr: "Ukraine" }, + slug: "UKR", + name: "Ukraine", + alpha3: "UKR", + alpha2: "UA", + countryCode: "804", + iso: "ISO 3166-2:UA", + subRegion: "Eastern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "151", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "United Arab Emirates", + label: { + pt: "Emirados Árabes Unidos", + en: "United Arab Emirates", + fr: "Émirats arabes unis", + }, + slug: "ARE", + name: "United Arab Emirates", + alpha3: "ARE", + alpha2: "AE", + countryCode: "784", + iso: "ISO 3166-2:AE", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Europe", + value: "United Kingdom of Great Britain and Northern Ireland", + label: { en: "United Kingdom of Great Britain and Northern Ireland" }, + slug: "GBR", + name: "United Kingdom of Great Britain and Northern Ireland", + alpha3: "GBR", + alpha2: "GB", + countryCode: "826", + iso: "ISO 3166-2:GB", + subRegion: "Northern Europe", + intermediateRegion: "", + regionCode: "150", + subRegionCode: "154", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "United States of America", + label: { en: "United States of America" }, + slug: "USA", + name: "United States of America", + alpha3: "USA", + alpha2: "US", + countryCode: "840", + iso: "ISO 3166-2:US", + subRegion: "Northern America", + intermediateRegion: "", + regionCode: "019", + subRegionCode: "021", + intermediateRegionCode: "", + }, + { + region: "Oceania", + value: "United States Minor Outlying Islands", + label: { en: "United States Minor Outlying Islands" }, + slug: "UMI", + name: "United States Minor Outlying Islands", + alpha3: "UMI", + alpha2: "UM", + countryCode: "581", + iso: "ISO 3166-2:UM", + subRegion: "Micronesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "057", + intermediateRegionCode: "", + }, + { + region: "Americas", + continent: "South America", + value: "Uruguay", + label: { pt: "Uruguai", en: "Uruguay", fr: "Uruguay" }, + slug: "URY", + name: "Uruguay", + alpha3: "URY", + alpha2: "UY", + countryCode: "858", + iso: "ISO 3166-2:UY", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Asia", + continent: "Asia", + value: "Uzbekistan", + label: { pt: "Uzbequistão", en: "Uzbekistan", fr: "Ouzbékistan" }, + slug: "UZB", + name: "Uzbekistan", + alpha3: "UZB", + alpha2: "UZ", + countryCode: "860", + iso: "ISO 3166-2:UZ", + subRegion: "Central Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "143", + intermediateRegionCode: "", + }, + { + region: "Oceania", + continent: "Oceania", + value: "Vanuatu", + label: { pt: "Vanuatu", en: "Vanuatu", fr: "Vanuatu" }, + slug: "VUT", + name: "Vanuatu", + alpha3: "VUT", + alpha2: "VU", + countryCode: "548", + iso: "ISO 3166-2:VU", + subRegion: "Melanesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "054", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Venezuela (Bolivarian Republic of)", + label: { en: "Venezuela (Bolivarian Republic of)" }, + slug: "VEN", + name: "Venezuela (Bolivarian Republic of)", + alpha3: "VEN", + alpha2: "VE", + countryCode: "862", + iso: "ISO 3166-2:VE", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "South America", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "005", + }, + { + region: "Asia", + value: "Viet Nam", + label: { en: "Viet Nam" }, + slug: "VNM", + name: "Viet Nam", + alpha3: "VNM", + alpha2: "VN", + countryCode: "704", + iso: "ISO 3166-2:VN", + subRegion: "South-eastern Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "035", + intermediateRegionCode: "", + }, + { + region: "Americas", + value: "Virgin Islands (British)", + label: { en: "Virgin Islands (British)" }, + slug: "VGB", + name: "Virgin Islands (British)", + alpha3: "VGB", + alpha2: "VG", + countryCode: "092", + iso: "ISO 3166-2:VG", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Americas", + value: "Virgin Islands (U.S.)", + label: { en: "Virgin Islands (U.S.)" }, + slug: "VIR", + name: "Virgin Islands (U.S.)", + alpha3: "VIR", + alpha2: "VI", + countryCode: "850", + iso: "ISO 3166-2:VI", + subRegion: "Latin America and the Caribbean", + intermediateRegion: "Caribbean", + regionCode: "019", + subRegionCode: "419", + intermediateRegionCode: "029", + }, + { + region: "Oceania", + value: "Wallis and Futuna", + label: { en: "Wallis and Futuna" }, + slug: "WLF", + name: "Wallis and Futuna", + alpha3: "WLF", + alpha2: "WF", + countryCode: "876", + iso: "ISO 3166-2:WF", + subRegion: "Polynesia", + intermediateRegion: "", + regionCode: "009", + subRegionCode: "061", + intermediateRegionCode: "", + }, + { + region: "Africa", + value: "Western Sahara", + label: { en: "Western Sahara" }, + slug: "ESH", + name: "Western Sahara", + alpha3: "ESH", + alpha2: "EH", + countryCode: "732", + iso: "ISO 3166-2:EH", + subRegion: "Northern Africa", + intermediateRegion: "", + regionCode: "002", + subRegionCode: "015", + intermediateRegionCode: "", + }, + { + region: "Asia", + continent: "Asia", + value: "Yemen", + label: { pt: "Iêmen", en: "Yemen", fr: "Yémen" }, + slug: "YEM", + name: "Yemen", + alpha3: "YEM", + alpha2: "YE", + countryCode: "887", + iso: "ISO 3166-2:YE", + subRegion: "Western Asia", + intermediateRegion: "", + regionCode: "142", + subRegionCode: "145", + intermediateRegionCode: "", + }, + { + region: "Africa", + continent: "Africa", + value: "Zambia", + label: { pt: "Zâmbia", en: "Zambia", fr: "Zambie" }, + slug: "ZMB", + name: "Zambia", + alpha3: "ZMB", + alpha2: "ZM", + countryCode: "894", + iso: "ISO 3166-2:ZM", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, + { + region: "Africa", + continent: "Africa", + value: "Zimbabwe", + label: { pt: "Zimbábue", en: "Zimbabwe", fr: "Zimbabwe" }, + slug: "ZWE", + name: "Zimbabwe", + alpha3: "ZWE", + alpha2: "ZW", + countryCode: "716", + iso: "ISO 3166-2:ZW", + subRegion: "Sub-Saharan Africa", + intermediateRegion: "Eastern Africa", + regionCode: "002", + subRegionCode: "202", + intermediateRegionCode: "014", + }, +]; + +export const countriesByContinent = (continent) => { + return countries + .filter((country) => continent === country.continent) + .map((country) => ({ + value: country.alpha3, + label: country.label, + })); +}; + +export const allCountries = countries.map((country) => ({ + value: country.alpha3, + label: country.label, +})); diff --git a/apps/climatemappedafrica/src/lib/data/utils/getMembers.js b/apps/climatemappedafrica/src/lib/data/utils/getMembers.js new file mode 100644 index 000000000..a246143c9 --- /dev/null +++ b/apps/climatemappedafrica/src/lib/data/utils/getMembers.js @@ -0,0 +1,43 @@ +function getQueryFromParams(params) { + const { q } = params; + const fields = ["name", "title", "country"]; + const or = q ? fields.map((f) => ({ [f]: { like: q } })) : []; + + return { + and: [ + { + active: { + equals: true, + }, + }, + { + or, + }, + ], + }; +} + +export async function getMembers(api, params) { + const { page: queryPage = 1 } = params; + const options = { + limit: 18, + page: queryPage, + sort: "name", + where: getQueryFromParams(params), + }; + const { + docs: results, + totalPages, + page, + } = await api.getCollection("members", options); + + return { + results, + pagination: { + count: totalPages, + page, + }, + }; +} + +export default undefined; diff --git a/apps/climatemappedafrica/src/lib/data/utils/index.js b/apps/climatemappedafrica/src/lib/data/utils/index.js new file mode 100644 index 000000000..553889702 --- /dev/null +++ b/apps/climatemappedafrica/src/lib/data/utils/index.js @@ -0,0 +1,7 @@ +export * from "./getMembers"; + +export function imageFromMedia({ alt = null, url = null }) { + return { alt, src: url }; +} + +export default undefined; diff --git a/apps/climatemappedafrica/src/utils/equalsIgnoreCase.js b/apps/climatemappedafrica/src/utils/equalsIgnoreCase.js new file mode 100644 index 000000000..8c048b7fa --- /dev/null +++ b/apps/climatemappedafrica/src/utils/equalsIgnoreCase.js @@ -0,0 +1,5 @@ +function equalsIgnoreCase(a, b) { + return a?.localeCompare(b, undefined, { sensitivity: "accent" }) === 0; +} + +export default equalsIgnoreCase; diff --git a/apps/climatemappedafrica/src/utils/index.js b/apps/climatemappedafrica/src/utils/index.js new file mode 100644 index 000000000..f9cf2df05 --- /dev/null +++ b/apps/climatemappedafrica/src/utils/index.js @@ -0,0 +1,2 @@ +export { default as equalsIgnoreCase } from "./equalsIgnoreCase"; +export { default as slugify } from "./slugify"; From 1bec0222334cac83f87ab89455b8b95cedb5ea81 Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:51:33 +0300 Subject: [PATCH 5/8] Implement Team and Summary components --- .../src/components/AboutTeam/AboutTeam.js | 100 +++++++++++++++ .../components/AboutTeam/AboutTeam.snap.js | 28 +++++ .../components/AboutTeam/AboutTeam.test.js | 28 +++++ .../src/components/AboutTeam/index.js | 3 + .../src/components/AboutTeam/useStyles.js | 19 +++ .../src/components/Card/ActionArea.js | 52 ++++++++ .../src/components/Card/Card.js | 118 ++++++++++++++++++ .../src/components/Card/Card.snap.js | 9 ++ .../src/components/Card/Card.test.js | 18 +++ .../src/components/Card/Content.js | 69 ++++++++++ .../src/components/Card/Media.js | 96 ++++++++++++++ .../src/components/Card/index.js | 3 + .../src/components/Card/useStyles.js | 46 +++++++ .../src/components/Carousel/Carousel.js | 58 +++++++++ .../src/components/Carousel/Carousel.snap.js | 15 +++ .../src/components/Carousel/Carousel.test.js | 25 ++++ .../src/components/Carousel/index.js | 3 + .../src/components/Carousel/useStyles.js | 22 ++++ .../src/components/Header/Header.js | 73 +++++++++++ .../src/components/Header/Header.snap.js | 21 ++++ .../src/components/Header/Header.test.js | 22 ++++ .../src/components/Header/index.js | 3 + .../src/components/Image/Image.js | 19 +++ .../src/components/Image/Image.snap.js | 17 +++ .../src/components/Image/Image.test.js | 23 ++++ .../src/components/Image/index.js | 18 +-- .../src/components/Summary/Summary.js | 82 ++++++++++++ .../src/components/Summary/Summary.snap.js | 73 +++++++++++ .../src/components/Summary/Summary.test.js | 91 ++++++++++++++ .../src/components/Summary/index.js | 3 + .../src/components/Summary/useStyles.js | 32 +++++ 31 files changed, 1172 insertions(+), 17 deletions(-) create mode 100644 apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.js create mode 100644 apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.snap.js create mode 100644 apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.test.js create mode 100644 apps/climatemappedafrica/src/components/AboutTeam/index.js create mode 100644 apps/climatemappedafrica/src/components/AboutTeam/useStyles.js create mode 100644 apps/climatemappedafrica/src/components/Card/ActionArea.js create mode 100644 apps/climatemappedafrica/src/components/Card/Card.js create mode 100644 apps/climatemappedafrica/src/components/Card/Card.snap.js create mode 100644 apps/climatemappedafrica/src/components/Card/Card.test.js create mode 100644 apps/climatemappedafrica/src/components/Card/Content.js create mode 100644 apps/climatemappedafrica/src/components/Card/Media.js create mode 100644 apps/climatemappedafrica/src/components/Card/index.js create mode 100644 apps/climatemappedafrica/src/components/Card/useStyles.js create mode 100644 apps/climatemappedafrica/src/components/Carousel/Carousel.js create mode 100644 apps/climatemappedafrica/src/components/Carousel/Carousel.snap.js create mode 100644 apps/climatemappedafrica/src/components/Carousel/Carousel.test.js create mode 100644 apps/climatemappedafrica/src/components/Carousel/index.js create mode 100644 apps/climatemappedafrica/src/components/Carousel/useStyles.js create mode 100644 apps/climatemappedafrica/src/components/Header/Header.js create mode 100644 apps/climatemappedafrica/src/components/Header/Header.snap.js create mode 100644 apps/climatemappedafrica/src/components/Header/Header.test.js create mode 100644 apps/climatemappedafrica/src/components/Header/index.js create mode 100644 apps/climatemappedafrica/src/components/Image/Image.js create mode 100644 apps/climatemappedafrica/src/components/Image/Image.snap.js create mode 100644 apps/climatemappedafrica/src/components/Image/Image.test.js create mode 100644 apps/climatemappedafrica/src/components/Summary/Summary.js create mode 100644 apps/climatemappedafrica/src/components/Summary/Summary.snap.js create mode 100644 apps/climatemappedafrica/src/components/Summary/Summary.test.js create mode 100644 apps/climatemappedafrica/src/components/Summary/index.js create mode 100644 apps/climatemappedafrica/src/components/Summary/useStyles.js diff --git a/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.js b/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.js new file mode 100644 index 000000000..cfbb83f7e --- /dev/null +++ b/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.js @@ -0,0 +1,100 @@ +import { Box, Grid, Typography, useMediaQuery } from "@mui/material"; +import { useTheme } from "@mui/material/styles"; +import { chunk, uniqueId } from "lodash"; +import PropTypes from "prop-types"; +import React, { useRef } from "react"; + +import Card from "@/climatemappedafrica/components/Card"; +import Carousel from "@/climatemappedafrica/components/Carousel"; +import Section from "@/climatemappedafrica/components/Section"; + +// NOTE(kilemensi) useStyles uses import/definition order to determine how +// classes are ordered. +// see: https://material-ui.com/styles/advanced/#makestyles-withstyles-styled +// eslint-disable-next-line import/order +import useStyles from "./useStyles"; + +const responsive = { + desktop: { + items: 1, + }, + tablet: { + items: 1, + }, +}; + +function AboutTeam({ title, members: membersProp, ...props }) { + const membersCount = membersProp?.length ?? 0; + const classes = useStyles({ ...props, membersCount }); + const theme = useTheme(); + const isMdUp = useMediaQuery(theme.breakpoints.up("md")); + const ref = useRef(); + + if (!membersProp?.length) { + return null; + } + const chunkSize = isMdUp ? 4 : 2; + const members = chunk(membersProp, chunkSize); + const scrollToTeam = () => { + if (ref.current && !isMdUp) { + ref.current.scrollIntoView({ behavior: "smooth" }); + } + }; + return ( + +
+ {title && ( + + {title} + + )} + + {members.map((membersChunks) => ( + + {membersChunks.map((member) => ( + + + + ))} + + ))} + +
+
+ ); +} + +AboutTeam.propTypes = { + title: PropTypes.string, + members: PropTypes.arrayOf( + PropTypes.shape({ + title: PropTypes.string, + }), + ), +}; + +export default AboutTeam; diff --git a/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.snap.js b/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.snap.js new file mode 100644 index 000000000..2278ccbd1 --- /dev/null +++ b/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.snap.js @@ -0,0 +1,28 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders unchanged 1`] = ` +
+
+
+

+ About Team +

+ +
+
+
+`; diff --git a/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.test.js b/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.test.js new file mode 100644 index 000000000..256d0850e --- /dev/null +++ b/apps/climatemappedafrica/src/components/AboutTeam/AboutTeam.test.js @@ -0,0 +1,28 @@ +import { createRender } from "@commons-ui/testing-library"; +import React from "react"; + +import AboutTeam from "."; + +import theme from "@/climatemappedafrica/theme"; + +// eslint-disable-next-line testing-library/render-result-naming-convention +const render = createRender({ theme }); + +const defaultProps = { + title: "About Team", + members: [ + { + alt: "Name", + description: "Name, Country", + image: "/media/member.jpg", + title: "Name", + }, + ], +}; + +describe("", () => { + it("renders unchanged", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/apps/climatemappedafrica/src/components/AboutTeam/index.js b/apps/climatemappedafrica/src/components/AboutTeam/index.js new file mode 100644 index 000000000..91d5419ba --- /dev/null +++ b/apps/climatemappedafrica/src/components/AboutTeam/index.js @@ -0,0 +1,3 @@ +import AboutTeam from "./AboutTeam"; + +export default AboutTeam; diff --git a/apps/climatemappedafrica/src/components/AboutTeam/useStyles.js b/apps/climatemappedafrica/src/components/AboutTeam/useStyles.js new file mode 100644 index 000000000..d073006fb --- /dev/null +++ b/apps/climatemappedafrica/src/components/AboutTeam/useStyles.js @@ -0,0 +1,19 @@ +import makeStyles from "@mui/styles/makeStyles"; + +const useStyles = makeStyles(({ breakpoints, palette }) => ({ + dotList: ({ membersCount }) => ({ + display: membersCount > 2 ? "flex" : "none", + "& button": { + borderColor: "#000", + background: palette.background.paper, + }, + "& .react-multi-carousel-dot--active button": { + borderColor: "#000", + }, + [breakpoints.up("md")]: { + display: membersCount > 4 ? "flex" : "none", + }, + }), +})); + +export default useStyles; diff --git a/apps/climatemappedafrica/src/components/Card/ActionArea.js b/apps/climatemappedafrica/src/components/Card/ActionArea.js new file mode 100644 index 000000000..d6f547012 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/ActionArea.js @@ -0,0 +1,52 @@ +import { Link } from "@commons-ui/next"; +import { CardActionArea } from "@mui/material"; +import makeStyles from "@mui/styles/makeStyles"; +import PropTypes from "prop-types"; +import React from "react"; + +const useStyles = makeStyles(() => ({ + root: {}, + focusHighlight: { + background: "transparent", + }, + focusVisible: {}, +})); + +function ActionArea({ href, children, onClick, ...props }) { + const classes = useStyles(props); + + if (!(href || onClick)) { + return children; + } + return ( + + {children} + + ); +} + +ActionArea.propTypes = { + children: PropTypes.node, + href: PropTypes.string, + onClick: PropTypes.func, +}; + +ActionArea.defaultProps = { + children: undefined, + href: undefined, + onClick: undefined, +}; + +export default ActionArea; diff --git a/apps/climatemappedafrica/src/components/Card/Card.js b/apps/climatemappedafrica/src/components/Card/Card.js new file mode 100644 index 000000000..70ac97701 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/Card.js @@ -0,0 +1,118 @@ +import { Link } from "@commons-ui/next"; +import { Card as MuiCard } from "@mui/material"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import React from "react"; + +import CardActionArea from "./ActionArea"; +import CardContent from "./Content"; +import CardMedia from "./Media"; +import useStyles from "./useStyles"; + +function Card({ + alt, + chart, + children, + className, + ctaText, + description, + descriptionProps, + embed, + href, + image, + imageProps, + linkProps, + media, + mediaProps, + onClick, + title, + titleProps, + variant, + ...props +}) { + const squareMedia = mediaProps?.square; + const classes = useStyles({ ...props, squareMedia }); + const actionAreaProps = { href, onClick }; + const contentProps = { + description, + descriptionProps, + href, + linkProps, + title, + titleProps, + }; + + return ( + + + + + + {href && ctaText && ( + ({ + display: "inline-flex", + marginTop: theme.typography.pxToRem(20), + fontWeight: "bold", + })} + > + {ctaText} + + )} + + ); +} + +Card.propTypes = { + alt: PropTypes.string, + chart: PropTypes.string, + children: PropTypes.node, + className: PropTypes.string, + ctaText: PropTypes.string, + description: PropTypes.string, + descriptionProps: PropTypes.shape({}), + embed: PropTypes.string, + href: PropTypes.string, + image: PropTypes.string, + imageProps: PropTypes.shape({}), + linkProps: PropTypes.shape({}), + media: PropTypes.string, + mediaProps: PropTypes.shape({ + square: PropTypes.bool, + }), + onClick: PropTypes.func, + title: PropTypes.string, + titleProps: PropTypes.shape({}), + variant: PropTypes.oneOf(["image", "embed"]), +}; + +export default Card; diff --git a/apps/climatemappedafrica/src/components/Card/Card.snap.js b/apps/climatemappedafrica/src/components/Card/Card.snap.js new file mode 100644 index 000000000..809758cb6 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/Card.snap.js @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders unchanged 1`] = ` +
+
+
+`; diff --git a/apps/climatemappedafrica/src/components/Card/Card.test.js b/apps/climatemappedafrica/src/components/Card/Card.test.js new file mode 100644 index 000000000..0ce6f5360 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/Card.test.js @@ -0,0 +1,18 @@ +import { createRender } from "@commons-ui/testing-library"; +import React from "react"; + +import Card from "."; + +import theme from "@/climatemappedafrica/theme"; + +// eslint-disable-next-line testing-library/render-result-naming-convention +const render = createRender({ theme }); + +const defaultProps = {}; + +describe("", () => { + it("renders unchanged", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/apps/climatemappedafrica/src/components/Card/Content.js b/apps/climatemappedafrica/src/components/Card/Content.js new file mode 100644 index 000000000..82ba9751e --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/Content.js @@ -0,0 +1,69 @@ +import { RichTypography } from "@commons-ui/core"; +import { CardContent } from "@mui/material"; +import makeStyles from "@mui/styles/makeStyles"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import React from "react"; + +const useStyles = makeStyles(({ typography }) => ({ + root: { + padding: 0, + "&:last-child": { + padding: 0, + }, + }, + title: {}, + description: { + marginTop: typography.pxToRem(20), + }, + link: { + display: "inline-flex", + marginTop: typography.pxToRem(20), + fontWeight: "bold", + }, +})); + +function Content({ + className, + description, + descriptionProps, + title, + titleProps, + href, + ctaText, + linkProps, + ...props +}) { + const classes = useStyles(props); + if (!(title || description || href)) { + return null; + } + + return ( + + + {title} + + + {description} + + + ); +} + +Content.propTypes = { + className: PropTypes.string, + description: PropTypes.string, + descriptionProps: PropTypes.shape({}), + title: PropTypes.string, + titleProps: PropTypes.shape({}), + href: PropTypes.string, + ctaText: PropTypes.string, + linkProps: PropTypes.shape({}), +}; + +export default Content; diff --git a/apps/climatemappedafrica/src/components/Card/Media.js b/apps/climatemappedafrica/src/components/Card/Media.js new file mode 100644 index 000000000..fd48d0659 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/Media.js @@ -0,0 +1,96 @@ +import { RichTypography } from "@commons-ui/core"; +import makeStyles from "@mui/styles/makeStyles"; +import PropTypes from "prop-types"; +import React from "react"; + +import Image from "@/climatemappedafrica/components/Image"; + +const useStyles = makeStyles(({ breakpoints, typography }) => ({ + root: ({ square, variant }) => { + let embedStyles; + if (variant === "embed") { + embedStyles = { + // will most likely be an iframe + "& > :first-child": { + position: "absolute", + width: "100%", + height: "100%", + left: 0, + top: 0, + }, + }; + } + return { + minWidth: typography.pxToRem(square ? 278 : 350), + position: "relative", + width: "100%", + [breakpoints.up("md")]: { + height: typography.pxToRem(square ? 278 : 183), + minWidth: typography.pxToRem(square ? 278 : 296), + width: "auto", + }, + [breakpoints.up("lg")]: { + height: typography.pxToRem(square ? 278 : 233), + minWidth: typography.pxToRem(square ? 278 : 376), + }, + "&:after": { + content: '""', + display: "block", + // square ? 278/278 ratio : 350/216 ratio + paddingTop: square ? "100%" : "61.714%", + [breakpoints.up("md")]: { + content: "", + display: "none", + }, + }, + ...embedStyles, + }; + }, + image: { + objectFit: "contain !important", + }, +})); + +function Media({ + alt, + chart, + embed, + image, + imageProps, + media: mediaProp, + ...props +}) { + const classes = useStyles(props); + const { variant } = props; + const media = (variant === "embed" ? chart || embed : image) || mediaProp; + + if (!media) { + return null; + } + if (variant === "embed") { + return {media}; + } + return ( +
+ {alt} +
+ ); +} + +Media.propTypes = { + alt: PropTypes.string, + chart: PropTypes.node, + embed: PropTypes.node, + image: PropTypes.node, + imageProps: PropTypes.shape({}), + media: PropTypes.node, + variant: PropTypes.string, +}; + +export default Media; diff --git a/apps/climatemappedafrica/src/components/Card/index.js b/apps/climatemappedafrica/src/components/Card/index.js new file mode 100644 index 000000000..dfbd83626 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/index.js @@ -0,0 +1,3 @@ +import Card from "./Card"; + +export default Card; diff --git a/apps/climatemappedafrica/src/components/Card/useStyles.js b/apps/climatemappedafrica/src/components/Card/useStyles.js new file mode 100644 index 000000000..0910736eb --- /dev/null +++ b/apps/climatemappedafrica/src/components/Card/useStyles.js @@ -0,0 +1,46 @@ +import makeStyles from "@mui/styles/makeStyles"; + +const useStyles = makeStyles(({ breakpoints, typography }) => ({ + root: ({ squareMedia }) => ({ + backgroundColor: "inherit", + boxShadow: "none", + borderRadius: 0, + padding: squareMedia ? `0 ${typography.pxToRem(36)}` : 0, + minWidth: typography.pxToRem(350), + width: "100%", + [breakpoints.up("md")]: { + padding: 0, + minWidth: "unset", + width: typography.pxToRem(squareMedia ? 278 : 296), + }, + [breakpoints.up("lg")]: { + width: typography.pxToRem(squareMedia ? 278 : 376), + }, + }), + actionArea: {}, + actionAreaFocusHighlight: {}, + actionAreaFocusVisible: {}, + content: {}, + contentDescription: { + overflow: "hidden", + display: "-webkit-box", + WebkitLineClamp: 3, + WebkitBoxOrient: "vertical", + textOverflow: "ellipsis", + }, + contentLink: {}, + contentTitle: ({ squareMedia }) => ({ + marginTop: typography.pxToRem(squareMedia ? 20 : 40), + overflow: "hidden", + display: "-webkit-box", + WebkitLineClamp: 2, + WebkitBoxOrient: "vertical", + textOverflow: "ellipsis", + }), + media: {}, + mediaImage: { + objectFit: "contain !important", + }, +})); + +export default useStyles; diff --git a/apps/climatemappedafrica/src/components/Carousel/Carousel.js b/apps/climatemappedafrica/src/components/Carousel/Carousel.js new file mode 100644 index 000000000..a1f63ea04 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Carousel/Carousel.js @@ -0,0 +1,58 @@ +import { deepmerge } from "@mui/utils"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import React from "react"; +import RMCarousel from "react-multi-carousel"; + +import useStyles from "./useStyles"; + +import "react-multi-carousel/lib/styles.css"; + +const DEFAULT_RESPONSIVE = { + desktop: { + breakpoint: { + max: 3000, + min: 1280, + }, + items: 3, + }, + tablet: { + breakpoint: { max: 1279, min: 768 }, + items: 2, + }, + mobile: { + breakpoint: { max: 767, min: 0 }, + items: 1, + }, +}; + +const Carousel = React.forwardRef(function Carousel(props, ref) { + const { children, className, responsive, ...other } = props; + const classes = useStyles(other); + + return ( + + {children} + + ); +}); + +Carousel.propTypes = { + children: PropTypes.node, + className: PropTypes.node, + responsive: PropTypes.shape({}), +}; + +export default Carousel; diff --git a/apps/climatemappedafrica/src/components/Carousel/Carousel.snap.js b/apps/climatemappedafrica/src/components/Carousel/Carousel.snap.js new file mode 100644 index 000000000..e605e4acd --- /dev/null +++ b/apps/climatemappedafrica/src/components/Carousel/Carousel.snap.js @@ -0,0 +1,15 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders unchanged 1`] = ` +
+ +
+`; diff --git a/apps/climatemappedafrica/src/components/Carousel/Carousel.test.js b/apps/climatemappedafrica/src/components/Carousel/Carousel.test.js new file mode 100644 index 000000000..95a811214 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Carousel/Carousel.test.js @@ -0,0 +1,25 @@ +import { createRender } from "@commons-ui/testing-library"; +import React from "react"; + +import Carousel from "."; + +import theme from "@/climatemappedafrica/theme"; + +// eslint-disable-next-line testing-library/render-result-naming-convention +const render = createRender({ theme }); + +const defaultProps = { + children: ( + <> +
1
+
2
+ + ), +}; + +describe("", () => { + it("renders unchanged", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/apps/climatemappedafrica/src/components/Carousel/index.js b/apps/climatemappedafrica/src/components/Carousel/index.js new file mode 100644 index 000000000..7d6c38c7e --- /dev/null +++ b/apps/climatemappedafrica/src/components/Carousel/index.js @@ -0,0 +1,3 @@ +import Carousel from "./Carousel"; + +export default Carousel; diff --git a/apps/climatemappedafrica/src/components/Carousel/useStyles.js b/apps/climatemappedafrica/src/components/Carousel/useStyles.js new file mode 100644 index 000000000..1a22978d4 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Carousel/useStyles.js @@ -0,0 +1,22 @@ +import makeStyles from "@mui/styles/makeStyles"; + +const useStyles = makeStyles(({ palette, typography }) => ({ + root: {}, + dotList: { + margin: `0 ${typography.pxToRem(30)}`, + paddingTop: `${typography.pxToRem(40)}`, + position: "unset", + "& button": { + borderColor: palette.divider, + height: typography.pxToRem(16), + marginRight: typography.pxToRem(12), + width: typography.pxToRem(16), + }, + "& .react-multi-carousel-dot--active button": { + borderColor: "#A0A0A0", + background: "#000", + }, + }, +})); + +export default useStyles; diff --git a/apps/climatemappedafrica/src/components/Header/Header.js b/apps/climatemappedafrica/src/components/Header/Header.js new file mode 100644 index 000000000..e33facdda --- /dev/null +++ b/apps/climatemappedafrica/src/components/Header/Header.js @@ -0,0 +1,73 @@ +import { RichTypography } from "@commons-ui/core"; +import { Box } from "@mui/material"; +import PropTypes from "prop-types"; +import React from "react"; + +const Header = React.forwardRef(function Header(props, ref) { + const { + OverlineProps, + SubtitleProps, + TitleProps, + children, + overline, + subtitle, + sx, + ...others + } = props; + + return ( + + + {overline} + + + {children} + + + {subtitle} + + + ); +}); + +Header.propTypes = { + className: PropTypes.string, + overline: PropTypes.string, + subtitle: PropTypes.string, +}; + +export default Header; diff --git a/apps/climatemappedafrica/src/components/Header/Header.snap.js b/apps/climatemappedafrica/src/components/Header/Header.snap.js new file mode 100644 index 000000000..5dcbac166 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Header/Header.snap.js @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`
renders unchanged 1`] = ` +
+
Highlight" + > +
+ Overline +
+
+ A short paragraph to describe what the header is all about. +
+
+
+`; diff --git a/apps/climatemappedafrica/src/components/Header/Header.test.js b/apps/climatemappedafrica/src/components/Header/Header.test.js new file mode 100644 index 000000000..e7211e085 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Header/Header.test.js @@ -0,0 +1,22 @@ +import { createRender } from "@commons-ui/testing-library"; +import React from "react"; + +import Header from "."; + +import theme from "@/climatemappedafrica/theme"; + +// eslint-disable-next-line testing-library/render-result-naming-convention +const render = createRender({ theme }); + +const defaultProps = { + overline: "Overline", + title: 'Title with Highlight', + subtitle: "A short paragraph to describe what the header is all about.", +}; + +describe("
", () => { + it("renders unchanged", () => { + const { container } = render(
); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/apps/climatemappedafrica/src/components/Header/index.js b/apps/climatemappedafrica/src/components/Header/index.js new file mode 100644 index 000000000..0d87fe129 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Header/index.js @@ -0,0 +1,3 @@ +import Header from "./Header"; + +export default Header; diff --git a/apps/climatemappedafrica/src/components/Image/Image.js b/apps/climatemappedafrica/src/components/Image/Image.js new file mode 100644 index 000000000..af4a306df --- /dev/null +++ b/apps/climatemappedafrica/src/components/Image/Image.js @@ -0,0 +1,19 @@ +import NImage from "next/image"; +import PropTypes from "prop-types"; +import React from "react"; + +function Image({ placeholder: placeholderProp, src, ...props }) { + if (!src) { + return null; + } + const hasBlurData = !!src?.blurDataURL; + const placeholder = placeholderProp || hasBlurData ? "blur" : undefined; + return ; +} + +Image.propTypes = { + placeholder: PropTypes.string, + src: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.string]), +}; + +export default Image; diff --git a/apps/climatemappedafrica/src/components/Image/Image.snap.js b/apps/climatemappedafrica/src/components/Image/Image.snap.js new file mode 100644 index 000000000..cddd43069 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Image/Image.snap.js @@ -0,0 +1,17 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders unchanged 1`] = ` +
+ Image +
+`; diff --git a/apps/climatemappedafrica/src/components/Image/Image.test.js b/apps/climatemappedafrica/src/components/Image/Image.test.js new file mode 100644 index 000000000..ba63e3076 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Image/Image.test.js @@ -0,0 +1,23 @@ +import { createRender } from "@commons-ui/testing-library"; +import React from "react"; + +import Image from "."; + +import theme from "@/climatemappedafrica/theme"; + +// eslint-disable-next-line testing-library/render-result-naming-convention +const render = createRender({ theme }); + +const defaultProps = { + alt: "Image", + height: 100, + src: "/image.jpg", + width: 100, +}; + +describe("", () => { + it("renders unchanged", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/apps/climatemappedafrica/src/components/Image/index.js b/apps/climatemappedafrica/src/components/Image/index.js index af4a306df..8954dae57 100644 --- a/apps/climatemappedafrica/src/components/Image/index.js +++ b/apps/climatemappedafrica/src/components/Image/index.js @@ -1,19 +1,3 @@ -import NImage from "next/image"; -import PropTypes from "prop-types"; -import React from "react"; - -function Image({ placeholder: placeholderProp, src, ...props }) { - if (!src) { - return null; - } - const hasBlurData = !!src?.blurDataURL; - const placeholder = placeholderProp || hasBlurData ? "blur" : undefined; - return ; -} - -Image.propTypes = { - placeholder: PropTypes.string, - src: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.string]), -}; +import Image from "./Image"; export default Image; diff --git a/apps/climatemappedafrica/src/components/Summary/Summary.js b/apps/climatemappedafrica/src/components/Summary/Summary.js new file mode 100644 index 000000000..ef260f81f --- /dev/null +++ b/apps/climatemappedafrica/src/components/Summary/Summary.js @@ -0,0 +1,82 @@ +import { RichText } from "@commons-ui/payload"; +import { Box, Grid, Typography } from "@mui/material"; +import PropTypes from "prop-types"; +import React from "react"; + +import useStyles from "./useStyles"; + +import Section from "@/climatemappedafrica/components/Section"; + +const Summary = React.forwardRef(function Summary(props, ref) { + const { content, title, subtitle } = props; + const classes = useStyles(props); + + if (!content) { + return null; + } + return ( + +
+ + + + {title} + + + {subtitle} + + + + p": { + mb: 4, + }, + "&>p:last-of-type": { + mb: 0, + }, + }} + > + {content} + + + +
+
+ ); +}); + +Summary.propTypes = { + content: PropTypes.arrayOf(PropTypes.shape({})), + subtitle: PropTypes.string, + title: PropTypes.string, +}; + +export default Summary; diff --git a/apps/climatemappedafrica/src/components/Summary/Summary.snap.js b/apps/climatemappedafrica/src/components/Summary/Summary.snap.js new file mode 100644 index 000000000..b53fa421b --- /dev/null +++ b/apps/climatemappedafrica/src/components/Summary/Summary.snap.js @@ -0,0 +1,73 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders unchanged 1`] = ` +
+
+
+
+
+

+ History +

+
+ The PesaYetu data portal was built as part of the ‘Our County: Our Responsibility’ project, which started back in 2019. +
+
+
+
+

+ The project was focused on helping journalists at Kenyan community-based radio stations adopt data-driven digital journalism tools and techniques to improve their evidence-driven analysis and multimedia reporting on development issues. The data portal was built to help them explore, visualise and interpret development data that impacted their own communities. +

+

+

+ The initial project involved 14 community radio stations in eight Kenyan counties. The selected community radios are all an integral part of their local communities and broadcast not only in English and Kiswahili but also in various local languages (such as Kitaita, Borana, Samburu and Meru). +

+

+

+ Their listeners are mainly marginalised groups in Kenyan society and the poor rural population. The ‘Our County: Our Responsibility’ project was a partnership between + + Code for Africa + + , + + KCOMNET + + and + + CAMECO + + , with support from the German Cooperation. +

+
+
+
+
+
+
+`; diff --git a/apps/climatemappedafrica/src/components/Summary/Summary.test.js b/apps/climatemappedafrica/src/components/Summary/Summary.test.js new file mode 100644 index 000000000..180b9d7e7 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Summary/Summary.test.js @@ -0,0 +1,91 @@ +import { createRender } from "@commons-ui/testing-library"; +import React from "react"; + +import Summary from "."; + +import theme from "@/climatemappedafrica/theme"; + +// eslint-disable-next-line testing-library/render-result-naming-convention +const render = createRender({ theme }); + +const defaultProps = { + title: "History", + subtitle: + "The PesaYetu data portal was built as part of the ‘Our County: Our Responsibility’ project, which started back in 2019.", + content: [ + { + children: [ + { + text: "The project was focused on helping journalists at Kenyan community-based radio stations adopt data-driven digital journalism tools and techniques to improve their evidence-driven analysis and multimedia reporting on development issues. The data portal was built to help them explore, visualise and interpret development data that impacted their own communities.", + children: null, + }, + ], + }, + { + children: [ + { + text: "", + children: null, + }, + ], + }, + { + children: [ + { + text: "The initial project involved 14 community radio stations in eight Kenyan counties. The selected community radios are all an integral part of their local communities and broadcast not only in English and Kiswahili but also in various local languages (such as Kitaita, Borana, Samburu and Meru).", + children: null, + }, + ], + }, + { + children: [ + { + text: "", + children: null, + }, + ], + }, + { + children: [ + { + text: "Their listeners are mainly marginalised groups in Kenyan society and the poor rural population. The ‘Our County: Our Responsibility’ project was a partnership between ", + children: null, + }, + { + text: "Code for Africa", + bold: true, + children: null, + }, + { + text: ", ", + children: null, + }, + { + text: "KCOMNET", + bold: true, + children: null, + }, + { + text: " and ", + children: null, + }, + { + text: "CAMECO", + bold: true, + children: null, + }, + { + text: ", with support from the German Cooperation.", + children: null, + }, + ], + }, + ], +}; + +describe("", () => { + it("renders unchanged", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/apps/climatemappedafrica/src/components/Summary/index.js b/apps/climatemappedafrica/src/components/Summary/index.js new file mode 100644 index 000000000..747472889 --- /dev/null +++ b/apps/climatemappedafrica/src/components/Summary/index.js @@ -0,0 +1,3 @@ +import Summary from "./Summary"; + +export default Summary; diff --git a/apps/climatemappedafrica/src/components/Summary/useStyles.js b/apps/climatemappedafrica/src/components/Summary/useStyles.js new file mode 100644 index 000000000..1baeebdbe --- /dev/null +++ b/apps/climatemappedafrica/src/components/Summary/useStyles.js @@ -0,0 +1,32 @@ +import makeStyles from "@mui/styles/makeStyles"; + +const useStyles = makeStyles(({ typography, breakpoints }) => ({ + section: { + paddingBottom: typography.pxToRem(80), + paddingTop: typography.pxToRem(80), + }, + container: { + [breakpoints.up("md")]: { + margin: typography.pxToRem(0), + }, + "& p": { + paddingBottom: typography.pxToRem(24), + marginTop: 0, + }, + "& img": { + width: "100%", + maxWidth: "100%", + objectFit: "contain", + height: "auto", + }, + "& .wp-block-image": { + width: "100%", + maxWidth: "100%", + margin: 0, + marginTop: typography.pxToRem(20), + marginBottom: typography.pxToRem(20), + }, + }, +})); + +export default useStyles; From 22b874a67b71259e2deea3e0263e9186463203d7 Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:52:00 +0300 Subject: [PATCH 6/8] Load and show Team and Summary blocks on FE pages --- apps/climatemappedafrica/payload.config.ts | 29 ++++++++++---- .../src/pages/[[...slug]].js | 38 ++++++++++++++++++- 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/apps/climatemappedafrica/payload.config.ts b/apps/climatemappedafrica/payload.config.ts index 91c734b5a..14790608c 100644 --- a/apps/climatemappedafrica/payload.config.ts +++ b/apps/climatemappedafrica/payload.config.ts @@ -12,6 +12,7 @@ import { sentry } from "@payloadcms/plugin-sentry"; import { defaultLocale, locales } from "./src/payload/utils/locales"; import Media from "./src/payload/collections/Media"; +import Members from "./src/payload/collections/Members"; import Pages from "./src/payload/collections/Pages"; import Users from "./src/payload/collections/Users"; @@ -53,16 +54,26 @@ export default buildConfig({ url: process.env.MONGO_URL, migrationDir: process.env.MIGRATIONS_DIR, }), - collections: [Media, Pages, Users] as CollectionConfig[], + // the order here is the order that appears in the admin dashobard + // we wnat publication to be first, then project, and lastly settings + collections: [ + // Publication + Media, + Pages, + // Project + Members, + // Settings + Users, + ] as CollectionConfig[], globals: [Site] as GlobalConfig[], ...(locales?.length ? { - localization: { - locales, - defaultLocale, - fallback: true, - }, - } + localization: { + locales, + defaultLocale, + fallback: true, + }, + } : undefined), admin: { webpack: (config) => ({ @@ -86,7 +97,7 @@ export default buildConfig({ debug: false, // default resources: { en: { - "codeforafrica.validation": { + "climatemappedafrica.validation": { uniquePlatforms: "Please select a unique platform", }, }, @@ -97,6 +108,8 @@ export default buildConfig({ collections: { media: { adapter, + // TODO(kilemensi): Toogle this depending on ENV? + disableLocalStorage: false, prefix: "media", }, }, diff --git a/apps/climatemappedafrica/src/pages/[[...slug]].js b/apps/climatemappedafrica/src/pages/[[...slug]].js index 0cd7f4d68..566308264 100644 --- a/apps/climatemappedafrica/src/pages/[[...slug]].js +++ b/apps/climatemappedafrica/src/pages/[[...slug]].js @@ -1,10 +1,44 @@ +import React from "react"; +import { SWRConfig } from "swr"; + +import AboutTeam from "@/climatemappedafrica/components/AboutTeam"; import Page from "@/climatemappedafrica/components/Page"; +import Summary from "@/climatemappedafrica/components/Summary"; import { getPageServerSideProps } from "@/climatemappedafrica/lib/data"; -export default function Index(props) { - return ; +const componentsBySlugs = { + summary: Summary, + team: AboutTeam, +}; + +function Index({ blocks, fallback, ...props }) { + if (!blocks?.length) { + return null; + } + + let PageConfig = React.Fragment; + let pageConfigProps; + if (fallback) { + PageConfig = SWRConfig; + pageConfigProps = { value: { fallback } }; + } + return ( + + + {blocks.map((block) => { + const Component = componentsBySlugs[block.slug]; + if (!Component) { + return null; + } + return ; + })} + + + ); } export async function getServerSideProps(context) { return getPageServerSideProps(context); } + +export default Index; From f837b0201149dc8d4efca6723d93d18a0257695e Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 08:58:14 +0300 Subject: [PATCH 7/8] Improve lint/clean up --- apps/climatemappedafrica/.eslintrc.js | 7 +++++ .../eslint.webpack.config.js | 26 +++++++++++++++++++ apps/climatemappedafrica/package.json | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 apps/climatemappedafrica/eslint.webpack.config.js diff --git a/apps/climatemappedafrica/.eslintrc.js b/apps/climatemappedafrica/.eslintrc.js index c867daf1b..468a5ff74 100644 --- a/apps/climatemappedafrica/.eslintrc.js +++ b/apps/climatemappedafrica/.eslintrc.js @@ -1,4 +1,11 @@ module.exports = { root: true, extends: ["eslint-config-commons-ui/next"], + settings: { + "import/resolver": { + webpack: { + config: "./eslint.webpack.config.js", + }, + }, + }, }; diff --git a/apps/climatemappedafrica/eslint.webpack.config.js b/apps/climatemappedafrica/eslint.webpack.config.js new file mode 100644 index 000000000..4242830fc --- /dev/null +++ b/apps/climatemappedafrica/eslint.webpack.config.js @@ -0,0 +1,26 @@ +const path = require("path"); + +module.exports = { + module: { + rules: [ + { + test: /\.svg$/i, + type: "asset", + resourceQuery: /url/, // *.svg?url + }, + { + test: /\.svg$/i, + issuer: /\.[jt]sx?$/, + resourceQuery: { not: [/url/] }, // exclude react component if *.svg?url + use: ["@svgr/webpack"], + }, + ], + }, + resolve: { + alias: { + "@/climatemappedafrica": path.resolve(__dirname, "src/"), + content: path.resolve(__dirname, "content/"), + }, + extensions: [".js"], + }, +}; diff --git a/apps/climatemappedafrica/package.json b/apps/climatemappedafrica/package.json index 0cd6ee70c..e8306b32e 100644 --- a/apps/climatemappedafrica/package.json +++ b/apps/climatemappedafrica/package.json @@ -30,7 +30,7 @@ "lint": "TIMING=1 eslint --fix './'", "jest": "jest", "playwright": "npx playwright test", - "clean": "rm -rf .next .turbo node_modules" + "clean": "rm -rf .next .turbo build dist node_modules" }, "dependencies": { "@apollo/client": "catalog:", From 0b8453a0a4e7c3a490b009e15c3a2a227c61a200 Mon Sep 17 00:00:00 2001 From: Clemence Kyara Date: Mon, 14 Oct 2024 09:19:31 +0300 Subject: [PATCH 8/8] Lint and format --- apps/climatemappedafrica/payload.config.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/climatemappedafrica/payload.config.ts b/apps/climatemappedafrica/payload.config.ts index 14790608c..9f7505efe 100644 --- a/apps/climatemappedafrica/payload.config.ts +++ b/apps/climatemappedafrica/payload.config.ts @@ -68,12 +68,12 @@ export default buildConfig({ globals: [Site] as GlobalConfig[], ...(locales?.length ? { - localization: { - locales, - defaultLocale, - fallback: true, - }, - } + localization: { + locales, + defaultLocale, + fallback: true, + }, + } : undefined), admin: { webpack: (config) => ({