diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks/product.ts')
-rw-r--r-- | packages/merchant-backoffice-ui/src/hooks/product.ts | 69 |
1 files changed, 18 insertions, 51 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/product.ts b/packages/merchant-backoffice-ui/src/hooks/product.ts index fb7889834..af8ad74f3 100644 --- a/packages/merchant-backoffice-ui/src/hooks/product.ts +++ b/packages/merchant-backoffice-ui/src/hooks/product.ts @@ -14,18 +14,9 @@ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ import useSWR, { useSWRConfig } from "swr"; -import { useBackendContext } from "../context/backend.js"; -import { useInstanceContext } from "../context/instance.js"; import { MerchantBackend, WithId } from "../declaration.js"; -import { - fetcher, - HttpError, - HttpResponse, - HttpResponseOk, - multiFetcher, - request, - useMatchMutate, -} from "./backend.js"; +import { HttpError, HttpResponse, HttpResponseOk } from "../utils/request.js"; +import { useBackendInstanceRequest, useMatchMutate } from "./backend.js"; export interface ProductAPI { createProduct: ( @@ -45,19 +36,14 @@ export interface ProductAPI { export function useProductAPI(): ProductAPI { const mutateAll = useMatchMutate(); const { mutate } = useSWRConfig(); - const { url: baseUrl, token: adminToken } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - const { url, token } = !admin - ? { url: baseUrl, token: adminToken } - : { url: `${baseUrl}/instances/${id}`, token: instanceToken }; + const { request } = useBackendInstanceRequest(); const createProduct = async ( data: MerchantBackend.Products.ProductAddDetail, ): Promise<void> => { - const res = await request(`${url}/private/products`, { - method: "post", - token, + const res = await request(`/private/products`, { + method: "POST", data, }); @@ -68,9 +54,8 @@ export function useProductAPI(): ProductAPI { productId: string, data: MerchantBackend.Products.ProductPatchDetail, ): Promise<void> => { - const r = await request(`${url}/private/products/${productId}`, { - method: "patch", - token, + const r = await request(`/private/products/${productId}`, { + method: "PATCH", data, }); @@ -78,20 +63,18 @@ export function useProductAPI(): ProductAPI { }; const deleteProduct = async (productId: string): Promise<void> => { - await request(`${url}/private/products/${productId}`, { - method: "delete", - token, + await request(`/private/products/${productId}`, { + method: "DELETE", }); - await mutate([`/private/products`, token, url]); + await mutate([`/private/products`]); }; const lockProduct = async ( productId: string, data: MerchantBackend.Products.LockRequest, ): Promise<void> => { - await request(`${url}/private/products/${productId}/lock`, { - method: "post", - token, + await request(`/private/products/${productId}/lock`, { + method: "POST", data, }); @@ -104,17 +87,12 @@ export function useProductAPI(): ProductAPI { export function useInstanceProducts(): HttpResponse< (MerchantBackend.Products.ProductDetail & WithId)[] > { - const { url: baseUrl, token: baseToken } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - - const { url, token } = !admin - ? { url: baseUrl, token: baseToken } - : { url: `${baseUrl}/instances/${id}`, token: instanceToken }; + const { fetcher, multiFetcher } = useBackendInstanceRequest(); const { data: list, error: listError } = useSWR< HttpResponseOk<MerchantBackend.Products.InventorySummaryResponse>, HttpError - >([`/private/products`, token, url], fetcher, { + >([`/private/products`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, @@ -128,7 +106,7 @@ export function useInstanceProducts(): HttpResponse< const { data: products, error: productError } = useSWR< HttpResponseOk<MerchantBackend.Products.ProductDetail>[], HttpError - >([paths, token, url], multiFetcher, { + >([paths], multiFetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, @@ -144,7 +122,7 @@ export function useInstanceProducts(): HttpResponse< //take the id from the queried url return { ...d.data, - id: d.info?.url.replace(/.*\/private\/products\//, "") || "", + id: d.info?.url.href.replace(/.*\/private\/products\//, "") || "", }; }); return { ok: true, data: dataWithId }; @@ -155,23 +133,12 @@ export function useInstanceProducts(): HttpResponse< export function useProductDetails( productId: string, ): HttpResponse<MerchantBackend.Products.ProductDetail> { - const { url: baseUrl, token: baseToken } = useBackendContext(); - const { token: instanceToken, id, admin } = useInstanceContext(); - - const { url, token } = !admin - ? { - url: baseUrl, - token: baseToken, - } - : { - url: `${baseUrl}/instances/${id}`, - token: instanceToken, - }; + const { fetcher } = useBackendInstanceRequest(); const { data, error, isValidating } = useSWR< HttpResponseOk<MerchantBackend.Products.ProductDetail>, HttpError - >([`/private/products/${productId}`, token, url], fetcher, { + >([`/private/products/${productId}`], fetcher, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, |