@plutonhq/core-frontend 0.1.31 → 0.1.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist-lib/@types/plans.d.ts +4 -0
  2. package/dist-lib/@types/plans.d.ts.map +1 -1
  3. package/dist-lib/components/Plan/AddPlan/AddPlan.d.ts.map +1 -1
  4. package/dist-lib/components/Plan/AddPlan/AddPlan.js +29 -24
  5. package/dist-lib/components/Plan/AddPlan/AddPlan.js.map +1 -1
  6. package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +33 -33
  7. package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
  8. package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js +36 -36
  9. package/dist-lib/components/Plan/BackupProgress/BackupProgress.d.ts.map +1 -1
  10. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +63 -53
  11. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
  12. package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js +32 -32
  13. package/dist-lib/components/Plan/Backups/Backups.d.ts.map +1 -1
  14. package/dist-lib/components/Plan/Backups/Backups.js +148 -144
  15. package/dist-lib/components/Plan/Backups/Backups.js.map +1 -1
  16. package/dist-lib/components/Plan/Backups/Backups.module.scss.js +34 -32
  17. package/dist-lib/components/Plan/Backups/Backups.module.scss.js.map +1 -1
  18. package/dist-lib/components/Plan/FilterPlans/FilterPlans.d.ts +9 -0
  19. package/dist-lib/components/Plan/FilterPlans/FilterPlans.d.ts.map +1 -0
  20. package/dist-lib/components/Plan/FilterPlans/FilterPlans.js +117 -0
  21. package/dist-lib/components/Plan/FilterPlans/FilterPlans.js.map +1 -0
  22. package/dist-lib/components/Plan/FilterPlans/FilterPlans.module.scss.js +20 -0
  23. package/dist-lib/components/Plan/FilterPlans/FilterPlans.module.scss.js.map +1 -0
  24. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts +4 -2
  25. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
  26. package/dist-lib/components/Plan/PlanForm/PlanForm.js +33 -29
  27. package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
  28. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts +2 -1
  29. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts.map +1 -1
  30. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js +85 -57
  31. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js.map +1 -1
  32. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js +11 -9
  33. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js.map +1 -1
  34. package/dist-lib/components/Plan/PlanItems/PlanItem.js +1 -1
  35. package/dist-lib/components/Plan/PlanItems/PlanItem.js.map +1 -1
  36. package/dist-lib/components/Plan/PlanRepair/PlanRepair.d.ts +9 -0
  37. package/dist-lib/components/Plan/PlanRepair/PlanRepair.d.ts.map +1 -0
  38. package/dist-lib/components/Plan/PlanRepair/PlanRepair.js +262 -0
  39. package/dist-lib/components/Plan/PlanRepair/PlanRepair.js.map +1 -0
  40. package/dist-lib/components/Plan/PlanRepair/PlanRepair.module.scss.js +14 -0
  41. package/dist-lib/components/Plan/PlanRepair/PlanRepair.module.scss.js.map +1 -0
  42. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts +4 -2
  43. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts.map +1 -1
  44. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js +24 -22
  45. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js.map +1 -1
  46. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts +4 -2
  47. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts.map +1 -1
  48. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js +39 -28
  49. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js.map +1 -1
  50. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js +66 -64
  51. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js.map +1 -1
  52. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.d.ts +7 -0
  53. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.d.ts.map +1 -0
  54. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.js +116 -0
  55. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.js.map +1 -0
  56. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.module.scss.js +20 -0
  57. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.module.scss.js.map +1 -0
  58. package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
  59. package/dist-lib/components/Plan/PlanStats/PlanStats.js +29 -30
  60. package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
  61. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +16 -14
  62. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js.map +1 -1
  63. package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
  64. package/dist-lib/components/common/Icon/Icon.js +395 -378
  65. package/dist-lib/components/common/Icon/Icon.js.map +1 -1
  66. package/dist-lib/components/common/SortItems/SortItems.d.ts +2 -1
  67. package/dist-lib/components/common/SortItems/SortItems.d.ts.map +1 -1
  68. package/dist-lib/components/common/SortItems/SortItems.js +14 -14
  69. package/dist-lib/components/common/SortItems/SortItems.js.map +1 -1
  70. package/dist-lib/components/common/SortItems/SortItems.module.scss.js +1 -1
  71. package/dist-lib/components/common/form/MultiSelect/MultiSelect.module.scss.js +16 -16
  72. package/dist-lib/components/index.d.ts +2 -0
  73. package/dist-lib/components/index.d.ts.map +1 -1
  74. package/dist-lib/components.js +199 -195
  75. package/dist-lib/components.js.map +1 -1
  76. package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
  77. package/dist-lib/hooks/usePlanSingleActions.js +22 -19
  78. package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
  79. package/dist-lib/node_modules/.pnpm/@kurkle_color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js +449 -0
  80. package/dist-lib/node_modules/.pnpm/@kurkle_color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js.map +1 -0
  81. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js +5219 -0
  82. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js.map +1 -0
  83. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js +1691 -0
  84. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js.map +1 -0
  85. package/dist-lib/node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@18.3.1/node_modules/react-chartjs-2/dist/index.js +93 -0
  86. package/dist-lib/node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@18.3.1/node_modules/react-chartjs-2/dist/index.js.map +1 -0
  87. package/dist-lib/routes/Login/Login.d.ts.map +1 -1
  88. package/dist-lib/routes/Login/Login.js +45 -36
  89. package/dist-lib/routes/Login/Login.js.map +1 -1
  90. package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
  91. package/dist-lib/routes/PlanSingle/PlanSingle.js +131 -118
  92. package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
  93. package/dist-lib/routes/Plans/Plans.d.ts.map +1 -1
  94. package/dist-lib/routes/Plans/Plans.js +77 -51
  95. package/dist-lib/routes/Plans/Plans.js.map +1 -1
  96. package/dist-lib/services/plans.d.ts +33 -5
  97. package/dist-lib/services/plans.d.ts.map +1 -1
  98. package/dist-lib/services/plans.js +92 -67
  99. package/dist-lib/services/plans.js.map +1 -1
  100. package/dist-lib/services.js +93 -91
  101. package/dist-lib/styles/core-frontend.css +1 -1
  102. package/dist-lib/styles/global.scss +4 -0
  103. package/dist-lib/utils/helpers.d.ts +2 -0
  104. package/dist-lib/utils/helpers.d.ts.map +1 -1
  105. package/dist-lib/utils/helpers.js +68 -42
  106. package/dist-lib/utils/helpers.js.map +1 -1
  107. package/dist-lib/utils.js +36 -34
  108. package/package.json +3 -1
  109. package/src/@types/plans.ts +5 -0
  110. package/src/components/Plan/AddPlan/AddPlan.tsx +22 -16
  111. package/src/components/Plan/BackupEvents/BackupEvents.module.scss +2 -0
  112. package/src/components/Plan/BackupEvents/BackupEvents.tsx +2 -2
  113. package/src/components/Plan/BackupProgress/BackupProgress.module.scss +1 -0
  114. package/src/components/Plan/BackupProgress/BackupProgress.tsx +7 -2
  115. package/src/components/Plan/Backups/Backups.module.scss +16 -0
  116. package/src/components/Plan/Backups/Backups.tsx +13 -2
  117. package/src/components/Plan/FilterPlans/FilterPlans.module.scss +65 -0
  118. package/src/components/Plan/FilterPlans/FilterPlans.tsx +126 -0
  119. package/src/components/Plan/PlanForm/PlanForm.tsx +7 -1
  120. package/src/components/Plan/PlanIntegrity/PlanIntegrity.module.scss +19 -0
  121. package/src/components/Plan/PlanIntegrity/PlanIntegrity.tsx +40 -3
  122. package/src/components/Plan/PlanItems/PlanItem.tsx +1 -1
  123. package/src/components/Plan/PlanRepair/PlanRepair.module.scss +53 -0
  124. package/src/components/Plan/PlanRepair/PlanRepair.tsx +243 -0
  125. package/src/components/Plan/PlanSettings/PlanAdvancedSettings.tsx +6 -2
  126. package/src/components/Plan/PlanSettings/PlanGeneralSettings.tsx +14 -2
  127. package/src/components/Plan/PlanSettings/PlanSettings.module.scss +8 -0
  128. package/src/components/Plan/PlanSizeChart/PlanSizeChart.module.scss +76 -0
  129. package/src/components/Plan/PlanSizeChart/PlanSizeChart.tsx +163 -0
  130. package/src/components/Plan/PlanStats/PlanStats.module.scss +16 -2
  131. package/src/components/Plan/PlanStats/PlanStats.tsx +8 -11
  132. package/src/components/common/Icon/Icon.tsx +21 -0
  133. package/src/components/common/SortItems/SortItems.module.scss +3 -2
  134. package/src/components/common/SortItems/SortItems.tsx +6 -3
  135. package/src/components/common/form/MultiSelect/MultiSelect.module.scss +1 -0
  136. package/src/components/index.ts +2 -0
  137. package/src/hooks/usePlanSingleActions.tsx +26 -23
  138. package/src/routes/Login/Login.tsx +8 -2
  139. package/src/routes/PlanSingle/PlanSingle.tsx +17 -0
  140. package/src/routes/Plans/Plans.tsx +70 -35
  141. package/src/services/plans.ts +40 -4
  142. package/src/styles/global.scss +4 -0
  143. package/src/utils/helpers.ts +25 -0
