@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.
Files changed (55) hide show
  1. package/dist-lib/components/Plan/BackupEvents/BackupEvents.d.ts.map +1 -1
  2. package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +35 -34
  3. package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
  4. package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js +28 -26
  5. package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js.map +1 -1
  6. package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js +21 -21
  7. package/dist-lib/components/Plan/PlanSettings/PlanSourceSettings.js.map +1 -1
  8. package/dist-lib/components/Plan/PlanStats/PlanStats.js +9 -9
  9. package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
  10. package/dist-lib/components/Storage/AddStorage/AddStorage.d.ts.map +1 -1
  11. package/dist-lib/components/Storage/AddStorage/AddStorage.js +52 -51
  12. package/dist-lib/components/Storage/AddStorage/AddStorage.js.map +1 -1
  13. package/dist-lib/components/Storage/StorageItem/StorageItem.d.ts.map +1 -1
  14. package/dist-lib/components/Storage/StorageItem/StorageItem.js +36 -36
  15. package/dist-lib/components/Storage/StorageItem/StorageItem.js.map +1 -1
  16. package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
  17. package/dist-lib/components/common/Icon/Icon.js +7 -0
  18. package/dist-lib/components/common/Icon/Icon.js.map +1 -1
  19. package/dist-lib/components/common/form/Select/Select.js +12 -12
  20. package/dist-lib/components/common/form/Select/Select.js.map +1 -1
  21. package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +22 -22
  22. package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
  23. package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.d.ts +20 -0
  24. package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.d.ts.map +1 -0
  25. package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.js +75 -0
  26. package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.js.map +1 -0
  27. package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss.js +30 -0
  28. package/dist-lib/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss.js.map +1 -0
  29. package/dist-lib/hooks/usePlanSingleActions.d.ts.map +1 -1
  30. package/dist-lib/hooks/usePlanSingleActions.js +8 -7
  31. package/dist-lib/hooks/usePlanSingleActions.js.map +1 -1
  32. package/dist-lib/providers/drime.png +0 -0
  33. package/dist-lib/providers/filelu.png +0 -0
  34. package/dist-lib/providers/filen.png +0 -0
  35. package/dist-lib/providers/internxt.png +0 -0
  36. package/dist-lib/providers/shade.png +0 -0
  37. package/dist-lib/styles/core-frontend.css +1 -1
  38. package/dist-lib/utils/storageProviders.d.ts +40 -0
  39. package/dist-lib/utils/storageProviders.d.ts.map +1 -1
  40. package/dist-lib/utils/storageProviders.js +35 -0
  41. package/dist-lib/utils/storageProviders.js.map +1 -1
  42. package/package.json +11 -10
  43. package/src/components/Plan/BackupEvents/BackupEvents.module.scss +8 -0
  44. package/src/components/Plan/BackupEvents/BackupEvents.tsx +6 -1
  45. package/src/components/Plan/PlanSettings/PlanSourceSettings.tsx +1 -1
  46. package/src/components/Plan/PlanStats/PlanStats.tsx +1 -1
  47. package/src/components/Storage/AddStorage/AddStorage.tsx +7 -6
  48. package/src/components/Storage/StorageItem/StorageItem.tsx +9 -2
  49. package/src/components/common/Icon/Icon.tsx +8 -0
  50. package/src/components/common/form/Select/Select.tsx +1 -1
  51. package/src/components/common/form/StoragePicker/StoragePicker.tsx +1 -1
  52. package/src/components/common/form/StorageProviderSelect/StorageProviderSelect.module.scss +223 -0
  53. package/src/components/common/form/StorageProviderSelect/StorageProviderSelect.tsx +106 -0
  54. package/src/hooks/usePlanSingleActions.tsx +1 -0
  55. package/src/utils/storageProviders.ts +35 -0
