@plutonhq/core-frontend 0.1.29 → 0.1.30
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/PlanForm/PlanForm.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.js +20 -11
- package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts +2 -1
- package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js +28 -21
- package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts +2 -1
- package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js +21 -20
- package/dist-lib/components/Plan/PlanSettings/PlanGeneralSettings.js.map +1 -1
- package/dist-lib/components/common/form/Toggle/Toggle.d.ts +2 -1
- package/dist-lib/components/common/form/Toggle/Toggle.d.ts.map +1 -1
- package/dist-lib/components/common/form/Toggle/Toggle.js +21 -11
- package/dist-lib/components/common/form/Toggle/Toggle.js.map +1 -1
- package/dist-lib/components/common/form/Toggle/Toggle.module.scss.js +6 -4
- package/dist-lib/components/common/form/Toggle/Toggle.module.scss.js.map +1 -1
- package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
- package/dist-lib/hooks/usePlanSingleActions.js +34 -33
- package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
- package/dist-lib/styles/core-frontend.css +1 -1
- package/package.json +1 -1
- package/src/components/Plan/PlanForm/PlanForm.tsx +7 -1
- package/src/components/Plan/PlanSettings/PlanAdvancedSettings.tsx +7 -2
- package/src/components/Plan/PlanSettings/PlanGeneralSettings.tsx +3 -1
- package/src/components/common/form/Toggle/Toggle.module.scss +7 -0
- package/src/components/common/form/Toggle/Toggle.tsx +14 -3
- package/src/hooks/usePlanSingleActions.tsx +4 -2
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
import { useState as r } from "react";
|
|
2
|
-
import { useParams as
|
|
2
|
+
import { useParams as I, useNavigate as N } from "react-router";
|
|
3
3
|
import { toast as t } from "react-toastify";
|
|
4
|
-
import { usePerformBackup as
|
|
5
|
-
const
|
|
6
|
-
const [
|
|
4
|
+
import { usePerformBackup as D, usePausePlan as F, useResumePlan as x, useGetPlan as G } from "../services/plans.js";
|
|
5
|
+
const O = () => {
|
|
6
|
+
const [k, d] = r(!1), [h, w] = r(!1), [S, B] = r(!1), [y, M] = r(!1), [E, $] = r(!1), { id: b } = I(), R = N(), a = D(), p = F(), g = x(), { data: i, isLoading: v, refetch: A, error: L } = G(b), n = (i == null ? void 0 : i.result) || {}, o = n.method === "sync", c = [...n.backups || []].sort((e, s) => s.started - e.started), u = c.filter((e) => e.inProgress), m = (n.restores || []).filter((e) => e.inProgress), U = o ? c.filter((e) => e.status === "completed")[0] : c[0], P = u.length > 0 || m.length > 0, l = p.isPending || g.isPending || a.isPending;
|
|
7
7
|
return {
|
|
8
8
|
// State
|
|
9
|
-
showDeleteModal:
|
|
10
|
-
setShowDeleteModal:
|
|
11
|
-
showEditModal:
|
|
12
|
-
setShowEditModal:
|
|
13
|
-
showPruneModal:
|
|
9
|
+
showDeleteModal: k,
|
|
10
|
+
setShowDeleteModal: d,
|
|
11
|
+
showEditModal: h,
|
|
12
|
+
setShowEditModal: w,
|
|
13
|
+
showPruneModal: y,
|
|
14
14
|
setShowPruneModal: M,
|
|
15
|
-
showLogsModal:
|
|
16
|
-
setShowLogsModal:
|
|
17
|
-
showUnlockModal:
|
|
18
|
-
setShowUnlockModal:
|
|
15
|
+
showLogsModal: E,
|
|
16
|
+
setShowLogsModal: $,
|
|
17
|
+
showUnlockModal: S,
|
|
18
|
+
setShowUnlockModal: B,
|
|
19
19
|
// Data
|
|
20
|
-
plan:
|
|
21
|
-
isLoading:
|
|
22
|
-
refetchPlan:
|
|
23
|
-
sortedHistory:
|
|
24
|
-
activeBackups:
|
|
25
|
-
activeRestores:
|
|
26
|
-
lastBackupItem:
|
|
20
|
+
plan: n,
|
|
21
|
+
isLoading: v,
|
|
22
|
+
refetchPlan: A,
|
|
23
|
+
sortedHistory: c,
|
|
24
|
+
activeBackups: u,
|
|
25
|
+
activeRestores: m,
|
|
26
|
+
lastBackupItem: U,
|
|
27
27
|
actionInProgress: P,
|
|
28
|
-
taskPending:
|
|
29
|
-
planError:
|
|
28
|
+
taskPending: l,
|
|
29
|
+
planError: L,
|
|
30
30
|
// Actions
|
|
31
31
|
changeStatus: () => {
|
|
32
|
-
if (
|
|
32
|
+
if (u.length > 0)
|
|
33
33
|
return t.error("Can't pause a Plan while a Backup is in progress.");
|
|
34
|
-
|
|
34
|
+
n.inProgress || l || (n.isActive ? t.promise(p.mutateAsync(n.id), {
|
|
35
35
|
pending: "Pausing backup Plan...",
|
|
36
36
|
success: "Backup Plan Paused",
|
|
37
37
|
error: {
|
|
@@ -39,7 +39,7 @@ const J = () => {
|
|
|
39
39
|
return `Failed to Pause Backup Plan. ${(e == null ? void 0 : e.message) || "Unknown Error."}`;
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
}) : t.promise(
|
|
42
|
+
}) : t.promise(g.mutateAsync(n.id), {
|
|
43
43
|
pending: "Resuming backup Plan...",
|
|
44
44
|
success: "Backup Plan Resumed",
|
|
45
45
|
error: {
|
|
@@ -52,21 +52,22 @@ const J = () => {
|
|
|
52
52
|
backupNow: () => {
|
|
53
53
|
if (P)
|
|
54
54
|
return t.error("A Backup/Restore Process is in Progress.");
|
|
55
|
-
if (
|
|
55
|
+
if (l)
|
|
56
56
|
return;
|
|
57
57
|
const e = t.loading(`Starting ${o ? "Sync" : "Backup"}...`);
|
|
58
|
-
|
|
59
|
-
onSuccess: (
|
|
58
|
+
a.mutate(n.id, {
|
|
59
|
+
onSuccess: (s) => {
|
|
60
|
+
const C = (s == null ? void 0 : s.message) || `${o ? "Sync" : "Backup"} initiated successfully! 🚀`, f = !o && (s == null ? void 0 : s.message) && (s == null ? void 0 : s.message.includes("reached the concurrency limit"));
|
|
60
61
|
t.update(e, {
|
|
61
|
-
render: o ?
|
|
62
|
+
render: o ? C : f ? s == null ? void 0 : s.message : "Backup initiated successfully!",
|
|
62
63
|
type: "success",
|
|
63
64
|
isLoading: !1,
|
|
64
65
|
autoClose: 3e3
|
|
65
|
-
}), o
|
|
66
|
+
}), !o && !f && R(`/plan/${n.id}?pendingbackup=1`);
|
|
66
67
|
},
|
|
67
|
-
onError: (
|
|
68
|
+
onError: (s) => {
|
|
68
69
|
t.update(e, {
|
|
69
|
-
render: `${o ? "Sync" : "Backup"} failed to start. ${(
|
|
70
|
+
render: `${o ? "Sync" : "Backup"} failed to start. ${(s == null ? void 0 : s.message) || "Unknown Error."}`,
|
|
70
71
|
type: "error",
|
|
71
72
|
isLoading: !1,
|
|
72
73
|
autoClose: !1,
|
|
@@ -78,6 +79,6 @@ const J = () => {
|
|
|
78
79
|
};
|
|
79
80
|
};
|
|
80
81
|
export {
|
|
81
|
-
|
|
82
|
+
O as usePlanSingleActions
|
|
82
83
|
};
|
|
83
84
|
//# sourceMappingURL=usePlanSingleActions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlanSingleActions.js","sources":["../../src/hooks/usePlanSingleActions.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\nimport { useGetPlan, usePausePlan, usePerformBackup, useResumePlan } from '../services/plans';\r\nimport { Plan } from '../@types/plans';\r\nimport { Backup } from '../@types/backups';\r\nimport { RestoreSlim } from '../@types/restores';\r\n\r\nexport const usePlanSingleActions = (): {\r\n showDeleteModal: boolean;\r\n setShowDeleteModal: (show: boolean) => void;\r\n showEditModal: boolean;\r\n setShowEditModal: (show: boolean) => void;\r\n showPruneModal: boolean;\r\n setShowPruneModal: (show: boolean) => void;\r\n showLogsModal: boolean;\r\n setShowLogsModal: (show: boolean) => void;\r\n showUnlockModal: boolean;\r\n setShowUnlockModal: (show: boolean) => void;\r\n plan: Plan;\r\n isLoading: boolean;\r\n refetchPlan: () => void;\r\n sortedHistory: Backup[];\r\n activeBackups: Backup[];\r\n activeRestores: RestoreSlim[];\r\n lastBackupItem: Backup;\r\n actionInProgress: boolean;\r\n taskPending: boolean;\r\n planError: any;\r\n changeStatus: () => void;\r\n backupNow: () => void;\r\n} => {\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showUnlockModal, setShowUnlockModal] = useState(false);\r\n const [showPruneModal, setShowPruneModal] = useState(false);\r\n const [showLogsModal, setShowLogsModal] = useState(false);\r\n\r\n const { id } = useParams();\r\n const navigate = useNavigate();\r\n\r\n const performBackupMutation = usePerformBackup();\r\n const pauseMutation = usePausePlan();\r\n const resumeMutation = useResumePlan();\r\n\r\n const { data, isLoading, refetch: refetchPlan, error: planError } = useGetPlan(id as string);\r\n const plan: Plan = data?.result || {};\r\n\r\n const isSync = plan.method === 'sync';\r\n\r\n const sortedHistory = [...(plan.backups || [])].sort((a, b) => b.started - a.started);\r\n const activeBackups = sortedHistory.filter((s) => s.inProgress);\r\n const activeRestores = (plan.restores || []).filter((s) => s.inProgress);\r\n const lastBackupItem = isSync ? sortedHistory.filter((s) => s.status === 'completed')[0] : sortedHistory[0];\r\n const actionInProgress = activeBackups.length > 0 || activeRestores.length > 0;\r\n const taskPending = pauseMutation.isPending || resumeMutation.isPending || performBackupMutation.isPending;\r\n\r\n const changeStatus = () => {\r\n if (activeBackups.length > 0) {\r\n return toast.error(`Can't pause a Plan while a Backup is in progress.`);\r\n }\r\n if (plan.inProgress || taskPending) {\r\n return;\r\n }\r\n // isActive, set it to false, else true\r\n // When the action is being performed, the item should grey out and stay inaccessible.\r\n if (plan.isActive) {\r\n toast.promise(pauseMutation.mutateAsync(plan.id), {\r\n pending: 'Pausing backup Plan...',\r\n success: 'Backup Plan Paused',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Pause Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n } else {\r\n toast.promise(resumeMutation.mutateAsync(plan.id), {\r\n pending: 'Resuming backup Plan...',\r\n success: 'Backup Plan Resumed',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Resume Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const backupNow = () => {\r\n if (actionInProgress) {\r\n return toast.error('A Backup/Restore Process is in Progress.');\r\n }\r\n if (taskPending) {\r\n return;\r\n }\r\n\r\n const toastId = toast.loading(`Starting ${isSync ? 'Sync' : 'Backup'}...`);\r\n\r\n performBackupMutation.mutate(plan.id, {\r\n onSuccess: (data) => {\r\n toast.update(toastId, {\r\n render: isSync ?
|
|
1
|
+
{"version":3,"file":"usePlanSingleActions.js","sources":["../../src/hooks/usePlanSingleActions.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport { useNavigate, useParams } from 'react-router';\r\nimport { toast } from 'react-toastify';\r\nimport { useGetPlan, usePausePlan, usePerformBackup, useResumePlan } from '../services/plans';\r\nimport { Plan } from '../@types/plans';\r\nimport { Backup } from '../@types/backups';\r\nimport { RestoreSlim } from '../@types/restores';\r\n\r\nexport const usePlanSingleActions = (): {\r\n showDeleteModal: boolean;\r\n setShowDeleteModal: (show: boolean) => void;\r\n showEditModal: boolean;\r\n setShowEditModal: (show: boolean) => void;\r\n showPruneModal: boolean;\r\n setShowPruneModal: (show: boolean) => void;\r\n showLogsModal: boolean;\r\n setShowLogsModal: (show: boolean) => void;\r\n showUnlockModal: boolean;\r\n setShowUnlockModal: (show: boolean) => void;\r\n plan: Plan;\r\n isLoading: boolean;\r\n refetchPlan: () => void;\r\n sortedHistory: Backup[];\r\n activeBackups: Backup[];\r\n activeRestores: RestoreSlim[];\r\n lastBackupItem: Backup;\r\n actionInProgress: boolean;\r\n taskPending: boolean;\r\n planError: any;\r\n changeStatus: () => void;\r\n backupNow: () => void;\r\n} => {\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showEditModal, setShowEditModal] = useState(false);\r\n const [showUnlockModal, setShowUnlockModal] = useState(false);\r\n const [showPruneModal, setShowPruneModal] = useState(false);\r\n const [showLogsModal, setShowLogsModal] = useState(false);\r\n\r\n const { id } = useParams();\r\n const navigate = useNavigate();\r\n\r\n const performBackupMutation = usePerformBackup();\r\n const pauseMutation = usePausePlan();\r\n const resumeMutation = useResumePlan();\r\n\r\n const { data, isLoading, refetch: refetchPlan, error: planError } = useGetPlan(id as string);\r\n const plan: Plan = data?.result || {};\r\n\r\n const isSync = plan.method === 'sync';\r\n\r\n const sortedHistory = [...(plan.backups || [])].sort((a, b) => b.started - a.started);\r\n const activeBackups = sortedHistory.filter((s) => s.inProgress);\r\n const activeRestores = (plan.restores || []).filter((s) => s.inProgress);\r\n const lastBackupItem = isSync ? sortedHistory.filter((s) => s.status === 'completed')[0] : sortedHistory[0];\r\n const actionInProgress = activeBackups.length > 0 || activeRestores.length > 0;\r\n const taskPending = pauseMutation.isPending || resumeMutation.isPending || performBackupMutation.isPending;\r\n\r\n const changeStatus = () => {\r\n if (activeBackups.length > 0) {\r\n return toast.error(`Can't pause a Plan while a Backup is in progress.`);\r\n }\r\n if (plan.inProgress || taskPending) {\r\n return;\r\n }\r\n // isActive, set it to false, else true\r\n // When the action is being performed, the item should grey out and stay inaccessible.\r\n if (plan.isActive) {\r\n toast.promise(pauseMutation.mutateAsync(plan.id), {\r\n pending: 'Pausing backup Plan...',\r\n success: 'Backup Plan Paused',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Pause Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n } else {\r\n toast.promise(resumeMutation.mutateAsync(plan.id), {\r\n pending: 'Resuming backup Plan...',\r\n success: 'Backup Plan Resumed',\r\n error: {\r\n render({ data }: any) {\r\n return `Failed to Resume Backup Plan. ${data?.message || 'Unknown Error.'}`;\r\n },\r\n },\r\n });\r\n }\r\n };\r\n\r\n const backupNow = () => {\r\n if (actionInProgress) {\r\n return toast.error('A Backup/Restore Process is in Progress.');\r\n }\r\n if (taskPending) {\r\n return;\r\n }\r\n\r\n const toastId = toast.loading(`Starting ${isSync ? 'Sync' : 'Backup'}...`);\r\n\r\n performBackupMutation.mutate(plan.id, {\r\n onSuccess: (data) => {\r\n const msg = data?.message || `${isSync ? 'Sync' : 'Backup'} initiated successfully! 🚀`;\r\n const notStarted = !isSync && data?.message && data?.message.includes('reached the concurrency limit');\r\n toast.update(toastId, {\r\n render: isSync ? msg : notStarted ? data?.message : 'Backup initiated successfully!',\r\n type: 'success',\r\n isLoading: false,\r\n autoClose: 3000,\r\n });\r\n if (!isSync && !notStarted) {\r\n navigate(`/plan/${plan.id}?pendingbackup=1`);\r\n }\r\n },\r\n onError: (error: any) => {\r\n toast.update(toastId, {\r\n render: `${isSync ? 'Sync' : 'Backup'} failed to start. ${error?.message || 'Unknown Error.'}`,\r\n type: 'error',\r\n isLoading: false,\r\n autoClose: false,\r\n closeButton: true,\r\n });\r\n },\r\n });\r\n };\r\n\r\n return {\r\n // State\r\n showDeleteModal,\r\n setShowDeleteModal,\r\n showEditModal,\r\n setShowEditModal,\r\n showPruneModal,\r\n setShowPruneModal,\r\n showLogsModal,\r\n setShowLogsModal,\r\n showUnlockModal,\r\n setShowUnlockModal,\r\n\r\n // Data\r\n plan,\r\n isLoading,\r\n refetchPlan,\r\n sortedHistory,\r\n activeBackups,\r\n activeRestores,\r\n lastBackupItem,\r\n actionInProgress,\r\n taskPending,\r\n planError,\r\n\r\n // Actions\r\n changeStatus,\r\n backupNow,\r\n };\r\n};\r\n"],"names":["usePlanSingleActions","showDeleteModal","setShowDeleteModal","useState","showEditModal","setShowEditModal","showUnlockModal","setShowUnlockModal","showPruneModal","setShowPruneModal","showLogsModal","setShowLogsModal","id","useParams","navigate","useNavigate","performBackupMutation","usePerformBackup","pauseMutation","usePausePlan","resumeMutation","useResumePlan","data","isLoading","refetchPlan","planError","useGetPlan","plan","isSync","sortedHistory","a","b","activeBackups","s","activeRestores","lastBackupItem","actionInProgress","taskPending","toast","toastId","msg","notStarted","error"],"mappings":"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"}
|