@plutonhq/core-frontend 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +35 -34
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js +28 -26
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js +21 -21
- package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.js +9 -9
- package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
- package/dist-lib/components/Storage/AddStorage/AddStorage.d.ts.map +1 -1
- package/dist-lib/components/Storage/AddStorage/AddStorage.js +52 -51
- package/dist-lib/components/Storage/AddStorage/AddStorage.js.map +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.d.ts.map +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.js +36 -36
- package/dist-lib/components/Storage/StorageItem/StorageItem.js.map +1 -1
- package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
- package/dist-lib/components/common/Icon/Icon.js +7 -0
- package/dist-lib/components/common/Icon/Icon.js.map +1 -1
- package/dist-lib/components/common/form/Select/Select.js +12 -12
- package/dist-lib/components/common/form/Select/Select.js.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +22 -22
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
- package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.d.ts +20 -0
- package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.d.ts.map +1 -0
- package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.js +75 -0
- package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.js.map +1 -0
- package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss.js +30 -0
- package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss.js.map +1 -0
- package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
- package/dist-lib/hooks/usePlanSingleActions.js +8 -7
- package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
- package/dist-lib/providers/drime.png +0 -0
- package/dist-lib/providers/filelu.png +0 -0
- package/dist-lib/providers/filen.png +0 -0
- package/dist-lib/providers/internxt.png +0 -0
- package/dist-lib/providers/shade.png +0 -0
- package/dist-lib/styles/core-frontend.css +1 -1
- package/dist-lib/utils/storageProviders.d.ts +40 -0
- package/dist-lib/utils/storageProviders.d.ts.map +1 -1
- package/dist-lib/utils/storageProviders.js +35 -0
- package/dist-lib/utils/storageProviders.js.map +1 -1
- package/package.json +11 -10
- package/src/components/Plan/BackupEvents/BackupEvents.module.scss +8 -0
- package/src/components/Plan/BackupEvents/BackupEvents.tsx +6 -1
- package/src/components/Plan/PlanSettings/PlanSourceSettings.tsx +1 -1
- package/src/components/Plan/PlanStats/PlanStats.tsx +1 -1
- package/src/components/Storage/AddStorage/AddStorage.tsx +7 -6
- package/src/components/Storage/StorageItem/StorageItem.tsx +9 -2
- package/src/components/common/Icon/Icon.tsx +8 -0
- package/src/components/common/form/Select/Select.tsx +1 -1
- package/src/components/common/form/StoragePicker/StoragePicker.tsx +1 -1
- package/src/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss +223 -0
- package/src/components/common/form/StorageProviderSelect/StorageProviderSelect.tsx +106 -0
- package/src/hooks/usePlanSingleActions.tsx +1 -0
- package/src/utils/storageProviders.ts +35 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as a, jsxs as t } from "react/jsx-runtime";
|
|
2
2
|
import { useState as I } from "react";
|
|
3
3
|
import s from "./Select.module.scss.js";
|
|
4
|
-
import
|
|
4
|
+
import r from "../../Icon/Icon.js";
|
|
5
5
|
import j from "../FormField/FormField.js";
|
|
6
|
-
const
|
|
6
|
+
const H = ({
|
|
7
7
|
label: b = "",
|
|
8
8
|
options: c = [],
|
|
9
9
|
description: $,
|
|
@@ -18,9 +18,9 @@ const E = ({
|
|
|
18
18
|
search: C = !1,
|
|
19
19
|
onUpdate: F
|
|
20
20
|
}) => {
|
|
21
|
-
const [n, h] = I(!1), [
|
|
21
|
+
const [n, h] = I(!1), [d, p] = I(""), f = c.length > 0 && i ? c.findIndex((e) => e.value === i) : null, l = f === -1 ? c[0] : c[f || 0], S = l && l.label ? l.label : c[0] && c[0].label || "Select Item..", z = l && l.value ? l.value : c[0] && c[0].value || "", D = l && l.image ? l.image : "", v = l && l.icon ? l.icon : "", k = (e) => {
|
|
22
22
|
F(e), h(!1);
|
|
23
|
-
}, o =
|
|
23
|
+
}, o = d ? c.filter((e) => e.label.toLowerCase().includes(d.toLowerCase())) : c;
|
|
24
24
|
return /* @__PURE__ */ a(
|
|
25
25
|
j,
|
|
26
26
|
{
|
|
@@ -37,17 +37,17 @@ const E = ({
|
|
|
37
37
|
/* @__PURE__ */ t("span", { children: [
|
|
38
38
|
D,
|
|
39
39
|
" ",
|
|
40
|
-
v && /* @__PURE__ */ a(
|
|
40
|
+
v && /* @__PURE__ */ a(r, { type: v, size: 13 }),
|
|
41
41
|
" ",
|
|
42
42
|
S
|
|
43
43
|
] }),
|
|
44
|
-
/* @__PURE__ */ a("button", { className: s.dropBtn, children: /* @__PURE__ */ a(
|
|
44
|
+
/* @__PURE__ */ a("button", { className: s.dropBtn, children: /* @__PURE__ */ a(r, { type: n ? "caret-up" : "caret-down", size: 12 }) })
|
|
45
45
|
] }),
|
|
46
46
|
n && /* @__PURE__ */ t("div", { children: [
|
|
47
47
|
C && /* @__PURE__ */ t("div", { className: s.search, children: [
|
|
48
|
-
/* @__PURE__ */ a(
|
|
49
|
-
/* @__PURE__ */ a("input", { placeholder: "Search
|
|
50
|
-
|
|
48
|
+
/* @__PURE__ */ a(r, { type: "search", size: 15 }),
|
|
49
|
+
/* @__PURE__ */ a("input", { placeholder: "Search...", value: d, onChange: (e) => p(e.target.value) }),
|
|
50
|
+
d && /* @__PURE__ */ a("button", { onClick: () => p(""), children: /* @__PURE__ */ a(r, { type: "close", size: 15 }) })
|
|
51
51
|
] }),
|
|
52
52
|
/* @__PURE__ */ t("div", { className: `${s.lists} styled__scrollbar`, children: [
|
|
53
53
|
/* @__PURE__ */ a("ul", { children: o.length > 0 && o.map((e, L) => /* @__PURE__ */ t(
|
|
@@ -56,14 +56,14 @@ const E = ({
|
|
|
56
56
|
onClick: () => !e.pro && !e.disabled && k(e.value),
|
|
57
57
|
className: `${e.value === z ? s.selectedItem : ""} ${e.disabled ? s.disabledItem : ""}`,
|
|
58
58
|
children: [
|
|
59
|
-
e.icon && /* @__PURE__ */ a(
|
|
59
|
+
e.icon && /* @__PURE__ */ a(r, { type: e.icon, size: 13 }),
|
|
60
60
|
e.image && e.image,
|
|
61
61
|
e.label
|
|
62
62
|
]
|
|
63
63
|
},
|
|
64
64
|
L
|
|
65
65
|
)) }),
|
|
66
|
-
|
|
66
|
+
d && !o && /* @__PURE__ */ a("div", { children: "No Providers Found" })
|
|
67
67
|
] })
|
|
68
68
|
] })
|
|
69
69
|
] })
|
|
@@ -71,6 +71,6 @@ const E = ({
|
|
|
71
71
|
);
|
|
72
72
|
};
|
|
73
73
|
export {
|
|
74
|
-
|
|
74
|
+
H as default
|
|
75
75
|
};
|
|
76
76
|
//# sourceMappingURL=Select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../../../../../src/components/common/form/Select/Select.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport classes from './Select.module.scss';\r\nimport Icon from '../../Icon/Icon';\r\nimport FormField from '../FormField/FormField';\r\n\r\ntype SelectOptionType = {\r\n id?: string;\r\n icon?: string;\r\n pro?: boolean;\r\n image?: JSX.Element;\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n};\r\n\r\ntype SelectProps = {\r\n label?: string;\r\n size?: 'large' | 'medium' | 'small' | 'mini';\r\n full?: boolean;\r\n inline?: boolean;\r\n description?: string;\r\n customClasses?: string;\r\n disabled?: boolean;\r\n hint?: string;\r\n error?: string;\r\n search?: boolean;\r\n fieldValue: string;\r\n options: SelectOptionType[];\r\n onUpdate: (f: string) => void;\r\n};\r\n\r\nconst Select = ({\r\n label = '',\r\n options = [],\r\n description,\r\n customClasses = '',\r\n fieldValue = '',\r\n size = 'medium',\r\n full = false,\r\n inline = false,\r\n disabled = false,\r\n hint = '',\r\n error = '',\r\n search = false,\r\n onUpdate,\r\n}: SelectProps) => {\r\n const [showDropDown, setShowDropDown] = useState(false);\r\n const [searchText, setSearchText] = useState('');\r\n\r\n const selectedItemIndex = options.length > 0 && fieldValue ? options.findIndex((x) => x.value === fieldValue) : null;\r\n const selectedItem = selectedItemIndex === -1 ? options[0] : options[selectedItemIndex || 0];\r\n const selectedItemLabel = selectedItem && selectedItem.label ? selectedItem.label : (options[0] && options[0].label) || 'Select Item..';\r\n const selectedItemValue = selectedItem && selectedItem.value ? selectedItem.value : (options[0] && options[0].value) || '';\r\n const selectedItemImage = selectedItem && selectedItem.image ? selectedItem.image : '';\r\n const selectedItemIcon = selectedItem && selectedItem.icon ? selectedItem.icon : '';\r\n\r\n const updateOption = (val: string) => {\r\n onUpdate(val);\r\n setShowDropDown(false);\r\n };\r\n\r\n const optionsItems = searchText ? options.filter((s) => s.label.toLowerCase().includes(searchText.toLowerCase())) : options;\r\n\r\n return (\r\n <FormField\r\n type=\"select\"\r\n label={label}\r\n description={description}\r\n hint={hint}\r\n error={error}\r\n required={false}\r\n inline={inline}\r\n classes={`${classes.selectField} ${classes[size]} ${full ? classes.selectFieldFull : ''} ${customClasses} ${error ? classes.fieldHasError : ''}`}\r\n >\r\n <div className={`${classes.dropdown} ${disabled ? classes.dropdownDisabled : ''}`}>\r\n <div className={classes.selected} onClick={() => setShowDropDown(!disabled ? !showDropDown : false)}>\r\n <span>\r\n {selectedItemImage} {selectedItemIcon && <Icon type={selectedItemIcon} size={13} />} {selectedItemLabel}\r\n </span>\r\n <button className={classes.dropBtn}>\r\n <Icon type={showDropDown ? 'caret-up' : 'caret-down'} size={12} />\r\n </button>\r\n </div>\r\n {showDropDown && (\r\n <div>\r\n {search && (\r\n <div className={classes.search}>\r\n <Icon type=\"search\" size={15} />\r\n <input placeholder=\"Search
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../../../../src/components/common/form/Select/Select.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport classes from './Select.module.scss';\r\nimport Icon from '../../Icon/Icon';\r\nimport FormField from '../FormField/FormField';\r\n\r\ntype SelectOptionType = {\r\n id?: string;\r\n icon?: string;\r\n pro?: boolean;\r\n image?: JSX.Element;\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n};\r\n\r\ntype SelectProps = {\r\n label?: string;\r\n size?: 'large' | 'medium' | 'small' | 'mini';\r\n full?: boolean;\r\n inline?: boolean;\r\n description?: string;\r\n customClasses?: string;\r\n disabled?: boolean;\r\n hint?: string;\r\n error?: string;\r\n search?: boolean;\r\n fieldValue: string;\r\n options: SelectOptionType[];\r\n onUpdate: (f: string) => void;\r\n};\r\n\r\nconst Select = ({\r\n label = '',\r\n options = [],\r\n description,\r\n customClasses = '',\r\n fieldValue = '',\r\n size = 'medium',\r\n full = false,\r\n inline = false,\r\n disabled = false,\r\n hint = '',\r\n error = '',\r\n search = false,\r\n onUpdate,\r\n}: SelectProps) => {\r\n const [showDropDown, setShowDropDown] = useState(false);\r\n const [searchText, setSearchText] = useState('');\r\n\r\n const selectedItemIndex = options.length > 0 && fieldValue ? options.findIndex((x) => x.value === fieldValue) : null;\r\n const selectedItem = selectedItemIndex === -1 ? options[0] : options[selectedItemIndex || 0];\r\n const selectedItemLabel = selectedItem && selectedItem.label ? selectedItem.label : (options[0] && options[0].label) || 'Select Item..';\r\n const selectedItemValue = selectedItem && selectedItem.value ? selectedItem.value : (options[0] && options[0].value) || '';\r\n const selectedItemImage = selectedItem && selectedItem.image ? selectedItem.image : '';\r\n const selectedItemIcon = selectedItem && selectedItem.icon ? selectedItem.icon : '';\r\n\r\n const updateOption = (val: string) => {\r\n onUpdate(val);\r\n setShowDropDown(false);\r\n };\r\n\r\n const optionsItems = searchText ? options.filter((s) => s.label.toLowerCase().includes(searchText.toLowerCase())) : options;\r\n\r\n return (\r\n <FormField\r\n type=\"select\"\r\n label={label}\r\n description={description}\r\n hint={hint}\r\n error={error}\r\n required={false}\r\n inline={inline}\r\n classes={`${classes.selectField} ${classes[size]} ${full ? classes.selectFieldFull : ''} ${customClasses} ${error ? classes.fieldHasError : ''}`}\r\n >\r\n <div className={`${classes.dropdown} ${disabled ? classes.dropdownDisabled : ''}`}>\r\n <div className={classes.selected} onClick={() => setShowDropDown(!disabled ? !showDropDown : false)}>\r\n <span>\r\n {selectedItemImage} {selectedItemIcon && <Icon type={selectedItemIcon} size={13} />} {selectedItemLabel}\r\n </span>\r\n <button className={classes.dropBtn}>\r\n <Icon type={showDropDown ? 'caret-up' : 'caret-down'} size={12} />\r\n </button>\r\n </div>\r\n {showDropDown && (\r\n <div>\r\n {search && (\r\n <div className={classes.search}>\r\n <Icon type=\"search\" size={15} />\r\n <input placeholder=\"Search...\" value={searchText} onChange={(e) => setSearchText(e.target.value)} />\r\n {searchText && (\r\n <button onClick={() => setSearchText('')}>\r\n <Icon type=\"close\" size={15} />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n <div className={`${classes.lists} styled__scrollbar`}>\r\n <ul>\r\n {optionsItems.length > 0 &&\r\n optionsItems.map((item, indx) => {\r\n return (\r\n <li\r\n key={indx}\r\n onClick={() => !item.pro && !item.disabled && updateOption(item.value)}\r\n className={`${item.value === selectedItemValue ? classes.selectedItem : ''} ${item.disabled ? classes.disabledItem : ''}`}\r\n >\r\n {item.icon && <Icon type={item.icon} size={13} />}\r\n {item.image && item.image}\r\n {item.label}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n {searchText && !optionsItems && <div>No Providers Found</div>}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </FormField>\r\n );\r\n};\r\n\r\nexport default Select;\r\n"],"names":["Select","label","options","description","customClasses","fieldValue","size","full","inline","disabled","hint","error","search","onUpdate","showDropDown","setShowDropDown","useState","searchText","setSearchText","selectedItemIndex","x","selectedItem","selectedItemLabel","selectedItemValue","selectedItemImage","selectedItemIcon","updateOption","val","optionsItems","s","jsx","FormField","classes","jsxs","Icon","item","indx"],"mappings":"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"}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { jsx as o, jsxs as f } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
3
|
-
import
|
|
2
|
+
import { useState as n, useMemo as O, useEffect as v } from "react";
|
|
3
|
+
import i from "./StoragePicker.module.scss.js";
|
|
4
4
|
import U from "../Select/Select.js";
|
|
5
5
|
import { useGetStorages as x } from "../../../../services/storage.js";
|
|
6
6
|
import j from "../Input/Input.js";
|
|
7
7
|
import q from "../../FolderPicker/FolderPicker.js";
|
|
8
8
|
import V from "../../Icon/Icon.js";
|
|
9
9
|
import _ from "../../../Storage/AddStorage/AddStorage.js";
|
|
10
|
-
const
|
|
11
|
-
const [e, m] =
|
|
12
|
-
label:
|
|
13
|
-
value:
|
|
10
|
+
const $ = ({ onUpdate: k, storagePath: P = "", storageId: u, disabled: r = !1, deviceId: w }) => {
|
|
11
|
+
const [e, m] = n(), [N, g] = n(!1), [y, S] = n(!1), [a, h] = n(() => P), d = (e == null ? void 0 : e.type) === "local", { data: c } = x(), s = [...(c == null ? void 0 : c.result) || []], M = O(() => s.map(({ name: l, id: p, type: F }) => ({
|
|
12
|
+
label: l,
|
|
13
|
+
value: p.toString(),
|
|
14
14
|
image: /* @__PURE__ */ o("img", { src: `/providers/${F}.png` })
|
|
15
15
|
})), [s]), A = (t) => {
|
|
16
16
|
if (console.log("storageID :", t), t === "add_new")
|
|
17
17
|
return S(!0);
|
|
18
|
-
const
|
|
19
|
-
(
|
|
18
|
+
const l = s.find((p) => p.id == t);
|
|
19
|
+
(l || t === "local") && m(l);
|
|
20
20
|
};
|
|
21
21
|
return v(() => {
|
|
22
22
|
if (s.length > 0 && u) {
|
|
23
|
-
const t = s.find((
|
|
23
|
+
const t = s.find((l) => l.id === u);
|
|
24
24
|
m(t);
|
|
25
25
|
}
|
|
26
|
-
}, [
|
|
27
|
-
e && k({ storage: e, path:
|
|
28
|
-
}, [e,
|
|
29
|
-
/* @__PURE__ */ o("div", { className:
|
|
30
|
-
/* @__PURE__ */ o("div", { className:
|
|
26
|
+
}, [c]), v(() => {
|
|
27
|
+
e && k({ storage: e, path: a });
|
|
28
|
+
}, [e, a]), /* @__PURE__ */ f("div", { className: i.storagePicker, children: [
|
|
29
|
+
/* @__PURE__ */ o("div", { className: i.storagePickerInput, children: /* @__PURE__ */ f("div", { children: [
|
|
30
|
+
/* @__PURE__ */ o("div", { className: i.storage, children: /* @__PURE__ */ o(
|
|
31
31
|
U,
|
|
32
32
|
{
|
|
33
33
|
fieldValue: e != null && e.id ? e.id : "",
|
|
@@ -41,23 +41,23 @@ const b = ({ onUpdate: k, storagePath: P = "", storageId: u, disabled: r = !1, d
|
|
|
41
41
|
disabled: r
|
|
42
42
|
}
|
|
43
43
|
) }),
|
|
44
|
-
/* @__PURE__ */ f("div", { className:
|
|
44
|
+
/* @__PURE__ */ f("div", { className: i.path, children: [
|
|
45
45
|
/* @__PURE__ */ o(
|
|
46
46
|
j,
|
|
47
47
|
{
|
|
48
48
|
disabled: r,
|
|
49
|
-
fieldValue:
|
|
49
|
+
fieldValue: a,
|
|
50
50
|
onUpdate: (t) => h(t),
|
|
51
|
-
placeholder:
|
|
51
|
+
placeholder: d ? "Select a folder" : "folder-or-bucket/subfolder",
|
|
52
52
|
full: !0,
|
|
53
|
-
required: !r &&
|
|
54
|
-
error: !r &&
|
|
53
|
+
required: !r && d,
|
|
54
|
+
error: !r && d && !a ? "Required" : ""
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
57
|
(e == null ? void 0 : e.type) && !r && e.type === "local" && /* @__PURE__ */ o(
|
|
58
58
|
"button",
|
|
59
59
|
{
|
|
60
|
-
className:
|
|
60
|
+
className: i.fileManagerBtn,
|
|
61
61
|
"data-tooltip-id": "appTooltip",
|
|
62
62
|
"data-tooltip-content": "Open FileManager to Select Directory",
|
|
63
63
|
"data-tooltip-place": "top",
|
|
@@ -72,7 +72,7 @@ const b = ({ onUpdate: k, storagePath: P = "", storageId: u, disabled: r = !1, d
|
|
|
72
72
|
{
|
|
73
73
|
deviceId: w || "main",
|
|
74
74
|
title: "Select Path",
|
|
75
|
-
selected:
|
|
75
|
+
selected: a,
|
|
76
76
|
close: () => g(!1),
|
|
77
77
|
onSelect: (t) => h(t)
|
|
78
78
|
}
|
|
@@ -81,6 +81,6 @@ const b = ({ onUpdate: k, storagePath: P = "", storageId: u, disabled: r = !1, d
|
|
|
81
81
|
] });
|
|
82
82
|
};
|
|
83
83
|
export {
|
|
84
|
-
|
|
84
|
+
$ as default
|
|
85
85
|
};
|
|
86
86
|
//# 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 };\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\r\n const { data: allStorageData } = useGetStorages();\r\n const allUserStorages = (allStorageData?.result as storageItem[]) || [];\r\n const allStorages = [...allUserStorages];\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 }\r\n }, [allStorageData]);\r\n\r\n useEffect(() => {\r\n if (selectedStorage) {\r\n onUpdate({ storage: selectedStorage, path });\r\n }\r\n }, [selectedStorage, path]);\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}>\r\n <Input\r\n disabled={disabled}\r\n fieldValue={path}\r\n onUpdate={(val) => setPath(val)}\r\n placeholder={isLocalStorage ? 'Select a folder' : `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","allStorageData","useGetStorages","allStorages","storageOptions","useMemo","name","id","type","jsx","selectStorage","storageID","theStorage","s","useEffect","currentStorage","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,SAE3C,EAAE,MAAMU,EAAA,IAAmBC,EAAA,GAE3BC,IAAc,CAAC,IADIF,KAAA,gBAAAA,EAAgB,WAA4B,CAAA,CAC9B,GAEjCG,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,aAAOd,EAAuB,EAAI;AAErC,UAAMe,IAAaT,EAAY,KAAK,CAACU,MAAMA,EAAE,MAAMF,CAAS;AAC5D,KAAIC,KAAcD,MAAc,YAC7BnB,EAAmBoB,CAAU;AAAA,EAEnC;AAEA,SAAAE,EAAU,MAAM;AACb,QAAIX,EAAY,SAAS,KAAKf,GAAW;AACtC,YAAM2B,IAAiBZ,EAAY,KAAK,CAACU,MAAMA,EAAE,OAAOzB,CAAS;AACjE,MAAAI,EAAmBuB,CAAc;AAAA,IACpC;AAAA,EACH,GAAG,CAACd,CAAc,CAAC,GAEnBa,EAAU,MAAM;AACb,IAAIvB,KACDL,EAAS,EAAE,SAASK,GAAiB,MAAAO,EAAA,CAAM;AAAA,EAEjD,GAAG,CAACP,GAAiBO,CAAI,CAAC,
|
|
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 };\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\r\n const { data: allStorageData } = useGetStorages();\r\n const allUserStorages = (allStorageData?.result as storageItem[]) || [];\r\n const allStorages = [...allUserStorages];\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 }\r\n }, [allStorageData]);\r\n\r\n useEffect(() => {\r\n if (selectedStorage) {\r\n onUpdate({ storage: selectedStorage, path });\r\n }\r\n }, [selectedStorage, path]);\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}>\r\n <Input\r\n disabled={disabled}\r\n fieldValue={path}\r\n onUpdate={(val) => setPath(val)}\r\n placeholder={isLocalStorage ? 'Select a folder' : `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","allStorageData","useGetStorages","allStorages","storageOptions","useMemo","name","id","type","jsx","selectStorage","storageID","theStorage","s","useEffect","currentStorage","jsxs","classes","Select","Input","val","Icon","FolderPicker","newVal","AddStorage"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
interface StorageProviderSelectProps {
|
|
2
|
+
label?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
full?: boolean;
|
|
5
|
+
error?: string;
|
|
6
|
+
customClasses?: string;
|
|
7
|
+
options: {
|
|
8
|
+
label: string;
|
|
9
|
+
value: string;
|
|
10
|
+
image?: JSX.Element;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
doc?: string;
|
|
13
|
+
}[];
|
|
14
|
+
fieldValue: string;
|
|
15
|
+
onUpdate: (f: string) => void;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
declare const StorageProviderSelect: ({ options, fieldValue, onUpdate, disabled, label, description, full, customClasses, error, }: StorageProviderSelectProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export default StorageProviderSelect;
|
|
20
|
+
//# sourceMappingURL=StorageProviderSelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageProviderSelect.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/form/StorageProviderSelect/StorageProviderSelect.tsx"],"names":[],"mappings":"AAIA,UAAU,0BAA0B;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnG,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,QAAA,MAAM,qBAAqB,GAAI,8FAU5B,0BAA0B,4CA6E5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { jsx as s, jsxs as t } from "react/jsx-runtime";
|
|
2
|
+
import { useState as v } from "react";
|
|
3
|
+
import n from "../../Icon/Icon.js";
|
|
4
|
+
import C from "../FormField/FormField.js";
|
|
5
|
+
import r from "./StorageProviderSelect.module.scss.js";
|
|
6
|
+
const _ = ({
|
|
7
|
+
options: o,
|
|
8
|
+
fieldValue: m,
|
|
9
|
+
onUpdate: g,
|
|
10
|
+
disabled: u,
|
|
11
|
+
label: I,
|
|
12
|
+
description: b,
|
|
13
|
+
full: f,
|
|
14
|
+
customClasses: S,
|
|
15
|
+
error: w
|
|
16
|
+
}) => {
|
|
17
|
+
const [c, h] = v(!1), [a, p] = v(""), d = o.length > 0 && m ? o.findIndex((e) => e.value === m) : null;
|
|
18
|
+
console.log("selectedItemIndex :", d);
|
|
19
|
+
const l = d === -1 || d === null ? null : o[d || 0], $ = l && l.label ? l.label : "Select Storage Provider..", x = l && l.value ? l.value : "", N = l && l.image ? l.image : "", k = (e) => {
|
|
20
|
+
g(e), h(!1);
|
|
21
|
+
}, i = a ? o.filter((e) => e.label.toLowerCase().includes(a.toLowerCase())) : o;
|
|
22
|
+
return /* @__PURE__ */ s(
|
|
23
|
+
C,
|
|
24
|
+
{
|
|
25
|
+
type: "select",
|
|
26
|
+
label: I,
|
|
27
|
+
description: b,
|
|
28
|
+
required: !1,
|
|
29
|
+
error: w,
|
|
30
|
+
classes: `${r.storageProviderSelectField} ${f ? r.storageProviderSelectFieldFull : ""} ${S}`,
|
|
31
|
+
children: /* @__PURE__ */ t("div", { className: `${r.dropdown} ${c ? r.dropdownOpen : ""} ${u ? r.dropdownDisabled : ""}`, children: [
|
|
32
|
+
l && /* @__PURE__ */ s("div", { className: r.docLink, children: /* @__PURE__ */ t("a", { href: `https://docs.usepluton.com/docs/${l.doc}`, target: "_blank", rel: "noopener noreferrer", children: [
|
|
33
|
+
/* @__PURE__ */ s(n, { type: "link", size: 12 }),
|
|
34
|
+
" ",
|
|
35
|
+
l.label,
|
|
36
|
+
" Setup Guide"
|
|
37
|
+
] }) }),
|
|
38
|
+
/* @__PURE__ */ t("div", { className: r.selected, onClick: () => h(u ? !1 : !c), children: [
|
|
39
|
+
/* @__PURE__ */ t("span", { children: [
|
|
40
|
+
N,
|
|
41
|
+
" ",
|
|
42
|
+
$
|
|
43
|
+
] }),
|
|
44
|
+
/* @__PURE__ */ s("button", { className: r.dropBtn, children: /* @__PURE__ */ s(n, { type: c ? "caret-up" : "caret-down", size: 12 }) })
|
|
45
|
+
] }),
|
|
46
|
+
c && /* @__PURE__ */ t("div", { children: [
|
|
47
|
+
/* @__PURE__ */ t("div", { className: r.search, children: [
|
|
48
|
+
/* @__PURE__ */ s(n, { type: "search", size: 15 }),
|
|
49
|
+
/* @__PURE__ */ s("input", { placeholder: "Search Storage Providers...", value: a, onChange: (e) => p(e.target.value) }),
|
|
50
|
+
a && /* @__PURE__ */ s("button", { onClick: () => p(""), children: /* @__PURE__ */ s(n, { type: "close", size: 15 }) })
|
|
51
|
+
] }),
|
|
52
|
+
/* @__PURE__ */ t("div", { className: `${r.lists} styled__scrollbar`, children: [
|
|
53
|
+
/* @__PURE__ */ s("ul", { children: i.length > 0 && i.map((e, y) => /* @__PURE__ */ t(
|
|
54
|
+
"li",
|
|
55
|
+
{
|
|
56
|
+
onClick: () => !e.disabled && k(e.value),
|
|
57
|
+
className: `${e.value === x ? r.selectedItem : ""} ${e.disabled ? r.disabledItem : ""}`,
|
|
58
|
+
children: [
|
|
59
|
+
e.image && e.image,
|
|
60
|
+
e.label
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
y
|
|
64
|
+
)) }),
|
|
65
|
+
a && !i && /* @__PURE__ */ s("div", { children: "No Providers Found" })
|
|
66
|
+
] })
|
|
67
|
+
] })
|
|
68
|
+
] })
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
export {
|
|
73
|
+
_ as default
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=StorageProviderSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageProviderSelect.js","sources":["../../../../../src/components/common/form/StorageProviderSelect/StorageProviderSelect.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { FormField, Icon } from '../../..';\r\nimport classes from './StorageProviderSelect.module.scss';\r\n\r\ninterface StorageProviderSelectProps {\r\n label?: string;\r\n description?: string;\r\n full?: boolean;\r\n error?: string;\r\n customClasses?: string;\r\n options: { label: string; value: string; image?: JSX.Element; disabled?: boolean; doc?: string }[];\r\n fieldValue: string;\r\n onUpdate: (f: string) => void;\r\n disabled?: boolean;\r\n}\r\n\r\nconst StorageProviderSelect = ({\r\n options,\r\n fieldValue,\r\n onUpdate,\r\n disabled,\r\n label,\r\n description,\r\n full,\r\n customClasses,\r\n error,\r\n}: StorageProviderSelectProps) => {\r\n const [showDropDown, setShowDropDown] = useState(false);\r\n const [searchText, setSearchText] = useState('');\r\n const selectedItemIndex = options.length > 0 && fieldValue ? options.findIndex((x) => x.value === fieldValue) : null;\r\n console.log('selectedItemIndex :', selectedItemIndex);\r\n const selectedItem = selectedItemIndex === -1 || selectedItemIndex === null ? null : options[selectedItemIndex || 0];\r\n const selectedItemLabel = selectedItem && selectedItem.label ? selectedItem.label : 'Select Storage Provider..';\r\n const selectedItemValue = selectedItem && selectedItem.value ? selectedItem.value : '';\r\n const selectedItemImage = selectedItem && selectedItem.image ? selectedItem.image : '';\r\n\r\n const updateOption = (val: string) => {\r\n onUpdate(val);\r\n setShowDropDown(false);\r\n };\r\n\r\n const optionsItems = searchText ? options.filter((s) => s.label.toLowerCase().includes(searchText.toLowerCase())) : options;\r\n\r\n return (\r\n <FormField\r\n type=\"select\"\r\n label={label}\r\n description={description}\r\n required={false}\r\n error={error}\r\n classes={`${classes.storageProviderSelectField} ${full ? classes.storageProviderSelectFieldFull : ''} ${customClasses}`}\r\n >\r\n <div className={`${classes.dropdown} ${showDropDown ? classes.dropdownOpen : ''} ${disabled ? classes.dropdownDisabled : ''}`}>\r\n {selectedItem && (\r\n <div className={classes.docLink}>\r\n <a href={`https://docs.usepluton.com/docs/${selectedItem.doc}`} target=\"_blank\" rel=\"noopener noreferrer\">\r\n <Icon type=\"link\" size={12} /> {selectedItem.label} Setup Guide\r\n </a>\r\n </div>\r\n )}\r\n <div className={classes.selected} onClick={() => setShowDropDown(!disabled ? !showDropDown : false)}>\r\n <span>\r\n {selectedItemImage} {selectedItemLabel}\r\n </span>\r\n <button className={classes.dropBtn}>\r\n <Icon type={showDropDown ? 'caret-up' : 'caret-down'} size={12} />\r\n </button>\r\n </div>\r\n {showDropDown && (\r\n <div>\r\n <div className={classes.search}>\r\n <Icon type=\"search\" size={15} />\r\n <input placeholder=\"Search Storage Providers...\" value={searchText} onChange={(e) => setSearchText(e.target.value)} />\r\n {searchText && (\r\n <button onClick={() => setSearchText('')}>\r\n <Icon type=\"close\" size={15} />\r\n </button>\r\n )}\r\n </div>\r\n\r\n <div className={`${classes.lists} styled__scrollbar`}>\r\n <ul>\r\n {optionsItems.length > 0 &&\r\n optionsItems.map((item, indx) => {\r\n return (\r\n <li\r\n key={indx}\r\n onClick={() => !item.disabled && updateOption(item.value)}\r\n className={`${item.value === selectedItemValue ? classes.selectedItem : ''} ${item.disabled ? classes.disabledItem : ''}`}\r\n >\r\n {item.image && item.image}\r\n {item.label}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n {searchText && !optionsItems && <div>No Providers Found</div>}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </FormField>\r\n );\r\n};\r\n\r\nexport default StorageProviderSelect;\r\n"],"names":["StorageProviderSelect","options","fieldValue","onUpdate","disabled","label","description","full","customClasses","error","showDropDown","setShowDropDown","useState","searchText","setSearchText","selectedItemIndex","x","selectedItem","selectedItemLabel","selectedItemValue","selectedItemImage","updateOption","val","optionsItems","s","jsx","FormField","classes","jsxs","Icon","item","indx"],"mappings":"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"}
|
package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const e = "_storageProviderSelectField_xzGlm", d = "_search_e8aeW", o = "_docLink_Uft52", t = "_dropdown_GF2fR", s = "_selected_M3Fsg", l = "_dropBtn_JHURZ", r = "_lists_K6e6a", c = "_disabledItem_PQWtF", n = "_selectedItem_c8Kdb", i = "_dropdownDisabled_JKtjx", _ = "_dropdownOpen_Hm4Ns", a = "_storageProviderSelectFieldFull_ZbZPD", p = {
|
|
2
|
+
storageProviderSelectField: e,
|
|
3
|
+
search: d,
|
|
4
|
+
docLink: o,
|
|
5
|
+
dropdown: t,
|
|
6
|
+
selected: s,
|
|
7
|
+
dropBtn: l,
|
|
8
|
+
lists: r,
|
|
9
|
+
disabledItem: c,
|
|
10
|
+
selectedItem: n,
|
|
11
|
+
dropdownDisabled: i,
|
|
12
|
+
dropdownOpen: _,
|
|
13
|
+
storageProviderSelectFieldFull: a
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
p as default,
|
|
17
|
+
c as disabledItem,
|
|
18
|
+
o as docLink,
|
|
19
|
+
l as dropBtn,
|
|
20
|
+
t as dropdown,
|
|
21
|
+
i as dropdownDisabled,
|
|
22
|
+
_ as dropdownOpen,
|
|
23
|
+
r as lists,
|
|
24
|
+
d as search,
|
|
25
|
+
s as selected,
|
|
26
|
+
n as selectedItem,
|
|
27
|
+
e as storageProviderSelectField,
|
|
28
|
+
a as storageProviderSelectFieldFull
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=StorageProviderSelect.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageProviderSelect.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;
|
|
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;CAwHxB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { useParams as U, useNavigate as C } from "react-router";
|
|
|
3
3
|
import { toast as n } from "react-toastify";
|
|
4
4
|
import { usePerformBackup as I, usePausePlan as N, useResumePlan as D, useGetPlan as F } from "../services/plans.js";
|
|
5
5
|
const J = () => {
|
|
6
|
-
const [m, f] = o(!1), [k, h] = o(!1), [w, S] = o(!1), [B, M] = o(!1), [y, E] = o(!1), { id: $ } = U(), b = C(), l = I(), p = N(), d = D(), { data: a, isLoading: R, refetch: v, error: A } = F($), s = (a == null ? void 0 : a.result) || {}, r = s.method === "sync", c = [...s.backups || []].sort((e, t) => t.started - e.started),
|
|
6
|
+
const [m, f] = o(!1), [k, h] = o(!1), [w, S] = o(!1), [B, M] = o(!1), [y, E] = o(!1), { id: $ } = U(), b = C(), l = I(), p = N(), d = D(), { data: a, isLoading: R, refetch: v, error: A } = F($), s = (a == null ? void 0 : a.result) || {}, r = s.method === "sync", c = [...s.backups || []].sort((e, t) => t.started - e.started), u = c.filter((e) => e.inProgress), g = (s.restores || []).filter((e) => e.status === "started"), L = c[0], P = u.length > 0 || g.length > 0, i = p.isPending || d.isPending || l.isPending;
|
|
7
7
|
return {
|
|
8
8
|
// State
|
|
9
9
|
showDeleteModal: m,
|
|
@@ -21,17 +21,17 @@ const J = () => {
|
|
|
21
21
|
isLoading: R,
|
|
22
22
|
refetchPlan: v,
|
|
23
23
|
sortedHistory: c,
|
|
24
|
-
activeBackups:
|
|
24
|
+
activeBackups: u,
|
|
25
25
|
activeRestores: g,
|
|
26
26
|
lastBackupItem: L,
|
|
27
27
|
actionInProgress: P,
|
|
28
|
-
taskPending:
|
|
28
|
+
taskPending: i,
|
|
29
29
|
planError: A,
|
|
30
30
|
// Actions
|
|
31
31
|
changeStatus: () => {
|
|
32
|
-
if (
|
|
32
|
+
if (u.length > 0)
|
|
33
33
|
return n.error("Can't pause a Plan while a Backup is in progress.");
|
|
34
|
-
s.inProgress ||
|
|
34
|
+
s.inProgress || i || (s.isActive ? n.promise(p.mutateAsync(s.id), {
|
|
35
35
|
pending: "Pausing backup Plan...",
|
|
36
36
|
success: "Backup Plan Paused",
|
|
37
37
|
error: {
|
|
@@ -52,7 +52,7 @@ const J = () => {
|
|
|
52
52
|
backupNow: () => {
|
|
53
53
|
if (P)
|
|
54
54
|
return n.error("A Backup/Restore Process is in Progress.");
|
|
55
|
-
if (
|
|
55
|
+
if (i)
|
|
56
56
|
return;
|
|
57
57
|
const e = n.loading(`Starting ${r ? "Sync" : "Backup"}...`);
|
|
58
58
|
l.mutate(s.id, {
|
|
@@ -69,7 +69,8 @@ const J = () => {
|
|
|
69
69
|
render: `${r ? "Sync" : "Backup"} failed to start. ${(t == null ? void 0 : t.message) || "Unknown Error."}`,
|
|
70
70
|
type: "error",
|
|
71
71
|
isLoading: !1,
|
|
72
|
-
autoClose: !1
|
|
72
|
+
autoClose: !1,
|
|
73
|
+
closeButton: !0
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
76
|
});
|
|
@@ -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.status === 'started');\r\n const lastBackupItem = 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: () => {\r\n toast.update(toastId, {\r\n render: `${isSync ? 'Sync' : 'Backup'} initiated successfully! 🚀`,\r\n type: 'success',\r\n isLoading: false,\r\n autoClose: 3000,\r\n });\r\n navigate(`/plan/${plan.id}?pendingbackup=1`);\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 });\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":";;;;AAQO,MAAMA,IAAuB,MAuB/B;AACF,QAAM,CAACC,GAAiBC,CAAkB,IAAIC,EAAS,EAAK,GACtD,CAACC,GAAeC,CAAgB,IAAIF,EAAS,EAAK,GAClD,CAACG,GAAiBC,CAAkB,IAAIJ,EAAS,EAAK,GACtD,CAACK,GAAgBC,CAAiB,IAAIN,EAAS,EAAK,GACpD,CAACO,GAAeC,CAAgB,IAAIR,EAAS,EAAK,GAElD,EAAE,IAAAS,EAAA,IAAOC,EAAA,GACTC,IAAWC,EAAA,GAEXC,IAAwBC,EAAA,GACxBC,IAAgBC,EAAA,GAChBC,IAAiBC,EAAA,GAEjB,EAAE,MAAAC,GAAM,WAAAC,GAAW,SAASC,GAAa,OAAOC,EAAA,IAAcC,EAAWd,CAAY,GACrFe,KAAaL,KAAA,gBAAAA,EAAM,WAAU,CAAA,GAE7BM,IAASD,EAAK,WAAW,QAEzBE,IAAgB,CAAC,GAAIF,EAAK,WAAW,CAAA,CAAG,EAAE,KAAK,CAACG,GAAGC,MAAMA,EAAE,UAAUD,EAAE,OAAO,GAC9EE,IAAgBH,EAAc,OAAO,CAACI,MAAMA,EAAE,UAAU,GACxDC,KAAkBP,EAAK,YAAY,CAAA,GAAI,OAAO,CAACM,MAAMA,EAAE,WAAW,SAAS,GAC3EE,IAAiBN,EAAc,CAAC,GAChCO,IAAmBJ,EAAc,SAAS,KAAKE,EAAe,SAAS,GACvEG,IAAcnB,EAAc,aAAaE,EAAe,aAAaJ,EAAsB;
|
|
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.status === 'started');\r\n const lastBackupItem = 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: () => {\r\n toast.update(toastId, {\r\n render: `${isSync ? 'Sync' : 'Backup'} initiated successfully! 🚀`,\r\n type: 'success',\r\n isLoading: false,\r\n autoClose: 3000,\r\n });\r\n navigate(`/plan/${plan.id}?pendingbackup=1`);\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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"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|