From a7c8f0f3edd738a59d719105cda3aa8821886b90 Mon Sep 17 00:00:00 2001
From: Sebastian <sebasjm@gmail.com>
Date: Mon, 15 Apr 2024 12:01:16 -0300
Subject: fix #8604

---
 .../merchant-backoffice-ui/src/Application.tsx     | 383 +++++++++++----------
 1 file changed, 196 insertions(+), 187 deletions(-)

(limited to 'packages/merchant-backoffice-ui/src/Application.tsx')

diff --git a/packages/merchant-backoffice-ui/src/Application.tsx b/packages/merchant-backoffice-ui/src/Application.tsx
index d5a05e821..097e98567 100644
--- a/packages/merchant-backoffice-ui/src/Application.tsx
+++ b/packages/merchant-backoffice-ui/src/Application.tsx
@@ -19,14 +19,21 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { CacheEvictor, TalerMerchantApi, TalerMerchantInstanceCacheEviction, TalerMerchantManagementCacheEviction, assertUnreachable, canonicalizeBaseUrl } from "@gnu-taler/taler-util";
+import {
+  CacheEvictor,
+  TalerMerchantApi,
+  TalerMerchantInstanceCacheEviction,
+  TalerMerchantManagementCacheEviction,
+  assertUnreachable,
+  canonicalizeBaseUrl,
+} from "@gnu-taler/taler-util";
 import {
   BrowserHashNavigationProvider,
   ConfigResultFail,
   MerchantApiProvider,
   TalerWalletIntegrationBrowserProvider,
   TranslationProvider,
-  useTranslationContext
+  useTranslationContext,
 } from "@gnu-taler/web-util/browser";
 import { VNode, h } from "preact";
 import { useEffect, useState } from "preact/hooks";
@@ -35,16 +42,43 @@ import { Routing } from "./Routing.js";
 import { Loading } from "./components/exception/loading.js";
 import { NotificationCard } from "./components/menu/index.js";
 import { SettingsProvider } from "./context/settings.js";
-import { revalidateBankAccountDetails, revalidateInstanceBankAccounts } from "./hooks/bank.js";
-import { revalidateBackendInstances, revalidateInstanceDetails, revalidateManagedInstanceDetails } from "./hooks/instance.js";
-import { revalidateInstanceOtpDevices, revalidateOtpDeviceDetails } from "./hooks/otp.js";
-import { revalidateInstanceProducts, revalidateProductDetails } from "./hooks/product.js";
-import { revalidateInstanceTemplates, revalidateTemplateDetails } from "./hooks/templates.js";
+import {
+  revalidateBankAccountDetails,
+  revalidateInstanceBankAccounts,
+} from "./hooks/bank.js";
+import {
+  revalidateBackendInstances,
+  revalidateInstanceDetails,
+  revalidateManagedInstanceDetails,
+} from "./hooks/instance.js";
+import {
+  revalidateInstanceOtpDevices,
+  revalidateOtpDeviceDetails,
+} from "./hooks/otp.js";
+import {
+  revalidateInstanceProducts,
+  revalidateProductDetails,
+} from "./hooks/product.js";
+import {
+  revalidateInstanceTemplates,
+  revalidateTemplateDetails,
+} from "./hooks/templates.js";
 import { revalidateInstanceTransfers } from "./hooks/transfer.js";
-import { revalidateInstanceWebhooks, revalidateWebhookDetails } from "./hooks/webhooks.js";
+import {
+  revalidateInstanceWebhooks,
+  revalidateWebhookDetails,
+} from "./hooks/webhooks.js";
 import { strings } from "./i18n/strings.js";
-import { MerchantUiSettings, buildDefaultBackendBaseURL, fetchSettings } from "./settings.js";
-import { revalidateInstanceOrders, revalidateOrderDetails } from "./hooks/order.js";
+import {
+  MerchantUiSettings,
+  buildDefaultBackendBaseURL,
+  fetchSettings,
+} from "./settings.js";
+import {
+  revalidateInstanceOrders,
+  revalidateOrderDetails,
+} from "./hooks/order.js";
+import { SessionContextProvider } from "./context/session.js";
 const WITH_LOCAL_STORAGE_CACHE = false;
 
 export function Application(): VNode {
@@ -64,42 +98,48 @@ export function Application(): VNode {
           de: strings["de"].completeness,
         }}
       >
