@plutonhq/core-frontend 0.1.14 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist-lib/components/App/Footer/Footer.d.ts +2 -1
  2. package/dist-lib/components/App/Footer/Footer.d.ts.map +1 -1
  3. package/dist-lib/components/App/Footer/Footer.js +29 -18
  4. package/dist-lib/components/App/Footer/Footer.js.map +1 -1
  5. package/dist-lib/components/Plan/PlanForm/PlanForm.js +74 -74
  6. package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
  7. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts +16 -0
  8. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts.map +1 -0
  9. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js +115 -0
  10. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js.map +1 -0
  11. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js +26 -0
  12. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js.map +1 -0
  13. package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.d.ts +2 -2
  14. package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.d.ts.map +1 -1
  15. package/dist-lib/components/Plan/PlanPendingBackup/PlanPendingBackup.js.map +1 -1
  16. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.d.ts +1 -1
  17. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.d.ts.map +1 -1
  18. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js +55 -27
  19. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js.map +1 -1
  20. package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.d.ts +7 -0
  21. package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.d.ts.map +1 -0
  22. package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.js +79 -0
  23. package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.js.map +1 -0
  24. package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.module.scss.js +24 -0
  25. package/dist-lib/components/Settings/TwoFactorSetup/TwoFactorSetup.module.scss.js.map +1 -0
  26. package/dist-lib/components/index.d.ts +2 -0
  27. package/dist-lib/components/index.d.ts.map +1 -1
  28. package/dist-lib/components.js +73 -69
  29. package/dist-lib/components.js.map +1 -1
  30. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js +68 -0
  31. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/notifyManager.js.map +1 -0
  32. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js +7 -0
  33. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/timeoutManager.js.map +1 -0
  34. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/utils.js +55 -0
  35. package/dist-lib/node_modules/.pnpm/@tanstack_query-core@5.96.0/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -0
  36. package/dist-lib/node_modules/.pnpm/@tanstack_query-persist-client-core@5.96.0/node_modules/@tanstack/query-persist-client-core/build/modern/createPersister.js +190 -0
  37. package/dist-lib/node_modules/.pnpm/@tanstack_query-persist-client-core@5.96.0/node_modules/@tanstack/query-persist-client-core/build/modern/createPersister.js.map +1 -0
  38. package/dist-lib/router.d.ts.map +1 -1
  39. package/dist-lib/router.js +42 -39
  40. package/dist-lib/router.js.map +1 -1
  41. package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
  42. package/dist-lib/routes/PlanSingle/PlanSingle.js +123 -98
  43. package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
  44. package/dist-lib/services/plans.d.ts +6 -0
  45. package/dist-lib/services/plans.d.ts.map +1 -1
  46. package/dist-lib/services/plans.js +151 -127
  47. package/dist-lib/services/plans.js.map +1 -1
  48. package/dist-lib/services/settings.d.ts +18 -0
  49. package/dist-lib/services/settings.d.ts.map +1 -1
  50. package/dist-lib/services/settings.js +182 -72
  51. package/dist-lib/services/settings.js.map +1 -1
  52. package/dist-lib/services/users.d.ts +1 -1
  53. package/dist-lib/services/users.d.ts.map +1 -1
  54. package/dist-lib/services/users.js.map +1 -1
  55. package/dist-lib/services.js +98 -88
  56. package/dist-lib/styles/core-frontend.css +1 -1
  57. package/dist-lib/utils/helpers.d.ts +1 -0
  58. package/dist-lib/utils/helpers.d.ts.map +1 -1
  59. package/dist-lib/utils/helpers.js +74 -70
  60. package/dist-lib/utils/helpers.js.map +1 -1
  61. package/dist-lib/utils.js +28 -27
  62. package/package.json +5 -4
  63. package/src/components/App/Footer/Footer.tsx +17 -2
  64. package/src/components/Plan/PlanForm/PlanForm.tsx +14 -14
  65. package/src/components/Plan/PlanIntegrity/PlanIntegrity.module.scss +110 -0
  66. package/src/components/Plan/PlanIntegrity/PlanIntegrity.tsx +187 -0
  67. package/src/components/Plan/PlanPendingBackup/PlanPendingBackup.tsx +2 -2
  68. package/src/components/Settings/GeneralSettings/GeneralSettings.tsx +37 -1
  69. package/src/components/Settings/TwoFactorSetup/TwoFactorSetup.module.scss +62 -0
  70. package/src/components/Settings/TwoFactorSetup/TwoFactorSetup.tsx +102 -0
  71. package/src/components/index.ts +2 -0
  72. package/src/router.tsx +6 -1
  73. package/src/routes/PlanSingle/PlanSingle.tsx +21 -0
  74. package/src/services/plans.ts +30 -0
  75. package/src/services/settings.ts +126 -0
  76. package/src/services/users.ts +1 -1
  77. package/src/utils/helpers.ts +26 -0
