diff options
Diffstat (limited to 'packages/bank-ui')
-rw-r--r-- | packages/bank-ui/TODO | 49 | ||||
-rw-r--r-- | packages/bank-ui/src/context/config.ts | 172 | ||||
-rw-r--r-- | packages/bank-ui/src/pages/OperationState/state.ts | 2 | ||||
-rw-r--r-- | packages/bank-ui/src/pages/WithdrawalOperationPage.tsx | 2 |
4 files changed, 96 insertions, 129 deletions
diff --git a/packages/bank-ui/TODO b/packages/bank-ui/TODO deleted file mode 100644 index cc578cce0..000000000 --- a/packages/bank-ui/TODO +++ /dev/null @@ -1,49 +0,0 @@ -Urgent TODOs: - -- General: - - - not only Nora dark-theme, but default light! (CSS) - - DONE: auto-focus on input fields is not working well - - DONE: buttons should be visibly insensitive - as long as required input fields are not - working - - DONE: next required invalid/missing input field is - not properly highlighted in red - - Logout button needs more padding to the right (CSS) - -- Error bar: - - DONE: hows JSON, should only show good error message - and numeric code, not JSON syntax - - should auto-hide after next action, no need for - "clear"! - - need variant "status bar" in green (or blue) - which shows status of last operation - -* H1-Titles: - - Center more (currently way on the left) (CSS) - -- Assets: - - - Numeric amount needs to be shown MUCH bigger (CSS) - - Center more? (CSS) - -- Payments: - - - Amount to withdraw currently shown in white-on-white (CSS) - - Big frame drawn around notebook-tabs is not nice (CSS) - - Center more? (CSS) - - "Wire to bank account" - - maybe split two types (payto and IBAN) into - two tabs? - - currently cannot switch back from payto to IBAN - -- Withdraw: - - - Should use new 'status' bar at the end, instead - of extra dialog with "close" button - - ditto for bank-wire-transfer final stage - -- Footer: - - overlaps with transaction history or other - content, needs to consistently show at the - end! => change rendering logic!? (CSS?) diff --git a/packages/bank-ui/src/context/config.ts b/packages/bank-ui/src/context/config.ts index 39d12be86..cb0d599aa 100644 --- a/packages/bank-ui/src/context/config.ts +++ b/packages/bank-ui/src/context/config.ts @@ -15,27 +15,29 @@ */ import { - assertUnreachable, LibtoolVersion, + ObservableHttpClientLibrary, + TalerAuthenticationHttpClient, TalerBankConversionCacheEviction, TalerBankConversionHttpClient, - TalerCorebankApi, - TalerAuthenticationHttpClient, TalerCoreBankCacheEviction, TalerCoreBankHttpClient, - TalerError + TalerCorebankApi, + TalerError, + assertUnreachable, + CacheEvictor, } from "@gnu-taler/taler-util"; import { - BrowserHttpLib, + BrowserFetchHttpLib, ErrorLoading, - useTranslationContext, + useTranslationContext } from "@gnu-taler/web-util/browser"; import { ComponentChildren, - createContext, FunctionComponent, - h, VNode, + createContext, + h, } from "preact"; import { useContext, useEffect, useState } from "preact/hooks"; import { @@ -164,78 +166,20 @@ export const BankCoreApiProvider = ({ * @returns */ function buildApiClient(url: URL) { - const httpLib = new BrowserHttpLib(); - - const bankClient = new TalerCoreBankHttpClient(url.href, httpLib, { - async notifySuccess(op) { - switch (op) { - case TalerCoreBankCacheEviction.DELELE_ACCOUNT: { - await Promise.all([ - revalidatePublicAccounts(), - revalidateBusinessAccounts(), - ]); - return - } - case TalerCoreBankCacheEviction.CREATE_ACCOUNT: { - // admin balance change on new account - await Promise.all([ - revalidateAccountDetails(), - revalidateTransactions(), - revalidatePublicAccounts(), - revalidateBusinessAccounts(), - ]) - return; - } - case TalerCoreBankCacheEviction.UPDATE_ACCOUNT: { - await Promise.all([ - revalidateAccountDetails(), - ]) - return; - } - case TalerCoreBankCacheEviction.CREATE_TRANSACTION: { - await Promise.all([ - revalidateAccountDetails(), - revalidateTransactions(), - ]) - return; - } - case TalerCoreBankCacheEviction.CONFIRM_WITHDRAWAL: { - await Promise.all([ - revalidateAccountDetails(), - revalidateTransactions(), - ]) - return; - } - case TalerCoreBankCacheEviction.CREATE_CASHOUT: { - await Promise.all([ - revalidateAccountDetails(), - revalidateCashouts(), - revalidateTransactions(), - ]) - return; - } - case TalerCoreBankCacheEviction.UPDATE_PASSWORD: - case TalerCoreBankCacheEviction.ABORT_WITHDRAWAL: - case TalerCoreBankCacheEviction.CREATE_WITHDRAWAL: - return; - default: - assertUnreachable(op) - } - } + const httpFetch = new BrowserFetchHttpLib({ + enableThrottling: true, + requireTls: false, }); - const conversionClient = new TalerBankConversionHttpClient(bankClient.getConversionInfoAPI(), httpLib, { - async notifySuccess(op) { - switch (op) { - case TalerBankConversionCacheEviction.UPDATE_RATE: { - await revalidateConversionInfo(); - return - } - default: - assertUnreachable(op) - } + const httpLib = new ObservableHttpClientLibrary(httpFetch, { + observe(ev) { + console.log(ev) } - }); - const authClient = (user: string) => new TalerAuthenticationHttpClient(bankClient.getAuthenticationAPI(user), user, httpLib); + }) + + const bankClient = new TalerCoreBankHttpClient(url.href, httpLib, evictBankSwrCache); + const conversionClient = new TalerBankConversionHttpClient(bankClient.getConversionInfoAPI().href, httpLib, evictConversionSwrCache); + const authClient = (user: string) => new TalerAuthenticationHttpClient(bankClient.getAuthenticationAPI(user).href, user, httpLib); + return { bankClient, conversionClient, authClient } } @@ -261,3 +205,75 @@ export const BankCoreApiProviderTesting = ({ children, }); }; + + +const evictBankSwrCache: CacheEvictor<TalerCoreBankCacheEviction> = { + async notifySuccess(op) { + switch (op) { + case TalerCoreBankCacheEviction.DELELE_ACCOUNT: { + await Promise.all([ + revalidatePublicAccounts(), + revalidateBusinessAccounts(), + ]); + return + } + case TalerCoreBankCacheEviction.CREATE_ACCOUNT: { + // admin balance change on new account + await Promise.all([ + revalidateAccountDetails(), + revalidateTransactions(), + revalidatePublicAccounts(), + revalidateBusinessAccounts(), + ]) + return; + } + case TalerCoreBankCacheEviction.UPDATE_ACCOUNT: { + await Promise.all([ + revalidateAccountDetails(), + ]) + return; + } + case TalerCoreBankCacheEviction.CREATE_TRANSACTION: { + await Promise.all([ + revalidateAccountDetails(), + revalidateTransactions(), + ]) + return; + } + case TalerCoreBankCacheEviction.CONFIRM_WITHDRAWAL: { + await Promise.all([ + revalidateAccountDetails(), + revalidateTransactions(), + ]) + return; + } + case TalerCoreBankCacheEviction.CREATE_CASHOUT: { + await Promise.all([ + revalidateAccountDetails(), + revalidateCashouts(), + revalidateTransactions(), + ]) + return; + } + case TalerCoreBankCacheEviction.UPDATE_PASSWORD: + case TalerCoreBankCacheEviction.ABORT_WITHDRAWAL: + case TalerCoreBankCacheEviction.CREATE_WITHDRAWAL: + return; + default: + assertUnreachable(op) + } + } +} + +const evictConversionSwrCache: CacheEvictor<TalerBankConversionCacheEviction> = { + async notifySuccess(op) { + switch (op) { + case TalerBankConversionCacheEviction.UPDATE_RATE: { + await revalidateConversionInfo(); + return + } + default: + assertUnreachable(op) + } + } +}
\ No newline at end of file diff --git a/packages/bank-ui/src/pages/OperationState/state.ts b/packages/bank-ui/src/pages/OperationState/state.ts index 5baf2d51c..9c5626cce 100644 --- a/packages/bank-ui/src/pages/OperationState/state.ts +++ b/packages/bank-ui/src/pages/OperationState/state.ts @@ -113,7 +113,7 @@ export function useComponentState({ } const uri = stringifyWithdrawUri({ - bankIntegrationApiBaseUrl: bank.getIntegrationAPI(), + bankIntegrationApiBaseUrl: bank.getIntegrationAPI().href, withdrawalOperationId, }); const parsedUri = parseWithdrawUri(uri); diff --git a/packages/bank-ui/src/pages/WithdrawalOperationPage.tsx b/packages/bank-ui/src/pages/WithdrawalOperationPage.tsx index 973a23011..b91fecd9d 100644 --- a/packages/bank-ui/src/pages/WithdrawalOperationPage.tsx +++ b/packages/bank-ui/src/pages/WithdrawalOperationPage.tsx @@ -38,7 +38,7 @@ export function WithdrawalOperationPage({ }): VNode { const { bank: api } = useBankCoreApiContext(); const uri = stringifyWithdrawUri({ - bankIntegrationApiBaseUrl: api.getIntegrationAPI(), + bankIntegrationApiBaseUrl: api.getIntegrationAPI().href, withdrawalOperationId: operationId, }); const parsedUri = parseWithdrawUri(uri); |