diff options
author | Sebastian <sebasjm@gmail.com> | 2024-03-27 01:05:10 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-03-27 01:05:10 -0300 |
commit | 237c4e8adae997e84f5fb7a8fe5c03b1148e99dc (patch) | |
tree | 26ec2b1a82e730af080aae4625b736aaa77dfec7 /packages/merchant-backoffice-ui/src/hooks | |
parent | ecb8c2078ebe94d81a6e03ebfe01ecdde53109e2 (diff) | |
download | wallet-core-237c4e8adae997e84f5fb7a8fe5c03b1148e99dc.tar.xz |
wip #8655
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks')
4 files changed, 33 insertions, 247 deletions
diff --git a/packages/merchant-backoffice-ui/src/hooks/backend.ts b/packages/merchant-backoffice-ui/src/hooks/backend.ts index 8eb9b4cf2..e4e50c8ad 100644 --- a/packages/merchant-backoffice-ui/src/hooks/backend.ts +++ b/packages/merchant-backoffice-ui/src/hooks/backend.ts @@ -177,16 +177,6 @@ interface useBackendBaseRequestType { } type YesOrNo = "yes" | "no"; -type LoginResult = - | { - valid: true; - token: string; - expiration: Timestamp; - } - | { - valid: false; - cause: HttpError<EmptyObject>; - }; /** * diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts index 35147d988..3b02d7758 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.test.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.test.ts @@ -19,15 +19,12 @@ * @author Sebastian Javier Marchano (sebasjm) */ -import { AccessToken, TalerMerchantApi } from "@gnu-taler/taler-util"; +import { TalerMerchantApi } from "@gnu-taler/taler-util"; import * as tests from "@gnu-taler/web-util/testing"; import { expect } from "chai"; import { - useAdminAPI, useBackendInstances, - useInstanceAPI, useInstanceDetails, - useManagementAPI, } from "./instance.js"; import { ApiMockEnvironment } from "./testing.js"; import { @@ -39,6 +36,7 @@ import { API_UPDATE_CURRENT_INSTANCE_AUTH, API_UPDATE_INSTANCE_BY_ID, } from "./urls.js"; +import { useMerchantApiContext } from "@gnu-taler/web-util/browser"; describe("instance api interaction with details", () => { it("should evict cache when updating an instance", async () => { @@ -52,7 +50,8 @@ describe("instance api interaction with details", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useInstanceAPI(); + // const api = useInstanceAPI(); + const { lib: api } = useMerchantApiContext() const query = useInstanceDetails(); return { query, api }; }, @@ -82,7 +81,7 @@ describe("instance api interaction with details", () => { name: "other_name", } as TalerMerchantApi.QueryInstancesResponse, }); - api.updateInstance({ + api.management.updateCurrentInstance(undefined, { name: "other_name", } as TalerMerchantApi.InstanceReconfigurationMessage); }, @@ -120,7 +119,7 @@ describe("instance api interaction with details", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useInstanceAPI(); + const { lib: api } = useMerchantApiContext() const query = useInstanceDetails(); return { query, api }; }, @@ -206,7 +205,7 @@ describe("instance api interaction with details", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useInstanceAPI(); + const { lib: api } = useMerchantApiContext() const query = useInstanceDetails(); return { query, api }; }, @@ -243,7 +242,9 @@ describe("instance api interaction with details", () => { } as TalerMerchantApi.QueryInstancesResponse, }); - api.clearAccessToken(undefined); + api.management.updateCurrentInstanceAuthentication(undefined, { + method: "external" + }); }, ({ query, api }) => { expect(env.assertJustExpectedRequestWereMade()).deep.eq({ @@ -337,7 +338,7 @@ describe("instance admin api interaction with listing", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useAdminAPI(); + const { lib: api } = useMerchantApiContext() const query = useBackendInstances(); return { query, api }; }, @@ -379,9 +380,9 @@ describe("instance admin api interaction with listing", () => { }, }); - api.createInstance({ + api.management.createInstance(undefined, { name: "other_name", - } as TalerMerchantApi.InstanceConfigurationMessage); + } as TalerMerchantApi.InstanceConfigurationMessage) }, ({ query, api }) => { expect(env.assertJustExpectedRequestWereMade()).deep.eq({ @@ -428,7 +429,7 @@ describe("instance admin api interaction with listing", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useAdminAPI(); + const { lib: api } = useMerchantApiContext() const query = useBackendInstances(); return { query, api }; }, @@ -469,7 +470,7 @@ describe("instance admin api interaction with listing", () => { }, }); - api.deleteInstance("the_id"); + api.management.deleteInstance(undefined, "the_id"); }, ({ query, api }) => { expect(env.assertJustExpectedRequestWereMade()).deep.eq({ @@ -582,7 +583,7 @@ describe("instance admin api interaction with listing", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useAdminAPI(); + const { lib: api } = useMerchantApiContext() const query = useBackendInstances(); return { query, api }; }, @@ -627,7 +628,7 @@ describe("instance admin api interaction with listing", () => { }, }); - api.purgeInstance("the_id"); + api.management.deleteInstance(undefined, "the_id", { purge: true }) }, ({ query, api }) => { expect(env.assertJustExpectedRequestWereMade()).deep.eq({ @@ -670,7 +671,7 @@ describe("instance management api interaction with listing", () => { const hookBehavior = await tests.hookBehaveLikeThis( () => { - const api = useManagementAPI("managed"); + const { lib: api } = useMerchantApiContext() const query = useBackendInstances(); return { query, api }; }, @@ -711,7 +712,7 @@ describe("instance management api interaction with listing", () => { }, }); - api.updateInstance({ + api.management.updateCurrentInstance(undefined, { name: "other_name", } as TalerMerchantApi.InstanceConfigurationMessage); }, diff --git a/packages/merchant-backoffice-ui/src/hooks/instance.ts b/packages/merchant-backoffice-ui/src/hooks/instance.ts index 5f17dbf79..0ba68250a 100644 --- a/packages/merchant-backoffice-ui/src/hooks/instance.ts +++ b/packages/merchant-backoffice-ui/src/hooks/instance.ts @@ -20,219 +20,14 @@ import { } from "@gnu-taler/web-util/browser"; import { useBackendBaseRequest, - useBackendInstanceRequest, - useMatchMutate, + useBackendInstanceRequest } from "./backend.js"; // FIX default import https://github.com/microsoft/TypeScript/issues/49189 -import { AccessToken, TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util"; -import _useSWR, { SWRHook, useSWRConfig } from "swr"; -import { useSessionContext } from "../context/session.js"; +import { TalerErrorDetail, TalerMerchantApi } from "@gnu-taler/taler-util"; +import _useSWR, { SWRHook } from "swr"; const useSWR = _useSWR as unknown as SWRHook; -interface InstanceAPI { - updateInstance: ( - data: TalerMerchantApi.InstanceReconfigurationMessage, - ) => Promise<void>; - deleteInstance: () => Promise<void>; - clearAccessToken: (currentToken: AccessToken | undefined) => Promise<void>; - // setNewAccessToken: ( - // currentToken: AccessToken | undefined, - // token: AccessToken, - // ) => Promise<void>; -} - -export function useAdminAPI(): AdminAPI { - const { request } = useBackendBaseRequest(); - const mutateAll = useMatchMutate(); - - const createInstance = async ( - instance: TalerMerchantApi.InstanceConfigurationMessage, - ): Promise<void> => { - await request(`/management/instances`, { - method: "POST", - data: instance, - }); - - mutateAll(/\/management\/instances/); - }; - - const deleteInstance = async (id: string): Promise<void> => { - await request(`/management/instances/${id}`, { - method: "DELETE", - }); - - mutateAll(/\/management\/instances/); - }; - - const purgeInstance = async (id: string): Promise<void> => { - await request(`/management/instances/${id}`, { - method: "DELETE", - params: { - purge: "YES", - }, - }); - - mutateAll(/\/management\/instances/); - }; - - return { createInstance, deleteInstance, purgeInstance }; -} - -export interface AdminAPI { - createInstance: ( - data: TalerMerchantApi.InstanceConfigurationMessage, - ) => Promise<void>; - deleteInstance: (id: string) => Promise<void>; - purgeInstance: (id: string) => Promise<void>; -} - -export function useManagementAPI(instanceId: string): InstanceAPI { - const mutateAll = useMatchMutate(); - const { - state: { backendUrl }, - logIn, - logOut, - } = useSessionContext(); - const { request } = useBackendBaseRequest(); - - const updateInstance = async ( - instance: TalerMerchantApi.InstanceReconfigurationMessage, - ): Promise<void> => { - await request(`/management/instances/${instanceId}`, { - method: "PATCH", - data: instance, - }); - - mutateAll(/\/management\/instances/); - }; - - const deleteInstance = async (): Promise<void> => { - await request(`/management/instances/${instanceId}`, { - method: "DELETE", - }); - - mutateAll(/\/management\/instances/); - }; - - const clearAccessToken = async ( - currentToken: AccessToken | undefined, - ): Promise<void> => { - await request(`/management/instances/${instanceId}/auth`, { - method: "POST", - token: currentToken, - data: { method: "external" }, - }); - - mutateAll(/\/management\/instances/); - }; - - // const setNewAccessToken = async ( - // currentToken: AccessToken | undefined, - // newToken: AccessToken, - // ): Promise<void> => { - - // await request(`/management/instances/${instanceId}/auth`, { - // method: "POST", - // token: currentToken, - // data: { method: "token", token: newToken }, - // }); - - // const resp = await requestNewLoginToken(backendUrl, newToken); - // if (resp.valid) { - // logIn({ token: resp.token as AccessToken }); - // } else { - // logOut(); - // } - - // mutateAll(/\/management\/instances/); - // }; - - return { - updateInstance, - deleteInstance, - // setNewAccessToken, - clearAccessToken, - }; -} - -export function useInstanceAPI(): InstanceAPI { - const { mutate } = useSWRConfig(); - const { - state: { backendUrl }, - } = useSessionContext(); - - const { request } = useBackendInstanceRequest(); - const { state, logIn, logOut } = useSessionContext(); - - const adminToken = - state.status === "loggedIn" && state.isAdmin ? state.token : undefined; - - const updateInstance = async ( - instance: TalerMerchantApi.InstanceReconfigurationMessage, - ): Promise<void> => { - await request(`/private/`, { - method: "PATCH", - data: instance, - }); - - if (adminToken) { - mutate(["/private/instances", adminToken, backendUrl], null); - } - mutate([`/private/`], null); - }; - - const deleteInstance = async (): Promise<void> => { - await request(`/private/`, { - method: "DELETE", - // token: adminToken, - }); - - if (adminToken) { - mutate(["/private/instances", adminToken, backendUrl], null); - } - mutate([`/private/`], null); - }; - - const clearAccessToken = async ( - currentToken: AccessToken | undefined, - ): Promise<void> => { - await request(`/private/auth`, { - method: "POST", - token: currentToken, - data: { method: "external" }, - }); - - mutate([`/private/`], null); - }; - - // const setNewAccessToken = async ( - // currentToken: AccessToken | undefined, - // newToken: AccessToken, - // ): Promise<void> => { - // await request(`/private/auth`, { - // method: "POST", - // token: currentToken, - // data: { method: "token", token: newToken }, - // }); - - // const resp = await requestNewLoginToken(backendUrl, newToken); - // if (resp.valid) { - // logIn({ token: resp.token as AccessToken }); - // } else { - // logOut(); - // } - - // mutate([`/private/`], null); - // }; - - return { - updateInstance, - deleteInstance, - // setNewAccessToken, - clearAccessToken, - }; -} export function useInstanceDetails(): HttpResponse< TalerMerchantApi.QueryInstancesResponse, diff --git a/packages/merchant-backoffice-ui/src/hooks/templates.ts b/packages/merchant-backoffice-ui/src/hooks/templates.ts index 2e39a0c46..2da02e3c7 100644 --- a/packages/merchant-backoffice-ui/src/hooks/templates.ts +++ b/packages/merchant-backoffice-ui/src/hooks/templates.ts @@ -190,20 +190,20 @@ export function useInstanceTemplates( // if the query returns less that we ask, then we have reach the end or beginning const isReachingEnd = - afterData && afterData.data.templates_list.length < totalAfter; + afterData && afterData.data.templates.length < totalAfter; const isReachingStart = args?.position === undefined || - (beforeData && beforeData.data.templates_list.length < totalBefore); + (beforeData && beforeData.data.templates.length < totalBefore); const pagination = { isReachingEnd, isReachingStart, loadMore: () => { if (!afterData || isReachingEnd) return; - if (afterData.data.templates_list.length < MAX_RESULT_SIZE) { + if (afterData.data.templates.length < MAX_RESULT_SIZE) { setPageAfter(pageAfter + 1); } else { - const from = `${afterData.data.templates_list[afterData.data.templates_list.length - 1] + const from = `${afterData.data.templates[afterData.data.templates.length - 1] .template_id }`; if (from && updatePosition) updatePosition(from); @@ -211,10 +211,10 @@ export function useInstanceTemplates( }, loadMorePrev: () => { if (!beforeData || isReachingStart) return; - if (beforeData.data.templates_list.length < MAX_RESULT_SIZE) { + if (beforeData.data.templates.length < MAX_RESULT_SIZE) { setPageBefore(pageBefore + 1); } else if (beforeData) { - const from = `${beforeData.data.templates_list[beforeData.data.templates_list.length - 1] + const from = `${beforeData.data.templates[beforeData.data.templates.length - 1] .template_id }`; if (from && updatePosition) updatePosition(from); @@ -223,17 +223,17 @@ export function useInstanceTemplates( }; // const templates = !afterData ? [] : (afterData || lastAfter).data.templates; - const templates_list = + const templates = !beforeData || !afterData ? [] - : (beforeData || lastBefore).data.templates_list + : (beforeData || lastBefore).data.templates .slice() .reverse() - .concat((afterData || lastAfter).data.templates_list); + .concat((afterData || lastAfter).data.templates); if (loadingAfter || loadingBefore) - return { loading: true, data: { templates_list } }; + return { loading: true, data: { templates } }; if (beforeData && afterData) { - return { ok: true, data: { templates_list }, ...pagination }; + return { ok: true, data: { templates }, ...pagination }; } return { loading: true }; } |