summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-11-24 08:57:26 -0300
committerSebastian <sebasjm@gmail.com>2021-11-24 08:58:49 -0300
commit0bfd4523b3408d9c841a1f25fd9ec86e81d6dd8f (patch)
treef453943d92fefbd04b9222a5f25f2c9563c239f3 /packages
parentf07436aa4910114a514235fb17879411dae0a555 (diff)
downloadwallet-core-0bfd4523b3408d9c841a1f25fd9ec86e81d6dd8f.tar.gz
wallet-core-0bfd4523b3408d9c841a1f25fd9ec86e81d6dd8f.tar.bz2
wallet-core-0bfd4523b3408d9c841a1f25fd9ec86e81d6dd8f.zip
adding tos information in settings and return to manual withdraw when adding an exchange
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-webextension/src/components/styled/index.tsx8
-rw-r--r--packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx21
-rw-r--r--packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx170
-rw-r--r--packages/taler-wallet-webextension/src/cta/Withdraw.tsx30
-rw-r--r--packages/taler-wallet-webextension/src/popup/Settings.tsx16
-rw-r--r--packages/taler-wallet-webextension/src/utils/index.ts14
-rw-r--r--packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx11
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx9
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx2
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ExchangeAddSetUrl.stories.tsx6
-rw-r--r--packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx13
-rw-r--r--packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx46
-rw-r--r--packages/taler-wallet-webextension/src/wallet/Settings.tsx91
-rw-r--r--packages/taler-wallet-webextension/src/wxApi.ts6
14 files changed, 213 insertions, 230 deletions
diff --git a/packages/taler-wallet-webextension/src/components/styled/index.tsx b/packages/taler-wallet-webextension/src/components/styled/index.tsx
index 7cef8789b..4c2367008 100644
--- a/packages/taler-wallet-webextension/src/components/styled/index.tsx
+++ b/packages/taler-wallet-webextension/src/components/styled/index.tsx
@@ -613,6 +613,14 @@ export const LightText = styled.div`
color: gray;
`;
+export const SuccessText = styled.div`
+ color: #388e3c;
+`;
+
+export const DestructiveText = styled.div`
+ color: rgb(202, 60, 60);
+`;
+
export const WarningText = styled.div`
color: rgb(223, 117, 20);
`;
diff --git a/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx b/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
index 5eddde64f..5109055e8 100644
--- a/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
+++ b/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
@@ -8,6 +8,7 @@ import {
LinkSuccess,
TermsOfService,
WarningBox,
+ WarningText,
} from "../components/styled";
import { TermsState } from "../utils";
@@ -28,10 +29,27 @@ export function TermsOfServiceSection({
if (!reviewing) {
if (!reviewed) {
if (!onReview) {
- return <section>Terms of service status: {terms.status}</section>;
+ return (
+ <Fragment>
+ {terms.status === "notfound" && (
+ <section>
+ <WarningText>
+ {i18n.str`Exchange doesn't have terms of service`}
+ </WarningText>
+ </section>
+ )}
+ </Fragment>
+ );
}
return (
<Fragment>
+ {terms.status === "notfound" && (
+ <section>
+ <WarningText>
+ {i18n.str`Exchange doesn't have terms of service`}
+ </WarningText>
+ </section>
+ )}
{terms.status === "new" && (
<section>
<ButtonSuccess upperCased onClick={() => onReview(true)}>
@@ -64,7 +82,6 @@ export function TermsOfServiceSection({
enabled={reviewed}
label={i18n.str`I accept the exchange terms of service`}
onToggle={() => {
- console.log("asdasd", reviewed);
onAccept(!reviewed);
if (onReview) onReview(false);
}}
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx b/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
index fbbecd6f3..3915dc126 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.stories.tsx
@@ -19,7 +19,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { amountFractionalBase } from "@gnu-taler/taler-util";
+import { amountFractionalBase, ExchangeListItem } from "@gnu-taler/taler-util";
import { createExample } from "../test-utils";
import { termsHtml, termsPdf, termsPlain, termsXml } from "./termsExample";
import { View as TestedComponent } from "./Withdraw";
@@ -32,24 +32,38 @@ export default {
},
};
-export const NewTerms = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
+const exchangeList: ExchangeListItem[] = [
+ {
+ currency: "USD",
+ exchangeBaseUrl: "exchange.demo.taler.net",
+ tos: {
+ currentVersion: "1",
+ acceptedVersion: "1",
+ content: "terms of service content",
+ contentType: "text/plain",
},
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
+ paytoUris: ["asd"],
+ },
+ {
+ currency: "USD",
+ exchangeBaseUrl: "exchange.test.taler.net",
+ tos: {
+ currentVersion: "1",
+ acceptedVersion: "1",
+ content: "terms of service content",
+ contentType: "text/plain",
},
- ],
+ paytoUris: ["asd"],
+ },
+];
+
+export const NewTerms = createExample(TestedComponent, {
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
fraction: 0,
- value: 0,
+ value: 1,
},
amount: {
currency: "USD",
@@ -71,18 +85,7 @@ export const NewTerms = createExample(TestedComponent, {
});
export const TermsReviewingPLAIN = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -110,18 +113,7 @@ export const TermsReviewingPLAIN = createExample(TestedComponent, {
});
export const TermsReviewingHTML = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -151,18 +143,7 @@ export const TermsReviewingHTML = createExample(TestedComponent, {
});
export const TermsReviewingPDF = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -192,18 +173,7 @@ export const TermsReviewingPDF = createExample(TestedComponent, {
});
export const TermsReviewingXML = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -231,18 +201,7 @@ export const TermsReviewingXML = createExample(TestedComponent, {
});
export const NewTermsAccepted = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -269,18 +228,7 @@ export const NewTermsAccepted = createExample(TestedComponent, {
});
export const TermsShowAgainXML = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -309,18 +257,7 @@ export const TermsShowAgainXML = createExample(TestedComponent, {
});
export const TermsChanged = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -347,18 +284,7 @@ export const TermsChanged = createExample(TestedComponent, {
});
export const TermsNotFound = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -382,18 +308,7 @@ export const TermsNotFound = createExample(TestedComponent, {
});
export const TermsAlreadyAccepted = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
@@ -417,18 +332,7 @@ export const TermsAlreadyAccepted = createExample(TestedComponent, {
});
export const WithoutFee = createExample(TestedComponent, {
- knownExchanges: [
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.demo.taler.net",
- paytoUris: ["asd"],
- },
- {
- currency: "USD",
- exchangeBaseUrl: "exchange.test.taler.net",
- paytoUris: ["asd"],
- },
- ],
+ knownExchanges: exchangeList,
exchangeBaseUrl: "exchange.demo.taler.net",
withdrawalFee: {
currency: "USD",
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
index 4ebbe11c6..eead51690 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
@@ -38,7 +38,6 @@ import {
ButtonWarning,
LinkSuccess,
WalletAction,
- WarningText,
} from "../components/styled";
import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
import { amountToString, buildTermsOfServiceState, TermsState } from "../utils";
@@ -98,17 +97,19 @@ export function View({
text={amountToString(Amounts.sub(amount, withdrawalFee).amount)}
kind="positive"
/>
- <Part
- title="Chosen amount"
- text={amountToString(amount)}
- kind="neutral"
- />
{Amounts.isNonZero(withdrawalFee) && (
- <Part
- title="Exchange fee"
- text={amountToString(withdrawalFee)}
- kind="negative"
- />
+ <Fragment>
+ <Part
+ title="Chosen amount"
+ text={amountToString(amount)}
+ kind="neutral"
+ />
+ <Part
+ title="Exchange fee"
+ text={amountToString(withdrawalFee)}
+ kind="negative"
+ />
+ </Fragment>
)}
{exchangeBaseUrl && (
<Part title="Exchange" text={exchangeBaseUrl} kind="neutral" big />
@@ -140,13 +141,6 @@ export function View({
)}
</section>
)}
- {terms.status === "notfound" && (
- <section>
- <WarningText>
- {i18n.str`Exchange doesn't have terms of service`}
- </WarningText>
- </section>
- )}
<TermsOfServiceSection
reviewed={reviewed}
reviewing={reviewing}
diff --git a/packages/taler-wallet-webextension/src/popup/Settings.tsx b/packages/taler-wallet-webextension/src/popup/Settings.tsx
index 84ecea4fe..3732cf7b5 100644
--- a/packages/taler-wallet-webextension/src/popup/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/popup/Settings.tsx
@@ -17,19 +17,15 @@
import { i18n } from "@gnu-taler/taler-util";
import { Fragment, h, VNode } from "preact";
import { Checkbox } from "../components/Checkbox";
-import { useDevContext } from "../context/devContext";
import { useExtendedPermissions } from "../hooks/useExtendedPermissions";
export function SettingsPage(): VNode {
const [permissionsEnabled, togglePermissions] = useExtendedPermissions();
- const { devMode, toggleDevMode } = useDevContext();
return (
<SettingsView
permissionsEnabled={permissionsEnabled}
togglePermissions={togglePermissions}
- developerMode={devMode}
- toggleDeveloperMode={toggleDevMode}
/>
);
}
@@ -37,15 +33,11 @@ export function SettingsPage(): VNode {
export interface ViewProps {
permissionsEnabled: boolean;
togglePermissions: () => void;
- developerMode: boolean;
- toggleDeveloperMode: () => void;
}
export function SettingsView({
permissionsEnabled,
togglePermissions,
- developerMode,
- toggleDeveloperMode,
}: ViewProps): VNode {
return (
<Fragment>
@@ -60,14 +52,6 @@ export function SettingsView({
enabled={permissionsEnabled}
onToggle={togglePermissions}
/>
- <h2>Config</h2>
- <Checkbox
- label="Developer mode"
- name="devMode"
- description="(More options and information useful for debugging)"
- enabled={developerMode}
- onToggle={toggleDeveloperMode}
- />
</section>
<footer style={{ justifyContent: "space-around" }}>
<a
diff --git a/packages/taler-wallet-webextension/src/utils/index.ts b/packages/taler-wallet-webextension/src/utils/index.ts
index 477818520..15081f920 100644
--- a/packages/taler-wallet-webextension/src/utils/index.ts
+++ b/packages/taler-wallet-webextension/src/utils/index.ts
@@ -60,15 +60,19 @@ export function buildTermsOfServiceState(tos: GetExchangeTosResult): TermsState
tos.content,
);
- const status: TermsStatus = !content
+ const status: TermsStatus = buildTermsOfServiceStatus(tos.content, tos.acceptedEtag, tos.currentEtag);
+
+ return { content, status, version: tos.currentEtag }
+
+}
+export function buildTermsOfServiceStatus(content: string | undefined, acceptedVersion: string | undefined, currentVersion: string | undefined): TermsStatus {
+ return !content
? "notfound"
- : !tos.acceptedEtag
+ : !acceptedVersion
? "new"
- : tos.acceptedEtag !== tos.currentEtag
+ : acceptedVersion !== currentVersion
? "changed"
: "accepted";
-
- return { content, status, version: tos.currentEtag }
}
function parseTermsOfServiceContent(
diff --git a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
index 554952795..36feeb76e 100644
--- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
@@ -21,7 +21,6 @@
import { AmountJson, Amounts, i18n } from "@gnu-taler/taler-util";
import { Fragment, h, VNode } from "preact";
-import { route } from "preact-router";
import { useState } from "preact/hooks";
import { ErrorMessage } from "../components/ErrorMessage";
import { SelectList } from "../components/SelectList";
@@ -35,13 +34,13 @@ import {
LightText,
LinkPrimary,
} from "../components/styled";
-import { Pages } from "../NavigationBar";
export interface Props {
error: string | undefined;
initialAmount?: string;
exchangeList: Record<string, string>;
onCreate: (exchangeBaseUrl: string, amount: AmountJson) => Promise<void>;
+ onAddExchange: () => void;
}
export function CreateManualWithdraw({
@@ -49,6 +48,7 @@ export function CreateManualWithdraw({
exchangeList,
error,
onCreate,
+ onAddExchange,
}: Props): VNode {
const exchangeSelectList = Object.keys(exchangeList);
const currencySelectList = Object.values(exchangeList);
@@ -90,7 +90,7 @@ export function CreateManualWithdraw({
return (
<Centered style={{ marginTop: 100 }}>
<BoldLight>No exchange configured</BoldLight>
- <ButtonSuccess onClick={() => route(Pages.exchange_add)}>
+ <ButtonSuccess onClick={onAddExchange}>
<i18n.Translate>Add exchange</i18n.Translate>
</ButtonSuccess>
</Centered>
@@ -130,10 +130,7 @@ export function CreateManualWithdraw({
/>
</Input>
<div style={{ display: "flex", justifyContent: "space-between" }}>
- <LinkPrimary
- onClick={() => route(Pages.exchange_add)}
- style={{ marginLeft: "auto" }}
- >
+ <LinkPrimary onClick={onAddExchange} style={{ marginLeft: "auto" }}>
<i18n.Translate>Add exchange</i18n.Translate>
</LinkPrimary>
</div>
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
index 5c7f94ecd..409e0b49e 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeAddConfirm.tsx
@@ -5,7 +5,6 @@ import {
Button,
ButtonSuccess,
ButtonWarning,
- WarningBox,
} from "../components/styled/index";
import { TermsOfServiceSection } from "../cta/TermsOfServiceSection";
import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
@@ -97,14 +96,6 @@ export function View({
</a>
</div>
</section>
- {terms && terms.status === "notfound" && (
- <section>
- <WarningBox>
- {i18n.str`Exchange doesn't have terms of service`}
- </WarningBox>
- </section>
- )}
-
{terms && (
<TermsOfServiceSection
reviewed={reviewed}
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
index 10449c101..0c8336e69 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeAddPage.tsx
@@ -27,7 +27,7 @@ import { ExchangeAddConfirmPage } from "./ExchangeAddConfirm";
import { ExchangeSetUrlPage } from "./ExchangeSetUrl";
interface Props {
- currency: string;
+ currency?: string;
onBack: () => void;
}
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeAddSetUrl.stories.tsx b/packages/taler-wallet-webextension/src/wallet/ExchangeAddSetUrl.stories.tsx
index bc182cb70..9ea800fe4 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeAddSetUrl.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeAddSetUrl.stories.tsx
@@ -55,6 +55,12 @@ export const WithDemoAsKnownExchange = createExample(TestedComponent, {
{
currency: "TESTKUDOS",
exchangeBaseUrl: "https://exchange.demo.taler.net/",
+ tos: {
+ currentVersion: "1",
+ acceptedVersion: "1",
+ content: "content of tos",
+ contentType: "text/plain",
+ },
paytoUris: [],
},
],
diff --git a/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx b/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx
index 88d5f1722..b3e8a2c25 100644
--- a/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ManualWithdrawPage.tsx
@@ -22,11 +22,13 @@ import {
AcceptManualWithdrawalResult,
AmountJson,
Amounts,
+ NotificationType,
} from "@gnu-taler/taler-util";
import { ReserveCreated } from "./ReserveCreated";
import { route } from "preact-router";
import { Pages } from "../NavigationBar";
import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
+import { ExchangeAddPage } from "./ExchangeAddPage";
export function ManualWithdrawPage(): VNode {
const [success, setSuccess] = useState<
@@ -39,7 +41,9 @@ export function ManualWithdrawPage(): VNode {
>(undefined);
const [error, setError] = useState<string | undefined>(undefined);
- const state = useAsyncAsHook(() => wxApi.listExchanges());
+ const state = useAsyncAsHook(wxApi.listExchanges, [
+ NotificationType.ExchangeAdded,
+ ]);
async function doCreate(
exchangeBaseUrl: string,
@@ -61,6 +65,12 @@ export function ManualWithdrawPage(): VNode {
}
}
+ const [addingExchange, setAddingExchange] = useState(false);
+
+ if (addingExchange) {
+ return <ExchangeAddPage onBack={() => setAddingExchange(false)} />;
+ }
+
if (success) {
return (
<ReserveCreated
@@ -91,6 +101,7 @@ export function ManualWithdrawPage(): VNode {
return (
<CreateManualWithdraw
+ onAddExchange={() => setAddingExchange(true)}
error={error}
exchangeList={exchangeList}
onCreate={doCreate}
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx b/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
index 6cc1368d5..8acf9d210 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.stories.tsx
@@ -49,6 +49,52 @@ export const WithOneExchange = createExample(TestedComponent, {
{
currency: "USD",
exchangeBaseUrl: "http://exchange.taler",
+ tos: {
+ currentVersion: "1",
+ acceptedVersion: "1",
+ content: "content of tos",
+ contentType: "text/plain",
+ },
+ paytoUris: ["payto://x-taler-bank/bank.rpi.sebasjm.com/exchangeminator"],
+ },
+ ],
+});
+
+export const WithExchangeInDifferentState = createExample(TestedComponent, {
+ deviceName: "this-is-the-device-name",
+ permissionsEnabled: true,
+ setDeviceName: () => Promise.resolve(),
+ knownExchanges: [
+ {
+ currency: "USD",
+ exchangeBaseUrl: "http://exchange1.taler",
+ tos: {
+ currentVersion: "1",
+ acceptedVersion: "1",
+ content: "content of tos",
+ contentType: "text/plain",
+ },
+ paytoUris: ["payto://x-taler-bank/bank.rpi.sebasjm.com/exchangeminator"],
+ },
+ {
+ currency: "USD",
+ exchangeBaseUrl: "http://exchange2.taler",
+ tos: {
+ currentVersion: "2",
+ acceptedVersion: "1",
+ content: "content of tos",
+ contentType: "text/plain",
+ },
+ paytoUris: ["payto://x-taler-bank/bank.rpi.sebasjm.com/exchangeminator"],
+ },
+ {
+ currency: "USD",
+ exchangeBaseUrl: "http://exchange3.taler",
+ tos: {
+ currentVersion: "1",
+ content: "content of tos",
+ contentType: "text/plain",
+ },
paytoUris: ["payto://x-taler-bank/bank.rpi.sebasjm.com/exchangeminator"],
},
],
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.tsx b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
index 5f1cd89d3..04656acc1 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
@@ -17,14 +17,19 @@
import { ExchangeListItem, i18n } from "@gnu-taler/taler-util";
import { Fragment, h, VNode } from "preact";
import { Checkbox } from "../components/Checkbox";
-import { LinkPrimary } from "../components/styled";
+import {
+ DestructiveText,
+ LinkPrimary,
+ SuccessText,
+ WarningText,
+} from "../components/styled";
import { useDevContext } from "../context/devContext";
import { useAsyncAsHook } from "../hooks/useAsyncAsHook";
import { useBackupDeviceName } from "../hooks/useBackupDeviceName";
import { useExtendedPermissions } from "../hooks/useExtendedPermissions";
import { useLang } from "../hooks/useLang";
import { Pages } from "../NavigationBar";
-// import { strings as messages } from "../i18n/strings";
+import { buildTermsOfServiceStatus } from "../utils";
import * as wxApi from "../wxApi";
export function SettingsPage(): VNode {
@@ -65,25 +70,8 @@ export interface ViewProps {
knownExchanges: Array<ExchangeListItem>;
}
-// type LangsNames = {
-// [P in keyof typeof messages]: string;
-// };
-
-// const names: LangsNames = {
-// es: "Español [es]",
-// en: "English [en]",
-// fr: "Français [fr]",
-// de: "Deutsch [de]",
-// sv: "Svenska [sv]",
-// it: "Italiano [it]",
-// };
-
export function SettingsView({
knownExchanges,
- // lang,
- // changeLang,
- // deviceName,
- // setDeviceName,
permissionsEnabled,
togglePermissions,
developerMode,
@@ -93,6 +81,17 @@ export function SettingsView({
<Fragment>
<section>
<h2>
+ <i18n.Translate>Permissions</i18n.Translate>
+ </h2>
+ <Checkbox
+ label="Automatically open wallet based on page content"
+ name="perm"
+ description="(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)"
+ enabled={permissionsEnabled}
+ onToggle={togglePermissions}
+ />
+
+ <h2>
<i18n.Translate>Known exchanges</i18n.Translate>
</h2>
{!knownExchanges || !knownExchanges.length ? (
@@ -100,14 +99,44 @@ export function SettingsView({
) : (
<Fragment>
<table>
- {knownExchanges.map((e, idx) => (
- <tr key={idx}>
- <td>{e.currency}</td>
- <td>
- <a href={e.exchangeBaseUrl}>{e.exchangeBaseUrl}</a>
- </td>
+ <thead>
+ <tr>
+ <th>currency</th>
+ <th>url</th>
+ <th>term of service</th>
</tr>
- ))}
+ </thead>
+ <tbody>
+ {knownExchanges.map((e, idx) => {
+ function Status(): VNode {
+ const status = buildTermsOfServiceStatus(
+ e.tos.content,
+ e.tos.acceptedVersion,
+ e.tos.currentVersion,
+ );
+ switch (status) {
+ case "accepted":
+ return <SuccessText>ok</SuccessText>;
+ case "changed":
+ return <WarningText>changed!</WarningText>;
+ case "new":
+ case "notfound":
+ return <DestructiveText>not accepted</DestructiveText>;
+ }
+ }
+ return (
+ <tr key={idx}>
+ <td>{e.currency}</td>
+ <td>
+ <a href={e.exchangeBaseUrl}>{e.exchangeBaseUrl}</a>
+ </td>
+ <td>
+ <Status />
+ </td>
+ </tr>
+ );
+ })}
+ </tbody>
</table>
</Fragment>
)}
@@ -116,16 +145,6 @@ export function SettingsView({
<LinkPrimary href={Pages.exchange_add}>Add an exchange</LinkPrimary>
</div>
- <h2>
- <i18n.Translate>Permissions</i18n.Translate>
- </h2>
- <Checkbox
- label="Automatically open wallet based on page content"
- name="perm"
- description="(Enabling this option below will make using the wallet faster, but requires more permissions from your browser.)"
- enabled={permissionsEnabled}
- onToggle={togglePermissions}
- />
<h2>Config</h2>
<Checkbox
label="Developer mode"
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts
index be0fed883..31fbd5b45 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -350,11 +350,13 @@ export function acceptTip(req: AcceptTipRequest): Promise<void> {
return callBackend("acceptTip", req);
}
-export function onUpdateNotification(messageType: Array<NotificationType>, doCallback: () => void): () => void {
+export function onUpdateNotification(messageTypes: Array<NotificationType>, doCallback: () => void): () => void {
// eslint-disable-next-line no-undef
const port = chrome.runtime.connect({ name: "notifications" });
const listener = (message: MessageFromBackend): void => {
- if (messageType.includes(message.type)) {
+ const shouldNotify = messageTypes.includes(message.type)
+ console.log("Notification arrived, should notify?", shouldNotify, message.type, messageTypes)
+ if (shouldNotify) {
doCallback();
}
};