-        <MerchantApiProvider baseUrl={new URL("./", baseUrl)} frameOnError={OnConfigError} evictors={{
-          management: swrCacheEvictor
-        }}>
-          <SWRConfig
-            value={{
-              provider: WITH_LOCAL_STORAGE_CACHE
-                ? localStorageProvider
-                : undefined,
-              // normally, do not revalidate
-              revalidateOnFocus: false,
-              revalidateOnReconnect: false,
-              revalidateIfStale: false,
-              revalidateOnMount: undefined,
-              focusThrottleInterval: undefined,
+        <MerchantApiProvider
+          baseUrl={new URL("./", baseUrl)}
+          frameOnError={OnConfigError}
+          evictors={{
+            management: swrCacheEvictor,
+          }}
+        >
+          <SessionContextProvider>
+            <SWRConfig
+              value={{
+                provider: WITH_LOCAL_STORAGE_CACHE
+                  ? localStorageProvider
+                  : undefined,
+                // normally, do not revalidate
+                revalidateOnFocus: false,
+                revalidateOnReconnect: false,
+                revalidateIfStale: false,
+                revalidateOnMount: undefined,
+                focusThrottleInterval: undefined,
 
-              // normally, do not refresh
-              refreshInterval: undefined,
-              dedupingInterval: 2000,
-              refreshWhenHidden: false,
-              refreshWhenOffline: false,
+                // normally, do not refresh
+                refreshInterval: undefined,
+                dedupingInterval: 2000,
+                refreshWhenHidden: false,
+                refreshWhenOffline: false,
 
-              // ignore errors
-              shouldRetryOnError: false,
-              errorRetryCount: 0,
-              errorRetryInterval: undefined,
+                // ignore errors
+                shouldRetryOnError: false,
+                errorRetryCount: 0,
+                errorRetryInterval: undefined,
 
-              // do not go to loading again if already has data
-              keepPreviousData: true,
-            }}
-          >
-            <TalerWalletIntegrationBrowserProvider>
-              <BrowserHashNavigationProvider>
-                <Routing />
-              </BrowserHashNavigationProvider>
-            </TalerWalletIntegrationBrowserProvider>
-          </SWRConfig>
+                // do not go to loading again if already has data
+                keepPreviousData: true,
+              }}
+            >
+              <TalerWalletIntegrationBrowserProvider>
+                <BrowserHashNavigationProvider>
+                  <Routing />
+                </BrowserHashNavigationProvider>
+              </TalerWalletIntegrationBrowserProvider>
+            </SWRConfig>
+          </SessionContextProvider>
         </MerchantApiProvider>
       </TranslationProvider>
     </SettingsProvider>
@@ -150,187 +190,157 @@ function localStorageProvider(): Map<unknown, unknown> {
   return map;
 }
 