@@ -1,34 +1,35 @@
1
- import { jsxs as r, jsx as t, Fragment as C } from "react/jsx-runtime";
2
- import { useState as x } from "react";
3
- import { useQueryClient as W } from "@tanstack/react-query";
4
- import { toast as O } from "react-toastify";
1
+ import { jsxs as r, jsx as t, Fragment as R } from "react/jsx-runtime";
2
+ import { useState as O } from "react";
3
+ import { useQueryClient as X } from "@tanstack/react-query";
4
+ import { toast as j } from "react-toastify";
5
5
  import d from "../../common/Icon/Icon.js";
6
- import { useCancelBackup as X, useGetBackupProgress as Z } from "../../../services/backups.js";
6
+ import { useCancelBackup as Z, useGetBackupProgress as D } from "../../../services/backups.js";
7
7
  import e from "./BackupProgress.module.scss.js";
8
- import { timeAgo as D, formatDateTime as ee, formatBytes as j, formatSeconds as se } from "../../../utils/helpers.js";
9
- import { extractResticData as re, generateBackupProgressMessage as te, generateRestoreProgressMessage as ne, generateMirrorProgressMessage as ie } from "../../../utils/progressHelpers.js";
10
- import oe from "../../common/ActionModal/ActionModal.js";
11
- import { useCancelRestore as ae, useGetRestoreProgress as le } from "../../../services/restores.js";
12
- import ce from "../BackupEvents/BackupEvents.js";
13
- const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup" }) => {
14
- const [I, M] = x(!1), [K, S] = x(!1), B = W(), $ = ae(), w = X(), { id: g, started: y } = l, { data: o } = i === "backup" ? Z({ id: g, sourceId: b, sourceType: v, planId: c }) : le({ id: g, sourceId: b, sourceType: v, planId: c }), s = re(o), L = i === "backup" ? te(o) : ne(o), Q = o == null ? void 0 : o.events.find((a) => a.action === "BACKUP_OPERATION_START" && a.resticData), U = i === "backup" && !Q, {
15
- total_files_processed: G = (s == null ? void 0 : s.total_files) || 0,
16
- files_done: Y = 0,
17
- total_bytes_processed: N = (s == null ? void 0 : s.total_bytes_processed) || (s == null ? void 0 : s.total_bytes) || 0,
8
+ import { timeAgo as ee, formatDateTime as se, formatBytes as I, formatSeconds as re } from "../../../utils/helpers.js";
9
+ import { extractResticData as te, generateBackupProgressMessage as ne, generateRestoreProgressMessage as ie, generateMirrorProgressMessage as oe } from "../../../utils/progressHelpers.js";
10
+ import ae from "../../common/ActionModal/ActionModal.js";
11
+ import { useCancelRestore as le, useGetRestoreProgress as ce } from "../../../services/restores.js";
12
+ import de from "../BackupEvents/BackupEvents.js";
13
+ const Pe = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup" }) => {
14
+ var E;
15
+ const [K, S] = O(!1), [L, y] = O(!1), $ = X(), B = le(), w = Z(), { id: g, started: N } = l, { data: o } = i === "backup" ? D({ id: g, sourceId: b, sourceType: v, planId: c }) : ce({ id: g, sourceId: b, sourceType: v, planId: c }), s = te(o), Q = i === "backup" ? ne(o) : ie(o), U = (E = o == null ? void 0 : o.events) == null ? void 0 : E.find((a) => a.action === "BACKUP_OPERATION_START" && a.resticData), G = i === "backup" && !U, {
16
+ total_files_processed: Y = (s == null ? void 0 : s.total_files) || 0,
17
+ files_done: H = 0,
18
+ total_bytes_processed: _ = (s == null ? void 0 : s.total_bytes_processed) || (s == null ? void 0 : s.total_bytes) || 0,
18
19
  bytes_done: F = 0,
19
20
  bytes_restored: A = 0,
20
21
  files_restored: T = 0,
21
- seconds_remaining: H = 0,
22
- percent_done: _ = 0
22
+ seconds_remaining: J = 0,
23
+ percent_done: P = 0
23
24
  } = s || {};
24
- let h = Y, f = F, P = N, z = G, m = N ? Math.round(F / N * 100) : 0;
25
- i === "restore" && (m = Math.round(_ * 100), s != null && s.total_bytes && (P = s.total_bytes), A ? f = A : s != null && s.total_bytes && (f = Math.round(_ * s.total_bytes)), T ? h = T : s != null && s.total_files && (h = Math.round(_ * s.total_files))), (s == null ? void 0 : s.message_type) === "summary" && (m = 100, h = z, f = P);
26
- const J = () => {
27
- console.log("cancel :", i, l), i === "backup" ? O.promise(
25
+ let h = H, f = F, C = _, z = Y, m = _ ? Math.round(F / _ * 100) : 0;
26
+ i === "restore" && (m = Math.round(P * 100), s != null && s.total_bytes && (C = s.total_bytes), A ? f = A : s != null && s.total_bytes && (f = Math.round(P * s.total_bytes)), T ? h = T : s != null && s.total_files && (h = Math.round(P * s.total_files))), (s == null ? void 0 : s.message_type) === "summary" && (m = 100, h = z, f = C);
27
+ const V = () => {
28
+ console.log("cancel :", i, l), i === "backup" ? j.promise(
28
29
  w.mutateAsync(
29
30
  { planId: c, backupId: l.id },
30
31
  {
31
- onSuccess: () => B.invalidateQueries({ queryKey: ["plan", c] })
32
+ onSuccess: () => $.invalidateQueries({ queryKey: ["plan", c] })
32
33
  }
33
34
  ),
34
35
  {
@@ -40,11 +41,11 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
40
41
  }
41
42
  }
42
43
  }
43
- ) : O.promise(
44
- $.mutateAsync(
44
+ ) : j.promise(
45
+ B.mutateAsync(
45
46
  { planId: c, restoreId: l.id },
46
47
  {
47
- onSuccess: () => B.invalidateQueries({ queryKey: ["plan", c] })
48
+ onSuccess: () => $.invalidateQueries({ queryKey: ["plan", c] })
48
49
  }
49
50
  ),
50
51
  {
@@ -66,25 +67,34 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
66
67
  i === "restore" ? "Restoring " : "",
67
68
  "backup-",
68
69
  g,
69
- /* @__PURE__ */ r("span", { className: e.backupTime, title: ee(y), children: [
70
+ /* @__PURE__ */ r("span", { className: e.backupTime, title: se(N), children: [
70
71
  /* @__PURE__ */ t(d, { type: "clock", size: 12 }),
71
72
  " Started ",
72
- y ? D(new Date(y)) : "a few seconds ago"
73
+ N ? ee(new Date(N)) : "a few seconds ago"
73
74
  ] }),
74
75
  l.errorMsg && /* @__PURE__ */ r("span", { className: e.backupError, children: [
75
76
  /* @__PURE__ */ t(d, { type: "error-circle-filled", size: 13 }),
76
77
  " ",
77
- /* @__PURE__ */ r("i", { "data-tooltip-id": "htmlToolTip", "data-tooltip-place": "top", "data-tooltip-html": l.errorMsg, children: [
78
- /* @__PURE__ */ t("u", { children: "Error" }),
79
- " Occurred."
80
- ] }),
78
+ /* @__PURE__ */ r(
79
+ "i",
80
+ {
81
+ "data-tooltip-id": "htmlToolTip",
82
+ "data-tooltip-place": "top",
83
+ "data-tooltip-html": `<div class="linebreak-tooltip-content">${l.errorMsg.slice(0, 120) + (l.errorMsg.length > 120 ? "..." : "")}</div>`,
84
+ onClick: () => y(!0),
85
+ children: [
86
+ /* @__PURE__ */ t("u", { children: "Error" }),
87
+ " Occurred."
88
+ ]
89
+ }
90
+ ),
81
91
  " ",
82
92
  "Retrying..."
83
93
  ] })
84
94
  ] }),
85
95
  /* @__PURE__ */ r("div", { className: e.backupStart, children: [
86
- /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t("span", { className: e.progressMessage, onClick: () => S(!0), children: L }) }),
87
- /* @__PURE__ */ r("button", { onClick: () => M(!0), title: `Cancel ${i}`, children: [
96
+ /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t("span", { className: e.progressMessage, onClick: () => y(!0), children: Q }) }),
97
+ /* @__PURE__ */ r("button", { onClick: () => S(!0), title: `Cancel ${i}`, children: [
88
98
  /* @__PURE__ */ t(d, { type: "close", size: 12 }),
89
99
  " Cancel"
90
100
  ] })
@@ -101,20 +111,20 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
101
111
  ] }),
102
112
  /* @__PURE__ */ t("i", {}),
103
113
  /* @__PURE__ */ r("span", { children: [
104
- j(f),
114
+ I(f),
105
115
  " / ",
106
- j(P)
116
+ I(C)
107
117
  ] })
108
118
  ] }),
109
- /* @__PURE__ */ t("div", { className: e.ProgressStatsRight, children: i !== "restore" && /* @__PURE__ */ r(C, { children: [
119
+ /* @__PURE__ */ t("div", { className: e.ProgressStatsRight, children: i !== "restore" && /* @__PURE__ */ r(R, { children: [
110
120
  "Remaining: ",
111
- se(H)
121
+ re(J)
112
122
  ] }) })
113
123
  ] }),
114
124
  /* @__PURE__ */ t("div", { className: e.progressBar, children: /* @__PURE__ */ t(
115
125
  "div",
116
126
  {
117
- className: `${e.progressBarFill} ${m > 3 ? e.progressBarFilled : ""} ${U ? e.progressBarDryRun : ""}`,
127
+ className: `${e.progressBarFill} ${m > 3 ? e.progressBarFilled : ""} ${G ? e.progressBarDryRun : ""}`,
118
128
  style: { width: m + "%" },
119
129
  children: /* @__PURE__ */ r("span", { children: [
120
130
  m,
@@ -123,23 +133,23 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
123
133
  }
124
134
  ) })
125
135
  ] }),
126
- I && /* @__PURE__ */ t(
127
- oe,
136
+ K && /* @__PURE__ */ t(
137
+ ae,
128
138
  {
129
139
  title: `Cancel ${i}`,
130
- message: /* @__PURE__ */ t(C, { children: `Are you sure you want to cancel the ${i} process?` }),
131
- closeModal: () => M(!1),
140
+ message: /* @__PURE__ */ t(R, { children: `Are you sure you want to cancel the ${i} process?` }),
141
+ closeModal: () => S(!1),
132
142
  width: "400px",
133
143
  primaryAction: {
134
144
  title: `Yes, Cancel ${i}`,
135
145
  type: "danger",
136
- isPending: i === "restore" ? $.isPending : w.isPending,
137
- action: () => J()
146
+ isPending: i === "restore" ? B.isPending : w.isPending,
147
+ action: () => V()
138
148
  }
139
149
  }
140
150
  ),
141
- K && /* @__PURE__ */ t(
142
- ce,
151
+ L && /* @__PURE__ */ t(
152
+ de,
143
153
  {
144
154
  id: g,
145
155
  type: i,
@@ -148,15 +158,15 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
148
158
  sourceType: v,
149
159
  progressData: o,
150
160
  inProgress: !0,
151
- close: () => S(!1)
161
+ close: () => y(!1)
152
162
  }
153
163
  )
154
164
  ] }, l.id),
155
165
  (o == null ? void 0 : o.mirrors) && Object.keys(o.mirrors).length > 0 && /* @__PURE__ */ r("div", { className: e.mirrorsSection, children: [
156
166
  /* @__PURE__ */ t("div", { className: e.mirrorsTitle, children: "Replicating" }),
157
167
  /* @__PURE__ */ t("div", { className: e.mirrorsList, children: Object.entries(o.mirrors).map(([a, n]) => {
158
- var E, q;
159
- const k = (q = (E = n.events) == null ? void 0 : E.slice().reverse().find((V) => V.resticData)) == null ? void 0 : q.resticData, p = k != null && k.percent_done ? Math.round(k.percent_done * 100) : 0, R = ie(n);
168
+ var q, x;
169
+ const k = (x = (q = n.events) == null ? void 0 : q.slice().reverse().find((W) => W.resticData)) == null ? void 0 : x.resticData, p = k != null && k.percent_done ? Math.round(k.percent_done * 100) : 0, M = oe(n);
160
170
  let u = e.mirrorPending;
161
171
  return n.status === "running" && (u = p > 0 ? e.mirrorRunning : e.mirrorRunningIndeterminate), n.status === "completed" && (u = e.mirrorCompleted), n.status === "failed" && (u = e.mirrorFailed), n.status === "retrying" && (u = e.mirrorRunningIndeterminate), /* @__PURE__ */ r("div", { className: e.mirrorItem, children: [
162
172
  /* @__PURE__ */ r("div", { className: e.mirrorStorageIcon, children: [
@@ -168,8 +178,8 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
168
178
  /* @__PURE__ */ t("span", { className: e.mirrorName, children: n.storageName }),
169
179
  /* @__PURE__ */ r("span", { className: `${e.mirrorStatus} ${u}`, children: [
170
180
  n.status === "pending" && "Pending",
171
- n.status === "running" && (p > 0 ? `${p}% — ${R}` : R),
172
- n.status === "completed" && /* @__PURE__ */ r(C, { children: [
181
+ n.status === "running" && (p > 0 ? `${p}% — ${M}` : M),
182
+ n.status === "completed" && /* @__PURE__ */ r(R, { children: [
173
183
  /* @__PURE__ */ t(d, { type: "check", size: 10 }),
174
184
  " Completed"
175
185
  ] }),
@@ -177,7 +187,7 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
177
187
  /* @__PURE__ */ t(d, { type: "error", size: 12 }),
178
188
  " Failed"
179
189
  ] }),
180
- n.status === "retrying" && R
190
+ n.status === "retrying" && M
181
191
  ] })
182
192
  ] }),
183
193
  /* @__PURE__ */ t("div", { className: e.mirrorBar, children: /* @__PURE__ */ t(
@@ -196,6 +206,6 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
196
206
  ] }, l.id);
197
207
  };
198
208
  export {
199
- _e as default
209
+ Pe as default
200
210
  };
201
211
  //# sourceMappingURL=BackupProgress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackupProgress.js","sources":["../../../../src/components/Plan/BackupProgress/BackupProgress.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { useQueryClient } from '@tanstack/react-query';\r\nimport { toast } from 'react-toastify';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { useCancelBackup, useGetBackupProgress } from '../../../services/backups';\r\nimport classes from './BackupProgress.module.scss';\r\nimport { formatBytes, formatDateTime, formatSeconds, timeAgo } from '../../../utils/helpers';\r\nimport {\r\n generateBackupProgressMessage,\r\n extractResticData,\r\n generateRestoreProgressMessage,\r\n generateMirrorProgressMessage,\r\n} from '../../../utils/progressHelpers';\r\nimport { Backup } from '../../../@types/backups';\r\nimport { RestoreSlim } from '../../../@types/restores';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\nimport { useCancelRestore, useGetRestoreProgress } from '../../../services/restores';\r\nimport BackupEvents from '../BackupEvents/BackupEvents';\r\nimport { ReplicationProgressData } from '../../../@types/backups';\r\n\r\ninterface BackupProgressProps {\r\n item: Backup | RestoreSlim;\r\n sourceId: string;\r\n sourceType: string;\r\n planId: string;\r\n type: 'backup' | 'restore';\r\n}\r\n\r\nconst BackupProgress = ({ item, sourceId, sourceType, planId, type = 'backup' }: BackupProgressProps) => {\r\n const [showCancelModal, setShowCancelModal] = useState(false);\r\n const [showProgressDetails, setShowProgressDetails] = useState(false);\r\n const queryClient = useQueryClient();\r\n const cancelRestoreMutation = useCancelRestore();\r\n const cancelBackupMutation = useCancelBackup();\r\n\r\n const { id, started } = item;\r\n const { data: progressData } =\r\n type === 'backup' ? useGetBackupProgress({ id, sourceId, sourceType, planId }) : useGetRestoreProgress({ id, sourceId, sourceType, planId });\r\n\r\n const resticData = extractResticData(progressData);\r\n const progressMessage = type === 'backup' ? generateBackupProgressMessage(progressData) : generateRestoreProgressMessage(progressData);\r\n\r\n // Check if DryRun progress tracking phase\r\n const actualBackupStarted = progressData?.events.find((e: any) => e.action === 'BACKUP_OPERATION_START' && e.resticData);\r\n const isDryRun = type === 'backup' && !actualBackupStarted;\r\n\r\n // Extract progress values from restic data or use defaults\r\n const {\r\n total_files_processed: total_files = resticData?.total_files || 0,\r\n files_done = 0,\r\n total_bytes_processed: total_bytes = resticData?.total_bytes_processed || resticData?.total_bytes || 0,\r\n bytes_done = 0,\r\n bytes_restored = 0,\r\n files_restored = 0,\r\n seconds_remaining = 0,\r\n percent_done = 0,\r\n } = resticData || {};\r\n\r\n let filesProcessed = files_done;\r\n let bytesProcessed = bytes_done;\r\n let totalBytes = total_bytes;\r\n let totalFiles = total_files;\r\n let progressPercent = total_bytes ? Math.round((bytes_done / total_bytes) * 100) : 0;\r\n\r\n if (type === 'restore') {\r\n progressPercent = Math.round(percent_done * 100);\r\n if (resticData?.total_bytes) {\r\n totalBytes = resticData.total_bytes;\r\n }\r\n if (bytes_restored) {\r\n bytesProcessed = bytes_restored;\r\n } else {\r\n if (resticData?.total_bytes) {\r\n bytesProcessed = Math.round(percent_done * resticData.total_bytes);\r\n }\r\n }\r\n if (files_restored) {\r\n filesProcessed = files_restored;\r\n } else {\r\n if (resticData?.total_files) {\r\n filesProcessed = Math.round(percent_done * resticData.total_files);\r\n }\r\n }\r\n }\r\n\r\n // For completed backups, show 100% if we have summary data\r\n if (resticData?.message_type === 'summary') {\r\n progressPercent = 100;\r\n filesProcessed = totalFiles;\r\n bytesProcessed = totalBytes;\r\n }\r\n\r\n const cancel = () => {\r\n console.log('cancel :', type, item);\r\n if (type === 'backup') {\r\n toast.promise(\r\n cancelBackupMutation.mutateAsync(\r\n { planId, backupId: item.id },\r\n {\r\n onSuccess: () => queryClient.invalidateQueries({ queryKey: ['plan', planId] }),\r\n },\r\n ),\r\n {\r\n pending: 'Sending Cancel Request...',\r\n success: 'Backup process Cancelled!',\r\n error: {\r\n render({ data }: any) {\r\n // When the promise reject, data will contains the error\r\n return `Failed to cancel backup process. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n },\r\n );\r\n } else {\r\n toast.promise(\r\n cancelRestoreMutation.mutateAsync(\r\n { planId, restoreId: item.id },\r\n {\r\n onSuccess: () => queryClient.invalidateQueries({ queryKey: ['plan', planId] }),\r\n },\r\n ),\r\n {\r\n pending: 'Sending Cancel Request...',\r\n success: 'Restore process Cancelled!',\r\n error: {\r\n render({ data }: any) {\r\n // When the promise reject, data will contains the error\r\n return `Failed to cancel restore process. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n },\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <div key={item.id} className={classes.backup}>\r\n <div key={item.id} className={classes.backupProgress}>\r\n <div className={classes.backupIcon}>\r\n <Icon type=\"loading\" size={24} />\r\n </div>\r\n <div className={classes.backupLeft}>\r\n <div className={classes.backupId}>\r\n {type === 'restore' ? 'Restoring ' : ''}backup-{id}\r\n <span className={classes.backupTime} title={formatDateTime(started)}>\r\n <Icon type=\"clock\" size={12} /> Started {started ? timeAgo(new Date(started)) : 'a few seconds ago'}\r\n </span>\r\n {item.errorMsg && (\r\n <span className={classes.backupError}>\r\n <Icon type=\"error-circle-filled\" size={13} />{' '}\r\n <i data-tooltip-id=\"htmlToolTip\" data-tooltip-place=\"top\" data-tooltip-html={item.errorMsg}>\r\n <u>Error</u> Occurred.\r\n </i>{' '}\r\n Retrying...\r\n </span>\r\n )}\r\n </div>\r\n <div className={classes.backupStart}>\r\n <div>\r\n <span className={classes.progressMessage} onClick={() => setShowProgressDetails(true)}>\r\n {progressMessage}\r\n </span>\r\n {/* <Icon type=\"clock\" size={12} /> Started {started ? timeAgo(new Date(started)) : 'a few seconds ago'} */}\r\n </div>\r\n <button onClick={() => setShowCancelModal(true)} title={`Cancel ${type}`}>\r\n <Icon type=\"close\" size={12} /> Cancel\r\n </button>\r\n </div>\r\n </div>\r\n <div className={classes.backupRight}>\r\n <div className={classes.ProgressStats}>\r\n <div className={classes.ProgressStatsLeft}>\r\n <span>\r\n {filesProcessed} / {totalFiles} Files\r\n </span>\r\n <i></i>\r\n <span>\r\n {formatBytes(bytesProcessed)} / {formatBytes(totalBytes)}\r\n </span>\r\n </div>\r\n <div className={classes.ProgressStatsRight}>{type !== 'restore' && <>Remaining: {formatSeconds(seconds_remaining)}</>}</div>\r\n </div>\r\n <div className={classes.progressBar}>\r\n <div\r\n className={`${classes.progressBarFill} ${progressPercent > 3 ? classes.progressBarFilled : ''} ${isDryRun ? classes.progressBarDryRun : ''}`}\r\n style={{ width: progressPercent + '%' }}\r\n >\r\n <span>{progressPercent}%</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {showCancelModal && (\r\n <ActionModal\r\n title={`Cancel ${type}`}\r\n message={<>{`Are you sure you want to cancel the ${type} process?`}</>}\r\n closeModal={() => setShowCancelModal(false)}\r\n width=\"400px\"\r\n primaryAction={{\r\n title: `Yes, Cancel ${type}`,\r\n type: 'danger',\r\n isPending: type === 'restore' ? cancelRestoreMutation.isPending : cancelBackupMutation.isPending,\r\n action: () => cancel(),\r\n }}\r\n />\r\n )}\r\n {showProgressDetails && (\r\n <BackupEvents\r\n id={id}\r\n type={type}\r\n planId={planId}\r\n sourceId={sourceId}\r\n sourceType={sourceType}\r\n progressData={progressData}\r\n inProgress={true}\r\n close={() => setShowProgressDetails(false)}\r\n />\r\n )}\r\n </div>\r\n {/* Mirrors Progress */}\r\n {progressData?.mirrors && Object.keys(progressData.mirrors).length > 0 && (\r\n <div className={classes.mirrorsSection}>\r\n <div className={classes.mirrorsTitle}>Replicating</div>\r\n <div className={classes.mirrorsList}>\r\n {Object.entries(progressData.mirrors as Record<string, ReplicationProgressData>).map(([storageId, mirror]) => {\r\n const mirrorResticData = mirror.events\r\n ?.slice()\r\n .reverse()\r\n .find((e: any) => e.resticData)?.resticData;\r\n const mirrorPercent = mirrorResticData?.percent_done ? Math.round(mirrorResticData.percent_done * 100) : 0;\r\n const mirrorMessage = generateMirrorProgressMessage(mirror);\r\n\r\n let mirrorStatusClass = classes.mirrorPending;\r\n if (mirror.status === 'running')\r\n mirrorStatusClass = mirrorPercent > 0 ? classes.mirrorRunning : classes.mirrorRunningIndeterminate;\r\n if (mirror.status === 'completed') mirrorStatusClass = classes.mirrorCompleted;\r\n if (mirror.status === 'failed') mirrorStatusClass = classes.mirrorFailed;\r\n if (mirror.status === 'retrying') mirrorStatusClass = classes.mirrorRunningIndeterminate;\r\n\r\n return (\r\n <div key={storageId} className={classes.mirrorItem}>\r\n <div className={classes.mirrorStorageIcon}>\r\n {(mirror.status === 'running' || mirror.status === 'pending' || mirror.status === 'retrying') && (\r\n <Icon type=\"loading\" size={12} />\r\n )}\r\n <img src={`/providers/${mirror.storageType}.png`} />\r\n </div>\r\n <div className={classes.mirrorProgress}>\r\n <div className={classes.mirrorInfo}>\r\n <span className={classes.mirrorName}>{mirror.storageName}</span>\r\n <span className={`${classes.mirrorStatus} ${mirrorStatusClass}`}>\r\n {mirror.status === 'pending' && 'Pending'}\r\n {mirror.status === 'running' && (mirrorPercent > 0 ? `${mirrorPercent}% — ${mirrorMessage}` : mirrorMessage)}\r\n {mirror.status === 'completed' && (\r\n <>\r\n <Icon type=\"check\" size={10} /> Completed\r\n </>\r\n )}\r\n {mirror.status === 'failed' && (\r\n <span data-tooltip-id=\"htmlToolTip\" data-tooltip-html={mirror.error || 'Replication failed'}>\r\n <Icon type=\"error\" size={12} /> Failed\r\n </span>\r\n )}\r\n {mirror.status === 'retrying' && mirrorMessage}\r\n </span>\r\n </div>\r\n <div className={classes.mirrorBar}>\r\n <div\r\n className={`${classes.mirrorBarFill} ${mirrorStatusClass}`}\r\n style={{\r\n width:\r\n mirror.status === 'completed'\r\n ? '100%'\r\n : mirror.status === 'failed'\r\n ? '100%'\r\n : mirrorPercent > 0\r\n ? `${mirrorPercent}%`\r\n : undefined,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default BackupProgress;\r\n"],"names":["BackupProgress","item","sourceId","sourceType","planId","type","showCancelModal","setShowCancelModal","useState","showProgressDetails","setShowProgressDetails","queryClient","useQueryClient","cancelRestoreMutation","useCancelRestore","cancelBackupMutation","useCancelBackup","id","started","progressData","useGetBackupProgress","useGetRestoreProgress","resticData","extractResticData","progressMessage","generateBackupProgressMessage","generateRestoreProgressMessage","actualBackupStarted","e","isDryRun","total_files","files_done","total_bytes","bytes_done","bytes_restored","files_restored","seconds_remaining","percent_done","filesProcessed","bytesProcessed","totalBytes","totalFiles","progressPercent","cancel","toast","data","jsxs","classes","jsx","Icon","formatDateTime","timeAgo","formatBytes","Fragment","formatSeconds","ActionModal","BackupEvents","storageId","mirror","mirrorResticData","_b","_a","mirrorPercent","mirrorMessage","generateMirrorProgressMessage","mirrorStatusClass"],"mappings":"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"}
1
+ {"version":3,"file":"BackupProgress.js","sources":["../../../../src/components/Plan/BackupProgress/BackupProgress.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { useQueryClient } from '@tanstack/react-query';\r\nimport { toast } from 'react-toastify';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { useCancelBackup, useGetBackupProgress } from '../../../services/backups';\r\nimport classes from './BackupProgress.module.scss';\r\nimport { formatBytes, formatDateTime, formatSeconds, timeAgo } from '../../../utils/helpers';\r\nimport {\r\n generateBackupProgressMessage,\r\n extractResticData,\r\n generateRestoreProgressMessage,\r\n generateMirrorProgressMessage,\r\n} from '../../../utils/progressHelpers';\r\nimport { Backup } from '../../../@types/backups';\r\nimport { RestoreSlim } from '../../../@types/restores';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\nimport { useCancelRestore, useGetRestoreProgress } from '../../../services/restores';\r\nimport BackupEvents from '../BackupEvents/BackupEvents';\r\nimport { ReplicationProgressData } from '../../../@types/backups';\r\n\r\ninterface BackupProgressProps {\r\n item: Backup | RestoreSlim;\r\n sourceId: string;\r\n sourceType: string;\r\n planId: string;\r\n type: 'backup' | 'restore';\r\n}\r\n\r\nconst BackupProgress = ({ item, sourceId, sourceType, planId, type = 'backup' }: BackupProgressProps) => {\r\n const [showCancelModal, setShowCancelModal] = useState(false);\r\n const [showProgressDetails, setShowProgressDetails] = useState(false);\r\n const queryClient = useQueryClient();\r\n const cancelRestoreMutation = useCancelRestore();\r\n const cancelBackupMutation = useCancelBackup();\r\n\r\n const { id, started } = item;\r\n const { data: progressData } =\r\n type === 'backup' ? useGetBackupProgress({ id, sourceId, sourceType, planId }) : useGetRestoreProgress({ id, sourceId, sourceType, planId });\r\n\r\n const resticData = extractResticData(progressData);\r\n const progressMessage = type === 'backup' ? generateBackupProgressMessage(progressData) : generateRestoreProgressMessage(progressData);\r\n\r\n // Check if DryRun progress tracking phase\r\n const actualBackupStarted = progressData?.events?.find((e: any) => e.action === 'BACKUP_OPERATION_START' && e.resticData);\r\n const isDryRun = type === 'backup' && !actualBackupStarted;\r\n\r\n // Extract progress values from restic data or use defaults\r\n const {\r\n total_files_processed: total_files = resticData?.total_files || 0,\r\n files_done = 0,\r\n total_bytes_processed: total_bytes = resticData?.total_bytes_processed || resticData?.total_bytes || 0,\r\n bytes_done = 0,\r\n bytes_restored = 0,\r\n files_restored = 0,\r\n seconds_remaining = 0,\r\n percent_done = 0,\r\n } = resticData || {};\r\n\r\n let filesProcessed = files_done;\r\n let bytesProcessed = bytes_done;\r\n let totalBytes = total_bytes;\r\n let totalFiles = total_files;\r\n let progressPercent = total_bytes ? Math.round((bytes_done / total_bytes) * 100) : 0;\r\n\r\n if (type === 'restore') {\r\n progressPercent = Math.round(percent_done * 100);\r\n if (resticData?.total_bytes) {\r\n totalBytes = resticData.total_bytes;\r\n }\r\n if (bytes_restored) {\r\n bytesProcessed = bytes_restored;\r\n } else {\r\n if (resticData?.total_bytes) {\r\n bytesProcessed = Math.round(percent_done * resticData.total_bytes);\r\n }\r\n }\r\n if (files_restored) {\r\n filesProcessed = files_restored;\r\n } else {\r\n if (resticData?.total_files) {\r\n filesProcessed = Math.round(percent_done * resticData.total_files);\r\n }\r\n }\r\n }\r\n\r\n // For completed backups, show 100% if we have summary data\r\n if (resticData?.message_type === 'summary') {\r\n progressPercent = 100;\r\n filesProcessed = totalFiles;\r\n bytesProcessed = totalBytes;\r\n }\r\n\r\n const cancel = () => {\r\n console.log('cancel :', type, item);\r\n if (type === 'backup') {\r\n toast.promise(\r\n cancelBackupMutation.mutateAsync(\r\n { planId, backupId: item.id },\r\n {\r\n onSuccess: () => queryClient.invalidateQueries({ queryKey: ['plan', planId] }),\r\n },\r\n ),\r\n {\r\n pending: 'Sending Cancel Request...',\r\n success: 'Backup process Cancelled!',\r\n error: {\r\n render({ data }: any) {\r\n // When the promise reject, data will contains the error\r\n return `Failed to cancel backup process. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n },\r\n );\r\n } else {\r\n toast.promise(\r\n cancelRestoreMutation.mutateAsync(\r\n { planId, restoreId: item.id },\r\n {\r\n onSuccess: () => queryClient.invalidateQueries({ queryKey: ['plan', planId] }),\r\n },\r\n ),\r\n {\r\n pending: 'Sending Cancel Request...',\r\n success: 'Restore process Cancelled!',\r\n error: {\r\n render({ data }: any) {\r\n // When the promise reject, data will contains the error\r\n return `Failed to cancel restore process. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n },\r\n );\r\n }\r\n };\r\n\r\n return (\r\n <div key={item.id} className={classes.backup}>\r\n <div key={item.id} className={classes.backupProgress}>\r\n <div className={classes.backupIcon}>\r\n <Icon type=\"loading\" size={24} />\r\n </div>\r\n <div className={classes.backupLeft}>\r\n <div className={classes.backupId}>\r\n {type === 'restore' ? 'Restoring ' : ''}backup-{id}\r\n <span className={classes.backupTime} title={formatDateTime(started)}>\r\n <Icon type=\"clock\" size={12} /> Started {started ? timeAgo(new Date(started)) : 'a few seconds ago'}\r\n </span>\r\n {item.errorMsg && (\r\n <span className={classes.backupError}>\r\n <Icon type=\"error-circle-filled\" size={13} />{' '}\r\n <i\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={`<div class=\"linebreak-tooltip-content\">${item.errorMsg.slice(0, 120) + (item.errorMsg.length > 120 ? '...' : '')}</div>`}\r\n onClick={() => setShowProgressDetails(true)}\r\n >\r\n <u>Error</u> Occurred.\r\n </i>{' '}\r\n Retrying...\r\n </span>\r\n )}\r\n </div>\r\n <div className={classes.backupStart}>\r\n <div>\r\n <span className={classes.progressMessage} onClick={() => setShowProgressDetails(true)}>\r\n {progressMessage}\r\n </span>\r\n {/* <Icon type=\"clock\" size={12} /> Started {started ? timeAgo(new Date(started)) : 'a few seconds ago'} */}\r\n </div>\r\n <button onClick={() => setShowCancelModal(true)} title={`Cancel ${type}`}>\r\n <Icon type=\"close\" size={12} /> Cancel\r\n </button>\r\n </div>\r\n </div>\r\n <div className={classes.backupRight}>\r\n <div className={classes.ProgressStats}>\r\n <div className={classes.ProgressStatsLeft}>\r\n <span>\r\n {filesProcessed} / {totalFiles} Files\r\n </span>\r\n <i></i>\r\n <span>\r\n {formatBytes(bytesProcessed)} / {formatBytes(totalBytes)}\r\n </span>\r\n </div>\r\n <div className={classes.ProgressStatsRight}>{type !== 'restore' && <>Remaining: {formatSeconds(seconds_remaining)}</>}</div>\r\n </div>\r\n <div className={classes.progressBar}>\r\n <div\r\n className={`${classes.progressBarFill} ${progressPercent > 3 ? classes.progressBarFilled : ''} ${isDryRun ? classes.progressBarDryRun : ''}`}\r\n style={{ width: progressPercent + '%' }}\r\n >\r\n <span>{progressPercent}%</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {showCancelModal && (\r\n <ActionModal\r\n title={`Cancel ${type}`}\r\n message={<>{`Are you sure you want to cancel the ${type} process?`}</>}\r\n closeModal={() => setShowCancelModal(false)}\r\n width=\"400px\"\r\n primaryAction={{\r\n title: `Yes, Cancel ${type}`,\r\n type: 'danger',\r\n isPending: type === 'restore' ? cancelRestoreMutation.isPending : cancelBackupMutation.isPending,\r\n action: () => cancel(),\r\n }}\r\n />\r\n )}\r\n {showProgressDetails && (\r\n <BackupEvents\r\n id={id}\r\n type={type}\r\n planId={planId}\r\n sourceId={sourceId}\r\n sourceType={sourceType}\r\n progressData={progressData}\r\n inProgress={true}\r\n close={() => setShowProgressDetails(false)}\r\n />\r\n )}\r\n </div>\r\n {/* Mirrors Progress */}\r\n {progressData?.mirrors && Object.keys(progressData.mirrors).length > 0 && (\r\n <div className={classes.mirrorsSection}>\r\n <div className={classes.mirrorsTitle}>Replicating</div>\r\n <div className={classes.mirrorsList}>\r\n {Object.entries(progressData.mirrors as Record<string, ReplicationProgressData>).map(([storageId, mirror]) => {\r\n const mirrorResticData = mirror.events\r\n ?.slice()\r\n .reverse()\r\n .find((e: any) => e.resticData)?.resticData;\r\n const mirrorPercent = mirrorResticData?.percent_done ? Math.round(mirrorResticData.percent_done * 100) : 0;\r\n const mirrorMessage = generateMirrorProgressMessage(mirror);\r\n\r\n let mirrorStatusClass = classes.mirrorPending;\r\n if (mirror.status === 'running')\r\n mirrorStatusClass = mirrorPercent > 0 ? classes.mirrorRunning : classes.mirrorRunningIndeterminate;\r\n if (mirror.status === 'completed') mirrorStatusClass = classes.mirrorCompleted;\r\n if (mirror.status === 'failed') mirrorStatusClass = classes.mirrorFailed;\r\n if (mirror.status === 'retrying') mirrorStatusClass = classes.mirrorRunningIndeterminate;\r\n\r\n return (\r\n <div key={storageId} className={classes.mirrorItem}>\r\n <div className={classes.mirrorStorageIcon}>\r\n {(mirror.status === 'running' || mirror.status === 'pending' || mirror.status === 'retrying') && (\r\n <Icon type=\"loading\" size={12} />\r\n )}\r\n <img src={`/providers/${mirror.storageType}.png`} />\r\n </div>\r\n <div className={classes.mirrorProgress}>\r\n <div className={classes.mirrorInfo}>\r\n <span className={classes.mirrorName}>{mirror.storageName}</span>\r\n <span className={`${classes.mirrorStatus} ${mirrorStatusClass}`}>\r\n {mirror.status === 'pending' && 'Pending'}\r\n {mirror.status === 'running' && (mirrorPercent > 0 ? `${mirrorPercent}% — ${mirrorMessage}` : mirrorMessage)}\r\n {mirror.status === 'completed' && (\r\n <>\r\n <Icon type=\"check\" size={10} /> Completed\r\n </>\r\n )}\r\n {mirror.status === 'failed' && (\r\n <span data-tooltip-id=\"htmlToolTip\" data-tooltip-html={mirror.error || 'Replication failed'}>\r\n <Icon type=\"error\" size={12} /> Failed\r\n </span>\r\n )}\r\n {mirror.status === 'retrying' && mirrorMessage}\r\n </span>\r\n </div>\r\n <div className={classes.mirrorBar}>\r\n <div\r\n className={`${classes.mirrorBarFill} ${mirrorStatusClass}`}\r\n style={{\r\n width:\r\n mirror.status === 'completed'\r\n ? '100%'\r\n : mirror.status === 'failed'\r\n ? '100%'\r\n : mirrorPercent > 0\r\n ? `${mirrorPercent}%`\r\n : undefined,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default BackupProgress;\r\n"],"names":["BackupProgress","item","sourceId","sourceType","planId","type","showCancelModal","setShowCancelModal","useState","showProgressDetails","setShowProgressDetails","queryClient","useQueryClient","cancelRestoreMutation","useCancelRestore","cancelBackupMutation","useCancelBackup","id","started","progressData","useGetBackupProgress","useGetRestoreProgress","resticData","extractResticData","progressMessage","generateBackupProgressMessage","generateRestoreProgressMessage","actualBackupStarted","_a","e","isDryRun","total_files","files_done","total_bytes","bytes_done","bytes_restored","files_restored","seconds_remaining","percent_done","filesProcessed","bytesProcessed","totalBytes","totalFiles","progressPercent","cancel","toast","data","jsxs","classes","jsx","Icon","formatDateTime","timeAgo","formatBytes","Fragment","formatSeconds","ActionModal","BackupEvents","storageId","mirror","mirrorResticData","_b","mirrorPercent","mirrorMessage","generateMirrorProgressMessage","mirrorStatusClass"],"mappings":"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"}
@@ -1,70 +1,70 @@
1
- const r = "_backup_xS6ZS", o = "_backupProgress_NIF8H", s = "_backupIcon_1VCof", t = "_backupLeft_T8u86", i = "_backupId_G1qV9", e = "_backupTime_axKgJ", a = "_backupError_Xyoex", n = "_backupStart_ND7RT", c = "_progressMessage_drmBQ", m = "_backupRight_iTzHX", _ = "_ProgressStats_WS4AM", p = "_ProgressStatsLeft_aAdVE", g = "_progressBar_9H5Cx", u = "_progressBarFill_okbGN", l = "_progressBarFilled_XYmUx", b = "_progressBarDryRun_XpA0M", k = "_mirrorsSection_shaGt", d = "_mirrorsTitle_LZXPU", I = "_mirrorsList_tnwP8", S = "_mirrorItem_RxqoD", B = "_mirrorProgress_xcaAG", P = "_mirrorStorageIcon_6asKY", F = "_mirrorInfo_F3BKE", R = "_mirrorName_3j8ZY", f = "_mirrorStatus_U7ORY", L = "_mirrorCompleted_dw4av", T = "_mirrorFailed_CdoUN", N = "_mirrorBar_oQFsQ", x = "_mirrorBarFill_ItiQz", C = "_mirrorRunning_G7IVN", D = "_mirrorPending_5T3nu", E = "_mirrorRunningIndeterminate_ONi6D", G = {
1
+ const r = "_backup_RzvyQ", o = "_backupProgress_MYuz7", s = "_backupIcon_64bLn", t = "_backupLeft_VXcV8", i = "_backupId_Zbp81", e = "_backupTime_eBCQg", n = "_backupError_NV4me", a = "_backupStart_uXxKK", c = "_progressMessage_Xfq3T", m = "_backupRight_8UrjF", _ = "_ProgressStats_uFoeG", p = "_ProgressStatsLeft_JKiGN", g = "_progressBar_xRi6V", u = "_progressBarFill_kKbDm", b = "_progressBarFilled_mUbsJ", l = "_progressBarDryRun_axH6Y", k = "_mirrorsSection_XzX1E", d = "_mirrorsTitle_wc7n0", B = "_mirrorsList_qgdxS", I = "_mirrorItem_znrPA", S = "_mirrorProgress_zvZpO", F = "_mirrorStorageIcon_h7jFN", P = "_mirrorInfo_zjWX5", R = "_mirrorName_hL58A", f = "_mirrorStatus_ZAxsq", L = "_mirrorCompleted_D58zn", N = "_mirrorFailed_Nolpx", x = "_mirrorBar_2X3Fw", z = "_mirrorBarFill_IHRNc", T = "_mirrorRunning_vb8rW", X = "_mirrorPending_cHbOp", h = "_mirrorRunningIndeterminate_qj7hZ", D = {
2
2
  backup: r,
3
3
  backupProgress: o,
4
4
  backupIcon: s,
5
5
  backupLeft: t,
6
6
  backupId: i,
7
7
  backupTime: e,
8
- backupError: a,
9
- backupStart: n,
8
+ backupError: n,
9
+ backupStart: a,
10
10
  progressMessage: c,
11
11
  backupRight: m,
12
12
  ProgressStats: _,
13
13
  ProgressStatsLeft: p,
14
14
  progressBar: g,
15
15
  progressBarFill: u,
16
- progressBarFilled: l,
17
- progressBarDryRun: b,
16
+ progressBarFilled: b,
17
+ progressBarDryRun: l,
18
18
  mirrorsSection: k,
19
19
  mirrorsTitle: d,
20
- mirrorsList: I,
21
- mirrorItem: S,
22
- mirrorProgress: B,
23
- mirrorStorageIcon: P,
24
- mirrorInfo: F,
20
+ mirrorsList: B,
21
+ mirrorItem: I,
22
+ mirrorProgress: S,
23
+ mirrorStorageIcon: F,
24
+ mirrorInfo: P,
25
25
  mirrorName: R,
26
26
  mirrorStatus: f,
27
27
  mirrorCompleted: L,
28
- mirrorFailed: T,
29
- mirrorBar: N,
30
- mirrorBarFill: x,
31
- mirrorRunning: C,
32
- mirrorPending: D,
33
- mirrorRunningIndeterminate: E
28
+ mirrorFailed: N,
29
+ mirrorBar: x,
30
+ mirrorBarFill: z,
31
+ mirrorRunning: T,
32
+ mirrorPending: X,
33
+ mirrorRunningIndeterminate: h
34
34
  };
35
35
  export {
36
36
  _ as ProgressStats,
37
37
  p as ProgressStatsLeft,
38
38
  r as backup,
39
- a as backupError,
39
+ n as backupError,
40
40
  s as backupIcon,
41
41
  i as backupId,
42
42
  t as backupLeft,
43
43
  o as backupProgress,
44
44
  m as backupRight,
45
- n as backupStart,
45
+ a as backupStart,
46
46
  e as backupTime,
47
- G as default,
48
- N as mirrorBar,
49
- x as mirrorBarFill,
47
+ D as default,
48
+ x as mirrorBar,
49
+ z as mirrorBarFill,
50
50
  L as mirrorCompleted,
51
- T as mirrorFailed,
52
- F as mirrorInfo,
53
- S as mirrorItem,
51
+ N as mirrorFailed,
52
+ P as mirrorInfo,
53
+ I as mirrorItem,
54
54
  R as mirrorName,
55
- D as mirrorPending,
56
- B as mirrorProgress,
57
- C as mirrorRunning,
58
- E as mirrorRunningIndeterminate,
55
+ X as mirrorPending,
56
+ S as mirrorProgress,
57
+ T as mirrorRunning,
58
+ h as mirrorRunningIndeterminate,
59
59
  f as mirrorStatus,
60
- P as mirrorStorageIcon,
61
- I as mirrorsList,
60
+ F as mirrorStorageIcon,
61
+ B as mirrorsList,
62
62
  k as mirrorsSection,
63
63
  d as mirrorsTitle,
64
64
  g as progressBar,
65
- b as progressBarDryRun,
65
+ l as progressBarDryRun,
66
66
  u as progressBarFill,
67
- l as progressBarFilled,
67
+ b as progressBarFilled,
68
68
  c as progressMessage
69
69
  };
70
70
  //# sourceMappingURL=BackupProgress.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Backups.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/Backups/Backups.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAuE7C,QAAA,MAAM,OAAO,GAAI,4FAUd;IACA,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACf,CAAC;IACF,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC;CACvD,4CAwWA,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Backups.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/Backups/Backups.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAuE7C,QAAA,MAAM,OAAO,GAAI,4FAUd;IACA,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACf,CAAC;IACF,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC;CACvD,4CAmXA,CAAC;AAEF,eAAe,OAAO,CAAC"}