aboutsummaryrefslogtreecommitdiff
path: root/packages/demobank-ui/src/hooks/backend.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-02-10 09:51:37 -0300
committerSebastian <sebasjm@gmail.com>2023-02-10 09:52:02 -0300
commitba8b40c9150586982e42e76d364d76202627bd6f (patch)
treeebeed7551aad62a03954945de72320b6c1bc1f01 /packages/demobank-ui/src/hooks/backend.ts
parent53af8b486fd8a538c1f54a2ce66ed5f74b2b46ed (diff)
downloadwallet-core-ba8b40c9150586982e42e76d364d76202627bd6f.tar.xz
business account
Diffstat (limited to 'packages/demobank-ui/src/hooks/backend.ts')
-rw-r--r--packages/demobank-ui/src/hooks/backend.ts125
1 files changed, 90 insertions, 35 deletions
diff --git a/packages/demobank-ui/src/hooks/backend.ts b/packages/demobank-ui/src/hooks/backend.ts
index f4f5ecfd0..e87bdd5fe 100644
--- a/packages/demobank-ui/src/hooks/backend.ts
+++ b/packages/demobank-ui/src/hooks/backend.ts
@@ -15,7 +15,10 @@
*/
import { canonicalizeBaseUrl } from "@gnu-taler/taler-util";
-import { useLocalStorage } from "@gnu-taler/web-util/lib/index.browser";
+import {
+ RequestError,
+ useLocalStorage,
+} from "@gnu-taler/web-util/lib/index.browser";
import {
HttpResponse,
HttpResponseOk,
@@ -57,7 +60,7 @@ export function getInitialBackendBaseURL(): string {
export const defaultState: BackendState = {
status: "loggedOut",
- url: getInitialBackendBaseURL()
+ url: getInitialBackendBaseURL(),
};
export interface BackendStateHandler {
@@ -91,7 +94,12 @@ export function useBackendState(): BackendStateHandler {
},
logIn(info) {
//admin is defined by the username
- const nextState: BackendState = { status: "loggedIn", url: state.url, ...info, isUserAdministrator: info.username === "admin" };
+ const nextState: BackendState = {
+ status: "loggedIn",
+ url: state.url,
+ ...info,
+ isUserAdministrator: info.username === "admin",
+ };
update(JSON.stringify(nextState));
},
};
@@ -103,24 +111,25 @@ interface useBackendType {
options?: RequestOptions,
) => Promise<HttpResponseOk<T>>;
fetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>;
- multiFetcher: <T>(endpoint: string[]) => Promise<HttpResponseOk<T>[]>;
- paginatedFetcher: <T>(args: [string, number, number]) => Promise<HttpResponseOk<T>>;
- sandboxAccountsFetcher: <T>(args: [string, number, number, string]) => Promise<HttpResponseOk<T>>;
+ multiFetcher: <T>(endpoint: string[][]) => Promise<HttpResponseOk<T>[]>;
+ paginatedFetcher: <T>(
+ args: [string, number, number],
+ ) => Promise<HttpResponseOk<T>>;
+ sandboxAccountsFetcher: <T>(
+ args: [string, number, number, string],
+ ) => Promise<HttpResponseOk<T>>;
}
-
-
export function usePublicBackend(): useBackendType {
const { state } = useBackendContext();
const { request: requestHandler } = useApiContext();
- const baseUrl = state.url
+ const baseUrl = state.url;
const request = useCallback(
function requestImpl<T>(
path: string,
options: RequestOptions = {},
): Promise<HttpResponseOk<T>> {
-
return requestHandler<T>(baseUrl, path, options);
},
[baseUrl],
@@ -133,15 +142,21 @@ export function usePublicBackend(): useBackendType {
[baseUrl],
);
const paginatedFetcher = useCallback(
- function fetcherImpl<T>([endpoint, page, size]: [string, number, number]): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(baseUrl, endpoint, { params: { page: page || 1, size } });
+ function fetcherImpl<T>([endpoint, page, size]: [
+ string,
+ number,
+ number,
+ ]): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, endpoint, {
+ params: { page: page || 1, size },
+ });
},
[baseUrl],
);
const multiFetcher = useCallback(
- function multiFetcherImpl<T>(
- endpoints: string[],
- ): Promise<HttpResponseOk<T>[]> {
+ function multiFetcherImpl<T>([endpoints]: string[][]): Promise<
+ HttpResponseOk<T>[]
+ > {
return Promise.all(
endpoints.map((endpoint) => requestHandler<T>(baseUrl, endpoint)),
);
@@ -149,27 +164,39 @@ export function usePublicBackend(): useBackendType {
[baseUrl],
);
const sandboxAccountsFetcher = useCallback(
- function fetcherImpl<T>([endpoint, page, size, account]: [string, number, number, string]): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(baseUrl, endpoint, { params: { page: page || 1, size } });
+ function fetcherImpl<T>([endpoint, page, size, account]: [
+ string,
+ number,
+ number,
+ string,
+ ]): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, endpoint, {
+ params: { page: page || 1, size },
+ });
},
[baseUrl],
);
- return { request, fetcher, paginatedFetcher, multiFetcher, sandboxAccountsFetcher };
+ return {
+ request,
+ fetcher,
+ paginatedFetcher,
+ multiFetcher,
+ sandboxAccountsFetcher,
+ };
}
export function useAuthenticatedBackend(): useBackendType {
const { state } = useBackendContext();
const { request: requestHandler } = useApiContext();
- const creds = state.status === "loggedIn" ? state : undefined
- const baseUrl = state.url
+ const creds = state.status === "loggedIn" ? state : undefined;
+ const baseUrl = state.url;
const request = useCallback(
function requestImpl<T>(
path: string,
options: RequestOptions = {},
): Promise<HttpResponseOk<T>> {
-
return requestHandler<T>(baseUrl, path, { basicAuth: creds, ...options });
},
[baseUrl, creds],
@@ -182,36 +209,66 @@ export function useAuthenticatedBackend(): useBackendType {
[baseUrl, creds],
);
const paginatedFetcher = useCallback(
- function fetcherImpl<T>([endpoint, page = 0, size]: [string, number, number]): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(baseUrl, endpoint, { basicAuth: creds, params: { page, size } });
+ function fetcherImpl<T>([endpoint, page = 0, size]: [
+ string,
+ number,
+ number,
+ ]): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, endpoint, {
+ basicAuth: creds,
+ params: { page, size },
+ });
},
[baseUrl, creds],
);
const multiFetcher = useCallback(
- function multiFetcherImpl<T>(
- endpoints: string[],
- ): Promise<HttpResponseOk<T>[]> {
+ function multiFetcherImpl<T>([endpoints]: string[][]): Promise<
+ HttpResponseOk<T>[]
+ > {
+ console.log("list size", endpoints.length, endpoints);
return Promise.all(
- endpoints.map((endpoint) => requestHandler<T>(baseUrl, endpoint, { basicAuth: creds })),
+ endpoints.map((endpoint) =>
+ requestHandler<T>(baseUrl, endpoint, { basicAuth: creds }),
+ ),
);
},
[baseUrl, creds],
);
const sandboxAccountsFetcher = useCallback(
- function fetcherImpl<T>([endpoint, page, size, account]: [string, number, number, string]): Promise<HttpResponseOk<T>> {
- return requestHandler<T>(baseUrl, endpoint, { basicAuth: creds, params: { page: page || 1, size } });
+ function fetcherImpl<T>([endpoint, page, size, account]: [
+ string,
+ number,
+ number,
+ string,
+ ]): Promise<HttpResponseOk<T>> {
+ return requestHandler<T>(baseUrl, endpoint, {
+ basicAuth: creds,
+ params: { page: page || 1, size },
+ });
},
[baseUrl],
);
- return { request, fetcher, paginatedFetcher, multiFetcher, sandboxAccountsFetcher };
+
+ return {
+ request,
+ fetcher,
+ paginatedFetcher,
+ multiFetcher,
+ sandboxAccountsFetcher,
+ };
}
-export function useBackendConfig(): HttpResponse<SandboxBackend.Config, SandboxBackend.SandboxError> {
+export function useBackendConfig(): HttpResponse<
+ SandboxBackend.Config,
+ SandboxBackend.SandboxError
+> {
const { request } = usePublicBackend();
type Type = SandboxBackend.Config;
- const [result, setResult] = useState<HttpResponse<Type, SandboxBackend.SandboxError>>({ loading: true });
+ const [result, setResult] = useState<
+ HttpResponse<Type, SandboxBackend.SandboxError>
+ >({ loading: true });
useEffect(() => {
request<Type>(`/config`)
@@ -238,10 +295,8 @@ export function useMatchMutate(): (
const allKeys = Array.from(cache.keys());
const keys = allKeys.filter((key) => re.test(key));
const mutations = keys.map((key) => {
- mutate(key, value, true);
+ return mutate(key, value, true);
});
return Promise.all(mutations);
};
}
-
-