aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src/hooks/instance.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/instance.ts')
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.ts238
1 files changed, 143 insertions, 95 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts
index 0ba68250a..e8a431ae5 100644
--- a/packages/merchant-backoffice-ui/src/hooks/instance.ts
+++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts
@@ -16,7 +16,8 @@
import {
HttpResponse,
HttpResponseOk,
- RequestError
+ RequestError,
+ useMerchantApiContext
} from "@gnu-taler/web-util/browser";
import {
useBackendBaseRequest,
@@ -24,114 +25,161 @@ import {
} from "./backend.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
-import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util";
-import _useSWR, { SWRHook } from "swr";
+import { AccessToken, TalerErrorDetail, TalerHttpError, TalerMerchantApi, TalerMerchantInstanceResultByMethod, TalerMerchantManagementResultByMethod, TalerMerchantResultByMethod } from "@gnu-taler/taler-util";
+import _useSWR, { SWRHook, mutate } from "swr";
+import { useSessionContext } from "../context/session.js";
const useSWR = _useSWR as unknown as SWRHook;
-export function useInstanceDetails(): HttpResponse<
- TalerMerchantApi.QueryInstancesResponse,
- TalerErrorDetail
-> {
- const { fetcher } = useBackendInstanceRequest();
-
- const { data, error, isValidating } = useSWR<
- HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
- RequestError<TalerErrorDetail>
- >([`/private/`], fetcher, {
- refreshInterval: 0,
- refreshWhenHidden: false,
- revalidateOnFocus: false,
- revalidateOnReconnect: false,
- refreshWhenOffline: false,
- revalidateIfStale: false,
- errorRetryCount: 0,
- errorRetryInterval: 1,
- shouldRetryOnError: false,
- });
-
- if (isValidating) return { loading: true, data: data?.data };
- if (data) return data;
- if (error) return error.cause;
- return { loading: true };
+export function revalidateInstanceDetails() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "getCurrentInstanceDetails",
+ undefined,
+ { revalidate: true },
+ );
}
+export function useInstanceDetails() {
+ // const { fetcher } = useBackendInstanceRequest();
+
+ // const { data, error, isValidating } = useSWR<
+ // HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
+ // RequestError<TalerErrorDetail>
+ // >([`/private/`], fetcher, {
+ // refreshInterval: 0,
+ // refreshWhenHidden: false,
+ // revalidateOnFocus: false,
+ // revalidateOnReconnect: false,
+ // refreshWhenOffline: false,
+ // revalidateIfStale: false,
+ // errorRetryCount: 0,
+ // errorRetryInterval: 1,
+ // shouldRetryOnError: false,
+ // });
+
+ // if (isValidating) return { loading: true, data: data?.data };
+ // if (data) return data;
+ // if (error) return error.cause;
+ // return { loading: true };
+
+ const { state: session } = useSessionContext();
+ const { lib: { management } } = useMerchantApiContext();
+
+ async function fetcher([token]: [AccessToken]) {
+ return await management.getCurrentInstanceDetails(token);
+ }
-type KYCStatus =
- | { type: "ok" }
- | { type: "redirect"; status: TalerMerchantApi.AccountKycRedirects };
+ const { data, error } = useSWR<
+ TalerMerchantManagementResultByMethod<"getCurrentInstanceDetails">,
+ TalerHttpError
+ >([session.token, "getCurrentInstanceDetails"], fetcher);
-export function useInstanceKYCDetails(): HttpResponse<
- KYCStatus,
- TalerErrorDetail
-> {
- const { fetcher } = useBackendInstanceRequest();
+ if (data) return data;
+ if (error) return error;
+ return undefined;
+}
- const { data, error } = useSWR<
- HttpResponseOk<TalerMerchantApi.AccountKycRedirects>,
- RequestError<TalerErrorDetail>
- >([`/private/kyc`], fetcher, {
- refreshInterval: 60 * 1000,
- refreshWhenHidden: false,
- revalidateOnFocus: false,
- revalidateIfStale: false,
- revalidateOnMount: false,
- revalidateOnReconnect: false,
- refreshWhenOffline: false,
- errorRetryCount: 0,
- errorRetryInterval: 1,
- shouldRetryOnError: false,
- });
-
- if (data) {
- if (data.info?.status === 202)
- return { ok: true, data: { type: "redirect", status: data.data } };
- return { ok: true, data: { type: "ok" } };
+// type KYCStatus =
+// | { type: "ok" }
+// | { type: "redirect"; status: TalerMerchantApi.AccountKycRedirects };
+export function revalidateInstanceKYCDetails() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "getCurrentIntanceKycStatus",
+ undefined,
+ { revalidate: true },
+ );
+}
+export function useInstanceKYCDetails() {
+ // const { fetcher } = useBackendInstanceRequest();
+
+ // const { data, error } = useSWR<
+ // HttpResponseOk<TalerMerchantApi.AccountKycRedirects>,
+ // RequestError<TalerErrorDetail>
+ // >([`/private/kyc`], fetcher, {
+ // refreshInterval: 60 * 1000,
+ // refreshWhenHidden: false,
+ // revalidateOnFocus: false,
+ // revalidateIfStale: false,
+ // revalidateOnMount: false,
+ // revalidateOnReconnect: false,
+ // refreshWhenOffline: false,
+ // errorRetryCount: 0,
+ // errorRetryInterval: 1,
+ // shouldRetryOnError: false,
+ // });
+
+ // if (data) {
+ // if (data.info?.status === 202)
+ // return { ok: true, data: { type: "redirect", status: data.data } };
+ // return { ok: true, data: { type: "ok" } };
+ // }
+ // if (error) return error.cause;
+ // return { loading: true };
+
+ const { state: session } = useSessionContext();
+ const { lib: { management } } = useMerchantApiContext();
+
+ async function fetcher([token]: [AccessToken]) {
+ return await management.getCurrentIntanceKycStatus(token, {});
}
- if (error) return error.cause;
- return { loading: true };
+
+ const { data, error } = useSWR<
+ TalerMerchantManagementResultByMethod<"getCurrentIntanceKycStatus">,
+ TalerHttpError
+ >([session.token, "getCurrentIntanceKycStatus"], fetcher);
+
+ if (data) return data;
+ if (error) return error;
+ return undefined;
+
+
+}
+
+export function revalidateManagedInstanceDetails() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "getInstanceDetails",
+ undefined,
+ { revalidate: true },
+ );
}
+export function useManagedInstanceDetails(instanceId: string) {
+ const { state: session } = useSessionContext();
+ const { lib: { management } } = useMerchantApiContext();
+
+ async function fetcher([token, instanceId]: [AccessToken, string]) {
+ return await management.getInstanceDetails(token, instanceId);
+ }
+
+ const { data, error } = useSWR<
+ TalerMerchantManagementResultByMethod<"getInstanceDetails">,
+ TalerHttpError
+ >([session.token, instanceId, "getInstanceDetails"], fetcher);
-export function useManagedInstanceDetails(
- instanceId: string,
-): HttpResponse<
- TalerMerchantApi.QueryInstancesResponse,
- TalerErrorDetail
-> {
- const { request } = useBackendBaseRequest();
-
- const { data, error, isValidating } = useSWR<
- HttpResponseOk<TalerMerchantApi.QueryInstancesResponse>,
- RequestError<TalerErrorDetail>
- >([`/management/instances/${instanceId}`], request, {
- refreshInterval: 0,
- refreshWhenHidden: false,
- revalidateOnFocus: false,
- revalidateOnReconnect: false,
- refreshWhenOffline: false,
- errorRetryCount: 0,
- errorRetryInterval: 1,
- shouldRetryOnError: false,
- });
-
- if (isValidating) return { loading: true, data: data?.data };
if (data) return data;
- if (error) return error.cause;
- return { loading: true };
+ if (error) return error;
+ return undefined;
}
-export function useBackendInstances(): HttpResponse<
- TalerMerchantApi.InstancesResponse,
- TalerErrorDetail
-> {
- const { request } = useBackendBaseRequest();
+export function revalidateBackendInstances() {
+ return mutate(
+ (key) => Array.isArray(key) && key[key.length - 1] === "listInstances",
+ undefined,
+ { revalidate: true },
+ );
+}
+export function useBackendInstances() {
+ const { state: session } = useSessionContext();
+ const { lib: { management } } = useMerchantApiContext();
- const { data, error, isValidating } = useSWR<
- HttpResponseOk<TalerMerchantApi.InstancesResponse>,
- RequestError<TalerErrorDetail>
- >(["/management/instances"], request);
+ async function fetcher([token]: [AccessToken]) {
+ return await management.listInstances(token);
+ }
+
+ const { data, error } = useSWR<
+ TalerMerchantManagementResultByMethod<"listInstances">,
+ TalerHttpError
+ >([session.token, "listInstances"], fetcher);
- if (isValidating) return { loading: true, data: data?.data };
if (data) return data;
- if (error) return error.cause;
- return { loading: true };
+ if (error) return error;
+ return undefined;
}