diff options
author | Sebastian <sebasjm@gmail.com> | 2023-02-08 17:39:39 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-02-08 17:39:39 -0300 |
commit | 603efbd073a2a9aa56f801fe57d13f060821b05d (patch) | |
tree | 9ca8367dbbe6e47b2a11ac67bbc2747298fcd255 /packages/merchant-backoffice-ui/src/hooks | |
parent | be01d1479cf650fe8eb0c8e567620abfa4544e1e (diff) | |
download | wallet-core-603efbd073a2a9aa56f801fe57d13f060821b05d.tar.xz |
use request api from web-util
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks')
9 files changed, 222 insertions, 113 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts b/packages/merchant-backoffice-ui/src/hooks/backend.ts index 3f3db2fa1..952b33f7e 100644 --- a/packages/merchant-backoffice-ui/src/hooks/backend.ts +++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts @@ -28,8 +28,8 @@ import { HttpResponse, HttpResponseOk, RequestOptions, -} from "../utils/request.js"; -import { useApiContext } from "../context/api.js"; +} from "@gnu-taler/web-util/lib/index.browser"; +import { useApiContext } from "@gnu-taler/web-util/lib/index.browser"; export function useMatchMutate(): ( re: RegExp, @@ -54,12 +54,17 @@ export function useMatchMutate(): ( }; } -export function useBackendInstancesTestForAdmin(): HttpResponse<MerchantBackend.Instances.InstancesResponse> { +export function useBackendInstancesTestForAdmin(): HttpResponse< + MerchantBackend.Instances.InstancesResponse, + MerchantBackend.ErrorDetail +> { const { request } = useBackendBaseRequest(); type Type = MerchantBackend.Instances.InstancesResponse; - const [result, setResult] = useState<HttpResponse<Type>>({ loading: true }); + const [result, setResult] = useState< + HttpResponse<Type, MerchantBackend.ErrorDetail> + >({ loading: true }); useEffect(() => { request<Type>(`/management/instances`) @@ -70,12 +75,17 @@ export function useBackendInstancesTestForAdmin(): HttpResponse<MerchantBackend. return result; } -export function useBackendConfig(): HttpResponse<MerchantBackend.VersionResponse> { +export function useBackendConfig(): HttpResponse< + MerchantBackend.VersionResponse, + MerchantBackend.ErrorDetail +> { const { request } = useBackendBaseRequest(); type Type = MerchantBackend.VersionResponse; - const [result, setResult] = useState<HttpResponse<Type>>({ loading: true }); + const [result, setResult] = useState< + HttpResponse<Type, MerchantBackend.ErrorDetail> + >({ loading: true }); useEffect(() => { request<Type>(`/config`) @@ -88,15 +98,15 @@ export function useBackendConfig(): HttpResponse<MerchantBackend.VersionResponse interface useBackendInstanceRequestType { request: <T>( - path: string, + endpoint: string, options?: RequestOptions, ) => Promise<HttpResponseOk<T>>; - fetcher: <T>(path: string) => Promise<HttpResponseOk<T>>; - reserveDetailFetcher: <T>(path: string) => Promise<HttpResponseOk<T>>; - tipsDetailFetcher: <T>(path: string) => Promise<HttpResponseOk<T>>; + fetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>; + reserveDetailFetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>; + tipsDetailFetcher: <T>(endpoint: string) => Promise<HttpResponseOk<T>>; multiFetcher: <T>(url: string[]) => Promise<HttpResponseOk<T>[]>; orderFetcher: <T>( - path: string, + endpoint: string, paid?: YesOrNo, refunded?: YesOrNo, wired?: YesOrNo, @@ -104,26 +114,26 @@ interface useBackendInstanceRequestType { delta?: number, ) => Promise<HttpResponseOk<T>>; transferFetcher: <T>( - path: string, + endpoint: string, payto_uri?: string, verified?: string, position?: string, delta?: number, ) => Promise<HttpResponseOk<T>>; templateFetcher: <T>( - path: string, + endpoint: string, position?: string, delta?: number, ) => Promise<HttpResponseOk<T>>; webhookFetcher: <T>( - path: string, + endpoint: string, position?: string, delta?: number, ) => Promise<HttpResponseOk<T>>; } interface useBackendBaseRequestType { request: <T>( - path: string, + endpoint: string, options?: RequestOptions, ) => Promise<HttpResponseOk<T>>; } @@ -141,10 +151,10 @@ export function useBackendBaseRequest(): useBackendBaseRequestType { const request = useCallback( function requestImpl<T>( - path: string, + endpoint: string, options: RequestOptions = {}, ): Promise<HttpResponseOk<T>> { - return requestHandler<T>(backend, path, { token, ...options }); + return requestHandler<T>(backend, endpoint, { token, ...options }); }, [backend, token], ); @@ -153,45 +163,47 @@ export function useBackendBaseRequest(): useBackendBaseRequestType { } export function useBackendInstanceRequest(): useBackendInstanceRequestType { - const { url: baseUrl, token: baseToken } = useBackendContext(); + const { url: rootBackendUrl, token: rootToken } = useBackendContext(); const { token: instanceToken, id, admin } = useInstanceContext(); const { request: requestHandler } = useApiContext(); - const { backend, token } = !admin - ? { backend: baseUrl, token: baseToken } - : { backend: `${baseUrl}/instances/${id}`, token: instanceToken }; + const { baseUrl, token } = !admin + ? { baseUrl: rootBackendUrl, token: rootToken } + : { baseUrl: `${rootBackendUrl}/instances/${id}`, token: instanceToken }; const request = useCallback( function requestImpl<T>( - path: string, + endpoint: string, options: RequestOptions = {}, ): Promise<HttpResponseOk<T>> { - return requestHandler<T>(backend, path, { token, ...options }); + return requestHandler<T>(baseUrl, endpoint, { token, ...options }); }, - [backend, token], + [baseUrl, token], ); const multiFetcher = useCallback( function multiFetcherImpl<T>( - paths: string[], + endpoints: string[], ): Promise<HttpResponseOk<T>[]> { return Promise.all( - paths.map((path) => requestHandler<T>(backend, path, { token })), + endpoints.map((endpoint) => + requestHandler<T>(baseUrl, endpoint, { token }), + ), ); }, - [backend, token], + [baseUrl, token], ); const fetcher = useCallback( - function fetcherImpl<T>(path: string): Promise<HttpResponseOk<T>> { - return requestHandler<T>(backend, path, { token }); + function fetcherImpl<T>(endpoint: string): Promise<HttpResponseOk<T>> { + return requestHandler<T>(baseUrl, endpoint, { token }); }, - [backend, token], + [baseUrl, token], ); const orderFetcher = useCallback( function orderFetcherImpl<T>( - path: string, + endpoint: string, paid?: YesOrNo, refunded?: YesOrNo, wired?: YesOrNo, @@ -208,42 +220,42 @@ export function useBackendInstanceRequest(): useBackendInstanceRequestType { if (refunded !== undefined) params.refunded = refunded; if (wired !== undefined) params.wired = wired; if (date_ms !== undefined) params.date_ms = date_ms; - return requestHandler<T>(backend, path, { params, token }); + return requestHandler<T>(baseUrl, endpoint, { params, token }); }, - [backend, token], + [baseUrl, token], ); const reserveDetailFetcher = useCallback( function reserveDetailFetcherImpl<T>( - path: string, + endpoint: string, ): Promise<HttpResponseOk<T>> { - return requestHandler<T>(backend, path, { + return requestHandler<T>(baseUrl, endpoint, { params: { tips: "yes", }, token, }); }, - [backend, token], + [baseUrl, token], ); const tipsDetailFetcher = useCallback( function tipsDetailFetcherImpl<T>( - path: string, + endpoint: string, ): Promise<HttpResponseOk<T>> { - return requestHandler<T>(backend, path, { + return requestHandler<T>(baseUrl, endpoint, { params: { pickups: "yes", }, token, }); }, - [backend, token], + [baseUrl, token], ); const transferFetcher = useCallback( function transferFetcherImpl<T>( - path: string, + endpoint: string, payto_uri?: string, verified?: string, position?: string, @@ -257,14 +269,14 @@ export function useBackendInstanceRequest(): useBackendInstanceRequestType { } if (position !== undefined) params.offset = position; - return requestHandler<T>(backend, path, { params, token }); + return requestHandler<T>(baseUrl, endpoint, { params, token }); }, - [backend, token], + [baseUrl, token], ); const templateFetcher = useCallback( function templateFetcherImpl<T>( - path: string, + endpoint: string, position?: string, delta?: number, ): Promise<HttpResponseOk<T>> { @@ -274,14 +286,14 @@ export function useBackendInstanceRequest(): useBackendInstanceRequestType { } if (position !== undefined) params.offset = position; - return requestHandler<T>(backend, path, { params, token }); + return requestHandler<T>(baseUrl, endpoint, { params, token }); }, - [backend, token], + [baseUrl, token], ); const webhookFetcher = useCallback( function webhookFetcherImpl<T>( - path: string, + endpoint: string, position?: string, delta?: number, ): Promise<HttpResponseOk<T>> { @@ -291,9 +303,9 @@ export function useBackendInstanceRequest(): useBackendInstanceRequestType { } if (position !== undefined) params.offset = position; - return requestHandler<T>(backend, path, { params, token }); + return requestHandler<T>(baseUrl, endpoint, { params, token }); }, - [backend, token], + [baseUrl, token], ); return { diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts index 3c05472d0..f118e1e6e 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts @@ -16,7 +16,11 @@ import useSWR, { useSWRConfig } from "swr"; import { useBackendContext } from "../context/backend.js"; import { MerchantBackend } from "../declaration.js"; -import { HttpError, HttpResponse, HttpResponseOk } from "../utils/request.js"; +import { + HttpError, + HttpResponse, + HttpResponseOk, +} from "@gnu-taler/web-util/lib/index.browser"; import { useBackendBaseRequest, useBackendInstanceRequest, @@ -176,12 +180,15 @@ export function useInstanceAPI(): InstanceAPI { return { updateInstance, deleteInstance, setNewToken, clearToken }; } -export function useInstanceDetails(): HttpResponse<MerchantBackend.Instances.QueryInstancesResponse> { +export function useInstanceDetails(): HttpResponse< + MerchantBackend.Instances.QueryInstancesResponse, + MerchantBackend.ErrorDetail +> { const { fetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, @@ -203,12 +210,15 @@ type KYCStatus = | { type: "ok" } | { type: "redirect"; status: MerchantBackend.Instances.AccountKycRedirects }; -export function useInstanceKYCDetails(): HttpResponse<KYCStatus> { +export function useInstanceKYCDetails(): HttpResponse< + KYCStatus, + MerchantBackend.ErrorDetail +> { const { fetcher } = useBackendInstanceRequest(); const { data, error } = useSWR< HttpResponseOk<MerchantBackend.Instances.AccountKycRedirects>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/kyc`], fetcher, { refreshInterval: 5000, refreshWhenHidden: false, @@ -231,12 +241,15 @@ export function useInstanceKYCDetails(): HttpResponse<KYCStatus> { export function useManagedInstanceDetails( instanceId: string, -): HttpResponse<MerchantBackend.Instances.QueryInstancesResponse> { +): HttpResponse< + MerchantBackend.Instances.QueryInstancesResponse, + MerchantBackend.ErrorDetail +> { const { request } = useBackendBaseRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Instances.QueryInstancesResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/management/instances/${instanceId}`], request, { refreshInterval: 0, refreshWhenHidden: false, @@ -254,12 +267,15 @@ export function useManagedInstanceDetails( return { loading: true }; } -export function useBackendInstances(): HttpResponse<MerchantBackend.Instances.InstancesResponse> { +export function useBackendInstances(): HttpResponse< + MerchantBackend.Instances.InstancesResponse, + MerchantBackend.ErrorDetail +> { const { request } = useBackendBaseRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Instances.InstancesResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >(["/management/instances"], request); if (isValidating) return { loading: true, data: data?.data }; diff --git a/packages/merchant-backoffice-ui/src/hooks/order.ts b/packages/merchant-backoffice-ui/src/hooks/order.ts index 5be480160..c01f8dd83 100644 --- a/packages/merchant-backoffice-ui/src/hooks/order.ts +++ b/packages/merchant-backoffice-ui/src/hooks/order.ts @@ -22,7 +22,7 @@ import { HttpResponse, HttpResponseOk, HttpResponsePaginated, -} from "../utils/request.js"; +} from "@gnu-taler/web-util/lib/index.browser"; import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; export interface OrderAPI { @@ -128,12 +128,15 @@ export function useOrderAPI(): OrderAPI { export function useOrderDetails( oderId: string, -): HttpResponse<MerchantBackend.Orders.MerchantOrderStatusResponse> { +): HttpResponse< + MerchantBackend.Orders.MerchantOrderStatusResponse, + MerchantBackend.ErrorDetail +> { const { fetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Orders.MerchantOrderStatusResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/orders/${oderId}`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, @@ -158,7 +161,10 @@ export interface InstanceOrderFilter { export function useInstanceOrders( args?: InstanceOrderFilter, updateFilter?: (d: Date) => void, -): HttpResponsePaginated<MerchantBackend.Orders.OrderHistory> { +): HttpResponsePaginated< + MerchantBackend.Orders.OrderHistory, + MerchantBackend.ErrorDetail +> { const { orderFetcher } = useBackendInstanceRequest(); const [pageBefore, setPageBefore] = useState(1); @@ -177,7 +183,10 @@ export function useInstanceOrders( data: beforeData, error: beforeError, isValidating: loadingBefore, - } = useSWR<HttpResponseOk<MerchantBackend.Orders.OrderHistory>, HttpError>( + } = useSWR< + HttpResponseOk<MerchantBackend.Orders.OrderHistory>, + HttpError<MerchantBackend.ErrorDetail> + >( [ `/private/orders`, args?.paid, @@ -192,7 +201,10 @@ export function useInstanceOrders( data: afterData, error: afterError, isValidating: loadingAfter, - } = useSWR<HttpResponseOk<MerchantBackend.Orders.OrderHistory>, HttpError>( + } = useSWR< + HttpResponseOk<MerchantBackend.Orders.OrderHistory>, + HttpError<MerchantBackend.ErrorDetail> + >( [ `/private/orders`, args?.paid, @@ -206,10 +218,16 @@ export function useInstanceOrders( //this will save last result const [lastBefore, setLastBefore] = useState< - HttpResponse<MerchantBackend.Orders.OrderHistory> + HttpResponse< + MerchantBackend.Orders.OrderHistory, + MerchantBackend.ErrorDetail + > >({ loading: true }); const [lastAfter, setLastAfter] = useState< - HttpResponse<MerchantBackend.Orders.OrderHistory> + HttpResponse< + MerchantBackend.Orders.OrderHistory, + MerchantBackend.ErrorDetail + > >({ loading: true }); useEffect(() => { if (afterData) setLastAfter(afterData); diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts b/packages/merchant-backoffice-ui/src/hooks/product.ts index af8ad74f3..5d95a2f8f 100644 --- a/packages/merchant-backoffice-ui/src/hooks/product.ts +++ b/packages/merchant-backoffice-ui/src/hooks/product.ts @@ -15,7 +15,11 @@ */ import useSWR, { useSWRConfig } from "swr"; import { MerchantBackend, WithId } from "../declaration.js"; -import { HttpError, HttpResponse, HttpResponseOk } from "../utils/request.js"; +import { + HttpError, + HttpResponse, + HttpResponseOk, +} from "@gnu-taler/web-util/lib/index.browser"; import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; export interface ProductAPI { @@ -85,13 +89,14 @@ export function useProductAPI(): ProductAPI { } export function useInstanceProducts(): HttpResponse< - (MerchantBackend.Products.ProductDetail & WithId)[] + (MerchantBackend.Products.ProductDetail & WithId)[], + MerchantBackend.ErrorDetail > { const { fetcher, multiFetcher } = useBackendInstanceRequest(); const { data: list, error: listError } = useSWR< HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/products`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, @@ -105,7 +110,7 @@ export function useInstanceProducts(): HttpResponse< ); const { data: products, error: productError } = useSWR< HttpResponseOk<MerchantBackend.Products.ProductDetail>[], - HttpError + HttpError<MerchantBackend.ErrorDetail> >([paths], multiFetcher, { refreshInterval: 0, refreshWhenHidden: false, @@ -122,7 +127,7 @@ export function useInstanceProducts(): HttpResponse< //take the id from the queried url return { ...d.data, - id: d.info?.url.href.replace(/.*\/private\/products\//, "") || "", + id: d.info?.url.replace(/.*\/private\/products\//, "") || "", }; }); return { ok: true, data: dataWithId }; @@ -132,12 +137,15 @@ export function useInstanceProducts(): HttpResponse< export function useProductDetails( productId: string, -): HttpResponse<MerchantBackend.Products.ProductDetail> { +): HttpResponse< + MerchantBackend.Products.ProductDetail, + MerchantBackend.ErrorDetail +> { const { fetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Products.ProductDetail>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/products/${productId}`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, diff --git a/packages/merchant-backoffice-ui/src/hooks/reserves.ts b/packages/merchant-backoffice-ui/src/hooks/reserves.ts index dc127af13..0215f32c5 100644 --- a/packages/merchant-backoffice-ui/src/hooks/reserves.ts +++ b/packages/merchant-backoffice-ui/src/hooks/reserves.ts @@ -15,7 +15,11 @@ */ import useSWR, { useSWRConfig } from "swr"; import { MerchantBackend } from "../declaration.js"; -import { HttpError, HttpResponse, HttpResponseOk } from "../utils/request.js"; +import { + HttpError, + HttpResponse, + HttpResponseOk, +} from "@gnu-taler/web-util/lib/index.browser"; import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; export function useReservesAPI(): ReserveMutateAPI { @@ -77,7 +81,9 @@ export function useReservesAPI(): ReserveMutateAPI { return res; }; - const deleteReserve = async (pub: string): Promise<HttpResponse<void>> => { + const deleteReserve = async ( + pub: string, + ): Promise<HttpResponse<void, MerchantBackend.ErrorDetail>> => { const res = await request<void>(`/private/reserves/${pub}`, { method: "DELETE", }); @@ -102,15 +108,20 @@ export interface ReserveMutateAPI { authorizeTip: ( data: MerchantBackend.Tips.TipCreateRequest, ) => Promise<HttpResponseOk<MerchantBackend.Tips.TipCreateConfirmation>>; - deleteReserve: (id: string) => Promise<HttpResponse<void>>; + deleteReserve: ( + id: string, + ) => Promise<HttpResponse<void, MerchantBackend.ErrorDetail>>; } -export function useInstanceReserves(): HttpResponse<MerchantBackend.Tips.TippingReserveStatus> { +export function useInstanceReserves(): HttpResponse< + MerchantBackend.Tips.TippingReserveStatus, + MerchantBackend.ErrorDetail +> { const { fetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Tips.TippingReserveStatus>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/reserves`], fetcher); if (isValidating) return { loading: true, data: data?.data }; @@ -121,12 +132,15 @@ export function useInstanceReserves(): HttpResponse<MerchantBackend.Tips.Tipping export function useReserveDetails( reserveId: string, -): HttpResponse<MerchantBackend.Tips.ReserveDetail> { +): HttpResponse< + MerchantBackend.Tips.ReserveDetail, + MerchantBackend.ErrorDetail +> { const { reserveDetailFetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Tips.ReserveDetail>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/reserves/${reserveId}`], reserveDetailFetcher, { refreshInterval: 0, refreshWhenHidden: false, @@ -143,12 +157,12 @@ export function useReserveDetails( export function useTipDetails( tipId: string, -): HttpResponse<MerchantBackend.Tips.TipDetails> { +): HttpResponse<MerchantBackend.Tips.TipDetails, MerchantBackend.ErrorDetail> { const { tipsDetailFetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Tips.TipDetails>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/tips/${tipId}`], tipsDetailFetcher, { refreshInterval: 0, refreshWhenHidden: false, diff --git a/packages/merchant-backoffice-ui/src/hooks/templates.ts b/packages/merchant-backoffice-ui/src/hooks/templates.ts index 3a28b903d..124786887 100644 --- a/packages/merchant-backoffice-ui/src/hooks/templates.ts +++ b/packages/merchant-backoffice-ui/src/hooks/templates.ts @@ -23,7 +23,7 @@ import { HttpResponse, HttpResponseOk, HttpResponsePaginated, -} from "../utils/request.js"; +} from "@gnu-taler/web-util/lib/index.browser"; export function useTemplateAPI(): TemplateAPI { const mutateAll = useMatchMutate(); @@ -79,7 +79,12 @@ export function useTemplateAPI(): TemplateAPI { return res; }; - return { createTemplate, updateTemplate, deleteTemplate, createOrderFromTemplate }; + return { + createTemplate, + updateTemplate, + deleteTemplate, + createOrderFromTemplate, + }; } export interface TemplateAPI { @@ -105,7 +110,10 @@ export interface InstanceTemplateFilter { export function useInstanceTemplates( args?: InstanceTemplateFilter, updatePosition?: (id: string) => void, -): HttpResponsePaginated<MerchantBackend.Template.TemplateSummaryResponse> { +): HttpResponsePaginated< + MerchantBackend.Template.TemplateSummaryResponse, + MerchantBackend.ErrorDetail +> { const { templateFetcher } = useBackendInstanceRequest(); // const [pageBefore, setPageBefore] = useState(1); @@ -140,15 +148,18 @@ export function useInstanceTemplates( isValidating: loadingAfter, } = useSWR< HttpResponseOk<MerchantBackend.Template.TemplateSummaryResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/templates`, args?.position, -totalAfter], templateFetcher); //this will save last result // const [lastBefore, setLastBefore] = useState< - // HttpResponse<MerchantBackend.Template.TemplateSummaryResponse> + // HttpResponse<MerchantBackend.Template.TemplateSummaryResponse, MerchantBackend.ErrorDetail> // >({ loading: true }); const [lastAfter, setLastAfter] = useState< - HttpResponse<MerchantBackend.Template.TemplateSummaryResponse> + HttpResponse< + MerchantBackend.Template.TemplateSummaryResponse, + MerchantBackend.ErrorDetail + > >({ loading: true }); useEffect(() => { if (afterData) setLastAfter(afterData); @@ -174,9 +185,10 @@ export function useInstanceTemplates( if (afterData.data.templates.length < MAX_RESULT_SIZE) { setPageAfter(pageAfter + 1); } else { - const from = `${afterData.data.templates[afterData.data.templates.length - 1] - .template_id - }`; + const from = `${ + afterData.data.templates[afterData.data.templates.length - 1] + .template_id + }`; if (from && updatePosition) updatePosition(from); } }, @@ -211,12 +223,15 @@ export function useInstanceTemplates( export function useTemplateDetails( templateId: string, -): HttpResponse<MerchantBackend.Template.TemplateDetails> { +): HttpResponse< + MerchantBackend.Template.TemplateDetails, + MerchantBackend.ErrorDetail +> { const { templateFetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Template.TemplateDetails>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/templates/${templateId}`], templateFetcher, { refreshInterval: 0, refreshWhenHidden: false, diff --git a/packages/merchant-backoffice-ui/src/hooks/testing.tsx b/packages/merchant-backoffice-ui/src/hooks/testing.tsx index 8c5a5a36b..64e646bb5 100644 --- a/packages/merchant-backoffice-ui/src/hooks/testing.tsx +++ b/packages/merchant-backoffice-ui/src/hooks/testing.tsx @@ -22,10 +22,13 @@ import { MockEnvironment } from "@gnu-taler/web-util/lib/tests/mock"; import { ComponentChildren, FunctionalComponent, h, VNode } from "preact"; import { SWRConfig } from "swr"; -import { ApiContextProvider } from "../context/api.js"; +import { ApiContextProvider } from "@gnu-taler/web-util/lib/index.browser"; import { BackendContextProvider } from "../context/backend.js"; import { InstanceContextProvider } from "../context/instance.js"; -import { HttpResponseOk, RequestOptions } from "../utils/request.js"; +import { + HttpResponseOk, + RequestOptions, +} from "@gnu-taler/web-util/lib/index.browser"; export class ApiMockEnvironment extends MockEnvironment { constructor(debug = false) { @@ -78,7 +81,7 @@ export class ApiMockEnvironment extends MockEnvironment { info: { hasToken: !!options.token, status: !mocked ? 200 : mocked.status, - url: _url, + url: _url.href, payload: options.data, }, }; diff --git a/packages/merchant-backoffice-ui/src/hooks/transfer.ts b/packages/merchant-backoffice-ui/src/hooks/transfer.ts index b86247476..6b30047e9 100644 --- a/packages/merchant-backoffice-ui/src/hooks/transfer.ts +++ b/packages/merchant-backoffice-ui/src/hooks/transfer.ts @@ -22,7 +22,7 @@ import { HttpResponse, HttpResponseOk, HttpResponsePaginated, -} from "../utils/request.js"; +} from "@gnu-taler/web-util/lib/index.browser"; import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; export function useTransferAPI(): TransferAPI { @@ -67,7 +67,10 @@ export interface InstanceTransferFilter { export function useInstanceTransfers( args?: InstanceTransferFilter, updatePosition?: (id: string) => void, -): HttpResponsePaginated<MerchantBackend.Transfers.TransferList> { +): HttpResponsePaginated< + MerchantBackend.Transfers.TransferList, + MerchantBackend.ErrorDetail +> { const { transferFetcher } = useBackendInstanceRequest(); const [pageBefore, setPageBefore] = useState(1); @@ -86,7 +89,10 @@ export function useInstanceTransfers( data: beforeData, error: beforeError, isValidating: loadingBefore, - } = useSWR<HttpResponseOk<MerchantBackend.Transfers.TransferList>, HttpError>( + } = useSWR< + HttpResponseOk<MerchantBackend.Transfers.TransferList>, + HttpError<MerchantBackend.ErrorDetail> + >( [ `/private/transfers`, args?.payto_uri, @@ -100,7 +106,10 @@ export function useInstanceTransfers( data: afterData, error: afterError, isValidating: loadingAfter, - } = useSWR<HttpResponseOk<MerchantBackend.Transfers.TransferList>, HttpError>( + } = useSWR< + HttpResponseOk<MerchantBackend.Transfers.TransferList>, + HttpError<MerchantBackend.ErrorDetail> + >( [ `/private/transfers`, args?.payto_uri, @@ -113,10 +122,16 @@ export function useInstanceTransfers( //this will save last result const [lastBefore, setLastBefore] = useState< - HttpResponse<MerchantBackend.Transfers.TransferList> + HttpResponse< + MerchantBackend.Transfers.TransferList, + MerchantBackend.ErrorDetail + > >({ loading: true }); const [lastAfter, setLastAfter] = useState< - HttpResponse<MerchantBackend.Transfers.TransferList> + HttpResponse< + MerchantBackend.Transfers.TransferList, + MerchantBackend.ErrorDetail + > >({ loading: true }); useEffect(() => { if (afterData) setLastAfter(afterData); diff --git a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts index 9f196cefa..e1cd3daf2 100644 --- a/packages/merchant-backoffice-ui/src/hooks/webhooks.ts +++ b/packages/merchant-backoffice-ui/src/hooks/webhooks.ts @@ -23,7 +23,7 @@ import { HttpResponse, HttpResponseOk, HttpResponsePaginated, -} from "../utils/request.js"; +} from "@gnu-taler/web-util/lib/index.browser"; export function useWebhookAPI(): WebhookAPI { const mutateAll = useMatchMutate(); @@ -84,7 +84,10 @@ export interface InstanceWebhookFilter { export function useInstanceWebhooks( args?: InstanceWebhookFilter, updatePosition?: (id: string) => void, -): HttpResponsePaginated<MerchantBackend.Webhooks.WebhookSummaryResponse> { +): HttpResponsePaginated< + MerchantBackend.Webhooks.WebhookSummaryResponse, + MerchantBackend.ErrorDetail +> { const { webhookFetcher } = useBackendInstanceRequest(); const [pageAfter, setPageAfter] = useState(1); @@ -97,11 +100,14 @@ export function useInstanceWebhooks( isValidating: loadingAfter, } = useSWR< HttpResponseOk<MerchantBackend.Webhooks.WebhookSummaryResponse>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/webhooks`, args?.position, -totalAfter], webhookFetcher); const [lastAfter, setLastAfter] = useState< - HttpResponse<MerchantBackend.Webhooks.WebhookSummaryResponse> + HttpResponse< + MerchantBackend.Webhooks.WebhookSummaryResponse, + MerchantBackend.ErrorDetail + > >({ loading: true }); useEffect(() => { if (afterData) setLastAfter(afterData); @@ -121,21 +127,20 @@ export function useInstanceWebhooks( if (afterData.data.webhooks.length < MAX_RESULT_SIZE) { setPageAfter(pageAfter + 1); } else { - const from = `${afterData.data.webhooks[afterData.data.webhooks.length - 1] - .webhook_id - }`; + const from = `${ + afterData.data.webhooks[afterData.data.webhooks.length - 1].webhook_id + }`; if (from && updatePosition) updatePosition(from); } }, loadMorePrev: () => { - return + return; }, }; const webhooks = !afterData ? [] : (afterData || lastAfter).data.webhooks; - if (loadingAfter) - return { loading: true, data: { webhooks } }; + if (loadingAfter) return { loading: true, data: { webhooks } }; if (afterData) { return { ok: true, data: { webhooks }, ...pagination }; } @@ -144,12 +149,15 @@ export function useInstanceWebhooks( export function useWebhookDetails( webhookId: string, -): HttpResponse<MerchantBackend.Webhooks.WebhookDetails> { +): HttpResponse< + MerchantBackend.Webhooks.WebhookDetails, + MerchantBackend.ErrorDetail +> { const { webhookFetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Webhooks.WebhookDetails>, - HttpError + HttpError<MerchantBackend.ErrorDetail> >([`/private/webhooks/${webhookId}`], webhookFetcher, { refreshInterval: 0, refreshWhenHidden: false, |