@@ -1,8 +1,9 @@
1
1
  interface FooterProps {
2
2
  version: string;
3
+ latestVersion?: string;
3
4
  hideUpgradeLink?: boolean;
4
5
  changeLogUrl?: string;
5
6
  }
6
- declare const Footer: ({ version, hideUpgradeLink, changeLogUrl }: FooterProps) => import("react/jsx-runtime").JSX.Element;
7
+ declare const Footer: ({ version, latestVersion, hideUpgradeLink, changeLogUrl }: FooterProps) => import("react/jsx-runtime").JSX.Element;
7
8
  export default Footer;
8
9
  //# sourceMappingURL=Footer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/components/App/Footer/Footer.tsx"],"names":[],"mappings":"AAEA,UAAU,WAAW;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,QAAA,MAAM,MAAM,GAAI,4CAA8D,WAAW,4CAuBxF,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../../src/components/App/Footer/Footer.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,QAAA,MAAM,MAAM,GAAI,2DAA6E,WAAW,4CAmCvG,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,23 +1,34 @@
1
- import { jsx as e, Fragment as l, jsxs as t } from "react/jsx-runtime";
1
+ import { jsx as e, Fragment as n, jsxs as t } from "react/jsx-runtime";
2
+ import { getUpdateDocLink as c } from "../../../utils/helpers.js";
3
+ import p from "../../common/Icon/Icon.js";
2
4
  import o from "./Footer.module.scss.js";
3
- const c = ({ version: r = "1.0.0", hideUpgradeLink: a = !1, changeLogUrl: n }) => /* @__PURE__ */ e(l, { children: /* @__PURE__ */ t("div", { className: o.footer, children: [
4
- /* @__PURE__ */ t("span", { children: [
5
- "Pluton v",
6
- r
7
- ] }),
8
- " ",
9
- /* @__PURE__ */ e("i", { className: "pipe", children: "|" }),
10
- !a && /* @__PURE__ */ t(l, { children: [
11
- /* @__PURE__ */ e("a", { href: "https://usepluton.com/pluton-pro/", target: "_blank", children: "Upgrade" }),
5
+ const f = ({ version: l = "1.0.0", latestVersion: a, hideUpgradeLink: r = !1, changeLogUrl: i }) => {
6
+ const s = c(r);
7
+ return /* @__PURE__ */ e(n, { children: /* @__PURE__ */ t("div", { className: o.footer, children: [
8
+ /* @__PURE__ */ t("span", { children: [
9
+ "Pluton v",
10
+ l,
11
+ " ",
12
+ a && /* @__PURE__ */ t("span", { className: o.newVersion, title: `Latest version: ${a}`, children: [
13
+ /* @__PURE__ */ e(p, { type: "arrow-up", size: 12 }),
14
+ " ",
15
+ /* @__PURE__ */ e("a", { href: s, target: "_blank", children: "(Update Available)" })
16
+ ] })
17
+ ] }),
12
18
  " ",
13
- /* @__PURE__ */ e("i", { className: "pipe", children: "|" })
14
- ] }),
15
- /* @__PURE__ */ e("a", { href: "https://docs.usepluton.com", target: "_blank", children: "Documentation" }),
16
- " ",
17
- /* @__PURE__ */ e("i", { className: "pipe", children: "|" }),
18
- /* @__PURE__ */ e("a", { href: n || "https://github.com/plutonhq/pluton/blob/main/CHANGELOG.md", target: "_blank", children: "Changelog" })
19
- ] }) });
19
+ /* @__PURE__ */ e("i", { className: "pipe", children: "|" }),
20
+ !r && /* @__PURE__ */ t(n, { children: [
21
+ /* @__PURE__ */ e("a", { href: "https://usepluton.com/pluton-pro/", target: "_blank", children: "Upgrade" }),
22
+ " ",
23
+ /* @__PURE__ */ e("i", { className: "pipe", children: "|" })
24
+ ] }),
25
+ /* @__PURE__ */ e("a", { href: "https://docs.usepluton.com", target: "_blank", children: "Documentation" }),
26
+ " ",
27
+ /* @__PURE__ */ e("i", { className: "pipe", children: "|" }),
28
+ /* @__PURE__ */ e("a", { href: i || "https://github.com/plutonhq/pluton/blob/main/CHANGELOG.md", target: "_blank", children: "Changelog" })
29
+ ] }) });
30
+ };
20
31
  export {
21
- c as default
32
+ f as default
22
33
  };
