From 6a0c5263bba435b3ab3a8cda335ceadf7cdd4664 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 8 Nov 2021 16:51:23 +0100 Subject: anastasis-webui: ui tweaks --- packages/anastasis-core/src/index.ts | 41 ++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'packages/anastasis-core') diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts index 3be0d7b76..f88e6e8bc 100644 --- a/packages/anastasis-core/src/index.ts +++ b/packages/anastasis-core/src/index.ts @@ -109,13 +109,23 @@ export * from "./challenge-feedback-types.js"; const logger = new Logger("anastasis-core:index.ts"); -function getContinents(): ContinentInfo[] { +function getContinents( + opts: { requireProvider?: boolean } = {}, +): ContinentInfo[] { + const currenciesWithProvider = new Set(); + anastasisData.providersList.anastasis_provider.forEach((x) => { + currenciesWithProvider.add(x.currency); + }); const continentSet = new Set(); const continents: ContinentInfo[] = []; for (const country of anastasisData.countriesList.countries) { if (continentSet.has(country.continent)) { continue; } + if (opts.requireProvider && !currenciesWithProvider.has(country.currency)) { + // Country's currency doesn't have any providers => skip + continue; + } continentSet.add(country.continent); continents.push({ ...{ name_i18n: country.continent_i18n }, @@ -148,9 +158,18 @@ export class ReducerError extends Error { * Get countries for a continent, abort with ReducerError * exception when continent doesn't exist. */ -function getCountries(continent: string): CountryInfo[] { +function getCountries( + continent: string, + opts: { requireProvider?: boolean } = {}, +): CountryInfo[] { + const currenciesWithProvider = new Set(); + anastasisData.providersList.anastasis_provider.forEach((x) => { + currenciesWithProvider.add(x.currency); + }); const countries = anastasisData.countriesList.countries.filter( - (x) => x.continent === continent, + (x) => + x.continent === continent && + (!opts.requireProvider || currenciesWithProvider.has(x.currency)), ); if (countries.length <= 0) { throw new ReducerError({ @@ -164,14 +183,18 @@ function getCountries(continent: string): CountryInfo[] { export async function getBackupStartState(): Promise { return { backup_state: BackupStates.ContinentSelecting, - continents: getContinents(), + continents: getContinents({ + requireProvider: true, + }), }; } export async function getRecoveryStartState(): Promise { return { recovery_state: RecoveryStates.ContinentSelecting, - continents: getContinents(), + continents: getContinents({ + requireProvider: true, + }), }; } @@ -1073,7 +1096,9 @@ async function backupSelectContinent( state: ReducerStateBackup, args: ActionArgsSelectContinent, ): Promise { - const countries = getCountries(args.continent); + const countries = getCountries(args.continent, { + requireProvider: true, + }); if (countries.length <= 0) { return { code: TalerErrorCode.ANASTASIS_REDUCER_INPUT_INVALID, @@ -1092,7 +1117,9 @@ async function recoverySelectContinent( state: ReducerStateRecovery, args: ActionArgsSelectContinent, ): Promise { - const countries = getCountries(args.continent); + const countries = getCountries(args.continent, { + requireProvider: true, + }); return { ...state, recovery_state: RecoveryStates.CountrySelecting, -- cgit v1.2.3