aboutsummaryrefslogtreecommitdiff
path: root/packages/aml-backoffice-ui/src/hooks/useCases.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-11-05 18:04:22 -0300
committerSebastian <sebasjm@gmail.com>2023-11-05 18:04:22 -0300
commitb58d53dd93bd8e97aecc28fae788c5c7051fd73d (patch)
tree7a402fafa4ae19a64f10eeb3042147f5f4733081 /packages/aml-backoffice-ui/src/hooks/useCases.ts
parent31cf3187e447e2c4ec8a473362c5bacc07a874f1 (diff)
downloadwallet-core-b58d53dd93bd8e97aecc28fae788c5c7051fd73d.tar.xz
sharing components in web-util
Diffstat (limited to 'packages/aml-backoffice-ui/src/hooks/useCases.ts')
-rw-r--r--packages/aml-backoffice-ui/src/hooks/useCases.ts126
1 files changed, 55 insertions, 71 deletions
diff --git a/packages/aml-backoffice-ui/src/hooks/useCases.ts b/packages/aml-backoffice-ui/src/hooks/useCases.ts
index c07bd5f18..2a133f46d 100644
--- a/packages/aml-backoffice-ui/src/hooks/useCases.ts
+++ b/packages/aml-backoffice-ui/src/hooks/useCases.ts
@@ -1,16 +1,13 @@
-import { useEffect, useState } from "preact/hooks";
+import { useState } from "preact/hooks";
-import { AmlExchangeBackend } from "../types.js";
import {
- HttpResponse,
- HttpResponseOk,
- HttpResponsePaginated,
- RequestError,
+ HttpResponsePaginated
} from "@gnu-taler/web-util/browser";
+import { AmlExchangeBackend } from "../types.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
+import { AmountString, OfficerAccount, TalerExchangeApi, TalerExchangeResultByMethod, TalerHttpError } from "@gnu-taler/taler-util";
import _useSWR, { SWRHook } from "swr";
-import { usePublicBackend } from "./useBackend.js";
-import { AccountId, buildQuerySignature } from "../account.js";
+import { useExchangeApiContext } from "../context/config.js";
import { useOfficer } from "./useOfficer.js";
const useSWR = _useSWR as unknown as SWRHook;
@@ -22,59 +19,49 @@ const MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1;
* @param args
* @returns
*/
-export function useCases(
- account: AccountId,
- state: AmlExchangeBackend.AmlState,
- signature: string | undefined,
-): HttpResponsePaginated<
- AmlExchangeBackend.AmlRecords,
- AmlExchangeBackend.AmlError
-> {
- const { paginatedFetcher } = usePublicBackend();
+export function useCases(state: AmlExchangeBackend.AmlState) {
+ const officer = useOfficer();
+ const session = officer.state === "ready" ? officer.account : undefined;
+ const { api } = useExchangeApiContext();
- const [page, setPage] = useState(1);
+ const [offset, setOffet] = useState<string>();
+
+ async function fetcher([officer, state, offset]: [OfficerAccount, AmlExchangeBackend.AmlState, string | undefined]) {
+ return await api.getDecisionsByState(officer, state, {
+ order: "asc", offset, limit: MAX_RESULT_SIZE
+ })
+ }
- const {
- data: afterData,
- error: afterError,
- isValidating: loadingAfter,
- } = useSWR<
- HttpResponseOk<AmlExchangeBackend.AmlRecords>,
- RequestError<AmlExchangeBackend.AmlError>
- >(
- [
- `aml/${account}/decisions/${AmlExchangeBackend.AmlState[state]}`,
- page,
- PAGE_SIZE,
- signature,
- ],
- paginatedFetcher,
+ const { data, error } = useSWR<TalerExchangeResultByMethod<"getDecisionsByState">, TalerHttpError>(
+ !session ? undefined : [session, state, offset],
+ fetcher,
);
- const [lastAfter, setLastAfter] = useState<
- HttpResponse<AmlExchangeBackend.AmlRecords, AmlExchangeBackend.AmlError>
- >({ loading: true });
+ // const [lastAfter, setLastAfter] = useState<
+ // HttpResponse<AmlExchangeBackend.AmlRecords, AmlExchangeBackend.AmlError>
+ // >({ loading: true });
- useEffect(() => {
- if (afterData) setLastAfter(afterData);
- }, [afterData]);
+ // useEffect(() => {
+ // if (afterData) setLastAfter(afterData);
+ // }, [afterData]);
- if (afterError) {
- return afterError.cause;
- }
+ // if (afterError) {
+ // return afterError.cause;
+ // }
// if the query returns less that we ask, then we have reach the end or beginning
- const isReachingEnd =
- afterData && afterData.data && afterData.data.records.length < PAGE_SIZE;
- const isReachingStart = false;
+ const isLastPage =
+ data && data.type === "ok" && data.body.records.length < PAGE_SIZE;
+ const isFirstPage = !offset;
const pagination = {
- isReachingEnd,
- isReachingStart,
+ isLastPage,
+ isFirstPage,
loadMore: () => {
- if (!afterData || isReachingEnd) return;
- if (afterData.data && afterData.data.records.length < MAX_RESULT_SIZE) {
- setPage(page + 1);
+ if (isLastPage || data?.type !== "ok") return;
+ const list = data.body.records
+ if (list.length < MAX_RESULT_SIZE) {
+ // setOffset(list[list.length-1].account_name);
}
},
loadMorePrev: () => {
@@ -82,65 +69,62 @@ export function useCases(
},
};
- const records = !afterData
- ? []
- : ((afterData ?? lastAfter).data ?? { records: [] }).records;
- if (loadingAfter) return { loading: true, data: { records } };
- if (afterData) {
- return { ok: true, data: { records }, ...pagination };
+ // const public_accountslist = data?.type !== "ok" ? [] : data.body.public_accounts;
+ if (data) {
+ if (data.type === "fail") {
+ return { data }
+ }
+ return { data, pagination }
+ }
+ if (error) {
+ return error;
}
- return { loading: true };
+ return undefined;
}
-const example1: AmlExchangeBackend.AmlRecords = {
+const example1: TalerExchangeApi.AmlRecords = {
records: [
{
current_state: 0,
h_payto: "QWEQWEQWEQWEWQE",
rowid: 1,
- threshold: "USD 100",
+ threshold: "USD 100" as AmountString,
},
{
current_state: 1,
h_payto: "ASDASDASD",
rowid: 1,
- threshold: "USD 100",
+ threshold: "USD 100" as AmountString,
},
{
current_state: 2,
h_payto: "ZXCZXCZXCXZC",
rowid: 1,
- threshold: "USD 1000",
+ threshold: "USD 1000" as AmountString,
},
{
current_state: 0,
h_payto: "QWEQWEQWEQWEWQE",
rowid: 1,
- threshold: "USD 100",
+ threshold: "USD 100" as AmountString,
},
{
current_state: 1,
h_payto: "ASDASDASD",
rowid: 1,
- threshold: "USD 100",
+ threshold: "USD 100" as AmountString,
},
{
current_state: 2,
h_payto: "ZXCZXCZXCXZC",
rowid: 1,
- threshold: "USD 1000",
+ threshold: "USD 1000" as AmountString,
},
].map((e, idx) => {
e.rowid = idx;
- e.threshold = `${e.threshold}${idx}`;
+ e.threshold = `${e.threshold}${idx}` as AmountString;
return e;
}),
};
-export const exampleResponse: HttpResponsePaginated<AmlExchangeBackend.AmlRecords,AmlExchangeBackend.AmlError> = {
- ok: true,
- data: example1,
- loadMore: () => {},
- loadMorePrev: () => {},
-}