From 7a2fe8018faa4666ff681072682f16f8fb1bfc13 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 4 May 2022 16:25:53 -0300 Subject: add age restriction option to withdraw cta --- .../src/components/Checkbox.tsx | 4 +- .../src/components/SelectList.tsx | 7 ++- .../src/cta/Pay.stories.tsx | 36 +++++++++++++++ packages/taler-wallet-webextension/src/cta/Pay.tsx | 27 ++++++----- .../src/cta/Withdraw.stories.tsx | 53 ++++++++++++++++++++++ .../taler-wallet-webextension/src/cta/Withdraw.tsx | 38 +++++++++++++++- .../taler-wallet-webextension/src/mui/handlers.ts | 2 +- .../src/wallet/CreateManualWithdraw.test.ts | 4 +- .../src/wallet/DepositPage.test.ts | 2 + .../src/wallet/DeveloperPage.tsx | 15 ++++-- packages/taler-wallet-webextension/src/wxApi.ts | 4 ++ 11 files changed, 167 insertions(+), 25 deletions(-) (limited to 'packages/taler-wallet-webextension/src') diff --git a/packages/taler-wallet-webextension/src/components/Checkbox.tsx b/packages/taler-wallet-webextension/src/components/Checkbox.tsx index 0eb087b07..2e14f3367 100644 --- a/packages/taler-wallet-webextension/src/components/Checkbox.tsx +++ b/packages/taler-wallet-webextension/src/components/Checkbox.tsx @@ -17,8 +17,8 @@ import { h, VNode } from "preact"; interface Props { - enabled: boolean; - onToggle: () => void; + enabled?: boolean; + onToggle?: () => void; label: VNode; name: string; description?: VNode; diff --git a/packages/taler-wallet-webextension/src/components/SelectList.tsx b/packages/taler-wallet-webextension/src/components/SelectList.tsx index aa17d82b8..9271240f0 100644 --- a/packages/taler-wallet-webextension/src/components/SelectList.tsx +++ b/packages/taler-wallet-webextension/src/components/SelectList.tsx @@ -20,7 +20,7 @@ import { NiceSelect } from "./styled/index.js"; interface Props { value?: string; - onChange: (s: string) => void; + onChange?: (s: string) => void; label: VNode; list: { [label: string]: string; @@ -28,6 +28,7 @@ interface Props { name: string; description?: string; canBeNull?: boolean; + maxWidth?: boolean; } export function SelectList({ @@ -36,6 +37,7 @@ export function SelectList({ list, onChange, label, + maxWidth, description, canBeNull, }: Props): VNode { @@ -53,8 +55,9 @@ export function SelectList({ + Age restriction} + list={state.ageRestriction.list} + name="age" + maxWidth + value={state.ageRestriction.value} + onChange={state.ageRestriction.onChange} + /> + + {state.tosProps && } {state.tosProps ? (
diff --git a/packages/taler-wallet-webextension/src/mui/handlers.ts b/packages/taler-wallet-webextension/src/mui/handlers.ts index 60cfee421..646bdcf17 100644 --- a/packages/taler-wallet-webextension/src/mui/handlers.ts +++ b/packages/taler-wallet-webextension/src/mui/handlers.ts @@ -17,7 +17,7 @@ export interface ToggleHandler { } export interface SelectFieldHandler { - onChange: (value: string) => Promise; + onChange?: (value: string) => Promise; error?: string; value: string; isDirty?: boolean; diff --git a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts index a4b333f02..7a9a5314b 100644 --- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts +++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts @@ -87,7 +87,7 @@ describe("CreateManualWithdraw states", () => { const { exchange, currency } = getLastResultOrThrow() expect(exchange.value).equal("url2") - + if (currency.onChange === undefined) expect.fail(); currency.onChange("USD") } @@ -111,6 +111,7 @@ describe("CreateManualWithdraw states", () => { expect(exchange.value).equal("url2") expect(currency.value).equal("ARS") + if (exchange.onChange === undefined) expect.fail(); exchange.onChange("url1") } @@ -205,6 +206,7 @@ async function defaultTestForInputSelect(awaiter: () => Promise, getField: throw new Error('no enough values') } nextValue = keys[nextIdx] + if (field.onChange === undefined) expect.fail(); field.onChange(nextValue) } diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts b/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts index c863b27d5..5fc55934d 100644 --- a/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts +++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts @@ -258,6 +258,7 @@ describe("DepositPage states", () => { expect(r.depositHandler.onClick).undefined; expect(r.totalFee).deep.eq(Amounts.parseOrThrow(`${currency}:0`)) + if (r.account.onChange === undefined) expect.fail(); r.account.onChange("1") } @@ -290,6 +291,7 @@ describe("DepositPage states", () => { expect(r.totalToDeposit).deep.eq(Amounts.parseOrThrow(`${currency}:7`)) expect(r.depositHandler.onClick).undefined; + if (r.account.onChange === undefined) expect.fail(); r.account.onChange("0") } diff --git a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx index 829e60b44..c4725a8d7 100644 --- a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx +++ b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx @@ -81,6 +81,7 @@ export function DeveloperPage(): VNode { type CoinsInfo = CoinDumpJson["coins"]; type CalculatedCoinfInfo = { + ageKeysCount: number | undefined; denom_value: number; remain_value: number; status: string; @@ -132,11 +133,13 @@ export function View({ const money_by_exchange = coins.reduce( (prev, cur) => { const denom = Amounts.parseOrThrow(cur.denom_value); + console.log(cur); if (!prev[cur.exchange_base_url]) { prev[cur.exchange_base_url] = []; currencies[cur.exchange_base_url] = denom.currency; } prev[cur.exchange_base_url].push({ + ageKeysCount: cur.ageCommitmentProof?.proof.privateKeys.length, denom_value: parseFloat(Amounts.stringifyValue(denom)), remain_value: parseFloat( Amounts.stringifyValue(Amounts.parseOrThrow(cur.remaining_value)), @@ -305,7 +308,7 @@ function ShowAllCoins({

{ex}: {total} {currencies[ex]}

-

+

setCollapsedUnspent(true)}> usable coins @@ -313,7 +316,7 @@ function ShowAllCoins({ {collapsedUnspent ? (

setCollapsedUnspent(false)}>click to show
) : ( - setCollapsedUnspent(true)}> +
+ {coins.usable.map((c, idx) => { return ( @@ -339,12 +345,13 @@ function ShowAllCoins({ + ); })}
id @@ -330,6 +333,9 @@ function ShowAllCoins({ from refresh? + age key count +
{c.remain_value} {c.status} {c.from_refresh ? "true" : "false"}{String(c.ageKeysCount)}
)} -

+

setCollapsedSpent(true)}> spent coins

{collapsedSpent ? ( @@ -352,7 +359,7 @@ function ShowAllCoins({ click to show ) : ( - setCollapsedSpent(true)}> +
id diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts index b48826645..dd4eb2cf4 100644 --- a/packages/taler-wallet-webextension/src/wxApi.ts +++ b/packages/taler-wallet-webextension/src/wxApi.ts @@ -324,10 +324,12 @@ export function preparePay(talerPayUri: string): Promise { export function acceptWithdrawal( talerWithdrawUri: string, selectedExchange: string, + restrictAge?: number, ): Promise { return callBackend("acceptBankIntegratedWithdrawal", { talerWithdrawUri, exchangeBaseUrl: selectedExchange, + restrictAge }); } @@ -340,10 +342,12 @@ export function acceptWithdrawal( export function acceptManualWithdrawal( exchangeBaseUrl: string, amount: string, + restrictAge?: number, ): Promise { return callBackend("acceptManualWithdrawal", { amount, exchangeBaseUrl, + restrictAge }); } -- cgit v1.2.3