From 655c5fc18a22ae167160dd93e53d87e130fa9afa Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 8 Jul 2021 15:23:53 -0300 Subject: add more backup stories, sync by one provider --- .../src/hooks/useBackupStatus.ts | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts (limited to 'packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts') diff --git a/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts b/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts new file mode 100644 index 000000000..2d51cb303 --- /dev/null +++ b/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts @@ -0,0 +1,55 @@ +import { ProviderInfo, ProviderPaymentPaid, ProviderPaymentStatus, ProviderPaymentType } from "@gnu-taler/taler-wallet-core"; +import { useEffect, useState } from "preact/hooks"; +import * as wxApi from "../wxApi"; + + +export interface BackupStatus { + deviceName: string; + providers: ProviderInfo[]; + sync: () => Promise; +} + +function getStatusTypeOrder(t: ProviderPaymentStatus) { + return [ + ProviderPaymentType.InsufficientBalance, + ProviderPaymentType.TermsChanged, + ProviderPaymentType.Unpaid, + ProviderPaymentType.Paid, + ProviderPaymentType.Pending, + ].indexOf(t.type) +} + +function getStatusPaidOrder(a: ProviderPaymentPaid, b: ProviderPaymentPaid) { + return a.paidUntil.t_ms === 'never' ? -1 : + b.paidUntil.t_ms === 'never' ? 1 : + a.paidUntil.t_ms - b.paidUntil.t_ms +} + +export function useBackupStatus(): BackupStatus | undefined { + const [status, setStatus] = useState(undefined) + + useEffect(() => { + async function run() { + //create a first list of backup info by currency + const status = await wxApi.getBackupInfo() + + const providers = status.providers.sort((a, b) => { + if (a.paymentStatus.type === ProviderPaymentType.Paid && b.paymentStatus.type === ProviderPaymentType.Paid) { + return getStatusPaidOrder(a.paymentStatus, b.paymentStatus) + } + return getStatusTypeOrder(a.paymentStatus) - getStatusTypeOrder(b.paymentStatus) + }) + + async function sync() { + await wxApi.syncAllProviders() + } + + setStatus({ deviceName: status.deviceId, providers, sync }) + } + run() + }, []) + + return status +} + + -- cgit v1.2.3