summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts')
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts55
1 files changed, 55 insertions, 0 deletions
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<void>;
+}
+
+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<BackupStatus | undefined>(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
+}
+
+