aboutsummaryrefslogtreecommitdiff
path: root/packages/demobank-ui/src/pages
diff options
context:
space:
mode:
Diffstat (limited to 'packages/demobank-ui/src/pages')
-rw-r--r--packages/demobank-ui/src/pages/AccountPage/index.ts42
-rw-r--r--packages/demobank-ui/src/pages/AccountPage/views.tsx4
-rw-r--r--packages/demobank-ui/src/pages/BankFrame.tsx6
-rw-r--r--packages/demobank-ui/src/pages/DownloadStats.tsx4
-rw-r--r--packages/demobank-ui/src/pages/LoginForm.tsx4
-rw-r--r--packages/demobank-ui/src/pages/OperationState/index.ts26
-rw-r--r--packages/demobank-ui/src/pages/OperationState/state.ts8
-rw-r--r--packages/demobank-ui/src/pages/OperationState/views.tsx5
-rw-r--r--packages/demobank-ui/src/pages/PaymentOptions.tsx13
-rw-r--r--packages/demobank-ui/src/pages/PaytoWireTransferForm.tsx43
-rw-r--r--packages/demobank-ui/src/pages/ProfileNavigation.tsx10
-rw-r--r--packages/demobank-ui/src/pages/RegistrationPage.tsx6
-rw-r--r--packages/demobank-ui/src/pages/SolveChallengePage.tsx11
-rw-r--r--packages/demobank-ui/src/pages/WalletWithdrawForm.tsx5
-rw-r--r--packages/demobank-ui/src/pages/WireTransfer.tsx17
-rw-r--r--packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx4
-rw-r--r--packages/demobank-ui/src/pages/WithdrawalOperationPage.tsx5
-rw-r--r--packages/demobank-ui/src/pages/WithdrawalQRCode.tsx7
-rw-r--r--packages/demobank-ui/src/pages/account/CashoutListForAccount.tsx13
-rw-r--r--packages/demobank-ui/src/pages/account/ShowAccountDetails.tsx13
-rw-r--r--packages/demobank-ui/src/pages/account/UpdateAccountPassword.tsx17
-rw-r--r--packages/demobank-ui/src/pages/admin/AccountList.tsx2
-rw-r--r--packages/demobank-ui/src/pages/admin/AdminHome.tsx22
-rw-r--r--packages/demobank-ui/src/pages/admin/CreateNewAccount.tsx2
-rw-r--r--packages/demobank-ui/src/pages/admin/RemoveAccount.tsx5
-rw-r--r--packages/demobank-ui/src/pages/business/CreateCashout.tsx5
-rw-r--r--packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx2
27 files changed, 194 insertions, 107 deletions
diff --git a/packages/demobank-ui/src/pages/AccountPage/index.ts b/packages/demobank-ui/src/pages/AccountPage/index.ts
index 6c67f6d90..7a85f59fe 100644
--- a/packages/demobank-ui/src/pages/AccountPage/index.ts
+++ b/packages/demobank-ui/src/pages/AccountPage/index.ts
@@ -33,13 +33,21 @@ export interface Props {
onOperationCreated: (wopid: string) => void;
onClose: () => void;
tab: "charge-wallet" | "wire-transfer" | undefined;
- routeClose: RouteDefinition<Record<string, never>>;
- routeChargeWallet: RouteDefinition<Record<string, never>>;
- routeWireTransfer: RouteDefinition<Record<string, never>>;
- routePublicAccounts: RouteDefinition<Record<string, never>>;
- routeCreateWireTransfer: RouteDefinition<{ destination: string }>;
+ routeClose: RouteDefinition;
+ routeChargeWallet: RouteDefinition;
+ routeWireTransfer: RouteDefinition<{
+ account?: string;
+ subject?: string;
+ amount?: string;
+ }>;
+ routePublicAccounts: RouteDefinition;
+ routeCreateWireTransfer: RouteDefinition<{
+ account?: string;
+ subject?: string;
+ amount?: string;
+ }>;
routeOperationDetails: RouteDefinition<{ wopid: string }>;
- routeSolveSecondFactor: RouteDefinition<Record<string, never>>;
+ routeSolveSecondFactor: RouteDefinition;
}
export type State =
@@ -73,13 +81,21 @@ export namespace State {
onAuthorizationRequired: () => void;
onOperationCreated: (wopid: string) => void;
onClose: () => void;
- routeClose: RouteDefinition<Record<string, never>>;
- routeChargeWallet: RouteDefinition<Record<string, never>>;
- routeWireTransfer: RouteDefinition<Record<string, never>>;
- routePublicAccounts: RouteDefinition<Record<string, never>>;
- routeCreateWireTransfer: RouteDefinition<{ destination: string }>;
+ routeClose: RouteDefinition;
+ routeChargeWallet: RouteDefinition;
+ routePublicAccounts: RouteDefinition;
+ routeWireTransfer: RouteDefinition<{
+ account?: string,
+ subject?: string,
+ amount?: string,
+ }>;
+ routeCreateWireTransfer: RouteDefinition<{
+ account?: string,
+ subject?: string,
+ amount?: string,
+ }>;
routeOperationDetails: RouteDefinition<{ wopid: string }>;
- routeSolveSecondFactor: RouteDefinition<Record<string, never>>;
+ routeSolveSecondFactor: RouteDefinition;
}
export interface InvalidIban {
@@ -90,7 +106,7 @@ export namespace State {
export interface UserNotFound {
status: "login";
reason: "not-found" | "forbidden";
- routeRegister?: RouteDefinition<Record<string, never>>;
+ routeRegister?: RouteDefinition;
}
}
diff --git a/packages/demobank-ui/src/pages/AccountPage/views.tsx b/packages/demobank-ui/src/pages/AccountPage/views.tsx
index 4f411940f..cb98c5f2a 100644
--- a/packages/demobank-ui/src/pages/AccountPage/views.tsx
+++ b/packages/demobank-ui/src/pages/AccountPage/views.tsx
@@ -33,7 +33,7 @@ export function InvalidIbanView({ error }: State.InvalidIban) {
const IS_PUBLIC_ACCOUNT_ENABLED = false;
function ShowDemoInfo({ routePublicAccounts }: {
- routePublicAccounts: RouteDefinition<Record<string, never>>;
+ routePublicAccounts: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const [settings, updateSettings] = usePreferences();
@@ -63,7 +63,7 @@ function ShowDemoInfo({ routePublicAccounts }: {
}
function ShowPedingOperation({ routeSolveSecondFactor }: {
- routeSolveSecondFactor: RouteDefinition<Record<string, never>>;
+ routeSolveSecondFactor: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const [bankState, updateBankState] = useBankState();
diff --git a/packages/demobank-ui/src/pages/BankFrame.tsx b/packages/demobank-ui/src/pages/BankFrame.tsx
index 266eab636..436076ba4 100644
--- a/packages/demobank-ui/src/pages/BankFrame.tsx
+++ b/packages/demobank-ui/src/pages/BankFrame.tsx
@@ -36,8 +36,8 @@ import {
getLabelForPreferences,
usePreferences,
} from "../hooks/preferences.js";
-import { RenderAmount } from "./PaytoWireTransferForm.js";
import { RouteDefinition } from "../route.js";
+import { RenderAmount } from "./PaytoWireTransferForm.js";
const GIT_HASH = typeof __GIT_HASH__ !== "undefined" ? __GIT_HASH__ : undefined;
const VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : undefined;
@@ -48,7 +48,7 @@ export function BankFrame({
routeAccountDetails,
}: {
account?: string;
- routeAccountDetails?: RouteDefinition<Record<string, never>>;
+ routeAccountDetails?: RouteDefinition;
children: ComponentChildren;
}): VNode {
const { i18n } = useTranslationContext();
@@ -179,7 +179,7 @@ export function BankFrame({
function WelcomeAccount({ account, routeAccountDetails }: {
account: string,
- routeAccountDetails: RouteDefinition<Record<string, never>>;
+ routeAccountDetails: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const result = useAccountDetails(account);
diff --git a/packages/demobank-ui/src/pages/DownloadStats.tsx b/packages/demobank-ui/src/pages/DownloadStats.tsx
index 9bdc04123..353238c13 100644
--- a/packages/demobank-ui/src/pages/DownloadStats.tsx
+++ b/packages/demobank-ui/src/pages/DownloadStats.tsx
@@ -31,11 +31,11 @@ import { VNode, h } from "preact";
import { useState } from "preact/hooks";
import { useBankCoreApiContext } from "../context/config.js";
import { useBackendState } from "../hooks/backend.js";
-import { RouteDefinition } from "../route.js";
+import { EmptyObject, RouteDefinition } from "../route.js";
import { getTimeframesForDate } from "./admin/AdminHome.js";
interface Props {
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
}
type Options = {
diff --git a/packages/demobank-ui/src/pages/LoginForm.tsx b/packages/demobank-ui/src/pages/LoginForm.tsx
index 6d732f5e8..f90b985e6 100644
--- a/packages/demobank-ui/src/pages/LoginForm.tsx
+++ b/packages/demobank-ui/src/pages/LoginForm.tsx
@@ -31,7 +31,7 @@ import { useBankCoreApiContext } from "../context/config.js";
import { useBackendState } from "../hooks/backend.js";
import { undefinedIfEmpty } from "../utils.js";
import { doAutoFocus } from "./PaytoWireTransferForm.js";
-import { RouteDefinition } from "../route.js";
+import { EmptyObject, RouteDefinition } from "../route.js";
/**
* Collect and submit login data.
@@ -43,7 +43,7 @@ export function LoginForm({
}: {
fixedUser?: boolean;
currentUser?: string;
- routeRegister?: RouteDefinition<Record<string, never>>;
+ routeRegister?: RouteDefinition;
}): VNode {
const backend = useBackendState();
diff --git a/packages/demobank-ui/src/pages/OperationState/index.ts b/packages/demobank-ui/src/pages/OperationState/index.ts
index 20cb1760f..e4d9d45e3 100644
--- a/packages/demobank-ui/src/pages/OperationState/index.ts
+++ b/packages/demobank-ui/src/pages/OperationState/index.ts
@@ -39,8 +39,9 @@ import { RouteDefinition } from "../../route.js";
export interface Props {
currency: string;
onAuthorizationRequired: () => void;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
onAbort: () => void;
+ routeHere: RouteDefinition<{ wopid: string }>;
}
export type State =
@@ -81,7 +82,7 @@ export namespace State {
onAbort: () => Promise<
TalerCoreBankErrorsByMethod<"abortWithdrawalById"> | undefined
>;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
}
export interface InvalidPayto {
@@ -103,28 +104,29 @@ export namespace State {
status: "need-confirmation";
onAuthorizationRequired: () => void;
account: string;
+ routeHere: RouteDefinition<{ wopid: string }>;
onAbort:
- | undefined
- | (() => Promise<
- TalerCoreBankErrorsByMethod<"abortWithdrawalById"> | undefined
- >);
+ | undefined
+ | (() => Promise<
+ TalerCoreBankErrorsByMethod<"abortWithdrawalById"> | undefined
+ >);
onConfirm:
- | undefined
- | (() => Promise<
- TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined
- >);
+ | undefined
+ | (() => Promise<
+ TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined
+ >);
error: undefined;
id: string;
}
export interface Aborted {
status: "aborted";
error: undefined;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
}
export interface Confirmed {
status: "confirmed";
error: undefined;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
}
}
diff --git a/packages/demobank-ui/src/pages/OperationState/state.ts b/packages/demobank-ui/src/pages/OperationState/state.ts
index 20d66bbb1..ad2d91ee4 100644
--- a/packages/demobank-ui/src/pages/OperationState/state.ts
+++ b/packages/demobank-ui/src/pages/OperationState/state.ts
@@ -38,6 +38,7 @@ export function useComponentState({
currency,
routeClose,
onAbort,
+ routeHere,
onAuthorizationRequired,
}: Props): utils.RecursiveState<State> {
const [settings] = usePreferences();
@@ -190,9 +191,9 @@ export function useComponentState({
routeClose,
onAbort: !creds
? async () => {
- onAbort();
- return undefined;
- }
+ onAbort();
+ return undefined;
+ }
: doAbort,
};
}
@@ -220,6 +221,7 @@ export function useComponentState({
return {
status: "need-confirmation",
error: undefined,
+ routeHere,
onAuthorizationRequired,
account: data.username,
id: withdrawalOperationId,
diff --git a/packages/demobank-ui/src/pages/OperationState/views.tsx b/packages/demobank-ui/src/pages/OperationState/views.tsx
index d086c3dd1..6eee6daa9 100644
--- a/packages/demobank-ui/src/pages/OperationState/views.tsx
+++ b/packages/demobank-ui/src/pages/OperationState/views.tsx
@@ -51,6 +51,7 @@ export function InvalidReserveView({ reserve }: State.InvalidReserve) {
export function NeedConfirmationView({
onAbort: doAbort,
onConfirm: doConfirm,
+ routeHere,
account,
id,
onAuthorizationRequired,
@@ -144,7 +145,9 @@ export function NeedConfirmationView({
operation: "confirm-withdrawal",
id: String(resp.body.challenge_id),
sent: AbsoluteTime.never(),
+ location: routeHere.url({ wopid: id }),
request: id,
+
});
return onAuthorizationRequired();
}
@@ -331,7 +334,7 @@ export function ConfirmedView({ routeClose }: State.Confirmed) {
export function ReadyView({
uri,
onAbort: doAbort,
-}: State.Ready): VNode<Record<string, never>> {
+}: State.Ready): VNode {
const { i18n } = useTranslationContext();
const walletInegrationApi = useTalerWalletIntegrationAPI();
const [notification, notify, errorHandler] = useLocalNotification();
diff --git a/packages/demobank-ui/src/pages/PaymentOptions.tsx b/packages/demobank-ui/src/pages/PaymentOptions.tsx
index 10be1245f..b13f7539f 100644
--- a/packages/demobank-ui/src/pages/PaymentOptions.tsx
+++ b/packages/demobank-ui/src/pages/PaymentOptions.tsx
@@ -19,7 +19,7 @@ import { Fragment, VNode, h } from "preact";
import { useBankState } from "../hooks/bank-state.js";
import { PaytoWireTransferForm } from "./PaytoWireTransferForm.js";
import { WalletWithdrawForm } from "./WalletWithdrawForm.js";
-import { RouteDefinition } from "../route.js";
+import { EmptyObject, RouteDefinition } from "../route.js";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { useWithdrawalDetails } from "../hooks/access.js";
import { useEffect } from "preact/hooks";
@@ -85,9 +85,13 @@ export function PaymentOptions({
onClose: () => void;
routeOperationDetails: RouteDefinition<{ wopid: string }>;
- routeClose: RouteDefinition<Record<string, never>>;
- routeChargeWallet: RouteDefinition<Record<string, never>>;
- routeWireTransfer: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
+ routeChargeWallet: RouteDefinition;
+ routeWireTransfer: RouteDefinition<{
+ account?: string,
+ subject?: string,
+ amount?: string,
+ }>;
}): VNode {
const { i18n } = useTranslationContext();
const [bankState, updateBankState] = useBankState();
@@ -213,6 +217,7 @@ export function PaymentOptions({
<PaytoWireTransferForm
focus
title={i18n.str`Transfer details`}
+ routeHere={routeWireTransfer}
limit={limit}
onAuthorizationRequired={onAuthorizationRequired}
onSuccess={onClose}
diff --git a/packages/demobank-ui/src/pages/PaytoWireTransferForm.tsx b/packages/demobank-ui/src/pages/PaytoWireTransferForm.tsx
index 9fe3453a5..00b6767ac 100644
--- a/packages/demobank-ui/src/pages/PaytoWireTransferForm.tsx
+++ b/packages/demobank-ui/src/pages/PaytoWireTransferForm.tsx
@@ -45,35 +45,47 @@ import { mutate } from "swr";
import { useBankCoreApiContext } from "../context/config.js";
import { useBackendState } from "../hooks/backend.js";
import { useBankState } from "../hooks/bank-state.js";
-import { RouteDefinition } from "../route.js";
+import { EmptyObject, RouteDefinition } from "../route.js";
import { undefinedIfEmpty, validateIBAN, validateTalerBank } from "../utils.js";
+interface Props {
+ title: TranslatedString;
+ focus?: boolean;
+ withAccount?: string;
+ withSubject?: string;
+ withAmount?: string;
+ onSuccess: () => void;
+ onAuthorizationRequired: () => void;
+ routeCancel?: RouteDefinition;
+ routeHere: RouteDefinition<{
+ account?: string,
+ subject?: string,
+ amount?: string,
+ }>;
+ limit: AmountJson;
+}
+
export function PaytoWireTransferForm({
focus,
title,
- toAccount,
+ withAccount,
+ withSubject,
+ withAmount,
onSuccess,
routeCancel,
+ routeHere,
onAuthorizationRequired,
limit,
-}: {
- title: TranslatedString;
- focus?: boolean;
- toAccount?: string;
- onSuccess: () => void;
- onAuthorizationRequired: () => void;
- routeCancel?: RouteDefinition<Record<string, never>>;
- limit: AmountJson;
-}): VNode {
+}: Props): VNode {
const [isRawPayto, setIsRawPayto] = useState(false);
const { state: credentials } = useBackendState();
const { api, config, url } = useBankCoreApiContext();
- const sendingToFixedAccount = toAccount !== undefined;
+ const sendingToFixedAccount = withAccount !== undefined;
- const [account, setAccount] = useState<string | undefined>(toAccount);
- const [subject, setSubject] = useState<string | undefined>();
- const [amount, setAmount] = useState<string | undefined>();
+ const [account, setAccount] = useState<string | undefined>(withAccount);
+ const [subject, setSubject] = useState<string | undefined>(withSubject);
+ const [amount, setAmount] = useState<string | undefined>(withAmount);
const [, updateBankState] = useBankState();
const [rawPaytoInput, rawPaytoInputSetter] = useState<string | undefined>(
@@ -200,6 +212,7 @@ export function PaytoWireTransferForm({
updateBankState("currentChallenge", {
operation: "create-transaction",
id: String(resp.body.challenge_id),
+ location: routeHere.url({ account: account ?? "", amount, subject }),
sent: AbsoluteTime.never(),
request,
});
diff --git a/packages/demobank-ui/src/pages/ProfileNavigation.tsx b/packages/demobank-ui/src/pages/ProfileNavigation.tsx
index 7c52f4eaa..ba02d07b9 100644
--- a/packages/demobank-ui/src/pages/ProfileNavigation.tsx
+++ b/packages/demobank-ui/src/pages/ProfileNavigation.tsx
@@ -19,7 +19,7 @@ import { useBankCoreApiContext } from "../context/config.js";
import { useBackendState } from "../hooks/backend.js";
import { assertUnreachable } from "@gnu-taler/taler-util";
import { useNavigationContext } from "../context/navigation.js";
-import { RouteDefinition } from "../route.js";
+import { EmptyObject, RouteDefinition } from "../route.js";
export function ProfileNavigation({
current,
@@ -29,10 +29,10 @@ export function ProfileNavigation({
routeMyAccountPassword,
}: {
current: "details" | "delete" | "credentials" | "cashouts",
- routeMyAccountDetails: RouteDefinition<Record<string, never>>;
- routeMyAccountDelete: RouteDefinition<Record<string, never>>;
- routeMyAccountPassword: RouteDefinition<Record<string, never>>;
- routeMyAccountCashout: RouteDefinition<Record<string, never>>;
+ routeMyAccountDetails: RouteDefinition;
+ routeMyAccountDelete: RouteDefinition;
+ routeMyAccountPassword: RouteDefinition;
+ routeMyAccountCashout: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const { config } = useBankCoreApiContext();
diff --git a/packages/demobank-ui/src/pages/RegistrationPage.tsx b/packages/demobank-ui/src/pages/RegistrationPage.tsx
index 29e71413c..87e284411 100644
--- a/packages/demobank-ui/src/pages/RegistrationPage.tsx
+++ b/packages/demobank-ui/src/pages/RegistrationPage.tsx
@@ -30,7 +30,7 @@ import { Fragment, VNode, h } from "preact";
import { useState } from "preact/hooks";
import { useBankCoreApiContext } from "../context/config.js";
import { useSettingsContext } from "../context/settings.js";
-import { RouteDefinition } from "../route.js";
+import { EmptyObject, RouteDefinition } from "../route.js";
import { undefinedIfEmpty } from "../utils.js";
import { getRandomPassword, getRandomUsername } from "./rnd.js";
@@ -39,7 +39,7 @@ export function RegistrationPage({
routeCancel,
}: {
onRegistrationSuccesful: (user: string, password: string) => void;
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const { config } = useBankCoreApiContext();
@@ -68,7 +68,7 @@ function RegistrationForm({
routeCancel,
}: {
onRegistrationSuccesful: (user: string, password: string) => void;
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
}): VNode {
const [username, setUsername] = useState<string | undefined>();
const [name, setName] = useState<string | undefined>();
diff --git a/packages/demobank-ui/src/pages/SolveChallengePage.tsx b/packages/demobank-ui/src/pages/SolveChallengePage.tsx
index 5ac622795..b7fc82a94 100644
--- a/packages/demobank-ui/src/pages/SolveChallengePage.tsx
+++ b/packages/demobank-ui/src/pages/SolveChallengePage.tsx
@@ -46,13 +46,14 @@ import { RouteDefinition } from "../route.js";
import { undefinedIfEmpty } from "../utils.js";
import { RenderAmount } from "./PaytoWireTransferForm.js";
import { OperationNotFound } from "./WithdrawalQRCode.js";
+import { useNavigationContext } from "../context/navigation.js";
export function SolveChallengePage({
onChallengeCompleted,
routeClose,
}: {
onChallengeCompleted: () => void;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
}): VNode {
const { api } = useBankCoreApiContext();
const { i18n } = useTranslationContext();
@@ -61,6 +62,7 @@ export function SolveChallengePage({
const [notification, notify, handleError] = useLocalNotification();
const { state } = useBackendState();
const creds = state.status !== "loggedIn" ? undefined : state;
+ const { navigateTo } = useNavigationContext();
if (!bankState.currentChallenge) {
return (
@@ -209,6 +211,7 @@ export function SolveChallengePage({
updateBankState("currentChallenge", {
operation: ch.operation,
id: String(resp.body.challenge_id),
+ location: ch.location,
sent: AbsoluteTime.never(),
request: ch.request,
});
@@ -262,7 +265,7 @@ export function SolveChallengePage({
onStart={startChallenge}
onCancel={() => {
updateBankState("currentChallenge", undefined);
- onChallengeCompleted();
+ navigateTo(ch.location)
}}
/>
{ch.info && (
@@ -304,7 +307,7 @@ export function SolveChallengePage({
</div>
</div>
<div class="flex items-center justify-between border-gray-900/10 px-4 py-4 ">
- <div />
+ <div />
<button
type="submit"
name="confirm"
@@ -344,7 +347,7 @@ function ChallengeDetails({
if (firstTime) {
onStart()
}
- },[])
+ }, [])
return (
<div class="px-4 mt-4 ">
<div class="w-full">
diff --git a/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx b/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx
index ecb3eb4fc..078f4e5f5 100644
--- a/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx
+++ b/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx
@@ -54,7 +54,7 @@ function OldWithdrawalForm({
focus?: boolean;
routeOperationDetails: RouteDefinition<{ wopid: string }>,
onOperationCreated: (wopid: string) => void;
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const [settings] = usePreferences();
@@ -300,7 +300,7 @@ export function WalletWithdrawForm({
onAuthorizationRequired: () => void;
onOperationCreated: (wopid: string) => void;
onOperationAborted: () => void;
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
}): VNode {
const { i18n } = useTranslationContext();
const [settings, updateSettings] = usePreferences();
@@ -355,6 +355,7 @@ export function WalletWithdrawForm({
currency={limit.currency}
onAuthorizationRequired={onAuthorizationRequired}
routeClose={routeCancel}
+ routeHere={routeOperationDetails}
onAbort={onOperationAborted}
// route={routeCancel}
/>
diff --git a/packages/demobank-ui/src/pages/WireTransfer.tsx b/packages/demobank-ui/src/pages/WireTransfer.tsx
index 190afd66e..927968304 100644
--- a/packages/demobank-ui/src/pages/WireTransfer.tsx
+++ b/packages/demobank-ui/src/pages/WireTransfer.tsx
@@ -34,13 +34,23 @@ import { RouteDefinition } from "../route.js";
export function WireTransfer({
toAccount,
+ withSubject,
+ withAmount,
onAuthorizationRequired,
routeCancel,
+ routeHere,
onSuccess,
}: {
onSuccess?: () => void;
+ routeHere: RouteDefinition<{
+ account?: string,
+ subject?: string,
+ amount?: string,
+ }>;
toAccount?: string;
- routeCancel?: RouteDefinition<Record<string, never>>;
+ withSubject?: string,
+ withAmount?: string,
+ routeCancel?: RouteDefinition;
onAuthorizationRequired: () => void;
}): VNode {
const { i18n } = useTranslationContext();
@@ -77,7 +87,10 @@ export function WireTransfer({
return (
<PaytoWireTransferForm
title={i18n.str`Make a wire transfer`}
- toAccount={toAccount}
+ withAccount={toAccount}
+ withAmount={withAmount}
+ withSubject={withSubject}
+ routeHere={routeHere}
limit={limit}
onAuthorizationRequired={onAuthorizationRequired}
onSuccess={() => {
diff --git a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
index e4631fcc8..39b94b349 100644
--- a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
+++ b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx
@@ -39,12 +39,14 @@ import { useBankCoreApiContext } from "../context/config.js";
import { useBackendState } from "../hooks/backend.js";
import { useBankState } from "../hooks/bank-state.js";
import { usePreferences } from "../hooks/preferences.js";
+import { RouteDefinition } from "../route.js";
import { LoginForm } from "./LoginForm.js";
import { RenderAmount } from "./PaytoWireTransferForm.js";
interface Props {
onAborted: () => void;
withdrawUri: WithdrawUriResult;
+ routeHere: RouteDefinition<{ wopid: string }>;
details: {
account: PaytoUri;
reserve: string;
@@ -61,6 +63,7 @@ export function WithdrawalConfirmationQuestion({
onAborted,
details,
onAuthorizationRequired,
+ routeHere,
withdrawUri,
}: Props): VNode {
const { i18n } = useTranslationContext();
@@ -126,6 +129,7 @@ export function WithdrawalConfirmationQuestion({
updateBankState("currentChallenge", {
operation: "confirm-withdrawal",
id: String(resp.body.challenge_id),
+ location: routeHere.url({ wopid: withdrawUri.withdrawalOperationId }),
sent: AbsoluteTime.never(),
request: withdrawUri.withdrawalOperationId,
});
diff --git a/packages/demobank-ui/src/pages/WithdrawalOperationPage.tsx b/packages/demobank-ui/src/pages/WithdrawalOperationPage.tsx
index 87999a722..7075c34c6 100644
--- a/packages/demobank-ui/src/pages/WithdrawalOperationPage.tsx
+++ b/packages/demobank-ui/src/pages/WithdrawalOperationPage.tsx
@@ -27,12 +27,14 @@ export function WithdrawalOperationPage({
onAuthorizationRequired,
onOperationAborted,
routeClose,
+ routeWithdrawalDetails,
}: {
onAuthorizationRequired: () => void;
operationId: string;
purpose: "after-creation" | "after-confirmation",
onOperationAborted: () => void;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
+ routeWithdrawalDetails: RouteDefinition<{ wopid: string }>;
}): VNode {
const { api } = useBankCoreApiContext();
const uri = stringifyWithdrawUri({
@@ -57,6 +59,7 @@ export function WithdrawalOperationPage({
return (
<WithdrawalQRCode
withdrawUri={parsedUri}
+ routeWithdrawalDetails={routeWithdrawalDetails}
onAuthorizationRequired={onAuthorizationRequired}
onOperationAborted={() => {
updateBankState("currentWithdrawalOperationId", undefined);
diff --git a/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx b/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx
index e6323631c..b128bd99f 100644
--- a/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx
+++ b/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx
@@ -38,7 +38,8 @@ import { WithdrawalConfirmationQuestion } from "./WithdrawalConfirmationQuestion
interface Props {
withdrawUri: WithdrawUriResult;
onOperationAborted: () => void;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
+ routeWithdrawalDetails: RouteDefinition<{ wopid: string }>;
onAuthorizationRequired: () => void;
}
/**
@@ -50,6 +51,7 @@ export function WithdrawalQRCode({
withdrawUri,
onOperationAborted,
routeClose,
+ routeWithdrawalDetails,
onAuthorizationRequired,
}: Props): VNode {
const { i18n } = useTranslationContext();
@@ -232,6 +234,7 @@ export function WithdrawalQRCode({
return (
<WithdrawalConfirmationQuestion
withdrawUri={withdrawUri}
+ routeHere={routeWithdrawalDetails}
details={{
username: data.username,
account,
@@ -250,7 +253,7 @@ export function WithdrawalQRCode({
export function OperationNotFound({
routeClose,
}: {
- routeClose: RouteDefinition<Record<string, never>> | undefined;
+ routeClose: RouteDefinition | undefined;
}): VNode {
const { i18n } = useTranslationContext();
return (
diff --git a/packages/demobank-ui/src/pages/account/CashoutListForAccount.tsx b/packages/demobank-ui/src/pages/account/CashoutListForAccount.tsx
index 656c2a52a..14f4acdb8 100644
--- a/packages/demobank-ui/src/pages/account/CashoutListForAccount.tsx
+++ b/packages/demobank-ui/src/pages/account/CashoutListForAccount.tsx
@@ -23,18 +23,20 @@ import { RouteDefinition } from "../../route.js";
interface Props {
account: string;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
onAuthorizationRequired: () => void;
routeCashoutDetails: RouteDefinition<{ cid: string }>;
- routeMyAccountDetails: RouteDefinition<Record<string, never>>;
- routeMyAccountDelete: RouteDefinition<Record<string, never>>;
- routeMyAccountPassword: RouteDefinition<Record<string, never>>;
- routeMyAccountCashout: RouteDefinition<Record<string, never>>;
+ routeMyAccountDetails: RouteDefinition;
+ routeMyAccountDelete: RouteDefinition;
+ routeMyAccountPassword: RouteDefinition;
+ routeMyAccountCashout: RouteDefinition;
+ routeCreateCashout: RouteDefinition;
}
export function CashoutListForAccount({
account,
onAuthorizationRequired,
+ routeCreateCashout,
routeCashoutDetails,
routeMyAccountCashout,
routeMyAccountDelete,
@@ -68,6 +70,7 @@ export function CashoutListForAccount({
<CreateCashout
focus
+ routeHere={routeCreateCashout}
routeClose={routeClose}
onAuthorizationRequired={onAuthorizationRequired}
account={account}
diff --git a/packages/demobank-ui/src/pages/account/ShowAccountDetails.tsx b/packages/demobank-ui/src/pages/account/ShowAccountDetails.tsx
index 8cd758c75..db76e83d9 100644
--- a/packages/demobank-ui/src/pages/account/ShowAccountDetails.tsx
+++ b/packages/demobank-ui/src/pages/account/ShowAccountDetails.tsx
@@ -49,13 +49,15 @@ export function ShowAccountDetails({
routeMyAccountCashout,
routeMyAccountDelete,
routeMyAccountDetails,
+ routeHere,
routeMyAccountPassword,
}: {
- routeClose: RouteDefinition<Record<string, never>>;
- routeMyAccountDetails: RouteDefinition<Record<string, never>>;
- routeMyAccountDelete: RouteDefinition<Record<string, never>>;
- routeMyAccountPassword: RouteDefinition<Record<string, never>>;
- routeMyAccountCashout: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
+ routeHere: RouteDefinition<{ account: string }>;
+ routeMyAccountDetails: RouteDefinition;
+ routeMyAccountDelete: RouteDefinition;
+ routeMyAccountPassword: RouteDefinition;
+ routeMyAccountCashout: RouteDefinition;
onUpdateSuccess: () => void;
onAuthorizationRequired: () => void;
account: string;
@@ -154,6 +156,7 @@ export function ShowAccountDetails({
updateBankState("currentChallenge", {
operation: "update-account",
id: String(resp.body.challenge_id),
+ location: routeHere.url({ account }),
sent: AbsoluteTime.never(),
request: submitAccount,
});
diff --git a/packages/demobank-ui/src/pages/account/UpdateAccountPassword.tsx b/packages/demobank-ui/src/pages/account/UpdateAccountPassword.tsx
index d15420b84..dfa0adf17 100644
--- a/packages/demobank-ui/src/pages/account/UpdateAccountPassword.tsx
+++ b/packages/demobank-ui/src/pages/account/UpdateAccountPassword.tsx
@@ -46,12 +46,14 @@ export function UpdateAccountPassword({
routeMyAccountDetails,
routeMyAccountPassword,
focus,
+ routeHere,
}: {
- routeClose: RouteDefinition<Record<string, never>>;
- routeMyAccountDetails: RouteDefinition<Record<string, never>>;
- routeMyAccountDelete: RouteDefinition<Record<string, never>>;
- routeMyAccountPassword: RouteDefinition<Record<string, never>>;
- routeMyAccountCashout: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
+ routeHere: RouteDefinition<{ account: string }>;
+ routeMyAccountDetails: RouteDefinition;
+ routeMyAccountDelete: RouteDefinition;
+ routeMyAccountPassword: RouteDefinition;
+ routeMyAccountCashout: RouteDefinition;
focus?: boolean;
onAuthorizationRequired: () => void;
onUpdateSuccess: () => void;
@@ -128,6 +130,7 @@ export function UpdateAccountPassword({
updateBankState("currentChallenge", {
operation: "update-password",
id: String(resp.body.challenge_id),
+ location: routeHere.url({ account: accountName }),
sent: AbsoluteTime.never(),
request,
});
@@ -172,7 +175,7 @@ export function UpdateAccountPassword({
>
<div class="px-4 py-6 sm:p-8">
<div class="grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6">
- {accountIsTheCurrentUser ? (
+ {accountIsTheCurrentUser ? (
<div class="sm:col-span-5">
<label
class="block text-sm font-medium leading-6 text-gray-900"
@@ -205,7 +208,7 @@ export function UpdateAccountPassword({
</p>
</div>
) : undefined}
-
+
<div class="sm:col-span-5">
<label
class="block text-sm font-medium leading-6 text-gray-900"
diff --git a/packages/demobank-ui/src/pages/admin/AccountList.tsx b/packages/demobank-ui/src/pages/admin/AccountList.tsx
index 36e417171..d8c129507 100644
--- a/packages/demobank-ui/src/pages/admin/AccountList.tsx
+++ b/packages/demobank-ui/src/pages/admin/AccountList.tsx
@@ -28,7 +28,7 @@ import { RenderAmount } from "../PaytoWireTransferForm.js";
import { RouteDefinition } from "../../route.js";
interface Props {
- routeCreate: RouteDefinition<Record<string, never>>;
+ routeCreate: RouteDefinition;
routeShowAccount: RouteDefinition<{ account: string }>;
routeRemoveAccount: RouteDefinition<{ account: string }>;
diff --git a/packages/demobank-ui/src/pages/admin/AdminHome.tsx b/packages/demobank-ui/src/pages/admin/AdminHome.tsx
index 1803f1b9c..4695d35cf 100644
--- a/packages/demobank-ui/src/pages/admin/AdminHome.tsx
+++ b/packages/demobank-ui/src/pages/admin/AdminHome.tsx
@@ -50,9 +50,13 @@ import { AccountList } from "./AccountList.js";
* Query account information and show QR code if there is pending withdrawal
*/
interface Props {
- routeCreate: RouteDefinition<Record<string, never>>;
- routeDownloadStats: RouteDefinition<Record<string, never>>;
- routeCreateWireTransfer: RouteDefinition<{ destination: string }>;
+ routeCreate: RouteDefinition;
+ routeDownloadStats: RouteDefinition;
+ routeCreateWireTransfer: RouteDefinition<{
+ account?: string,
+ subject?: string,
+ amount?: string,
+ }>;
routeShowAccount: RouteDefinition<{ account: string }>;
routeRemoveAccount: RouteDefinition<{ account: string }>;
@@ -73,7 +77,7 @@ export function AdminHome({
return (
<Fragment>
<Metrics routeDownloadStats={routeDownloadStats} />
- <WireTransfer onAuthorizationRequired={onAuthorizationRequired} />
+ <WireTransfer routeHere={routeCreateWireTransfer} onAuthorizationRequired={onAuthorizationRequired} />
<Transactions
account="admin"
@@ -149,7 +153,7 @@ export function getTimeframesForDate(
function Metrics({
routeDownloadStats,
}: {
- routeDownloadStats: RouteDefinition<Record<string, never>>;
+ routeDownloadStats: RouteDefinition;
}): VNode {
const { i18n, dateLocale } = useTranslationContext();
const [metricType, setMetricType] =
@@ -351,7 +355,7 @@ function Metrics({
</div>
<dl class="mt-5 grid grid-cols-1 md:grid-cols-2 divide-y divide-gray-200 overflow-hidden rounded-lg bg-white shadow-lg md:divide-x md:divide-y-0">
{resp.current.body.type !== "with-conversions" ||
- resp.previous.body.type !== "with-conversions" ? undefined : (
+ resp.previous.body.type !== "with-conversions" ? undefined : (
<Fragment>
<div class="px-4 py-5 sm:p-6">
<dt class="text-base font-normal text-gray-900">
@@ -428,9 +432,9 @@ function MetricValue({
const rate =
!currAmount ||
- Number.isNaN(currAmount) ||
- !prevAmount ||
- Number.isNaN(prevAmount)
+ Number.isNaN(currAmount) ||
+ !prevAmount ||
+ Number.isNaN(prevAmount)
? 0
: cmp === -1
? 1 - Math.round(currAmount) / Math.round(prevAmount)
diff --git a/packages/demobank-ui/src/pages/admin/CreateNewAccount.tsx b/packages/demobank-ui/src/pages/admin/CreateNewAccount.tsx
index 6b4307417..8e353b5e7 100644
--- a/packages/demobank-ui/src/pages/admin/CreateNewAccount.tsx
+++ b/packages/demobank-ui/src/pages/admin/CreateNewAccount.tsx
@@ -38,7 +38,7 @@ export function CreateNewAccount({
routeCancel,
onCreateSuccess,
}: {
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
onCreateSuccess: () => void;
}): VNode {
const { i18n } = useTranslationContext();
diff --git a/packages/demobank-ui/src/pages/admin/RemoveAccount.tsx b/packages/demobank-ui/src/pages/admin/RemoveAccount.tsx
index 7fc5961cb..6f02eae8f 100644
--- a/packages/demobank-ui/src/pages/admin/RemoveAccount.tsx
+++ b/packages/demobank-ui/src/pages/admin/RemoveAccount.tsx
@@ -49,10 +49,12 @@ export function RemoveAccount({
onUpdateSuccess,
onAuthorizationRequired,
focus,
+ routeHere,
}: {
focus?: boolean;
+ routeHere: RouteDefinition<{ account: string }>;
onAuthorizationRequired: () => void;
- routeCancel: RouteDefinition<Record<string, never>>;
+ routeCancel: RouteDefinition;
onUpdateSuccess: () => void;
account: string;
}): VNode {
@@ -152,6 +154,7 @@ export function RemoveAccount({
operation: "delete-account",
id: String(resp.body.challenge_id),
sent: AbsoluteTime.never(),
+ location: routeHere.url({ account }),
request: account,
});
return onAuthorizationRequired();
diff --git a/packages/demobank-ui/src/pages/business/CreateCashout.tsx b/packages/demobank-ui/src/pages/business/CreateCashout.tsx
index 8dcdf5296..1b51e3222 100644
--- a/packages/demobank-ui/src/pages/business/CreateCashout.tsx
+++ b/packages/demobank-ui/src/pages/business/CreateCashout.tsx
@@ -55,7 +55,8 @@ interface Props {
account: string;
focus?: boolean;
onAuthorizationRequired: () => void;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
+ routeHere: RouteDefinition;
}
type FormType = {
@@ -72,6 +73,7 @@ export function CreateCashout({
account: accountName,
onAuthorizationRequired,
focus,
+ routeHere,
routeClose,
}: Props): VNode {
const { i18n } = useTranslationContext();
@@ -258,6 +260,7 @@ export function CreateCashout({
operation: "create-cashout",
id: String(resp.body.challenge_id),
sent: AbsoluteTime.never(),
+ location: routeHere.url({}),
request,
});
return onAuthorizationRequired();
diff --git a/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx b/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx
index d841ae319..f4b2130a9 100644
--- a/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx
+++ b/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx
@@ -33,7 +33,7 @@ import { RenderAmount } from "../PaytoWireTransferForm.js";
interface Props {
id: string;
- routeClose: RouteDefinition<Record<string, never>>;
+ routeClose: RouteDefinition;
}
export function ShowCashoutDetails({ id, routeClose }: Props): VNode {
const { i18n, dateLocale } = useTranslationContext();