-function OnConfigError({ state }: { state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined }): VNode {
+function OnConfigError({
+  state,
+}: {
+  state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined;
+}): VNode {
   const { i18n } = useTranslationContext();
   if (!state) {
-    return <i18n.Translate>checking compatibility with server...</i18n.Translate>
+    return (
+      <i18n.Translate>checking compatibility with server...</i18n.Translate>
+    );
   }
   switch (state.type) {
     case "error": {
-      return <NotificationCard
-        notification={{
-          message: i18n.str`Contacting the server failed`,
-          description: state.error.message,
-          details: JSON.stringify(state.error.errorDetail, undefined, 2),
-          type: "ERROR",
-        }}
-      />
+      return (
+        <NotificationCard
+          notification={{
+            message: i18n.str`Contacting the server failed`,
+            description: state.error.message,
+            details: JSON.stringify(state.error.errorDetail, undefined, 2),
+            type: "ERROR",
+          }}
+        />
+      );
     }
     case "incompatible": {
-      return <NotificationCard
-        notification={{
-          message: i18n.str`The server version is not supported`,
-          description: i18n.str`Supported version "${state.supported}", server version "${state.result.version}".`,
-          type: "WARN",
-        }}
-      />
+      return (
+        <NotificationCard
+          notification={{
+            message: i18n.str`The server version is not supported`,
+            description: i18n.str`Supported version "${state.supported}", server version "${state.result.version}".`,
+            type: "WARN",
+          }}
+        />
+      );
     }
-    default: assertUnreachable(state)
+    default:
+      assertUnreachable(state);
   }
 }
 
-const swrCacheEvictor= new class implements CacheEvictor<TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction> {
-  async notifySuccess(op: TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction) {
-    switch(op) {
+const swrCacheEvictor = new (class
+  implements
+    CacheEvictor<
+      TalerMerchantManagementCacheEviction | TalerMerchantInstanceCacheEviction
+    >
+{
+  async notifySuccess(
+    op:
+      | TalerMerchantManagementCacheEviction
+      | TalerMerchantInstanceCacheEviction,
+  ) {
+    switch (op) {
       case TalerMerchantManagementCacheEviction.CREATE_INSTANCE: {
-        await Promise.all([
-          revalidateBackendInstances()
-        ])
-        return
+        await Promise.all([revalidateBackendInstances()]);
+        return;
       }
       case TalerMerchantManagementCacheEviction.UPDATE_INSTANCE: {
-        await Promise.all([
-          revalidateManagedInstanceDetails()
-        ])
-        return
+        await Promise.all([revalidateManagedInstanceDetails()]);
+        return;
       }
-      case TalerMerchantManagementCacheEviction.DELETE_INSTANCE:{
-        await Promise.all([
-          revalidateBackendInstances()
-        ])
-        return
+      case TalerMerchantManagementCacheEviction.DELETE_INSTANCE: {
+        await Promise.all([revalidateBackendInstances()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE:{
-        await Promise.all([
-          revalidateInstanceDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.UPDATE_CURRENT_INSTANCE: {
+        await Promise.all([revalidateInstanceDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE:{
-        await Promise.all([
-          revalidateInstanceDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_CURRENT_INSTANCE: {
+        await Promise.all([revalidateInstanceDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT:{
-        await Promise.all([
-          revalidateInstanceBankAccounts()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_BANK_ACCOUNT: {
+        await Promise.all([revalidateInstanceBankAccounts()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT:{
-        await Promise.all([
-          revalidateBankAccountDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.UPDATE_BANK_ACCOUNT: {
+        await Promise.all([revalidateBankAccountDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT:{
-        await Promise.all([
-          revalidateInstanceBankAccounts()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_BANK_ACCOUNT: {
+        await Promise.all([revalidateInstanceBankAccounts()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_PRODUCT:{
-        await Promise.all([
-          revalidateInstanceProducts()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_PRODUCT: {
+        await Promise.all([revalidateInstanceProducts()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT:{
-        await Promise.all([
-          revalidateProductDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.UPDATE_PRODUCT: {
+        await Promise.all([revalidateProductDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_PRODUCT:{
-        await Promise.all([
-          revalidateInstanceProducts()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_PRODUCT: {
+        await Promise.all([revalidateInstanceProducts()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_TRANSFER:{
-        await Promise.all([
-          revalidateInstanceTransfers()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_TRANSFER: {
+        await Promise.all([revalidateInstanceTransfers()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_TRANSFER:{
-        await Promise.all([
-          revalidateInstanceTransfers()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_TRANSFER: {
+        await Promise.all([revalidateInstanceTransfers()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_DEVICE:{
-        await Promise.all([
-          revalidateInstanceOtpDevices()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_DEVICE: {
+        await Promise.all([revalidateInstanceOtpDevices()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.UPDATE_DEVICE:{
-        await Promise.all([
-          revalidateOtpDeviceDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.UPDATE_DEVICE: {
+        await Promise.all([revalidateOtpDeviceDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_DEVICE:{
-        await Promise.all([
-          revalidateInstanceOtpDevices()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_DEVICE: {
+        await Promise.all([revalidateInstanceOtpDevices()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE:{
-        await Promise.all([
-          revalidateInstanceTemplates()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_TEMPLATE: {
+        await Promise.all([revalidateInstanceTemplates()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE:{
-        await Promise.all([
-          revalidateTemplateDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.UPDATE_TEMPLATE: {
+        await Promise.all([revalidateTemplateDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE:{
-        await Promise.all([
-          revalidateInstanceTemplates()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_TEMPLATE: {
+        await Promise.all([revalidateInstanceTemplates()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK:{
-        await Promise.all([
-          revalidateInstanceWebhooks()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_WEBHOOK: {
+        await Promise.all([revalidateInstanceWebhooks()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK:{
-        await Promise.all([
-          revalidateWebhookDetails()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.UPDATE_WEBHOOK: {
+        await Promise.all([revalidateWebhookDetails()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK:{
-        await Promise.all([
-          revalidateInstanceWebhooks()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.DELETE_WEBHOOK: {
+        await Promise.all([revalidateInstanceWebhooks()]);
+        return;
       }
-      case TalerMerchantInstanceCacheEviction.CREATE_ORDER:{
-        await Promise.all([
-          revalidateInstanceOrders()
-        ])
-        return
+      case TalerMerchantInstanceCacheEviction.CREATE_ORDER: {
+        await Promise.all([revalidateInstanceOrders()]);
+        return;
       }
       case TalerMerchantInstanceCacheEviction.UPDATE_ORDER: {
-        await Promise.all([
-          revalidateOrderDetails()
-        ])
-        return
+        await Promise.all([revalidateOrderDetails()]);
+        return;
       }
       case TalerMerchantInstanceCacheEviction.DELETE_ORDER: {
-        await Promise.all([
-          revalidateInstanceOrders()
-        ])
-        return
+        await Promise.all([revalidateInstanceOrders()]);
+        return;
       }
       case TalerMerchantInstanceCacheEviction.LAST:
       // case TalerMerchantInstanceCacheEviction.CREATE_TOKENFAMILY:{
@@ -351,5 +361,4 @@ const swrCacheEvictor= new class implements CacheEvictor<TalerMerchantManagement
       // }
     }
   }
-
-}
+})();
-- 
cgit v1.2.3

