diff options
author | Sebastian <sebasjm@gmail.com> | 2023-01-03 01:57:39 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-01-03 01:58:18 -0300 |
commit | a2668c22f0d18386fc988f27299172145d9fa15d (patch) | |
tree | 38f06046ce4d71ee3af64ede931754bfae6dc954 /packages/merchant-backoffice-ui/src/hooks/product.ts | |
parent | d1aa79eae817b1cf4c23f800308ecad101692ac7 (diff) | |
download | wallet-core-a2668c22f0d18386fc988f27299172145d9fa15d.tar.xz |
refactor better QA
removed axios, use fetch
removed jest, added mocha and chai
moved the default request handler to runtime dependency (so it can be replaced for testing)
refactored ALL the test to the standard web-utils
all hooks now use ONE request handler
moved the tests from test folder to src
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, |