Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ Check out [the playground](https://countries.trevorblades.com) to explore the sc

The `countries`, `continents`, and `languages` top-level `Query` fields accept an optional `filter` argument that causes results to be filtered on one or more subfields. The `continents` and `languages` fields can be filtered by their `code`, while `countries` can be filtered by `code`, `currency`, or `continent`.

> Note: The `continent` filter on the `Query.countries` field must be the continent code, i.e. "SA" for South America.
> Note: The `continent` filter on the `Query.countries` field must be a child property called `code`, i.e. `{ continent: { code: { eq: "SA" } } }` for South America.

The filtering logic is powered by [sift](https://github.com/crcn/sift.js) and this API supports the following operators: `eq`, `ne`, `in`, `nin`, and `regex`. To learn more about these operators and how they work, check out [the sift docs](https://github.com/crcn/sift.js#supported-operators).

Expand Down
22 changes: 22 additions & 0 deletions src/graphql.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,25 @@ it('returns data about country subdivisions', async () => {

expect(result.data?.country.subdivisions).toHaveLength(4)
})

it('filters countries by continent code', async () => {
const result = await executor({
document: ListFilteredCountriesQuery,
variables: {
filter: {
continent: {
code: {
eq: 'AF',
},
},
},
},
})

assertSingleValue(result)

const afCountries = Object.values(countries).filter(
(c) => c.continent === 'AF',
)
expect(result.data?.countries).toHaveLength(afCountries.length)
})
34 changes: 17 additions & 17 deletions src/locales.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import { registerLocale } from "i18n-iso-countries";
import de from "i18n-iso-countries/langs/de.json";
import en from "i18n-iso-countries/langs/en.json";
import es from "i18n-iso-countries/langs/es.json";
import fa from "i18n-iso-countries/langs/fa.json";
import fr from "i18n-iso-countries/langs/fr.json";
import it from "i18n-iso-countries/langs/it.json";
import ja from "i18n-iso-countries/langs/ja.json";
import nl from "i18n-iso-countries/langs/nl.json";
import pl from "i18n-iso-countries/langs/pl.json";
import pt from "i18n-iso-countries/langs/pt.json";
import ru from "i18n-iso-countries/langs/ru.json";
import tr from "i18n-iso-countries/langs/tr.json";
import vi from "i18n-iso-countries/langs/vi.json";
import zh from "i18n-iso-countries/langs/zh.json";
import { registerLocale } from 'i18n-iso-countries'
import de from 'i18n-iso-countries/langs/de.json'
import en from 'i18n-iso-countries/langs/en.json'
import es from 'i18n-iso-countries/langs/es.json'
import fa from 'i18n-iso-countries/langs/fa.json'
import fr from 'i18n-iso-countries/langs/fr.json'
import it from 'i18n-iso-countries/langs/it.json'
import ja from 'i18n-iso-countries/langs/ja.json'
import nl from 'i18n-iso-countries/langs/nl.json'
import pl from 'i18n-iso-countries/langs/pl.json'
import pt from 'i18n-iso-countries/langs/pt.json'
import ru from 'i18n-iso-countries/langs/ru.json'
import tr from 'i18n-iso-countries/langs/tr.json'
import vi from 'i18n-iso-countries/langs/vi.json'
import zh from 'i18n-iso-countries/langs/zh.json'

/**
* Languages with > 1% estimated usage on the internet
*
* @see {@link https://en.wikipedia.org/wiki/Languages_used_on_the_Internet#Content_languages_for_websites}
*/

const locales = [en, ru, es, fr, de, ja, tr, pt, fa, it, zh, nl, pl, vi];
const locales = [en, ru, es, fr, de, ja, tr, pt, fa, it, zh, nl, pl, vi]

for (const locale of locales) {
registerLocale(locale);
registerLocale(locale)
}
Loading