23
34
  //# sourceMappingURL=Footer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sources":["../../../../src/components/App/Footer/Footer.tsx"],"sourcesContent":["import classes from './Footer.module.scss';\r\n\r\ninterface FooterProps {\r\n version: string;\r\n hideUpgradeLink?: boolean;\r\n changeLogUrl?: string;\r\n}\r\n\r\nconst Footer = ({ version = '1.0.0', hideUpgradeLink = false, changeLogUrl }: FooterProps) => {\r\n return (\r\n <>\r\n <div className={classes.footer}>\r\n <span>Pluton v{version}</span> <i className=\"pipe\">|</i>\r\n {!hideUpgradeLink && (\r\n <>\r\n <a href=\"https://usepluton.com/pluton-pro/\" target=\"_blank\">\r\n Upgrade\r\n </a>{' '}\r\n <i className=\"pipe\">|</i>\r\n </>\r\n )}\r\n <a href=\"https://docs.usepluton.com\" target=\"_blank\">\r\n Documentation\r\n </a>{' '}\r\n <i className=\"pipe\">|</i>\r\n <a href={changeLogUrl || 'https://github.com/plutonhq/pluton/blob/main/CHANGELOG.md'} target=\"_blank\">\r\n Changelog\r\n </a>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Footer;\r\n"],"names":["Footer","version","hideUpgradeLink","changeLogUrl","jsx","Fragment","jsxs","classes"],"mappings":";;AAQA,MAAMA,IAAS,CAAC,EAAE,SAAAC,IAAU,SAAS,iBAAAC,IAAkB,IAAO,cAAAC,QAExD,gBAAAC,EAAAC,GAAA,EACG,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAQ,QACrB,UAAA;AAAA,EAAA,gBAAAD,EAAC,QAAA,EAAK,UAAA;AAAA,IAAA;AAAA,IAASL;AAAA,EAAA,GAAQ;AAAA,EAAO;AAAA,EAAC,gBAAAG,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,KAAC;AAAA,EACnD,CAACF,KACC,gBAAAI,EAAAD,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAD,EAAC,KAAA,EAAE,MAAK,qCAAoC,QAAO,UAAS,UAAA,WAE5D;AAAA,IAAK;AAAA,IACL,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,IAAA,CAAC;AAAA,EAAA,GACxB;AAAA,oBAEF,KAAA,EAAE,MAAK,8BAA6B,QAAO,UAAS,UAAA,iBAErD;AAAA,EAAK;AAAA,EACL,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,KAAC;AAAA,oBACpB,KAAA,EAAE,MAAMD,KAAgB,6DAA6D,QAAO,UAAS,UAAA,YAAA,CAEtG;AAAA,EAAA,CACH,EAAA,CACH;"}
1
+ {"version":3,"file":"Footer.js","sources":["../../../../src/components/App/Footer/Footer.tsx"],"sourcesContent":["import { getUpdateDocLink } from '../../../utils';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './Footer.module.scss';\r\n\r\ninterface FooterProps {\r\n version: string;\r\n latestVersion?: string;\r\n hideUpgradeLink?: boolean;\r\n changeLogUrl?: string;\r\n}\r\n\r\nconst Footer = ({ version = '1.0.0', latestVersion, hideUpgradeLink = false, changeLogUrl }: FooterProps) => {\r\n const updateDocLink = getUpdateDocLink(hideUpgradeLink);\r\n return (\r\n <>\r\n <div className={classes.footer}>\r\n <span>\r\n Pluton v{version}{' '}\r\n {latestVersion && (\r\n <span className={classes.newVersion} title={`Latest version: ${latestVersion}`}>\r\n <Icon type=\"arrow-up\" size={12} />{' '}\r\n <a href={updateDocLink} target=\"_blank\">\r\n (Update Available)\r\n </a>\r\n </span>\r\n )}\r\n </span>{' '}\r\n <i className=\"pipe\">|</i>\r\n {!hideUpgradeLink && (\r\n <>\r\n <a href=\"https://usepluton.com/pluton-pro/\" target=\"_blank\">\r\n Upgrade\r\n </a>{' '}\r\n <i className=\"pipe\">|</i>\r\n </>\r\n )}\r\n <a href=\"https://docs.usepluton.com\" target=\"_blank\">\r\n Documentation\r\n </a>{' '}\r\n <i className=\"pipe\">|</i>\r\n <a href={changeLogUrl || 'https://github.com/plutonhq/pluton/blob/main/CHANGELOG.md'} target=\"_blank\">\r\n Changelog\r\n </a>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default Footer;\r\n"],"names":["Footer","version","latestVersion","hideUpgradeLink","changeLogUrl","updateDocLink","getUpdateDocLink","jsx","Fragment","jsxs","classes","Icon"],"mappings":";;;;AAWA,MAAMA,IAAS,CAAC,EAAE,SAAAC,IAAU,SAAS,eAAAC,GAAe,iBAAAC,IAAkB,IAAO,cAAAC,QAAgC;AAC1G,QAAMC,IAAgBC,EAAiBH,CAAe;AACtD,SACG,gBAAAI,EAAAC,GAAA,EACG,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAQ,QACrB,UAAA;AAAA,IAAA,gBAAAD,EAAC,QAAA,EAAK,UAAA;AAAA,MAAA;AAAA,MACMR;AAAA,MAAS;AAAA,MACjBC,uBACG,QAAA,EAAK,WAAWQ,EAAQ,YAAY,OAAO,mBAAmBR,CAAa,IACzE,UAAA;AAAA,QAAA,gBAAAK,EAACI,GAAA,EAAK,MAAK,YAAW,MAAM,IAAI;AAAA,QAAG;AAAA,0BAClC,KAAA,EAAE,MAAMN,GAAe,QAAO,UAAS,UAAA,qBAAA,CAExC;AAAA,MAAA,EAAA,CACH;AAAA,IAAA,GAEN;AAAA,IAAQ;AAAA,IACR,gBAAAE,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,KAAC;AAAA,IACpB,CAACJ,KACC,gBAAAM,EAAAD,GAAA,EACG,UAAA;AAAA,MAAA,gBAAAD,EAAC,KAAA,EAAE,MAAK,qCAAoC,QAAO,UAAS,UAAA,WAE5D;AAAA,MAAK;AAAA,MACL,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,IAAA,CAAC;AAAA,IAAA,GACxB;AAAA,sBAEF,KAAA,EAAE,MAAK,8BAA6B,QAAO,UAAS,UAAA,iBAErD;AAAA,IAAK;AAAA,IACL,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,KAAC;AAAA,sBACpB,KAAA,EAAE,MAAMH,KAAgB,6DAA6D,QAAO,UAAS,UAAA,YAAA,CAEtG;AAAA,EAAA,EAAA,CACH,EAAA,CACH;AAEN;"}
@@ -1,17 +1,17 @@
1
- import { jsxs as o, jsx as i } from "react/jsx-runtime";
2
- import { useState as w } from "react";
1
+ import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
+ import { useState as F } from "react";
3
3
  import n from "../../common/Icon/Icon.js";
