summaryrefslogtreecommitdiff
path: root/packages/demobank-ui/src/pages/OperationState/state.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/demobank-ui/src/pages/OperationState/state.ts')
-rw-r--r--packages/demobank-ui/src/pages/OperationState/state.ts143
1 files changed, 76 insertions, 67 deletions
diff --git a/packages/demobank-ui/src/pages/OperationState/state.ts b/packages/demobank-ui/src/pages/OperationState/state.ts
index 32a13d047..20d66bbb1 100644
--- a/packages/demobank-ui/src/pages/OperationState/state.ts
+++ b/packages/demobank-ui/src/pages/OperationState/state.ts
@@ -14,7 +14,16 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { Amounts, HttpStatusCode, TalerCoreBankErrorsByMethod, TalerError, parsePaytoUri, parseWithdrawUri, stringifyWithdrawUri } from "@gnu-taler/taler-util";
+import {
+ Amounts,
+ HttpStatusCode,
+ TalerCoreBankErrorsByMethod,
+ TalerError,
+ assertUnreachable,
+ parsePaytoUri,
+ parseWithdrawUri,
+ stringifyWithdrawUri,
+} from "@gnu-taler/taler-util";
import { utils } from "@gnu-taler/web-util/browser";
import { useEffect, useState } from "preact/hooks";
import { mutate } from "swr";
@@ -23,73 +32,80 @@ import { useWithdrawalDetails } from "../../hooks/access.js";
import { useBackendState } from "../../hooks/backend.js";
import { useBankState } from "../../hooks/bank-state.js";
import { usePreferences } from "../../hooks/preferences.js";
-import { assertUnreachable } from "../WithdrawalOperationPage.js";
import { Props, State } from "./index.js";
-export function useComponentState({ currency, onClose, onAuthorizationRequired, }: Props): utils.RecursiveState<State> {
- const [settings] = usePreferences()
+export function useComponentState({
+ currency,
+ routeClose,
+ onAbort,
+ onAuthorizationRequired,
+}: Props): utils.RecursiveState<State> {
+ const [settings] = usePreferences();
const [bankState, updateBankState] = useBankState();
- const { state: credentials } = useBackendState()
- const creds = credentials.status !== "loggedIn" ? undefined : credentials
- const { api } = useBankCoreApiContext()
+ const { state: credentials } = useBackendState();
+ const creds = credentials.status !== "loggedIn" ? undefined : credentials;
+ const { api } = useBankCoreApiContext();
- const [failure, setFailure] = useState<TalerCoreBankErrorsByMethod<"createWithdrawal"> | undefined>()
- const amount = settings.maxWithdrawalAmount
+ const [failure, setFailure] = useState<
+ TalerCoreBankErrorsByMethod<"createWithdrawal"> | undefined
+ >();
+ const amount = settings.maxWithdrawalAmount;
async function doSilentStart() {
- //FIXME: if amount is not enough use balance
- const parsedAmount = Amounts.parseOrThrow(`${currency}:${amount}`)
+ // FIXME: if amount is not enough use balance
+ const parsedAmount = Amounts.parseOrThrow(`${currency}:${amount}`);
if (!creds) return;
const resp = await api.createWithdrawal(creds, {
amount: Amounts.stringify(parsedAmount),
});
if (resp.type === "fail") {
- setFailure(resp)
+ setFailure(resp);
return;
}
- updateBankState("currentWithdrawalOperationId", resp.body.withdrawal_id)
-
+ updateBankState("currentWithdrawalOperationId", resp.body.withdrawal_id);
}
- const withdrawalOperationId = bankState.currentWithdrawalOperationId
+ const withdrawalOperationId = bankState.currentWithdrawalOperationId;
useEffect(() => {
if (withdrawalOperationId === undefined) {
- doSilentStart()
+ doSilentStart();
}
- }, [settings.fastWithdrawal, amount])
+ }, [settings.fastWithdrawal, amount]);
if (failure) {
return {
status: "failed",
- error: failure
- }
+ error: failure,
+ };
}
if (!withdrawalOperationId) {
return {
status: "loading",
- error: undefined
- }
+ error: undefined,
+ };
}
- const wid = withdrawalOperationId
+ const wid = withdrawalOperationId;
async function doAbort() {
if (!creds) return;
const resp = await api.abortWithdrawalById(creds, wid);
if (resp.type === "ok") {
- updateBankState("currentWithdrawalOperationId", undefined)
- onClose();
+ // updateBankState("currentWithdrawalOperationId", undefined)
+ onAbort();
} else {
return resp;
}
}
- async function doConfirm(): Promise<TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined> {
+ async function doConfirm(): Promise<
+ TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined
+ > {
if (!creds) return;
const resp = await api.confirmWithdrawalById(creds, wid);
if (resp.type === "ok") {
- mutate(() => true)//clean withdrawal state
+ mutate(() => true); //clean withdrawal state
} else {
return resp;
}
@@ -105,30 +121,29 @@ export function useComponentState({ currency, onClose, onAuthorizationRequired,
status: "invalid-withdrawal",
error: undefined,
uri,
- onClose,
- }
+ };
}
return (): utils.RecursiveState<State> => {
const result = useWithdrawalDetails(withdrawalOperationId);
- const shouldCreateNewOperation = result && !(result instanceof TalerError)
+ const shouldCreateNewOperation = result && !(result instanceof TalerError);
useEffect(() => {
if (shouldCreateNewOperation) {
- doSilentStart()
+ doSilentStart();
}
- }, [])
+ }, []);
if (!result) {
return {
status: "loading",
- error: undefined
- }
+ error: undefined,
+ };
}
if (result instanceof TalerError) {
return {
status: "loading-error",
- error: result
- }
+ error: result,
+ };
}
if (result.type === "fail") {
@@ -138,13 +153,11 @@ export function useComponentState({ currency, onClose, onAuthorizationRequired,
return {
status: "aborted",
error: undefined,
- onClose: async () => {
- updateBankState("currentWithdrawalOperationId", undefined)
- onClose()
- },
- }
+ routeClose,
+ };
}
- default: assertUnreachable(result)
+ default:
+ assertUnreachable(result);
}
}
@@ -153,26 +166,20 @@ export function useComponentState({ currency, onClose, onAuthorizationRequired,
return {
status: "aborted",
error: undefined,
- onClose: async () => {
- updateBankState("currentWithdrawalOperationId", undefined)
- onClose()
- },
- }
+ routeClose,
+ };
}
if (data.status === "confirmed") {
if (!settings.showWithdrawalSuccess) {
- updateBankState("currentWithdrawalOperationId", undefined)
- onClose()
+ updateBankState("currentWithdrawalOperationId", undefined);
+ // onClose()
}
return {
status: "confirmed",
error: undefined,
- onClose: async () => {
- updateBankState("currentWithdrawalOperationId", undefined)
- onClose()
- },
- }
+ routeClose,
+ };
}
if (data.status === "pending") {
@@ -180,11 +187,14 @@ export function useComponentState({ currency, onClose, onAuthorizationRequired,
status: "ready",
error: undefined,
uri: parsedUri,
- onClose: !creds ? (async () => {
- onClose();
- return undefined
- }) : doAbort,
- }
+ routeClose,
+ onAbort: !creds
+ ? async () => {
+ onAbort();
+ return undefined;
+ }
+ : doAbort,
+ };
}
if (!data.selected_reserve_pub) {
@@ -192,19 +202,19 @@ export function useComponentState({ currency, onClose, onAuthorizationRequired,
status: "invalid-reserve",
error: undefined,
reserve: data.selected_reserve_pub,
- onClose,
- }
+ };
}
- const account = !data.selected_exchange_account ? undefined : parsePaytoUri(data.selected_exchange_account)
+ const account = !data.selected_exchange_account
+ ? undefined
+ : parsePaytoUri(data.selected_exchange_account);
if (!account) {
return {
status: "invalid-payto",
error: undefined,
payto: data.selected_exchange_account,
- onClose,
- }
+ };
}
return {
@@ -214,8 +224,7 @@ export function useComponentState({ currency, onClose, onAuthorizationRequired,
account: data.username,
id: withdrawalOperationId,
onAbort: !creds ? undefined : doAbort,
- onConfirm: !creds ? undefined : doConfirm
- }
- }
-
+ onConfirm: !creds ? undefined : doConfirm,
+ };
+ };
}