@plutonhq/core-frontend 0.1.25 → 0.1.27
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 +4 -1
- package/dist-lib/@types/backups.d.ts.map +1 -1
- package/dist-lib/@types/plans.d.ts +2 -0
- package/dist-lib/@types/plans.d.ts.map +1 -1
- package/dist-lib/@types/restores.d.ts +2 -0
- package/dist-lib/@types/restores.d.ts.map +1 -1
- package/dist-lib/components/Device/DeviceInfo/DeviceInfo.module.scss.js +26 -26
- 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/PlanBackups/PlanBackups.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.js +26 -26
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.js.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.js +64 -80
- package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
- package/dist-lib/components/Plan/PlanHistory/PlanHistory.js +1 -1
- package/dist-lib/components/Plan/PlanHistory/PlanHistory.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/Plan/PlanSettings/PlanSourceSettings.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js +39 -30
- package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.js +25 -25
- package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +1 -1
- package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
- package/dist-lib/components/common/Icon/Icon.js +12 -1
- package/dist-lib/components/common/Icon/Icon.js.map +1 -1
- 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/IntervalField/IntervalField.d.ts.map +1 -1
- package/dist-lib/components/common/form/IntervalField/IntervalField.js +66 -46
- package/dist-lib/components/common/form/IntervalField/IntervalField.js.map +1 -1
- package/dist-lib/components/common/form/NumberInput/NumberInput.module.scss.js +4 -4
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +49 -47
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
- package/dist-lib/components/common/form/TagsInput/TagsInput.d.ts +2 -1
- package/dist-lib/components/common/form/TagsInput/TagsInput.d.ts.map +1 -1
- package/dist-lib/components/common/form/TagsInput/TagsInput.js +15 -15
- package/dist-lib/components/common/form/TagsInput/TagsInput.js.map +1 -1
- package/dist-lib/components/common/form/TimePicker/TimePicker.module.scss.js +13 -13
- package/dist-lib/hooks/usePlanSingleActions.js +7 -7
- package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
- package/dist-lib/styles/core-frontend.css +1 -1
- package/dist-lib/styles/global.scss +6 -0
- package/dist-lib/utils/constants.js +1 -1
- package/dist-lib/utils/constants.js.map +1 -1
- package/dist-lib/utils/helpers.d.ts +2 -0
- package/dist-lib/utils/helpers.d.ts.map +1 -1
- package/dist-lib/utils/helpers.js +55 -33
- package/dist-lib/utils/helpers.js.map +1 -1
- package/dist-lib/utils/plans.js +6 -6
- package/dist-lib/utils/plans.js.map +1 -1
- package/dist-lib/utils.js +34 -33
- package/package.json +1 -1
- package/src/@types/backups.ts +4 -1
- package/src/@types/plans.ts +2 -0
- package/src/@types/restores.ts +2 -0
- package/src/components/Device/DeviceInfo/DeviceInfo.module.scss +1 -0
- package/src/components/Plan/BackupEvents/BackupEvents.tsx +5 -3
- package/src/components/Plan/PlanBackups/PlanBackups.tsx +5 -2
- package/src/components/Plan/PlanForm/PlanForm.tsx +1 -19
- package/src/components/Plan/PlanHistory/PlanHistory.tsx +1 -1
- 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/Plan/PlanSettings/PlanSourceSettings.tsx +15 -1
- package/src/components/Plan/PlanStats/PlanStats.module.scss +3 -0
- package/src/components/Plan/PlanStats/PlanStats.tsx +2 -8
- package/src/components/common/Icon/Icon.tsx +12 -0
- package/src/components/common/StatusLabel/StatusLabel.tsx +7 -1
- package/src/components/common/form/IntervalField/IntervalField.tsx +21 -1
- package/src/components/common/form/NumberInput/NumberInput.module.scss +1 -0
- package/src/components/common/form/StoragePicker/StoragePicker.tsx +8 -1
- package/src/components/common/form/TagsInput/TagsInput.tsx +3 -2
- package/src/components/common/form/TimePicker/TimePicker.module.scss +1 -0
- package/src/hooks/usePlanSingleActions.tsx +2 -2
- package/src/styles/global.scss +6 -0
- package/src/utils/constants.ts +1 -1
- package/src/utils/helpers.ts +25 -0
- package/src/utils/plans.ts +3 -3
|
@@ -1,114 +1,113 @@
|
|
|
1
1
|
import { jsxs as o, jsx as r } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
2
|
+
import { useState as R } from "react";
|
|
3
3
|
import n from "../../common/Icon/Icon.js";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import { isPlanSettingsValid as c } from "../../../utils/plans.js";
|
|
4
|
+
import z from "../../common/SidePanel/SidePanel.js";
|
|
5
|
+
import w from "../../common/form/StoragePicker/StoragePicker.js";
|
|
6
|
+
import D from "../PlanSettings/PlanStrategySettings.js";
|
|
7
|
+
import E from "../PlanSettings/PlanSourceSettings.js";
|
|
8
|
+
import t from "../AddPlan/AddPlan.module.scss.js";
|
|
9
|
+
import c from "./PlanForm.module.scss.js";
|
|
10
|
+
import { useGetSettings as V } from "../../../services/settings.js";
|
|
11
|
+
import q from "../PlanSettings/PlanAdvancedSettings.js";
|
|
12
|
+
import { isPlanSettingsValid as s } from "../../../utils/plans.js";
|
|
14
13
|
import L from "../../common/form/IntervalField/IntervalField.js";
|
|
15
14
|
import T from "./PlanFormNav.js";
|
|
16
15
|
import { useGetDevice as j } from "../../../services/devices.js";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
const
|
|
20
|
-
title:
|
|
16
|
+
import A from "../PlanSettings/PlanPruneSettings.js";
|
|
17
|
+
import G from "../PlanSettings/PlanReplicationSettings.js";
|
|
18
|
+
const te = ({
|
|
19
|
+
title: P,
|
|
21
20
|
planSettings: e,
|
|
22
21
|
type: l,
|
|
23
|
-
onPlanSettingsChange:
|
|
22
|
+
onPlanSettingsChange: d,
|
|
24
23
|
onSubmit: f,
|
|
25
24
|
isSubmitting: h,
|
|
26
|
-
close:
|
|
25
|
+
close: I,
|
|
27
26
|
storagePath: x,
|
|
28
27
|
storageId: B,
|
|
29
28
|
planId: C
|
|
30
29
|
}) => {
|
|
31
30
|
var N, b, k;
|
|
32
|
-
const [
|
|
31
|
+
const [i, m] = R(1), { data: u } = V(), U = ((N = u == null ? void 0 : u.result) == null ? void 0 : N.settings) || {}, { data: p } = j("main", !0), y = (b = p == null ? void 0 : p.result) == null ? void 0 : b.device, v = {
|
|
33
32
|
1: {
|
|
34
33
|
title: "Next: Configure Source & Destination",
|
|
35
|
-
onClick: () =>
|
|
34
|
+
onClick: () => s(e, i) && m(i + 1)
|
|
36
35
|
},
|
|
37
36
|
2: {
|
|
38
37
|
title: "Next: Setup Schedule & Retention",
|
|
39
|
-
onClick: () =>
|
|
38
|
+
onClick: () => s(e, i) && m(i + 1)
|
|
40
39
|
},
|
|
41
|
-
3: { title: "Next: Advanced Settings", onClick: () =>
|
|
40
|
+
3: { title: "Next: Advanced Settings", onClick: () => s(e, i) && m(i + 1) },
|
|
42
41
|
4: {
|
|
43
42
|
title: "Create Plan",
|
|
44
|
-
onClick: () =>
|
|
43
|
+
onClick: () => s(e, !1) && f()
|
|
45
44
|
}
|
|
46
|
-
},
|
|
45
|
+
}, F = (a) => {
|
|
47
46
|
if (l !== "edit")
|
|
48
47
|
return;
|
|
49
|
-
|
|
48
|
+
s(e, i) && m(a);
|
|
50
49
|
};
|
|
51
50
|
return /* @__PURE__ */ o(
|
|
52
|
-
|
|
51
|
+
z,
|
|
53
52
|
{
|
|
54
|
-
title:
|
|
53
|
+
title: P,
|
|
55
54
|
icon: /* @__PURE__ */ r(n, { type: "backup", size: 20 }),
|
|
56
55
|
width: l === "add" ? "100%" : void 0,
|
|
57
56
|
headerWidth: l === "add" ? "740px" : void 0,
|
|
58
|
-
close:
|
|
57
|
+
close: I,
|
|
59
58
|
withTabs: !0,
|
|
60
|
-
footer: /* @__PURE__ */ r("div", { className:
|
|
61
|
-
/* @__PURE__ */ r("div", { className:
|
|
59
|
+
footer: /* @__PURE__ */ r("div", { className: c.planFormFooter, children: /* @__PURE__ */ o("div", { className: c.footerContainer, children: [
|
|
60
|
+
/* @__PURE__ */ r("div", { className: t.footerLeft, children: /* @__PURE__ */ r("div", { className: t.summary, children: l === "add" && i > 1 && /* @__PURE__ */ o("button", { className: c.backButton, onClick: () => i > 0 && m(i - 1), disabled: h, children: [
|
|
62
61
|
/* @__PURE__ */ r(n, { type: "arrow-left", size: 14 }),
|
|
63
62
|
" Back"
|
|
64
63
|
] }) }) }),
|
|
65
|
-
/* @__PURE__ */ r("div", { className:
|
|
64
|
+
/* @__PURE__ */ r("div", { className: t.footerRight, children: l === "add" ? /* @__PURE__ */ o("button", { className: t.createButton, onClick: v[i].onClick, children: [
|
|
66
65
|
/* @__PURE__ */ r(n, { type: "check", size: 12 }),
|
|
67
66
|
" ",
|
|
68
|
-
v[
|
|
69
|
-
] }) : /* @__PURE__ */ o("button", { className:
|
|
67
|
+
v[i].title
|
|
68
|
+
] }) : /* @__PURE__ */ o("button", { className: t.createButton, onClick: () => s(e, !1) && f(), children: [
|
|
70
69
|
/* @__PURE__ */ r(n, { type: "check", size: 12 }),
|
|
71
70
|
" ",
|
|
72
71
|
"Update Plan"
|
|
73
72
|
] }) })
|
|
74
73
|
] }) }),
|
|
75
74
|
children: [
|
|
76
|
-
/* @__PURE__ */ r(T, { step:
|
|
77
|
-
/* @__PURE__ */ o("div", { className: `${
|
|
78
|
-
h && /* @__PURE__ */ r("div", { className:
|
|
79
|
-
|
|
80
|
-
/* @__PURE__ */ o("div", { className:
|
|
81
|
-
/* @__PURE__ */ r("label", { className:
|
|
82
|
-
!e.title && /* @__PURE__ */ r("span", { className:
|
|
75
|
+
/* @__PURE__ */ r(T, { step: i, type: l, gotoStep: F }),
|
|
76
|
+
/* @__PURE__ */ o("div", { className: `${c.formContent} styled__scrollbar`, children: [
|
|
77
|
+
h && /* @__PURE__ */ r("div", { className: t.loader, children: /* @__PURE__ */ r(n, { size: 36, type: "loading" }) }),
|
|
78
|
+
i === 1 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
|
|
79
|
+
/* @__PURE__ */ o("div", { className: t.field, children: [
|
|
80
|
+
/* @__PURE__ */ r("label", { className: t.label, children: "Backup Plan Name*" }),
|
|
81
|
+
!e.title && /* @__PURE__ */ r("span", { className: t.fieldErrorLabel, children: "Required" }),
|
|
83
82
|
/* @__PURE__ */ r(
|
|
84
83
|
"input",
|
|
85
84
|
{
|
|
86
|
-
className:
|
|
85
|
+
className: t.titleInput,
|
|
87
86
|
type: "text",
|
|
88
87
|
placeholder: "Plan Name",
|
|
89
88
|
value: e.title || "",
|
|
90
|
-
onChange: (a) =>
|
|
89
|
+
onChange: (a) => d({ ...e, title: a.target.value })
|
|
91
90
|
}
|
|
92
91
|
)
|
|
93
92
|
] }),
|
|
94
|
-
/* @__PURE__ */ o("div", { className:
|
|
95
|
-
/* @__PURE__ */ r("label", { className:
|
|
93
|
+
/* @__PURE__ */ o("div", { className: t.field, children: [
|
|
94
|
+
/* @__PURE__ */ r("label", { className: t.label, children: "Backup Plan Description" }),
|
|
96
95
|
/* @__PURE__ */ r(
|
|
97
96
|
"input",
|
|
98
97
|
{
|
|
99
|
-
className:
|
|
98
|
+
className: t.titleInput,
|
|
100
99
|
type: "text",
|
|
101
100
|
placeholder: "Plan Description",
|
|
102
101
|
value: e.description || "",
|
|
103
|
-
onChange: (a) =>
|
|
102
|
+
onChange: (a) => d({ ...e, description: a.target.value })
|
|
104
103
|
}
|
|
105
104
|
)
|
|
106
105
|
] }),
|
|
107
106
|
e.sourceType === "device" && /* @__PURE__ */ r(
|
|
108
|
-
|
|
107
|
+
D,
|
|
109
108
|
{
|
|
110
109
|
plan: e,
|
|
111
|
-
onUpdate: (a) =>
|
|
110
|
+
onUpdate: (a) => d({ ...e, method: a }),
|
|
112
111
|
disabled: l === "edit",
|
|
113
112
|
options: [
|
|
114
113
|
{
|
|
@@ -135,27 +134,27 @@ const le = ({
|
|
|
135
134
|
}
|
|
136
135
|
)
|
|
137
136
|
] }),
|
|
138
|
-
|
|
137
|
+
i === 2 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
|
|
139
138
|
/* @__PURE__ */ r(
|
|
140
|
-
|
|
139
|
+
E,
|
|
141
140
|
{
|
|
142
141
|
plan: e,
|
|
143
|
-
onUpdate: (a) =>
|
|
142
|
+
onUpdate: (a) => d({ ...a }),
|
|
144
143
|
isEditing: l === "edit",
|
|
145
144
|
error: e.sourceConfig.includes.length === 0 ? "Required" : ""
|
|
146
145
|
}
|
|
147
146
|
),
|
|
148
|
-
/* @__PURE__ */ o("div", { className:
|
|
149
|
-
/* @__PURE__ */ r("label", { className:
|
|
150
|
-
!e.storage.name && /* @__PURE__ */ r("span", { className:
|
|
147
|
+
/* @__PURE__ */ o("div", { className: t.field, children: [
|
|
148
|
+
/* @__PURE__ */ r("label", { className: t.label, children: "Backup Destination*" }),
|
|
149
|
+
!e.storage.name && /* @__PURE__ */ r("span", { className: t.fieldErrorLabel, children: "Required" }),
|
|
151
150
|
/* @__PURE__ */ r(
|
|
152
|
-
|
|
151
|
+
w,
|
|
153
152
|
{
|
|
154
153
|
storagePath: x || e.storagePath,
|
|
155
154
|
storageId: B || ((k = e.storage) == null ? void 0 : k.id) || "",
|
|
156
155
|
deviceId: e.sourceId || "main",
|
|
157
156
|
disabled: l === "edit",
|
|
158
|
-
onUpdate: (a) =>
|
|
157
|
+
onUpdate: (a) => d({
|
|
159
158
|
...e,
|
|
160
159
|
storagePath: a.path,
|
|
161
160
|
storage: { id: a.storage.id, name: a.storage.name }
|
|
@@ -164,7 +163,7 @@ const le = ({
|
|
|
164
163
|
)
|
|
165
164
|
] }),
|
|
166
165
|
/* @__PURE__ */ r(
|
|
167
|
-
|
|
166
|
+
G,
|
|
168
167
|
{
|
|
169
168
|
replication: e.settings.replication,
|
|
170
169
|
primaryStorageId: e.storage.id,
|
|
@@ -172,55 +171,40 @@ const le = ({
|
|
|
172
171
|
deviceId: e.sourceId || "main",
|
|
173
172
|
isEditing: l === "edit",
|
|
174
173
|
planID: C,
|
|
175
|
-
onUpdate: (a) =>
|
|
174
|
+
onUpdate: (a) => d({
|
|
176
175
|
...e,
|
|
177
176
|
settings: { ...e.settings, replication: a }
|
|
178
177
|
})
|
|
179
178
|
}
|
|
180
179
|
)
|
|
181
180
|
] }),
|
|
182
|
-
|
|
183
|
-
/* @__PURE__ */ r("div", { className:
|
|
181
|
+
i === 3 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
|
|
182
|
+
/* @__PURE__ */ r("div", { className: t.field, style: { width: "150px" }, children: /* @__PURE__ */ r(
|
|
184
183
|
L,
|
|
185
184
|
{
|
|
186
|
-
label: "Backup Interval
|
|
185
|
+
label: "Backup Interval",
|
|
187
186
|
fieldValue: e.settings.interval,
|
|
188
|
-
onUpdate: (a) =>
|
|
189
|
-
}
|
|
190
|
-
) }),
|
|
191
|
-
/* @__PURE__ */ r("div", { className: i.field, style: { width: "150px" }, children: /* @__PURE__ */ r(
|
|
192
|
-
E,
|
|
193
|
-
{
|
|
194
|
-
label: "Backups to Keep",
|
|
195
|
-
fieldValue: e.settings.prune.snapCount,
|
|
196
|
-
onUpdate: (a) => s({
|
|
197
|
-
...e,
|
|
198
|
-
settings: { ...e.settings, prune: { ...e.settings.prune, snapCount: a } }
|
|
199
|
-
}),
|
|
200
|
-
placeholder: "5",
|
|
201
|
-
min: 1,
|
|
202
|
-
inline: !1,
|
|
203
|
-
hint: "Number of Active Restorable Backups/Snapshots to Keep regardless of the Removal Policy"
|
|
187
|
+
onUpdate: (a) => d({ ...e, settings: { ...e.settings, interval: a } })
|
|
204
188
|
}
|
|
205
189
|
) }),
|
|
206
190
|
/* @__PURE__ */ r(
|
|
207
|
-
|
|
191
|
+
A,
|
|
208
192
|
{
|
|
209
193
|
plan: e,
|
|
210
|
-
onUpdate: (a) =>
|
|
194
|
+
onUpdate: (a) => d({
|
|
211
195
|
...e,
|
|
212
196
|
settings: { ...e.settings, prune: a }
|
|
213
197
|
})
|
|
214
198
|
}
|
|
215
199
|
)
|
|
216
200
|
] }),
|
|
217
|
-
|
|
201
|
+
i === 4 && /* @__PURE__ */ r("div", { className: c.planStep, children: /* @__PURE__ */ r(q, { plan: e, appSettings: U, onUpdate: d, device: y }) })
|
|
218
202
|
] })
|
|
219
203
|
]
|
|
220
204
|
}
|
|
221
205
|
);
|
|
222
206
|
};
|
|
223
207
|
export {
|
|
224
|
-
|
|
208
|
+
te as default
|
|
225
209
|
};
|
|
226
210
|
//# sourceMappingURL=PlanForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanForm.js","sources":["../../../../src/components/Plan/PlanForm/PlanForm.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport StoragePicker from '../../common/form/StoragePicker/StoragePicker';\r\nimport PlanStrategySettings from '../PlanSettings/PlanStrategySettings';\r\nimport PlanSourceSettings from '../PlanSettings/PlanSourceSettings';\r\nimport { NewPlanSettings } from '../../../@types/plans';\r\nimport NumberInput from '../../common/form/NumberInput/NumberInput';\r\nimport classes from '../AddPlan/AddPlan.module.scss';\r\nimport PFClasses from './PlanForm.module.scss';\r\nimport { useGetSettings } from '../../../services/settings';\r\nimport PlanAdvancedSettings from '../PlanSettings/PlanAdvancedSettings';\r\nimport { isPlanSettingsValid } from '../../../utils/plans';\r\nimport IntervalField from '../../common/form/IntervalField/IntervalField';\r\nimport PlanFormNav from './PlanFormNav';\r\nimport { useGetDevice } from '../../../services/devices';\r\nimport PlanPruneSettings from '../PlanSettings/PlanPruneSettings';\r\nimport PlanReplicationSettings from '../PlanSettings/PlanReplicationSettings';\r\n\r\ntype PlanFormProps = {\r\n title: string;\r\n planSettings: NewPlanSettings;\r\n type: 'add' | 'edit';\r\n onPlanSettingsChange: (settings: NewPlanSettings) => void;\r\n onSubmit: () => void;\r\n isSubmitting: boolean;\r\n close: () => void;\r\n storagePath?: string;\r\n storageId?: string;\r\n planId?: string;\r\n};\r\n\r\nconst PlanForm = ({\r\n title,\r\n planSettings,\r\n type,\r\n onPlanSettingsChange,\r\n onSubmit,\r\n isSubmitting,\r\n close,\r\n storagePath,\r\n storageId,\r\n planId,\r\n}: PlanFormProps) => {\r\n const [step, setStep] = useState<number>(1);\r\n\r\n const { data: settingsData } = useGetSettings();\r\n const appSettings = settingsData?.result?.settings || {};\r\n // const smtpConnected = appSettings?.integration?.smtp?.connected ? true : false;\r\n\r\n const { data: deviceData } = useGetDevice('main', true);\r\n const deviceInstance = deviceData?.result?.device;\r\n\r\n const buttonTexts: Record<number, { title: string; onClick: () => void }> = {\r\n 1: {\r\n title: 'Next: Configure Source & Destination',\r\n onClick: () => isPlanSettingsValid(planSettings, step) && setStep(step + 1),\r\n },\r\n 2: {\r\n title: 'Next: Setup Schedule & Retention',\r\n onClick: () => isPlanSettingsValid(planSettings, step) && setStep(step + 1),\r\n },\r\n 3: { title: 'Next: Advanced Settings', onClick: () => isPlanSettingsValid(planSettings, step) && setStep(step + 1) },\r\n 4: {\r\n title: 'Create Plan',\r\n onClick: () => isPlanSettingsValid(planSettings, false) && onSubmit(),\r\n },\r\n };\r\n\r\n const gotoStep = (nStep: number) => {\r\n if (type !== 'edit') {\r\n return;\r\n }\r\n\r\n const isSettingsValid = isPlanSettingsValid(planSettings, step);\r\n if (isSettingsValid) {\r\n setStep(nStep);\r\n }\r\n };\r\n\r\n return (\r\n <SidePanel\r\n title={title}\r\n icon={<Icon type={'backup'} size={20} />}\r\n width={type === 'add' ? '100%' : undefined}\r\n headerWidth={type === 'add' ? '740px' : undefined}\r\n close={close}\r\n withTabs={true}\r\n footer={\r\n <div className={PFClasses.planFormFooter}>\r\n <div className={PFClasses.footerContainer}>\r\n <div className={classes.footerLeft}>\r\n <div className={classes.summary}>\r\n {type === 'add' && step > 1 && (\r\n <button className={PFClasses.backButton} onClick={() => step > 0 && setStep(step - 1)} disabled={isSubmitting}>\r\n <Icon type=\"arrow-left\" size={14} /> Back\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n <div className={classes.footerRight}>\r\n {type === 'add' ? (\r\n <button className={classes.createButton} onClick={buttonTexts[step].onClick}>\r\n <Icon type=\"check\" size={12} /> {buttonTexts[step].title}\r\n </button>\r\n ) : (\r\n <button className={classes.createButton} onClick={() => isPlanSettingsValid(planSettings, false) && onSubmit()}>\r\n <Icon type=\"check\" size={12} /> {'Update Plan'}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n >\r\n <PlanFormNav step={step} type={type} gotoStep={gotoStep} />\r\n\r\n <div className={`${PFClasses.formContent} styled__scrollbar`}>\r\n {isSubmitting && (\r\n <div className={classes.loader}>\r\n <Icon size={36} type=\"loading\" />\r\n </div>\r\n )}\r\n {step === 1 && (\r\n <div className={PFClasses.planStep}>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Plan Name*</label>\r\n {!planSettings.title && <span className={classes.fieldErrorLabel}>{'Required'}</span>}\r\n <input\r\n className={classes.titleInput}\r\n type=\"text\"\r\n placeholder=\"Plan Name\"\r\n value={planSettings.title || ''}\r\n onChange={(e) => onPlanSettingsChange({ ...planSettings, title: e.target.value })}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Plan Description</label>\r\n <input\r\n className={classes.titleInput}\r\n type=\"text\"\r\n placeholder=\"Plan Description\"\r\n value={planSettings.description || ''}\r\n onChange={(e) => onPlanSettingsChange({ ...planSettings, description: e.target.value })}\r\n />\r\n </div>\r\n {/* <PlanTypeSettings\r\n plan={planSettings}\r\n onUpdate={(plan: NewPlanSettings) => onPlanSettingsChange({ ...plan })}\r\n disabled={type === 'edit' ? true : false}\r\n options={[\r\n {\r\n value: 'device',\r\n icon: 'computer',\r\n label: 'Device',\r\n description: 'Backup content of a Computer/Server',\r\n },\r\n {\r\n value: 'database',\r\n icon: 'database',\r\n label: 'Database',\r\n description: 'Backup a Database',\r\n disabled: true,\r\n },\r\n {\r\n value: 'googleworkspace',\r\n icon: 'google-workspace',\r\n label: 'Google Workspace',\r\n description: 'Backup Google Workspace',\r\n disabled: true,\r\n },\r\n {\r\n value: 'microsoft365',\r\n icon: 'microsoft-365',\r\n label: 'Microsoft 365',\r\n description: 'Backup Microsoft 365',\r\n disabled: true,\r\n },\r\n ]}\r\n /> */}\r\n {planSettings.sourceType === 'device' && (\r\n <PlanStrategySettings\r\n plan={planSettings}\r\n onUpdate={(method) => onPlanSettingsChange({ ...planSettings, method })}\r\n disabled={type === 'edit' ? true : false}\r\n options={[\r\n {\r\n value: 'backup',\r\n icon: 'backup',\r\n label: 'Incremental Backup',\r\n description: 'Periodically create Incremental backup snapshots of source',\r\n },\r\n // {\r\n // value: 'sync',\r\n // icon: 'reload',\r\n // label: 'Real-time Sync',\r\n // description: 'Maintain identical source (with revisions)',\r\n // disabled: true,\r\n // },\r\n // {\r\n // value: 'rescue',\r\n // icon: 'rescue',\r\n // label: 'Linux Server Backup',\r\n // description: 'Full Linux system backups with bootable ISO image',\r\n // disabled: true,\r\n // },\r\n ]}\r\n />\r\n )}\r\n </div>\r\n )}\r\n {step === 2 && (\r\n <div className={PFClasses.planStep}>\r\n <PlanSourceSettings\r\n plan={planSettings}\r\n onUpdate={(plan) => onPlanSettingsChange({ ...plan })}\r\n isEditing={type === 'edit' ? true : false}\r\n error={planSettings.sourceConfig.includes.length === 0 ? 'Required' : ''}\r\n />\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Destination*</label>\r\n {!planSettings.storage.name && <span className={classes.fieldErrorLabel}>{'Required'}</span>}\r\n <StoragePicker\r\n storagePath={storagePath || planSettings.storagePath}\r\n storageId={storageId || planSettings.storage?.id || ''}\r\n deviceId={planSettings.sourceId || 'main'}\r\n disabled={type === 'edit' ? true : false}\r\n onUpdate={(s: { storage: { name: string; id: string; type: string }; path: string }) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n storagePath: s.path,\r\n storage: { id: s.storage.id, name: s.storage.name },\r\n })\r\n }\r\n />\r\n </div>\r\n <PlanReplicationSettings\r\n replication={planSettings.settings.replication}\r\n primaryStorageId={planSettings.storage.id}\r\n primaryStoragePath={planSettings.storagePath}\r\n deviceId={planSettings.sourceId || 'main'}\r\n isEditing={type === 'edit' ? true : false}\r\n planID={planId}\r\n onUpdate={(replication) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n settings: { ...planSettings.settings, replication: replication },\r\n })\r\n }\r\n />\r\n </div>\r\n )}\r\n {step === 3 && (\r\n <div className={PFClasses.planStep}>\r\n <div className={classes.field} style={{ width: '150px' }}>\r\n <IntervalField\r\n label=\"Backup Interval*\"\r\n fieldValue={planSettings.settings.interval}\r\n onUpdate={(intervalSettings) =>\r\n onPlanSettingsChange({ ...planSettings, settings: { ...planSettings.settings, interval: intervalSettings } })\r\n }\r\n />\r\n </div>\r\n\r\n <div className={classes.field} style={{ width: '150px' }}>\r\n <NumberInput\r\n label=\"Backups to Keep\"\r\n fieldValue={planSettings.settings.prune.snapCount}\r\n onUpdate={(val) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n settings: { ...planSettings.settings, prune: { ...planSettings.settings.prune, snapCount: val } },\r\n })\r\n }\r\n placeholder=\"5\"\r\n min={1}\r\n inline={false}\r\n hint=\"Number of Active Restorable Backups/Snapshots to Keep regardless of the Removal Policy\"\r\n />\r\n </div>\r\n <PlanPruneSettings\r\n plan={planSettings}\r\n onUpdate={(pruneSettings) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n settings: { ...planSettings.settings, prune: pruneSettings },\r\n })\r\n }\r\n />\r\n </div>\r\n )}\r\n {step === 4 && (\r\n <div className={PFClasses.planStep}>\r\n <PlanAdvancedSettings plan={planSettings} appSettings={appSettings} onUpdate={onPlanSettingsChange} device={deviceInstance} />\r\n </div>\r\n )}\r\n </div>\r\n </SidePanel>\r\n );\r\n};\r\n\r\nexport default PlanForm;\r\n"],"names":["PlanForm","title","planSettings","type","onPlanSettingsChange","onSubmit","isSubmitting","close","storagePath","storageId","planId","step","setStep","useState","settingsData","useGetSettings","appSettings","_a","deviceData","useGetDevice","deviceInstance","_b","buttonTexts","isPlanSettingsValid","gotoStep","nStep","jsxs","SidePanel","jsx","Icon","PFClasses","classes","PlanFormNav","e","PlanStrategySettings","method","PlanSourceSettings","plan","StoragePicker","_c","s","PlanReplicationSettings","replication","IntervalField","intervalSettings","NumberInput","val","PlanPruneSettings","pruneSettings","PlanAdvancedSettings"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlanForm.js","sources":["../../../../src/components/Plan/PlanForm/PlanForm.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport StoragePicker from '../../common/form/StoragePicker/StoragePicker';\r\nimport PlanStrategySettings from '../PlanSettings/PlanStrategySettings';\r\nimport PlanSourceSettings from '../PlanSettings/PlanSourceSettings';\r\nimport { NewPlanSettings } from '../../../@types/plans';\r\nimport classes from '../AddPlan/AddPlan.module.scss';\r\nimport PFClasses from './PlanForm.module.scss';\r\nimport { useGetSettings } from '../../../services/settings';\r\nimport PlanAdvancedSettings from '../PlanSettings/PlanAdvancedSettings';\r\nimport { isPlanSettingsValid } from '../../../utils/plans';\r\nimport IntervalField from '../../common/form/IntervalField/IntervalField';\r\nimport PlanFormNav from './PlanFormNav';\r\nimport { useGetDevice } from '../../../services/devices';\r\nimport PlanPruneSettings from '../PlanSettings/PlanPruneSettings';\r\nimport PlanReplicationSettings from '../PlanSettings/PlanReplicationSettings';\r\n\r\ntype PlanFormProps = {\r\n title: string;\r\n planSettings: NewPlanSettings;\r\n type: 'add' | 'edit';\r\n onPlanSettingsChange: (settings: NewPlanSettings) => void;\r\n onSubmit: () => void;\r\n isSubmitting: boolean;\r\n close: () => void;\r\n storagePath?: string;\r\n storageId?: string;\r\n planId?: string;\r\n};\r\n\r\nconst PlanForm = ({\r\n title,\r\n planSettings,\r\n type,\r\n onPlanSettingsChange,\r\n onSubmit,\r\n isSubmitting,\r\n close,\r\n storagePath,\r\n storageId,\r\n planId,\r\n}: PlanFormProps) => {\r\n const [step, setStep] = useState<number>(1);\r\n\r\n const { data: settingsData } = useGetSettings();\r\n const appSettings = settingsData?.result?.settings || {};\r\n // const smtpConnected = appSettings?.integration?.smtp?.connected ? true : false;\r\n\r\n const { data: deviceData } = useGetDevice('main', true);\r\n const deviceInstance = deviceData?.result?.device;\r\n\r\n const buttonTexts: Record<number, { title: string; onClick: () => void }> = {\r\n 1: {\r\n title: 'Next: Configure Source & Destination',\r\n onClick: () => isPlanSettingsValid(planSettings, step) && setStep(step + 1),\r\n },\r\n 2: {\r\n title: 'Next: Setup Schedule & Retention',\r\n onClick: () => isPlanSettingsValid(planSettings, step) && setStep(step + 1),\r\n },\r\n 3: { title: 'Next: Advanced Settings', onClick: () => isPlanSettingsValid(planSettings, step) && setStep(step + 1) },\r\n 4: {\r\n title: 'Create Plan',\r\n onClick: () => isPlanSettingsValid(planSettings, false) && onSubmit(),\r\n },\r\n };\r\n\r\n const gotoStep = (nStep: number) => {\r\n if (type !== 'edit') {\r\n return;\r\n }\r\n\r\n const isSettingsValid = isPlanSettingsValid(planSettings, step);\r\n if (isSettingsValid) {\r\n setStep(nStep);\r\n }\r\n };\r\n\r\n return (\r\n <SidePanel\r\n title={title}\r\n icon={<Icon type={'backup'} size={20} />}\r\n width={type === 'add' ? '100%' : undefined}\r\n headerWidth={type === 'add' ? '740px' : undefined}\r\n close={close}\r\n withTabs={true}\r\n footer={\r\n <div className={PFClasses.planFormFooter}>\r\n <div className={PFClasses.footerContainer}>\r\n <div className={classes.footerLeft}>\r\n <div className={classes.summary}>\r\n {type === 'add' && step > 1 && (\r\n <button className={PFClasses.backButton} onClick={() => step > 0 && setStep(step - 1)} disabled={isSubmitting}>\r\n <Icon type=\"arrow-left\" size={14} /> Back\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n <div className={classes.footerRight}>\r\n {type === 'add' ? (\r\n <button className={classes.createButton} onClick={buttonTexts[step].onClick}>\r\n <Icon type=\"check\" size={12} /> {buttonTexts[step].title}\r\n </button>\r\n ) : (\r\n <button className={classes.createButton} onClick={() => isPlanSettingsValid(planSettings, false) && onSubmit()}>\r\n <Icon type=\"check\" size={12} /> {'Update Plan'}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n >\r\n <PlanFormNav step={step} type={type} gotoStep={gotoStep} />\r\n\r\n <div className={`${PFClasses.formContent} styled__scrollbar`}>\r\n {isSubmitting && (\r\n <div className={classes.loader}>\r\n <Icon size={36} type=\"loading\" />\r\n </div>\r\n )}\r\n {step === 1 && (\r\n <div className={PFClasses.planStep}>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Plan Name*</label>\r\n {!planSettings.title && <span className={classes.fieldErrorLabel}>{'Required'}</span>}\r\n <input\r\n className={classes.titleInput}\r\n type=\"text\"\r\n placeholder=\"Plan Name\"\r\n value={planSettings.title || ''}\r\n onChange={(e) => onPlanSettingsChange({ ...planSettings, title: e.target.value })}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Plan Description</label>\r\n <input\r\n className={classes.titleInput}\r\n type=\"text\"\r\n placeholder=\"Plan Description\"\r\n value={planSettings.description || ''}\r\n onChange={(e) => onPlanSettingsChange({ ...planSettings, description: e.target.value })}\r\n />\r\n </div>\r\n {/* <PlanTypeSettings\r\n plan={planSettings}\r\n onUpdate={(plan: NewPlanSettings) => onPlanSettingsChange({ ...plan })}\r\n disabled={type === 'edit' ? true : false}\r\n options={[\r\n {\r\n value: 'device',\r\n icon: 'computer',\r\n label: 'Device',\r\n description: 'Backup content of a Computer/Server',\r\n },\r\n {\r\n value: 'database',\r\n icon: 'database',\r\n label: 'Database',\r\n description: 'Backup a Database',\r\n disabled: true,\r\n },\r\n {\r\n value: 'googleworkspace',\r\n icon: 'google-workspace',\r\n label: 'Google Workspace',\r\n description: 'Backup Google Workspace',\r\n disabled: true,\r\n },\r\n {\r\n value: 'microsoft365',\r\n icon: 'microsoft-365',\r\n label: 'Microsoft 365',\r\n description: 'Backup Microsoft 365',\r\n disabled: true,\r\n },\r\n ]}\r\n /> */}\r\n {planSettings.sourceType === 'device' && (\r\n <PlanStrategySettings\r\n plan={planSettings}\r\n onUpdate={(method) => onPlanSettingsChange({ ...planSettings, method })}\r\n disabled={type === 'edit' ? true : false}\r\n options={[\r\n {\r\n value: 'backup',\r\n icon: 'backup',\r\n label: 'Incremental Backup',\r\n description: 'Periodically create Incremental backup snapshots of source',\r\n },\r\n // {\r\n // value: 'sync',\r\n // icon: 'reload',\r\n // label: 'Real-time Sync',\r\n // description: 'Maintain identical source (with revisions)',\r\n // disabled: true,\r\n // },\r\n // {\r\n // value: 'rescue',\r\n // icon: 'rescue',\r\n // label: 'Linux Server Backup',\r\n // description: 'Full Linux system backups with bootable ISO image',\r\n // disabled: true,\r\n // },\r\n ]}\r\n />\r\n )}\r\n </div>\r\n )}\r\n {step === 2 && (\r\n <div className={PFClasses.planStep}>\r\n <PlanSourceSettings\r\n plan={planSettings}\r\n onUpdate={(plan) => onPlanSettingsChange({ ...plan })}\r\n isEditing={type === 'edit' ? true : false}\r\n error={planSettings.sourceConfig.includes.length === 0 ? 'Required' : ''}\r\n />\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Destination*</label>\r\n {!planSettings.storage.name && <span className={classes.fieldErrorLabel}>{'Required'}</span>}\r\n <StoragePicker\r\n storagePath={storagePath || planSettings.storagePath}\r\n storageId={storageId || planSettings.storage?.id || ''}\r\n deviceId={planSettings.sourceId || 'main'}\r\n disabled={type === 'edit' ? true : false}\r\n onUpdate={(s: { storage: { name: string; id: string; type: string }; path: string }) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n storagePath: s.path,\r\n storage: { id: s.storage.id, name: s.storage.name },\r\n })\r\n }\r\n />\r\n </div>\r\n <PlanReplicationSettings\r\n replication={planSettings.settings.replication}\r\n primaryStorageId={planSettings.storage.id}\r\n primaryStoragePath={planSettings.storagePath}\r\n deviceId={planSettings.sourceId || 'main'}\r\n isEditing={type === 'edit' ? true : false}\r\n planID={planId}\r\n onUpdate={(replication) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n settings: { ...planSettings.settings, replication: replication },\r\n })\r\n }\r\n />\r\n </div>\r\n )}\r\n {step === 3 && (\r\n <div className={PFClasses.planStep}>\r\n <div className={classes.field} style={{ width: '150px' }}>\r\n <IntervalField\r\n label=\"Backup Interval\"\r\n fieldValue={planSettings.settings.interval}\r\n onUpdate={(intervalSettings) =>\r\n onPlanSettingsChange({ ...planSettings, settings: { ...planSettings.settings, interval: intervalSettings } })\r\n }\r\n />\r\n </div>\r\n <PlanPruneSettings\r\n plan={planSettings}\r\n onUpdate={(pruneSettings) =>\r\n onPlanSettingsChange({\r\n ...planSettings,\r\n settings: { ...planSettings.settings, prune: pruneSettings },\r\n })\r\n }\r\n />\r\n </div>\r\n )}\r\n {step === 4 && (\r\n <div className={PFClasses.planStep}>\r\n <PlanAdvancedSettings plan={planSettings} appSettings={appSettings} onUpdate={onPlanSettingsChange} device={deviceInstance} />\r\n </div>\r\n )}\r\n </div>\r\n </SidePanel>\r\n );\r\n};\r\n\r\nexport default PlanForm;\r\n"],"names":["PlanForm","title","planSettings","type","onPlanSettingsChange","onSubmit","isSubmitting","close","storagePath","storageId","planId","step","setStep","useState","settingsData","useGetSettings","appSettings","_a","deviceData","useGetDevice","deviceInstance","_b","buttonTexts","isPlanSettingsValid","gotoStep","nStep","jsxs","SidePanel","jsx","Icon","PFClasses","classes","PlanFormNav","e","PlanStrategySettings","method","PlanSourceSettings","plan","StoragePicker","_c","s","PlanReplicationSettings","replication","IntervalField","intervalSettings","PlanPruneSettings","pruneSettings","PlanAdvancedSettings"],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ const w = ({ planId: r, history: s, itemsCount: a = 10 }) => {
|
|
|
34
34
|
<div><b>Changes</b>: ${$(t.changes)}</div>
|
|
35
35
|
<div><b>Started</b>: ${p(t.started)}</div>
|
|
36
36
|
<div><b>Ended</b>: ${t.ended ? p(t.ended) : " - "}</div>
|
|
37
|
-
<div><b>Duration</b>: ${d ? c(d) : "
|
|
37
|
+
<div><b>Duration</b>: ${t.status !== "started" && d ? c(d) : "-"} </div>
|
|
38
38
|
`,
|
|
39
39
|
"data-tooltip-place": "top"
|
|
40
40
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanHistory.js","sources":["../../../../src/components/Plan/PlanHistory/PlanHistory.tsx"],"sourcesContent":["import { Plan } from '../../../@types/plans';\r\nimport { formatDateTime, formatDuration } from '../../../utils/helpers';\r\nimport classes from './PlanHistory.module.scss';\r\n\r\ninterface PlanHistoryProps {\r\n planId: string;\r\n history: Plan['backups'];\r\n itemsCount?: number;\r\n}\r\nconst PlanHistory = ({ planId, history, itemsCount = 10 }: PlanHistoryProps) => {\r\n const emptySlots = history.length < itemsCount ? itemsCount - history.length : 0;\r\n const statusVals = {\r\n completed: '✔️ Completed',\r\n failed: '❌ Failed',\r\n started: '⏳ In Progress',\r\n cancelled: '🛇 Cancelled',\r\n };\r\n\r\n const backupChanges = (changes: { new?: number; modified?: number; removed?: number }) => {\r\n const newCount = changes?.new || 0;\r\n const modifiedCount = changes?.modified || 0;\r\n const removedCount = changes?.removed || 0;\r\n const parts = [];\r\n if (newCount > 0) parts.push(`${newCount} New`);\r\n if (modifiedCount > 0) parts.push(`${modifiedCount} Modified`);\r\n if (removedCount > 0) parts.push(`${removedCount} Removed`);\r\n return parts.length > 0 ? parts.join(' / ') : 'No Changes';\r\n };\r\n\r\n return (\r\n <div className={`${classes.history} ${itemsCount > 10 ? classes.historyFull : ''}`}>\r\n {emptySlots > 0 &&\r\n [...Array(emptySlots)].map((_, i) => (\r\n <div\r\n className={classes.historyItemEmpty}\r\n key={`${planId}-empty-${i}`}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"No History\"\r\n data-tooltip-place=\"top\"\r\n ></div>\r\n ))}\r\n\r\n {history.slice(0, itemsCount).map((h, i) => {\r\n const duration = h.duration || (h.ended ? (new Date(h.ended).getTime() - new Date(h.started).getTime()) / 1000 : 0);\r\n return (\r\n <div\r\n className={`${h.status === 'completed' ? classes.historyItemSuccess : ''} ${h.status === 'failed' || h.status === 'cancelled' ? classes.historyItemFailed : ''} ${h.inProgress ? classes.historyItemPending : ''}`}\r\n key={`${planId}-history-${i}`}\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-html={`\r\n <div><b>Status</b>: ${statusVals[h.status as keyof typeof statusVals] || 'Unknown'}</div>\r\n <div><b>Changes</b>: ${backupChanges(h.changes)}</div>\r\n <div><b>Started</b>: ${formatDateTime(h.started)}</div>\r\n <div><b>Ended</b>: ${h.ended ? formatDateTime(h.ended) : ' - '}</div>\r\n <div><b>Duration</b>: ${duration ? formatDuration(duration) : '
|
|
1
|
+
{"version":3,"file":"PlanHistory.js","sources":["../../../../src/components/Plan/PlanHistory/PlanHistory.tsx"],"sourcesContent":["import { Plan } from '../../../@types/plans';\r\nimport { formatDateTime, formatDuration } from '../../../utils/helpers';\r\nimport classes from './PlanHistory.module.scss';\r\n\r\ninterface PlanHistoryProps {\r\n planId: string;\r\n history: Plan['backups'];\r\n itemsCount?: number;\r\n}\r\nconst PlanHistory = ({ planId, history, itemsCount = 10 }: PlanHistoryProps) => {\r\n const emptySlots = history.length < itemsCount ? itemsCount - history.length : 0;\r\n const statusVals = {\r\n completed: '✔️ Completed',\r\n failed: '❌ Failed',\r\n started: '⏳ In Progress',\r\n cancelled: '🛇 Cancelled',\r\n };\r\n\r\n const backupChanges = (changes: { new?: number; modified?: number; removed?: number }) => {\r\n const newCount = changes?.new || 0;\r\n const modifiedCount = changes?.modified || 0;\r\n const removedCount = changes?.removed || 0;\r\n const parts = [];\r\n if (newCount > 0) parts.push(`${newCount} New`);\r\n if (modifiedCount > 0) parts.push(`${modifiedCount} Modified`);\r\n if (removedCount > 0) parts.push(`${removedCount} Removed`);\r\n return parts.length > 0 ? parts.join(' / ') : 'No Changes';\r\n };\r\n\r\n return (\r\n <div className={`${classes.history} ${itemsCount > 10 ? classes.historyFull : ''}`}>\r\n {emptySlots > 0 &&\r\n [...Array(emptySlots)].map((_, i) => (\r\n <div\r\n className={classes.historyItemEmpty}\r\n key={`${planId}-empty-${i}`}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"No History\"\r\n data-tooltip-place=\"top\"\r\n ></div>\r\n ))}\r\n\r\n {history.slice(0, itemsCount).map((h, i) => {\r\n const duration = h.duration || (h.ended ? (new Date(h.ended).getTime() - new Date(h.started).getTime()) / 1000 : 0);\r\n return (\r\n <div\r\n className={`${h.status === 'completed' ? classes.historyItemSuccess : ''} ${h.status === 'failed' || h.status === 'cancelled' ? classes.historyItemFailed : ''} ${h.inProgress ? classes.historyItemPending : ''}`}\r\n key={`${planId}-history-${i}`}\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-html={`\r\n <div><b>Status</b>: ${statusVals[h.status as keyof typeof statusVals] || 'Unknown'}</div>\r\n <div><b>Changes</b>: ${backupChanges(h.changes)}</div>\r\n <div><b>Started</b>: ${formatDateTime(h.started)}</div>\r\n <div><b>Ended</b>: ${h.ended ? formatDateTime(h.ended) : ' - '}</div>\r\n <div><b>Duration</b>: ${h.status !== 'started' && duration ? formatDuration(duration) : '-'} </div>\r\n `}\r\n data-tooltip-place=\"top\"\r\n ></div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlanHistory;\r\n"],"names":["PlanHistory","planId","history","itemsCount","emptySlots","statusVals","backupChanges","changes","newCount","modifiedCount","removedCount","parts","jsxs","classes","_","i","jsx","h","duration","formatDateTime","formatDuration"],"mappings":";;;AASA,MAAMA,IAAc,CAAC,EAAE,QAAAC,GAAQ,SAAAC,GAAS,YAAAC,IAAa,SAA2B;AAC7E,QAAMC,IAAaF,EAAQ,SAASC,IAAaA,IAAaD,EAAQ,SAAS,GACzEG,IAAa;AAAA,IAChB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,EAAA,GAGRC,IAAgB,CAACC,MAAmE;AACvF,UAAMC,KAAWD,KAAA,gBAAAA,EAAS,QAAO,GAC3BE,KAAgBF,KAAA,gBAAAA,EAAS,aAAY,GACrCG,KAAeH,KAAA,gBAAAA,EAAS,YAAW,GACnCI,IAAQ,CAAA;AACd,WAAIH,IAAW,KAAGG,EAAM,KAAK,GAAGH,CAAQ,MAAM,GAC1CC,IAAgB,KAAGE,EAAM,KAAK,GAAGF,CAAa,WAAW,GACzDC,IAAe,KAAGC,EAAM,KAAK,GAAGD,CAAY,UAAU,GACnDC,EAAM,SAAS,IAAIA,EAAM,KAAK,KAAK,IAAI;AAAA,EACjD;AAEA,SACG,gBAAAC,EAAC,OAAA,EAAI,WAAW,GAAGC,EAAQ,OAAO,IAAIV,IAAa,KAAKU,EAAQ,cAAc,EAAE,IAC5E,UAAA;AAAA,IAAAT,IAAa,KACX,CAAC,GAAG,MAAMA,CAAU,CAAC,EAAE,IAAI,CAACU,GAAGC,MAC5B,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,WAAWH,EAAQ;AAAA,QAEnB,mBAAgB;AAAA,QAChB,wBAAqB;AAAA,QACrB,sBAAmB;AAAA,MAAA;AAAA,MAHd,GAAGZ,CAAM,UAAUc,CAAC;AAAA,IAAA,CAK9B;AAAA,IAEHb,EAAQ,MAAM,GAAGC,CAAU,EAAE,IAAI,CAACc,GAAGF,MAAM;AACzC,YAAMG,IAAWD,EAAE,aAAaA,EAAE,SAAS,IAAI,KAAKA,EAAE,KAAK,EAAE,QAAA,IAAY,IAAI,KAAKA,EAAE,OAAO,EAAE,QAAA,KAAa,MAAO;AACjH,aACG,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,WAAW,GAAGC,EAAE,WAAW,cAAcJ,EAAQ,qBAAqB,EAAE,IAAII,EAAE,WAAW,YAAYA,EAAE,WAAW,cAAcJ,EAAQ,oBAAoB,EAAE,IAAII,EAAE,aAAaJ,EAAQ,qBAAqB,EAAE;AAAA,UAEhN,mBAAgB;AAAA,UAChB,qBAAmB;AAAA,wCACGR,EAAWY,EAAE,MAAiC,KAAK,SAAS;AAAA,yCAC3DX,EAAcW,EAAE,OAAO,CAAC;AAAA,yCACxBE,EAAeF,EAAE,OAAO,CAAC;AAAA,uCAC3BA,EAAE,QAAQE,EAAeF,EAAE,KAAK,IAAI,KAAK;AAAA,0CACtCA,EAAE,WAAW,aAAaC,IAAWE,EAAeF,CAAQ,IAAI,GAAG;AAAA;AAAA,UAE3F,sBAAmB;AAAA,QAAA;AAAA,QATd,GAAGjB,CAAM,YAAYc,CAAC;AAAA,MAAA;AAAA,IAYpC,CAAC;AAAA,EAAA,GACJ;AAEN;"}
|
|
@@ -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"}
|