From ba8b40c9150586982e42e76d364d76202627bd6f Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 10 Feb 2023 09:51:37 -0300 Subject: business account --- packages/demobank-ui/src/hooks/backend.ts | 125 +++++++++++++++++++++--------- 1 file changed, 90 insertions(+), 35 deletions(-) (limited to 'packages/demobank-ui/src/hooks/backend.ts') 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>; fetcher: (endpoint: string) => Promise>; - multiFetcher: (endpoint: string[]) => Promise[]>; - paginatedFetcher: (args: [string, number, number]) => Promise>; - sandboxAccountsFetcher: (args: [string, number, number, string]) => Promise>; + multiFetcher: (endpoint: string[][]) => Promise[]>; + paginatedFetcher: ( + args: [string, number, number], + ) => Promise>; + sandboxAccountsFetcher: ( + args: [string, number, number, string], + ) => Promise>; } - - export function usePublicBackend(): useBackendType { const { state } = useBackendContext(); const { request: requestHandler } = useApiContext(); - const baseUrl = state.url + const baseUrl = state.url; const request = useCallback( function requestImpl( path: string, options: RequestOptions = {}, ): Promise> { - return requestHandler(baseUrl, path, options); }, [baseUrl], @@ -133,15 +142,21 @@ export function usePublicBackend(): useBackendType { [baseUrl], ); const paginatedFetcher = useCallback( - function fetcherImpl([endpoint, page, size]: [string, number, number]): Promise> { - return requestHandler(baseUrl, endpoint, { params: { page: page || 1, size } }); + function fetcherImpl([endpoint, page, size]: [ + string, + number, + number, + ]): Promise> { + return requestHandler(baseUrl, endpoint, { + params: { page: page || 1, size }, + }); }, [baseUrl], ); const multiFetcher = useCallback( - function multiFetcherImpl( - endpoints: string[], - ): Promise[]> { + function multiFetcherImpl([endpoints]: string[][]): Promise< + HttpResponseOk[] + > { return Promise.all( endpoints.map((endpoint) => requestHandler(baseUrl, endpoint)), ); @@ -149,27 +164,39 @@ export function usePublicBackend(): useBackendType { [baseUrl], ); const sandboxAccountsFetcher = useCallback( - function fetcherImpl([endpoint, page, size, account]: [string, number, number, string]): Promise> { - return requestHandler(baseUrl, endpoint, { params: { page: page || 1, size } }); + function fetcherImpl([endpoint, page, size, account]: [ + string, + number, + number, + string, + ]): Promise> { + return requestHandler(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( path: string, options: RequestOptions = {}, ): Promise> { - return requestHandler(baseUrl, path, { basicAuth: creds, ...options }); }, [baseUrl, creds], @@ -182,36 +209,66 @@ export function useAuthenticatedBackend(): useBackendType { [baseUrl, creds], ); const paginatedFetcher = useCallback( - function fetcherImpl([endpoint, page = 0, size]: [string, number, number]): Promise> { - return requestHandler(baseUrl, endpoint, { basicAuth: creds, params: { page, size } }); + function fetcherImpl([endpoint, page = 0, size]: [ + string, + number, + number, + ]): Promise> { + return requestHandler(baseUrl, endpoint, { + basicAuth: creds, + params: { page, size }, + }); }, [baseUrl, creds], ); const multiFetcher = useCallback( - function multiFetcherImpl( - endpoints: string[], - ): Promise[]> { + function multiFetcherImpl([endpoints]: string[][]): Promise< + HttpResponseOk[] + > { + console.log("list size", endpoints.length, endpoints); return Promise.all( - endpoints.map((endpoint) => requestHandler(baseUrl, endpoint, { basicAuth: creds })), + endpoints.map((endpoint) => + requestHandler(baseUrl, endpoint, { basicAuth: creds }), + ), ); }, [baseUrl, creds], ); const sandboxAccountsFetcher = useCallback( - function fetcherImpl([endpoint, page, size, account]: [string, number, number, string]): Promise> { - return requestHandler(baseUrl, endpoint, { basicAuth: creds, params: { page: page || 1, size } }); + function fetcherImpl([endpoint, page, size, account]: [ + string, + number, + number, + string, + ]): Promise> { + return requestHandler(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 { +export function useBackendConfig(): HttpResponse< + SandboxBackend.Config, + SandboxBackend.SandboxError +> { const { request } = usePublicBackend(); type Type = SandboxBackend.Config; - const [result, setResult] = useState>({ loading: true }); + const [result, setResult] = useState< + HttpResponse + >({ loading: true }); useEffect(() => { request(`/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); }; } - - -- cgit v1.2.3