summaryrefslogtreecommitdiff
path: root/packages/bank-ui/src/app.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bank-ui/src/app.tsx')
-rw-r--r--packages/bank-ui/src/app.tsx92
1 files changed, 86 insertions, 6 deletions
diff --git a/packages/bank-ui/src/app.tsx b/packages/bank-ui/src/app.tsx
index 893942059..434c132ed 100644
--- a/packages/bank-ui/src/app.tsx
+++ b/packages/bank-ui/src/app.tsx
@@ -15,22 +15,28 @@
*/
import {
+ CacheEvictor,
+ TalerBankConversionCacheEviction,
+ TalerCoreBankCacheEviction,
+ assertUnreachable,
canonicalizeBaseUrl,
getGlobalLogLevel,
setGlobalLogLevelFromString,
} from "@gnu-taler/taler-util";
-import { Loading, TranslationProvider } from "@gnu-taler/web-util/browser";
+import { BankApiProvider, BrowserHashNavigationProvider, Loading, TalerWalletIntegrationBrowserProvider, TranslationProvider } from "@gnu-taler/web-util/browser";
import { h } from "preact";
import { useEffect, useState } from "preact/hooks";
import { SWRConfig } from "swr";
import { Routing } from "./Routing.js";
-import { BankCoreApiProvider } from "./context/config.js";
-import { BrowserHashNavigationProvider } from "./context/navigation.js";
+// import { BankCoreApiProvider } from "./context/config.js";
+// import { BrowserHashNavigationProvider } from "./context/navigation.js";
import { SettingsProvider } from "./context/settings.js";
-import { TalerWalletIntegrationBrowserProvider } from "./context/wallet-integration.js";
+// import { TalerWalletIntegrationBrowserProvider } from "./context/wallet-integration.js";
import { strings } from "./i18n/strings.js";
import { BankFrame } from "./pages/BankFrame.js";
import { BankUiSettings, fetchSettings } from "./settings.js";
+import { revalidateAccountDetails, revalidatePublicAccounts, revalidateTransactions } from "./hooks/account.js";
+import { revalidateBusinessAccounts, revalidateCashouts, revalidateConversionInfo } from "./hooks/regional.js";
const WITH_LOCAL_STORAGE_CACHE = false;
export function App() {
@@ -50,7 +56,10 @@ export function App() {
de: strings["de"].completeness,
}}
>
- <BankCoreApiProvider baseUrl={baseUrl} frameOnError={BankFrame}>
+ <BankApiProvider baseUrl={new URL("/", baseUrl)} frameOnError={BankFrame} evictors={{
+ bank: evictBankSwrCache,
+ conversion: evictConversionSwrCache,
+ }}>
<SWRConfig
value={{
provider: WITH_LOCAL_STORAGE_CACHE
@@ -84,7 +93,7 @@ export function App() {
</BrowserHashNavigationProvider>
</TalerWalletIntegrationBrowserProvider>
</SWRConfig>
- </BankCoreApiProvider>
+ </BankApiProvider>
</TranslationProvider>
</SettingsProvider>
);
@@ -135,3 +144,74 @@ function getInitialBackendBaseURL(
return canonicalizeBaseUrl(window.origin);
}
}
+
+
+const evictBankSwrCache: CacheEvictor<TalerCoreBankCacheEviction> = {
+ async notifySuccess(op) {
+ switch (op) {
+ case TalerCoreBankCacheEviction.DELETE_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);
+ }
+ },
+};