aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src/hooks
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-03-27 01:05:10 -0300
committerSebastian <sebasjm@gmail.com>2024-03-27 01:05:10 -0300
commit237c4e8adae997e84f5fb7a8fe5c03b1148e99dc (patch)
tree26ec2b1a82e730af080aae4625b736aaa77dfec7 /packages/merchant-backoffice-ui/src/hooks
parentecb8c2078ebe94d81a6e03ebfe01ecdde53109e2 (diff)
downloadwallet-core-237c4e8adae997e84f5fb7a8fe5c03b1148e99dc.tar.xz
wip #8655
Diffstat (limited to 'packages/merchant-backoffice-ui/src/hooks')
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/backend.ts10
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.test.ts37
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/instance.ts211
-rw-r--r--packages/merchant-backoffice-ui/src/hooks/templates.ts22
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 };
}