@plutonhq/core-frontend 0.1.25 → 0.1.26
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.
- package/dist-lib/@types/backups.d.ts +1 -1
- package/dist-lib/@types/backups.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +27 -27
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
- package/dist-lib/components/Plan/PlanPruneModal/PlanPruneModal.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanPruneModal/PlanPruneModal.js +62 -26
- package/dist-lib/components/Plan/PlanPruneModal/PlanPruneModal.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanPruneSettings.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanPruneSettings.js +138 -62
- package/dist-lib/components/Plan/PlanSettings/PlanPruneSettings.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js +42 -42
- package/dist-lib/components/common/StatusLabel/StatusLabel.d.ts +1 -1
- package/dist-lib/components/common/StatusLabel/StatusLabel.d.ts.map +1 -1
- package/dist-lib/components/common/StatusLabel/StatusLabel.js +17 -12
- package/dist-lib/components/common/StatusLabel/StatusLabel.js.map +1 -1
- package/dist-lib/components/common/form/NumberInput/NumberInput.module.scss.js +4 -4
- package/dist-lib/styles/core-frontend.css +1 -1
- package/package.json +1 -1
- package/src/@types/backups.ts +1 -1
- package/src/components/Plan/BackupEvents/BackupEvents.tsx +5 -3
- package/src/components/Plan/PlanPruneModal/PlanPruneModal.tsx +54 -11
- package/src/components/Plan/PlanSettings/PlanPruneSettings.tsx +145 -61
- package/src/components/Plan/PlanSettings/PlanSettings.module.scss +5 -0
- package/src/components/common/StatusLabel/StatusLabel.tsx +7 -1
- package/src/components/common/form/NumberInput/NumberInput.module.scss +1 -0
|
@@ -52,7 +52,7 @@ export type Backup = {
|
|
|
52
52
|
started: number;
|
|
53
53
|
ended: number;
|
|
54
54
|
duration: number;
|
|
55
|
-
status: 'completed' | 'cancelled' | 'failed' | 'started';
|
|
55
|
+
status: 'completed' | 'cancelled' | 'failed' | 'started' | 'retrying' | 'initializing';
|
|
56
56
|
inProgress: boolean;
|
|
57
57
|
totalFiles: number;
|
|
58
58
|
totalSize: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backups.d.ts","sourceRoot":"","sources":["../../src/@types/backups.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,MAAM,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"backups.d.ts","sourceRoot":"","sources":["../../src/@types/backups.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,MAAM,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC;IACvF,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,mBAAmB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackupEvents.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAA2B,MAAM,yBAAyB,CAAC;AAOtF,UAAU,iBAAiB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,YAAY,GAAI,6EAAwF,iBAAiB,
|
|
1
|
+
{"version":3,"file":"BackupEvents.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAA2B,MAAM,yBAAyB,CAAC;AAOtF,UAAU,iBAAiB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,YAAY,GAAI,6EAAwF,iBAAiB,4CA4J9H,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { jsxs as n, jsx as i, Fragment as P } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import h from "../../common/Icon/Icon.js";
|
|
3
3
|
import S from "../../common/SidePanel/SidePanel.js";
|
|
4
|
-
import { getBackupEventActionMessage as
|
|
4
|
+
import { getBackupEventActionMessage as _, getRestoreEventActionMessage as T } from "../../../utils/progressHelpers.js";
|
|
5
5
|
import e from "./BackupEvents.module.scss.js";
|
|
6
6
|
import { useGetBackupProgressOnce as w } from "../../../services/backups.js";
|
|
7
7
|
import { useGetRestoreProgressOnce as R } from "../../../services/restores.js";
|
|
8
8
|
import { useState as O, useMemo as F } from "react";
|
|
9
9
|
import M from "../../common/Modal/Modal.js";
|
|
10
10
|
import { formatDuration as D } from "../../../utils/helpers.js";
|
|
11
|
-
const U = ({ id: f, type:
|
|
12
|
-
const [
|
|
11
|
+
const U = ({ id: f, type: E = "backup", sourceId: $, sourceType: A, planId: L, inProgress: d, progressData: g, close: C }) => {
|
|
12
|
+
const [m, u] = O(!1), { data: k, isLoading: v } = E === "backup" ? w({ id: f, sourceId: $, sourceType: A, planId: L }) : R({ id: f, sourceId: $, sourceType: A, planId: L }), s = g || k;
|
|
13
13
|
console.log("progressDataToUse :", s);
|
|
14
14
|
const N = F(() => {
|
|
15
15
|
if (!s || !s.events) return "";
|
|
@@ -18,44 +18,44 @@ const U = ({ id: f, type: h = "backup", sourceId: $, sourceType: A, planId: g, i
|
|
|
18
18
|
a.action === "TASK_COMPLETED" ? r = "Completed" : a.action === "TASK_CANCELLED" ? r = "Cancelled" : a.action === "FAILED_PERMANENTLY" && (r = "Failed");
|
|
19
19
|
}), r;
|
|
20
20
|
}, [s]);
|
|
21
|
-
return /* @__PURE__ */ n(S, { title: `${
|
|
21
|
+
return /* @__PURE__ */ n(S, { title: `${E}-${f} Events`, width: "1000px", icon: /* @__PURE__ */ i(h, { type: "logs", size: 18 }), footer: /* @__PURE__ */ i(P, {}), close: C, children: [
|
|
22
22
|
/* @__PURE__ */ n("div", { className: e.backupEventsContainer, children: [
|
|
23
23
|
/* @__PURE__ */ n("div", { className: e.header, children: [
|
|
24
24
|
/* @__PURE__ */ n(
|
|
25
25
|
"div",
|
|
26
26
|
{
|
|
27
27
|
title: "Status",
|
|
28
|
-
className: `${e.status} ${
|
|
29
|
-
${!
|
|
28
|
+
className: `${e.status} ${d ? e.inProgress : ""}
|
|
29
|
+
${!d && N === "Completed" ? e.hasCompleted : ""} ${!d && N === "Failed" ? e.hasFailed : ""}`,
|
|
30
30
|
children: [
|
|
31
|
-
/* @__PURE__ */ i(
|
|
31
|
+
/* @__PURE__ */ i(h, { type: d ? "loading" : N === "Completed" ? "check-circle-filled" : "error-circle-filled", size: 14 }),
|
|
32
32
|
" ",
|
|
33
|
-
|
|
33
|
+
d ? `${E} In Progress` : `${E} ${N}` || "Unknown"
|
|
34
34
|
]
|
|
35
35
|
}
|
|
36
36
|
),
|
|
37
|
-
/* @__PURE__ */ n("div", { title: "Duration", className: e.duration, children: [
|
|
38
|
-
/* @__PURE__ */ i(
|
|
37
|
+
!d && N && /* @__PURE__ */ n("div", { title: "Duration", className: e.duration, children: [
|
|
38
|
+
/* @__PURE__ */ i(h, { type: "clock", size: 14 }),
|
|
39
39
|
" ",
|
|
40
40
|
(s == null ? void 0 : s.duration) && D(s.duration / 1e3) || "N/A"
|
|
41
41
|
] })
|
|
42
42
|
] }),
|
|
43
|
-
v && /* @__PURE__ */ i("div", { className: e.loading, children: /* @__PURE__ */ i(
|
|
43
|
+
v && /* @__PURE__ */ i("div", { className: e.loading, children: /* @__PURE__ */ i(h, { type: "loading", size: 30 }) }),
|
|
44
44
|
s && s.events && s.events.length > 0 ? /* @__PURE__ */ i("ul", { className: e.eventList, children: s.events.map((r, a) => {
|
|
45
|
-
const c = r.phase === "finished" && r.action === "TASK_COMPLETED", o = r.phase === "finished" && r.action === "FAILED_PERMANENTLY", l = r.action.includes("RETRY_ATTEMPT_"), t = r.action === "TASK_FAILED",
|
|
45
|
+
const c = r.phase === "finished" && r.action === "TASK_COMPLETED", o = r.phase === "finished" && r.action === "FAILED_PERMANENTLY", l = r.action.includes("RETRY_ATTEMPT_"), t = r.action === "TASK_FAILED", p = r.action === "BACKUP_WARNING" || r.action === "RESTORE_WARNING" || r.action === "POST_BACKUP_PRUNE_FAILED" || r.action === "POST_BACKUP_REPO_STATS_FAILED";
|
|
46
46
|
return /* @__PURE__ */ n(
|
|
47
47
|
"li",
|
|
48
48
|
{
|
|
49
49
|
className: `${e.eventItem} ${r.error ? e.error : ""}
|
|
50
50
|
${c ? e.completed : ""} ${o ? e.failed : ""}
|
|
51
51
|
${l ? e.retrying : ""} ${t ? e.isError : ""}
|
|
52
|
-
${
|
|
52
|
+
${p ? e.isWarning : ""}`,
|
|
53
53
|
children: [
|
|
54
|
-
/* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(
|
|
54
|
+
/* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(h, { type: r.error || p ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
|
|
55
55
|
/* @__PURE__ */ i("span", { className: e.time, children: new Date(r.timestamp).toLocaleTimeString() }),
|
|
56
56
|
/* @__PURE__ */ i("span", { className: e.phase, children: r.phase }),
|
|
57
57
|
/* @__PURE__ */ n("span", { className: e.action, children: [
|
|
58
|
-
|
|
58
|
+
E === "backup" ? _(r.action) : T(r.action),
|
|
59
59
|
r.error && /* @__PURE__ */ i("span", { className: e.viewError, onClick: () => u(`main-${a}`), children: "View Error" })
|
|
60
60
|
] })
|
|
61
61
|
]
|
|
@@ -70,17 +70,17 @@ const U = ({ id: f, type: h = "backup", sourceId: $, sourceType: A, planId: g, i
|
|
|
70
70
|
/* @__PURE__ */ i("span", { className: `${e.mirrorEventsStatus} ${e[`mirror_${a.status}`] || ""}`, children: a.status })
|
|
71
71
|
] }),
|
|
72
72
|
a.events && a.events.length > 0 ? /* @__PURE__ */ i("ul", { className: e.eventList, children: a.events.map((c, o) => {
|
|
73
|
-
const l = c.error, t = c.action === "REPLICATION_COMPLETE",
|
|
73
|
+
const l = c.error, t = c.action === "REPLICATION_COMPLETE", p = c.action === "REPLICATION_FAILED";
|
|
74
74
|
return /* @__PURE__ */ n(
|
|
75
75
|
"li",
|
|
76
76
|
{
|
|
77
|
-
className: `${e.eventItem} ${l ? e.error : ""} ${t ? e.completed : ""} ${
|
|
77
|
+
className: `${e.eventItem} ${l ? e.error : ""} ${t ? e.completed : ""} ${p ? e.failed : ""}`,
|
|
78
78
|
children: [
|
|
79
|
-
/* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(
|
|
79
|
+
/* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(h, { type: l ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
|
|
80
80
|
/* @__PURE__ */ i("span", { className: e.time, children: new Date(c.timestamp).toLocaleTimeString() }),
|
|
81
81
|
/* @__PURE__ */ i("span", { className: e.phase, children: c.phase }),
|
|
82
82
|
/* @__PURE__ */ n("span", { className: e.action, children: [
|
|
83
|
-
|
|
83
|
+
_(c.action, a.storageName),
|
|
84
84
|
c.error && /* @__PURE__ */ i("span", { className: e.viewError, onClick: () => u(`mirror-${r}-${o}`), children: "View Error" })
|
|
85
85
|
] })
|
|
86
86
|
]
|
|
@@ -90,16 +90,16 @@ const U = ({ id: f, type: h = "backup", sourceId: $, sourceType: A, planId: g, i
|
|
|
90
90
|
}) }) : /* @__PURE__ */ i("div", { className: e.noEvents, children: "No events recorded" })
|
|
91
91
|
] }, r)) })
|
|
92
92
|
] }),
|
|
93
|
-
|
|
93
|
+
m && /* @__PURE__ */ i(M, { title: "Error Details", closeModal: () => u(!1), width: "400px", children: /* @__PURE__ */ i("div", { className: e.errorDetails, children: (() => {
|
|
94
94
|
var r, a, c, o, l;
|
|
95
|
-
if (typeof
|
|
96
|
-
if (
|
|
97
|
-
const t = parseInt(
|
|
95
|
+
if (typeof m == "string") {
|
|
96
|
+
if (m.startsWith("main-")) {
|
|
97
|
+
const t = parseInt(m.replace("main-", ""));
|
|
98
98
|
return ((r = s == null ? void 0 : s.events[t]) == null ? void 0 : r.error) || "Unknown error occurred.";
|
|
99
99
|
}
|
|
100
|
-
if (
|
|
101
|
-
const t =
|
|
102
|
-
return ((l = (o = (c = (a = s == null ? void 0 : s.mirrors) == null ? void 0 : a[I]) == null ? void 0 : c.events) == null ? void 0 : o[
|
|
100
|
+
if (m.startsWith("mirror-")) {
|
|
101
|
+
const t = m.replace("mirror-", "").split("-"), p = parseInt(t.pop()), I = t.join("-");
|
|
102
|
+
return ((l = (o = (c = (a = s == null ? void 0 : s.mirrors) == null ? void 0 : a[I]) == null ? void 0 : c.events) == null ? void 0 : o[p]) == null ? void 0 : l.error) || "Unknown error occurred.";
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
return "Unknown error occurred.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackupEvents.js","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport { getBackupEventActionMessage, getRestoreEventActionMessage } from '../../../utils/progressHelpers';\r\nimport classes from './BackupEvents.module.scss';\r\nimport { BackupProgressData, ReplicationProgressData } from '../../../@types/backups';\r\nimport { useGetBackupProgressOnce } from '../../../services/backups';\r\nimport { useGetRestoreProgressOnce } from '../../../services/restores';\r\nimport { useMemo, useState } from 'react';\r\nimport Modal from '../../common/Modal/Modal';\r\nimport { formatDuration } from '../../../utils/helpers';\r\n\r\ninterface BackupEventsProps {\r\n id: string;\r\n planId: string;\r\n sourceId: string;\r\n sourceType: string;\r\n type?: 'backup' | 'restore';\r\n inProgress?: boolean;\r\n progressData?: BackupProgressData | null;\r\n close: () => void;\r\n}\r\n\r\nconst BackupEvents = ({ id, type = 'backup', sourceId, sourceType, planId, inProgress, progressData, close }: BackupEventsProps) => {\r\n const [showError, setShowError] = useState<false | string>(false);\r\n const { data: fetchedProgressData, isLoading } =\r\n type === 'backup'\r\n ? useGetBackupProgressOnce({ id, sourceId, sourceType, planId })\r\n : useGetRestoreProgressOnce({ id, sourceId, sourceType, planId });\r\n\r\n const progressDataToUse: BackupProgressData | null = progressData || fetchedProgressData;\r\n\r\n console.log('progressDataToUse :', progressDataToUse);\r\n const hasFinished = useMemo(() => {\r\n if (!progressDataToUse || !progressDataToUse.events) return '';\r\n let finishedEvent = '';\r\n progressDataToUse.events.forEach((event) => {\r\n if (event.action === 'TASK_COMPLETED') {\r\n finishedEvent = 'Completed';\r\n } else if (event.action === 'TASK_CANCELLED') {\r\n finishedEvent = 'Cancelled';\r\n } else if (event.action === 'FAILED_PERMANENTLY') {\r\n finishedEvent = 'Failed';\r\n }\r\n });\r\n return finishedEvent;\r\n }, [progressDataToUse]);\r\n\r\n return (\r\n <SidePanel title={`${type}-${id} Events`} width=\"1000px\" icon={<Icon type={'logs'} size={18} />} footer={<></>} close={close}>\r\n <div className={classes.backupEventsContainer}>\r\n <div className={classes.header}>\r\n <div\r\n title=\"Status\"\r\n className={`${classes.status} ${inProgress ? classes.inProgress : ''} \r\n ${!inProgress && hasFinished === 'Completed' ? classes.hasCompleted : ''} ${!inProgress && hasFinished === 'Failed' ? classes.hasFailed : ''}`}\r\n >\r\n <Icon type={inProgress ? 'loading' : hasFinished === 'Completed' ? 'check-circle-filled' : 'error-circle-filled'} size={14} />{' '}\r\n {inProgress ? `${type} In Progress` : `${type} ${hasFinished}` || 'Unknown'}\r\n </div>\r\n <div title=\"Duration\" className={classes.duration}>\r\n <Icon type=\"clock\" size={14} /> {(progressDataToUse?.duration && formatDuration(progressDataToUse.duration / 1000)) || 'N/A'}\r\n </div>\r\n </div>\r\n {isLoading && (\r\n <div className={classes.loading}>\r\n <Icon type={'loading'} size={30} />\r\n </div>\r\n )}\r\n {progressDataToUse && progressDataToUse.events && progressDataToUse.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {progressDataToUse.events.map((event: any, index: number) => {\r\n const completed = event.phase === 'finished' && event.action === 'TASK_COMPLETED';\r\n const failed = event.phase === 'finished' && event.action === 'FAILED_PERMANENTLY';\r\n const retrying = event.action.includes('RETRY_ATTEMPT_');\r\n const isError = event.action === 'TASK_FAILED';\r\n const isWarning =\r\n event.action === 'BACKUP_WARNING' ||\r\n event.action === 'RESTORE_WARNING' ||\r\n event.action === 'POST_BACKUP_PRUNE_FAILED' ||\r\n event.action === 'POST_BACKUP_REPO_STATS_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${event.error ? classes.error : ''} \r\n ${completed ? classes.completed : ''} ${failed ? classes.failed : ''} \r\n ${retrying ? classes.retrying : ''} ${isError ? classes.isError : ''} \r\n ${isWarning ? classes.isWarning : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={event.error || isWarning ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\r\n {/* Timestamp should be converted to time only eg: 10:20:23 AM */}\r\n <span className={classes.time}>{new Date(event.timestamp).toLocaleTimeString()}</span>\r\n <span className={classes.phase}>{event.phase}</span>\r\n <span className={classes.action}>\r\n {type === 'backup' ? getBackupEventActionMessage(event.action) : getRestoreEventActionMessage(event.action)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(`main-${index}`)}>\r\n View Error\r\n </span>\r\n )}\r\n </span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n ) : null}\r\n {/* Mirror Events */}\r\n {progressDataToUse?.mirrors && Object.keys(progressDataToUse.mirrors).length > 0 && (\r\n <div className={classes.mirrorsEventsSection}>\r\n {Object.entries(progressDataToUse.mirrors as Record<string, ReplicationProgressData>).map(([storageId, mirror]) => (\r\n <div key={storageId} className={classes.mirrorEventsGroup}>\r\n <div className={classes.mirrorEventsHeader}>\r\n <img src={`/providers/${mirror.storageType}.png`} className={classes.mirrorProviderIcon} />\r\n <span className={classes.mirrorEventsName}>{mirror.storageName}</span>\r\n <span className={`${classes.mirrorEventsStatus} ${classes[`mirror_${mirror.status}`] || ''}`}>{mirror.status}</span>\r\n </div>\r\n {mirror.events && mirror.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {mirror.events.map((event: any, index: number) => {\r\n const isError = event.error;\r\n const isCompleted = event.action === 'REPLICATION_COMPLETE';\r\n const isFailed = event.action === 'REPLICATION_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${isError ? classes.error : ''} ${isCompleted ? classes.completed : ''} ${isFailed ? classes.failed : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={isError ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\r\n <span className={classes.time}>{new Date(event.timestamp).toLocaleTimeString()}</span>\r\n <span className={classes.phase}>{event.phase}</span>\r\n <span className={classes.action}>\r\n {getBackupEventActionMessage(event.action, mirror.storageName)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(`mirror-${storageId}-${index}`)}>\r\n View Error\r\n </span>\r\n )}\r\n </span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n ) : (\r\n <div className={classes.noEvents}>No events recorded</div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n {showError && (\r\n <Modal title=\"Error Details\" closeModal={() => setShowError(false)} width=\"400px\">\r\n <div className={classes.errorDetails}>\r\n {(() => {\r\n if (typeof showError === 'string') {\r\n if (showError.startsWith('main-')) {\r\n const idx = parseInt(showError.replace('main-', ''));\r\n return progressDataToUse?.events[idx]?.error || 'Unknown error occurred.';\r\n }\r\n if (showError.startsWith('mirror-')) {\r\n const parts = showError.replace('mirror-', '').split('-');\r\n const eventIdx = parseInt(parts.pop()!);\r\n const sId = parts.join('-');\r\n return (progressDataToUse?.mirrors as any)?.[sId]?.events?.[eventIdx]?.error || 'Unknown error occurred.';\r\n }\r\n }\r\n return 'Unknown error occurred.';\r\n })()}\r\n </div>\r\n </Modal>\r\n )}\r\n </SidePanel>\r\n );\r\n};\r\n\r\nexport default BackupEvents;\r\n"],"names":["BackupEvents","id","type","sourceId","sourceType","planId","inProgress","progressData","close","showError","setShowError","useState","fetchedProgressData","isLoading","useGetBackupProgressOnce","useGetRestoreProgressOnce","progressDataToUse","hasFinished","useMemo","finishedEvent","event","jsxs","SidePanel","jsx","Icon","Fragment","classes","formatDuration","index","completed","failed","retrying","isError","isWarning","getBackupEventActionMessage","getRestoreEventActionMessage","storageId","mirror","isCompleted","isFailed","Modal","idx","_a","parts","eventIdx","sId","_e","_d","_c","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BackupEvents.js","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport { getBackupEventActionMessage, getRestoreEventActionMessage } from '../../../utils/progressHelpers';\r\nimport classes from './BackupEvents.module.scss';\r\nimport { BackupProgressData, ReplicationProgressData } from '../../../@types/backups';\r\nimport { useGetBackupProgressOnce } from '../../../services/backups';\r\nimport { useGetRestoreProgressOnce } from '../../../services/restores';\r\nimport { useMemo, useState } from 'react';\r\nimport Modal from '../../common/Modal/Modal';\r\nimport { formatDuration } from '../../../utils/helpers';\r\n\r\ninterface BackupEventsProps {\r\n id: string;\r\n planId: string;\r\n sourceId: string;\r\n sourceType: string;\r\n type?: 'backup' | 'restore';\r\n inProgress?: boolean;\r\n progressData?: BackupProgressData | null;\r\n close: () => void;\r\n}\r\n\r\nconst BackupEvents = ({ id, type = 'backup', sourceId, sourceType, planId, inProgress, progressData, close }: BackupEventsProps) => {\r\n const [showError, setShowError] = useState<false | string>(false);\r\n const { data: fetchedProgressData, isLoading } =\r\n type === 'backup'\r\n ? useGetBackupProgressOnce({ id, sourceId, sourceType, planId })\r\n : useGetRestoreProgressOnce({ id, sourceId, sourceType, planId });\r\n\r\n const progressDataToUse: BackupProgressData | null = progressData || fetchedProgressData;\r\n\r\n console.log('progressDataToUse :', progressDataToUse);\r\n const hasFinished = useMemo(() => {\r\n if (!progressDataToUse || !progressDataToUse.events) return '';\r\n let finishedEvent = '';\r\n progressDataToUse.events.forEach((event) => {\r\n if (event.action === 'TASK_COMPLETED') {\r\n finishedEvent = 'Completed';\r\n } else if (event.action === 'TASK_CANCELLED') {\r\n finishedEvent = 'Cancelled';\r\n } else if (event.action === 'FAILED_PERMANENTLY') {\r\n finishedEvent = 'Failed';\r\n }\r\n });\r\n return finishedEvent;\r\n }, [progressDataToUse]);\r\n\r\n return (\r\n <SidePanel title={`${type}-${id} Events`} width=\"1000px\" icon={<Icon type={'logs'} size={18} />} footer={<></>} close={close}>\r\n <div className={classes.backupEventsContainer}>\r\n <div className={classes.header}>\r\n <div\r\n title=\"Status\"\r\n className={`${classes.status} ${inProgress ? classes.inProgress : ''} \r\n ${!inProgress && hasFinished === 'Completed' ? classes.hasCompleted : ''} ${!inProgress && hasFinished === 'Failed' ? classes.hasFailed : ''}`}\r\n >\r\n <Icon type={inProgress ? 'loading' : hasFinished === 'Completed' ? 'check-circle-filled' : 'error-circle-filled'} size={14} />{' '}\r\n {inProgress ? `${type} In Progress` : `${type} ${hasFinished}` || 'Unknown'}\r\n </div>\r\n {!inProgress && hasFinished && (\r\n <div title=\"Duration\" className={classes.duration}>\r\n <Icon type=\"clock\" size={14} /> {(progressDataToUse?.duration && formatDuration(progressDataToUse.duration / 1000)) || 'N/A'}\r\n </div>\r\n )}\r\n </div>\r\n {isLoading && (\r\n <div className={classes.loading}>\r\n <Icon type={'loading'} size={30} />\r\n </div>\r\n )}\r\n {progressDataToUse && progressDataToUse.events && progressDataToUse.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {progressDataToUse.events.map((event: any, index: number) => {\r\n const completed = event.phase === 'finished' && event.action === 'TASK_COMPLETED';\r\n const failed = event.phase === 'finished' && event.action === 'FAILED_PERMANENTLY';\r\n const retrying = event.action.includes('RETRY_ATTEMPT_');\r\n const isError = event.action === 'TASK_FAILED';\r\n const isWarning =\r\n event.action === 'BACKUP_WARNING' ||\r\n event.action === 'RESTORE_WARNING' ||\r\n event.action === 'POST_BACKUP_PRUNE_FAILED' ||\r\n event.action === 'POST_BACKUP_REPO_STATS_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${event.error ? classes.error : ''} \r\n ${completed ? classes.completed : ''} ${failed ? classes.failed : ''} \r\n ${retrying ? classes.retrying : ''} ${isError ? classes.isError : ''} \r\n ${isWarning ? classes.isWarning : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={event.error || isWarning ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\r\n {/* Timestamp should be converted to time only eg: 10:20:23 AM */}\r\n <span className={classes.time}>{new Date(event.timestamp).toLocaleTimeString()}</span>\r\n <span className={classes.phase}>{event.phase}</span>\r\n <span className={classes.action}>\r\n {type === 'backup' ? getBackupEventActionMessage(event.action) : getRestoreEventActionMessage(event.action)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(`main-${index}`)}>\r\n View Error\r\n </span>\r\n )}\r\n </span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n ) : null}\r\n {/* Mirror Events */}\r\n {progressDataToUse?.mirrors && Object.keys(progressDataToUse.mirrors).length > 0 && (\r\n <div className={classes.mirrorsEventsSection}>\r\n {Object.entries(progressDataToUse.mirrors as Record<string, ReplicationProgressData>).map(([storageId, mirror]) => (\r\n <div key={storageId} className={classes.mirrorEventsGroup}>\r\n <div className={classes.mirrorEventsHeader}>\r\n <img src={`/providers/${mirror.storageType}.png`} className={classes.mirrorProviderIcon} />\r\n <span className={classes.mirrorEventsName}>{mirror.storageName}</span>\r\n <span className={`${classes.mirrorEventsStatus} ${classes[`mirror_${mirror.status}`] || ''}`}>{mirror.status}</span>\r\n </div>\r\n {mirror.events && mirror.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {mirror.events.map((event: any, index: number) => {\r\n const isError = event.error;\r\n const isCompleted = event.action === 'REPLICATION_COMPLETE';\r\n const isFailed = event.action === 'REPLICATION_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${isError ? classes.error : ''} ${isCompleted ? classes.completed : ''} ${isFailed ? classes.failed : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={isError ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\r\n <span className={classes.time}>{new Date(event.timestamp).toLocaleTimeString()}</span>\r\n <span className={classes.phase}>{event.phase}</span>\r\n <span className={classes.action}>\r\n {getBackupEventActionMessage(event.action, mirror.storageName)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(`mirror-${storageId}-${index}`)}>\r\n View Error\r\n </span>\r\n )}\r\n </span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n ) : (\r\n <div className={classes.noEvents}>No events recorded</div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n {showError && (\r\n <Modal title=\"Error Details\" closeModal={() => setShowError(false)} width=\"400px\">\r\n <div className={classes.errorDetails}>\r\n {(() => {\r\n if (typeof showError === 'string') {\r\n if (showError.startsWith('main-')) {\r\n const idx = parseInt(showError.replace('main-', ''));\r\n return progressDataToUse?.events[idx]?.error || 'Unknown error occurred.';\r\n }\r\n if (showError.startsWith('mirror-')) {\r\n const parts = showError.replace('mirror-', '').split('-');\r\n const eventIdx = parseInt(parts.pop()!);\r\n const sId = parts.join('-');\r\n return (progressDataToUse?.mirrors as any)?.[sId]?.events?.[eventIdx]?.error || 'Unknown error occurred.';\r\n }\r\n }\r\n return 'Unknown error occurred.';\r\n })()}\r\n </div>\r\n </Modal>\r\n )}\r\n </SidePanel>\r\n );\r\n};\r\n\r\nexport default BackupEvents;\r\n"],"names":["BackupEvents","id","type","sourceId","sourceType","planId","inProgress","progressData","close","showError","setShowError","useState","fetchedProgressData","isLoading","useGetBackupProgressOnce","useGetRestoreProgressOnce","progressDataToUse","hasFinished","useMemo","finishedEvent","event","jsxs","SidePanel","jsx","Icon","Fragment","classes","formatDuration","index","completed","failed","retrying","isError","isWarning","getBackupEventActionMessage","getRestoreEventActionMessage","storageId","mirror","isCompleted","isFailed","Modal","idx","_a","parts","eventIdx","sId","_e","_d","_c","_b"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanPruneModal.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanPruneModal/PlanPruneModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,UAAU,mBAAmB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,cAAc,GAAI,+DAA+D,mBAAmB,
|
|
1
|
+
{"version":3,"file":"PlanPruneModal.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanPruneModal/PlanPruneModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,UAAU,mBAAmB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,cAAc,GAAI,+DAA+D,mBAAmB,4CAqFzG,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,37 +1,73 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { usePrunePlan as
|
|
3
|
-
import { planIntervalAgeName as
|
|
4
|
-
import
|
|
5
|
-
const
|
|
6
|
-
const o =
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { jsx as i, Fragment as a, jsxs as n } from "react/jsx-runtime";
|
|
2
|
+
import { usePrunePlan as k } from "../../../services/plans.js";
|
|
3
|
+
import { planIntervalAgeName as r } from "../../../utils/plans.js";
|
|
4
|
+
import y from "../../common/ActionModal/ActionModal.js";
|
|
5
|
+
const w = ({ planId: c, method: t, prune: e, snapshotsCount: s, taskPending: p, close: l }) => {
|
|
6
|
+
const o = k(), u = () => {
|
|
7
|
+
switch (e.policy) {
|
|
8
|
+
case "keepLast":
|
|
9
|
+
return /* @__PURE__ */ n(a, { children: [
|
|
10
|
+
"Your plan is set to keep the last ",
|
|
11
|
+
e.snapCount,
|
|
12
|
+
" backups.",
|
|
13
|
+
" ",
|
|
14
|
+
e.snapCount < s ? `Running prune now will remove ${s - e.snapCount} older snapshots, freeing up some storage space.` : "There are no excess snapshots to clean up."
|
|
15
|
+
] });
|
|
16
|
+
case "forgetByAge":
|
|
17
|
+
return /* @__PURE__ */ n(a, { children: [
|
|
18
|
+
"Your plan is set to remove backups older than ",
|
|
19
|
+
r(e.forgetAge || "3m"),
|
|
20
|
+
", while always keeping at least",
|
|
21
|
+
" ",
|
|
22
|
+
e.snapCount || 1,
|
|
23
|
+
" backup",
|
|
24
|
+
(e.snapCount || 1) > 1 ? "s" : "",
|
|
25
|
+
". This action will remove any backups that exceed the retention policy."
|
|
26
|
+
] });
|
|
27
|
+
case "custom":
|
|
28
|
+
return /* @__PURE__ */ n(a, { children: [
|
|
29
|
+
"Your plan uses an advanced retention policy",
|
|
30
|
+
e.keepDailySnaps ? `, keeping daily backups for ${e.keepDailySnaps} days` : "",
|
|
31
|
+
e.keepWeeklySnaps ? `, weekly backups for ${e.keepWeeklySnaps} weeks` : "",
|
|
32
|
+
e.keepMonthlySnaps ? `, monthly backups for ${e.keepMonthlySnaps} months` : "",
|
|
33
|
+
", while always keeping at least",
|
|
34
|
+
" ",
|
|
35
|
+
e.snapCount || 1,
|
|
36
|
+
" backup",
|
|
37
|
+
(e.snapCount || 1) > 1 ? "s" : "",
|
|
38
|
+
". This action will remove any backups that exceed the retention policy."
|
|
39
|
+
] });
|
|
40
|
+
case "disable":
|
|
41
|
+
return /* @__PURE__ */ i(a, { children: "Pruning is disabled for this plan. No backups will be removed." });
|
|
42
|
+
default:
|
|
43
|
+
return /* @__PURE__ */ n(a, { children: [
|
|
44
|
+
"Your plan is set to maintain ",
|
|
45
|
+
e.snapCount,
|
|
46
|
+
" recent backups.",
|
|
47
|
+
" ",
|
|
48
|
+
e.snapCount < s ? `Running prune now will remove ${s - e.snapCount} older snapshots, freeing up some storage space.` : "There are no excess snapshots to clean up."
|
|
49
|
+
] });
|
|
50
|
+
}
|
|
51
|
+
}, d = () => !(e.policy === "disable" || e.policy === "keepLast" && e.snapCount >= s);
|
|
52
|
+
return /* @__PURE__ */ i(
|
|
53
|
+
y,
|
|
9
54
|
{
|
|
10
|
-
title:
|
|
11
|
-
message: /* @__PURE__ */ a
|
|
55
|
+
title: t === "sync" ? "Clean Up Old Revisions" : "Clean Up Old Backups",
|
|
56
|
+
message: /* @__PURE__ */ i(a, { children: t === "sync" ? /* @__PURE__ */ n(a, { children: [
|
|
12
57
|
"Your plan is set to maintain",
|
|
13
58
|
" ",
|
|
14
|
-
e.policy === "forgetByAge" ? `file revisions newer than ${
|
|
15
|
-
" ",
|
|
16
|
-
e.policy === "forgetByFileCount" ? `Only keep the last ${e.snapCount} versions of each file.` : "",
|
|
59
|
+
e.policy === "forgetByAge" ? `file revisions newer than ${r(e.forgetAge || "3m")}.` : "",
|
|
17
60
|
" This action will remove any excess file revisions older than the retention policy."
|
|
18
|
-
] }) :
|
|
19
|
-
|
|
20
|
-
e.snapCount,
|
|
21
|
-
" recent backups(snapshots).",
|
|
22
|
-
" ",
|
|
23
|
-
e.snapCount < s ? `Running prune now will remove
|
|
24
|
-
${s - e.snapCount} older snapshots, freeing up some storage space` : "There are no excess snapshots to clean up."
|
|
25
|
-
] }) }),
|
|
26
|
-
closeModal: () => !o.isPending && t(),
|
|
61
|
+
] }) : u() }),
|
|
62
|
+
closeModal: () => !o.isPending && l(),
|
|
27
63
|
width: "500px",
|
|
28
64
|
primaryAction: {
|
|
29
|
-
title:
|
|
65
|
+
title: t === "sync" ? "Yes, Remove Old Revisions" : d() ? "Yes, Remove Old Backups" : "",
|
|
30
66
|
type: "default",
|
|
31
67
|
isPending: o.isPending,
|
|
32
|
-
action: () => !
|
|
68
|
+
action: () => !p && o.mutate(c, {
|
|
33
69
|
onSuccess: () => {
|
|
34
|
-
|
|
70
|
+
l();
|
|
35
71
|
}
|
|
36
72
|
})
|
|
37
73
|
}
|
|
@@ -39,6 +75,6 @@ const h = ({ planId: r, method: n, prune: e, snapshotsCount: s, taskPending: c,
|
|
|
39
75
|
);
|
|
40
76
|
};
|
|
41
77
|
export {
|
|
42
|
-
|
|
78
|
+
w as default
|
|
43
79
|
};
|
|
44
80
|
//# sourceMappingURL=PlanPruneModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanPruneModal.js","sources":["../../../../src/components/Plan/PlanPruneModal/PlanPruneModal.tsx"],"sourcesContent":["import { PlanPrune } from '../../../@types/plans';\r\nimport { usePrunePlan } from '../../../services/plans';\r\nimport { planIntervalAgeName } from '../../../utils/plans';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\n\r\ninterface PlanPruneModalProps {\r\n planId: string;\r\n method: string;\r\n prune: PlanPrune;\r\n snapshotsCount: number;\r\n taskPending: boolean;\r\n close: () => void;\r\n}\r\n\r\nconst PlanPruneModal = ({ planId, method, prune, snapshotsCount, taskPending, close }: PlanPruneModalProps) => {\r\n const pruneMutation = usePrunePlan();\r\n\r\n
|
|
1
|
+
{"version":3,"file":"PlanPruneModal.js","sources":["../../../../src/components/Plan/PlanPruneModal/PlanPruneModal.tsx"],"sourcesContent":["import { PlanPrune } from '../../../@types/plans';\r\nimport { usePrunePlan } from '../../../services/plans';\r\nimport { planIntervalAgeName } from '../../../utils/plans';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\n\r\ninterface PlanPruneModalProps {\r\n planId: string;\r\n method: string;\r\n prune: PlanPrune;\r\n snapshotsCount: number;\r\n taskPending: boolean;\r\n close: () => void;\r\n}\r\n\r\nconst PlanPruneModal = ({ planId, method, prune, snapshotsCount, taskPending, close }: PlanPruneModalProps) => {\r\n const pruneMutation = usePrunePlan();\r\n\r\n const getBackupMessage = () => {\r\n switch (prune.policy) {\r\n case 'keepLast':\r\n return (\r\n <>\r\n Your plan is set to keep the last {prune.snapCount} backups.{' '}\r\n {prune.snapCount < snapshotsCount\r\n ? `Running prune now will remove ${snapshotsCount - prune.snapCount} older snapshots, freeing up some storage space.`\r\n : 'There are no excess snapshots to clean up.'}\r\n </>\r\n );\r\n case 'forgetByAge':\r\n return (\r\n <>\r\n Your plan is set to remove backups older than {planIntervalAgeName(prune.forgetAge || '3m')}, while always keeping at least{' '}\r\n {prune.snapCount || 1} backup{(prune.snapCount || 1) > 1 ? 's' : ''}. This action will remove any backups that exceed the retention\r\n policy.\r\n </>\r\n );\r\n case 'custom':\r\n return (\r\n <>\r\n Your plan uses an advanced retention policy\r\n {prune.keepDailySnaps ? `, keeping daily backups for ${prune.keepDailySnaps} days` : ''}\r\n {prune.keepWeeklySnaps ? `, weekly backups for ${prune.keepWeeklySnaps} weeks` : ''}\r\n {prune.keepMonthlySnaps ? `, monthly backups for ${prune.keepMonthlySnaps} months` : ''}, while always keeping at least{' '}\r\n {prune.snapCount || 1} backup{(prune.snapCount || 1) > 1 ? 's' : ''}. This action will remove any backups that exceed the retention\r\n policy.\r\n </>\r\n );\r\n case 'disable':\r\n return <>Pruning is disabled for this plan. No backups will be removed.</>;\r\n default:\r\n return (\r\n <>\r\n Your plan is set to maintain {prune.snapCount} recent backups.{' '}\r\n {prune.snapCount < snapshotsCount\r\n ? `Running prune now will remove ${snapshotsCount - prune.snapCount} older snapshots, freeing up some storage space.`\r\n : 'There are no excess snapshots to clean up.'}\r\n </>\r\n );\r\n }\r\n };\r\n\r\n const canPrune = () => {\r\n if (prune.policy === 'disable') return false;\r\n if (prune.policy === 'keepLast' && prune.snapCount >= snapshotsCount) return false;\r\n return true;\r\n };\r\n\r\n return (\r\n <ActionModal\r\n title={method === 'sync' ? 'Clean Up Old Revisions' : 'Clean Up Old Backups'}\r\n message={\r\n <>\r\n {method === 'sync' ? (\r\n <>\r\n Your plan is set to maintain{' '}\r\n {prune.policy === 'forgetByAge' ? `file revisions newer than ${planIntervalAgeName(prune.forgetAge || '3m')}.` : ''} This action\r\n will remove any excess file revisions older than the retention policy.\r\n </>\r\n ) : (\r\n getBackupMessage()\r\n )}\r\n </>\r\n }\r\n closeModal={() => !pruneMutation.isPending && close()}\r\n width=\"500px\"\r\n primaryAction={{\r\n title: method === 'sync' ? 'Yes, Remove Old Revisions' : canPrune() ? 'Yes, Remove Old Backups' : '',\r\n type: 'default',\r\n isPending: pruneMutation.isPending,\r\n action: () =>\r\n !taskPending &&\r\n pruneMutation.mutate(planId, {\r\n onSuccess: () => {\r\n close();\r\n },\r\n }),\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default PlanPruneModal;\r\n"],"names":["PlanPruneModal","planId","method","prune","snapshotsCount","taskPending","close","pruneMutation","usePrunePlan","getBackupMessage","jsxs","Fragment","planIntervalAgeName","canPrune","jsx","ActionModal"],"mappings":";;;;AAcA,MAAMA,IAAiB,CAAC,EAAE,QAAAC,GAAQ,QAAAC,GAAQ,OAAAC,GAAO,gBAAAC,GAAgB,aAAAC,GAAa,OAAAC,QAAiC;AAC5G,QAAMC,IAAgBC,EAAA,GAEhBC,IAAmB,MAAM;AAC5B,YAAQN,EAAM,QAAA;AAAA,MACX,KAAK;AACF,eACG,gBAAAO,EAAAC,GAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UACoCR,EAAM;AAAA,UAAU;AAAA,UAAU;AAAA,UAC5DA,EAAM,YAAYC,IACd,iCAAiCA,IAAiBD,EAAM,SAAS,qDACjE;AAAA,QAAA,GACR;AAAA,MAEN,KAAK;AACF,eACG,gBAAAO,EAAAC,GAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UACgDC,EAAoBT,EAAM,aAAa,IAAI;AAAA,UAAE;AAAA,UAAgC;AAAA,UAC3HA,EAAM,aAAa;AAAA,UAAE;AAAA,WAASA,EAAM,aAAa,KAAK,IAAI,MAAM;AAAA,UAAG;AAAA,QAAA,GAEvE;AAAA,MAEN,KAAK;AACF,eACG,gBAAAO,EAAAC,GAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UAEER,EAAM,iBAAiB,+BAA+BA,EAAM,cAAc,UAAU;AAAA,UACpFA,EAAM,kBAAkB,wBAAwBA,EAAM,eAAe,WAAW;AAAA,UAChFA,EAAM,mBAAmB,yBAAyBA,EAAM,gBAAgB,YAAY;AAAA,UAAG;AAAA,UAAgC;AAAA,UACvHA,EAAM,aAAa;AAAA,UAAE;AAAA,WAASA,EAAM,aAAa,KAAK,IAAI,MAAM;AAAA,UAAG;AAAA,QAAA,GAEvE;AAAA,MAEN,KAAK;AACF,sCAAS,UAAA,iEAAA,CAA8D;AAAA,MAC1E;AACG,eACG,gBAAAO,EAAAC,GAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UAC+BR,EAAM;AAAA,UAAU;AAAA,UAAiB;AAAA,UAC9DA,EAAM,YAAYC,IACd,iCAAiCA,IAAiBD,EAAM,SAAS,qDACjE;AAAA,QAAA,GACR;AAAA,IAAA;AAAA,EAGZ,GAEMU,IAAW,MACV,EAAAV,EAAM,WAAW,aACjBA,EAAM,WAAW,cAAcA,EAAM,aAAaC;AAIzD,SACG,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,OAAOb,MAAW,SAAS,2BAA2B;AAAA,MACtD,SACG,gBAAAY,EAAAH,GAAA,EACI,UAAAT,MAAW,SACT,gBAAAQ,EAAAC,GAAA,EAAE,UAAA;AAAA,QAAA;AAAA,QAC8B;AAAA,QAC5BR,EAAM,WAAW,gBAAgB,6BAA6BS,EAAoBT,EAAM,aAAa,IAAI,CAAC,MAAM;AAAA,QAAG;AAAA,MAAA,GAEvH,IAEAM,KAEN;AAAA,MAEH,YAAY,MAAM,CAACF,EAAc,aAAaD,EAAA;AAAA,MAC9C,OAAM;AAAA,MACN,eAAe;AAAA,QACZ,OAAOJ,MAAW,SAAS,8BAA8BW,EAAA,IAAa,4BAA4B;AAAA,QAClG,MAAM;AAAA,QACN,WAAWN,EAAc;AAAA,QACzB,QAAQ,MACL,CAACF,KACDE,EAAc,OAAON,GAAQ;AAAA,UAC1B,WAAW,MAAM;AACd,YAAAK,EAAA;AAAA,UACH;AAAA,QAAA,CACF;AAAA,MAAA;AAAA,IACP;AAAA,EAAA;AAGT;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanPruneSettings.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanSettings/PlanPruneSettings.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlanPruneSettings.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanSettings/PlanPruneSettings.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,UAAU,sBAAsB;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CAC1E;AAED,QAAA,MAAM,iBAAiB,GAAI,oBAAoB,sBAAsB,4CA6KpE,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|