@plutonhq/core-frontend 0.1.31 → 0.1.32

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.
@@ -1,15 +1,15 @@
1
1
  import { jsxs as n, jsx as i, Fragment as P } from "react/jsx-runtime";
2
- import h from "../../common/Icon/Icon.js";
2
+ import p from "../../common/Icon/Icon.js";
3
3
  import S from "../../common/SidePanel/SidePanel.js";
4
- import { getBackupEventActionMessage as _, getRestoreEventActionMessage as T } from "../../../utils/progressHelpers.js";
4
+ import { getBackupEventActionMessage as L, getRestoreEventActionMessage as T } from "../../../utils/progressHelpers.js";
5
5
  import e from "./BackupEvents.module.scss.js";
6
6
  import { useGetBackupProgressOnce as w } from "../../../services/backups.js";
7
7
  import { useGetRestoreProgressOnce as R } from "../../../services/restores.js";
8
8
  import { useState as O, useMemo as F } from "react";
9
9
  import M from "../../common/Modal/Modal.js";
10
10
  import { formatDuration as D } from "../../../utils/helpers.js";
11
- const U = ({ id: f, type: E = "backup", sourceId: $, sourceType: A, planId: L, inProgress: d, progressData: g, close: C }) => {
12
- const [m, u] = O(!1), { data: k, isLoading: v } = E === "backup" ? w({ id: f, sourceId: $, sourceType: A, planId: L }) : R({ id: f, sourceId: $, sourceType: A, planId: L }), s = g || k;
11
+ const U = ({ id: f, type: E = "backup", sourceId: $, sourceType: A, planId: g, inProgress: m, progressData: _, close: C }) => {
12
+ const [o, u] = O(!1), { data: k, isLoading: v } = E === "backup" ? w({ id: f, sourceId: $, sourceType: A, planId: g }) : R({ id: f, sourceId: $, sourceType: A, planId: g }), s = _ || k;
13
13
  console.log("progressDataToUse :", s);
14
14
  const N = F(() => {
15
15
  if (!s || !s.events) return "";
@@ -18,44 +18,44 @@ const U = ({ id: f, type: E = "backup", sourceId: $, sourceType: A, planId: L, i
18
18
  a.action === "TASK_COMPLETED" ? r = "Completed" : a.action === "TASK_CANCELLED" ? r = "Cancelled" : a.action === "FAILED_PERMANENTLY" && (r = "Failed");
19
19
  }), r;
20
20
  }, [s]);
21
- return /* @__PURE__ */ n(S, { title: `${E}-${f} Events`, width: "1000px", icon: /* @__PURE__ */ i(h, { type: "logs", size: 18 }), footer: /* @__PURE__ */ i(P, {}), close: C, children: [
21
+ return /* @__PURE__ */ n(S, { title: `${E}-${f} Events`, width: "1000px", icon: /* @__PURE__ */ i(p, { type: "logs", size: 18 }), footer: /* @__PURE__ */ i(P, {}), close: C, children: [
22
22
  /* @__PURE__ */ n("div", { className: e.backupEventsContainer, children: [
23
23
  /* @__PURE__ */ n("div", { className: e.header, children: [
24
24
  /* @__PURE__ */ n(
25
25
  "div",
26
26
  {
27
27
  title: "Status",
28
- className: `${e.status} ${d ? e.inProgress : ""}
29
- ${!d && N === "Completed" ? e.hasCompleted : ""} ${!d && N === "Failed" ? e.hasFailed : ""}`,
28
+ className: `${e.status} ${m ? e.inProgress : ""}
29
+ ${!m && N === "Completed" ? e.hasCompleted : ""} ${!m && N === "Failed" ? e.hasFailed : ""}`,
30
30
  children: [
31
- /* @__PURE__ */ i(h, { type: d ? "loading" : N === "Completed" ? "check-circle-filled" : "error-circle-filled", size: 14 }),
31
+ /* @__PURE__ */ i(p, { type: m ? "loading" : N === "Completed" ? "check-circle-filled" : "error-circle-filled", size: 14 }),
32
32
  " ",
33
- d ? `${E} In Progress` : `${E} ${N}` || "Unknown"
33
+ m ? `${E} In Progress` : `${E} ${N}` || "Unknown"
34
34
  ]
35
35
  }
36
36
  ),
37
- !d && N && /* @__PURE__ */ n("div", { title: "Duration", className: e.duration, children: [
38
- /* @__PURE__ */ i(h, { type: "clock", size: 14 }),
37
+ !m && N && /* @__PURE__ */ n("div", { title: "Duration", className: e.duration, children: [
38
+ /* @__PURE__ */ i(p, { type: "clock", size: 14 }),
39
39
  " ",
40
40
  (s == null ? void 0 : s.duration) && D(s.duration / 1e3) || "N/A"
41
41
  ] })
42
42
  ] }),
43
- v && /* @__PURE__ */ i("div", { className: e.loading, children: /* @__PURE__ */ i(h, { type: "loading", size: 30 }) }),
43
+ v && /* @__PURE__ */ i("div", { className: e.loading, children: /* @__PURE__ */ i(p, { type: "loading", size: 30 }) }),
44
44
  s && s.events && s.events.length > 0 ? /* @__PURE__ */ i("ul", { className: e.eventList, children: s.events.map((r, a) => {
45
- const c = r.phase === "finished" && r.action === "TASK_COMPLETED", o = r.phase === "finished" && r.action === "FAILED_PERMANENTLY", l = r.action.includes("RETRY_ATTEMPT_"), t = r.action === "TASK_FAILED", p = r.action === "BACKUP_WARNING" || r.action === "RESTORE_WARNING" || r.action === "POST_BACKUP_PRUNE_FAILED" || r.action === "POST_BACKUP_REPO_STATS_FAILED";
45
+ const c = r.phase === "finished" && r.action === "TASK_COMPLETED", l = r.phase === "finished" && r.action === "FAILED_PERMANENTLY", d = r.action.includes("RETRY_ATTEMPT_"), t = r.action === "TASK_FAILED", h = r.action === "BACKUP_WARNING" || r.action === "RESTORE_WARNING" || r.action === "POST_BACKUP_PRUNE_FAILED" || r.action === "POST_BACKUP_REPO_STATS_FAILED";
46
46
  return /* @__PURE__ */ n(
47
47
  "li",
48
48
  {
49
49
  className: `${e.eventItem} ${r.error ? e.error : ""}
50
- ${c ? e.completed : ""} ${o ? e.failed : ""}
51
- ${l ? e.retrying : ""} ${t ? e.isError : ""}
52
- ${p ? e.isWarning : ""}`,
50
+ ${c ? e.completed : ""} ${l ? e.failed : ""}
51
+ ${d ? e.retrying : ""} ${t ? e.isError : ""}
52
+ ${h ? e.isWarning : ""}`,
53
53
  children: [
54
- /* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(h, { type: r.error || p ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
54
+ /* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(p, { type: r.error || h ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
55
55
  /* @__PURE__ */ i("span", { className: e.time, children: new Date(r.timestamp).toLocaleTimeString() }),
56
56
  /* @__PURE__ */ i("span", { className: e.phase, children: r.phase }),
57
57
  /* @__PURE__ */ n("span", { className: e.action, children: [
58
- E === "backup" ? _(r.action) : T(r.action),
58
+ E === "backup" ? L(r.action) : T(r.action),
59
59
  r.error && /* @__PURE__ */ i("span", { className: e.viewError, onClick: () => u(`main-${a}`), children: "View Error" })
60
60
  ] })
61
61
  ]
@@ -69,37 +69,37 @@ const U = ({ id: f, type: E = "backup", sourceId: $, sourceType: A, planId: L, i
69
69
  /* @__PURE__ */ i("span", { className: e.mirrorEventsName, children: a.storageName }),
70
70
  /* @__PURE__ */ i("span", { className: `${e.mirrorEventsStatus} ${e[`mirror_${a.status}`] || ""}`, children: a.status })
71
71
  ] }),
72
- a.events && a.events.length > 0 ? /* @__PURE__ */ i("ul", { className: e.eventList, children: a.events.map((c, o) => {
73
- const l = c.error, t = c.action === "REPLICATION_COMPLETE", p = c.action === "REPLICATION_FAILED";
72
+ a.events && a.events.length > 0 ? /* @__PURE__ */ i("ul", { className: e.eventList, children: a.events.map((c, l) => {
73
+ const d = c.error, t = c.action === "REPLICATION_COMPLETE", h = c.action === "REPLICATION_FAILED";
74
74
  return /* @__PURE__ */ n(
75
75
  "li",
76
76
  {
77
- className: `${e.eventItem} ${l ? e.error : ""} ${t ? e.completed : ""} ${p ? e.failed : ""}`,
77
+ className: `${e.eventItem} ${d ? e.error : ""} ${t ? e.completed : ""} ${h ? e.failed : ""}`,
78
78
  children: [
79
- /* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(h, { type: l ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
79
+ /* @__PURE__ */ i("span", { className: e.icon, children: /* @__PURE__ */ i(p, { type: d ? "error-circle-filled" : "check-circle-filled", size: 16 }) }),
80
80
  /* @__PURE__ */ i("span", { className: e.time, children: new Date(c.timestamp).toLocaleTimeString() }),
81
81
  /* @__PURE__ */ i("span", { className: e.phase, children: c.phase }),
82
82
  /* @__PURE__ */ n("span", { className: e.action, children: [
83
- _(c.action, a.storageName),
84
- c.error && /* @__PURE__ */ i("span", { className: e.viewError, onClick: () => u(`mirror-${r}-${o}`), children: "View Error" })
83
+ L(c.action, a.storageName),
84
+ c.error && /* @__PURE__ */ i("span", { className: e.viewError, onClick: () => u(`mirror-${r}-${l}`), children: "View Error" })
85
85
  ] })
86
86
  ]
87
87
  },
88
- o
88
+ l
89
89
  );
90
90
  }) }) : /* @__PURE__ */ i("div", { className: e.noEvents, children: "No events recorded" })
91
91
  ] }, r)) })
92
92
  ] }),
93
- m && /* @__PURE__ */ i(M, { title: "Error Details", closeModal: () => u(!1), width: "400px", children: /* @__PURE__ */ i("div", { className: e.errorDetails, children: (() => {
94
- var r, a, c, o, l;
95
- if (typeof m == "string") {
96
- if (m.startsWith("main-")) {
97
- const t = parseInt(m.replace("main-", ""));
93
+ o && /* @__PURE__ */ i(M, { title: "Error Details", closeModal: () => u(!1), width: "400px", children: /* @__PURE__ */ i("div", { className: e.errorDetails, "data-length": o.length, children: (() => {
94
+ var r, a, c, l, d;
95
+ if (typeof o == "string") {
96
+ if (o.startsWith("main-")) {
97
+ const t = parseInt(o.replace("main-", ""));
98
98
  return ((r = s == null ? void 0 : s.events[t]) == null ? void 0 : r.error) || "Unknown error occurred.";
99
99
  }
100
- if (m.startsWith("mirror-")) {
101
- const t = m.replace("mirror-", "").split("-"), p = parseInt(t.pop()), I = t.join("-");
102
- return ((l = (o = (c = (a = s == null ? void 0 : s.mirrors) == null ? void 0 : a[I]) == null ? void 0 : c.events) == null ? void 0 : o[p]) == null ? void 0 : l.error) || "Unknown error occurred.";
100
+ if (o.startsWith("mirror-")) {
101
+ const t = o.replace("mirror-", "").split("-"), h = parseInt(t.pop()), I = t.join("-");
102
+ return ((d = (l = (c = (a = s == null ? void 0 : s.mirrors) == null ? void 0 : a[I]) == null ? void 0 : c.events) == null ? void 0 : l[h]) == null ? void 0 : d.error) || "Unknown error occurred.";
103
103
  }
104
104
  }
105
105
  return "Unknown error occurred.";
@@ -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, ReplicationProgressData } 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 | string>(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 {!inProgress && hasFinished && (\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 )}\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(`main-${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 {/* Mirror Events */}\r\n {progressDataToUse?.mirrors && Object.keys(progressDataToUse.mirrors).length > 0 && (\r\n <div className={classes.mirrorsEventsSection}>\r\n {Object.entries(progressDataToUse.mirrors as Record<string, ReplicationProgressData>).map(([storageId, mirror]) => (\r\n <div key={storageId} className={classes.mirrorEventsGroup}>\r\n <div className={classes.mirrorEventsHeader}>\r\n <img src={`/providers/${mirror.storageType}.png`} className={classes.mirrorProviderIcon} />\r\n <span className={classes.mirrorEventsName}>{mirror.storageName}</span>\r\n <span className={`${classes.mirrorEventsStatus} ${classes[`mirror_${mirror.status}`] || ''}`}>{mirror.status}</span>\r\n </div>\r\n {mirror.events && mirror.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {mirror.events.map((event: any, index: number) => {\r\n const isError = event.error;\r\n const isCompleted = event.action === 'REPLICATION_COMPLETE';\r\n const isFailed = event.action === 'REPLICATION_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${isError ? classes.error : ''} ${isCompleted ? classes.completed : ''} ${isFailed ? classes.failed : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={isError ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\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 {getBackupEventActionMessage(event.action, mirror.storageName)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(`mirror-${storageId}-${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 ) : (\r\n <div className={classes.noEvents}>No events recorded</div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n {showError && (\r\n <Modal title=\"Error Details\" closeModal={() => setShowError(false)} width=\"400px\">\r\n <div className={classes.errorDetails}>\r\n {(() => {\r\n if (typeof showError === 'string') {\r\n if (showError.startsWith('main-')) {\r\n const idx = parseInt(showError.replace('main-', ''));\r\n return progressDataToUse?.events[idx]?.error || 'Unknown error occurred.';\r\n }\r\n if (showError.startsWith('mirror-')) {\r\n const parts = showError.replace('mirror-', '').split('-');\r\n const eventIdx = parseInt(parts.pop()!);\r\n const sId = parts.join('-');\r\n return (progressDataToUse?.mirrors as any)?.[sId]?.events?.[eventIdx]?.error || 'Unknown error occurred.';\r\n }\r\n }\r\n return 'Unknown error occurred.';\r\n })()}\r\n </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","storageId","mirror","isCompleted","isFailed","Modal","idx","_a","parts","eventIdx","sId","_e","_d","_c","_b"],"mappings":"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"}
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, ReplicationProgressData } 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 | string>(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 {!inProgress && hasFinished && (\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 )}\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(`main-${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 {/* Mirror Events */}\r\n {progressDataToUse?.mirrors && Object.keys(progressDataToUse.mirrors).length > 0 && (\r\n <div className={classes.mirrorsEventsSection}>\r\n {Object.entries(progressDataToUse.mirrors as Record<string, ReplicationProgressData>).map(([storageId, mirror]) => (\r\n <div key={storageId} className={classes.mirrorEventsGroup}>\r\n <div className={classes.mirrorEventsHeader}>\r\n <img src={`/providers/${mirror.storageType}.png`} className={classes.mirrorProviderIcon} />\r\n <span className={classes.mirrorEventsName}>{mirror.storageName}</span>\r\n <span className={`${classes.mirrorEventsStatus} ${classes[`mirror_${mirror.status}`] || ''}`}>{mirror.status}</span>\r\n </div>\r\n {mirror.events && mirror.events.length > 0 ? (\r\n <ul className={classes.eventList}>\r\n {mirror.events.map((event: any, index: number) => {\r\n const isError = event.error;\r\n const isCompleted = event.action === 'REPLICATION_COMPLETE';\r\n const isFailed = event.action === 'REPLICATION_FAILED';\r\n return (\r\n <li\r\n key={index}\r\n className={`${classes.eventItem} ${isError ? classes.error : ''} ${isCompleted ? classes.completed : ''} ${isFailed ? classes.failed : ''}`}\r\n >\r\n <span className={classes.icon}>\r\n <Icon type={isError ? 'error-circle-filled' : 'check-circle-filled'} size={16} />\r\n </span>\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 {getBackupEventActionMessage(event.action, mirror.storageName)}\r\n {event.error && (\r\n <span className={classes.viewError} onClick={() => setShowError(`mirror-${storageId}-${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 ) : (\r\n <div className={classes.noEvents}>No events recorded</div>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n {showError && (\r\n <Modal title=\"Error Details\" closeModal={() => setShowError(false)} width={'400px'}>\r\n <div className={classes.errorDetails} data-length={showError.length}>\r\n {(() => {\r\n if (typeof showError === 'string') {\r\n if (showError.startsWith('main-')) {\r\n const idx = parseInt(showError.replace('main-', ''));\r\n return progressDataToUse?.events[idx]?.error || 'Unknown error occurred.';\r\n }\r\n if (showError.startsWith('mirror-')) {\r\n const parts = showError.replace('mirror-', '').split('-');\r\n const eventIdx = parseInt(parts.pop()!);\r\n const sId = parts.join('-');\r\n return (progressDataToUse?.mirrors as any)?.[sId]?.events?.[eventIdx]?.error || 'Unknown error occurred.';\r\n }\r\n }\r\n return 'Unknown error occurred.';\r\n })()}\r\n </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","storageId","mirror","isCompleted","isFailed","Modal","idx","_a","parts","eventIdx","sId","_e","_d","_c","_b"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const r = "_backupEventsContainer_n4dRx", o = "_header_gwZmX", n = "_duration_g6SJ5", e = "_status_KCVYI", t = "_inProgress_xqRZ6", i = "_hasCompleted_l14Zh", s = "_hasFailed_8Em4T", _ = "_loading_G2evI", m = "_eventList_i0U7P", a = "_eventItem_QNqCj", c = "_time_B3ExX", d = "_phase_39yB7", l = "_action_2yQJt", v = "_viewError_yTsK2", E = "_icon_BkVDZ", p = "_error_DGh2a", g = "_completed_XASOL", u = "_failed_zC3W6", h = "_retrying_ICrjq", C = "_isError_tkQGd", I = "_isWarning_yUW3h", P = "_mirrorsEventsSection_wafxu", f = "_mirrorEventsGroup_IQEqQ", y = "_mirrorEventsHeader_ltIUG", Q = "_mirrorProviderIcon_Uk5Aj", S = "_mirrorEventsName_lHe4o", x = "_mirrorEventsStatus_Lj60w", G = "_mirror_pending_5MiPJ", W = "_mirror_pending_5MiPJ", k = "_mirror_running_QXWpO", w = "_mirror_running_QXWpO", F = "_mirror_completed_n0Hum", H = "_mirror_completed_n0Hum", N = "_mirror_failed_6xzTN", D = "_mirror_failed_6xzTN", L = "_noEvents_UyosQ", U = "_errorDetails_4Yb0F", X = {
1
+ const r = "_backupEventsContainer_9dH1T", o = "_header_Kxhdm", n = "_duration_1aCfh", e = "_status_yfu37", t = "_inProgress_jxlZv", i = "_hasCompleted_M9PAG", s = "_hasFailed_6WjH2", _ = "_loading_YMZCQ", m = "_eventList_ybfpu", a = "_eventItem_btgx0", c = "_time_ydcC7", d = "_phase_XEe5Q", l = "_action_vUkfm", v = "_viewError_RyzV5", E = "_icon_qbCwk", p = "_error_l3WwG", g = "_completed_WSzoQ", u = "_failed_CwSxD", h = "_retrying_KEtnS", f = "_isError_KroqN", C = "_isWarning_5xegh", w = "_mirrorsEventsSection_EoE5l", x = "_mirrorEventsGroup_IFWxA", I = "_mirrorEventsHeader_La9MM", F = "_mirrorProviderIcon_hE4ok", P = "_mirrorEventsName_Z129E", S = "_mirrorEventsStatus_FKJEw", k = "_mirror_pending_dnxIF", y = "_mirror_pending_dnxIF", W = "_mirror_running_MAIOw", b = "_mirror_running_MAIOw", A = "_mirror_completed_UAaNT", M = "_mirror_completed_UAaNT", N = "_mirror_failed_zOixw", G = "_mirror_failed_zOixw", H = "_noEvents_1fkoX", z = "_errorDetails_qRpc4", D = {
2
2
  backupEventsContainer: r,
3
3
  header: o,
4
4
  duration: n,
@@ -18,33 +18,33 @@ const r = "_backupEventsContainer_n4dRx", o = "_header_gwZmX", n = "_duration_g6
18
18
  completed: g,
19
19
  failed: u,
20
20
  retrying: h,
21
- isError: C,
22
- isWarning: I,
23
- mirrorsEventsSection: P,
24
- mirrorEventsGroup: f,
25
- mirrorEventsHeader: y,
26
- mirrorProviderIcon: Q,
27
- mirrorEventsName: S,
28
- mirrorEventsStatus: x,
29
- mirror_pending: G,
30
- mirrorPending: W,
31
- mirror_running: k,
32
- mirrorRunning: w,
33
- mirror_completed: F,
34
- mirrorCompleted: H,
21
+ isError: f,
22
+ isWarning: C,
23
+ mirrorsEventsSection: w,
24
+ mirrorEventsGroup: x,
25
+ mirrorEventsHeader: I,
26
+ mirrorProviderIcon: F,
27
+ mirrorEventsName: P,
28
+ mirrorEventsStatus: S,
29
+ mirror_pending: k,
30
+ mirrorPending: y,
31
+ mirror_running: W,
32
+ mirrorRunning: b,
33
+ mirror_completed: A,
34
+ mirrorCompleted: M,
35
35
  mirror_failed: N,
36
- mirrorFailed: D,
37
- noEvents: L,
38
- errorDetails: U
36
+ mirrorFailed: G,
37
+ noEvents: H,
38
+ errorDetails: z
39
39
  };
40
40
  export {
41
41
  l as action,
42
42
  r as backupEventsContainer,
43
43
  g as completed,
44
- X as default,
44
+ D as default,
45
45
  n as duration,
46
46
  p as error,
47
- U as errorDetails,
47
+ z as errorDetails,
48
48
  a as eventItem,
49
49
  m as eventList,
50
50
  u as failed,
@@ -53,24 +53,24 @@ export {
53
53
  o as header,
54
54
  E as icon,
55
55
  t as inProgress,
56
- C as isError,
57
- I as isWarning,
56
+ f as isError,
57
+ C as isWarning,
58
58
  _ as loading,
59
- H as mirrorCompleted,
60
- f as mirrorEventsGroup,
61
- y as mirrorEventsHeader,
62
- S as mirrorEventsName,
63
- x as mirrorEventsStatus,
64
- D as mirrorFailed,
65
- W as mirrorPending,
66
- Q as mirrorProviderIcon,
67
- w as mirrorRunning,
68
- F as mirror_completed,
59
+ M as mirrorCompleted,
60
+ x as mirrorEventsGroup,
61
+ I as mirrorEventsHeader,
62
+ P as mirrorEventsName,
63
+ S as mirrorEventsStatus,
64
+ G as mirrorFailed,
65
+ y as mirrorPending,
66
+ F as mirrorProviderIcon,
67
+ b as mirrorRunning,
68
+ A as mirror_completed,
69
69
  N as mirror_failed,
70
- G as mirror_pending,
71
- k as mirror_running,
72
- P as mirrorsEventsSection,
73
- L as noEvents,
70
+ k as mirror_pending,
71
+ W as mirror_running,
72
+ w as mirrorsEventsSection,
73
+ H as noEvents,
74
74
  d as phase,
75
75
  h as retrying,
76
76
  e as status,
@@ -1 +1 @@
1
- {"version":3,"file":"BackupProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/BackupProgress/BackupProgress.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,UAAU,mBAAmB;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC7B;AAED,QAAA,MAAM,cAAc,GAAI,8CAAyD,mBAAmB,4CAsQnG,CAAC;AACF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"BackupProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/Plan/BackupProgress/BackupProgress.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,UAAU,mBAAmB;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC7B;AAED,QAAA,MAAM,cAAc,GAAI,8CAAyD,mBAAmB,4CA2QnG,CAAC;AACF,eAAe,cAAc,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsxs as r, jsx as t, Fragment as C } from "react/jsx-runtime";
1
+ import { jsxs as r, jsx as t, Fragment as R } from "react/jsx-runtime";
2
2
  import { useState as x } from "react";
3
3
  import { useQueryClient as W } from "@tanstack/react-query";
4
4
  import { toast as O } from "react-toastify";
@@ -11,24 +11,24 @@ import oe from "../../common/ActionModal/ActionModal.js";
11
11
  import { useCancelRestore as ae, useGetRestoreProgress as le } from "../../../services/restores.js";
12
12
  import ce from "../BackupEvents/BackupEvents.js";
13
13
  const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup" }) => {
14
- const [I, M] = x(!1), [K, S] = x(!1), B = W(), $ = ae(), w = X(), { id: g, started: y } = l, { data: o } = i === "backup" ? Z({ id: g, sourceId: b, sourceType: v, planId: c }) : le({ id: g, sourceId: b, sourceType: v, planId: c }), s = re(o), L = i === "backup" ? te(o) : ne(o), Q = o == null ? void 0 : o.events.find((a) => a.action === "BACKUP_OPERATION_START" && a.resticData), U = i === "backup" && !Q, {
14
+ const [I, S] = x(!1), [K, y] = x(!1), $ = W(), B = ae(), w = X(), { id: g, started: N } = l, { data: o } = i === "backup" ? Z({ id: g, sourceId: b, sourceType: v, planId: c }) : le({ id: g, sourceId: b, sourceType: v, planId: c }), s = re(o), L = i === "backup" ? te(o) : ne(o), Q = o == null ? void 0 : o.events.find((a) => a.action === "BACKUP_OPERATION_START" && a.resticData), U = i === "backup" && !Q, {
15
15
  total_files_processed: G = (s == null ? void 0 : s.total_files) || 0,
16
16
  files_done: Y = 0,
17
- total_bytes_processed: N = (s == null ? void 0 : s.total_bytes_processed) || (s == null ? void 0 : s.total_bytes) || 0,
17
+ total_bytes_processed: _ = (s == null ? void 0 : s.total_bytes_processed) || (s == null ? void 0 : s.total_bytes) || 0,
18
18
  bytes_done: F = 0,
19
19
  bytes_restored: A = 0,
20
20
  files_restored: T = 0,
21
21
  seconds_remaining: H = 0,
22
- percent_done: _ = 0
22
+ percent_done: P = 0
23
23
  } = s || {};
24
- let h = Y, f = F, P = N, z = G, m = N ? Math.round(F / N * 100) : 0;
25
- i === "restore" && (m = Math.round(_ * 100), s != null && s.total_bytes && (P = s.total_bytes), A ? f = A : s != null && s.total_bytes && (f = Math.round(_ * s.total_bytes)), T ? h = T : s != null && s.total_files && (h = Math.round(_ * s.total_files))), (s == null ? void 0 : s.message_type) === "summary" && (m = 100, h = z, f = P);
24
+ let h = Y, f = F, C = _, z = G, m = _ ? Math.round(F / _ * 100) : 0;
25
+ i === "restore" && (m = Math.round(P * 100), s != null && s.total_bytes && (C = s.total_bytes), A ? f = A : s != null && s.total_bytes && (f = Math.round(P * s.total_bytes)), T ? h = T : s != null && s.total_files && (h = Math.round(P * s.total_files))), (s == null ? void 0 : s.message_type) === "summary" && (m = 100, h = z, f = C);
26
26
  const J = () => {
27
27
  console.log("cancel :", i, l), i === "backup" ? O.promise(
28
28
  w.mutateAsync(
29
29
  { planId: c, backupId: l.id },
30
30
  {
31
- onSuccess: () => B.invalidateQueries({ queryKey: ["plan", c] })
31
+ onSuccess: () => $.invalidateQueries({ queryKey: ["plan", c] })
32
32
  }
33
33
  ),
34
34
  {
@@ -41,10 +41,10 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
41
41
  }
42
42
  }
43
43
  ) : O.promise(
44
- $.mutateAsync(
44
+ B.mutateAsync(
45
45
  { planId: c, restoreId: l.id },
46
46
  {
47
- onSuccess: () => B.invalidateQueries({ queryKey: ["plan", c] })
47
+ onSuccess: () => $.invalidateQueries({ queryKey: ["plan", c] })
48
48
  }
49
49
  ),
50
50
  {
@@ -66,25 +66,34 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
66
66
  i === "restore" ? "Restoring " : "",
67
67
  "backup-",
68
68
  g,
69
- /* @__PURE__ */ r("span", { className: e.backupTime, title: ee(y), children: [
69
+ /* @__PURE__ */ r("span", { className: e.backupTime, title: ee(N), children: [
70
70
  /* @__PURE__ */ t(d, { type: "clock", size: 12 }),
71
71
  " Started ",
72
- y ? D(new Date(y)) : "a few seconds ago"
72
+ N ? D(new Date(N)) : "a few seconds ago"
73
73
  ] }),
74
74
  l.errorMsg && /* @__PURE__ */ r("span", { className: e.backupError, children: [
75
75
  /* @__PURE__ */ t(d, { type: "error-circle-filled", size: 13 }),
76
76
  " ",
77
- /* @__PURE__ */ r("i", { "data-tooltip-id": "htmlToolTip", "data-tooltip-place": "top", "data-tooltip-html": l.errorMsg, children: [
78
- /* @__PURE__ */ t("u", { children: "Error" }),
79
- " Occurred."
80
- ] }),
77
+ /* @__PURE__ */ r(
78
+ "i",
79
+ {
80
+ "data-tooltip-id": "htmlToolTip",
81
+ "data-tooltip-place": "top",
82
+ "data-tooltip-html": `<div class="linebreak-tooltip-content">${l.errorMsg.slice(0, 120) + (l.errorMsg.length > 120 ? "..." : "")}</div>`,
83
+ onClick: () => y(!0),
84
+ children: [
85
+ /* @__PURE__ */ t("u", { children: "Error" }),
86
+ " Occurred."
87
+ ]
88
+ }
89
+ ),
81
90
  " ",
82
91
  "Retrying..."
83
92
  ] })
84
93
  ] }),
85
94
  /* @__PURE__ */ r("div", { className: e.backupStart, children: [
86
- /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t("span", { className: e.progressMessage, onClick: () => S(!0), children: L }) }),
87
- /* @__PURE__ */ r("button", { onClick: () => M(!0), title: `Cancel ${i}`, children: [
95
+ /* @__PURE__ */ t("div", { children: /* @__PURE__ */ t("span", { className: e.progressMessage, onClick: () => y(!0), children: L }) }),
96
+ /* @__PURE__ */ r("button", { onClick: () => S(!0), title: `Cancel ${i}`, children: [
88
97
  /* @__PURE__ */ t(d, { type: "close", size: 12 }),
89
98
  " Cancel"
90
99
  ] })
@@ -103,10 +112,10 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
103
112
  /* @__PURE__ */ r("span", { children: [
104
113
  j(f),
105
114
  " / ",
106
- j(P)
115
+ j(C)
107
116
  ] })
108
117
  ] }),
109
- /* @__PURE__ */ t("div", { className: e.ProgressStatsRight, children: i !== "restore" && /* @__PURE__ */ r(C, { children: [
118
+ /* @__PURE__ */ t("div", { className: e.ProgressStatsRight, children: i !== "restore" && /* @__PURE__ */ r(R, { children: [
110
119
  "Remaining: ",
111
120
  se(H)
112
121
  ] }) })
@@ -127,13 +136,13 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
127
136
  oe,
128
137
  {
129
138
  title: `Cancel ${i}`,
130
- message: /* @__PURE__ */ t(C, { children: `Are you sure you want to cancel the ${i} process?` }),
131
- closeModal: () => M(!1),
139
+ message: /* @__PURE__ */ t(R, { children: `Are you sure you want to cancel the ${i} process?` }),
140
+ closeModal: () => S(!1),
132
141
  width: "400px",
133
142
  primaryAction: {
134
143
  title: `Yes, Cancel ${i}`,
135
144
  type: "danger",
136
- isPending: i === "restore" ? $.isPending : w.isPending,
145
+ isPending: i === "restore" ? B.isPending : w.isPending,
137
146
  action: () => J()
138
147
  }
139
148
  }
@@ -148,7 +157,7 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
148
157
  sourceType: v,
149
158
  progressData: o,
150
159
  inProgress: !0,
151
- close: () => S(!1)
160
+ close: () => y(!1)
152
161
  }
153
162
  )
154
163
  ] }, l.id),
@@ -156,7 +165,7 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
156
165
  /* @__PURE__ */ t("div", { className: e.mirrorsTitle, children: "Replicating" }),
157
166
  /* @__PURE__ */ t("div", { className: e.mirrorsList, children: Object.entries(o.mirrors).map(([a, n]) => {
158
167
  var E, q;
159
- const k = (q = (E = n.events) == null ? void 0 : E.slice().reverse().find((V) => V.resticData)) == null ? void 0 : q.resticData, p = k != null && k.percent_done ? Math.round(k.percent_done * 100) : 0, R = ie(n);
168
+ const k = (q = (E = n.events) == null ? void 0 : E.slice().reverse().find((V) => V.resticData)) == null ? void 0 : q.resticData, p = k != null && k.percent_done ? Math.round(k.percent_done * 100) : 0, M = ie(n);
160
169
  let u = e.mirrorPending;
161
170
  return n.status === "running" && (u = p > 0 ? e.mirrorRunning : e.mirrorRunningIndeterminate), n.status === "completed" && (u = e.mirrorCompleted), n.status === "failed" && (u = e.mirrorFailed), n.status === "retrying" && (u = e.mirrorRunningIndeterminate), /* @__PURE__ */ r("div", { className: e.mirrorItem, children: [
162
171
  /* @__PURE__ */ r("div", { className: e.mirrorStorageIcon, children: [
@@ -168,8 +177,8 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
168
177
  /* @__PURE__ */ t("span", { className: e.mirrorName, children: n.storageName }),
169
178
  /* @__PURE__ */ r("span", { className: `${e.mirrorStatus} ${u}`, children: [
170
179
  n.status === "pending" && "Pending",
171
- n.status === "running" && (p > 0 ? `${p}% — ${R}` : R),
172
- n.status === "completed" && /* @__PURE__ */ r(C, { children: [
180
+ n.status === "running" && (p > 0 ? `${p}% — ${M}` : M),
181
+ n.status === "completed" && /* @__PURE__ */ r(R, { children: [
173
182
  /* @__PURE__ */ t(d, { type: "check", size: 10 }),
174
183
  " Completed"
175
184
  ] }),
@@ -177,7 +186,7 @@ const _e = ({ item: l, sourceId: b, sourceType: v, planId: c, type: i = "backup"
177
186
  /* @__PURE__ */ t(d, { type: "error", size: 12 }),
178
187
  " Failed"
179
188
  ] }),
180
- n.status === "retrying" && R
189
+ n.status === "retrying" && M
181
190
  ] })
182
191
  ] }),
183
192
  /* @__PURE__ */ t("div", { className: e.mirrorBar, children: /* @__PURE__ */ t(