@@ -1 +1 @@
1
- {"version":3,"file":"BackupEvents.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAO7D,UAAU,iBAAiB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,YAAY,GAAI,6EAAwF,iBAAiB,4CAwF9H,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"BackupEvents.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAO7D,UAAU,iBAAiB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,YAAY,GAAI,6EAAwF,iBAAiB,4CA6F9H,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,73 +1,74 @@
1
- import { jsxs as s, jsx as o, Fragment as g } from "react/jsx-runtime";
2
- import n from "../../common/Icon/Icon.js";
1
+ import { jsxs as a, jsx as o, Fragment as S } from "react/jsx-runtime";
2
+ import l from "../../common/Icon/Icon.js";
3
3
  import k from "../../common/SidePanel/SidePanel.js";
4
- import { getBackupEventActionMessage as L, getRestoreEventActionMessage as D } from "../../../utils/progressHelpers.js";
4
+ import { getBackupEventActionMessage as D, getRestoreEventActionMessage as R } from "../../../utils/progressHelpers.js";
5
5
  import r from "./BackupEvents.module.scss.js";
6
- import { useGetBackupProgressOnce as R } from "../../../services/backups.js";
7
- import { useGetRestoreProgressOnce as F } from "../../../services/restores.js";
8
- import { useState as M, useMemo as w } from "react";
9
- import I from "../../common/Modal/Modal.js";
10
- import { formatDuration as O } from "../../../utils/helpers.js";
11
- const v = ({ id: d, type: t = "backup", sourceId: m, sourceType: h, planId: E, inProgress: c, progressData: A, close: _ }) => {
6
+ import { useGetBackupProgressOnce as F } from "../../../services/backups.js";
7
+ import { useGetRestoreProgressOnce as M } from "../../../services/restores.js";
8
+ import { useState as w, useMemo as I } from "react";
9
+ import O from "../../common/Modal/Modal.js";
10
+ import { formatDuration as K } from "../../../utils/helpers.js";
11
+ const y = ({ id: d, type: t = "backup", sourceId: m, sourceType: h, planId: E, inProgress: c, progressData: A, close: _ }) => {
12
12
  var u;
13
- const [p, f] = M(!1), { data: $ } = t === "backup" ? R({ id: d, sourceId: m, sourceType: h, planId: E }) : F({ id: d, sourceId: m, sourceType: h, planId: E }), i = A || $;
13
+ const [p, f] = w(!1), { data: g, isLoading: $ } = t === "backup" ? F({ id: d, sourceId: m, sourceType: h, planId: E }) : M({ id: d, sourceId: m, sourceType: h, planId: E }), i = A || g;
14
14
  console.log("progressDataToUse :", i);
15
- const l = w(() => {
15
+ const n = I(() => {
16
16
  if (!i || !i.events) return "";
17
17
  let e = "";
18
- return i.events.forEach((a) => {
19
- a.action === "TASK_COMPLETED" ? e = "Completed" : a.action === "TASK_CANCELLED" ? e = "Cancelled" : a.action === "FAILED_PERMANENTLY" && (e = "Failed");
18
+ return i.events.forEach((s) => {
19
+ s.action === "TASK_COMPLETED" ? e = "Completed" : s.action === "TASK_CANCELLED" ? e = "Cancelled" : s.action === "FAILED_PERMANENTLY" && (e = "Failed");
20
20
  }), e;
21
21
  }, [i]);
22
- return /* @__PURE__ */ s(k, { title: `${t}-${d} Events`, width: "1000px", icon: /* @__PURE__ */ o(n, { type: "logs", size: 18 }), footer: /* @__PURE__ */ o(g, {}), close: _, children: [
23
- /* @__PURE__ */ s("div", { className: r.backupEventsContainer, children: [
24
- /* @__PURE__ */ s("div", { className: r.header, children: [
25
- /* @__PURE__ */ s(
22
+ return /* @__PURE__ */ a(k, { title: `${t}-${d} Events`, width: "1000px", icon: /* @__PURE__ */ o(l, { type: "logs", size: 18 }), footer: /* @__PURE__ */ o(S, {}), close: _, children: [
23
+ /* @__PURE__ */ a("div", { className: r.backupEventsContainer, children: [
24
+ /* @__PURE__ */ a("div", { className: r.header, children: [
25
+ /* @__PURE__ */ a(
26
26
  "div",
27
27
  {
28
28
  title: "Status",
29
29
  className: `${r.status} ${c ? r.inProgress : ""}
30
- ${!c && l === "Completed" ? r.hasCompleted : ""} ${!c && l === "Failed" ? r.hasFailed : ""}`,
30
+ ${!c && n === "Completed" ? r.hasCompleted : ""} ${!c && n === "Failed" ? r.hasFailed : ""}`,
31
31
  children: [
32
- /* @__PURE__ */ o(n, { type: c ? "loading" : l === "Completed" ? "check-circle-filled" : "error-circle-filled", size: 14 }),
32
+ /* @__PURE__ */ o(l, { type: c ? "loading" : n === "Completed" ? "check-circle-filled" : "error-circle-filled", size: 14 }),
33
33
  " ",
34
- c ? `${t} In Progress` : `${t} ${l}` || "Unknown"
34
+ c ? `${t} In Progress` : `${t} ${n}` || "Unknown"
35
35
  ]
36
36
  }
37
37
  ),
38
- /* @__PURE__ */ s("div", { title: "Duration", className: r.duration, children: [
39
- /* @__PURE__ */ o(n, { type: "clock", size: 14 }),
38
+ /* @__PURE__ */ a("div", { title: "Duration", className: r.duration, children: [
39
+ /* @__PURE__ */ o(l, { type: "clock", size: 14 }),
40
40
  " ",
41
- (i == null ? void 0 : i.duration) && O(i.duration / 1e3) || "N/A"
41
+ (i == null ? void 0 : i.duration) && K(i.duration / 1e3) || "N/A"
42
42
  ] })
43
43
  ] }),
44
- i && i.events && i.events.length > 0 ? /* @__PURE__ */ o("ul", { className: r.eventList, children: i.events.map((e, a) => {
45
- const T = e.phase === "finished" && e.action === "TASK_COMPLETED", C = e.phase === "finished" && e.action === "FAILED_PERMANENTLY", P = e.action.includes("RETRY_ATTEMPT_"), S = e.action === "TASK_FAILED", N = e.action === "BACKUP_WARNING" || e.action === "RESTORE_WARNING" || e.action === "POST_BACKUP_PRUNE_FAILED" || e.action === "POST_BACKUP_REPO_STATS_FAILED";
46
- return /* @__PURE__ */ s(
44
+ $ && /* @__PURE__ */ o("div", { className: r.loading, children: /* @__PURE__ */ o(l, { type: "loading", size: 30 }) }),
45
+ i && i.events && i.events.length > 0 ? /* @__PURE__ */ o("ul", { className: r.eventList, children: i.events.map((e, s) => {
46
+ const T = e.phase === "finished" && e.action === "TASK_COMPLETED", C = e.phase === "finished" && e.action === "FAILED_PERMANENTLY", L = e.action.includes("RETRY_ATTEMPT_"), P = e.action === "TASK_FAILED", N = e.action === "BACKUP_WARNING" || e.action === "RESTORE_WARNING" || e.action === "POST_BACKUP_PRUNE_FAILED" || e.action === "POST_BACKUP_REPO_STATS_FAILED";
47
+ return /* @__PURE__ */ a(
47
48
  "li",
48
49
  {
49
50
  className: `${r.eventItem} ${e.error ? r.error : ""}
50
51
  ${T ? r.completed : ""} ${C ? r.failed : ""}
51
- ${P ? r.retrying : ""} ${S ? r.isError : ""}
52
+ ${L ? r.retrying : ""} ${P ? r.isError : ""}
52
53
  ${N ? r.isWarning : ""}`,
53
54
  children: [
54
- /* @__PURE__ */ o("span", { className: r.icon, children: /* @__PURE__ */ o(n, { type: e.error || N ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
55
+ /* @__PURE__ */ o("span", { className: r.icon, children: /* @__PURE__ */ o(l, { type: e.error || N ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
55
56
  /* @__PURE__ */ o("span", { className: r.time, children: new Date(e.timestamp).toLocaleTimeString() }),
56
57
  /* @__PURE__ */ o("span", { className: r.phase, children: e.phase }),
57
- /* @__PURE__ */ s("span", { className: r.action, children: [
58
- t === "backup" ? L(e.action) : D(e.action),
59
- e.error && /* @__PURE__ */ o("span", { className: r.viewError, onClick: () => f(a), children: "View Error" })
58
+ /* @__PURE__ */ a("span", { className: r.action, children: [
59
+ t === "backup" ? D(e.action) : R(e.action),
60
+ e.error && /* @__PURE__ */ o("span", { className: r.viewError, onClick: () => f(s), children: "View Error" })
60
61
  ] })
61
62
  ]
62
63
  },
63
- a
64
+ s
64
65
  );
65
66
  }) }) : null
66
67
  ] }),
67
- p && /* @__PURE__ */ o(I, { title: "Error Details", closeModal: () => f(!1), width: "400px", children: /* @__PURE__ */ o("div", { className: r.errorDetails, children: ((u = i == null ? void 0 : i.events[p]) == null ? void 0 : u.error) || "Unknown error occurred." }) })
68
+ p && /* @__PURE__ */ o(O, { title: "Error Details", closeModal: () => f(!1), width: "400px", children: /* @__PURE__ */ o("div", { className: r.errorDetails, children: ((u = i == null ? void 0 : i.events[p]) == null ? void 0 : u.error) || "Unknown error occurred." }) })
68
69
  ] });
69
70
  };
70
71
  export {
71
- v as default
72
+ y as default
72
73
  };
73
74
  //# sourceMappingURL=BackupEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackupEvents.js","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport { getBackupEventActionMessage, getRestoreEventActionMessage } from '../../../utils/progressHelpers';\r\nimport classes from './BackupEvents.module.scss';\r\nimport { BackupProgressData } from '../../../@types/backups';\r\nimport { useGetBackupProgressOnce } from '../../../services/backups';\r\nimport { useGetRestoreProgressOnce } from '../../../services/restores';\r\nimport { useMemo, useState } from 'react';\r\nimport Modal from '../../common/Modal/Modal';\r\nimport { formatDuration } from '../../../utils/helpers';\r\n\r\ninterface BackupEventsProps {\r\n id: string;\r\n planId: string;\r\n sourceId: string;\r\n sourceType: string;\r\n type?: 'backup' | 'restore';\r\n inProgress?: boolean;\r\n progressData?: BackupProgressData | null;\r\n close: () => void;\r\n}\r\n\r\nconst BackupEvents = ({ id, type = 'backup', sourceId, sourceType, planId, inProgress, progressData, close }: BackupEventsProps) => {\r\n const [showError, setShowError] = useState<false | number>(false);\r\n const { data: fetchedProgressData } =\r\n type === 'backup'\r\n ? useGetBackupProgressOnce({ id, sourceId, sourceType, planId })\r\n : useGetRestoreProgressOnce({ id, sourceId, sourceType, planId });\r\n\r\n const progressDataToUse: BackupProgressData | null = progressData || fetchedProgressData;\r\n\r\n console.log('progressDataToUse :', progressDataToUse);\r\n const hasFinished = useMemo(() => {\r\n if (!progressDataToUse || !progressDataToUse.events) return '';\r\n let finishedEvent = '';\r\n progressDataToUse.events.forEach((event) => {\r\n if (event.action === 'TASK_COMPLETED') {\r\n finishedEvent = 'Completed';\r\n } else if (event.action === 'TASK_CANCELLED') {\r\n finishedEvent = 'Cancelled';\r\n } else if (event.action === 'FAILED_PERMANENTLY') {\r\n finishedEvent = 'Failed';\r\n }\r\n });\r\n return finishedEvent;\r\n }, [progressDataToUse]);\r\n\r\n return (\r\n <SidePanel title={`${type}-${id} Events`} width=\"1000px\" icon={<Icon type={'logs'} size={18} />} footer={<></>} close={close}>\r\n <div className={classes.backupEventsContainer}>\r\n <div className={classes.header}>\r\n <div\r\n title=\"Status\"\r\n className={`${classes.status} ${inProgress ? classes.inProgress : ''} \r\n ${!inProgress && hasFinished === 'Completed' ? classes.hasCompleted : ''} ${!inProgress && hasFinished === 'Failed' ? classes.hasFailed : ''}`}\r\n >\r\n <Icon type={inProgress ? 'loading' : hasFinished === 'Completed' ? 'check-circle-filled' : 'error-circle-filled'} size={14} />{' '}\r\n {inProgress ? `${type} In Progress` : `${type} ${hasFinished}` || 'Unknown'}\r\n </div>\r\n <div title=\"Duration\" className={classes.duration}>\r\n <Icon type=\"clock\" size={14} /> {(progressDataToUse?.duration && formatDuration(progressDataToUse.duration / 1000)) || 'N/A'}\r\n </div>\r\n </div>\r\n {progressDataToUse && progressDataToUse.events && progressDataToUse.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {progressDataToUse.events.map((event: any, index: number) => {\r\n const completed = event.phase === 'finished' && event.action === 'TASK_COMPLETED';\r\n const failed = event.phase === 'finished' && event.action === 'FAILED_PERMANENTLY';\r\n const retrying = event.action.includes('RETRY_ATTEMPT_');\r\n const isError = event.action === 'TASK_FAILED';\r\n const isWarning =\r\n event.action === 'BACKUP_WARNING' ||\r\n event.action === 'RESTORE_WARNING' ||\r\n event.action === 'POST_BACKUP_PRUNE_FAILED' ||\r\n event.action === 'POST_BACKUP_REPO_STATS_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${event.error ? classes.error : ''} \r\n ${completed ? classes.completed : ''} ${failed ? classes.failed : ''} \r\n ${retrying ? classes.retrying : ''} ${isError ? classes.isError : ''} \r\n ${isWarning ? classes.isWarning : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={event.error || isWarning ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\r\n {/* Timestamp should be converted to time only eg: 10:20:23 AM */}\r\n <span className={classes.time}>{new Date(event.timestamp).toLocaleTimeString()}</span>\r\n <span className={classes.phase}>{event.phase}</span>\r\n <span className={classes.action}>\r\n {type === 'backup' ? getBackupEventActionMessage(event.action) : getRestoreEventActionMessage(event.action)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(index)}>\r\n View Error\r\n </span>\r\n )}\r\n </span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n ) : null}\r\n </div>\r\n {showError && (\r\n <Modal title=\"Error Details\" closeModal={() => setShowError(false)} width=\"400px\">\r\n <div className={classes.errorDetails}>{progressDataToUse?.events[showError]?.error || 'Unknown error occurred.'}</div>\r\n </Modal>\r\n )}\r\n </SidePanel>\r\n );\r\n};\r\n\r\nexport default BackupEvents;\r\n"],"names":["BackupEvents","id","type","sourceId","sourceType","planId","inProgress","progressData","close","showError","setShowError","useState","fetchedProgressData","useGetBackupProgressOnce","useGetRestoreProgressOnce","progressDataToUse","hasFinished","useMemo","finishedEvent","event","jsxs","SidePanel","jsx","Icon","Fragment","classes","formatDuration","index","completed","failed","retrying","isError","isWarning","getBackupEventActionMessage","getRestoreEventActionMessage","Modal","_a"],"mappings":";;;;;;;;;;AAsBA,MAAMA,IAAe,CAAC,EAAE,IAAAC,GAAI,MAAAC,IAAO,UAAU,UAAAC,GAAU,YAAAC,GAAY,QAAAC,GAAQ,YAAAC,GAAY,cAAAC,GAAc,OAAAC,EAAA,MAA+B;;AACjI,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAyB,EAAK,GAC1D,EAAE,MAAMC,EAAA,IACXV,MAAS,WACJW,EAAyB,EAAE,IAAAZ,GAAI,UAAAE,GAAU,YAAAC,GAAY,QAAAC,EAAA,CAAQ,IAC7DS,EAA0B,EAAE,IAAAb,GAAI,UAAAE,GAAU,YAAAC,GAAY,QAAAC,GAAQ,GAEhEU,IAA+CR,KAAgBK;AAErE,UAAQ,IAAI,uBAAuBG,CAAiB;AACpD,QAAMC,IAAcC,EAAQ,MAAM;AAC/B,QAAI,CAACF,KAAqB,CAACA,EAAkB,OAAQ,QAAO;AAC5D,QAAIG,IAAgB;AACpB,WAAAH,EAAkB,OAAO,QAAQ,CAACI,MAAU;AACzC,MAAIA,EAAM,WAAW,mBAClBD,IAAgB,cACRC,EAAM,WAAW,mBACzBD,IAAgB,cACRC,EAAM,WAAW,yBACzBD,IAAgB;AAAA,IAEtB,CAAC,GACMA;AAAA,EACV,GAAG,CAACH,CAAiB,CAAC;AAEtB,SACG,gBAAAK,EAACC,KAAU,OAAO,GAAGnB,CAAI,IAAID,CAAE,WAAW,OAAM,UAAS,MAAM,gBAAAqB,EAACC,GAAA,EAAK,MAAM,QAAQ,MAAM,IAAI,GAAI,QAAQ,gBAAAD,EAAAE,GAAA,CAAA,CAAE,GAAK,OAAAhB,GAC7G,UAAA;AAAA,IAAA,gBAAAY,EAAC,OAAA,EAAI,WAAWK,EAAQ,uBACrB,UAAA;AAAA,MAAA,gBAAAL,EAAC,OAAA,EAAI,WAAWK,EAAQ,QACrB,UAAA;AAAA,QAAA,gBAAAL;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,OAAM;AAAA,YACN,WAAW,GAAGK,EAAQ,MAAM,IAAInB,IAAamB,EAAQ,aAAa,EAAE;AAAA,iBACrE,CAACnB,KAAcU,MAAgB,cAAcS,EAAQ,eAAe,EAAE,IAAI,CAACnB,KAAcU,MAAgB,WAAWS,EAAQ,YAAY,EAAE;AAAA,YAEzI,UAAA;AAAA,cAAA,gBAAAH,EAACC,GAAA,EAAK,MAAMjB,IAAa,YAAYU,MAAgB,cAAc,wBAAwB,uBAAuB,MAAM,GAAA,CAAI;AAAA,cAAG;AAAA,cAC9HV,IAAa,GAAGJ,CAAI,iBAAiB,GAAGA,CAAI,IAAIc,CAAW,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEpE,OAAA,EAAI,OAAM,YAAW,WAAWS,EAAQ,UACtC,UAAA;AAAA,UAAA,gBAAAH,EAACC,GAAA,EAAK,MAAK,SAAQ,MAAM,IAAI;AAAA,UAAE;AAAA,WAAGR,KAAA,gBAAAA,EAAmB,aAAYW,EAAeX,EAAkB,WAAW,GAAI,KAAM;AAAA,QAAA,EAAA,CAC1H;AAAA,MAAA,GACH;AAAA,MACCA,KAAqBA,EAAkB,UAAUA,EAAkB,OAAO,SAAS,IACjF,gBAAAO,EAAC,MAAA,EAAG,WAAWG,EAAQ,WACnB,UAAAV,EAAkB,OAAO,IAAI,CAACI,GAAYQ,MAAkB;AAC1D,cAAMC,IAAYT,EAAM,UAAU,cAAcA,EAAM,WAAW,kBAC3DU,IAASV,EAAM,UAAU,cAAcA,EAAM,WAAW,sBACxDW,IAAWX,EAAM,OAAO,SAAS,gBAAgB,GACjDY,IAAUZ,EAAM,WAAW,eAC3Ba,IACHb,EAAM,WAAW,oBACjBA,EAAM,WAAW,qBACjBA,EAAM,WAAW,8BACjBA,EAAM,WAAW;AACpB,eACG,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YAEE,WAAW,GAAGK,EAAQ,SAAS,IAAIN,EAAM,QAAQM,EAAQ,QAAQ,EAAE;AAAA,6BACjEG,IAAYH,EAAQ,YAAY,EAAE,IAAII,IAASJ,EAAQ,SAAS,EAAE;AAAA,6BAClEK,IAAWL,EAAQ,WAAW,EAAE,IAAIM,IAAUN,EAAQ,UAAU,EAAE;AAAA,6BAClEO,IAAYP,EAAQ,YAAY,EAAE;AAAA,YAEpC,UAAA;AAAA,cAAA,gBAAAH,EAAC,QAAA,EAAK,WAAWG,EAAQ,MACtB,4BAACF,GAAA,EAAK,MAAMJ,EAAM,SAASa,IAAY,wBAAwB,uBAAuB,MAAM,IAAI,GACnG;AAAA,cAEA,gBAAAV,EAAC,QAAA,EAAK,WAAWG,EAAQ,MAAO,UAAA,IAAI,KAAKN,EAAM,SAAS,EAAE,mBAAA,EAAmB,CAAE;AAAA,gCAC9E,QAAA,EAAK,WAAWM,EAAQ,OAAQ,YAAM,OAAM;AAAA,cAC7C,gBAAAL,EAAC,QAAA,EAAK,WAAWK,EAAQ,QACrB,UAAA;AAAA,gBAAAvB,MAAS,WAAW+B,EAA4Bd,EAAM,MAAM,IAAIe,EAA6Bf,EAAM,MAAM;AAAA,gBACzGA,EAAM,SACJ,gBAAAG,EAAC,QAAA,EAAK,WAAWG,EAAQ,WAAW,SAAS,MAAMf,EAAaiB,CAAK,GAAG,UAAA,aAAA,CAExE;AAAA,cAAA,EAAA,CAEN;AAAA,YAAA;AAAA,UAAA;AAAA,UAnBKA;AAAA,QAAA;AAAA,MAsBd,CAAC,GACJ,IACC;AAAA,IAAA,GACP;AAAA,IACClB,uBACG0B,GAAA,EAAM,OAAM,iBAAgB,YAAY,MAAMzB,EAAa,EAAK,GAAG,OAAM,SACvE,UAAA,gBAAAY,EAAC,OAAA,EAAI,WAAWG,EAAQ,cAAe,YAAAW,IAAArB,KAAA,gBAAAA,EAAmB,OAAON,OAA1B,gBAAA2B,EAAsC,UAAS,0BAAA,CAA0B,EAAA,CACnH;AAAA,EAAA,GAEN;AAEN;"}
1
+ {"version":3,"file":"BackupEvents.js","sources":["../../../../src/components/Plan/BackupEvents/BackupEvents.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport { getBackupEventActionMessage, getRestoreEventActionMessage } from '../../../utils/progressHelpers';\r\nimport classes from './BackupEvents.module.scss';\r\nimport { BackupProgressData } from '../../../@types/backups';\r\nimport { useGetBackupProgressOnce } from '../../../services/backups';\r\nimport { useGetRestoreProgressOnce } from '../../../services/restores';\r\nimport { useMemo, useState } from 'react';\r\nimport Modal from '../../common/Modal/Modal';\r\nimport { formatDuration } from '../../../utils/helpers';\r\n\r\ninterface BackupEventsProps {\r\n id: string;\r\n planId: string;\r\n sourceId: string;\r\n sourceType: string;\r\n type?: 'backup' | 'restore';\r\n inProgress?: boolean;\r\n progressData?: BackupProgressData | null;\r\n close: () => void;\r\n}\r\n\r\nconst BackupEvents = ({ id, type = 'backup', sourceId, sourceType, planId, inProgress, progressData, close }: BackupEventsProps) => {\r\n const [showError, setShowError] = useState<false | number>(false);\r\n const { data: fetchedProgressData, isLoading } =\r\n type === 'backup'\r\n ? useGetBackupProgressOnce({ id, sourceId, sourceType, planId })\r\n : useGetRestoreProgressOnce({ id, sourceId, sourceType, planId });\r\n\r\n const progressDataToUse: BackupProgressData | null = progressData || fetchedProgressData;\r\n\r\n console.log('progressDataToUse :', progressDataToUse);\r\n const hasFinished = useMemo(() => {\r\n if (!progressDataToUse || !progressDataToUse.events) return '';\r\n let finishedEvent = '';\r\n progressDataToUse.events.forEach((event) => {\r\n if (event.action === 'TASK_COMPLETED') {\r\n finishedEvent = 'Completed';\r\n } else if (event.action === 'TASK_CANCELLED') {\r\n finishedEvent = 'Cancelled';\r\n } else if (event.action === 'FAILED_PERMANENTLY') {\r\n finishedEvent = 'Failed';\r\n }\r\n });\r\n return finishedEvent;\r\n }, [progressDataToUse]);\r\n\r\n return (\r\n <SidePanel title={`${type}-${id} Events`} width=\"1000px\" icon={<Icon type={'logs'} size={18} />} footer={<></>} close={close}>\r\n <div className={classes.backupEventsContainer}>\r\n <div className={classes.header}>\r\n <div\r\n title=\"Status\"\r\n className={`${classes.status} ${inProgress ? classes.inProgress : ''} \r\n ${!inProgress && hasFinished === 'Completed' ? classes.hasCompleted : ''} ${!inProgress && hasFinished === 'Failed' ? classes.hasFailed : ''}`}\r\n >\r\n <Icon type={inProgress ? 'loading' : hasFinished === 'Completed' ? 'check-circle-filled' : 'error-circle-filled'} size={14} />{' '}\r\n {inProgress ? `${type} In Progress` : `${type} ${hasFinished}` || 'Unknown'}\r\n </div>\r\n <div title=\"Duration\" className={classes.duration}>\r\n <Icon type=\"clock\" size={14} /> {(progressDataToUse?.duration && formatDuration(progressDataToUse.duration / 1000)) || 'N/A'}\r\n </div>\r\n </div>\r\n {isLoading && (\r\n <div className={classes.loading}>\r\n <Icon type={'loading'} size={30} />\r\n </div>\r\n )}\r\n {progressDataToUse && progressDataToUse.events && progressDataToUse.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {progressDataToUse.events.map((event: any, index: number) => {\r\n const completed = event.phase === 'finished' && event.action === 'TASK_COMPLETED';\r\n const failed = event.phase === 'finished' && event.action === 'FAILED_PERMANENTLY';\r\n const retrying = event.action.includes('RETRY_ATTEMPT_');\r\n const isError = event.action === 'TASK_FAILED';\r\n const isWarning =\r\n event.action === 'BACKUP_WARNING' ||\r\n event.action === 'RESTORE_WARNING' ||\r\n event.action === 'POST_BACKUP_PRUNE_FAILED' ||\r\n event.action === 'POST_BACKUP_REPO_STATS_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${event.error ? classes.error : ''} \r\n ${completed ? classes.completed : ''} ${failed ? classes.failed : ''} \r\n ${retrying ? classes.retrying : ''} ${isError ? classes.isError : ''} \r\n ${isWarning ? classes.isWarning : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={event.error || isWarning ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\r\n {/* Timestamp should be converted to time only eg: 10:20:23 AM */}\r\n <span className={classes.time}>{new Date(event.timestamp).toLocaleTimeString()}</span>\r\n <span className={classes.phase}>{event.phase}</span>\r\n <span className={classes.action}>\r\n {type === 'backup' ? getBackupEventActionMessage(event.action) : getRestoreEventActionMessage(event.action)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(index)}>\r\n View Error\r\n </span>\r\n )}\r\n </span>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n ) : null}\r\n </div>\r\n {showError && (\r\n <Modal title=\"Error Details\" closeModal={() => setShowError(false)} width=\"400px\">\r\n <div className={classes.errorDetails}>{progressDataToUse?.events[showError]?.error || 'Unknown error occurred.'}</div>\r\n </Modal>\r\n )}\r\n </SidePanel>\r\n );\r\n};\r\n\r\nexport default BackupEvents;\r\n"],"names":["BackupEvents","id","type","sourceId","sourceType","planId","inProgress","progressData","close","showError","setShowError","useState","fetchedProgressData","isLoading","useGetBackupProgressOnce","useGetRestoreProgressOnce","progressDataToUse","hasFinished","useMemo","finishedEvent","event","jsxs","SidePanel","jsx","Icon","Fragment","classes","formatDuration","index","completed","failed","retrying","isError","isWarning","getBackupEventActionMessage","getRestoreEventActionMessage","Modal","_a"],"mappings":"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"}
@@ -1,46 +1,48 @@
1
- const e = "_backupEventsContainer_HjqMO", t = "_header_p4ylv", n = "_duration_eusJS", s = "_status_LxnfC", r = "_inProgress_McnwR", o = "_hasCompleted_rN4zW", i = "_hasFailed_lT0ZC", _ = "_eventList_BUqyn", a = "_eventItem_1oiWm", c = "_time_duJSM", d = "_phase_cAGxW", l = "_action_jSpx2", p = "_viewError_LTH4f", m = "_icon_O1UDA", u = "_error_yO4Y0", v = "_completed_xQVyc", h = "_failed_80Vri", g = "_retrying_kdxKu", C = "_isError_B4BVx", E = "_isWarning_jCRJH", x = {
1
+ const e = "_backupEventsContainer_NVn4k", t = "_header_Al7vL", n = "_duration_OkG1V", s = "_status_IVO4B", o = "_inProgress_y415Z", r = "_hasCompleted_x23xI", i = "_hasFailed_i7c0c", a = "_loading_2QxxN", _ = "_eventList_FxKG8", c = "_eventItem_Eyc5J", d = "_time_4OY76", l = "_phase_Loz4b", g = "_action_URfBA", p = "_viewError_e9fT7", v = "_icon_ev0qY", h = "_error_Xpo7b", m = "_completed_Yhxgb", u = "_failed_C6FQC", E = "_retrying_Hibqy", C = "_isError_flYlg", b = "_isWarning_grVw4", f = {
2
2
  backupEventsContainer: e,
3
3
  header: t,
4
4
  duration: n,
5
5
  status: s,
6
- inProgress: r,
7
- hasCompleted: o,
6
+ inProgress: o,
7
+ hasCompleted: r,
8
8
  hasFailed: i,
9
+ loading: a,
9
10
  eventList: _,
10
- eventItem: a,
11
- time: c,
12
- phase: d,
13
- action: l,
11
+ eventItem: c,
12
+ time: d,
13
+ phase: l,
14
+ action: g,
14
15
  viewError: p,
15
- icon: m,
16
- error: u,
17
- completed: v,
18
- failed: h,
19
- retrying: g,
16
+ icon: v,
17
+ error: h,
18
+ completed: m,
19
+ failed: u,
20
+ retrying: E,
20
21
  isError: C,
21
- isWarning: E
22
+ isWarning: b
22
23
  };
23
24
  export {
24
- l as action,
25
+ g as action,
25
26
  e as backupEventsContainer,
26
- v as completed,
27
- x as default,
27
+ m as completed,
28
+ f as default,
28
29
  n as duration,
29
- u as error,
30
- a as eventItem,
30
+ h as error,
31
+ c as eventItem,
31
32
  _ as eventList,
32
- h as failed,
33
- o as hasCompleted,
33
+ u as failed,
34
+ r as hasCompleted,
34
35
  i as hasFailed,
35
36
  t as header,
36
- m as icon,
37
- r as inProgress,
37
+ v as icon,
38
+ o as inProgress,
38
39
  C as isError,
39
- E as isWarning,
40
- d as phase,
41
- g as retrying,
40
+ b as isWarning,
41
+ a as loading,
42
+ l as phase,
43
+ E as retrying,
42
44
  s as status,
43
- c as time,
45
+ d as time,
44
46
  p as viewError
45
47
  };
46
48
  //# sourceMappingURL=BackupEvents.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackupEvents.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BackupEvents.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,47 +1,47 @@
1
- import { jsxs as o, Fragment as u, jsx as i } from "react/jsx-runtime";
2
- import c from "./PlanSettings.module.scss.js";
1
+ import { jsxs as o, Fragment as u, jsx as c } from "react/jsx-runtime";
2
+ import i from "./PlanSettings.module.scss.js";
3
3
  import m from "../../common/PathPicker/PathPicker.js";
4
4
  import { useGetDevices as f } from "../../../services/devices.js";
5
5
  import h from "../../common/form/Select/Select.js";
6
- const S = ({ plan: s, onUpdate: r, error: a, isEditing: n }) => {
7
- const { data: l } = f(), d = [], t = s.sourceId || "main";
6
+ const N = ({ plan: e, onUpdate: r, error: a, isEditing: n }) => {
7
+ const { data: l } = f(), d = [], t = e.sourceId || "main";
8
8
  return l != null && l.success && l.result && d.push(
9
- ...l.result.map((e) => ({
10
- label: `${e.name} ${e.id === "main" ? "(Main)" : ""}`,
11
- value: e.id,
12
- disabled: !(e.id === "main" || e.connected)
9
+ ...l.result.map((s) => ({
10
+ label: `${s.name} ${s.id === "main" ? "(Main)" : ""}`,
11
+ value: s.id
12
+ // disabled: device.id === 'main' || device.connected ? false : true,
13
13
  }))
14
14
  ), /* @__PURE__ */ o(u, { children: [
15
- /* @__PURE__ */ o("div", { className: c.field, children: [
16
- /* @__PURE__ */ i("label", { className: c.label, children: "Select Device*" }),
17
- /* @__PURE__ */ i(
15
+ /* @__PURE__ */ o("div", { className: i.field, children: [
16
+ /* @__PURE__ */ c("label", { className: i.label, children: "Select Device*" }),
17
+ /* @__PURE__ */ c(
18
18
  h,
19
19
  {
20
20
  options: d,
21
21
  fieldValue: t,
22
22
  disabled: n,
23
23
  full: !0,
24
- onUpdate: (e) => r({ ...s, sourceId: e })
24
+ onUpdate: (s) => r({ ...e, sourceId: s })
25
25
  }
26
26
  )
27
27
  ] }),
28
- /* @__PURE__ */ o("div", { className: c.field, children: [
29
- /* @__PURE__ */ i("label", { className: c.label, children: "Backup Sources*" }),
30
- a && /* @__PURE__ */ i("span", { className: c.fieldErrorLabel, children: a }),
31
- /* @__PURE__ */ i(
28
+ /* @__PURE__ */ o("div", { className: i.field, children: [
29
+ /* @__PURE__ */ c("label", { className: i.label, children: "Backup Sources*" }),
30
+ a && /* @__PURE__ */ c("span", { className: i.fieldErrorLabel, children: a }),
31
+ /* @__PURE__ */ c(
32
32
  m,
33
33
  {
34
- paths: { includes: s.sourceConfig.includes, excludes: s.sourceConfig.excludes },
35
- onUpdate: (e) => r({ ...s, sourceConfig: { ...e } }),
34
+ paths: { includes: e.sourceConfig.includes, excludes: e.sourceConfig.excludes },
35
+ onUpdate: (s) => r({ ...e, sourceConfig: { ...s } }),
36
36
  deviceId: t,
37
- single: s.method === "sync",
38
- disallowChange: s.method === "sync"
37
+ single: e.method === "sync",
38
+ disallowChange: e.method === "sync"
39
39
  }
40
40
  )
41
41
  ] })
42
42
  ] });
43
43
  };
44
44
  export {
45
- S as default
45
+ N as default
46
46
  };
47
47
  //# sourceMappingURL=PlanSourceSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanSourceSettings.js","sources":["../../../../src/components/Plan/PlanSettings/PlanSourceSettings.tsx"],"sourcesContent":["import classes from './PlanSettings.module.scss';\r\nimport PathPicker from '../../common/PathPicker/PathPicker';\r\nimport { NewPlanSettings } from '../../../@types/plans';\r\nimport { useGetDevices } from '../../../services/devices';\r\nimport Select from '../../common/form/Select/Select';\r\nimport { Device } from '../../../@types/devices';\r\n\r\ninterface PlanSourceSettingsProps {\r\n plan: NewPlanSettings;\r\n isEditing: boolean;\r\n onUpdate: (plan: NewPlanSettings) => void;\r\n error: string;\r\n}\r\n\r\nconst PlanSourceSettings = ({ plan, onUpdate, error, isEditing }: PlanSourceSettingsProps) => {\r\n const { data } = useGetDevices();\r\n const deviceList = [];\r\n const deviceId = plan.sourceId || 'main';\r\n if (data?.success && data.result) {\r\n deviceList.push(\r\n ...data.result.map((device: Device) => ({\r\n label: `${device.name} ${device.id === 'main' ? '(Main)' : ''}`,\r\n value: device.id,\r\n disabled: device.id === 'main' || device.connected ? false : true,\r\n })),\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Select Device*</label>\r\n <Select\r\n options={deviceList}\r\n fieldValue={deviceId}\r\n disabled={isEditing}\r\n full={true}\r\n onUpdate={(val) => onUpdate({ ...plan, sourceId: val })}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Sources*</label>\r\n {error && <span className={classes.fieldErrorLabel}>{error}</span>}\r\n <PathPicker\r\n paths={{ includes: plan.sourceConfig.includes, excludes: plan.sourceConfig.excludes }}\r\n onUpdate={(paths) => onUpdate({ ...plan, sourceConfig: { ...paths } })}\r\n deviceId={deviceId}\r\n single={plan.method === 'sync'}\r\n disallowChange={plan.method === 'sync'}\r\n />\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default PlanSourceSettings;\r\n"],"names":["PlanSourceSettings","plan","onUpdate","error","isEditing","data","useGetDevices","deviceList","deviceId","device","jsxs","Fragment","classes","jsx","Select","val","PathPicker","paths"],"mappings":";;;;;AAcA,MAAMA,IAAqB,CAAC,EAAE,MAAAC,GAAM,UAAAC,GAAU,OAAAC,GAAO,WAAAC,QAAyC;AAC3F,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAA,GACXC,IAAa,CAAA,GACbC,IAAWP,EAAK,YAAY;AAClC,SAAII,KAAA,QAAAA,EAAM,WAAWA,EAAK,UACvBE,EAAW;AAAA,IACR,GAAGF,EAAK,OAAO,IAAI,CAACI,OAAoB;AAAA,MACrC,OAAO,GAAGA,EAAO,IAAI,IAAIA,EAAO,OAAO,SAAS,WAAW,EAAE;AAAA,MAC7D,OAAOA,EAAO;AAAA,MACd,UAAU,EAAAA,EAAO,OAAO,UAAUA,EAAO;AAAA,IAAoB,EAC9D;AAAA,EAAA,GAKL,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAD,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAA,EAAM,WAAWD,EAAQ,OAAO,UAAA,kBAAc;AAAA,MAC/C,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACE,SAASP;AAAA,UACT,YAAYC;AAAA,UACZ,UAAUJ;AAAA,UACV,MAAM;AAAA,UACN,UAAU,CAACW,MAAQb,EAAS,EAAE,GAAGD,GAAM,UAAUc,EAAA,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACzD,GACH;AAAA,IACA,gBAAAL,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAA,EAAM,WAAWD,EAAQ,OAAO,UAAA,mBAAe;AAAA,MAC/CT,KAAS,gBAAAU,EAAC,QAAA,EAAK,WAAWD,EAAQ,iBAAkB,UAAAT,GAAM;AAAA,MAC3D,gBAAAU;AAAA,QAACG;AAAA,QAAA;AAAA,UACE,OAAO,EAAE,UAAUf,EAAK,aAAa,UAAU,UAAUA,EAAK,aAAa,SAAA;AAAA,UAC3E,UAAU,CAACgB,MAAUf,EAAS,EAAE,GAAGD,GAAM,cAAc,EAAE,GAAGgB,EAAA,GAAS;AAAA,UACrE,UAAAT;AAAA,UACA,QAAQP,EAAK,WAAW;AAAA,UACxB,gBAAgBA,EAAK,WAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IACnC,EAAA,CACH;AAAA,EAAA,GACH;AAEN;"}
1
+ {"version":3,"file":"PlanSourceSettings.js","sources":["../../../../src/components/Plan/PlanSettings/PlanSourceSettings.tsx"],"sourcesContent":["import classes from './PlanSettings.module.scss';\r\nimport PathPicker from '../../common/PathPicker/PathPicker';\r\nimport { NewPlanSettings } from '../../../@types/plans';\r\nimport { useGetDevices } from '../../../services/devices';\r\nimport Select from '../../common/form/Select/Select';\r\nimport { Device } from '../../../@types/devices';\r\n\r\ninterface PlanSourceSettingsProps {\r\n plan: NewPlanSettings;\r\n isEditing: boolean;\r\n onUpdate: (plan: NewPlanSettings) => void;\r\n error: string;\r\n}\r\n\r\nconst PlanSourceSettings = ({ plan, onUpdate, error, isEditing }: PlanSourceSettingsProps) => {\r\n const { data } = useGetDevices();\r\n const deviceList = [];\r\n const deviceId = plan.sourceId || 'main';\r\n if (data?.success && data.result) {\r\n deviceList.push(\r\n ...data.result.map((device: Device) => ({\r\n label: `${device.name} ${device.id === 'main' ? '(Main)' : ''}`,\r\n value: device.id,\r\n // disabled: device.id === 'main' || device.connected ? false : true,\r\n })),\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Select Device*</label>\r\n <Select\r\n options={deviceList}\r\n fieldValue={deviceId}\r\n disabled={isEditing}\r\n full={true}\r\n onUpdate={(val) => onUpdate({ ...plan, sourceId: val })}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label className={classes.label}>Backup Sources*</label>\r\n {error && <span className={classes.fieldErrorLabel}>{error}</span>}\r\n <PathPicker\r\n paths={{ includes: plan.sourceConfig.includes, excludes: plan.sourceConfig.excludes }}\r\n onUpdate={(paths) => onUpdate({ ...plan, sourceConfig: { ...paths } })}\r\n deviceId={deviceId}\r\n single={plan.method === 'sync'}\r\n disallowChange={plan.method === 'sync'}\r\n />\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default PlanSourceSettings;\r\n"],"names":["PlanSourceSettings","plan","onUpdate","error","isEditing","data","useGetDevices","deviceList","deviceId","device","jsxs","Fragment","classes","jsx","Select","val","PathPicker","paths"],"mappings":";;;;;AAcA,MAAMA,IAAqB,CAAC,EAAE,MAAAC,GAAM,UAAAC,GAAU,OAAAC,GAAO,WAAAC,QAAyC;AAC3F,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAA,GACXC,IAAa,CAAA,GACbC,IAAWP,EAAK,YAAY;AAClC,SAAII,KAAA,QAAAA,EAAM,WAAWA,EAAK,UACvBE,EAAW;AAAA,IACR,GAAGF,EAAK,OAAO,IAAI,CAACI,OAAoB;AAAA,MACrC,OAAO,GAAGA,EAAO,IAAI,IAAIA,EAAO,OAAO,SAAS,WAAW,EAAE;AAAA,MAC7D,OAAOA,EAAO;AAAA;AAAA,IAAA,EAEf;AAAA,EAAA,GAKL,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAD,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAA,EAAM,WAAWD,EAAQ,OAAO,UAAA,kBAAc;AAAA,MAC/C,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACE,SAASP;AAAA,UACT,YAAYC;AAAA,UACZ,UAAUJ;AAAA,UACV,MAAM;AAAA,UACN,UAAU,CAACW,MAAQb,EAAS,EAAE,GAAGD,GAAM,UAAUc,EAAA,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACzD,GACH;AAAA,IACA,gBAAAL,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,MAAA,gBAAAC,EAAC,SAAA,EAAM,WAAWD,EAAQ,OAAO,UAAA,mBAAe;AAAA,MAC/CT,KAAS,gBAAAU,EAAC,QAAA,EAAK,WAAWD,EAAQ,iBAAkB,UAAAT,GAAM;AAAA,MAC3D,gBAAAU;AAAA,QAACG;AAAA,QAAA;AAAA,UACE,OAAO,EAAE,UAAUf,EAAK,aAAa,UAAU,UAAUA,EAAK,aAAa,SAAA;AAAA,UAC3E,UAAU,CAACgB,MAAUf,EAAS,EAAE,GAAGD,GAAM,cAAc,EAAE,GAAGgB,EAAA,GAAS;AAAA,UACrE,UAAAT;AAAA,UACA,QAAQP,EAAK,WAAW;AAAA,UACxB,gBAAgBA,EAAK,WAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IACnC,EAAA,CACH;AAAA,EAAA,GACH;AAEN;"}
@@ -3,23 +3,23 @@ import a from "../../common/Icon/Icon.js";
3
3
  import { formatNumberToK as f, formatBytes as u } from "../../../utils/helpers.js";
4
4
  import S from "../PlanHistory/PlanHistory.js";
5
5
  import d from "./PlanStats.module.scss.js";
6
- const w = ({ plan: c, isSync: p, lastBackupItem: n }) => {
7
- const { sourceConfig: r, storage: e, storagePath: g, isActive: v, settings: N } = c, { interval: o } = N, m = (n == null ? void 0 : n.totalFiles) || 0, y = (n == null ? void 0 : n.totalSize) || 0, T = (l) => {
6
+ const w = ({ plan: r, isSync: h, lastBackupItem: n }) => {
7
+ const { sourceConfig: c, storage: e, storagePath: g, isActive: v, settings: N } = r, { interval: o } = N, m = (n == null ? void 0 : n.totalFiles) || 0, y = (n == null ? void 0 : n.totalSize) || 0, T = (l) => {
8
8
  let s = "";
9
- return l && l.includes && l.includes.length > 0 && (s += "<div><strong>Includes</strong></div>", s += l.includes.map((h) => `<div>${h}</div>`).join("")), l && l.excludes && l.excludes.length > 0 && (s += "<div><strong>Excludes</strong></div>", s += l.excludes.map((h) => `<div>${h}</div>`).join("")), s;
9
+ return l && l.includes && l.includes.length > 0 && (s += "<div><strong>Includes</strong></div>", s += l.includes.map((p) => `<div>${r.device.name} -> ${p}</div>`).join("")), l && l.excludes && l.excludes.length > 0 && (s += "<div><strong>Excludes</strong></div>", s += l.excludes.map((p) => `<div>${p}</div>`).join("")), s;
10
10
  };
11
11
  return /* @__PURE__ */ i("div", { className: d.planStats, children: [
12
12
  /* @__PURE__ */ i("div", { className: d.sources, children: [
13
13
  /* @__PURE__ */ i("div", { className: d.widgetTitle, children: [
14
14
  /* @__PURE__ */ t(a, { type: "backup", size: 12 }),
15
15
  " ",
16
- p ? "Syncing" : "Backing Up"
16
+ h ? "Syncing" : "Backing Up"
17
17
  ] }),
18
18
  /* @__PURE__ */ i("div", { className: d.sourceContent, children: [
19
- /* @__PURE__ */ i("div", { "data-tooltip-id": "htmlToolTip", "data-tooltip-place": "top", "data-tooltip-html": T(r), children: [
19
+ /* @__PURE__ */ i("div", { "data-tooltip-id": "htmlToolTip", "data-tooltip-place": "top", "data-tooltip-html": T(c), children: [
20
20
  /* @__PURE__ */ t(a, { type: "folders", size: 18 }),
21
21
  /* @__PURE__ */ i("span", { children: [
22
- r == null ? void 0 : r.includes.length,
22
+ c == null ? void 0 : c.includes.length,
23
23
  " Sources"
24
24
  ] })
25
25
  ] }),
@@ -28,9 +28,9 @@ const w = ({ plan: c, isSync: p, lastBackupItem: n }) => {
28
28
  {
29
29
  "data-tooltip-id": "htmlToolTip",
30
30
  "data-tooltip-place": "top",
31
- "data-tooltip-html": v ? p ? `Syncing changes every ${o.minutes} minutes` : `Copying changes ${["hours", "minutes", "days"].includes(o.type) ? o[o.type] + o.type : o.type}` : "Plan is Not Active",
31
+ "data-tooltip-html": v ? h ? `Syncing changes every ${o.minutes} minutes` : `Copying changes ${["hours", "minutes", "days"].includes(o.type) ? o[o.type] + o.type : o.type}` : "Plan is Not Active",
32
32
  children: [
33
- /* @__PURE__ */ t(a, { type: v ? p ? "reload" : "copy" : "pause", size: 16 }),
33
+ /* @__PURE__ */ t(a, { type: v ? h ? "reload" : "copy" : "pause", size: 16 }),
34
34
  /* @__PURE__ */ t("div", { className: d.sourceArrow, children: "→" })
35
35
  ]
36
36
  }
@@ -71,7 +71,7 @@ const w = ({ plan: c, isSync: p, lastBackupItem: n }) => {
71
71
  /* @__PURE__ */ t(a, { type: "speed", size: 12 }),
72
72
  " Health"
73
73
  ] }),
74
- /* @__PURE__ */ t("div", { className: d.healthContent, children: /* @__PURE__ */ t(S, { planId: c.id, history: c.backups, itemsCount: 90 }) })
74
+ /* @__PURE__ */ t("div", { className: d.healthContent, children: /* @__PURE__ */ t(S, { planId: r.id, history: r.backups, itemsCount: 90 }) })
75
75
  ] })
76
76
  ] });
77
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PlanStats.js","sources":["../../../../src/components/Plan/PlanStats/PlanStats.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport { Plan } from '../../../@types/plans';\r\nimport { formatBytes, formatNumberToK } from '../../../utils/helpers';\r\nimport PlanHistory from '../PlanHistory/PlanHistory';\r\nimport classes from './PlanStats.module.scss';\r\n\r\ninterface PlanStatsProps {\r\n plan: Plan;\r\n isSync: boolean;\r\n lastBackupItem: any;\r\n}\r\n\r\nconst PlanStats = ({ plan, isSync, lastBackupItem }: PlanStatsProps) => {\r\n const { sourceConfig, storage, storagePath, isActive, settings } = plan;\r\n const { interval } = settings;\r\n\r\n const totalFiles = lastBackupItem?.totalFiles || 0;\r\n const totalSize = lastBackupItem?.totalSize || 0;\r\n\r\n const sourceTooltipHTML = (sources: Plan['sourceConfig']) => {\r\n let html = '';\r\n if (sources && sources.includes && sources.includes.length > 0) {\r\n html += `<div><strong>Includes</strong></div>`;\r\n html += sources.includes.map((p) => `<div>${p}</div>`).join('');\r\n }\r\n if (sources && sources.excludes && sources.excludes.length > 0) {\r\n html += `<div><strong>Excludes</strong></div>`;\r\n html += sources.excludes.map((p) => `<div>${p}</div>`).join('');\r\n }\r\n return html;\r\n };\r\n\r\n return (\r\n <div className={classes.planStats}>\r\n <div className={classes.sources}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"backup\" size={12} /> {isSync ? 'Syncing' : 'Backing Up'}\r\n </div>\r\n <div className={classes.sourceContent}>\r\n <div data-tooltip-id=\"htmlToolTip\" data-tooltip-place=\"top\" data-tooltip-html={sourceTooltipHTML(sourceConfig)}>\r\n <Icon type=\"folders\" size={18} />\r\n <span>{sourceConfig?.includes.length} Sources</span>\r\n </div>\r\n <div\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={\r\n isActive\r\n ? isSync\r\n ? `Syncing changes every ${interval.minutes} minutes`\r\n : `Copying changes ${['hours', 'minutes', 'days'].includes(interval.type) ? interval[interval.type as 'hours' | 'minutes' | 'days'] + interval.type : interval.type}`\r\n : 'Plan is Not Active'\r\n }\r\n >\r\n <Icon type={isActive ? (isSync ? 'reload' : 'copy') : 'pause'} size={16} />\r\n <div className={classes.sourceArrow}>→</div>\r\n </div>\r\n <div\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={`<div><strong>Storage:</strong> ${storage?.name}</div><div><strong>Path:</strong> ${storagePath || '/'}</div>`}\r\n >\r\n {storage?.type && <img src={`/providers/${storage?.type}.png`} />}\r\n {storage?.name}\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.snapshots}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"folders\" size={12} /> Source Stats\r\n </div>\r\n <div className={classes.snapshotsContent}>\r\n <div>\r\n <span>{totalFiles ? formatNumberToK(totalFiles) : 0}</span>\r\n <span>Files</span>\r\n </div>\r\n <div></div>\r\n <div>\r\n <span>{totalSize ? formatBytes(totalSize) : '0.00B'}</span>\r\n <span>Size</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.health}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"speed\" size={12} /> Health\r\n </div>\r\n <div className={classes.healthContent}>\r\n <PlanHistory planId={plan.id} history={plan.backups} itemsCount={90} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlanStats;\r\n"],"names":["PlanStats","plan","isSync","lastBackupItem","sourceConfig","storage","storagePath","isActive","settings","interval","totalFiles","totalSize","sourceTooltipHTML","sources","html","p","jsxs","classes","jsx","Icon","formatNumberToK","formatBytes","PlanHistory"],"mappings":"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"}
1
+ {"version":3,"file":"PlanStats.js","sources":["../../../../src/components/Plan/PlanStats/PlanStats.tsx"],"sourcesContent":["import Icon from '../../common/Icon/Icon';\r\nimport { Plan } from '../../../@types/plans';\r\nimport { formatBytes, formatNumberToK } from '../../../utils/helpers';\r\nimport PlanHistory from '../PlanHistory/PlanHistory';\r\nimport classes from './PlanStats.module.scss';\r\n\r\ninterface PlanStatsProps {\r\n plan: Plan;\r\n isSync: boolean;\r\n lastBackupItem: any;\r\n}\r\n\r\nconst PlanStats = ({ plan, isSync, lastBackupItem }: PlanStatsProps) => {\r\n const { sourceConfig, storage, storagePath, isActive, settings } = plan;\r\n const { interval } = settings;\r\n\r\n const totalFiles = lastBackupItem?.totalFiles || 0;\r\n const totalSize = lastBackupItem?.totalSize || 0;\r\n\r\n const sourceTooltipHTML = (sources: Plan['sourceConfig']) => {\r\n let html = '';\r\n if (sources && sources.includes && sources.includes.length > 0) {\r\n html += `<div><strong>Includes</strong></div>`;\r\n html += sources.includes.map((p) => `<div>${plan.device.name} -> ${p}</div>`).join('');\r\n }\r\n if (sources && sources.excludes && sources.excludes.length > 0) {\r\n html += `<div><strong>Excludes</strong></div>`;\r\n html += sources.excludes.map((p) => `<div>${p}</div>`).join('');\r\n }\r\n return html;\r\n };\r\n\r\n return (\r\n <div className={classes.planStats}>\r\n <div className={classes.sources}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"backup\" size={12} /> {isSync ? 'Syncing' : 'Backing Up'}\r\n </div>\r\n <div className={classes.sourceContent}>\r\n <div data-tooltip-id=\"htmlToolTip\" data-tooltip-place=\"top\" data-tooltip-html={sourceTooltipHTML(sourceConfig)}>\r\n <Icon type=\"folders\" size={18} />\r\n <span>{sourceConfig?.includes.length} Sources</span>\r\n </div>\r\n <div\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={\r\n isActive\r\n ? isSync\r\n ? `Syncing changes every ${interval.minutes} minutes`\r\n : `Copying changes ${['hours', 'minutes', 'days'].includes(interval.type) ? interval[interval.type as 'hours' | 'minutes' | 'days'] + interval.type : interval.type}`\r\n : 'Plan is Not Active'\r\n }\r\n >\r\n <Icon type={isActive ? (isSync ? 'reload' : 'copy') : 'pause'} size={16} />\r\n <div className={classes.sourceArrow}>→</div>\r\n </div>\r\n <div\r\n data-tooltip-id=\"htmlToolTip\"\r\n data-tooltip-place=\"top\"\r\n data-tooltip-html={`<div><strong>Storage:</strong> ${storage?.name}</div><div><strong>Path:</strong> ${storagePath || '/'}</div>`}\r\n >\r\n {storage?.type && <img src={`/providers/${storage?.type}.png`} />}\r\n {storage?.name}\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.snapshots}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"folders\" size={12} /> Source Stats\r\n </div>\r\n <div className={classes.snapshotsContent}>\r\n <div>\r\n <span>{totalFiles ? formatNumberToK(totalFiles) : 0}</span>\r\n <span>Files</span>\r\n </div>\r\n <div></div>\r\n <div>\r\n <span>{totalSize ? formatBytes(totalSize) : '0.00B'}</span>\r\n <span>Size</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.health}>\r\n <div className={classes.widgetTitle}>\r\n <Icon type=\"speed\" size={12} /> Health\r\n </div>\r\n <div className={classes.healthContent}>\r\n <PlanHistory planId={plan.id} history={plan.backups} itemsCount={90} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PlanStats;\r\n"],"names":["PlanStats","plan","isSync","lastBackupItem","sourceConfig","storage","storagePath","isActive","settings","interval","totalFiles","totalSize","sourceTooltipHTML","sources","html","jsxs","classes","jsx","Icon","formatNumberToK","formatBytes","PlanHistory"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AddStorage.d.ts","sourceRoot":"","sources":["../../../../src/components/Storage/AddStorage/AddStorage.tsx"],"names":[],"mappings":"AAcA,KAAK,eAAe,GAAG;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,WAAW,eAAe,4CAoQ7C,CAAC;AACF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AddStorage.d.ts","sourceRoot":"","sources":["../../../../src/components/Storage/AddStorage/AddStorage.tsx"],"names":[],"mappings":"AAcA,KAAK,eAAe,GAAG;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,WAAW,eAAe,4CAqQ7C,CAAC;AACF,eAAe,UAAU,CAAC"}