diff options
Diffstat (limited to 'packages/demobank-ui/src/pages/OperationState')
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 "> |