diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src/Application.tsx')
-rw-r--r-- | packages/merchant-backoffice-ui/src/Application.tsx | 383 |
1 files changed, 196 insertions, 187 deletions
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 // } } } - -} +})(); |