diff options
author | Sebastian <sebasjm@gmail.com> | 2021-12-01 14:14:24 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2021-12-01 14:14:24 -0300 |
commit | b0c2a73146907b2edeb1d2c97536478c995eb73b (patch) | |
tree | b1147a23caa976c710efc174aafab6d11519a2e3 /packages/taler-wallet-webextension | |
parent | 9f60e3d7ec989f7f0a3db13af8a902f237c77559 (diff) | |
download | wallet-core-b0c2a73146907b2edeb1d2c97536478c995eb73b.tar.xz |
export database, missing wallet functionality
Diffstat (limited to 'packages/taler-wallet-webextension')
-rw-r--r-- | packages/taler-wallet-webextension/src/popup/DeveloperPage.stories.tsx | 1 | ||||
-rw-r--r-- | packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx | 27 |
2 files changed, 26 insertions, 2 deletions
diff --git a/packages/taler-wallet-webextension/src/popup/DeveloperPage.stories.tsx b/packages/taler-wallet-webextension/src/popup/DeveloperPage.stories.tsx index 1239a03e9..ea8a3537a 100644 --- a/packages/taler-wallet-webextension/src/popup/DeveloperPage.stories.tsx +++ b/packages/taler-wallet-webextension/src/popup/DeveloperPage.stories.tsx @@ -32,6 +32,7 @@ export default { }; export const AllOff = createExample(TestedComponent, { + onDownloadDatabase: async () => "this is the content of the database", operations: [ { type: PendingTaskType.ExchangeUpdate, diff --git a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx index 494f8ecbf..8d24545d5 100644 --- a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx +++ b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx @@ -16,15 +16,19 @@ import { NotificationType } from "@gnu-taler/taler-util"; import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core"; +import { format } from "date-fns"; import { Fragment, h, VNode } from "preact"; +import { useState } from "preact/hooks"; import { Diagnostics } from "../components/Diagnostics"; import { NotifyUpdateFadeOut } from "../components/styled/index"; +import { Time } from "../components/Time"; import { useAsyncAsHook } from "../hooks/useAsyncAsHook"; import { useDiagnostics } from "../hooks/useDiagnostics"; import * as wxApi from "../wxApi"; export function DeveloperPage(): VNode { const [status, timedOut] = useDiagnostics(); + const listenAllEvents = Array.from<NotificationType>({ length: 1 }); listenAllEvents.includes = () => true; // includes every event const operationsResponse = useAsyncAsHook( @@ -39,19 +43,33 @@ export function DeveloperPage(): VNode { ? [] : operationsResponse.response.pendingOperations; - return <View status={status} timedOut={timedOut} operations={operations} />; + return <View status={status} + timedOut={timedOut} + operations={operations} + onDownloadDatabase={async () => "content"} + />; } + export interface Props { status: any; timedOut: boolean; operations: PendingTaskInfo[]; + onDownloadDatabase: () => Promise<string>; } function hashObjectId(o: any): string { return JSON.stringify(o); } -export function View({ status, timedOut, operations }: Props): VNode { +export function View({ status, timedOut, operations, onDownloadDatabase }: Props): VNode { + const [downloadedDatabase, setDownloadedDatabase] = useState<{time: Date; content: string}|undefined>(undefined) + async function onExportDatabase(): Promise<void> { + const content = await onDownloadDatabase() + setDownloadedDatabase({ + time: new Date(), + content + }) + } return ( <div> <p>Debug tools:</p> @@ -61,6 +79,11 @@ export function View({ status, timedOut, operations }: Props): VNode { <button onClick={confirmReset}>reset</button> <br /> + <button onClick={onExportDatabase}>export database</button> + {downloadedDatabase && <div> + Database exported at <Time timestamp={{t_ms: downloadedDatabase.time.getTime()}} format="yyyy/MM/dd HH:mm:ss" /> <a href={`data:text/plain;charset=utf-8;base64,${Buffer.from(downloadedDatabase.content).toString('base64')}`} download={`taler-wallet-database-${format(downloadedDatabase.time, 'yyyy/MM/dd_HH:mm')}.json`}>click here</a> to download + </div>} + <br /> <Diagnostics diagnostics={status} timedOut={timedOut} /> {operations && operations.length > 0 && ( <Fragment> |