4
- import F from "../../common/SidePanel/SidePanel.js";
4
+ import w from "../../common/SidePanel/SidePanel.js";
5
5
  import z from "../../common/form/StoragePicker/StoragePicker.js";
6
- import L from "../PlanSettings/PlanStrategySettings.js";
7
- import V from "../PlanSettings/PlanSourceSettings.js";
8
- import D from "../../common/form/NumberInput/NumberInput.js";
9
- import r from "../AddPlan/AddPlan.module.scss.js";
10
- import c from "./PlanForm.module.scss.js";
11
- import { useGetSettings as E } from "../../../services/settings.js";
12
- import q from "../PlanSettings/PlanAdvancedSettings.js";
13
- import { isPlanSettingsValid as d } from "../../../utils/plans.js";
14
- import A from "../../common/form/IntervalField/IntervalField.js";
6
+ import V from "../PlanSettings/PlanStrategySettings.js";
7
+ import D from "../PlanSettings/PlanSourceSettings.js";
8
+ import E from "../../common/form/NumberInput/NumberInput.js";
9
+ import i from "../AddPlan/AddPlan.module.scss.js";
10
+ import d from "./PlanForm.module.scss.js";
11
+ import { useGetSettings as q } from "../../../services/settings.js";
12
+ import A from "../PlanSettings/PlanAdvancedSettings.js";
13
+ import { isPlanSettingsValid as c } from "../../../utils/plans.js";
14
+ import L from "../../common/form/IntervalField/IntervalField.js";
15
15
  import T from "./PlanFormNav.js";
16
16
  import { useGetDevice as j } from "../../../services/devices.js";
17
17
  import G from "../PlanSettings/PlanPruneSettings.js";
