summaryrefslogtreecommitdiff
path: root/packages/bank-ui/src/hooks/regional.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bank-ui/src/hooks/regional.ts')
-rw-r--r--packages/bank-ui/src/hooks/regional.ts97
1 files changed, 52 insertions, 45 deletions
diff --git a/packages/bank-ui/src/hooks/regional.ts b/packages/bank-ui/src/hooks/regional.ts
index 274638f74..e0c861a0f 100644
--- a/packages/bank-ui/src/hooks/regional.ts
+++ b/packages/bank-ui/src/hooks/regional.ts
@@ -14,10 +14,10 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { PAGE_SIZE } from "../utils.js";
import { useSessionState } from "./session.js";
import {
+ AbsoluteTime,
AccessToken,
AmountJson,
Amounts,
@@ -31,19 +31,21 @@ import {
TalerHttpError,
opFixedSuccess,
} from "@gnu-taler/taler-util";
+import { useBankCoreApiContext } from "@gnu-taler/web-util/browser";
import { useState } from "preact/hooks";
import _useSWR, { SWRHook, mutate } from "swr";
-import { useBankCoreApiContext } from "@gnu-taler/web-util/browser";
+import { buildPaginatedResult } from "./account.js";
+import { PAGINATED_LIST_REQUEST } from "../utils.js";
// FIX default import https://github.com/microsoft/TypeScript/issues/49189
const useSWR = _useSWR as unknown as SWRHook;
export type TransferCalculation =
| {
- debit: AmountJson;
- credit: AmountJson;
- beforeFee: AmountJson;
- }
+ debit: AmountJson;
+ credit: AmountJson;
+ beforeFee: AmountJson;
+ }
| "amount-is-too-small";
type EstimatorFunction = (
amount: AmountJson,
@@ -62,7 +64,10 @@ export function revalidateConversionInfo() {
);
}
export function useConversionInfo() {
- const { lib: { conversion }, config } = useBankCoreApiContext();
+ const {
+ lib: { conversion },
+ config,
+ } = useBankCoreApiContext();
async function fetcher() {
return await conversion.getConfig();
@@ -88,7 +93,9 @@ export function useConversionInfo() {
}
export function useCashinEstimator(): ConversionEstimators {
- const { lib: { conversion } } = useBankCoreApiContext();
+ const {
+ lib: { conversion },
+ } = useBankCoreApiContext();
return {
estimateByCredit: async (fiatAmount, fee) => {
const resp = await conversion.getCashinRate({
@@ -144,7 +151,9 @@ export function useCashinEstimator(): ConversionEstimators {
}
export function useCashoutEstimator(): ConversionEstimators {
- const { lib: { conversion } } = useBankCoreApiContext();
+ const {
+ lib: { conversion },
+ } = useBankCoreApiContext();
return {
estimateByCredit: async (fiatAmount, fee) => {
const resp = await conversion.getCashoutRate({
@@ -217,18 +226,20 @@ export function useBusinessAccounts() {
const { state: credentials } = useSessionState();
const token =
credentials.status !== "loggedIn" ? undefined : credentials.token;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ } = useBankCoreApiContext();
const [offset, setOffset] = useState<number | undefined>();
- function fetcher([token, offset]: [AccessToken, number]) {
+ function fetcher([token, aid]: [AccessToken, number]) {
// FIXME: add account name filter
return api.getAccounts(
token,
{},
{
- limit: PAGE_SIZE + 1,
- offset: String(offset),
+ limit: PAGINATED_LIST_REQUEST,
+ offset: aid ? String(aid) : undefined,
order: "asc",
},
);
@@ -249,31 +260,17 @@ export function useBusinessAccounts() {
keepPreviousData: true,
});
- const isLastPage =
- data && data.type === "ok" && data.body.accounts.length <= PAGE_SIZE;
- const isFirstPage = !offset;
-
- const result =
- data && data.type == "ok" ? structuredClone(data.body.accounts) : [];
- if (result.length == PAGE_SIZE + 1) {
- result.pop();
- }
- const pagination = {
- result,
- isLastPage,
- isFirstPage,
- loadNext: () => {
- if (!result.length) return;
- setOffset(result[result.length - 1].row_id);
- },
- loadFirst: () => {
- setOffset(0);
- },
- };
-
- if (data) return { ok: true, data, ...pagination };
if (error) return error;
- return undefined;
+ if (data === undefined) return undefined;
+ if (data.type !== "ok") return data;
+
+ //TODO: row_id should not be optional
+ return buildPaginatedResult(
+ data.body.accounts,
+ offset,
+ setOffset,
+ (d) => d.row_id ?? 0,
+ );
}
type CashoutWithId = TalerCorebankApi.CashoutStatusResponse & { id: number };
@@ -290,7 +287,10 @@ export function revalidateOnePendingCashouts() {
}
export function useOnePendingCashouts(account: string) {
const { state: credentials } = useSessionState();
- const { lib: { bank: api }, config } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ config,
+ } = useBankCoreApiContext();
const token =
credentials.status !== "loggedIn" ? undefined : credentials.token;
@@ -350,7 +350,10 @@ export function revalidateCashouts() {
}
export function useCashouts(account: string) {
const { state: credentials } = useSessionState();
- const { lib: { bank: api }, config } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ config,
+ } = useBankCoreApiContext();
const token =
credentials.status !== "loggedIn" ? undefined : credentials.token;
@@ -406,7 +409,9 @@ export function revalidateCashoutDetails() {
export function useCashoutDetails(cashoutId: number | undefined) {
const { state: credentials } = useSessionState();
const creds = credentials.status !== "loggedIn" ? undefined : credentials;
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ } = useBankCoreApiContext();
async function fetcher([username, token, id]: [string, AccessToken, number]) {
return api.getCashoutById({ username, token }, id);
@@ -455,11 +460,13 @@ export function revalidateLastMonitorInfo() {
);
}
export function useLastMonitorInfo(
- currentMoment: number,
- previousMoment: number,
+ currentMoment: AbsoluteTime,
+ previousMoment: AbsoluteTime,
timeframe: TalerCorebankApi.MonitorTimeframeParam,
) {
- const { lib: { bank: api } } = useBankCoreApiContext();
+ const {
+ lib: { bank: api },
+ } = useBankCoreApiContext();
const { state: credentials } = useSessionState();
const token =
credentials.status !== "loggedIn" ? undefined : credentials.token;
@@ -469,8 +476,8 @@ export function useLastMonitorInfo(
TalerCorebankApi.MonitorTimeframeParam,
]) {
const [current, previous] = await Promise.all([
- api.getMonitor(token, { timeframe, which: currentMoment }),
- api.getMonitor(token, { timeframe, which: previousMoment }),
+ api.getMonitor(token, { timeframe, date: currentMoment }),
+ api.getMonitor(token, { timeframe, date: previousMoment }),
]);
return {
current,