@plutonhq/core-frontend 0.1.29 → 0.1.31

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 (73) hide show
  1. package/dist-lib/@types/devices.d.ts +4 -4
  2. package/dist-lib/@types/devices.d.ts.map +1 -1
  3. package/dist-lib/@types/plans.d.ts +1 -0
  4. package/dist-lib/@types/plans.d.ts.map +1 -1
  5. package/dist-lib/components/App/Footer/Footer.d.ts +2 -1
  6. package/dist-lib/components/App/Footer/Footer.d.ts.map +1 -1
  7. package/dist-lib/components/App/Footer/Footer.js +10 -8
  8. package/dist-lib/components/App/Footer/Footer.js.map +1 -1
  9. package/dist-lib/components/Device/EditDevice/EditDevice.d.ts.map +1 -1
  10. package/dist-lib/components/Device/EditDevice/EditDevice.js +70 -61
  11. package/dist-lib/components/Device/EditDevice/EditDevice.js.map +1 -1
  12. package/dist-lib/components/Plan/BackupProgress/BackupProgress.d.ts.map +1 -1
  13. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +66 -68
  14. package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
  15. package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js +40 -38
  16. package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js.map +1 -1
  17. package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
  18. package/dist-lib/components/Plan/PlanForm/PlanForm.js +20 -11
  19. package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
  20. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts +2 -1
  21. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts.map +1 -1
  22. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js +28 -21
  23. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js.map +1 -1
  24. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts +2 -1
  25. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts.map +1 -1
  26. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js +21 -20
  27. package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js.map +1 -1
  28. package/dist-lib/components/Plan/PlanSettings/PlanScriptsSettings.d.ts.map +1 -1
  29. package/dist-lib/components/Plan/PlanSettings/PlanScriptsSettings.js +89 -101
  30. package/dist-lib/components/Plan/PlanSettings/PlanScriptsSettings.js.map +1 -1
  31. package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.d.ts.map +1 -1
  32. package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js +31 -25
  33. package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js.map +1 -1
  34. package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts.map +1 -1
  35. package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +52 -46
  36. package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
  37. package/dist-lib/components/common/form/Toggle/Toggle.d.ts +2 -1
  38. package/dist-lib/components/common/form/Toggle/Toggle.d.ts.map +1 -1
  39. package/dist-lib/components/common/form/Toggle/Toggle.js +21 -11
  40. package/dist-lib/components/common/form/Toggle/Toggle.js.map +1 -1
  41. package/dist-lib/components/common/form/Toggle/Toggle.module.scss.js +6 -4
  42. package/dist-lib/components/common/form/Toggle/Toggle.module.scss.js.map +1 -1
  43. package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
  44. package/dist-lib/hooks/usePlanSingleActions.js +34 -33
  45. package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
  46. package/dist-lib/routes/PlanSingle/PlanSingle.d.ts.map +1 -1
  47. package/dist-lib/routes/PlanSingle/PlanSingle.js +76 -72
  48. package/dist-lib/routes/PlanSingle/PlanSingle.js.map +1 -1
  49. package/dist-lib/routes/PlanSingle/PlanSingle.module.scss.js +14 -12
  50. package/dist-lib/routes/PlanSingle/PlanSingle.module.scss.js.map +1 -1
  51. package/dist-lib/styles/core-frontend.css +1 -1
  52. package/dist-lib/utils/progressHelpers.d.ts.map +1 -1
  53. package/dist-lib/utils/progressHelpers.js +1 -0
  54. package/dist-lib/utils/progressHelpers.js.map +1 -1
  55. package/package.json +1 -1
  56. package/src/@types/devices.ts +4 -4
  57. package/src/@types/plans.ts +1 -0
  58. package/src/components/App/Footer/Footer.tsx +3 -2
  59. package/src/components/Device/EditDevice/EditDevice.tsx +11 -4
  60. package/src/components/Plan/BackupProgress/BackupProgress.module.scss +3 -0
  61. package/src/components/Plan/BackupProgress/BackupProgress.tsx +5 -3
  62. package/src/components/Plan/PlanForm/PlanForm.tsx +7 -1
  63. package/src/components/Plan/PlanSettings/PlanAdvancedSettings.tsx +7 -2
  64. package/src/components/Plan/PlanSettings/PlanGeneralSettings.tsx +3 -1
  65. package/src/components/Plan/PlanSettings/PlanScriptsSettings.tsx +29 -31
  66. package/src/components/Plan/PlanSettings/PlanSourceSettings.tsx +11 -3
  67. package/src/components/common/form/StoragePicker/StoragePicker.tsx +10 -2
  68. package/src/components/common/form/Toggle/Toggle.module.scss +7 -0
  69. package/src/components/common/form/Toggle/Toggle.tsx +14 -3
  70. package/src/hooks/usePlanSingleActions.tsx +4 -2
  71. package/src/routes/PlanSingle/PlanSingle.module.scss +10 -0
  72. package/src/routes/PlanSingle/PlanSingle.tsx +6 -1
  73. package/src/utils/progressHelpers.ts +1 -0
