@plutonhq/core-frontend 0.1.32 → 0.1.34

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 (135) hide show
  1. package/dist-lib/@types/plans.d.ts +4 -0
  2. package/dist-lib/@types/plans.d.ts.map +1 -1
  3. package/dist-lib/components/Device/DeviceResticSettings/DeviceResticSettings.js +4 -4
  4. package/dist-lib/components/Device/DeviceResticSettings/DeviceResticSettings.js.map +1 -1
  5. package/dist-lib/components/Plan/AddPlan/AddPlan.d.ts.map +1 -1
  6. package/dist-lib/components/Plan/AddPlan/AddPlan.js +29 -24
  7. package/dist-lib/components/Plan/AddPlan/AddPlan.js.map +1 -1
  8. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +34 -33
  9. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
  10. package/dist-lib/components/Plan/FilterPlans/FilterPlans.d.ts +9 -0
  11. package/dist-lib/components/Plan/FilterPlans/FilterPlans.d.ts.map +1 -0
  12. package/dist-lib/components/Plan/FilterPlans/FilterPlans.js +117 -0
  13. package/dist-lib/components/Plan/FilterPlans/FilterPlans.js.map +1 -0
  14. package/dist-lib/components/Plan/FilterPlans/FilterPlans.module.scss.js +20 -0
  15. package/dist-lib/components/Plan/FilterPlans/FilterPlans.module.scss.js.map +1 -0
  16. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts +4 -2
  17. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
  18. package/dist-lib/components/Plan/PlanForm/PlanForm.js +33 -29
  19. package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
  20. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts +2 -1
  21. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.d.ts.map +1 -1
  22. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js +85 -57
  23. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.js.map +1 -1
  24. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js +11 -9
  25. package/dist-lib/components/Plan/PlanIntegrity/PlanIntegrity.module.scss.js.map +1 -1
  26. package/dist-lib/components/Plan/PlanItems/PlanItem.js +1 -1
  27. package/dist-lib/components/Plan/PlanItems/PlanItem.js.map +1 -1
  28. package/dist-lib/components/Plan/PlanRepair/PlanRepair.d.ts +9 -0
  29. package/dist-lib/components/Plan/PlanRepair/PlanRepair.d.ts.map +1 -0
  30. package/dist-lib/components/Plan/PlanRepair/PlanRepair.js +262 -0
  31. package/dist-lib/components/Plan/PlanRepair/PlanRepair.js.map +1 -0
  32. package/dist-lib/components/Plan/PlanRepair/PlanRepair.module.scss.js +14 -0
  33. package/dist-lib/components/Plan/PlanRepair/PlanRepair.module.scss.js.map +1 -0
  34. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts +4 -2
  35. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts.map +1 -1
  36. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js +24 -22
  37. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js.map +1 -1
  38. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts +4 -2
  39. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts.map +1 -1
  40. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js +39 -28
  41. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js.map +1 -1
  42. package/dist-lib/components/Plan/PlanSettings/PlanPerformanceSettings.js +2 -2
  43. package/dist-lib/components/Plan/PlanSettings/PlanPerformanceSettings.js.map +1 -1
  44. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js +66 -64
  45. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js.map +1 -1
  46. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.d.ts +7 -0
  47. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.d.ts.map +1 -0
  48. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.js +116 -0
  49. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.js.map +1 -0
  50. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.module.scss.js +20 -0
  51. package/dist-lib/components/Plan/PlanSizeChart/PlanSizeChart.module.scss.js.map +1 -0
  52. package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
  53. package/dist-lib/components/Plan/PlanStats/PlanStats.js +29 -30
  54. package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
  55. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +16 -14
  56. package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js.map +1 -1
  57. package/dist-lib/components/common/FileManager/FileManager.module.scss.js +18 -16
  58. package/dist-lib/components/common/FileManager/FileManager.module.scss.js.map +1 -1
  59. package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
  60. package/dist-lib/components/common/Icon/Icon.js +395 -378
  61. package/dist-lib/components/common/Icon/Icon.js.map +1 -1
  62. package/dist-lib/components/common/SortItems/SortItems.d.ts +2 -1
  63. package/dist-lib/components/common/SortItems/SortItems.d.ts.map +1 -1
  64. package/dist-lib/components/common/SortItems/SortItems.js +14 -14
  65. package/dist-lib/components/common/SortItems/SortItems.js.map +1 -1
  66. package/dist-lib/components/common/SortItems/SortItems.module.scss.js +1 -1
  67. package/dist-lib/components/common/form/MultiSelect/MultiSelect.module.scss.js +16 -16
  68. package/dist-lib/components/index.d.ts +2 -0
  69. package/dist-lib/components/index.d.ts.map +1 -1
  70. package/dist-lib/components.js +199 -195
  71. package/dist-lib/components.js.map +1 -1
  72. package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
  73. package/dist-lib/hooks/usePlanSingleActions.js +22 -19
  74. package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
  75. package/dist-lib/node_modules/.pnpm/@kurkle_color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js +449 -0
  76. package/dist-lib/node_modules/.pnpm/@kurkle_color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js.map +1 -0
  77. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js +5219 -0
  78. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js.map +1 -0
  79. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js +1691 -0
  80. package/dist-lib/node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js.map +1 -0
  81. package/dist-lib/node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@18.3.1/node_modules/react-chartjs-2/dist/index.js +93 -0
  82. package/dist-lib/node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@18.3.1/node_modules/react-chartjs-2/dist/index.js.map +1 -0
  83. package/dist-lib/routes/Login/Login.d.ts.map +1 -1
  84. package/dist-lib/routes/Login/Login.js +45 -36
  85. package/dist-lib/routes/Login/Login.js.map +1 -1
  86. package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
  87. package/dist-lib/routes/PlanSingle/PlanSingle.js +131 -118
  88. package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
  89. package/dist-lib/routes/Plans/Plans.d.ts.map +1 -1
  90. package/dist-lib/routes/Plans/Plans.js +77 -51
  91. package/dist-lib/routes/Plans/Plans.js.map +1 -1
  92. package/dist-lib/services/plans.d.ts +33 -5
  93. package/dist-lib/services/plans.d.ts.map +1 -1
  94. package/dist-lib/services/plans.js +92 -67
  95. package/dist-lib/services/plans.js.map +1 -1
  96. package/dist-lib/services.js +93 -91
  97. package/dist-lib/styles/core-frontend.css +1 -1
  98. package/dist-lib/utils/helpers.d.ts +2 -0
  99. package/dist-lib/utils/helpers.d.ts.map +1 -1
  100. package/dist-lib/utils/helpers.js +68 -42
  101. package/dist-lib/utils/helpers.js.map +1 -1
  102. package/dist-lib/utils.js +36 -34
  103. package/package.json +3 -1
  104. package/src/@types/plans.ts +5 -0
  105. package/src/components/Device/DeviceResticSettings/DeviceResticSettings.tsx +2 -2
  106. package/src/components/Plan/AddPlan/AddPlan.tsx +22 -16
  107. package/src/components/Plan/BackupProgress/BackupProgress.tsx +1 -1
  108. package/src/components/Plan/FilterPlans/FilterPlans.module.scss +65 -0
  109. package/src/components/Plan/FilterPlans/FilterPlans.tsx +126 -0
  110. package/src/components/Plan/PlanForm/PlanForm.tsx +7 -1
  111. package/src/components/Plan/PlanIntegrity/PlanIntegrity.module.scss +19 -0
  112. package/src/components/Plan/PlanIntegrity/PlanIntegrity.tsx +40 -3
  113. package/src/components/Plan/PlanItems/PlanItem.tsx +1 -1
  114. package/src/components/Plan/PlanRepair/PlanRepair.module.scss +53 -0
  115. package/src/components/Plan/PlanRepair/PlanRepair.tsx +243 -0
  116. package/src/components/Plan/PlanSettings/PlanAdvancedSettings.tsx +6 -2
  117. package/src/components/Plan/PlanSettings/PlanGeneralSettings.tsx +14 -2
  118. package/src/components/Plan/PlanSettings/PlanPerformanceSettings.tsx +2 -2
  119. package/src/components/Plan/PlanSettings/PlanSettings.module.scss +8 -0
  120. package/src/components/Plan/PlanSizeChart/PlanSizeChart.module.scss +76 -0
  121. package/src/components/Plan/PlanSizeChart/PlanSizeChart.tsx +166 -0
  122. package/src/components/Plan/PlanStats/PlanStats.module.scss +16 -2
  123. package/src/components/Plan/PlanStats/PlanStats.tsx +8 -11
  124. package/src/components/common/FileManager/FileManager.module.scss +7 -0
  125. package/src/components/common/Icon/Icon.tsx +21 -0
  126. package/src/components/common/SortItems/SortItems.module.scss +3 -2
  127. package/src/components/common/SortItems/SortItems.tsx +6 -3
  128. package/src/components/common/form/MultiSelect/MultiSelect.module.scss +1 -0
  129. package/src/components/index.ts +2 -0
  130. package/src/hooks/usePlanSingleActions.tsx +26 -23
  131. package/src/routes/Login/Login.tsx +8 -2
  132. package/src/routes/PlanSingle/PlanSingle.tsx +17 -0
  133. package/src/routes/Plans/Plans.tsx +70 -35
  134. package/src/services/plans.ts +40 -4
  135. package/src/utils/helpers.ts +25 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterPlans.js","sources":["../../../../src/components/Plan/FilterPlans/FilterPlans.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\r\nimport classes from './FilterPlans.module.scss';\r\nimport { Plan } from '../../..';\r\nimport { Icon, MultiSelect } from '../..';\r\n\r\ntype FilterPlansProps = {\r\n onUpdate: (s: Record<PlanFilterTypes, string[]> | null) => void;\r\n plans: Plan[];\r\n};\r\nexport type PlanFilterTypes = 'devices' | 'tags' | 'storages' | 'methods';\r\n\r\nconst defaultState = { devices: [], tags: [], storages: [], methods: [] };\r\n\r\nconst FilterPlans = ({ onUpdate, plans }: FilterPlansProps) => {\r\n const [showDropDown, setShowDropDown] = useState(false);\r\n const [selected, setSelected] = useState<Record<PlanFilterTypes, string[]>>(() => {\r\n const storedSettingsRaw = localStorage.getItem('plans_filter');\r\n const storedSettings = storedSettingsRaw ? JSON.parse(storedSettingsRaw) : null;\r\n return storedSettings || defaultState;\r\n });\r\n\r\n const hasFilters = Object.values(selected).some((arr) => arr.length > 0);\r\n\r\n const filterableItems = useMemo(() => {\r\n const items: Record<PlanFilterTypes, { label: string; value: string }[]> = { devices: [], tags: [], storages: [], methods: [] };\r\n plans.forEach((plan) => {\r\n plan.tags.forEach((tag) => {\r\n if (!items.tags.find((t) => t.value === tag)) {\r\n items.tags.push({ label: tag, value: tag });\r\n }\r\n });\r\n if (!items.devices.find((t) => t.value === plan.device.id)) {\r\n items.devices.push({ label: plan.device.name, value: plan.device.id });\r\n }\r\n if (!items.storages.find((t) => t.value === plan.storage.id)) {\r\n items.storages.push({ label: plan.storage.name, value: plan.storage.id });\r\n }\r\n if (!items.methods.find((t) => t.value === plan.method)) {\r\n items.methods.push({ label: plan.method, value: plan.method });\r\n }\r\n });\r\n return items;\r\n }, [plans]);\r\n\r\n return (\r\n <div className={classes.filterItems}>\r\n <button\r\n className={`${classes.filterBtn} ${showDropDown || hasFilters ? classes.filterBtnActive : ''}`}\r\n onClick={() => setShowDropDown(!showDropDown)}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Filter\"\r\n aria-label=\"Filter Plans\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-delay-show={500}\r\n >\r\n <Icon type=\"filter\" size={18} />{' '}\r\n {hasFilters && <span className={classes.filterCount}>{Object.values(selected).reduce((acc, arr) => acc + arr.length, 0)}</span>}\r\n </button>\r\n {showDropDown && (\r\n <div className={`${classes.dropdown} styled__scrollbar`}>\r\n {filterableItems.devices.length > 1 && (\r\n <div className={classes.field}>\r\n <label>Devices</label>\r\n <MultiSelect\r\n title=\"Devices\"\r\n fieldValue={selected.devices}\r\n options={filterableItems.devices}\r\n onUpdate={(devices) => setSelected((selected) => ({ ...selected, devices }))}\r\n />\r\n </div>\r\n )}\r\n <div className={classes.field}>\r\n <label>Backup Type</label>\r\n <MultiSelect\r\n title=\"Backup Type\"\r\n fieldValue={selected.methods}\r\n options={filterableItems.methods}\r\n onUpdate={(methods) => setSelected((selected) => ({ ...selected, methods }))}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label>Storage</label>\r\n <MultiSelect\r\n title=\"Storages\"\r\n fieldValue={selected.storages}\r\n options={filterableItems.storages}\r\n onUpdate={(storages) => setSelected((selected) => ({ ...selected, storages }))}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label>Tags</label>\r\n <MultiSelect\r\n title=\"Tags\"\r\n fieldValue={selected.tags}\r\n options={filterableItems.tags}\r\n onUpdate={(tags) => setSelected((selected) => ({ ...selected, tags }))}\r\n />\r\n </div>\r\n <div className={classes.footer}>\r\n <button\r\n onClick={() => {\r\n localStorage.removeItem('plans_filter');\r\n setSelected(defaultState);\r\n onUpdate(null);\r\n setShowDropDown(false);\r\n }}\r\n >\r\n <Icon type=\"reload\" /> Reset\r\n </button>\r\n <button\r\n onClick={() => {\r\n localStorage.setItem('plans_filter', JSON.stringify(selected));\r\n onUpdate(selected);\r\n setShowDropDown(false);\r\n }}\r\n >\r\n <Icon type=\"check\" size={12} /> Apply\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default FilterPlans;\r\n"],"names":["defaultState","FilterPlans","onUpdate","plans","showDropDown","setShowDropDown","useState","selected","setSelected","storedSettingsRaw","hasFilters","arr","filterableItems","useMemo","items","plan","tag","t","jsxs","classes","jsx","Icon","acc","MultiSelect","devices","methods","storages","tags"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ const t = "_filterItems_TS2uf", e = "_filterBtn_Fwlxx", o = "_filterCount_FoAvx", r = "_filterBtnActive_sxxe4", f = "_dropdown_E9rlJ", n = "_field_reroJ", l = "_footer_aoPOL", i = {
2
+ filterItems: t,
3
+ filterBtn: e,
4
+ filterCount: o,
5
+ filterBtnActive: r,
6
+ dropdown: f,
7
+ field: n,
8
+ footer: l
9
+ };
10
+ export {
11
+ i as default,
12
+ f as dropdown,
13
+ n as field,
14
+ e as filterBtn,
15
+ r as filterBtnActive,
16
+ o as filterCount,
17
+ t as filterItems,
18
+ l as footer
19
+ };
20
+ //# sourceMappingURL=FilterPlans.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterPlans.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { NewPlanSettings } from '../../../@types/plans';
1
+ import { NewPlanSettings, PlanAddRunSettings } from '../../../@types/plans';
2
2
  type PlanFormProps = {
3
3
  title: string;
4
4
  planSettings: NewPlanSettings;
@@ -10,7 +10,9 @@ type PlanFormProps = {
10
10
  storagePath?: string;
11
11
  storageId?: string;
12
12
  planId?: string;
13
+ runSettings?: PlanAddRunSettings;
14
+ setRunSettings?: (runSettings: PlanAddRunSettings) => void;
13
15
  };
14
- declare const PlanForm: ({ title, planSettings, type, onPlanSettingsChange, onSubmit, isSubmitting, close, storagePath, storageId, planId, }: PlanFormProps) => import("react/jsx-runtime").JSX.Element;
16
+ declare const PlanForm: ({ title, planSettings, type, onPlanSettingsChange, onSubmit, isSubmitting, close, storagePath, storageId, planId, runSettings, setRunSettings, }: PlanFormProps) => import("react/jsx-runtime").JSX.Element;
15
17
  export default PlanForm;
16
18
  //# sourceMappingURL=PlanForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanForm.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanForm/PlanForm.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD,KAAK,aAAa,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,eAAe,CAAC;IAC9B,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,qHAWf,aAAa,4CAqPf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"PlanForm.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/PlanForm/PlanForm.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAY5E,KAAK,aAAa,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,eAAe,CAAC;IAC9B,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,kJAaf,aAAa,4CAuPf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,21 +1,21 @@
1
1
  import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
- import { useState as y } from "react";
2
+ import { useState as E } from "react";
3
3
  import n from "../../common/Icon/Icon.js";
4
- import z from "../../common/SidePanel/SidePanel.js";
5
- import E from "../../common/form/StoragePicker/StoragePicker.js";
6
- import w from "../PlanSettings/PlanStrategySettings.js";
7
- import D from "../PlanSettings/PlanSourceSettings.js";
4
+ import w from "../../common/SidePanel/SidePanel.js";
5
+ import D from "../../common/form/StoragePicker/StoragePicker.js";
6
+ import V from "../PlanSettings/PlanStrategySettings.js";
7
+ import q from "../PlanSettings/PlanSourceSettings.js";
8
8
  import t from "../AddPlan/AddPlan.module.scss.js";
9
9
  import c from "./PlanForm.module.scss.js";
10
- import { useGetSettings as V } from "../../../services/settings.js";
11
- import q from "../PlanSettings/PlanAdvancedSettings.js";
10
+ import { useGetSettings as L } from "../../../services/settings.js";
11
+ import T from "../PlanSettings/PlanAdvancedSettings.js";
12
12
  import { isPlanSettingsValid as s } from "../../../utils/plans.js";
13
- import L from "../../common/form/IntervalField/IntervalField.js";
14
- import T from "./PlanFormNav.js";
15
- import { useGetDevice as j } from "../../../services/devices.js";
16
- import A from "../PlanSettings/PlanPruneSettings.js";
17
- import G from "../PlanSettings/PlanReplicationSettings.js";
18
- const te = ({
13
+ import j from "../../common/form/IntervalField/IntervalField.js";
14
+ import A from "./PlanFormNav.js";
15
+ import { useGetDevice as G } from "../../../services/devices.js";
16
+ import _ from "../PlanSettings/PlanPruneSettings.js";
17
+ import W from "../PlanSettings/PlanReplicationSettings.js";
18
+ const le = ({
19
19
  title: P,
20
20
  planSettings: e,
21
21
  type: l,
@@ -25,10 +25,12 @@ const te = ({
25
25
  close: I,
26
26
  storagePath: x,
27
27
  storageId: B,
28
- planId: C
28
+ planId: C,
29
+ runSettings: U,
30
+ setRunSettings: F
29
31
  }) => {
30
32
  var N, b, k;
31
- const [i, m] = y(1), { data: u } = V(), U = ((N = u == null ? void 0 : u.result) == null ? void 0 : N.settings) || {}, { data: p } = j("main", !0), F = (b = p == null ? void 0 : p.result) == null ? void 0 : b.device, v = {
33
+ const [i, m] = E(1), { data: u } = L(), R = ((N = u == null ? void 0 : u.result) == null ? void 0 : N.settings) || {}, { data: p } = G("main", !0), y = (b = p == null ? void 0 : p.result) == null ? void 0 : b.device, v = {
32
34
  1: {
33
35
  title: "Next: Configure Source & Destination",
34
36
  onClick: () => s(e, i) && m(i + 1)
@@ -42,13 +44,13 @@ const te = ({
42
44
  title: "Create Plan",
43
45
  onClick: () => s(e, !1) && f()
44
46
  }
45
- }, R = (a) => {
47
+ }, z = (a) => {
46
48
  if (l !== "edit")
47
49
  return;
48
50
  s(e, i) && m(a);
49
51
  };
50
52
  return /* @__PURE__ */ o(
51
- z,
53
+ w,
52
54
  {
53
55
  title: P,
54
56
  icon: /* @__PURE__ */ r(n, { type: "backup", size: 20 }),
@@ -72,7 +74,7 @@ const te = ({
72
74
  ] }) })
73
75
  ] }) }),
74
76
  children: [
75
- /* @__PURE__ */ r(T, { step: i, type: l, gotoStep: R }),
77
+ /* @__PURE__ */ r(A, { step: i, type: l, gotoStep: z }),
76
78
  /* @__PURE__ */ o("div", { className: `${c.formContent} styled__scrollbar`, children: [
77
79
  h && /* @__PURE__ */ r("div", { className: t.loader, children: /* @__PURE__ */ r(n, { size: 36, type: "loading" }) }),
78
80
  i === 1 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
@@ -104,7 +106,7 @@ const te = ({
104
106
  )
105
107
  ] }),
106
108
  e.sourceType === "device" && /* @__PURE__ */ r(
107
- w,
109
+ V,
108
110
  {
109
111
  plan: e,
110
112
  onUpdate: (a) => d({ ...e, method: a }),
@@ -136,7 +138,7 @@ const te = ({
136
138
  ] }),
137
139
  i === 2 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
138
140
  /* @__PURE__ */ r(
139
- D,
141
+ q,
140
142
  {
141
143
  plan: e,
142
144
  onUpdate: (a) => d({ ...a }),
@@ -148,7 +150,7 @@ const te = ({
148
150
  /* @__PURE__ */ r("label", { className: t.label, children: "Backup Destination*" }),
149
151
  !e.storage.name && /* @__PURE__ */ r("span", { className: t.fieldErrorLabel, children: "Required" }),
150
152
  /* @__PURE__ */ r(
151
- E,
153
+ D,
152
154
  {
153
155
  storagePath: x || e.storagePath,
154
156
  storageId: B || ((k = e.storage) == null ? void 0 : k.id) || "",
@@ -163,7 +165,7 @@ const te = ({
163
165
  )
164
166
  ] }),
165
167
  /* @__PURE__ */ r(
166
- G,
168
+ W,
167
169
  {
168
170
  replication: e.settings.replication,
169
171
  primaryStorageId: e.storage.id,
@@ -180,7 +182,7 @@ const te = ({
180
182
  ] }),
181
183
  i === 3 && /* @__PURE__ */ o("div", { className: c.planStep, children: [
182
184
  /* @__PURE__ */ r("div", { className: t.field, style: { width: "150px" }, children: /* @__PURE__ */ r(
183
- L,
185
+ j,
184
186
  {
185
187
  label: "Backup Interval",
186
188
  fieldValue: e.settings.interval,
@@ -188,7 +190,7 @@ const te = ({
188
190
  }
189
191
  ) }),
190
192
  /* @__PURE__ */ r(
191
- A,
193
+ _,
192
194
  {
193
195
  plan: e,
194
196
  onUpdate: (a) => d({
@@ -199,13 +201,15 @@ const te = ({
199
201
  )
200
202
  ] }),
201
203
  i === 4 && /* @__PURE__ */ r("div", { className: c.planStep, children: /* @__PURE__ */ r(
202
- q,
204
+ T,
203
205
  {
204
206
  plan: e,
205
- appSettings: U,
207
+ appSettings: R,
206
208
  onUpdate: d,
207
- device: F,
208
- isEditing: l === "edit"
209
+ device: y,
210
+ isEditing: l === "edit",
211
+ runSettings: U,
212
+ setRunSettings: F
209
213
  }
210
214
  ) })
211
215
  ] })
@@ -214,6 +218,6 @@ const te = ({
214
218
  );
215
219
  };
216
220
  export {
217
- te as default
221
+ le as default
218
222
  };
219
223
  //# 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 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\r\n plan={planSettings}\r\n appSettings={appSettings}\r\n onUpdate={onPlanSettingsChange}\r\n device={deviceInstance}\r\n isEditing={type === 'edit'}\r\n />\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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"}
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, PlanAddRunSettings } 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 runSettings?: PlanAddRunSettings;\r\n setRunSettings?: (runSettings: PlanAddRunSettings) => void;\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 runSettings,\r\n setRunSettings,\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\r\n plan={planSettings}\r\n appSettings={appSettings}\r\n onUpdate={onPlanSettingsChange}\r\n device={deviceInstance}\r\n isEditing={type === 'edit'}\r\n runSettings={runSettings}\r\n setRunSettings={setRunSettings}\r\n />\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","runSettings","setRunSettings","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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"}
@@ -10,7 +10,8 @@ interface PlanIntegrityProps {
10
10
  };
11
11
  replicationStorages: PlanReplicationStorage[];
12
12
  onClose: () => void;
13
+ onRepairOpen: (replicationId: string) => void;
13
14
  }
14
- declare const PlanIntegrity: ({ planId, taskPending, verificationData, storage, replicationStorages, onClose }: PlanIntegrityProps) => import("react/jsx-runtime").JSX.Element;
15
+ declare const PlanIntegrity: ({ planId, taskPending, verificationData, storage, replicationStorages, onClose, onRepairOpen }: PlanIntegrityProps) => import("react/jsx-runtime").JSX.Element;
15
16
  export default PlanIntegrity;
16
17
  //# sourceMappingURL=PlanIntegrity.d.ts.map
@@ -1 +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"}
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;IACpB,YAAY,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,QAAA,MAAM,aAAa,GAAI,gGAAqG,kBAAkB,4CA2M7I,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,39 +1,43 @@
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";
1
+ import { jsx as n, jsxs as i } from "react/jsx-runtime";
2
+ import { useState as B } from "react";
3
+ import s from "./PlanIntegrity.module.scss.js";
4
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";
5
+ import { timeAgo as z, formatDateTime as E } from "../../../utils/helpers.js";
6
+ import u from "../../common/Icon/Icon.js";
7
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) => {
8
+ const Y = ({ planId: C, taskPending: k, verificationData: l, storage: b, replicationStorages: m = [], onClose: g, onRepairOpen: a }) => {
9
+ var x;
10
+ const [f, S] = B("primary"), d = L(), p = l && (l == null ? void 0 : l.result), w = m && m.length > 0, h = (r) => l != null && l.result ? l.result[r] ?? null : null, y = (r) => {
11
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 }),
12
+ const e = h(r), t = e == null ? void 0 : e.logs;
13
+ return t != null && t.length ? /* @__PURE__ */ i("div", { className: s.integrityLogs, children: [
14
+ /* @__PURE__ */ i("div", { className: s.integrityLogsHeader, children: [
15
+ /* @__PURE__ */ n("div", { children: "Integrity Check Output Logs" }),
16
+ /* @__PURE__ */ i("div", { title: E(l.endedAt || l.startedAt), children: [
17
+ /* @__PURE__ */ n(u, { type: "clock", size: 14 }),
18
18
  " ",
19
- B(new Date(t.endedAt || t.startedAt))
19
+ z(new Date(l.endedAt || l.startedAt))
20
20
  ] })
21
21
  ] }),
22
- /* @__PURE__ */ r("div", { className: l.integrityLogMessages, children: s.map((o, c) => /* @__PURE__ */ r("span", { children: o }, c)) })
22
+ /* @__PURE__ */ n("div", { className: s.integrityLogMessages, children: t.map((o, c) => /* @__PURE__ */ n("span", { children: o }, c)) })
23
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: [
24
+ }, A = (r) => {
25
+ if (!p || d.isPending) return null;
26
+ const e = h(r);
27
+ return e != null && e.hasError ? /* @__PURE__ */ i("div", { className: s.fixSuggestion, children: [
28
+ /* @__PURE__ */ n("h4", { children: "Fix Suggestion" }),
29
+ /* @__PURE__ */ i("div", { className: s.fixSuggestionContent, children: [
30
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." }),
31
+ `).map((t, o) => /* @__PURE__ */ n("p", { children: t.includes("`") ? /* @__PURE__ */ n("code", { children: t.replace(/`/g, "") }) : t }, o)),
32
+ !e.fix && /* @__PURE__ */ n("p", { children: "No Suggestion for this issue." }),
33
+ (e.errorType === "pack_file_error" || e.errorType === "index_error") && /* @__PURE__ */ i("p", { children: [
34
+ /* @__PURE__ */ n("button", { onClick: () => a(r), children: "Open Repo Repair" }),
35
+ " Window for more options."
36
+ ] }),
33
37
  /* @__PURE__ */ i("p", { children: [
34
38
  "Learn more about fixing restic repo issues",
35
39
  " ",
36
- /* @__PURE__ */ r(
40
+ /* @__PURE__ */ n(
37
41
  "a",
38
42
  {
39
43
  href: "https://restic.readthedocs.io/en/latest/077_troubleshooting.html#find-out-what-is-damaged",
@@ -45,71 +49,95 @@ const O = ({ planId: C, taskPending: x, verificationData: t, storage: A, replica
45
49
  ] })
46
50
  ] })
47
51
  ] }) : 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
+ }, N = (r) => {
53
+ if (!p || d.isPending) return null;
54
+ const e = h(r), t = e == null ? void 0 : e.hasError, o = e == null ? void 0 : e.message;
55
+ return !t && (o != null && o.includes("No Issue Detected")) ? /* @__PURE__ */ n("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
56
  "⛔ Error Found. ",
53
57
  o
54
58
  ] });
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
+ }, P = (r) => {
60
+ const e = h(r);
61
+ return /* @__PURE__ */ i("div", { className: s.repairBox, children: [
62
+ ((e == null ? void 0 : e.errorType) === "pack_file_error" || (e == null ? void 0 : e.errorType) === "repairable_pack_file_error") && /* @__PURE__ */ i("div", { children: [
63
+ "Some pack files in the repository are either damaged or missing and can be repaired.",
64
+ " ",
65
+ /* @__PURE__ */ i("button", { onClick: () => a(r), children: [
66
+ /* @__PURE__ */ n(u, { type: "repair", size: 13 }),
67
+ " Open Repo Repair Tool"
68
+ ] })
69
+ ] }),
70
+ (e == null ? void 0 : e.errorType) === "index_error" && /* @__PURE__ */ i("div", { children: [
71
+ "The index files in the repository are corrupted and can be repaired.",
72
+ " ",
73
+ /* @__PURE__ */ i("button", { onClick: () => a(r), children: [
74
+ /* @__PURE__ */ n(u, { type: "repair", size: 13 }),
75
+ " Open Repo Repair Tool"
76
+ ] }),
77
+ " "
78
+ ] })
79
+ ] });
80
+ }, _ = (r) => {
81
+ const e = h(r), t = e == null ? void 0 : e.errorType;
82
+ return t === "pack_file_error" || t === "index_error" || t === "repairable_pack_file_error" ? P(r) : A(r);
83
+ }, I = () => /* @__PURE__ */ n("div", { className: `${s.integrityResult} ${s.withReplications}`, children: l && Object.entries(l.result).map(([r]) => {
84
+ let e = b;
85
+ if (r !== "primary") {
86
+ const c = m.find((R) => R.storageId === r.replace("mirror_", ""));
59
87
  c && (e = { name: c.storageName, type: c == null ? void 0 : c.storageType, id: c == null ? void 0 : c.storageId });
60
88
  }
61
89
  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: [
90
+ const t = h(r), o = t == null ? void 0 : t.hasError;
91
+ return /* @__PURE__ */ i("div", { className: s.replicationResult, children: [
92
+ /* @__PURE__ */ i("h4", { onClick: () => S(r), className: f === r ? s.active : "", children: [
65
93
  /* @__PURE__ */ i("span", { children: [
66
- /* @__PURE__ */ r("img", { src: `/providers/${e.type}.png` }),
94
+ /* @__PURE__ */ n("img", { src: `/providers/${e.type}.png` }),
67
95
  e.name,
68
96
  " ",
69
- /* @__PURE__ */ r("i", { children: n === "primary" ? "Primary" : "Mirror" })
97
+ /* @__PURE__ */ n("i", { children: r === "primary" ? "Primary" : "Mirror" })
70
98
  ] }),
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" }) })
99
+ /* @__PURE__ */ n("span", { children: o ? /* @__PURE__ */ n(u, { type: "error-circle-filled", size: 14, color: "#ff4d4f" }) : /* @__PURE__ */ n(u, { type: "check-circle-filled", size: 14, color: "#06ba9f" }) })
72
100
  ] }),
73
- a === n && /* @__PURE__ */ i("div", { className: l.replicationResultContent, children: [
74
- N(n),
75
- f(n),
76
- y(n)
101
+ f === r && /* @__PURE__ */ i("div", { className: s.replicationResultContent, children: [
102
+ N(r),
103
+ y(r),
104
+ _(r)
77
105
  ] })
78
- ] }, n);
106
+ ] }, r);
79
107
  }) });
80
- return /* @__PURE__ */ r(
108
+ return /* @__PURE__ */ n(
81
109
  M,
82
110
  {
83
111
  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: [
112
+ message: /* @__PURE__ */ i("div", { className: s.integrityMessage, children: [
113
+ !p && /* @__PURE__ */ n("p", { children: "Check the integrity of the backup snapshots now to check if they are restorable?" }),
114
+ p && /* @__PURE__ */ n("div", { children: w ? I() : /* @__PURE__ */ i("div", { className: s.integrityResult, children: [
87
115
  N("primary"),
88
- f("primary"),
89
- y("primary")
116
+ y("primary"),
117
+ _("primary")
90
118
  ] }) }),
91
119
  d.isPending && /* @__PURE__ */ i("div", { className: "label in_progress", children: [
92
- /* @__PURE__ */ r(m, { type: "loading", size: 14 }),
120
+ /* @__PURE__ */ n(u, { type: "loading", size: 14 }),
93
121
  "Checking integrity..."
94
122
  ] })
95
123
  ] }),
96
- errorMessage: (k = d.error) == null ? void 0 : k.message,
97
- closeModal: () => p(),
124
+ errorMessage: (x = d.error) == null ? void 0 : x.message,
125
+ closeModal: () => g(),
98
126
  width: "600px",
99
127
  primaryAction: {
100
- title: u ? "Check Again" : "Check Now",
128
+ title: p ? "Check Again" : "Check Now",
101
129
  type: "default",
102
130
  isPending: d.isPending,
103
- action: () => !x && d.mutate({ planId: C })
131
+ action: () => !k && d.mutate({ planId: C })
104
132
  },
105
133
  secondaryAction: {
106
134
  title: "Close",
107
- action: () => p()
135
+ action: () => g()
108
136
  }
109
137
  }
110
138
  );
111
139
  };
112
140
  export {
113
- O as default
141
+ Y as default
114
142
  };
115
143
  //# sourceMappingURL=PlanIntegrity.js.map