aboutsummaryrefslogtreecommitdiff
path: root/packages/demobank-ui/src/pages/OperationState
diff options
context:
space:
mode:
Diffstat (limited to 'packages/demobank-ui/src/pages/OperationState')
-rw-r--r--packages/demobank-ui/src/pages/OperationState/index.ts4
-rw-r--r--packages/demobank-ui/src/pages/OperationState/state.ts34
-rw-r--r--packages/demobank-ui/src/pages/OperationState/views.tsx48
3 files changed, 45 insertions, 41 deletions
diff --git a/packages/demobank-ui/src/pages/OperationState/index.ts b/packages/demobank-ui/src/pages/OperationState/index.ts
index 120fd7b45..0776bbed5 100644
--- a/packages/demobank-ui/src/pages/OperationState/index.ts
+++ b/packages/demobank-ui/src/pages/OperationState/index.ts
@@ -83,8 +83,8 @@ export namespace State {
}
export interface NeedConfirmation {
status: "need-confirmation",
- onAbort: () => Promise<TalerCoreBankErrorsByMethod<"abortWithdrawalById"> | undefined>;
- onConfirm: () => Promise<TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined>;
+ onAbort: undefined | (() => Promise<TalerCoreBankErrorsByMethod<"abortWithdrawalById"> | undefined>);
+ onConfirm: undefined | (() => Promise<TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined>);
error: undefined;
busy: boolean,
}
diff --git a/packages/demobank-ui/src/pages/OperationState/state.ts b/packages/demobank-ui/src/pages/OperationState/state.ts
index 30f7419f0..da924104a 100644
--- a/packages/demobank-ui/src/pages/OperationState/state.ts
+++ b/packages/demobank-ui/src/pages/OperationState/state.ts
@@ -74,7 +74,8 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
const wid = withdrawalOperationId
async function doAbort() {
- const resp = await api.abortWithdrawalById(wid);
+ if (!creds) return;
+ const resp = await api.abortWithdrawalById(creds, wid);
if (resp.type === "ok") {
updateSettings("currentWithdrawalOperationId", undefined)
onClose();
@@ -84,8 +85,9 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
}
async function doConfirm(): Promise<TalerCoreBankErrorsByMethod<"confirmWithdrawalById"> | undefined> {
+ if (!creds) return;
setBusy({})
- const resp = await api.confirmWithdrawalById(wid);
+ const resp = await api.confirmWithdrawalById(creds, wid);
setBusy(undefined)
if (resp.type === "ok") {
mutate(() => true)//clean withdrawal state
@@ -142,23 +144,12 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
},
}
}
- case "invalid-id": {
- return {
- status: "aborted",
- error: undefined,
- onClose: async () => {
- updateSettings("currentWithdrawalOperationId", undefined)
- onClose()
- },
- }
-
- }
- default: assertUnreachable(result)
+ default: assertUnreachable(result.case)
}
}
const { body: data } = result;
- if (data.aborted) {
+ if (data.status === "aborted") {
return {
status: "aborted",
error: undefined,
@@ -169,7 +160,7 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
}
}
- if (data.confirmation_done) {
+ if (data.status === "confirmed") {
if (!settings.showWithdrawalSuccess) {
updateSettings("currentWithdrawalOperationId", undefined)
onClose()
@@ -184,12 +175,15 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
}
}
- if (!data.selection_done) {
+ if (data.status === "pending") {
return {
status: "ready",
error: undefined,
uri: parsedUri,
- onClose: doAbort,
+ onClose: !creds ? (async () => {
+ onClose();
+ return undefined
+ }) : doAbort,
}
}
@@ -216,9 +210,9 @@ export function useComponentState({ currency, onClose }: Props): utils.Recursive
return {
status: "need-confirmation",
error: undefined,
- onAbort: doAbort,
+ onAbort: !creds ? undefined : doAbort,
busy: !!busy,
- onConfirm: doConfirm
+ onConfirm: !creds ? undefined : doConfirm
}
}
diff --git a/packages/demobank-ui/src/pages/OperationState/views.tsx b/packages/demobank-ui/src/pages/OperationState/views.tsx
index a06147039..a3b30c179 100644
--- a/packages/demobank-ui/src/pages/OperationState/views.tsx
+++ b/packages/demobank-ui/src/pages/OperationState/views.tsx
@@ -69,6 +69,7 @@ export function NeedConfirmationView({ error, onAbort: doAbort, onConfirm: doCon
async function onCancel() {
errorHandler(async () => {
+ if (!doAbort) return;
const resp = await doAbort()
if (!resp) return;
switch (resp.case) {
@@ -97,6 +98,7 @@ export function NeedConfirmationView({ error, onAbort: doAbort, onConfirm: doCon
async function onConfirm() {
errorHandler(async () => {
+ if (!doConfirm) return;
const hasError = await doConfirm()
if (!hasError) {
if (!settings.showWithdrawalSuccess) {
@@ -186,26 +188,34 @@ export function NeedConfirmationView({ error, onAbort: doAbort, onConfirm: doCon
<ShowInputErrorLabel message={errors?.answer} isDirty={captchaAnswer !== undefined} />
</div>
</div>
- <div class="flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8">
- <button type="button" class="text-sm font-semibold leading-6 text-gray-900"
- onClick={(e) => {
- e.preventDefault()
- onCancel()
- }}
- >
- <i18n.Translate>Cancel</i18n.Translate></button>
- <button type="submit"
- class="disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
- disabled={!!errors}
- onClick={(e) => {
- e.preventDefault()
- onConfirm()
- }}
- >
- <i18n.Translate>Transfer</i18n.Translate>
- </button>
- </div>
+ {!doAbort || !doConfirm ?
+ <Attention type="warning" title={i18n.str`not logged in`}>
+ <i18n.Translate>
+ You need to log in as pepito to complete the operation
+ </i18n.Translate>
+ </Attention>
+ :
+ <div class="flex items-center justify-between gap-x-6 border-t border-gray-900/10 px-4 py-4 sm:px-8">
+ <button type="button" class="text-sm font-semibold leading-6 text-gray-900"
+ onClick={(e) => {
+ e.preventDefault()
+ onCancel()
+ }}
+ >
+ <i18n.Translate>Cancel</i18n.Translate></button>
+ <button type="submit"
+ class="disabled:opacity-50 disabled:cursor-default cursor-pointer rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
+ disabled={!!errors}
+ onClick={(e) => {
+ e.preventDefault()
+ onConfirm()
+ }}
+ >
+ <i18n.Translate>Transfer</i18n.Translate>
+ </button>
+ </div>
+ }
</form>
</div>
<div class="px-4 mt-4 ">