@@ -26,64 +26,64 @@ const le = ({
26
26
  close: P,
27
27
  storagePath: x,
28
28
  storageId: B,
29
- planId: y
29
+ planId: C
30
30
  }) => {
31
31
  var N, b, k;
32
- const [t, m] = w(1), { data: u } = E(), C = ((N = u == null ? void 0 : u.result) == null ? void 0 : N.settings) || {}, { data: p } = j("main", !0), R = (b = p == null ? void 0 : p.result) == null ? void 0 : b.device, v = {
32
+ const [t, m] = F(1), { data: u } = q(), 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
33
  1: {
34
34
  title: "Next: Configure Source & Destination",
35
- onClick: () => d(e, t) && m(t + 1)
35
+ onClick: () => c(e, t) && m(t + 1)
36
36
  },
37
37
  2: {
38
38
  title: "Next: Setup Schedule & Retention",
39
- onClick: () => d(e, t) && m(t + 1)
39
+ onClick: () => c(e, t) && m(t + 1)
40
40
  },
41
- 3: { title: "Next: Advanced Settings", onClick: () => d(e, t) && m(t + 1) },
41
+ 3: { title: "Next: Advanced Settings", onClick: () => c(e, t) && m(t + 1) },
42
42
  4: {
43
43
  title: "Create Plan",
44
- onClick: () => d(e, !1) && f()
44
+ onClick: () => c(e, !1) && f()
45
45
  }
46
- }, U = (a) => {
46
+ }, R = (a) => {
47
47
  if (l !== "edit")
48
48
  return;
49
- d(e, t) && m(a);
49
+ c(e, t) && m(a);
50
50
  };
51
51
  return /* @__PURE__ */ o(
52
- F,
52
+ w,
53
53
  {
54
54
  title: I,
55
- icon: /* @__PURE__ */ i(n, { type: "backup", size: 20 }),
55
+ icon: /* @__PURE__ */ r(n, { type: "backup", size: 20 }),
56
56
  width: l === "add" ? "100%" : void 0,
57
57
  headerWidth: l === "add" ? "740px" : void 0,
58
58
  close: P,
59
59
  withTabs: !0,
60
- footer: /* @__PURE__ */ i("div", { className: c.planFormFooter, children: /* @__PURE__ */ o("div", { className: c.footerContainer, children: [
61
- /* @__PURE__ */ i("div", { className: r.footerLeft, children: /* @__PURE__ */ i("div", { className: r.summary, children: l === "add" && t > 1 && /* @__PURE__ */ o("button", { className: c.backButton, onClick: () => t > 0 && m(t - 1), disabled: h, children: [
62
- /* @__PURE__ */ i(n, { type: "arrow-left", size: 14 }),
60
+ footer: /* @__PURE__ */ r("div", { className: d.planFormFooter, children: /* @__PURE__ */ o("div", { className: d.footerContainer, children: [
61
+ /* @__PURE__ */ r("div", { className: i.footerLeft, children: /* @__PURE__ */ r("div", { className: i.summary, children: l === "add" && t > 1 && /* @__PURE__ */ o("button", { className: d.backButton, onClick: () => t > 0 && m(t - 1), disabled: h, children: [
62
+ /* @__PURE__ */ r(n, { type: "arrow-left", size: 14 }),
63
63
  " Back"
64
64
  ] }) }) }),
65
- /* @__PURE__ */ i("div", { className: r.footerRight, children: l === "add" ? /* @__PURE__ */ o("button", { className: r.createButton, onClick: v[t].onClick, children: [
66
- /* @__PURE__ */ i(n, { type: "check", size: 12 }),
65
+ /* @__PURE__ */ r("div", { className: i.footerRight, children: l === "add" ? /* @__PURE__ */ o("button", { className: i.createButton, onClick: v[t].onClick, children: [
66
+ /* @__PURE__ */ r(n, { type: "check", size: 12 }),
67
67
  " ",
68
68
  v[t].title
69
- ] }) : /* @__PURE__ */ o("button", { className: r.createButton, onClick: () => d(e, !1) && f(), children: [
70
- /* @__PURE__ */ i(n, { type: "check", size: 12 }),
69
+ ] }) : /* @__PURE__ */ o("button", { className: i.createButton, onClick: () => c(e, !1) && f(), children: [
70
+ /* @__PURE__ */ r(n, { type: "check", size: 12 }),
71
71
  " ",
72
72
  "Update Plan"
73
73
  ] }) })
74
74
  ] }) }),
75
75
  children: [
76
- /* @__PURE__ */ i(T, { step: t, type: l, gotoStep: U }),
77
- /* @__PURE__ */ o("div", { className: `${c.formContent} styled__scrollbar`, children: [
78
- h && /* @__PURE__ */ i("div", { className: r.loader, children: /* @__PURE__ */ i(n, { size: 36, type: "loading" }) }),
79
- t === 1 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
80
- /* @__PURE__ */ o("div", { className: r.field, children: [
81
- /* @__PURE__ */ i("label", { className: r.label, children: "Backup Plan Name*" }),
82
- !e.title && /* @__PURE__ */ i("span", { className: r.fieldErrorLabel, children: "Required" }),
83
- /* @__PURE__ */ i(
76
+ /* @__PURE__ */ r(T, { step: t, type: l, gotoStep: R }),
77
+ /* @__PURE__ */ o("div", { className: `${d.formContent} styled__scrollbar`, children: [
78
+ h && /* @__PURE__ */ r("div", { className: i.loader, children: /* @__PURE__ */ r(n, { size: 36, type: "loading" }) }),
79
+ t === 1 && /* @__PURE__ */ o("div", { className: d.planStep, children: [
80
+ /* @__PURE__ */ o("div", { className: i.field, children: [
81
+ /* @__PURE__ */ r("label", { className: i.label, children: "Backup Plan Name*" }),
82
+ !e.title && /* @__PURE__ */ r("span", { className: i.fieldErrorLabel, children: "Required" }),
83
+ /* @__PURE__ */ r(
84
84
  "input",
85
85
  {
86
- className: r.titleInput,
86
+ className: i.titleInput,
87
87
  type: "text",
88
88
  placeholder: "Plan Name",
89
89
  value: e.title || "",
@@ -91,12 +91,12 @@ const le = ({
91
91
  }
92
92
  )
93
93
  ] }),
94
- /* @__PURE__ */ o("div", { className: r.field, children: [
95
- /* @__PURE__ */ i("label", { className: r.label, children: "Backup Plan Description" }),
96
- /* @__PURE__ */ i(
94
+ /* @__PURE__ */ o("div", { className: i.field, children: [
95
+ /* @__PURE__ */ r("label", { className: i.label, children: "Backup Plan Description" }),
96
+ /* @__PURE__ */ r(
97
97
  "input",
98
98
  {
99
- className: r.titleInput,
99
+ className: i.titleInput,
100
100
  type: "text",
101
101
  placeholder: "Plan Description",
102
102
  value: e.description || "",
@@ -104,8 +104,8 @@ const le = ({
104
104
  }
105
105
  )
106
106
  ] }),
107
- e.sourceType === "device" && /* @__PURE__ */ i(
108
- L,
107
+ e.sourceType === "device" && /* @__PURE__ */ r(
108
+ V,
109
109
  {
110
110
  plan: e,
111
111
  onUpdate: (a) => s({ ...e, method: a }),
@@ -116,28 +116,28 @@ const le = ({
116
116
  icon: "backup",
117
117
  label: "Incremental Backup",
118
118
  description: "Periodically create Incremental backup snapshots of source"
119
- },
120
- {
121
- value: "sync",
122
- icon: "reload",
123
- label: "Real-time Sync",
124
- description: "Maintain identical source (with revisions)",
125
- disabled: !0
126
- },
127
- {
128
- value: "rescue",
129
- icon: "rescue",
130
- label: "Linux Server Backup",
131
- description: "Full Linux system backups with bootable ISO image",
132
- disabled: !0
133
119
  }
120
+ // {
121
+ // value: 'sync',
122
+ // icon: 'reload',
123
+ // label: 'Real-time Sync',
124
+ // description: 'Maintain identical source (with revisions)',
125
+ // disabled: true,
126
+ // },
127
+ // {
128
+ // value: 'rescue',
129
+ // icon: 'rescue',
130
+ // label: 'Linux Server Backup',
131
+ // description: 'Full Linux system backups with bootable ISO image',
132
+ // disabled: true,
133
+ // },
134
134
  ]
135
135
  }
136
136
  )
137
137
  ] }),
138
- t === 2 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
139
- /* @__PURE__ */ i(
140
- V,
138
+ t === 2 && /* @__PURE__ */ o("div", { className: d.planStep, children: [
139
+ /* @__PURE__ */ r(
140
+ D,
141
141
  {
142
142
  plan: e,
143
143
  onUpdate: (a) => s({ ...a }),
@@ -145,10 +145,10 @@ const le = ({
145
145
  error: e.sourceConfig.includes.length === 0 ? "Required" : ""
146
146
  }
147
147
  ),
148
- /* @__PURE__ */ o("div", { className: r.field, children: [
149
- /* @__PURE__ */ i("label", { className: r.label, children: "Backup Destination*" }),
150
- !e.storage.name && /* @__PURE__ */ i("span", { className: r.fieldErrorLabel, children: "Required" }),
151
- /* @__PURE__ */ i(
148
+ /* @__PURE__ */ o("div", { className: i.field, children: [
149
+ /* @__PURE__ */ r("label", { className: i.label, children: "Backup Destination*" }),
150
+ !e.storage.name && /* @__PURE__ */ r("span", { className: i.fieldErrorLabel, children: "Required" }),
151
+ /* @__PURE__ */ r(
152
152
  z,
153
153
  {
154
154
  storagePath: x || e.storagePath,
@@ -163,7 +163,7 @@ const le = ({
163
163
  }
164
164
  )
165
165
  ] }),
166
- /* @__PURE__ */ i(
166
+ /* @__PURE__ */ r(
167
167
  K,
168
168
  {
169
169
  replication: e.settings.replication,
@@ -171,7 +171,7 @@ const le = ({
171
171
  primaryStoragePath: e.storagePath,
172
172
  deviceId: e.sourceId || "main",
173
173
  isEditing: l === "edit",
174
- planID: y,
174
+ planID: C,
175
175
  onUpdate: (a) => s({
176
176
  ...e,
177
177
  settings: { ...e.settings, replication: a }
@@ -179,17 +179,17 @@ const le = ({
179
179
  }
180
180
  )
181
181
  ] }),
182
- t === 3 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
183
- /* @__PURE__ */ i("div", { className: r.field, style: { width: "150px" }, children: /* @__PURE__ */ i(
184
- A,
182
+ t === 3 && /* @__PURE__ */ o("div", { className: d.planStep, children: [
183
+ /* @__PURE__ */ r("div", { className: i.field, style: { width: "150px" }, children: /* @__PURE__ */ r(
184
+ L,
185
185
  {
186
186
  label: "Backup Interval*",
187
187
  fieldValue: e.settings.interval,
188
188
  onUpdate: (a) => s({ ...e, settings: { ...e.settings, interval: a } })
189
189
  }
190
190
  ) }),
191
- /* @__PURE__ */ i("div", { className: r.field, style: { width: "150px" }, children: /* @__PURE__ */ i(
192
- D,
191
+ /* @__PURE__ */ r("div", { className: i.field, style: { width: "150px" }, children: /* @__PURE__ */ r(
192
+ E,
193
193
  {
194
194
  label: "Backups to Keep",
195
195
  fieldValue: e.settings.prune.snapCount,
@@ -203,7 +203,7 @@ const le = ({
203
203
  hint: "Number of Active Restorable Backups/Snapshots to Keep regardless of the Removal Policy"
204
204
  }
205
205
  ) }),
206
- /* @__PURE__ */ i(
206
+ /* @__PURE__ */ r(
207
207
  G,
208
208
  {
209
209
  plan: e,
@@ -214,7 +214,7 @@ const le = ({
214
214
  }
215
215
  )
216
216
  ] }),
217
- t === 4 && /* @__PURE__ */ i("div", { className: c.planStep, children: /* @__PURE__ */ i(q, { plan: e, appSettings: C, onUpdate: s, device: R }) })
217
+ t === 4 && /* @__PURE__ */ r("div", { className: d.planStep, children: /* @__PURE__ */ r(A, { plan: e, appSettings: U, onUpdate: s, device: y }) })
218
218
  ] })
219
219
  ]
220
220
  }
@@ -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 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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"}
@@ -0,0 +1,16 @@
1
+ import { Plan, PlanReplicationStorage } from '../../../@types';
2
+ interface PlanIntegrityProps {
3
+ planId: string;
4
+ taskPending: boolean;
5
+ verificationData: Plan['verified'];
6
+ storage: {
7
+ name: string;
8
+ type: string;
9
+ id: string;
10
+ };
11
+ replicationStorages: PlanReplicationStorage[];
12
+ onClose: () => void;
13
+ }
14
+ declare const PlanIntegrity: ({ planId, taskPending, verificationData, storage, replicationStorages, onClose }: PlanIntegrityProps) => import("react/jsx-runtime").JSX.Element;
15
+ export default PlanIntegrity;
16
+ //# sourceMappingURL=PlanIntegrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanIntegrity.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanIntegrity/PlanIntegrity.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAsB,MAAM,iBAAiB,CAAC;AAKnF,UAAU,kBAAkB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;IAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,aAAa,GAAI,kFAAuF,kBAAkB,4CAuK/H,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
2
+ import { useState as b } from "react";
3
+ import l from "./PlanIntegrity.module.scss.js";
4
+ import { useCheckPlanIntegrity as L } from "../../../services/plans.js";
5
+ import { timeAgo as B, formatDateTime as E } from "../../../utils/helpers.js";
6
+ import m from "../../common/Icon/Icon.js";
7
+ import M from "../../common/ActionModal/ActionModal.js";
8
+ const O = ({ planId: C, taskPending: x, verificationData: t, storage: A, replicationStorages: g = [], onClose: p }) => {
9
+ var k;
10
+ const [a, P] = b("primary"), d = L(), u = t && (t == null ? void 0 : t.result), w = g && g.length > 0, h = (n) => t != null && t.result ? t.result[n] ?? null : null, f = (n) => {
11
+ if (d.isPending) return null;
12
+ const e = h(n), s = e == null ? void 0 : e.logs;
13
+ return s != null && s.length ? /* @__PURE__ */ i("div", { className: l.integrityLogs, children: [
14
+ /* @__PURE__ */ i("div", { className: l.integrityLogsHeader, children: [
15
+ /* @__PURE__ */ r("div", { children: "Integrity Check Output Logs" }),
16
+ /* @__PURE__ */ i("div", { title: E(t.endedAt || t.startedAt), children: [
17
+ /* @__PURE__ */ r(m, { type: "clock", size: 14 }),
18
+ " ",
19
+ B(new Date(t.endedAt || t.startedAt))
20
+ ] })
21
+ ] }),
22
+ /* @__PURE__ */ r("div", { className: l.integrityLogMessages, children: s.map((o, c) => /* @__PURE__ */ r("span", { children: o }, c)) })
23
+ ] }) : null;
24
+ }, y = (n) => {
25
+ if (!u || d.isPending) return null;
26
+ const e = h(n);
27
+ return e != null && e.hasError ? /* @__PURE__ */ i("div", { className: l.fixSuggestion, children: [
28
+ /* @__PURE__ */ r("h4", { children: "Fix Suggestion" }),
29
+ /* @__PURE__ */ i("div", { className: l.fixSuggestionContent, children: [
30
+ e.fix && e.fix.split(`
31
+ `).map((s, o) => /* @__PURE__ */ r("p", { children: s.includes("`") ? /* @__PURE__ */ r("code", { children: s.replace(/`/g, "") }) : s }, o)),
32
+ !e.fix && /* @__PURE__ */ r("p", { children: "No Suggestion for this issue." }),
33
+ /* @__PURE__ */ i("p", { children: [
34
+ "Learn more about fixing restic repo issues",
35
+ " ",
36
+ /* @__PURE__ */ r(
37
+ "a",
38
+ {
39
+ href: "https://restic.readthedocs.io/en/latest/077_troubleshooting.html#find-out-what-is-damaged",
40
+ target: "_blank",
41
+ rel: "noreferrer",
42
+ children: "here."
43
+ }
44
+ )
45
+ ] })
46
+ ] })
47
+ ] }) : null;
48
+ }, N = (n) => {
49
+ if (!u || d.isPending) return null;
50
+ const e = h(n), s = e == null ? void 0 : e.hasError, o = e == null ? void 0 : e.message;
51
+ return !s && (o != null && o.includes("No Issue Detected")) ? /* @__PURE__ */ r("div", { className: "label success", children: "🥳 Yoohoo! No Corruption or Bit rot found. Your backup snapshots are completely restorable." }) : /* @__PURE__ */ i("div", { className: "label error", children: [
52
+ "⛔ Error Found. ",
53
+ o
54
+ ] });
55
+ }, I = () => /* @__PURE__ */ r("div", { className: `${l.integrityResult} ${l.withReplications}`, children: t && Object.entries(t.result).map(([n]) => {
56
+ let e = A;
57
+ if (n !== "primary") {
58
+ const c = g.find((S) => S.storageId === n.replace("mirror_", ""));
59
+ c && (e = { name: c.storageName, type: c == null ? void 0 : c.storageType, id: c == null ? void 0 : c.storageId });
60
+ }
61
+ if (!e) return null;
62
+ const s = h(n), o = s == null ? void 0 : s.hasError;
63
+ return /* @__PURE__ */ i("div", { className: l.replicationResult, children: [
64
+ /* @__PURE__ */ i("h4", { onClick: () => P(n), className: a === n ? l.active : "", children: [
65
+ /* @__PURE__ */ i("span", { children: [
66
+ /* @__PURE__ */ r("img", { src: `/providers/${e.type}.png` }),
67
+ e.name,
68
+ " ",
69
+ /* @__PURE__ */ r("i", { children: n === "primary" ? "Primary" : "Mirror" })
70
+ ] }),
71
+ /* @__PURE__ */ r("span", { children: o ? /* @__PURE__ */ r(m, { type: "error-circle-filled", size: 14, color: "#ff4d4f" }) : /* @__PURE__ */ r(m, { type: "check-circle-filled", size: 14, color: "#06ba9f" }) })
72
+ ] }),
73
+ a === n && /* @__PURE__ */ i("div", { className: l.replicationResultContent, children: [
74
+ N(n),
75
+ f(n),
76
+ y(n)
77
+ ] })
78
+ ] }, n);
79
+ }) });
80
+ return /* @__PURE__ */ r(
81
+ M,
82
+ {
83
+ title: "Check Backup Integrity",
84
+ message: /* @__PURE__ */ i("div", { className: l.integrityMessage, children: [
85
+ !u && /* @__PURE__ */ r("p", { children: "Check the integrity of the backup snapshots now to check if they are restorable?" }),
86
+ u && /* @__PURE__ */ r("div", { children: w ? I() : /* @__PURE__ */ i("div", { className: l.integrityResult, children: [
87
+ N("primary"),
88
+ f("primary"),
89
+ y("primary")
90
+ ] }) }),
91
+ d.isPending && /* @__PURE__ */ i("div", { className: "label in_progress", children: [
92
+ /* @__PURE__ */ r(m, { type: "loading", size: 14 }),
93
+ "Checking integrity..."
94
+ ] })
95
+ ] }),
96
+ errorMessage: (k = d.error) == null ? void 0 : k.message,
97
+ closeModal: () => p(),
98
+ width: "600px",
99
+ primaryAction: {
100
+ title: u ? "Check Again" : "Check Now",
101
+ type: "default",
102
+ isPending: d.isPending,
103
+ action: () => !x && d.mutate({ planId: C })
104
+ },
105
+ secondaryAction: {
106
+ title: "Close",
107
+ action: () => p()
108
+ }
109
+ }
110
+ );
111
+ };
112
+ export {
113
+ O as default
114
+ };
115
+ //# sourceMappingURL=PlanIntegrity.js.map