@@ -1,62 +1,68 @@
1
- import { jsx as o, jsxs as m } from "react/jsx-runtime";
2
- import { useState as p, useMemo as F, useEffect as g } from "react";
3
- import i from "./StoragePicker.module.scss.js";
4
- import O from "../Select/Select.js";
5
- import { useGetStorages as U } from "../../../../services/storage.js";
6
- import j from "../Input/Input.js";
7
- import q from "../../FolderPicker/FolderPicker.js";
8
- import V from "../../Icon/Icon.js";
9
- import W from "../../../Storage/AddStorage/AddStorage.js";
10
- const I = ({ onUpdate: N, storagePath: $ = "", storageId: P, disabled: a = !1, deviceId: S }) => {
11
- const [t, h] = p(), [v, k] = p(!1), [y, w] = p(!1), [r, n] = p(() => $), f = (t == null ? void 0 : t.type) === "local", d = (t == null ? void 0 : t.defaultPath) && (t == null ? void 0 : t.defaultPath) !== "/", M = d ? `${t.defaultPath}${r ? `/${r}` : ""}` : r, { data: u } = U(), c = [...(u == null ? void 0 : u.result) || []];
1
+ import { jsx as o, jsxs as P } from "react/jsx-runtime";
2
+ import { useState as m, useMemo as O, useEffect as S, useRef as U } from "react";
3
+ import n from "./StoragePicker.module.scss.js";
4
+ import R from "../Select/Select.js";
5
+ import { useGetStorages as j } from "../../../../services/storage.js";
6
+ import q from "../Input/Input.js";
7
+ import V from "../../FolderPicker/FolderPicker.js";
8
+ import W from "../../Icon/Icon.js";
9
+ import _ from "../../../Storage/AddStorage/AddStorage.js";
10
+ const Q = ({ onUpdate: $, storagePath: y = "", storageId: k, disabled: a = !1, deviceId: i }) => {
11
+ const [t, g] = m(), [M, w] = m(!1), [v, N] = m(!1), [r, u] = m(() => y), f = (t == null ? void 0 : t.type) === "local", p = (t == null ? void 0 : t.defaultPath) && (t == null ? void 0 : t.defaultPath) !== "/", x = p ? `${t.defaultPath}${r ? `/${r}` : ""}` : r, { data: d } = j(), c = [...(d == null ? void 0 : d.result) || []];
12
12
  console.log("allStorages :", c), console.log("selectedStorage :", t);
13
- const x = F(() => c.map(({ name: l, id: s, type: B }) => ({
13
+ const A = O(() => c.map(({ name: l, id: s, type: F }) => ({
14
14
  label: l,
15
15
  value: s.toString(),
16
- image: /* @__PURE__ */ o("img", { src: `/providers/${B}.png` })
17
- })), [c]), A = (e) => {
16
+ image: /* @__PURE__ */ o("img", { src: `/providers/${F}.png` })
17
+ })), [c]), B = (e) => {
18
18
  if (console.log("storageID :", e), e === "add_new")
19
- return w(!0);
19
+ return N(!0);
20
20
  const l = c.find((s) => s.id == e);
21
- (l || e === "local") && h(l);
21
+ (l || e === "local") && g(l);
22
22
  };
23
- return g(() => {
24
- if (c.length > 0 && P) {
25
- const e = c.find((l) => l.id === P);
26
- if (h(e), e != null && e.defaultPath && e.defaultPath !== "/") {
23
+ S(() => {
24
+ if (c.length > 0 && k) {
25
+ const e = c.find((l) => l.id === k);
26
+ if (g(e), e != null && e.defaultPath && e.defaultPath !== "/") {
27
27
  const l = e.defaultPath + "/";
28
- n((s) => s.startsWith(l) ? s.slice(l.length) : s);
28
+ u((s) => s.startsWith(l) ? s.slice(l.length) : s);
29
29
  }
30
30
  }
31
- }, [u]), g(() => {
32
- t && N({ storage: t, path: M });
33
- }, [t, r]), g(() => {
34
- a || (h(null), n(""));
35
- }, [S, a]), /* @__PURE__ */ m("div", { className: i.storagePicker, children: [
36
- /* @__PURE__ */ o("div", { className: i.storagePickerInput, children: /* @__PURE__ */ m("div", { children: [
37
- /* @__PURE__ */ o("div", { className: i.storage, children: /* @__PURE__ */ o(
38
- O,
31
+ }, [d]), S(() => {
32
+ t && $({ storage: t, path: x });
33
+ }, [t, r]);
34
+ const h = U(null);
35
+ return S(() => {
36
+ if (a) {
37
+ h.current = i;
38
+ return;
39
+ }
40
+ h.current !== null && h.current !== i && (g(null), u("")), h.current = i;
41
+ }, [i, a]), /* @__PURE__ */ P("div", { className: n.storagePicker, children: [
42
+ /* @__PURE__ */ o("div", { className: n.storagePickerInput, children: /* @__PURE__ */ P("div", { children: [
43
+ /* @__PURE__ */ o("div", { className: n.storage, children: /* @__PURE__ */ o(
44
+ R,
39
45
  {
40
46
  fieldValue: t != null && t.id ? t.id : "",
41
47
  options: [
42
48
  { label: "Select Storage", value: "", icon: "storages" },
43
- ...x,
49
+ ...A,
44
50
  { label: "+ Add New Storage", value: "add_new", icon: "plus" }
45
51
  ],
46
- onUpdate: A,
52
+ onUpdate: B,
47
53
  full: !0,
48
54
  disabled: a
49
55
  }
50
56
  ) }),
51
- /* @__PURE__ */ m("div", { className: `${i.path} ${d ? i.withBucket : ""}`, children: [
52
- d && /* @__PURE__ */ o("span", { className: i.defaultPath, title: `Bucket: ${t.defaultPath}`, children: t.defaultPath + "/" }),
57
+ /* @__PURE__ */ P("div", { className: `${n.path} ${p ? n.withBucket : ""}`, children: [
58
+ p && /* @__PURE__ */ o("span", { className: n.defaultPath, title: `Bucket: ${t.defaultPath}`, children: t.defaultPath + "/" }),
53
59
  /* @__PURE__ */ o(
54
- j,
60
+ q,
55
61
  {
56
62
  disabled: a,
57
63
  fieldValue: r,
58
- onUpdate: (e) => n(!f && e.startsWith("/") ? e.slice(1) : e),
59
- placeholder: f ? "Select a folder" : d ? "subfolder" : "folder-or-bucket/subfolder",
64
+ onUpdate: (e) => u(!f && e.startsWith("/") ? e.slice(1) : e),
65
+ placeholder: f ? "Select a folder" : p ? "subfolder" : "folder-or-bucket/subfolder",
60
66
  full: !0,
61
67
  required: !a && f,
62
68
  error: !a && f && !r ? "Required" : ""
@@ -65,30 +71,30 @@ const I = ({ onUpdate: N, storagePath: $ = "", storageId: P, disabled: a = !1, d
65
71
  (t == null ? void 0 : t.type) && !a && t.type === "local" && /* @__PURE__ */ o(
66
72
  "button",
67
73
  {
68
- className: i.fileManagerBtn,
74
+ className: n.fileManagerBtn,
69
75
  "data-tooltip-id": "appTooltip",
70
76
  "data-tooltip-content": "Open FileManager to Select Directory",
71
77
  "data-tooltip-place": "top",
72
- onClick: () => k(!0),
73
- children: /* @__PURE__ */ o(V, { type: "folders", size: 16 })
78
+ onClick: () => w(!0),
79
+ children: /* @__PURE__ */ o(W, { type: "folders", size: 16 })
74
80
  }
75
81
  )
76
82
  ] })
77
83
  ] }) }),
78
- v && !a && /* @__PURE__ */ o(
79
- q,
84
+ M && !a && /* @__PURE__ */ o(
85
+ V,
80
86
  {
81
- deviceId: S || "main",
87
+ deviceId: i || "main",
82
88
  title: "Select Path",
83
89
  selected: r,
84
- close: () => k(!1),
85
- onSelect: (e) => n(e)
90
+ close: () => w(!1),
91
+ onSelect: (e) => u(e)
86
92
  }
87
93
  ),
88
- y && /* @__PURE__ */ o(W, { close: () => w(!1) })
94
+ v && /* @__PURE__ */ o(_, { close: () => N(!1) })
89
95
  ] });
90
96
  };
91
97
  export {
92
- I as default
98
+ Q as default
93
99
  };
94
100
  //# sourceMappingURL=StoragePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StoragePicker.js","sources":["../../../../../src/components/common/form/StoragePicker/StoragePicker.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\r\nimport classes from './StoragePicker.module.scss';\r\nimport Select from '../Select/Select';\r\nimport { useGetStorages } from '../../../../services/storage';\r\nimport Input from '../Input/Input';\r\nimport FolderPicker from '../../FolderPicker/FolderPicker';\r\nimport Icon from '../../Icon/Icon';\r\nimport AddStorage from '../../../Storage/AddStorage/AddStorage';\r\n\r\ntype storageItem = { name: string; id: string; type: string; defaultPath?: string };\r\n\r\ninterface StoragePickerProps {\r\n storagePath?: string;\r\n storageId?: string;\r\n disabled?: boolean;\r\n deviceId?: string;\r\n onUpdate: (val: { storage: storageItem; path: string }) => void;\r\n}\r\n\r\nconst StoragePicker = ({ onUpdate, storagePath = '', storageId, disabled = false, deviceId }: StoragePickerProps) => {\r\n const [selectedStorage, setSelectedStorage] = useState<null | storageItem>();\r\n const [showFolderPicker, setShowFolderPicker] = useState(false);\r\n const [showAddStorageModal, setShowAddStorageModal] = useState(false);\r\n const [path, setPath] = useState(() => storagePath);\r\n const isLocalStorage = selectedStorage?.type === 'local';\r\n const hasBucketName = selectedStorage?.defaultPath && selectedStorage?.defaultPath !== '/';\r\n const fullPath = hasBucketName ? `${selectedStorage.defaultPath}${path ? `/${path}` : ''}` : path;\r\n\r\n const { data: allStorageData } = useGetStorages();\r\n const allUserStorages = (allStorageData?.result as storageItem[]) || [];\r\n const allStorages = [...allUserStorages];\r\n\r\n console.log('allStorages :', allStorages);\r\n console.log('selectedStorage :', selectedStorage);\r\n\r\n const storageOptions = useMemo(() => {\r\n const storageOpts = allStorages.map(({ name, id, type }) => ({\r\n label: name,\r\n value: id.toString(),\r\n image: <img src={`/providers/${type}.png`} />,\r\n }));\r\n return storageOpts;\r\n }, [allStorages]);\r\n\r\n const selectStorage = (storageID: string) => {\r\n console.log('storageID :', storageID);\r\n if (storageID === 'add_new') {\r\n return setShowAddStorageModal(true);\r\n }\r\n const theStorage = allStorages.find((s) => s.id == storageID);\r\n if (theStorage || storageID === 'local') {\r\n setSelectedStorage(theStorage);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (allStorages.length > 0 && storageId) {\r\n const currentStorage = allStorages.find((s) => s.id === storageId);\r\n setSelectedStorage(currentStorage);\r\n if (currentStorage?.defaultPath && currentStorage.defaultPath !== '/') {\r\n const prefix = currentStorage.defaultPath + '/';\r\n setPath((prev) => (prev.startsWith(prefix) ? prev.slice(prefix.length) : prev));\r\n }\r\n }\r\n }, [allStorageData]);\r\n\r\n useEffect(() => {\r\n if (selectedStorage) {\r\n onUpdate({ storage: selectedStorage, path: fullPath });\r\n }\r\n }, [selectedStorage, path]);\r\n\r\n useEffect(() => {\r\n if (!disabled) {\r\n setSelectedStorage(null);\r\n setPath('');\r\n }\r\n }, [deviceId, disabled]);\r\n\r\n // console.log('Storage path :', path, !disabled && isLocalStorage && !path);\r\n\r\n return (\r\n <div className={classes.storagePicker}>\r\n <div className={classes.storagePickerInput}>\r\n <div>\r\n <div className={classes.storage}>\r\n <Select\r\n fieldValue={selectedStorage?.id ? selectedStorage.id : ''}\r\n options={[\r\n { label: 'Select Storage', value: '', icon: 'storages' },\r\n ...storageOptions,\r\n { label: '+ Add New Storage', value: 'add_new', icon: 'plus' },\r\n ]}\r\n onUpdate={selectStorage}\r\n full={true}\r\n disabled={disabled}\r\n />\r\n </div>\r\n <div className={`${classes.path} ${hasBucketName ? classes.withBucket : ''}`}>\r\n {hasBucketName && (\r\n <span className={classes.defaultPath} title={`Bucket: ${selectedStorage.defaultPath}`}>\r\n {selectedStorage.defaultPath + '/'}\r\n </span>\r\n )}\r\n <Input\r\n disabled={disabled}\r\n fieldValue={path}\r\n onUpdate={(val) => setPath(!isLocalStorage && val.startsWith('/') ? val.slice(1) : val)} //if the val starts with a slash remove it (only for remote storages, local paths need the leading slash)\r\n placeholder={isLocalStorage ? 'Select a folder' : hasBucketName ? 'subfolder' : `folder-or-bucket/subfolder`}\r\n full={true}\r\n required={!disabled && isLocalStorage}\r\n error={(!disabled && isLocalStorage && !path ? 'Required' : '') as string}\r\n />\r\n {selectedStorage?.type && !disabled && selectedStorage.type === 'local' && (\r\n <button\r\n className={classes.fileManagerBtn}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Open FileManager to Select Directory\"\r\n data-tooltip-place=\"top\"\r\n onClick={() => setShowFolderPicker(true)}\r\n >\r\n <Icon type=\"folders\" size={16} />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {showFolderPicker && !disabled && (\r\n <FolderPicker\r\n deviceId={deviceId || 'main'}\r\n title=\"Select Path\"\r\n selected={path}\r\n close={() => setShowFolderPicker(false)}\r\n onSelect={(newVal) => setPath(newVal)}\r\n />\r\n )}\r\n {showAddStorageModal && <AddStorage close={() => setShowAddStorageModal(false)} />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default StoragePicker;\r\n"],"names":["StoragePicker","onUpdate","storagePath","storageId","disabled","deviceId","selectedStorage","setSelectedStorage","useState","showFolderPicker","setShowFolderPicker","showAddStorageModal","setShowAddStorageModal","path","setPath","isLocalStorage","hasBucketName","fullPath","allStorageData","useGetStorages","allStorages","storageOptions","useMemo","name","id","type","jsx","selectStorage","storageID","theStorage","useEffect","currentStorage","s","prefix","prev","jsxs","classes","Select","Input","val","Icon","FolderPicker","newVal","AddStorage"],"mappings":";;;;;;;;;AAmBA,MAAMA,IAAgB,CAAC,EAAE,UAAAC,GAAU,aAAAC,IAAc,IAAI,WAAAC,GAAW,UAAAC,IAAW,IAAO,UAAAC,QAAmC;AAClH,QAAM,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxC,CAACC,GAAkBC,CAAmB,IAAIF,EAAS,EAAK,GACxD,CAACG,GAAqBC,CAAsB,IAAIJ,EAAS,EAAK,GAC9D,CAACK,GAAMC,CAAO,IAAIN,EAAS,MAAMN,CAAW,GAC5Ca,KAAiBT,KAAA,gBAAAA,EAAiB,UAAS,SAC3CU,KAAgBV,KAAA,gBAAAA,EAAiB,iBAAeA,KAAA,gBAAAA,EAAiB,iBAAgB,KACjFW,IAAWD,IAAgB,GAAGV,EAAgB,WAAW,GAAGO,IAAO,IAAIA,CAAI,KAAK,EAAE,KAAKA,GAEvF,EAAE,MAAMK,EAAA,IAAmBC,EAAA,GAE3BC,IAAc,CAAC,IADIF,KAAA,gBAAAA,EAAgB,WAA4B,CAAA,CAC9B;AAEvC,UAAQ,IAAI,iBAAiBE,CAAW,GACxC,QAAQ,IAAI,qBAAqBd,CAAe;AAEhD,QAAMe,IAAiBC,EAAQ,MACRF,EAAY,IAAI,CAAC,EAAE,MAAAG,GAAM,IAAAC,GAAI,MAAAC,SAAY;AAAA,IAC1D,OAAOF;AAAA,IACP,OAAOC,EAAG,SAAA;AAAA,IACV,OAAO,gBAAAE,EAAC,OAAA,EAAI,KAAK,cAAcD,CAAI,OAAA,CAAQ;AAAA,EAAA,EAC5C,GAEF,CAACL,CAAW,CAAC,GAEVO,IAAgB,CAACC,MAAsB;AAE1C,QADA,QAAQ,IAAI,eAAeA,CAAS,GAChCA,MAAc;AACf,aAAOhB,EAAuB,EAAI;AAErC,UAAMiB,IAAaT,EAAY,KAAK,CAAC,MAAM,EAAE,MAAMQ,CAAS;AAC5D,KAAIC,KAAcD,MAAc,YAC7BrB,EAAmBsB,CAAU;AAAA,EAEnC;AAEA,SAAAC,EAAU,MAAM;AACb,QAAIV,EAAY,SAAS,KAAKjB,GAAW;AACtC,YAAM4B,IAAiBX,EAAY,KAAK,CAACY,MAAMA,EAAE,OAAO7B,CAAS;AAEjE,UADAI,EAAmBwB,CAAc,GAC7BA,KAAA,QAAAA,EAAgB,eAAeA,EAAe,gBAAgB,KAAK;AACpE,cAAME,IAASF,EAAe,cAAc;AAC5C,QAAAjB,EAAQ,CAACoB,MAAUA,EAAK,WAAWD,CAAM,IAAIC,EAAK,MAAMD,EAAO,MAAM,IAAIC,CAAK;AAAA,MACjF;AAAA,IACH;AAAA,EACH,GAAG,CAAChB,CAAc,CAAC,GAEnBY,EAAU,MAAM;AACb,IAAIxB,KACDL,EAAS,EAAE,SAASK,GAAiB,MAAMW,GAAU;AAAA,EAE3D,GAAG,CAACX,GAAiBO,CAAI,CAAC,GAE1BiB,EAAU,MAAM;AACb,IAAK1B,MACFG,EAAmB,IAAI,GACvBO,EAAQ,EAAE;AAAA,EAEhB,GAAG,CAACT,GAAUD,CAAQ,CAAC,GAKpB,gBAAA+B,EAAC,OAAA,EAAI,WAAWC,EAAQ,eACrB,UAAA;AAAA,IAAA,gBAAAV,EAAC,OAAA,EAAI,WAAWU,EAAQ,oBACrB,4BAAC,OAAA,EACE,UAAA;AAAA,MAAA,gBAAAV,EAAC,OAAA,EAAI,WAAWU,EAAQ,SACrB,UAAA,gBAAAV;AAAA,QAACW;AAAA,QAAA;AAAA,UACE,YAAY/B,KAAA,QAAAA,EAAiB,KAAKA,EAAgB,KAAK;AAAA,UACvD,SAAS;AAAA,YACN,EAAE,OAAO,kBAAkB,OAAO,IAAI,MAAM,WAAA;AAAA,YAC5C,GAAGe;AAAA,YACH,EAAE,OAAO,qBAAqB,OAAO,WAAW,MAAM,OAAA;AAAA,UAAO;AAAA,UAEhE,UAAUM;AAAA,UACV,MAAM;AAAA,UACN,UAAAvB;AAAA,QAAA;AAAA,MAAA,GAEN;AAAA,MACA,gBAAA+B,EAAC,OAAA,EAAI,WAAW,GAAGC,EAAQ,IAAI,IAAIpB,IAAgBoB,EAAQ,aAAa,EAAE,IACtE,UAAA;AAAA,QAAApB,KACE,gBAAAU,EAAC,QAAA,EAAK,WAAWU,EAAQ,aAAa,OAAO,WAAW9B,EAAgB,WAAW,IAC/E,UAAAA,EAAgB,cAAc,KAClC;AAAA,QAEH,gBAAAoB;AAAA,UAACY;AAAA,UAAA;AAAA,YACE,UAAAlC;AAAA,YACA,YAAYS;AAAA,YACZ,UAAU,CAAC0B,MAAQzB,EAAQ,CAACC,KAAkBwB,EAAI,WAAW,GAAG,IAAIA,EAAI,MAAM,CAAC,IAAIA,CAAG;AAAA,YACtF,aAAaxB,IAAiB,oBAAoBC,IAAgB,cAAc;AAAA,YAChF,MAAM;AAAA,YACN,UAAU,CAACZ,KAAYW;AAAA,YACvB,OAAQ,CAACX,KAAYW,KAAkB,CAACF,IAAO,aAAa;AAAA,UAAA;AAAA,QAAA;AAAA,SAE9DP,KAAA,gBAAAA,EAAiB,SAAQ,CAACF,KAAYE,EAAgB,SAAS,WAC7D,gBAAAoB;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,WAAWU,EAAQ;AAAA,YACnB,mBAAgB;AAAA,YAChB,wBAAqB;AAAA,YACrB,sBAAmB;AAAA,YACnB,SAAS,MAAM1B,EAAoB,EAAI;AAAA,YAEvC,UAAA,gBAAAgB,EAACc,GAAA,EAAK,MAAK,WAAU,MAAM,GAAA,CAAI;AAAA,UAAA;AAAA,QAAA;AAAA,MAClC,EAAA,CAEN;AAAA,IAAA,EAAA,CACH,EAAA,CACH;AAAA,IACC/B,KAAoB,CAACL,KACnB,gBAAAsB;AAAA,MAACe;AAAA,MAAA;AAAA,QACE,UAAUpC,KAAY;AAAA,QACtB,OAAM;AAAA,QACN,UAAUQ;AAAA,QACV,OAAO,MAAMH,EAAoB,EAAK;AAAA,QACtC,UAAU,CAACgC,MAAW5B,EAAQ4B,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGzC/B,KAAuB,gBAAAe,EAACiB,GAAA,EAAW,OAAO,MAAM/B,EAAuB,EAAK,EAAA,CAAG;AAAA,EAAA,GACnF;AAEN;"}
1
+ {"version":3,"file":"StoragePicker.js","sources":["../../../../../src/components/common/form/StoragePicker/StoragePicker.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\r\nimport classes from './StoragePicker.module.scss';\r\nimport Select from '../Select/Select';\r\nimport { useGetStorages } from '../../../../services/storage';\r\nimport Input from '../Input/Input';\r\nimport FolderPicker from '../../FolderPicker/FolderPicker';\r\nimport Icon from '../../Icon/Icon';\r\nimport AddStorage from '../../../Storage/AddStorage/AddStorage';\r\n\r\ntype storageItem = { name: string; id: string; type: string; defaultPath?: string };\r\n\r\ninterface StoragePickerProps {\r\n storagePath?: string;\r\n storageId?: string;\r\n disabled?: boolean;\r\n deviceId?: string;\r\n onUpdate: (val: { storage: storageItem; path: string }) => void;\r\n}\r\n\r\nconst StoragePicker = ({ onUpdate, storagePath = '', storageId, disabled = false, deviceId }: StoragePickerProps) => {\r\n const [selectedStorage, setSelectedStorage] = useState<null | storageItem>();\r\n const [showFolderPicker, setShowFolderPicker] = useState(false);\r\n const [showAddStorageModal, setShowAddStorageModal] = useState(false);\r\n const [path, setPath] = useState(() => storagePath);\r\n const isLocalStorage = selectedStorage?.type === 'local';\r\n const hasBucketName = selectedStorage?.defaultPath && selectedStorage?.defaultPath !== '/';\r\n const fullPath = hasBucketName ? `${selectedStorage.defaultPath}${path ? `/${path}` : ''}` : path;\r\n\r\n const { data: allStorageData } = useGetStorages();\r\n const allUserStorages = (allStorageData?.result as storageItem[]) || [];\r\n const allStorages = [...allUserStorages];\r\n\r\n console.log('allStorages :', allStorages);\r\n console.log('selectedStorage :', selectedStorage);\r\n\r\n const storageOptions = useMemo(() => {\r\n const storageOpts = allStorages.map(({ name, id, type }) => ({\r\n label: name,\r\n value: id.toString(),\r\n image: <img src={`/providers/${type}.png`} />,\r\n }));\r\n return storageOpts;\r\n }, [allStorages]);\r\n\r\n const selectStorage = (storageID: string) => {\r\n console.log('storageID :', storageID);\r\n if (storageID === 'add_new') {\r\n return setShowAddStorageModal(true);\r\n }\r\n const theStorage = allStorages.find((s) => s.id == storageID);\r\n if (theStorage || storageID === 'local') {\r\n setSelectedStorage(theStorage);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (allStorages.length > 0 && storageId) {\r\n const currentStorage = allStorages.find((s) => s.id === storageId);\r\n setSelectedStorage(currentStorage);\r\n if (currentStorage?.defaultPath && currentStorage.defaultPath !== '/') {\r\n const prefix = currentStorage.defaultPath + '/';\r\n setPath((prev) => (prev.startsWith(prefix) ? prev.slice(prefix.length) : prev));\r\n }\r\n }\r\n }, [allStorageData]);\r\n\r\n useEffect(() => {\r\n if (selectedStorage) {\r\n onUpdate({ storage: selectedStorage, path: fullPath });\r\n }\r\n }, [selectedStorage, path]);\r\n\r\n // Reset the storage selection only when the device actually changes (not on mount/remount,\r\n // e.g. when navigating between steps in the Add Plan form).\r\n const prevDeviceIdRef = useRef<string | undefined | null>(null);\r\n useEffect(() => {\r\n if (disabled) {\r\n prevDeviceIdRef.current = deviceId;\r\n return;\r\n }\r\n if (prevDeviceIdRef.current !== null && prevDeviceIdRef.current !== deviceId) {\r\n setSelectedStorage(null);\r\n setPath('');\r\n }\r\n prevDeviceIdRef.current = deviceId;\r\n }, [deviceId, disabled]);\r\n\r\n // console.log('Storage path :', path, !disabled && isLocalStorage && !path);\r\n\r\n return (\r\n <div className={classes.storagePicker}>\r\n <div className={classes.storagePickerInput}>\r\n <div>\r\n <div className={classes.storage}>\r\n <Select\r\n fieldValue={selectedStorage?.id ? selectedStorage.id : ''}\r\n options={[\r\n { label: 'Select Storage', value: '', icon: 'storages' },\r\n ...storageOptions,\r\n { label: '+ Add New Storage', value: 'add_new', icon: 'plus' },\r\n ]}\r\n onUpdate={selectStorage}\r\n full={true}\r\n disabled={disabled}\r\n />\r\n </div>\r\n <div className={`${classes.path} ${hasBucketName ? classes.withBucket : ''}`}>\r\n {hasBucketName && (\r\n <span className={classes.defaultPath} title={`Bucket: ${selectedStorage.defaultPath}`}>\r\n {selectedStorage.defaultPath + '/'}\r\n </span>\r\n )}\r\n <Input\r\n disabled={disabled}\r\n fieldValue={path}\r\n onUpdate={(val) => setPath(!isLocalStorage && val.startsWith('/') ? val.slice(1) : val)} //if the val starts with a slash remove it (only for remote storages, local paths need the leading slash)\r\n placeholder={isLocalStorage ? 'Select a folder' : hasBucketName ? 'subfolder' : `folder-or-bucket/subfolder`}\r\n full={true}\r\n required={!disabled && isLocalStorage}\r\n error={(!disabled && isLocalStorage && !path ? 'Required' : '') as string}\r\n />\r\n {selectedStorage?.type && !disabled && selectedStorage.type === 'local' && (\r\n <button\r\n className={classes.fileManagerBtn}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Open FileManager to Select Directory\"\r\n data-tooltip-place=\"top\"\r\n onClick={() => setShowFolderPicker(true)}\r\n >\r\n <Icon type=\"folders\" size={16} />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {showFolderPicker && !disabled && (\r\n <FolderPicker\r\n deviceId={deviceId || 'main'}\r\n title=\"Select Path\"\r\n selected={path}\r\n close={() => setShowFolderPicker(false)}\r\n onSelect={(newVal) => setPath(newVal)}\r\n />\r\n )}\r\n {showAddStorageModal && <AddStorage close={() => setShowAddStorageModal(false)} />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default StoragePicker;\r\n"],"names":["StoragePicker","onUpdate","storagePath","storageId","disabled","deviceId","selectedStorage","setSelectedStorage","useState","showFolderPicker","setShowFolderPicker","showAddStorageModal","setShowAddStorageModal","path","setPath","isLocalStorage","hasBucketName","fullPath","allStorageData","useGetStorages","allStorages","storageOptions","useMemo","name","id","type","jsx","selectStorage","storageID","theStorage","useEffect","currentStorage","s","prefix","prev","prevDeviceIdRef","useRef","jsxs","classes","Select","Input","val","Icon","FolderPicker","newVal","AddStorage"],"mappings":"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"}
@@ -5,9 +5,10 @@ type ToggleProps = {
5
5
  inline?: boolean;
6
6
  hint?: string;
7
7
  error?: string;
8
+ disabled?: boolean;
8
9
  fieldValue: boolean;
9
10
  onUpdate: (f: boolean) => void;
10
11
  };
11
- declare const Toggle: ({ label, description, customClasses, fieldValue, inline, hint, error, onUpdate }: ToggleProps) => import("react/jsx-runtime").JSX.Element;
12
+ declare const Toggle: ({ label, description, customClasses, fieldValue, inline, hint, error, disabled, onUpdate, }: ToggleProps) => import("react/jsx-runtime").JSX.Element;
12
13
  export default Toggle;
13
14
  //# sourceMappingURL=Toggle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/form/Toggle/Toggle.tsx"],"names":[],"mappings":"AAIA,KAAK,WAAW,GAAG;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,QAAA,MAAM,MAAM,GAAI,kFAA4G,WAAW,4CAgBtI,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/form/Toggle/Toggle.tsx"],"names":[],"mappings":"AAIA,KAAK,WAAW,GAAG;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,QAAA,MAAM,MAAM,GAAI,6FAUb,WAAW,4CAgBb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,16 +1,26 @@
1
- import { jsx as e, jsxs as h } from "react/jsx-runtime";
2
- import { nanoid as u } from "nanoid";
1
+ import { jsx as e, jsxs as u } from "react/jsx-runtime";
2
+ import { nanoid as f } from "nanoid";
3
3
  import t from "./Toggle.module.scss.js";
4
- import f from "../FormField/FormField.js";
5
- const b = ({ label: o, description: r, customClasses: c = "", fieldValue: l = !1, inline: n = !1, hint: a = "", error: i, onUpdate: g }) => {
6
- const s = u(), d = (m) => {
7
- const p = m.currentTarget.value === "true";
8
- g(!p);
4
+ import x from "../FormField/FormField.js";
5
+ const b = ({
6
+ label: o,
7
+ description: l,
8
+ customClasses: c = "",
9
+ fieldValue: r = !1,
10
+ inline: n = !1,
11
+ hint: i = "",
12
+ error: g,
13
+ disabled: s = !1,
14
+ onUpdate: m
15
+ }) => {
16
+ const a = f(), d = (p) => {
17
+ const h = p.currentTarget.value === "true";
18
+ m(!h);
9
19
  };
10
- return /* @__PURE__ */ e(f, { type: "toggle", label: o, hint: a, error: i, inline: n, classes: `${t.toggleField} ${c}`, children: /* @__PURE__ */ h("div", { className: t.toggleCheckbox, children: [
11
- /* @__PURE__ */ e("input", { type: "checkbox", id: s, value: l.toString(), onChange: d, checked: l }),
12
- /* @__PURE__ */ e("label", { htmlFor: s, children: o }),
13
- r && /* @__PURE__ */ e("span", { className: t.description, children: r })
20
+ return /* @__PURE__ */ e(x, { type: "toggle", label: o, hint: i, error: g, inline: n, classes: `${t.toggleField} ${c}`, children: /* @__PURE__ */ u("div", { className: `${t.toggleCheckbox} ${s ? t.toggleDisabled : ""}`, children: [
21
+ /* @__PURE__ */ e("input", { type: "checkbox", id: a, value: r.toString(), onChange: d, checked: r, disabled: s }),
22
+ /* @__PURE__ */ e("label", { htmlFor: a, children: o }),
23
+ l && /* @__PURE__ */ e("span", { className: t.description, children: l })
14
24
  ] }) });
15
25
  };
16
26
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.js","sources":["../../../../../src/components/common/form/Toggle/Toggle.tsx"],"sourcesContent":["import { nanoid } from 'nanoid';\r\nimport classes from './Toggle.module.scss';\r\nimport FormField from '../FormField/FormField';\r\n\r\ntype ToggleProps = {\r\n label?: string;\r\n description?: string;\r\n customClasses?: string;\r\n inline?: boolean;\r\n hint?: string;\r\n error?: string;\r\n fieldValue: boolean;\r\n onUpdate: (f: boolean) => void;\r\n};\r\n\r\nconst Toggle = ({ label, description, customClasses = '', fieldValue = false, inline = false, hint = '', error, onUpdate }: ToggleProps) => {\r\n const toggleID = nanoid();\r\n const updateField = (event: React.FormEvent<HTMLInputElement>) => {\r\n const inputVal = event.currentTarget.value === 'true';\r\n onUpdate(!inputVal);\r\n };\r\n\r\n return (\r\n <FormField type=\"toggle\" label={label} hint={hint} error={error} inline={inline} classes={`${classes.toggleField} ${customClasses}`}>\r\n <div className={classes.toggleCheckbox}>\r\n <input type=\"checkbox\" id={toggleID} value={fieldValue.toString()} onChange={updateField} checked={fieldValue} />\r\n <label htmlFor={toggleID}>{label}</label>\r\n {description && <span className={classes.description}>{description}</span>}\r\n </div>\r\n </FormField>\r\n );\r\n};\r\n\r\nexport default Toggle;\r\n"],"names":["Toggle","label","description","customClasses","fieldValue","inline","hint","error","onUpdate","toggleID","nanoid","updateField","event","inputVal","FormField","classes","jsx"],"mappings":";;;;AAeA,MAAMA,IAAS,CAAC,EAAE,OAAAC,GAAO,aAAAC,GAAa,eAAAC,IAAgB,IAAI,YAAAC,IAAa,IAAO,QAAAC,IAAS,IAAO,MAAAC,IAAO,IAAI,OAAAC,GAAO,UAAAC,QAA4B;AACzI,QAAMC,IAAWC,EAAA,GACXC,IAAc,CAACC,MAA6C;AAC/D,UAAMC,IAAWD,EAAM,cAAc,UAAU;AAC/C,IAAAJ,EAAS,CAACK,CAAQ;AAAA,EACrB;AAEA,2BACIC,GAAA,EAAU,MAAK,UAAS,OAAAb,GAAc,MAAAK,GAAY,OAAAC,GAAc,QAAAF,GAAgB,SAAS,GAAGU,EAAQ,WAAW,IAAIZ,CAAa,IAC9H,4BAAC,OAAA,EAAI,WAAWY,EAAQ,gBACrB,UAAA;AAAA,IAAA,gBAAAC,EAAC,SAAA,EAAM,MAAK,YAAW,IAAIP,GAAU,OAAOL,EAAW,SAAA,GAAY,UAAUO,GAAa,SAASP,EAAA,CAAY;AAAA,IAC/G,gBAAAY,EAAC,SAAA,EAAM,SAASP,GAAW,UAAAR,GAAM;AAAA,IAChCC,KAAe,gBAAAc,EAAC,QAAA,EAAK,WAAWD,EAAQ,aAAc,UAAAb,EAAA,CAAY;AAAA,EAAA,EAAA,CACtE,EAAA,CACH;AAEN;"}
1
+ {"version":3,"file":"Toggle.js","sources":["../../../../../src/components/common/form/Toggle/Toggle.tsx"],"sourcesContent":["import { nanoid } from 'nanoid';\r\nimport classes from './Toggle.module.scss';\r\nimport FormField from '../FormField/FormField';\r\n\r\ntype ToggleProps = {\r\n label?: string;\r\n description?: string;\r\n customClasses?: string;\r\n inline?: boolean;\r\n hint?: string;\r\n error?: string;\r\n disabled?: boolean;\r\n fieldValue: boolean;\r\n onUpdate: (f: boolean) => void;\r\n};\r\n\r\nconst Toggle = ({\r\n label,\r\n description,\r\n customClasses = '',\r\n fieldValue = false,\r\n inline = false,\r\n hint = '',\r\n error,\r\n disabled = false,\r\n onUpdate,\r\n}: ToggleProps) => {\r\n const toggleID = nanoid();\r\n const updateField = (event: React.FormEvent<HTMLInputElement>) => {\r\n const inputVal = event.currentTarget.value === 'true';\r\n onUpdate(!inputVal);\r\n };\r\n\r\n return (\r\n <FormField type=\"toggle\" label={label} hint={hint} error={error} inline={inline} classes={`${classes.toggleField} ${customClasses}`}>\r\n <div className={`${classes.toggleCheckbox} ${disabled ? classes.toggleDisabled : ''}`}>\r\n <input type=\"checkbox\" id={toggleID} value={fieldValue.toString()} onChange={updateField} checked={fieldValue} disabled={disabled} />\r\n <label htmlFor={toggleID}>{label}</label>\r\n {description && <span className={classes.description}>{description}</span>}\r\n </div>\r\n </FormField>\r\n );\r\n};\r\n\r\nexport default Toggle;\r\n"],"names":["Toggle","label","description","customClasses","fieldValue","inline","hint","error","disabled","onUpdate","toggleID","nanoid","updateField","event","inputVal","jsx","FormField","classes","jsxs"],"mappings":";;;;AAgBA,MAAMA,IAAS,CAAC;AAAA,EACb,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,YAAAC,IAAa;AAAA,EACb,QAAAC,IAAS;AAAA,EACT,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,UAAAC;AACH,MAAmB;AAChB,QAAMC,IAAWC,EAAA,GACXC,IAAc,CAACC,MAA6C;AAC/D,UAAMC,IAAWD,EAAM,cAAc,UAAU;AAC/C,IAAAJ,EAAS,CAACK,CAAQ;AAAA,EACrB;AAEA,SACG,gBAAAC,EAACC,GAAA,EAAU,MAAK,UAAS,OAAAf,GAAc,MAAAK,GAAY,OAAAC,GAAc,QAAAF,GAAgB,SAAS,GAAGY,EAAQ,WAAW,IAAId,CAAa,IAC9H,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAW,GAAGD,EAAQ,cAAc,IAAIT,IAAWS,EAAQ,iBAAiB,EAAE,IAChF,UAAA;AAAA,IAAA,gBAAAF,EAAC,SAAA,EAAM,MAAK,YAAW,IAAIL,GAAU,OAAON,EAAW,SAAA,GAAY,UAAUQ,GAAa,SAASR,GAAY,UAAAI,GAAoB;AAAA,IACnI,gBAAAO,EAAC,SAAA,EAAM,SAASL,GAAW,UAAAT,GAAM;AAAA,IAChCC,KAAe,gBAAAa,EAAC,QAAA,EAAK,WAAWE,EAAQ,aAAc,UAAAf,EAAA,CAAY;AAAA,EAAA,EAAA,CACtE,EAAA,CACH;AAEN;"}
@@ -1,12 +1,14 @@
1
- const e = "_toggleField_0xyXb", o = "_toggleCheckbox_c1r5P", t = "_description_b26iC", c = {
1
+ const e = "_toggleField_cKqNA", o = "_toggleCheckbox_zbKTV", t = "_toggleDisabled_PdwS7", g = "_description_XxZbF", l = {
2
2
  toggleField: e,
3
3
  toggleCheckbox: o,
4
- description: t
4
+ toggleDisabled: t,
5
+ description: g
5
6
  };
6
7
  export {
7
- c as default,
8
- t as description,
8
+ l as default,
9
+ g as description,
9
10
  o as toggleCheckbox,
11
+ t as toggleDisabled,
10
12
  e as toggleField
11
13
  };
12
14
  //# sourceMappingURL=Toggle.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Toggle.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"Toggle.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePlanSingleActions.d.ts","sourceRoot":"","sources":["../../src/hooks/usePlanSingleActions.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,QAAO;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;CA0HxB,CAAC"}
1
+ {"version":3,"file":"usePlanSingleActions.d.ts","sourceRoot":"","sources":["../../src/hooks/usePlanSingleActions.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,eAAO,MAAM,oBAAoB,QAAO;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;CA4HxB,CAAC"}
@@ -1,37 +1,37 @@
1
1
  import { useState as r } from "react";
2
- import { useParams as U, useNavigate as C } from "react-router";
2
+ import { useParams as I, useNavigate as N } from "react-router";
3
3
  import { toast as t } from "react-toastify";
4
- import { usePerformBackup as I, usePausePlan as N, useResumePlan as D, useGetPlan as F } from "../services/plans.js";
5
- const J = () => {
6
- const [f, m] = r(!1), [k, h] = r(!1), [w, S] = r(!1), [B, M] = r(!1), [y, E] = r(!1), { id: b } = U(), R = C(), l = I(), p = N(), d = D(), { data: c, isLoading: $, refetch: v, error: A } = F(b), s = (c == null ? void 0 : c.result) || {}, o = s.method === "sync", a = [...s.backups || []].sort((e, n) => n.started - e.started), i = a.filter((e) => e.inProgress), g = (s.restores || []).filter((e) => e.inProgress), L = o ? a.filter((e) => e.status === "completed")[0] : a[0], P = i.length > 0 || g.length > 0, u = p.isPending || d.isPending || l.isPending;
4
+ import { usePerformBackup as D, usePausePlan as F, useResumePlan as x, useGetPlan as G } from "../services/plans.js";
5
+ const O = () => {
6
+ const [k, d] = r(!1), [h, w] = r(!1), [S, B] = r(!1), [y, M] = r(!1), [E, $] = r(!1), { id: b } = I(), R = N(), a = D(), p = F(), g = x(), { data: i, isLoading: v, refetch: A, error: L } = G(b), n = (i == null ? void 0 : i.result) || {}, o = n.method === "sync", c = [...n.backups || []].sort((e, s) => s.started - e.started), u = c.filter((e) => e.inProgress), m = (n.restores || []).filter((e) => e.inProgress), U = o ? c.filter((e) => e.status === "completed")[0] : c[0], P = u.length > 0 || m.length > 0, l = p.isPending || g.isPending || a.isPending;
7
7
  return {
8
8
  // State
9
- showDeleteModal: f,
10
- setShowDeleteModal: m,
11
- showEditModal: k,
12
- setShowEditModal: h,
13
- showPruneModal: B,
9
+ showDeleteModal: k,
10
+ setShowDeleteModal: d,
11
+ showEditModal: h,
12
+ setShowEditModal: w,
13
+ showPruneModal: y,
14
14
  setShowPruneModal: M,
15
- showLogsModal: y,
16
- setShowLogsModal: E,
17
- showUnlockModal: w,
18
- setShowUnlockModal: S,
15
+ showLogsModal: E,
16
+ setShowLogsModal: $,
17
+ showUnlockModal: S,
18
+ setShowUnlockModal: B,
19
19
  // Data
20
- plan: s,
21
- isLoading: $,
22
- refetchPlan: v,
23
- sortedHistory: a,
24
- activeBackups: i,
25
- activeRestores: g,
26
- lastBackupItem: L,
20
+ plan: n,
21
+ isLoading: v,
22
+ refetchPlan: A,
23
+ sortedHistory: c,
24
+ activeBackups: u,
25
+ activeRestores: m,
26
+ lastBackupItem: U,
27
27
  actionInProgress: P,
28
- taskPending: u,
29
- planError: A,
28
+ taskPending: l,
29
+ planError: L,
30
30
  // Actions
31
31
  changeStatus: () => {
32
- if (i.length > 0)
32
+ if (u.length > 0)
33
33
  return t.error("Can't pause a Plan while a Backup is in progress.");
34
- s.inProgress || u || (s.isActive ? t.promise(p.mutateAsync(s.id), {
34
+ n.inProgress || l || (n.isActive ? t.promise(p.mutateAsync(n.id), {
35
35
  pending: "Pausing backup Plan...",
36
36
  success: "Backup Plan Paused",
37
37
  error: {
@@ -39,7 +39,7 @@ const J = () => {
39
39
  return `Failed to Pause Backup Plan. ${(e == null ? void 0 : e.message) || "Unknown Error."}`;
40
40
  }
41
41
  }
42
- }) : t.promise(d.mutateAsync(s.id), {
42
+ }) : t.promise(g.mutateAsync(n.id), {
43
43
  pending: "Resuming backup Plan...",
44
44
  success: "Backup Plan Resumed",
45
45
  error: {
@@ -52,21 +52,22 @@ const J = () => {
52
52
  backupNow: () => {
53
53
  if (P)
54
54
  return t.error("A Backup/Restore Process is in Progress.");
55
- if (u)
55
+ if (l)
56
56
  return;
57
57
  const e = t.loading(`Starting ${o ? "Sync" : "Backup"}...`);
58
- l.mutate(s.id, {
59
- onSuccess: (n) => {
58
+ a.mutate(n.id, {
59
+ onSuccess: (s) => {
60
+ const C = (s == null ? void 0 : s.message) || `${o ? "Sync" : "Backup"} initiated successfully! 🚀`, f = !o && (s == null ? void 0 : s.message) && (s == null ? void 0 : s.message.includes("reached the concurrency limit"));
60
61
  t.update(e, {
61
- render: o ? (n == null ? void 0 : n.message) || "Sync initiated successfully! 🚀" : "Backup initiated successfully! 🚀",
62
+ render: o ? C : f ? s == null ? void 0 : s.message : "Backup initiated successfully!",
62
63
  type: "success",
63
64
  isLoading: !1,
64
65
  autoClose: 3e3
65
- }), o || R(`/plan/${s.id}?pendingbackup=1`);
66
+ }), !o && !f && R(`/plan/${n.id}?pendingbackup=1`);
66
67
  },
67
- onError: (n) => {
68
+ onError: (s) => {
68
69
  t.update(e, {
69
- render: `${o ? "Sync" : "Backup"} failed to start. ${(n == null ? void 0 : n.message) || "Unknown Error."}`,
70
+ render: `${o ? "Sync" : "Backup"} failed to start. ${(s == null ? void 0 : s.message) || "Unknown Error."}`,
70
71
  type: "error",
71
72
  isLoading: !1,
72
73
  autoClose: !1,
@@ -78,6 +79,6 @@ const J = () => {
78
79
  };
79
80
  };
80
81
  export {
81
- J as usePlanSingleActions
82
+ O as usePlanSingleActions
82
83
  };
83
84
  //# sourceMappingURL=usePlanSingleActions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePlanSingleActions.js","sources":["../../src/hooks/usePlanSingleActions.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\nimport { useGetPlan, usePausePlan, usePerformBackup, useResumePlan } from '../services/plans';\r\nimport { Plan } from '../@types/plans';\r\nimport { Backup } from '../@types/backups';\r\nimport { RestoreSlim } from '../@types/restores';\r\n\r\nexport const usePlanSingleActions = (): {\r\n showDeleteModal: boolean;\r\n setShowDeleteModal: (show: boolean) => void;\r\n showEditModal: boolean;\r\n setShowEditModal: (show: boolean) => void;\r\n showPruneModal: boolean;\r\n setShowPruneModal: (show: boolean) => void;\r\n showLogsModal: boolean;\r\n setShowLogsModal: (show: boolean) => void;\r\n showUnlockModal: boolean;\r\n setShowUnlockModal: (show: boolean) => void;\r\n plan: Plan;\r\n isLoading: boolean;\r\n refetchPlan: () => void;\r\n sortedHistory: Backup[];\r\n activeBackups: Backup[];\r\n activeRestores: RestoreSlim[];\r\n lastBackupItem: Backup;\r\n actionInProgress: boolean;\r\n taskPending: boolean;\r\n planError: any;\r\n changeStatus: () => void;\r\n backupNow: () => void;\r\n} => {\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showUnlockModal, setShowUnlockModal] = useState(false);\r\n const [showPruneModal, setShowPruneModal] = useState(false);\r\n const [showLogsModal, setShowLogsModal] = useState(false);\r\n\r\n const { id } = useParams();\r\n const navigate = useNavigate();\r\n\r\n const performBackupMutation = usePerformBackup();\r\n const pauseMutation = usePausePlan();\r\n const resumeMutation = useResumePlan();\r\n\r\n const { data, isLoading, refetch: refetchPlan, error: planError } = useGetPlan(id as string);\r\n const plan: Plan = data?.result || {};\r\n\r\n const isSync = plan.method === 'sync';\r\n\r\n const sortedHistory = [...(plan.backups || [])].sort((a, b) => b.started - a.started);\r\n const activeBackups = sortedHistory.filter((s) => s.inProgress);\r\n const activeRestores = (plan.restores || []).filter((s) => s.inProgress);\r\n const lastBackupItem = isSync ? sortedHistory.filter((s) => s.status === 'completed')[0] : sortedHistory[0];\r\n const actionInProgress = activeBackups.length > 0 || activeRestores.length > 0;\r\n const taskPending = pauseMutation.isPending || resumeMutation.isPending || performBackupMutation.isPending;\r\n\r\n const changeStatus = () => {\r\n if (activeBackups.length > 0) {\r\n return toast.error(`Can't pause a Plan while a Backup is in progress.`);\r\n }\r\n if (plan.inProgress || taskPending) {\r\n return;\r\n }\r\n // isActive, set it to false, else true\r\n // When the action is being performed, the item should grey out and stay inaccessible.\r\n if (plan.isActive) {\r\n toast.promise(pauseMutation.mutateAsync(plan.id), {\r\n pending: 'Pausing backup Plan...',\r\n success: 'Backup Plan Paused',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Pause Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n } else {\r\n toast.promise(resumeMutation.mutateAsync(plan.id), {\r\n pending: 'Resuming backup Plan...',\r\n success: 'Backup Plan Resumed',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Resume Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const backupNow = () => {\r\n if (actionInProgress) {\r\n return toast.error('A Backup/Restore Process is in Progress.');\r\n }\r\n if (taskPending) {\r\n return;\r\n }\r\n\r\n const toastId = toast.loading(`Starting ${isSync ? 'Sync' : 'Backup'}...`);\r\n\r\n performBackupMutation.mutate(plan.id, {\r\n onSuccess: (data) => {\r\n toast.update(toastId, {\r\n render: isSync ? data?.message || 'Sync initiated successfully! 🚀' : 'Backup initiated successfully! 🚀',\r\n type: 'success',\r\n isLoading: false,\r\n autoClose: 3000,\r\n });\r\n if (!isSync) {\r\n navigate(`/plan/${plan.id}?pendingbackup=1`);\r\n }\r\n },\r\n onError: (error: any) => {\r\n toast.update(toastId, {\r\n render: `${isSync ? 'Sync' : 'Backup'} failed to start. ${error?.message || 'Unknown Error.'}`,\r\n type: 'error',\r\n isLoading: false,\r\n autoClose: false,\r\n closeButton: true,\r\n });\r\n },\r\n });\r\n };\r\n\r\n return {\r\n // State\r\n showDeleteModal,\r\n setShowDeleteModal,\r\n showEditModal,\r\n setShowEditModal,\r\n showPruneModal,\r\n setShowPruneModal,\r\n showLogsModal,\r\n setShowLogsModal,\r\n showUnlockModal,\r\n setShowUnlockModal,\r\n\r\n // Data\r\n plan,\r\n isLoading,\r\n refetchPlan,\r\n sortedHistory,\r\n activeBackups,\r\n activeRestores,\r\n lastBackupItem,\r\n actionInProgress,\r\n taskPending,\r\n planError,\r\n\r\n // Actions\r\n changeStatus,\r\n backupNow,\r\n };\r\n};\r\n"],"names":["usePlanSingleActions","showDeleteModal","setShowDeleteModal","useState","showEditModal","setShowEditModal","showUnlockModal","setShowUnlockModal","showPruneModal","setShowPruneModal","showLogsModal","setShowLogsModal","id","useParams","navigate","useNavigate","performBackupMutation","usePerformBackup","pauseMutation","usePausePlan","resumeMutation","useResumePlan","data","isLoading","refetchPlan","planError","useGetPlan","plan","isSync","sortedHistory","a","b","activeBackups","s","activeRestores","lastBackupItem","actionInProgress","taskPending","toast","toastId","error"],"mappings":"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"}
1
+ {"version":3,"file":"usePlanSingleActions.js","sources":["../../src/hooks/usePlanSingleActions.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\nimport { useGetPlan, usePausePlan, usePerformBackup, useResumePlan } from '../services/plans';\r\nimport { Plan } from '../@types/plans';\r\nimport { Backup } from '../@types/backups';\r\nimport { RestoreSlim } from '../@types/restores';\r\n\r\nexport const usePlanSingleActions = (): {\r\n showDeleteModal: boolean;\r\n setShowDeleteModal: (show: boolean) => void;\r\n showEditModal: boolean;\r\n setShowEditModal: (show: boolean) => void;\r\n showPruneModal: boolean;\r\n setShowPruneModal: (show: boolean) => void;\r\n showLogsModal: boolean;\r\n setShowLogsModal: (show: boolean) => void;\r\n showUnlockModal: boolean;\r\n setShowUnlockModal: (show: boolean) => void;\r\n plan: Plan;\r\n isLoading: boolean;\r\n refetchPlan: () => void;\r\n sortedHistory: Backup[];\r\n activeBackups: Backup[];\r\n activeRestores: RestoreSlim[];\r\n lastBackupItem: Backup;\r\n actionInProgress: boolean;\r\n taskPending: boolean;\r\n planError: any;\r\n changeStatus: () => void;\r\n backupNow: () => void;\r\n} => {\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showUnlockModal, setShowUnlockModal] = useState(false);\r\n const [showPruneModal, setShowPruneModal] = useState(false);\r\n const [showLogsModal, setShowLogsModal] = useState(false);\r\n\r\n const { id } = useParams();\r\n const navigate = useNavigate();\r\n\r\n const performBackupMutation = usePerformBackup();\r\n const pauseMutation = usePausePlan();\r\n const resumeMutation = useResumePlan();\r\n\r\n const { data, isLoading, refetch: refetchPlan, error: planError } = useGetPlan(id as string);\r\n const plan: Plan = data?.result || {};\r\n\r\n const isSync = plan.method === 'sync';\r\n\r\n const sortedHistory = [...(plan.backups || [])].sort((a, b) => b.started - a.started);\r\n const activeBackups = sortedHistory.filter((s) => s.inProgress);\r\n const activeRestores = (plan.restores || []).filter((s) => s.inProgress);\r\n const lastBackupItem = isSync ? sortedHistory.filter((s) => s.status === 'completed')[0] : sortedHistory[0];\r\n const actionInProgress = activeBackups.length > 0 || activeRestores.length > 0;\r\n const taskPending = pauseMutation.isPending || resumeMutation.isPending || performBackupMutation.isPending;\r\n\r\n const changeStatus = () => {\r\n if (activeBackups.length > 0) {\r\n return toast.error(`Can't pause a Plan while a Backup is in progress.`);\r\n }\r\n if (plan.inProgress || taskPending) {\r\n return;\r\n }\r\n // isActive, set it to false, else true\r\n // When the action is being performed, the item should grey out and stay inaccessible.\r\n if (plan.isActive) {\r\n toast.promise(pauseMutation.mutateAsync(plan.id), {\r\n pending: 'Pausing backup Plan...',\r\n success: 'Backup Plan Paused',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Pause Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n } else {\r\n toast.promise(resumeMutation.mutateAsync(plan.id), {\r\n pending: 'Resuming backup Plan...',\r\n success: 'Backup Plan Resumed',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Resume Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const backupNow = () => {\r\n if (actionInProgress) {\r\n return toast.error('A Backup/Restore Process is in Progress.');\r\n }\r\n if (taskPending) {\r\n return;\r\n }\r\n\r\n const toastId = toast.loading(`Starting ${isSync ? 'Sync' : 'Backup'}...`);\r\n\r\n performBackupMutation.mutate(plan.id, {\r\n onSuccess: (data) => {\r\n const msg = data?.message || `${isSync ? 'Sync' : 'Backup'} initiated successfully! 🚀`;\r\n const notStarted = !isSync && data?.message && data?.message.includes('reached the concurrency limit');\r\n toast.update(toastId, {\r\n render: isSync ? msg : notStarted ? data?.message : 'Backup initiated successfully!',\r\n type: 'success',\r\n isLoading: false,\r\n autoClose: 3000,\r\n });\r\n if (!isSync && !notStarted) {\r\n navigate(`/plan/${plan.id}?pendingbackup=1`);\r\n }\r\n },\r\n onError: (error: any) => {\r\n toast.update(toastId, {\r\n render: `${isSync ? 'Sync' : 'Backup'} failed to start. ${error?.message || 'Unknown Error.'}`,\r\n type: 'error',\r\n isLoading: false,\r\n autoClose: false,\r\n closeButton: true,\r\n });\r\n },\r\n });\r\n };\r\n\r\n return {\r\n // State\r\n showDeleteModal,\r\n setShowDeleteModal,\r\n showEditModal,\r\n setShowEditModal,\r\n showPruneModal,\r\n setShowPruneModal,\r\n showLogsModal,\r\n setShowLogsModal,\r\n showUnlockModal,\r\n setShowUnlockModal,\r\n\r\n // Data\r\n plan,\r\n isLoading,\r\n refetchPlan,\r\n sortedHistory,\r\n activeBackups,\r\n activeRestores,\r\n lastBackupItem,\r\n actionInProgress,\r\n taskPending,\r\n planError,\r\n\r\n // Actions\r\n changeStatus,\r\n backupNow,\r\n };\r\n};\r\n"],"names":["usePlanSingleActions","showDeleteModal","setShowDeleteModal","useState","showEditModal","setShowEditModal","showUnlockModal","setShowUnlockModal","showPruneModal","setShowPruneModal","showLogsModal","setShowLogsModal","id","useParams","navigate","useNavigate","performBackupMutation","usePerformBackup","pauseMutation","usePausePlan","resumeMutation","useResumePlan","data","isLoading","refetchPlan","planError","useGetPlan","plan","isSync","sortedHistory","a","b","activeBackups","s","activeRestores","lastBackupItem","actionInProgress","taskPending","toast","toastId","msg","notStarted","error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlanSingle.d.ts","sourceRoot":"","sources":["../../../src/routes/PlanSingle/PlanSingle.tsx"],"names":[],"mappings":"AAkBA,QAAA,MAAM,UAAU,+CA4Lf,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"PlanSingle.d.ts","sourceRoot":"","sources":["../../../src/routes/PlanSingle/PlanSingle.tsx"],"names":[],"mappings":"AAkBA,QAAA,MAAM,UAAU,+CAiMf,CAAC;AAEF,eAAe,UAAU,CAAC"}