@plutonhq/core-frontend 0.1.20 → 0.1.22
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/Storage/AddStorage/AddStorage.module.scss.js +42 -26
- package/dist-lib/components/Storage/AddStorage/AddStorage.module.scss.js.map +1 -1
- package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.d.ts.map +1 -1
- package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.js +119 -53
- package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.js.map +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.d.ts.map +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.js +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.js.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts +1 -0
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +57 -51
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.module.scss.js +8 -4
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.module.scss.js.map +1 -1
- package/dist-lib/services/storage.d.ts +10 -0
- package/dist-lib/services/storage.d.ts.map +1 -1
- package/dist-lib/services/storage.js +55 -20
- package/dist-lib/services/storage.js.map +1 -1
- package/dist-lib/services.js +55 -52
- package/dist-lib/styles/core-frontend.css +1 -1
- package/package.json +1 -1
- package/src/components/Storage/AddStorage/AddStorage.module.scss +74 -0
- package/src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx +136 -3
- package/src/components/Storage/StorageItem/StorageItem.tsx +0 -1
- package/src/components/common/form/StoragePicker/StoragePicker.module.scss +27 -0
- package/src/components/common/form/StoragePicker/StoragePicker.tsx +19 -5
- package/src/services/storage.ts +49 -0
|
@@ -1,34 +1,50 @@
|
|
|
1
|
-
const t = "
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const t = "_addStorage_OIwtX", o = "_loader_hFNvR", n = "_field_vxLnx", e = "_fieldErrorLabel_JQpkc", a = "_label_JAV7R", c = "_input_30oZl", r = "_inputHasError_mu8Ps", s = "_storageType_9j8NF", u = "_createButton_N2zgD", _ = "_advancedOptions_Vi5K5", d = "_advancedButton_O4koz", i = "_advancedButtonActive_cxq7u", h = "_authSettings_BE6ir", l = "_oauthDoc_8suty", B = "_codeBlock_tpOVA", p = "_oauthContainer_eLxGx", v = "_success_ZETFH", g = "_error_mS7QY", A = "_oauthButton_MhjWw", E = "_oauthAuthorizeBtn_mw4J6", f = "_oauthInnerBtn_5DQud", x = "_oauthProgress_9x8Q3", S = {
|
|
2
|
+
addStorage: t,
|
|
3
|
+
loader: o,
|
|
4
|
+
field: n,
|
|
4
5
|
fieldErrorLabel: e,
|
|
5
6
|
label: a,
|
|
6
|
-
input:
|
|
7
|
-
inputHasError:
|
|
8
|
-
storageType:
|
|
9
|
-
createButton:
|
|
10
|
-
advancedOptions:
|
|
11
|
-
advancedButton:
|
|
12
|
-
advancedButtonActive:
|
|
13
|
-
authSettings:
|
|
14
|
-
oauthDoc:
|
|
15
|
-
codeBlock:
|
|
7
|
+
input: c,
|
|
8
|
+
inputHasError: r,
|
|
9
|
+
storageType: s,
|
|
10
|
+
createButton: u,
|
|
11
|
+
advancedOptions: _,
|
|
12
|
+
advancedButton: d,
|
|
13
|
+
advancedButtonActive: i,
|
|
14
|
+
authSettings: h,
|
|
15
|
+
oauthDoc: l,
|
|
16
|
+
codeBlock: B,
|
|
17
|
+
oauthContainer: p,
|
|
18
|
+
success: v,
|
|
19
|
+
error: g,
|
|
20
|
+
oauthButton: A,
|
|
21
|
+
oauthAuthorizeBtn: E,
|
|
22
|
+
oauthInnerBtn: f,
|
|
23
|
+
oauthProgress: x
|
|
16
24
|
};
|
|
17
25
|
export {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
t as addStorage,
|
|
27
|
+
d as advancedButton,
|
|
28
|
+
i as advancedButtonActive,
|
|
29
|
+
_ as advancedOptions,
|
|
30
|
+
h as authSettings,
|
|
31
|
+
B as codeBlock,
|
|
32
|
+
u as createButton,
|
|
33
|
+
S as default,
|
|
34
|
+
g as error,
|
|
35
|
+
n as field,
|
|
26
36
|
e as fieldErrorLabel,
|
|
27
|
-
|
|
28
|
-
|
|
37
|
+
c as input,
|
|
38
|
+
r as inputHasError,
|
|
29
39
|
a as label,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
o as loader,
|
|
41
|
+
E as oauthAuthorizeBtn,
|
|
42
|
+
A as oauthButton,
|
|
43
|
+
p as oauthContainer,
|
|
44
|
+
l as oauthDoc,
|
|
45
|
+
f as oauthInnerBtn,
|
|
46
|
+
x as oauthProgress,
|
|
47
|
+
s as storageType,
|
|
48
|
+
v as success
|
|
33
49
|
};
|
|
34
50
|
//# sourceMappingURL=AddStorage.module.scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddStorage.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AddStorage.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAuthSettings.d.ts","sourceRoot":"","sources":["../../../../src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"StorageAuthSettings.d.ts","sourceRoot":"","sources":["../../../../src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAO9D,UAAU,wBAAwB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,WAAW,EAAE,wBAAwB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACtE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAID,QAAA,MAAM,mBAAmB,GAAI,oGAS1B,wBAAwB,4CAgO1B,CAAC;AACF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,92 +1,158 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as u, useEffect as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { jsxs as t, jsx as e, Fragment as D } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u, useRef as F, useEffect as U, useCallback as y } from "react";
|
|
3
|
+
import R from "../../common/form/Tristate/Tristate.js";
|
|
4
|
+
import i from "../../common/Icon/Icon.js";
|
|
5
|
+
import o from "../AddStorage/AddStorage.module.scss.js";
|
|
6
|
+
import $ from "../StorageSettings/StorageSettings.js";
|
|
7
|
+
import { startStorageAuthorize as L, getStorageAuthorizeStatus as j, cancelStorageAuthorize as q } from "../../../services/storage.js";
|
|
8
|
+
const M = ({
|
|
9
|
+
storageType: m,
|
|
10
|
+
fields: S,
|
|
11
|
+
settings: g,
|
|
12
|
+
authTypes: a,
|
|
13
|
+
currentAuthType: l,
|
|
14
|
+
errors: O,
|
|
15
|
+
onUpdate: w,
|
|
16
|
+
onAuthTypeChange: b
|
|
16
17
|
}) => {
|
|
17
|
-
const [
|
|
18
|
-
|
|
19
|
-
!
|
|
20
|
-
}, [
|
|
21
|
-
|
|
18
|
+
const [p, B] = u(!0), [k, _] = u(!1), [s, c] = u("idle"), [A, N] = u(null), [I, v] = u(null), [E, f] = u(null), d = F(null), C = window.plutonInstallType, z = C === "binary" || C === "dev";
|
|
19
|
+
console.log("availableAuthTypes :", S, a, l), U(() => {
|
|
20
|
+
!l && a.length > 0 && b(a[0]);
|
|
21
|
+
}, [a, l, b]), U(() => () => {
|
|
22
|
+
d.current && clearInterval(d.current);
|
|
23
|
+
}, []);
|
|
24
|
+
const h = y(() => {
|
|
25
|
+
d.current && (clearInterval(d.current), d.current = null);
|
|
26
|
+
}, []), P = y(async () => {
|
|
27
|
+
c("authorizing"), v(null), f(null);
|
|
28
|
+
try {
|
|
29
|
+
const { sessionId: n } = await L(m);
|
|
30
|
+
N(n), d.current = setInterval(async () => {
|
|
31
|
+
try {
|
|
32
|
+
const r = await j(n);
|
|
33
|
+
r.authUrl && v(r.authUrl), r.status === "success" && r.token ? (h(), c("success"), w({ ...g, token: r.token })) : r.status === "error" && (h(), c("error"), f(r.error || "Authorization failed"));
|
|
34
|
+
} catch (r) {
|
|
35
|
+
h(), c("error"), f((r == null ? void 0 : r.message) || "Failed to check authorization status");
|
|
36
|
+
}
|
|
37
|
+
}, 2e3);
|
|
38
|
+
} catch (n) {
|
|
39
|
+
c("error"), f((n == null ? void 0 : n.message) || "Failed to start authorization");
|
|
40
|
+
}
|
|
41
|
+
}, [m, g, w, h]), x = y(async () => {
|
|
42
|
+
if (h(), A)
|
|
43
|
+
try {
|
|
44
|
+
await q(A);
|
|
45
|
+
} catch {
|
|
46
|
+
}
|
|
47
|
+
c("idle"), N(null), v(null), f(null);
|
|
48
|
+
}, [A, h]);
|
|
49
|
+
return /* @__PURE__ */ t("div", { className: o.authSettings, children: [
|
|
50
|
+
/* @__PURE__ */ t(
|
|
22
51
|
"div",
|
|
23
52
|
{
|
|
24
|
-
className: `${
|
|
25
|
-
onClick: () =>
|
|
53
|
+
className: `${o.advancedButton} ${p ? o.advancedButtonActive : ""}`,
|
|
54
|
+
onClick: () => B(!p),
|
|
26
55
|
children: [
|
|
27
|
-
/* @__PURE__ */ e(
|
|
28
|
-
/* @__PURE__ */ e("span", { children:
|
|
29
|
-
/* @__PURE__ */ e(
|
|
56
|
+
/* @__PURE__ */ e(i, { type: "authentication", size: 14 }),
|
|
57
|
+
/* @__PURE__ */ e("span", { children: m === "local" ? "Local Storage Setup" : "Account Authentication" }),
|
|
58
|
+
/* @__PURE__ */ e(i, { type: p ? "caret-up" : "caret-down" })
|
|
30
59
|
]
|
|
31
60
|
}
|
|
32
61
|
),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
62
|
+
p && /* @__PURE__ */ t("div", { className: o.advancedOptions, children: [
|
|
63
|
+
p && a.length > 1 && /* @__PURE__ */ e("div", { className: o.field, children: /* @__PURE__ */ e(
|
|
64
|
+
R,
|
|
36
65
|
{
|
|
37
66
|
label: "Authentication Type",
|
|
38
67
|
inline: !0,
|
|
39
|
-
fieldValue:
|
|
68
|
+
fieldValue: l,
|
|
40
69
|
options: [
|
|
41
|
-
{ label: "User (oAuth)", value: "oauth", disabled:
|
|
42
|
-
{ label: "User/Pass", value: "password", disabled:
|
|
43
|
-
{ label: "App/Client", value: "client", disabled:
|
|
70
|
+
{ label: "User (oAuth)", value: "oauth", disabled: a.includes("oauth") === !1 },
|
|
71
|
+
{ label: "User/Pass", value: "password", disabled: a.includes("password") === !1 },
|
|
72
|
+
{ label: "App/Client", value: "client", disabled: a.includes("client") === !1 }
|
|
44
73
|
],
|
|
45
74
|
hint: `User (oAuth): Use the generated Link to login to your account and authorize the App.
|
|
46
75
|
Username/Password: Your own Username/Password will be used to backup.
|
|
47
76
|
App/Client: Provide App/Client keys that can be found in your cloud storage account dashboard`,
|
|
48
|
-
onUpdate: (
|
|
77
|
+
onUpdate: (n) => b(n)
|
|
49
78
|
}
|
|
50
79
|
) }),
|
|
51
80
|
/* @__PURE__ */ e(
|
|
52
|
-
|
|
81
|
+
$,
|
|
53
82
|
{
|
|
54
|
-
fields:
|
|
55
|
-
settings:
|
|
56
|
-
onUpdate: (
|
|
57
|
-
errors:
|
|
83
|
+
fields: S.filter((n) => n.authFieldType === l),
|
|
84
|
+
settings: g,
|
|
85
|
+
onUpdate: (n) => w(n),
|
|
86
|
+
errors: O
|
|
58
87
|
}
|
|
59
88
|
),
|
|
60
|
-
|
|
61
|
-
/* @__PURE__ */
|
|
62
|
-
|
|
89
|
+
l === "oauth" && z && s === "idle" && /* @__PURE__ */ e("div", { className: o.oauthButton, children: /* @__PURE__ */ t("button", { className: o.oauthAuthorizeBtn, onClick: P, children: [
|
|
90
|
+
/* @__PURE__ */ e(i, { type: "key", size: 14 }),
|
|
91
|
+
" Authorize & Get Access Token"
|
|
92
|
+
] }) }),
|
|
93
|
+
l === "oauth" && z && s !== "idle" && /* @__PURE__ */ t("div", { className: `${o.oauthContainer} ${o[s]}`, children: [
|
|
94
|
+
s === "authorizing" && /* @__PURE__ */ t("div", { className: o.oauthProgress, children: [
|
|
95
|
+
/* @__PURE__ */ t("p", { children: [
|
|
96
|
+
/* @__PURE__ */ e("strong", { children: "Waiting for authorization..." }),
|
|
97
|
+
/* @__PURE__ */ e("br", {}),
|
|
98
|
+
"A browser window should have opened. Please authorize the connection in your browser."
|
|
99
|
+
] }),
|
|
100
|
+
I && /* @__PURE__ */ t("p", { children: [
|
|
101
|
+
"If the browser didn't open automatically,",
|
|
102
|
+
" ",
|
|
103
|
+
/* @__PURE__ */ e("a", { href: I, target: "_blank", rel: "noopener noreferrer", children: "click here to authorize" }),
|
|
104
|
+
"."
|
|
105
|
+
] }),
|
|
106
|
+
/* @__PURE__ */ e("button", { className: o.oauthInnerBtn, onClick: x, children: "Cancel" })
|
|
107
|
+
] }),
|
|
108
|
+
s === "success" && /* @__PURE__ */ e("div", { className: o.oauthProgress, children: /* @__PURE__ */ t("p", { children: [
|
|
109
|
+
/* @__PURE__ */ e(i, { type: "check", size: 14 }),
|
|
110
|
+
" ",
|
|
111
|
+
/* @__PURE__ */ e("strong", { children: "Authorization successful!" }),
|
|
112
|
+
" Token has been automatically filled in."
|
|
113
|
+
] }) }),
|
|
114
|
+
s === "error" && /* @__PURE__ */ t("div", { className: o.oauthProgress, children: [
|
|
115
|
+
/* @__PURE__ */ t("p", { children: [
|
|
116
|
+
/* @__PURE__ */ e("strong", { children: "Authorization failed:" }),
|
|
117
|
+
" ",
|
|
118
|
+
E
|
|
119
|
+
] }),
|
|
120
|
+
/* @__PURE__ */ t("button", { className: o.oauthInnerBtn, onClick: P, children: [
|
|
121
|
+
/* @__PURE__ */ e(i, { type: "key", size: 14 }),
|
|
122
|
+
" Try Again"
|
|
123
|
+
] })
|
|
124
|
+
] })
|
|
125
|
+
] }),
|
|
126
|
+
l === "oauth" && !z && /* @__PURE__ */ t("div", { className: o.oauthDoc, children: [
|
|
127
|
+
/* @__PURE__ */ t("h4", { onClick: () => _(!k), children: [
|
|
128
|
+
/* @__PURE__ */ e(i, { type: "key", size: 14 }),
|
|
63
129
|
" Acquiring the OAuth Access Token",
|
|
64
|
-
/* @__PURE__ */ e("button", { children: /* @__PURE__ */ e(
|
|
130
|
+
/* @__PURE__ */ e("button", { children: /* @__PURE__ */ e(i, { type: k ? "caret-up" : "caret-down" }) })
|
|
65
131
|
] }),
|
|
66
|
-
|
|
67
|
-
/* @__PURE__ */
|
|
132
|
+
k && /* @__PURE__ */ t(D, { children: [
|
|
133
|
+
/* @__PURE__ */ t("p", { children: [
|
|
68
134
|
/* @__PURE__ */ e("strong", { children: "Step 1:" }),
|
|
69
135
|
" On a machine with a browser,",
|
|
70
136
|
" ",
|
|
71
137
|
/* @__PURE__ */ e("a", { href: "https://rclone.org/downloads/", target: "_blank", children: "install rclone" }),
|
|
72
138
|
" ",
|
|
73
139
|
"and execute this command in the CLI: ",
|
|
74
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ t("code", { className: o.codeBlock, children: [
|
|
75
141
|
"rclone authorize ",
|
|
76
|
-
|
|
142
|
+
m
|
|
77
143
|
] })
|
|
78
144
|
] }),
|
|
79
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ t("p", { children: [
|
|
80
146
|
/* @__PURE__ */ e("strong", { children: "Step 2:" }),
|
|
81
147
|
" A browser window will open where you will need to authorize Rclone to connect to your",
|
|
82
148
|
" ",
|
|
83
|
-
|
|
149
|
+
m,
|
|
84
150
|
" account. Authorize the connection."
|
|
85
151
|
] }),
|
|
86
|
-
/* @__PURE__ */
|
|
152
|
+
/* @__PURE__ */ t("p", { children: [
|
|
87
153
|
/* @__PURE__ */ e("strong", { children: "Step 3:" }),
|
|
88
154
|
" Once authorized, the cli where you ran the command, should display a message similar to this:",
|
|
89
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ t("code", { className: o.codeBlock, children: [
|
|
90
156
|
"Paste the following into your remote machine --->",
|
|
91
157
|
/* @__PURE__ */ e("strong", { children: '{"access_token":"....","token_type":"bearer...}' }),
|
|
92
158
|
"<---End paste"
|
|
@@ -99,13 +165,13 @@ const P = ({
|
|
|
99
165
|
" ",
|
|
100
166
|
/* @__PURE__ */ e("code", { children: '{"access_token":"....","token_type":"bearer...}' })
|
|
101
167
|
] }),
|
|
102
|
-
/* @__PURE__ */
|
|
168
|
+
/* @__PURE__ */ t("p", { children: [
|
|
103
169
|
/* @__PURE__ */ e("strong", { children: "Step 4:" }),
|
|
104
170
|
" Paste the copied content in the ",
|
|
105
171
|
/* @__PURE__ */ e("strong", { children: "OAuth Access Token" }),
|
|
106
172
|
" field above."
|
|
107
173
|
] }),
|
|
108
|
-
/* @__PURE__ */
|
|
174
|
+
/* @__PURE__ */ t("p", { children: [
|
|
109
175
|
/* @__PURE__ */ e("strong", { children: "Step 5:" }),
|
|
110
176
|
" If you no longer need Rclone, you can safely remove it from your system."
|
|
111
177
|
] })
|
|
@@ -115,6 +181,6 @@ const P = ({
|
|
|
115
181
|
] });
|
|
116
182
|
};
|
|
117
183
|
export {
|
|
118
|
-
|
|
184
|
+
M as default
|
|
119
185
|
};
|
|
120
186
|
//# sourceMappingURL=StorageAuthSettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAuthSettings.js","sources":["../../../../src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\r\nimport { storageOptionField } from '../../../@types/storages';\r\nimport Tristate from '../../common/form/Tristate/Tristate';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from '../AddStorage/AddStorage.module.scss';\r\nimport StorageSettings from '../StorageSettings/StorageSettings';\r\n\r\ninterface StorageAuthSettingsProps {\r\n storageType: string;\r\n fields: storageOptionField[];\r\n settings: Record<string, string | number | boolean>;\r\n authTypes: string[];\r\n errors: Record<string, string>;\r\n currentAuthType: string;\r\n onUpdate: (newSettings: StorageAuthSettingsProps['settings']) => void;\r\n onAuthTypeChange: (authType: string) => void;\r\n}\r\n\r\nconst StorageAuthSettings = ({\r\n storageType,\r\n fields,\r\n settings,\r\n authTypes,\r\n currentAuthType,\r\n errors,\r\n onUpdate,\r\n onAuthTypeChange,\r\n}: StorageAuthSettingsProps) => {\r\n const [showAdvanced, setShowAdvanced] = useState(true);\r\n const [showOAuthDoc, setShowOAuthDoc] = useState(false);\r\n\r\n console.log('availableAuthTypes :', fields, authTypes, currentAuthType);\r\n\r\n useEffect(() => {\r\n if (!currentAuthType && authTypes.length > 0) {\r\n onAuthTypeChange(authTypes[0]);\r\n }\r\n }, [authTypes, currentAuthType, onAuthTypeChange]);\r\n\r\n return (\r\n <div className={classes.authSettings}>\r\n <div\r\n className={`${classes.advancedButton} ${showAdvanced ? classes.advancedButtonActive : ''}`}\r\n onClick={() => setShowAdvanced(!showAdvanced)}\r\n >\r\n <Icon type={'authentication'} size={14} />\r\n <span>{storageType === 'local' ? 'Local Storage Setup' : 'Account Authentication'}</span>\r\n <Icon type={showAdvanced ? 'caret-up' : 'caret-down'} />\r\n </div>\r\n {showAdvanced && (\r\n <div className={classes.advancedOptions}>\r\n {showAdvanced && authTypes.length > 1 && (\r\n <div className={classes.field}>\r\n <Tristate\r\n label={'Authentication Type'}\r\n inline={true}\r\n fieldValue={currentAuthType}\r\n options={[\r\n { label: 'User (oAuth)', value: 'oauth', disabled: authTypes.includes('oauth') === false },\r\n { label: 'User/Pass', value: 'password', disabled: authTypes.includes('password') === false },\r\n { label: 'App/Client', value: 'client', disabled: authTypes.includes('client') === false },\r\n ]}\r\n hint={\r\n 'User (oAuth): Use the generated Link to login to your account and authorize the App.\\n Username/Password: Your own Username/Password will be used to backup. \\n App/Client: Provide App/Client keys that can be found in your cloud storage account dashboard'\r\n }\r\n onUpdate={(newVal: string) => onAuthTypeChange(newVal)}\r\n />\r\n </div>\r\n )}\r\n\r\n <StorageSettings\r\n fields={fields.filter((f) => f.authFieldType === currentAuthType)}\r\n settings={settings}\r\n onUpdate={(newSettings) => onUpdate(newSettings)}\r\n errors={errors}\r\n />\r\n {currentAuthType === 'oauth' && (\r\n <div className={classes.oauthDoc}>\r\n <h4 onClick={() => setShowOAuthDoc(!showOAuthDoc)}>\r\n <Icon type={'key'} size={14} /> Acquiring the OAuth Access Token\r\n <button>\r\n <Icon type={showOAuthDoc ? 'caret-up' : 'caret-down'} />\r\n </button>\r\n </h4>\r\n {showOAuthDoc && (\r\n <>\r\n <p>\r\n <strong>Step 1:</strong> On a machine with a browser,{' '}\r\n <a href=\"https://rclone.org/downloads/\" target=\"_blank\">\r\n install rclone\r\n </a>{' '}\r\n and execute this command in the CLI: <code className={classes.codeBlock}>rclone authorize {storageType}</code>\r\n </p>\r\n <p>\r\n <strong>Step 2:</strong> A browser window will open where you will need to authorize Rclone to connect to your{' '}\r\n {storageType} account. Authorize the connection.\r\n </p>\r\n <p>\r\n <strong>Step 3:</strong> Once authorized, the cli where you ran the command, should display a message similar to this:\r\n <code className={classes.codeBlock}>\r\n {`Paste the following into your remote machine --->`}\r\n <strong>{`{\"access_token\":\"....\",\"token_type\":\"bearer...}`}</strong>\r\n {`<---End paste`}\r\n </code>\r\n Copy everything between <code>{`--->`}</code> and <code>{`<---`}</code>. Eg:{' '}\r\n <code>{`{\"access_token\":\"....\",\"token_type\":\"bearer...}`}</code>\r\n </p>\r\n <p>\r\n <strong>Step 4:</strong> Paste the copied content in the <strong>OAuth Access Token</strong> field above.\r\n </p>\r\n <p>\r\n <strong>Step 5:</strong> If you no longer need Rclone, you can safely remove it from your system.\r\n </p>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default StorageAuthSettings;\r\n"],"names":["StorageAuthSettings","storageType","fields","settings","authTypes","currentAuthType","errors","onUpdate","onAuthTypeChange","showAdvanced","setShowAdvanced","useState","showOAuthDoc","setShowOAuthDoc","useEffect","jsxs","classes","jsx","Icon","Tristate","newVal","StorageSettings","f","newSettings","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StorageAuthSettings.js","sources":["../../../../src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\r\nimport { storageOptionField } from '../../../@types/storages';\r\nimport Tristate from '../../common/form/Tristate/Tristate';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from '../AddStorage/AddStorage.module.scss';\r\nimport StorageSettings from '../StorageSettings/StorageSettings';\r\nimport { startStorageAuthorize, getStorageAuthorizeStatus, cancelStorageAuthorize } from '../../../services/storage';\r\n\r\ninterface StorageAuthSettingsProps {\r\n storageType: string;\r\n fields: storageOptionField[];\r\n settings: Record<string, string | number | boolean>;\r\n authTypes: string[];\r\n errors: Record<string, string>;\r\n currentAuthType: string;\r\n onUpdate: (newSettings: StorageAuthSettingsProps['settings']) => void;\r\n onAuthTypeChange: (authType: string) => void;\r\n}\r\n\r\ntype OAuthStatus = 'idle' | 'authorizing' | 'success' | 'error';\r\n\r\nconst StorageAuthSettings = ({\r\n storageType,\r\n fields,\r\n settings,\r\n authTypes,\r\n currentAuthType,\r\n errors,\r\n onUpdate,\r\n onAuthTypeChange,\r\n}: StorageAuthSettingsProps) => {\r\n const [showAdvanced, setShowAdvanced] = useState(true);\r\n const [showOAuthDoc, setShowOAuthDoc] = useState(false);\r\n\r\n // OAuth auto-authorize state\r\n const [oauthStatus, setOauthStatus] = useState<OAuthStatus>('idle');\r\n const [authSessionId, setAuthSessionId] = useState<string | null>(null);\r\n const [authUrl, setAuthUrl] = useState<string | null>(null);\r\n const [authError, setAuthError] = useState<string | null>(null);\r\n const pollingRef = useRef<ReturnType<typeof setInterval> | null>(null);\r\n\r\n const installType = (window as any).plutonInstallType;\r\n const isDesktop = installType === 'binary' || installType === 'dev';\r\n\r\n console.log('availableAuthTypes :', fields, authTypes, currentAuthType);\r\n\r\n useEffect(() => {\r\n if (!currentAuthType && authTypes.length > 0) {\r\n onAuthTypeChange(authTypes[0]);\r\n }\r\n }, [authTypes, currentAuthType, onAuthTypeChange]);\r\n\r\n // Cleanup polling on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (pollingRef.current) {\r\n clearInterval(pollingRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n const stopPolling = useCallback(() => {\r\n if (pollingRef.current) {\r\n clearInterval(pollingRef.current);\r\n pollingRef.current = null;\r\n }\r\n }, []);\r\n\r\n const startOAuthAuthorize = useCallback(async () => {\r\n setOauthStatus('authorizing');\r\n setAuthUrl(null);\r\n setAuthError(null);\r\n\r\n try {\r\n const { sessionId } = await startStorageAuthorize(storageType);\r\n setAuthSessionId(sessionId);\r\n\r\n // Start polling every 2 seconds\r\n pollingRef.current = setInterval(async () => {\r\n try {\r\n const result = await getStorageAuthorizeStatus(sessionId);\r\n\r\n if (result.authUrl) {\r\n setAuthUrl(result.authUrl);\r\n }\r\n\r\n if (result.status === 'success' && result.token) {\r\n stopPolling();\r\n setOauthStatus('success');\r\n onUpdate({ ...settings, token: result.token });\r\n } else if (result.status === 'error') {\r\n stopPolling();\r\n setOauthStatus('error');\r\n setAuthError(result.error || 'Authorization failed');\r\n }\r\n } catch (err: any) {\r\n stopPolling();\r\n setOauthStatus('error');\r\n setAuthError(err?.message || 'Failed to check authorization status');\r\n }\r\n }, 2000);\r\n } catch (err: any) {\r\n setOauthStatus('error');\r\n setAuthError(err?.message || 'Failed to start authorization');\r\n }\r\n }, [storageType, settings, onUpdate, stopPolling]);\r\n\r\n const handleCancelAuthorize = useCallback(async () => {\r\n stopPolling();\r\n if (authSessionId) {\r\n try {\r\n await cancelStorageAuthorize(authSessionId);\r\n } catch {\r\n // Ignore cancel errors\r\n }\r\n }\r\n setOauthStatus('idle');\r\n setAuthSessionId(null);\r\n setAuthUrl(null);\r\n setAuthError(null);\r\n }, [authSessionId, stopPolling]);\r\n\r\n return (\r\n <div className={classes.authSettings}>\r\n <div\r\n className={`${classes.advancedButton} ${showAdvanced ? classes.advancedButtonActive : ''}`}\r\n onClick={() => setShowAdvanced(!showAdvanced)}\r\n >\r\n <Icon type={'authentication'} size={14} />\r\n <span>{storageType === 'local' ? 'Local Storage Setup' : 'Account Authentication'}</span>\r\n <Icon type={showAdvanced ? 'caret-up' : 'caret-down'} />\r\n </div>\r\n {showAdvanced && (\r\n <div className={classes.advancedOptions}>\r\n {showAdvanced && authTypes.length > 1 && (\r\n <div className={classes.field}>\r\n <Tristate\r\n label={'Authentication Type'}\r\n inline={true}\r\n fieldValue={currentAuthType}\r\n options={[\r\n { label: 'User (oAuth)', value: 'oauth', disabled: authTypes.includes('oauth') === false },\r\n { label: 'User/Pass', value: 'password', disabled: authTypes.includes('password') === false },\r\n { label: 'App/Client', value: 'client', disabled: authTypes.includes('client') === false },\r\n ]}\r\n hint={\r\n 'User (oAuth): Use the generated Link to login to your account and authorize the App.\\n Username/Password: Your own Username/Password will be used to backup. \\n App/Client: Provide App/Client keys that can be found in your cloud storage account dashboard'\r\n }\r\n onUpdate={(newVal: string) => onAuthTypeChange(newVal)}\r\n />\r\n </div>\r\n )}\r\n <StorageSettings\r\n fields={fields.filter((f) => f.authFieldType === currentAuthType)}\r\n settings={settings}\r\n onUpdate={(newSettings) => onUpdate(newSettings)}\r\n errors={errors}\r\n />\r\n\r\n {currentAuthType === 'oauth' && isDesktop && oauthStatus === 'idle' && (\r\n <div className={classes.oauthButton}>\r\n <button className={classes.oauthAuthorizeBtn} onClick={startOAuthAuthorize}>\r\n <Icon type={'key'} size={14} /> Authorize & Get Access Token\r\n </button>\r\n </div>\r\n )}\r\n\r\n {currentAuthType === 'oauth' && isDesktop && oauthStatus !== 'idle' && (\r\n <div className={`${classes.oauthContainer} ${classes[oauthStatus]}`}>\r\n {oauthStatus === 'authorizing' && (\r\n <div className={classes.oauthProgress}>\r\n <p>\r\n <strong>Waiting for authorization...</strong>\r\n <br />A browser window should have opened. Please authorize the connection in your browser.\r\n </p>\r\n {authUrl && (\r\n <p>\r\n If the browser didn't open automatically,{' '}\r\n <a href={authUrl} target=\"_blank\" rel=\"noopener noreferrer\">\r\n click here to authorize\r\n </a>\r\n .\r\n </p>\r\n )}\r\n <button className={classes.oauthInnerBtn} onClick={handleCancelAuthorize}>\r\n Cancel\r\n </button>\r\n </div>\r\n )}\r\n {oauthStatus === 'success' && (\r\n <div className={classes.oauthProgress}>\r\n <p>\r\n <Icon type={'check'} size={14} /> <strong>Authorization successful!</strong> Token has been automatically filled in.\r\n </p>\r\n </div>\r\n )}\r\n {oauthStatus === 'error' && (\r\n <div className={classes.oauthProgress}>\r\n <p>\r\n <strong>Authorization failed:</strong> {authError}\r\n </p>\r\n <button className={classes.oauthInnerBtn} onClick={startOAuthAuthorize}>\r\n <Icon type={'key'} size={14} /> Try Again\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {currentAuthType === 'oauth' && !isDesktop && (\r\n <div className={classes.oauthDoc}>\r\n <h4 onClick={() => setShowOAuthDoc(!showOAuthDoc)}>\r\n <Icon type={'key'} size={14} /> Acquiring the OAuth Access Token\r\n <button>\r\n <Icon type={showOAuthDoc ? 'caret-up' : 'caret-down'} />\r\n </button>\r\n </h4>\r\n {showOAuthDoc && (\r\n <>\r\n <p>\r\n <strong>Step 1:</strong> On a machine with a browser,{' '}\r\n <a href=\"https://rclone.org/downloads/\" target=\"_blank\">\r\n install rclone\r\n </a>{' '}\r\n and execute this command in the CLI: <code className={classes.codeBlock}>rclone authorize {storageType}</code>\r\n </p>\r\n <p>\r\n <strong>Step 2:</strong> A browser window will open where you will need to authorize Rclone to connect to your{' '}\r\n {storageType} account. Authorize the connection.\r\n </p>\r\n <p>\r\n <strong>Step 3:</strong> Once authorized, the cli where you ran the command, should display a message similar to this:\r\n <code className={classes.codeBlock}>\r\n {`Paste the following into your remote machine --->`}\r\n <strong>{`{\"access_token\":\"....\",\"token_type\":\"bearer...}`}</strong>\r\n {`<---End paste`}\r\n </code>\r\n Copy everything between <code>{`--->`}</code> and <code>{`<---`}</code>. Eg:{' '}\r\n <code>{`{\"access_token\":\"....\",\"token_type\":\"bearer...}`}</code>\r\n </p>\r\n <p>\r\n <strong>Step 4:</strong> Paste the copied content in the <strong>OAuth Access Token</strong> field above.\r\n </p>\r\n <p>\r\n <strong>Step 5:</strong> If you no longer need Rclone, you can safely remove it from your system.\r\n </p>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default StorageAuthSettings;\r\n"],"names":["StorageAuthSettings","storageType","fields","settings","authTypes","currentAuthType","errors","onUpdate","onAuthTypeChange","showAdvanced","setShowAdvanced","useState","showOAuthDoc","setShowOAuthDoc","oauthStatus","setOauthStatus","authSessionId","setAuthSessionId","authUrl","setAuthUrl","authError","setAuthError","pollingRef","useRef","installType","isDesktop","useEffect","stopPolling","useCallback","startOAuthAuthorize","sessionId","startStorageAuthorize","result","getStorageAuthorizeStatus","err","handleCancelAuthorize","cancelStorageAuthorize","jsxs","classes","jsx","Icon","Tristate","newVal","StorageSettings","f","newSettings","Fragment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageItem.d.ts","sourceRoot":"","sources":["../../../../src/components/Storage/StorageItem/StorageItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,UAAU,gBAAgB;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,QAAA,MAAM,WAAW,GAAI,qBAAqB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"StorageItem.d.ts","sourceRoot":"","sources":["../../../../src/components/Storage/StorageItem/StorageItem.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,UAAU,gBAAgB;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,QAAA,MAAM,WAAW,GAAI,qBAAqB,gBAAgB,4CA0IzD,CAAC;AACF,eAAe,WAAW,CAAC"}
|
|
@@ -16,7 +16,7 @@ const K = ({ storage: n, layout: C }) => {
|
|
|
16
16
|
console.log("error :", r == null ? void 0 : r.message), z.error(r.message || "Error Removing Storage!");
|
|
17
17
|
},
|
|
18
18
|
onSuccess: (r) => {
|
|
19
|
-
console.log("Success :", r), z.success("Removed Storage Successfully!", { autoClose: 5e3 })
|
|
19
|
+
console.log("Success :", r), z.success("Removed Storage Successfully!", { autoClose: 5e3 });
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageItem.js","sources":["../../../../src/components/Storage/StorageItem/StorageItem.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './StorageItem.module.scss';\r\nimport { Storage } from '../../../@types/storages';\r\nimport { formatBytes } from '../../../utils/helpers';\r\nimport EditStorage from '../EditStorage/EditStorage';\r\nimport Modal from '../../common/Modal/Modal';\r\nimport { useDeleteStorage, useVerifyStorage } from '../../../services/storage';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\n\r\ninterface StorageItemProps {\r\n storage: Storage;\r\n layout: 'list' | 'grid';\r\n}\r\n\r\nconst StorageItem = ({ storage, layout }: StorageItemProps) => {\r\n const [showSettings, setShowSettings] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showVerifyModal, setShowVerifyModal] = useState(false);\r\n const { id, name, type, plans = [], usedSize = 200, storageTypeName, settings = {} } = storage;\r\n const deleteStorageMutation = useDeleteStorage();\r\n const verifyStorageMutation = useVerifyStorage();\r\n const isLocalStorage = id === 'local';\r\n const description = settings.description as string;\r\n\r\n const removeStorage = () => {\r\n deleteStorageMutation.mutate(storage.id, {\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(error.message || `Error Removing Storage!`);\r\n },\r\n onSuccess: (data: any) => {\r\n console.log('Success :', data);\r\n toast.success(`Removed Storage Successfully!`, { autoClose: 5000 });\r\n close();\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <div\r\n key={id}\r\n className={`${classes.storage} ${layout === 'grid' ? classes.storageGrid : classes.storageList} ${showEditModal || showDeleteModal || showVerifyModal ? classes.storageEditing : ''}`}\r\n >\r\n <div className={classes.leftContent}>\r\n <div className={classes.storageType}>\r\n <img src={`providers/${type}.png`} />\r\n </div>\r\n\r\n <div className={classes.content}>\r\n <div className={classes.title} onClick={() => !isLocalStorage && setShowEditModal(true)}>\r\n <h4>{name}</h4>\r\n {description && (\r\n <i className={classes.planDescription} data-tooltip-id=\"appTooltip\" data-tooltip-content={description} data-tooltip-place=\"top\">\r\n <Icon type=\"note\" size={13} />\r\n </i>\r\n )}\r\n {isLocalStorage && <Icon type=\"lock\" size={14} />}\r\n </div>\r\n <div>{storageTypeName}</div>\r\n </div>\r\n </div>\r\n <div className={classes.rightContent}>\r\n <div className={classes.info}>\r\n <Icon type=\"backup\" size={14} /> <i>{plans.length} Plans</i>\r\n </div>\r\n <div className={classes.info}>\r\n <Icon type=\"disk\" size={14} /> <i>{formatBytes(usedSize)}</i>\r\n </div>\r\n <button\r\n className={`${classes.moreBtn} ${showSettings ? classes.moreBtnActive : ''}`}\r\n onClick={() => setShowSettings(!showSettings)}\r\n disabled={isLocalStorage}\r\n >\r\n <Icon type=\"dots-vertical\" size={14} />\r\n </button>\r\n </div>\r\n {showSettings && (\r\n <div className={classes.settings}>\r\n {!isLocalStorage && (\r\n <>\r\n <button\r\n onClick={() => {\r\n setShowEditModal(true);\r\n setShowSettings(false);\r\n }}\r\n >\r\n <Icon type=\"edit-settings\" size={14} /> Edit\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowVerifyModal(true);\r\n setShowSettings(false);\r\n verifyStorageMutation.mutate(storage.id);\r\n }}\r\n >\r\n <Icon type=\"verify\" size={14} /> Verify\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowDeleteModal(true);\r\n setShowSettings(false);\r\n }}\r\n >\r\n <Icon type=\"trash\" size={14} /> Remove\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n {showEditModal && <EditStorage close={() => setShowEditModal(false)} storage={storage} />}\r\n {showVerifyModal && (\r\n <Modal\r\n title={`Verifying Storage \"${storage.name}\"`}\r\n closeModal={() => !verifyStorageMutation.isPending && setShowVerifyModal(false)}\r\n width=\"600px\"\r\n >\r\n <div className={classes.verifyModalContent}>\r\n {verifyStorageMutation.isPending && (\r\n <>\r\n <Icon type=\"loading\" size={16} /> Verifying Remote Storage Connection...\r\n </>\r\n )}\r\n {verifyStorageMutation.isSuccess && (\r\n <>\r\n <Icon type=\"check\" color=\"teal\" size={14} /> Verification Successful! This Remote Storage Connection is Working Perfectly!\r\n </>\r\n )}\r\n {verifyStorageMutation.isError && (\r\n <>\r\n <Icon type=\"error\" color=\"indianred\" size={16} /> Error Verifying Remote Storage Connection!{' '}\r\n {verifyStorageMutation.error?.toString() || ''}\r\n </>\r\n )}\r\n </div>\r\n </Modal>\r\n )}\r\n {showDeleteModal && (\r\n <ActionModal\r\n title={`Remove Storage`}\r\n message={<>{`Are you sure you want to delete this Storage?`}</>}\r\n closeModal={() => setShowDeleteModal(false)}\r\n primaryAction={{\r\n title: `Yes, Remove Storage`,\r\n type: 'danger',\r\n icon: 'trash',\r\n isPending: deleteStorageMutation.isPending,\r\n action: () => removeStorage(),\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default StorageItem;\r\n"],"names":["StorageItem","storage","layout","showSettings","setShowSettings","useState","showEditModal","setShowEditModal","showDeleteModal","setShowDeleteModal","showVerifyModal","setShowVerifyModal","id","name","type","plans","usedSize","storageTypeName","settings","deleteStorageMutation","useDeleteStorage","verifyStorageMutation","useVerifyStorage","isLocalStorage","description","removeStorage","error","toast","data","jsxs","classes","jsx","Icon","formatBytes","Fragment","EditStorage","Modal","_a","ActionModal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StorageItem.js","sources":["../../../../src/components/Storage/StorageItem/StorageItem.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './StorageItem.module.scss';\r\nimport { Storage } from '../../../@types/storages';\r\nimport { formatBytes } from '../../../utils/helpers';\r\nimport EditStorage from '../EditStorage/EditStorage';\r\nimport Modal from '../../common/Modal/Modal';\r\nimport { useDeleteStorage, useVerifyStorage } from '../../../services/storage';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\n\r\ninterface StorageItemProps {\r\n storage: Storage;\r\n layout: 'list' | 'grid';\r\n}\r\n\r\nconst StorageItem = ({ storage, layout }: StorageItemProps) => {\r\n const [showSettings, setShowSettings] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showVerifyModal, setShowVerifyModal] = useState(false);\r\n const { id, name, type, plans = [], usedSize = 200, storageTypeName, settings = {} } = storage;\r\n const deleteStorageMutation = useDeleteStorage();\r\n const verifyStorageMutation = useVerifyStorage();\r\n const isLocalStorage = id === 'local';\r\n const description = settings.description as string;\r\n\r\n const removeStorage = () => {\r\n deleteStorageMutation.mutate(storage.id, {\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(error.message || `Error Removing Storage!`);\r\n },\r\n onSuccess: (data: any) => {\r\n console.log('Success :', data);\r\n toast.success(`Removed Storage Successfully!`, { autoClose: 5000 });\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <div\r\n key={id}\r\n className={`${classes.storage} ${layout === 'grid' ? classes.storageGrid : classes.storageList} ${showEditModal || showDeleteModal || showVerifyModal ? classes.storageEditing : ''}`}\r\n >\r\n <div className={classes.leftContent}>\r\n <div className={classes.storageType}>\r\n <img src={`providers/${type}.png`} />\r\n </div>\r\n\r\n <div className={classes.content}>\r\n <div className={classes.title} onClick={() => !isLocalStorage && setShowEditModal(true)}>\r\n <h4>{name}</h4>\r\n {description && (\r\n <i className={classes.planDescription} data-tooltip-id=\"appTooltip\" data-tooltip-content={description} data-tooltip-place=\"top\">\r\n <Icon type=\"note\" size={13} />\r\n </i>\r\n )}\r\n {isLocalStorage && <Icon type=\"lock\" size={14} />}\r\n </div>\r\n <div>{storageTypeName}</div>\r\n </div>\r\n </div>\r\n <div className={classes.rightContent}>\r\n <div className={classes.info}>\r\n <Icon type=\"backup\" size={14} /> <i>{plans.length} Plans</i>\r\n </div>\r\n <div className={classes.info}>\r\n <Icon type=\"disk\" size={14} /> <i>{formatBytes(usedSize)}</i>\r\n </div>\r\n <button\r\n className={`${classes.moreBtn} ${showSettings ? classes.moreBtnActive : ''}`}\r\n onClick={() => setShowSettings(!showSettings)}\r\n disabled={isLocalStorage}\r\n >\r\n <Icon type=\"dots-vertical\" size={14} />\r\n </button>\r\n </div>\r\n {showSettings && (\r\n <div className={classes.settings}>\r\n {!isLocalStorage && (\r\n <>\r\n <button\r\n onClick={() => {\r\n setShowEditModal(true);\r\n setShowSettings(false);\r\n }}\r\n >\r\n <Icon type=\"edit-settings\" size={14} /> Edit\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowVerifyModal(true);\r\n setShowSettings(false);\r\n verifyStorageMutation.mutate(storage.id);\r\n }}\r\n >\r\n <Icon type=\"verify\" size={14} /> Verify\r\n </button>\r\n <button\r\n onClick={() => {\r\n setShowDeleteModal(true);\r\n setShowSettings(false);\r\n }}\r\n >\r\n <Icon type=\"trash\" size={14} /> Remove\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n )}\r\n {showEditModal && <EditStorage close={() => setShowEditModal(false)} storage={storage} />}\r\n {showVerifyModal && (\r\n <Modal\r\n title={`Verifying Storage \"${storage.name}\"`}\r\n closeModal={() => !verifyStorageMutation.isPending && setShowVerifyModal(false)}\r\n width=\"600px\"\r\n >\r\n <div className={classes.verifyModalContent}>\r\n {verifyStorageMutation.isPending && (\r\n <>\r\n <Icon type=\"loading\" size={16} /> Verifying Remote Storage Connection...\r\n </>\r\n )}\r\n {verifyStorageMutation.isSuccess && (\r\n <>\r\n <Icon type=\"check\" color=\"teal\" size={14} /> Verification Successful! This Remote Storage Connection is Working Perfectly!\r\n </>\r\n )}\r\n {verifyStorageMutation.isError && (\r\n <>\r\n <Icon type=\"error\" color=\"indianred\" size={16} /> Error Verifying Remote Storage Connection!{' '}\r\n {verifyStorageMutation.error?.toString() || ''}\r\n </>\r\n )}\r\n </div>\r\n </Modal>\r\n )}\r\n {showDeleteModal && (\r\n <ActionModal\r\n title={`Remove Storage`}\r\n message={<>{`Are you sure you want to delete this Storage?`}</>}\r\n closeModal={() => setShowDeleteModal(false)}\r\n primaryAction={{\r\n title: `Yes, Remove Storage`,\r\n type: 'danger',\r\n icon: 'trash',\r\n isPending: deleteStorageMutation.isPending,\r\n action: () => removeStorage(),\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default StorageItem;\r\n"],"names":["StorageItem","storage","layout","showSettings","setShowSettings","useState","showEditModal","setShowEditModal","showDeleteModal","setShowDeleteModal","showVerifyModal","setShowVerifyModal","id","name","type","plans","usedSize","storageTypeName","settings","deleteStorageMutation","useDeleteStorage","verifyStorageMutation","useVerifyStorage","isLocalStorage","description","removeStorage","error","toast","data","jsxs","classes","jsx","Icon","formatBytes","Fragment","EditStorage","Modal","_a","ActionModal"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoragePicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/form/StoragePicker/StoragePicker.tsx"],"names":[],"mappings":"AASA,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"StoragePicker.d.ts","sourceRoot":"","sources":["../../../../../src/components/common/form/StoragePicker/StoragePicker.tsx"],"names":[],"mappings":"AASA,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,UAAU,kBAAkB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAClE;AAED,QAAA,MAAM,aAAa,GAAI,0DAAuE,kBAAkB,4CAiH/G,CAAC;AAEF,eAAe,aAAa,CAAC"}
|