remove diag, check tos
This commit is contained in:
parent
1f7d2a9cd2
commit
036f8a463f
@ -28,12 +28,10 @@ import {
|
|||||||
FormProvider,
|
FormProvider,
|
||||||
} from "../../../../components/form/FormProvider.js";
|
} from "../../../../components/form/FormProvider.js";
|
||||||
import { Input } from "../../../../components/form/Input.js";
|
import { Input } from "../../../../components/form/Input.js";
|
||||||
import { useBackendContext } from "../../../../context/backend.js";
|
|
||||||
import { MerchantBackend } from "../../../../declaration.js";
|
|
||||||
import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js";
|
import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js";
|
||||||
import { parsePayUri, stringifyPaytoUri } from "@gnu-taler/taler-util";
|
|
||||||
import { undefinedIfEmpty } from "../../../../utils/table.js";
|
|
||||||
import { InputSelector } from "../../../../components/form/InputSelector.js";
|
import { InputSelector } from "../../../../components/form/InputSelector.js";
|
||||||
|
import { MerchantBackend } from "../../../../declaration.js";
|
||||||
|
import { undefinedIfEmpty } from "../../../../utils/table.js";
|
||||||
|
|
||||||
type Entity = MerchantBackend.BankAccounts.AccountAddDetails & { repeatPassword: string };
|
type Entity = MerchantBackend.BankAccounts.AccountAddDetails & { repeatPassword: string };
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ export function ShowButtonsNonAcceptedTosView({
|
|||||||
</WarningText>
|
</WarningText>
|
||||||
</section>
|
</section>
|
||||||
)} */}
|
)} */}
|
||||||
{terms.status === ExchangeTosStatus.Pending && (
|
{terms.status === ExchangeTosStatus.Accepted && (
|
||||||
<section style={{ justifyContent: "space-around", display: "flex" }}>
|
<section style={{ justifyContent: "space-around", display: "flex" }}>
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
@ -181,7 +181,7 @@ export function ShowTosContentView({
|
|||||||
</LinkSuccess>
|
</LinkSuccess>
|
||||||
</section>
|
</section>
|
||||||
)}
|
)}
|
||||||
{termsAccepted && terms.status !== ExchangeTosStatus.Proposed && (
|
{termsAccepted && terms.status !== ExchangeTosStatus.Accepted && (
|
||||||
<section style={{ justifyContent: "space-around", display: "flex" }}>
|
<section style={{ justifyContent: "space-around", display: "flex" }}>
|
||||||
<CheckboxOutlined
|
<CheckboxOutlined
|
||||||
name="terms"
|
name="terms"
|
||||||
|
@ -118,8 +118,8 @@ export function useComponentState({
|
|||||||
subject === undefined
|
subject === undefined
|
||||||
? undefined
|
? undefined
|
||||||
: !subject
|
: !subject
|
||||||
? "Can't be empty"
|
? "Can't be empty"
|
||||||
: undefined,
|
: undefined,
|
||||||
value: subject ?? "",
|
value: subject ?? "",
|
||||||
onInput: pushAlertOnError(async (e) => setSubject(e)),
|
onInput: pushAlertOnError(async (e) => setSubject(e)),
|
||||||
},
|
},
|
||||||
@ -172,6 +172,10 @@ async function checkPeerPushDebitAndCheckMax(
|
|||||||
//a good response that allow us to try again
|
//a good response that allow us to try again
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
if (Amounts.cmp(newAmount, amount) === 1) {
|
||||||
|
//how can this happen?
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
return checkPeerPushDebitAndCheckMax(api, Amounts.stringify(newAmount));
|
return checkPeerPushDebitAndCheckMax(api, Amounts.stringify(newAmount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of GNU Taler
|
|
||||||
(C) 2022 Taler Systems S.A.
|
|
||||||
|
|
||||||
GNU Taler is free software; you can redistribute it and/or modify it under the
|
|
||||||
terms of the GNU General Public License as published by the Free Software
|
|
||||||
Foundation; either version 3, or (at your option) any later version.
|
|
||||||
|
|
||||||
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { WalletDiagnostics } from "@gnu-taler/taler-util";
|
|
||||||
import { useEffect, useState } from "preact/hooks";
|
|
||||||
import { useBackendContext } from "../context/backend.js";
|
|
||||||
|
|
||||||
export function useDiagnostics(): [WalletDiagnostics | undefined, boolean] {
|
|
||||||
const [timedOut, setTimedOut] = useState(false);
|
|
||||||
const api = useBackendContext();
|
|
||||||
const [diagnostics, setDiagnostics] = useState<WalletDiagnostics | undefined>(
|
|
||||||
undefined,
|
|
||||||
);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
let gotDiagnostics = false;
|
|
||||||
setTimeout(() => {
|
|
||||||
if (!gotDiagnostics) {
|
|
||||||
console.error("timed out");
|
|
||||||
setTimedOut(true);
|
|
||||||
}
|
|
||||||
}, 1000);
|
|
||||||
const doFetch = async (): Promise<void> => {
|
|
||||||
const d = await api.background.call("getDiagnostics", undefined);
|
|
||||||
gotDiagnostics = true;
|
|
||||||
setDiagnostics(d);
|
|
||||||
};
|
|
||||||
doFetch();
|
|
||||||
}, []);
|
|
||||||
return [diagnostics, timedOut];
|
|
||||||
}
|
|
@ -27,24 +27,21 @@ import {
|
|||||||
PendingTaskInfo,
|
PendingTaskInfo,
|
||||||
WalletApiOperation,
|
WalletApiOperation,
|
||||||
} from "@gnu-taler/taler-wallet-core";
|
} from "@gnu-taler/taler-wallet-core";
|
||||||
import { format } from "date-fns";
|
|
||||||
import { Fragment, h, VNode } from "preact";
|
|
||||||
import { useEffect, useRef, useState } from "preact/hooks";
|
|
||||||
import { Diagnostics } from "../components/Diagnostics.js";
|
|
||||||
import { SelectList } from "../components/SelectList.js";
|
|
||||||
import { NotifyUpdateFadeOut } from "../components/styled/index.js";
|
|
||||||
import { Time } from "../components/Time.js";
|
|
||||||
import { useBackendContext } from "../context/backend.js";
|
|
||||||
import { useTranslationContext } from "@gnu-taler/web-util/browser";
|
import { useTranslationContext } from "@gnu-taler/web-util/browser";
|
||||||
|
import { format } from "date-fns";
|
||||||
|
import { Fragment, VNode, h } from "preact";
|
||||||
|
import { useEffect, useRef, useState } from "preact/hooks";
|
||||||
|
import { SelectList } from "../components/SelectList.js";
|
||||||
|
import { Time } from "../components/Time.js";
|
||||||
|
import { NotifyUpdateFadeOut } from "../components/styled/index.js";
|
||||||
|
import { useBackendContext } from "../context/backend.js";
|
||||||
import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
|
import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
|
||||||
import { useDiagnostics } from "../hooks/useDiagnostics.js";
|
|
||||||
import { Button } from "../mui/Button.js";
|
import { Button } from "../mui/Button.js";
|
||||||
import { Grid } from "../mui/Grid.js";
|
import { Grid } from "../mui/Grid.js";
|
||||||
import { Paper } from "../mui/Paper.js";
|
import { Paper } from "../mui/Paper.js";
|
||||||
import { TextField } from "../mui/TextField.js";
|
import { TextField } from "../mui/TextField.js";
|
||||||
|
|
||||||
export function DeveloperPage(): VNode {
|
export function DeveloperPage(): VNode {
|
||||||
const [status, timedOut] = useDiagnostics();
|
|
||||||
|
|
||||||
const listenAllEvents = Array.from<NotificationType>({ length: 1 });
|
const listenAllEvents = Array.from<NotificationType>({ length: 1 });
|
||||||
|
|
||||||
@ -73,13 +70,11 @@ export function DeveloperPage(): VNode {
|
|||||||
response === undefined
|
response === undefined
|
||||||
? nonResponse
|
? nonResponse
|
||||||
: response.hasError
|
: response.hasError
|
||||||
? nonResponse
|
? nonResponse
|
||||||
: response.response;
|
: response.response;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
status={status}
|
|
||||||
timedOut={timedOut}
|
|
||||||
operations={operations}
|
operations={operations}
|
||||||
coins={coins}
|
coins={coins}
|
||||||
exchanges={exchanges}
|
exchanges={exchanges}
|
||||||
@ -108,8 +103,6 @@ type SplitedCoinInfo = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
status: any;
|
|
||||||
timedOut: boolean;
|
|
||||||
operations: PendingTaskInfo[];
|
operations: PendingTaskInfo[];
|
||||||
coins: CoinsInfo;
|
coins: CoinsInfo;
|
||||||
exchanges: ExchangeListItem[];
|
exchanges: ExchangeListItem[];
|
||||||
@ -121,8 +114,6 @@ function hashObjectId(o: any): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function View({
|
export function View({
|
||||||
status,
|
|
||||||
timedOut,
|
|
||||||
operations,
|
operations,
|
||||||
coins,
|
coins,
|
||||||
onDownloadDatabase,
|
onDownloadDatabase,
|
||||||
@ -458,7 +449,6 @@ export function View({
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
<br />
|
<br />
|
||||||
<Diagnostics diagnostics={status} timedOut={timedOut} />
|
|
||||||
{operations && operations.length > 0 && (
|
{operations && operations.length > 0 && (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<p>
|
<p>
|
||||||
|
@ -29,17 +29,9 @@ export default {
|
|||||||
|
|
||||||
export const Normal = tests.createExample(TestedComponent, {
|
export const Normal = tests.createExample(TestedComponent, {
|
||||||
permissionToggle: { value: true, button: {} },
|
permissionToggle: { value: true, button: {} },
|
||||||
diagnostics: {
|
|
||||||
errors: [],
|
|
||||||
walletManifestVersion: "1.0",
|
|
||||||
walletManifestDisplayVersion: "1.0",
|
|
||||||
firefoxIdbProblem: false,
|
|
||||||
dbOutdated: false,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export const TimedoutDiagnostics = tests.createExample(TestedComponent, {
|
export const TimedoutDiagnostics = tests.createExample(TestedComponent, {
|
||||||
timedOut: true,
|
|
||||||
permissionToggle: { value: true, button: {} },
|
permissionToggle: { value: true, button: {} },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ import { Fragment, h, VNode } from "preact";
|
|||||||
import { Checkbox } from "../components/Checkbox.js";
|
import { Checkbox } from "../components/Checkbox.js";
|
||||||
import { SubTitle, Title } from "../components/styled/index.js";
|
import { SubTitle, Title } from "../components/styled/index.js";
|
||||||
import { useTranslationContext } from "@gnu-taler/web-util/browser";
|
import { useTranslationContext } from "@gnu-taler/web-util/browser";
|
||||||
import { useDiagnostics } from "../hooks/useDiagnostics.js";
|
|
||||||
import { useSettings } from "../hooks/useSettings.js";
|
import { useSettings } from "../hooks/useSettings.js";
|
||||||
import { ToggleHandler } from "../mui/handlers.js";
|
import { ToggleHandler } from "../mui/handlers.js";
|
||||||
import { platform } from "../platform/foreground.js";
|
import { platform } from "../platform/foreground.js";
|
||||||
@ -34,7 +33,6 @@ import { useAlertContext } from "../context/alert.js";
|
|||||||
export function WelcomePage(): VNode {
|
export function WelcomePage(): VNode {
|
||||||
const [settings, updateSettings] = useSettings();
|
const [settings, updateSettings] = useSettings();
|
||||||
const { safely } = useAlertContext();
|
const { safely } = useAlertContext();
|
||||||
const [diagnostics, timedOut] = useDiagnostics();
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
permissionToggle={{
|
permissionToggle={{
|
||||||
@ -45,21 +43,15 @@ export function WelcomePage(): VNode {
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
diagnostics={diagnostics}
|
|
||||||
timedOut={timedOut}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ViewProps {
|
export interface ViewProps {
|
||||||
permissionToggle: ToggleHandler;
|
permissionToggle: ToggleHandler;
|
||||||
diagnostics: WalletDiagnostics | undefined;
|
|
||||||
timedOut: boolean;
|
|
||||||
}
|
}
|
||||||
export function View({
|
export function View({
|
||||||
permissionToggle,
|
permissionToggle,
|
||||||
diagnostics,
|
|
||||||
timedOut,
|
|
||||||
}: ViewProps): VNode {
|
}: ViewProps): VNode {
|
||||||
const { i18n } = useTranslationContext();
|
const { i18n } = useTranslationContext();
|
||||||
return (
|
return (
|
||||||
|
@ -70,10 +70,6 @@ export interface BackgroundOperations {
|
|||||||
request: void;
|
request: void;
|
||||||
response: void;
|
response: void;
|
||||||
};
|
};
|
||||||
getDiagnostics: {
|
|
||||||
request: void;
|
|
||||||
response: WalletDiagnostics;
|
|
||||||
};
|
|
||||||
runGarbageCollector: {
|
runGarbageCollector: {
|
||||||
request: void;
|
request: void;
|
||||||
response: void;
|
response: void;
|
||||||
|
@ -76,43 +76,6 @@ const walletInit: OpenedPromise<void> = openPromise<void>();
|
|||||||
|
|
||||||
const logger = new Logger("wxBackend.ts");
|
const logger = new Logger("wxBackend.ts");
|
||||||
|
|
||||||
async function getDiagnostics(): Promise<WalletDiagnostics> {
|
|
||||||
const manifestData = platform.getWalletWebExVersion();
|
|
||||||
const errors: string[] = [];
|
|
||||||
let firefoxIdbProblem = false;
|
|
||||||
let dbOutdated = false;
|
|
||||||
try {
|
|
||||||
await walletInit.promise;
|
|
||||||
} catch (e) {
|
|
||||||
errors.push("Error during wallet initialization: " + e);
|
|
||||||
if (
|
|
||||||
currentDatabase === undefined &&
|
|
||||||
outdatedDbVersion === undefined &&
|
|
||||||
platform.isFirefox()
|
|
||||||
) {
|
|
||||||
firefoxIdbProblem = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!currentWallet) {
|
|
||||||
errors.push("Could not create wallet backend.");
|
|
||||||
}
|
|
||||||
if (!currentDatabase) {
|
|
||||||
errors.push("Could not open database");
|
|
||||||
}
|
|
||||||
if (outdatedDbVersion !== undefined) {
|
|
||||||
errors.push(`Outdated DB version: ${outdatedDbVersion}`);
|
|
||||||
dbOutdated = true;
|
|
||||||
}
|
|
||||||
const diagnostics: WalletDiagnostics = {
|
|
||||||
walletManifestDisplayVersion: manifestData.version_name || "(undefined)",
|
|
||||||
walletManifestVersion: manifestData.version,
|
|
||||||
errors,
|
|
||||||
firefoxIdbProblem,
|
|
||||||
dbOutdated,
|
|
||||||
};
|
|
||||||
return diagnostics;
|
|
||||||
}
|
|
||||||
|
|
||||||
type BackendHandlerType = {
|
type BackendHandlerType = {
|
||||||
[Op in keyof BackgroundOperations]: (
|
[Op in keyof BackgroundOperations]: (
|
||||||
req: BackgroundOperations[Op]["request"],
|
req: BackgroundOperations[Op]["request"],
|
||||||
@ -172,7 +135,6 @@ async function isInjectionEnabled(): Promise<boolean> {
|
|||||||
const backendHandlers: BackendHandlerType = {
|
const backendHandlers: BackendHandlerType = {
|
||||||
freeze,
|
freeze,
|
||||||
sum,
|
sum,
|
||||||
getDiagnostics,
|
|
||||||
resetDb,
|
resetDb,
|
||||||
runGarbageCollector,
|
runGarbageCollector,
|
||||||
setLoggingLevel,
|
setLoggingLevel,
|
||||||
|
Loading…
Reference in New Issue
Block a user