@plutonhq/core-frontend 0.1.22 → 0.1.24

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 (96) hide show
  1. package/dist-lib/@types/index.js +4 -1
  2. package/dist-lib/@types/index.js.map +1 -1
  3. package/dist-lib/@types/plans.d.ts +11 -20
  4. package/dist-lib/@types/plans.d.ts.map +1 -1
  5. package/dist-lib/@types/settings.d.ts +14 -0
  6. package/dist-lib/@types/settings.d.ts.map +1 -1
  7. package/dist-lib/@types/settings.js +34 -0
  8. package/dist-lib/@types/settings.js.map +1 -0
  9. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js +49 -47
  10. package/dist-lib/components/Plan/PlanSettings/PlanAdvancedSettings.js.map +1 -1
  11. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettings.d.ts +7 -4
  12. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettings.d.ts.map +1 -1
  13. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettings.js +235 -52
  14. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettings.js.map +1 -1
  15. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettingsTester.d.ts +9 -0
  16. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettingsTester.d.ts.map +1 -0
  17. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettingsTester.js +62 -0
  18. package/dist-lib/components/Plan/PlanSettings/PlanNotificationSettingsTester.js.map +1 -0
  19. package/dist-lib/components/Plan/PlanSettings/PlanPruneSettings.js +2 -2
  20. package/dist-lib/components/Plan/PlanSettings/PlanPruneSettings.js.map +1 -1
  21. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js +56 -40
  22. package/dist-lib/components/Plan/PlanSettings/PlanSettings.module.scss.js.map +1 -1
  23. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.d.ts.map +1 -1
  24. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js +16 -8
  25. package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js.map +1 -1
  26. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.d.ts.map +1 -1
  27. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js +52 -47
  28. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js.map +1 -1
  29. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.module.scss.js +12 -6
  30. package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.module.scss.js.map +1 -1
  31. package/dist-lib/components/Settings/IntegrationSettings/NtfySettings.d.ts +9 -0
  32. package/dist-lib/components/Settings/IntegrationSettings/NtfySettings.d.ts.map +1 -0
  33. package/dist-lib/components/Settings/IntegrationSettings/NtfySettings.js +79 -0
  34. package/dist-lib/components/Settings/IntegrationSettings/NtfySettings.js.map +1 -0
  35. package/dist-lib/components/Settings/IntegrationSettings/SMTPSettings.d.ts +4 -3
  36. package/dist-lib/components/Settings/IntegrationSettings/SMTPSettings.d.ts.map +1 -1
  37. package/dist-lib/components/Settings/IntegrationSettings/SMTPSettings.js +37 -35
  38. package/dist-lib/components/Settings/IntegrationSettings/SMTPSettings.js.map +1 -1
  39. package/dist-lib/components/Settings/IntegrationSettings/ValidateEmailIntegration.d.ts +10 -0
  40. package/dist-lib/components/Settings/IntegrationSettings/ValidateEmailIntegration.d.ts.map +1 -0
  41. package/dist-lib/components/Settings/IntegrationSettings/ValidateEmailIntegration.js +49 -0
  42. package/dist-lib/components/Settings/IntegrationSettings/ValidateEmailIntegration.js.map +1 -0
  43. package/dist-lib/components/Storage/EditStorage/EditStorage.js +10 -10
  44. package/dist-lib/components/Storage/EditStorage/EditStorage.js.map +1 -1
  45. package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
  46. package/dist-lib/components/common/Icon/Icon.js +15 -1
  47. package/dist-lib/components/common/Icon/Icon.js.map +1 -1
  48. package/dist-lib/components/index.d.ts +3 -0
  49. package/dist-lib/components/index.d.ts.map +1 -1
  50. package/dist-lib/components.js +114 -108
  51. package/dist-lib/components.js.map +1 -1
  52. package/dist-lib/providers/s3compatible.png +0 -0
  53. package/dist-lib/services/plans.d.ts +13 -1
  54. package/dist-lib/services/plans.d.ts.map +1 -1
  55. package/dist-lib/services/plans.js +88 -61
  56. package/dist-lib/services/plans.js.map +1 -1
  57. package/dist-lib/services/settings.d.ts +3 -2
  58. package/dist-lib/services/settings.d.ts.map +1 -1
  59. package/dist-lib/services/settings.js +25 -25
  60. package/dist-lib/services/settings.js.map +1 -1
  61. package/dist-lib/services.js +102 -100
  62. package/dist-lib/styles/core-frontend.css +1 -1
  63. package/dist-lib/utils/constants.d.ts.map +1 -1
  64. package/dist-lib/utils/constants.js +28 -5
  65. package/dist-lib/utils/constants.js.map +1 -1
  66. package/dist-lib/utils/helpers.d.ts +1 -0
  67. package/dist-lib/utils/helpers.d.ts.map +1 -1
  68. package/dist-lib/utils/helpers.js +17 -10
  69. package/dist-lib/utils/helpers.js.map +1 -1
  70. package/dist-lib/utils.js +28 -27
  71. package/package.json +1 -1
  72. package/src/@types/plans.ts +11 -20
  73. package/src/@types/settings.ts +43 -0
  74. package/src/components/Plan/PlanSettings/PlanAdvancedSettings.tsx +4 -4
  75. package/src/components/Plan/PlanSettings/PlanNotificationSettings.tsx +244 -47
  76. package/src/components/Plan/PlanSettings/PlanNotificationSettingsTester.tsx +85 -0
  77. package/src/components/Plan/PlanSettings/PlanPruneSettings.tsx +2 -2
  78. package/src/components/Plan/PlanSettings/PlanSettings.module.scss +71 -0
  79. package/src/components/Settings/GeneralSettings/GeneralSettings.tsx +6 -1
  80. package/src/components/Settings/IntegrationSettings/IntegrationSettings.module.scss +16 -0
  81. package/src/components/Settings/IntegrationSettings/IntegrationSettings.tsx +45 -42
  82. package/src/components/Settings/IntegrationSettings/NtfySettings.tsx +106 -0
  83. package/src/components/Settings/IntegrationSettings/SMTPSettings.tsx +28 -19
  84. package/src/components/Settings/IntegrationSettings/ValidateEmailIntegration.tsx +58 -0
  85. package/src/components/Storage/EditStorage/EditStorage.tsx +1 -1
  86. package/src/components/common/Icon/Icon.tsx +16 -0
  87. package/src/components/index.ts +3 -0
  88. package/src/services/plans.ts +38 -1
  89. package/src/services/settings.ts +4 -4
  90. package/src/utils/constants.ts +23 -0
  91. package/src/utils/helpers.ts +9 -0
  92. /package/dist-lib/providers/{azureBlob.png → azureblob.png} +0 -0
  93. /package/dist-lib/providers/{azureFiles.png → azurefiles.png} +0 -0
  94. /package/dist-lib/providers/{files.png → filescom.png} +0 -0
  95. /package/dist-lib/providers/{oracle.png → oracleobjectstorage.png} +0 -0
  96. /package/dist-lib/providers/{proton.png → protondrive.png} +0 -0
@@ -1,73 +1,75 @@
1
- import { jsxs as p, jsx as e } from "react/jsx-runtime";
2
- import { useState as E } from "react";
3
- import c from "../../common/form/Input/Input.js";
4
- import S from "../../common/Icon/Icon.js";
5
- import { isValidEmail as h } from "../../../utils/helpers.js";
1
+ import { jsxs as f, jsx as r } from "react/jsx-runtime";
2
+ import { useState as m } from "react";
3
+ import s from "../../common/form/Input/Input.js";
4
+ import T from "../../common/Icon/Icon.js";
5
+ import { isValidEmail as P } from "../../../utils/helpers.js";
6
6
  import d from "./IntegrationSettings.module.scss.js";
7
- const y = ({ settings: r, onUpdate: m, showTestModal: f }) => {
8
- const [l, v] = E({
7
+ import M from "./ValidateEmailIntegration.js";
8
+ const q = ({ settingsID: v, settings: n, onUpdate: i }) => {
9
+ const [u, c] = m(!1), [l, E] = m({
9
10
  server: "",
10
11
  port: "",
11
12
  senderEmail: ""
12
- }), u = (a) => {
13
+ }), e = (n == null ? void 0 : n.smtp) || { server: "", port: 587, senderEmail: "", username: "", password: "", connected: !1 }, p = (a) => {
13
14
  a.preventDefault();
14
15
  const o = { server: "", port: "", senderEmail: "" };
15
- r != null && r.server || (o.server = "Server is required"), r != null && r.port || (o.port = "Port is required"), r != null && r.senderEmail ? h(r.senderEmail) || (o.senderEmail = "Invalid email") : o.senderEmail = "Sender Email is required", v(o), Object.values(o).some((i) => i !== "") || f("smtp");
16
+ e != null && e.server || (o.server = "Server is required"), e != null && e.port || (o.port = "Port is required"), e != null && e.senderEmail ? P(e.senderEmail) || (o.senderEmail = "Invalid email") : o.senderEmail = "Sender Email is required", E(o), Object.values(o).some((h) => h !== "") || c(!0);
16
17
  };
17
- return /* @__PURE__ */ p("div", { className: d.integrations, children: [
18
- /* @__PURE__ */ e("div", { className: d.field, children: /* @__PURE__ */ e(
19
- c,
18
+ return /* @__PURE__ */ f("div", { className: d.integrations, children: [
19
+ /* @__PURE__ */ r("div", { className: d.field, children: /* @__PURE__ */ r(
20
+ s,
20
21
  {
21
22
  label: "SMTP Server*",
22
- fieldValue: (r == null ? void 0 : r.server) || "",
23
- onUpdate: (a) => m({ ...r, server: a }),
23
+ fieldValue: (e == null ? void 0 : e.server) || "",
24
+ onUpdate: (a) => i({ ...e, server: a }),
24
25
  error: l == null ? void 0 : l.server
25
26
  }
26
27
  ) }),
27
- /* @__PURE__ */ e("div", { className: d.field, children: /* @__PURE__ */ e(
28
- c,
28
+ /* @__PURE__ */ r("div", { className: d.field, children: /* @__PURE__ */ r(
29
+ s,
29
30
  {
30
31
  label: "SMTP PORT*",
31
- fieldValue: (r == null ? void 0 : r.port) || "",
32
- onUpdate: (a) => m({ ...r, port: parseInt(a, 10) }),
32
+ fieldValue: (e == null ? void 0 : e.port) || "",
33
+ onUpdate: (a) => i({ ...e, port: parseInt(a, 10) }),
33
34
  error: l == null ? void 0 : l.port
34
35
  }
35
36
  ) }),
36
- /* @__PURE__ */ e("div", { className: d.field, children: /* @__PURE__ */ e(
37
- c,
37
+ /* @__PURE__ */ r("div", { className: d.field, children: /* @__PURE__ */ r(
38
+ s,
38
39
  {
39
40
  label: "Sender Email*",
40
41
  type: "email",
41
- fieldValue: (r == null ? void 0 : r.senderEmail) || "",
42
- onUpdate: (a) => m({ ...r, senderEmail: a }),
42
+ fieldValue: (e == null ? void 0 : e.senderEmail) || "",
43
+ onUpdate: (a) => i({ ...e, senderEmail: a }),
43
44
  error: l == null ? void 0 : l.senderEmail
44
45
  }
45
46
  ) }),
46
- /* @__PURE__ */ e("div", { className: d.field, children: /* @__PURE__ */ e(
47
- c,
47
+ /* @__PURE__ */ r("div", { className: d.field, children: /* @__PURE__ */ r(
48
+ s,
48
49
  {
49
50
  label: "SMTP Username",
50
- fieldValue: (r == null ? void 0 : r.username) || "",
51
- onUpdate: (a) => m({ ...r, username: a })
51
+ fieldValue: (e == null ? void 0 : e.username) || "",
52
+ onUpdate: (a) => i({ ...e, username: a })
52
53
  }
53
54
  ) }),
54
- /* @__PURE__ */ e("div", { className: d.field, children: /* @__PURE__ */ e(
55
- c,
55
+ /* @__PURE__ */ r("div", { className: d.field, children: /* @__PURE__ */ r(
56
+ s,
56
57
  {
57
58
  label: "SMTP Password",
58
- fieldValue: (r == null ? void 0 : r.password) || "",
59
+ fieldValue: (e == null ? void 0 : e.password) || "",
59
60
  type: "password",
60
- onUpdate: (a) => m({ ...r, password: a })
61
+ onUpdate: (a) => i({ ...e, password: a })
61
62
  }
62
63
  ) }),
63
- /* @__PURE__ */ e("div", { className: d.field, children: /* @__PURE__ */ p("button", { className: d.validateBtn, onClick: u, type: "button", children: [
64
- /* @__PURE__ */ e(S, { type: "check", size: 10 }),
64
+ /* @__PURE__ */ r("div", { className: d.field, children: /* @__PURE__ */ f("button", { className: d.validateBtn, onClick: p, type: "button", children: [
65
+ /* @__PURE__ */ r(T, { type: "check", size: 10 }),
65
66
  " ",
66
- r != null && r.connected ? "Re-validate SMTP" : "Validate SMTP"
67
- ] }) })
67
+ e != null && e.connected ? "Re-validate SMTP" : "Validate SMTP"
68
+ ] }) }),
69
+ u && /* @__PURE__ */ r(M, { settingsID: v, settings: n, integrationType: "smtp", onClose: () => c(!1) })
68
70
  ] });
69
71
  };
70
72
  export {
71
- y as default
73
+ q as default
72
74
  };
73
75
  //# sourceMappingURL=SMTPSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SMTPSettings.js","sources":["../../../../src/components/Settings/IntegrationSettings/SMTPSettings.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Input from '../../common/form/Input/Input';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { isValidEmail } from '../../../utils/helpers';\r\nimport { SmtpSettingsType } from '../../../@types/settings';\r\nimport classes from './IntegrationSettings.module.scss';\r\n\r\ninterface SMTPSettingsProps {\r\n settings: SmtpSettingsType;\r\n onUpdate: (settings: SmtpSettingsType) => void;\r\n showTestModal: (type: 'smtp') => void;\r\n}\r\n\r\nconst SMTPSettings = ({ settings, onUpdate, showTestModal }: SMTPSettingsProps) => {\r\n const [errorFields, setErrorFields] = useState<{ server: string; port: string; senderEmail: string }>({\r\n server: '',\r\n port: '',\r\n senderEmail: '',\r\n });\r\n\r\n const validateSettings = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n const newErrors = { server: '', port: '', senderEmail: '' };\r\n\r\n if (!settings?.server) {\r\n newErrors.server = 'Server is required';\r\n }\r\n if (!settings?.port) {\r\n newErrors.port = 'Port is required';\r\n }\r\n if (!settings?.senderEmail) {\r\n newErrors.senderEmail = 'Sender Email is required';\r\n } else if (!isValidEmail(settings.senderEmail)) {\r\n newErrors.senderEmail = 'Invalid email';\r\n }\r\n\r\n setErrorFields(newErrors);\r\n const hasErrors = Object.values(newErrors).some((error) => error !== '');\r\n if (!hasErrors) {\r\n showTestModal('smtp');\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.integrations}>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP Server*\"\r\n fieldValue={(settings?.server || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, server: val })}\r\n error={errorFields?.server}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP PORT*\"\r\n fieldValue={(settings?.port || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, port: parseInt(val, 10) })}\r\n error={errorFields?.port}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"Sender Email*\"\r\n type=\"email\"\r\n fieldValue={(settings?.senderEmail || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, senderEmail: val })}\r\n error={errorFields?.senderEmail}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP Username\"\r\n fieldValue={(settings?.username || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, username: val })}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP Password\"\r\n fieldValue={(settings?.password || '') as string}\r\n type=\"password\"\r\n onUpdate={(val) => onUpdate({ ...settings, password: val })}\r\n />\r\n </div>\r\n\r\n <div className={classes.field}>\r\n <button className={classes.validateBtn} onClick={validateSettings} type=\"button\">\r\n <Icon type=\"check\" size={10} /> {settings?.connected ? 'Re-validate SMTP' : 'Validate SMTP'}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SMTPSettings;\r\n"],"names":["SMTPSettings","settings","onUpdate","showTestModal","errorFields","setErrorFields","useState","validateSettings","e","newErrors","isValidEmail","error","jsxs","classes","jsx","Input","val","Icon"],"mappings":"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"}
1
+ {"version":3,"file":"SMTPSettings.js","sources":["../../../../src/components/Settings/IntegrationSettings/SMTPSettings.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Input from '../../common/form/Input/Input';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { isValidEmail } from '../../../utils/helpers';\r\nimport { SmtpSettingsType } from '../../../@types/settings';\r\nimport { IntegrationSettings } from '../../../@types';\r\nimport classes from './IntegrationSettings.module.scss';\r\nimport ValidateEmailIntegration from './ValidateEmailIntegration';\r\n\r\ninterface SMTPSettingsProps {\r\n settingsID: number;\r\n settings: IntegrationSettings;\r\n onUpdate: (settings: SmtpSettingsType) => void;\r\n}\r\n\r\nconst SMTPSettings = ({ settingsID, settings, onUpdate }: SMTPSettingsProps) => {\r\n const [showTestModal, setShowTestModal] = useState(false);\r\n const [errorFields, setErrorFields] = useState<{ server: string; port: string; senderEmail: string }>({\r\n server: '',\r\n port: '',\r\n senderEmail: '',\r\n });\r\n\r\n const smtpSettings = settings?.smtp || { server: '', port: 587, senderEmail: '', username: '', password: '', connected: false };\r\n\r\n const validateSettings = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n\r\n const newErrors = { server: '', port: '', senderEmail: '' };\r\n\r\n if (!smtpSettings?.server) {\r\n newErrors.server = 'Server is required';\r\n }\r\n if (!smtpSettings?.port) {\r\n newErrors.port = 'Port is required';\r\n }\r\n if (!smtpSettings?.senderEmail) {\r\n newErrors.senderEmail = 'Sender Email is required';\r\n } else if (!isValidEmail(smtpSettings.senderEmail)) {\r\n newErrors.senderEmail = 'Invalid email';\r\n }\r\n\r\n setErrorFields(newErrors);\r\n const hasErrors = Object.values(newErrors).some((error) => error !== '');\r\n if (!hasErrors) {\r\n setShowTestModal(true);\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.integrations}>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP Server*\"\r\n fieldValue={(smtpSettings?.server || '') as string}\r\n onUpdate={(val) => onUpdate({ ...smtpSettings, server: val })}\r\n error={errorFields?.server}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP PORT*\"\r\n fieldValue={(smtpSettings?.port || '') as string}\r\n onUpdate={(val) => onUpdate({ ...smtpSettings, port: parseInt(val, 10) })}\r\n error={errorFields?.port}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"Sender Email*\"\r\n type=\"email\"\r\n fieldValue={(smtpSettings?.senderEmail || '') as string}\r\n onUpdate={(val) => onUpdate({ ...smtpSettings, senderEmail: val })}\r\n error={errorFields?.senderEmail}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP Username\"\r\n fieldValue={(smtpSettings?.username || '') as string}\r\n onUpdate={(val) => onUpdate({ ...smtpSettings, username: val })}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"SMTP Password\"\r\n fieldValue={(smtpSettings?.password || '') as string}\r\n type=\"password\"\r\n onUpdate={(val) => onUpdate({ ...smtpSettings, password: val })}\r\n />\r\n </div>\r\n\r\n <div className={classes.field}>\r\n <button className={classes.validateBtn} onClick={validateSettings} type=\"button\">\r\n <Icon type=\"check\" size={10} /> {smtpSettings?.connected ? 'Re-validate SMTP' : 'Validate SMTP'}\r\n </button>\r\n </div>\r\n\r\n {showTestModal && (\r\n <ValidateEmailIntegration settingsID={settingsID} settings={settings} integrationType=\"smtp\" onClose={() => setShowTestModal(false)} />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SMTPSettings;\r\n"],"names":["SMTPSettings","settingsID","settings","onUpdate","showTestModal","setShowTestModal","useState","errorFields","setErrorFields","smtpSettings","validateSettings","e","newErrors","isValidEmail","error","jsxs","classes","jsx","Input","val","Icon","ValidateEmailIntegration"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { IntegrationSettings, IntegrationTypes } from '../../../@types';
2
+ interface ValidateEmailIntegrationProps {
3
+ settingsID: number;
4
+ settings: IntegrationSettings;
5
+ integrationType: IntegrationTypes;
6
+ onClose: () => void;
7
+ }
8
+ declare const ValidateEmailIntegration: ({ settingsID, settings, integrationType, onClose }: ValidateEmailIntegrationProps) => import("react/jsx-runtime").JSX.Element;
9
+ export default ValidateEmailIntegration;
10
+ //# sourceMappingURL=ValidateEmailIntegration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateEmailIntegration.d.ts","sourceRoot":"","sources":["../../../../src/components/Settings/IntegrationSettings/ValidateEmailIntegration.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA0B,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEhG,UAAU,6BAA6B;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,eAAe,EAAE,gBAAgB,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,wBAAwB,GAAI,oDAAoD,6BAA6B,4CA0ClH,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { jsx as i, Fragment as d } from "react/jsx-runtime";
2
+ import { useState as u } from "react";
3
+ import p from "../../common/form/Input/Input.js";
4
+ import f from "../../common/ActionModal/ActionModal.js";
5
+ import { useValidateIntegration as g } from "../../../services/settings.js";
6
+ import { INTEGRATIONS_AVAILABLE as A } from "../../../@types/settings.js";
7
+ const h = ({ settingsID: n, settings: r, integrationType: a, onClose: s }) => {
8
+ var l;
9
+ const [t, m] = u(""), e = g(), o = A[a].name;
10
+ return /* @__PURE__ */ i(
11
+ f,
12
+ {
13
+ title: `Test ${o} Integration`,
14
+ message: /* @__PURE__ */ i(d, { children: /* @__PURE__ */ i(
15
+ p,
16
+ {
17
+ label: "Send Test Email to this email",
18
+ full: !0,
19
+ inline: !1,
20
+ fieldValue: t,
21
+ onUpdate: (c) => m(c),
22
+ type: "email",
23
+ placeholder: "test@test.com"
24
+ }
25
+ ) }),
26
+ errorMessage: (l = e.error) == null ? void 0 : l.message,
27
+ successMessage: e.isSuccess ? `Test email sent. ${o} validated successfully.` : "",
28
+ closeModal: s,
29
+ width: "400px",
30
+ secondaryAction: { title: "Close", action: s },
31
+ primaryAction: {
32
+ title: "Send Test Email",
33
+ type: "default",
34
+ icon: "email",
35
+ isPending: e.isPending,
36
+ action: () => t && e.mutate({
37
+ settingsID: n,
38
+ type: a,
39
+ settings: { ...r },
40
+ test: { email: t }
41
+ })
42
+ }
43
+ }
44
+ );
45
+ };
46
+ export {
47
+ h as default
48
+ };
49
+ //# sourceMappingURL=ValidateEmailIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateEmailIntegration.js","sources":["../../../../src/components/Settings/IntegrationSettings/ValidateEmailIntegration.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Input from '../../common/form/Input/Input';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\nimport { useValidateIntegration } from '../../../services';\r\nimport { INTEGRATIONS_AVAILABLE, IntegrationSettings, IntegrationTypes } from '../../../@types';\r\n\r\ninterface ValidateEmailIntegrationProps {\r\n settingsID: number;\r\n settings: IntegrationSettings;\r\n integrationType: IntegrationTypes;\r\n onClose: () => void;\r\n}\r\n\r\nconst ValidateEmailIntegration = ({ settingsID, settings, integrationType, onClose }: ValidateEmailIntegrationProps) => {\r\n const [testEmail, setTestEmail] = useState('');\r\n const validationMutation = useValidateIntegration();\r\n const integrationName = INTEGRATIONS_AVAILABLE[integrationType as IntegrationTypes].name;\r\n\r\n return (\r\n <ActionModal\r\n title={`Test ${integrationName} Integration`}\r\n message={\r\n <>\r\n <Input\r\n label=\"Send Test Email to this email\"\r\n full={true}\r\n inline={false}\r\n fieldValue={testEmail}\r\n onUpdate={(val) => setTestEmail(val)}\r\n type=\"email\"\r\n placeholder=\"test@test.com\"\r\n />\r\n </>\r\n }\r\n errorMessage={validationMutation.error?.message}\r\n successMessage={validationMutation.isSuccess ? `Test email sent. ${integrationName} validated successfully.` : ''}\r\n closeModal={onClose}\r\n width=\"400px\"\r\n secondaryAction={{ title: 'Close', action: onClose }}\r\n primaryAction={{\r\n title: 'Send Test Email',\r\n type: 'default',\r\n icon: 'email',\r\n isPending: validationMutation.isPending,\r\n action: () =>\r\n testEmail &&\r\n validationMutation.mutate({\r\n settingsID,\r\n type: integrationType,\r\n settings: { ...settings },\r\n test: { email: testEmail },\r\n }),\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default ValidateEmailIntegration;\r\n"],"names":["ValidateEmailIntegration","settingsID","settings","integrationType","onClose","testEmail","setTestEmail","useState","validationMutation","useValidateIntegration","integrationName","INTEGRATIONS_AVAILABLE","jsx","ActionModal","Fragment","Input","val","_a"],"mappings":";;;;;;AAaA,MAAMA,IAA2B,CAAC,EAAE,YAAAC,GAAY,UAAAC,GAAU,iBAAAC,GAAiB,SAAAC,QAA6C;;AACrH,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAE,GACvCC,IAAqBC,EAAA,GACrBC,IAAkBC,EAAuBR,CAAmC,EAAE;AAEpF,SACG,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,OAAO,QAAQH,CAAe;AAAA,MAC9B,SACG,gBAAAE,EAAAE,GAAA,EACG,UAAA,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACE,OAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,YAAYV;AAAA,UACZ,UAAU,CAACW,MAAQV,EAAaU,CAAG;AAAA,UACnC,MAAK;AAAA,UACL,aAAY;AAAA,QAAA;AAAA,MAAA,GAElB;AAAA,MAEH,eAAcC,IAAAT,EAAmB,UAAnB,gBAAAS,EAA0B;AAAA,MACxC,gBAAgBT,EAAmB,YAAY,oBAAoBE,CAAe,6BAA6B;AAAA,MAC/G,YAAYN;AAAA,MACZ,OAAM;AAAA,MACN,iBAAiB,EAAE,OAAO,SAAS,QAAQA,EAAA;AAAA,MAC3C,eAAe;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAWI,EAAmB;AAAA,QAC9B,QAAQ,MACLH,KACAG,EAAmB,OAAO;AAAA,UACvB,YAAAP;AAAA,UACA,MAAME;AAAA,UACN,UAAU,EAAE,GAAGD,EAAA;AAAA,UACf,MAAM,EAAE,OAAOG,EAAA;AAAA,QAAU,CAC3B;AAAA,MAAA;AAAA,IACP;AAAA,EAAA;AAGT;"}
@@ -10,28 +10,28 @@ import B from "../StorageSettings/StorageSettings.js";
10
10
  import I from "../StorageAuthSettings/StorageAuthSettings.js";
11
11
  import { shouldDisplayStorageField as G } from "../../../utils/helpers.js";
12
12
  const ee = ({ close: U, storage: s }) => {
13
- const [h, F] = d({}), [p, k] = d(!1), [g, q] = d(() => s.authType || ""), [m, y] = d({}), [u, b] = d(() => s.settings), [E, $] = d(() => s.tags || []), S = x(), v = s.type, { data: o } = z(s.id);
13
+ const [h, N] = d({}), [p, k] = d(!1), [g, q] = d(() => s.authType || ""), [m, y] = d({}), [u, b] = d(() => s.settings), [E, $] = d(() => s.tags || []), S = x(), v = s.type, { data: o } = z(s.id);
14
14
  R(() => {
15
15
  o && o.success && o.result && o.result.credentials && y(o.result.credentials);
16
16
  }, [o]);
17
17
  const f = A(() => {
18
18
  const a = { required: [], optional: [] };
19
19
  return s.storageFields.forEach((r) => {
20
- r.required ? a.required.push(r) : a.optional.push(r);
20
+ r.required ? a.required.push(r) : r.authFieldType || a.optional.push(r);
21
21
  }), a;
22
- }, [s.storageFields]), N = A(() => {
22
+ }, [s.storageFields]), T = A(() => {
23
23
  var i;
24
24
  const a = ((i = o == null ? void 0 : o.result) == null ? void 0 : i.authTypes) || ["client"];
25
25
  return { fields: s.storageFields.filter((l) => l.authFieldType), types: a };
26
26
  }, [s.storageFields, o]), j = () => {
27
- F({});
27
+ N({});
28
28
  const a = {}, r = s.storageFields;
29
29
  if (r.forEach((i) => {
30
30
  if (!i.required || !G(i, u, r)) return;
31
31
  const l = !!i.authFieldType;
32
32
  if (!(!l || i.authFieldType === g)) return;
33
- const T = l ? m[i.value] : u[i.value];
34
- (T == null || T === "") && (a[i.value] = "Required");
33
+ const F = l ? m[i.value] : u[i.value];
34
+ (F == null || F === "") && (a[i.value] = "Required");
35
35
  }), console.log("errors :", a), Object.keys(a).length === 0) {
36
36
  const i = {
37
37
  id: s.id,
@@ -54,7 +54,7 @@ Error Detail: ${l.message}`), y(o.result.credentials), b(o.result.settings);
54
54
  }
55
55
  });
56
56
  } else
57
- F(a);
57
+ N(a);
58
58
  };
59
59
  return /* @__PURE__ */ e(
60
60
  P,
@@ -100,12 +100,12 @@ Error Detail: ${l.message}`), y(o.result.credentials), b(o.result.settings);
100
100
  s.storageTypeName
101
101
  ] })
102
102
  ] }),
103
- v && N.fields.length > 0 && /* @__PURE__ */ e(
103
+ v && T.fields.length > 0 && /* @__PURE__ */ e(
104
104
  I,
105
105
  {
106
106
  storageType: v,
107
- fields: N.fields,
108
- authTypes: N.types,
107
+ fields: T.fields,
108
+ authTypes: T.types,
109
109
  settings: m,
110
110
  onUpdate: (a) => y(a),
111
111
  errors: h,
@@ -1 +1 @@
1
- {"version":3,"file":"EditStorage.js","sources":["../../../../src/components/Storage/EditStorage/EditStorage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport classes from '../AddStorage/AddStorage.module.scss';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { useGetStorage, useUpdateStorage } from '../../../services/storage';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport TagsInput from '../../common/form/TagsInput/TagsInput';\r\nimport { Storage, storageOptionField } from '../../../@types/storages';\r\nimport StorageSettings from '../StorageSettings/StorageSettings';\r\nimport StorageAuthSettings from '../StorageAuthSettings/StorageAuthSettings';\r\nimport { shouldDisplayStorageField } from '../../../utils/helpers';\r\n\r\ntype EditStorageProps = {\r\n close: () => void;\r\n storage: Storage;\r\n};\r\n\r\nconst EditStorage = ({ close, storage }: EditStorageProps) => {\r\n const [inputError, setInputError] = useState<Record<string, string>>({});\r\n // const [storageTitle, setStorageTitle] = useState(() => storage.name)/;\r\n const [showAdvanced, setShowAdvanced] = useState(false);\r\n const [currentAuthType, setCurrentAuthType] = useState<string>(() => storage.authType || '');\r\n const [storageCredentials, setStorageCredentials] = useState<Record<string, string | number | boolean>>({});\r\n const [storageSettings, setStorageSettings] = useState<Record<string, string | number | boolean>>(() => storage.settings);\r\n const [storageTags, setStorageTags] = useState<string[]>(() => storage.tags || []);\r\n\r\n const updateStorageMutation = useUpdateStorage();\r\n const storageType = storage.type;\r\n const { data: storageData } = useGetStorage(storage.id);\r\n\r\n useEffect(() => {\r\n if (storageData && storageData.success && storageData.result && storageData.result.credentials) {\r\n setStorageCredentials(storageData.result.credentials);\r\n }\r\n }, [storageData]);\r\n\r\n const storageFields = useMemo(() => {\r\n const groupedFields = { required: [], optional: [] };\r\n storage.storageFields.forEach((field: storageOptionField) => {\r\n if (field.required) {\r\n (groupedFields.required as storageOptionField[]).push(field);\r\n } else {\r\n (groupedFields.optional as storageOptionField[]).push(field);\r\n }\r\n });\r\n return groupedFields;\r\n }, [storage.storageFields]);\r\n\r\n const authFields = useMemo(() => {\r\n const types: string[] = storageData?.result?.authTypes || ['client'];\r\n const authFields = storage.storageFields.filter((f) => f.authFieldType);\r\n\r\n return { fields: authFields, types };\r\n }, [storage.storageFields, storageData]);\r\n\r\n const updateStorage = () => {\r\n setInputError({});\r\n const errors: Record<string, string> = {};\r\n\r\n // Validate required fields that are visible AND relevant to current auth type\r\n const allFields = storage.storageFields;\r\n allFields.forEach((fieldDef) => {\r\n if (!fieldDef.required) return;\r\n\r\n // Check if this field should be displayed based on conditions\r\n if (!shouldDisplayStorageField(fieldDef, storageSettings, allFields)) return;\r\n\r\n // Check if this field is relevant to the current auth type\r\n const isAuthField = !!fieldDef.authFieldType;\r\n const isRelevantAuthField = !isAuthField || fieldDef.authFieldType === currentAuthType;\r\n if (!isRelevantAuthField) return;\r\n\r\n // Get the field value from the appropriate state object\r\n const fieldValue = isAuthField ? storageCredentials[fieldDef.value] : storageSettings[fieldDef.value];\r\n\r\n // Check if the value is empty\r\n const isEmpty = fieldValue === undefined || fieldValue === null || fieldValue === '';\r\n\r\n if (isEmpty) {\r\n errors[fieldDef.value] = 'Required';\r\n }\r\n });\r\n // if (!storageTitle) {\r\n // errors['title'] = 'Required';\r\n // }\r\n\r\n console.log('errors :', errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n const storagePayload = {\r\n id: storage.id,\r\n data: {\r\n // name: storageTitle,\r\n type: storageType,\r\n settings: storageSettings,\r\n credentials: storageCredentials,\r\n authType: currentAuthType,\r\n tags: storageTags,\r\n },\r\n };\r\n console.log('payload :', storagePayload);\r\n updateStorageMutation.mutate(storagePayload, {\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(`Error Updating Storage. Changes Reverted.\\nError Detail: ${error.message}`);\r\n setStorageCredentials(storageData.result.credentials);\r\n setStorageSettings(storageData.result.settings);\r\n },\r\n onSuccess: (data: any) => {\r\n console.log('Success :', data);\r\n toast.success(`Successfully Updated Storage!`, { autoClose: 5000 });\r\n },\r\n });\r\n } else {\r\n setInputError(errors);\r\n }\r\n };\r\n\r\n return (\r\n <SidePanel\r\n title={`Edit ${storage.name}`}\r\n icon={<img src={`providers/${storage.type}.png`} />}\r\n close={close}\r\n footer={\r\n <>\r\n <div className={classes.footerLeft}>\r\n <div className={classes.summary}></div>\r\n </div>\r\n <div className={classes.footerRight}>\r\n <button className={classes.createButton} onClick={() => updateStorage()}>\r\n <Icon type=\"check\" size={12} /> Update Storage\r\n </button>\r\n </div>\r\n </>\r\n }\r\n >\r\n <div className={classes.addStorageContent}>\r\n {(updateStorageMutation.isPending || updateStorageMutation.isPending) && (\r\n <div className={classes.loader}>\r\n <Icon size={36} type=\"loading\" />\r\n </div>\r\n )}\r\n\r\n <div className={classes.field}>\r\n <label className={classes.label}>\r\n Storage Name*\r\n <i data-tooltip-id=\"hintTooltip\" data-tooltip-content={'Storage name Cannot be changed'} data-tooltip-place=\"top\">\r\n <Icon type=\"help\" size={13} />\r\n </i>\r\n </label>\r\n {inputError['title'] && <span className={classes.fieldErrorLabel}>{inputError['title']}</span>}\r\n <input\r\n className={classes.input}\r\n type=\"text\"\r\n placeholder=\"Give your Storage a Name\"\r\n value={storage.name || ''}\r\n required\r\n // onChange={(e) => setStorageTitle(e.target.value)}\r\n disabled={true}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label className={classes.label}>\r\n Storage Type*{' '}\r\n <i data-tooltip-id=\"hintTooltip\" data-tooltip-content={'Storage type cannot be changed'} data-tooltip-place=\"top\">\r\n <Icon type=\"help\" size={13} />\r\n </i>\r\n </label>\r\n <div className={classes.storageType}>\r\n <img src={`providers/${storage.type}.png`} />\r\n {storage.storageTypeName}\r\n </div>\r\n </div>\r\n {storageType && authFields.fields.length > 0 && (\r\n <StorageAuthSettings\r\n storageType={storageType}\r\n fields={authFields.fields}\r\n authTypes={authFields.types}\r\n settings={storageCredentials}\r\n onUpdate={(newSettings) => setStorageCredentials(newSettings)}\r\n errors={inputError}\r\n currentAuthType={currentAuthType}\r\n onAuthTypeChange={setCurrentAuthType}\r\n />\r\n )}\r\n {Object.keys(storageFields.optional).length > 0 && (\r\n <div\r\n className={`${classes.advancedButton} ${showAdvanced ? classes.advancedButtonActive : ''}`}\r\n onClick={() => setShowAdvanced(!showAdvanced)}\r\n >\r\n <Icon type={'settings'} />\r\n <span>Advanced Options</span>\r\n <Icon type={showAdvanced ? 'caret-up' : 'caret-down'} />\r\n </div>\r\n )}\r\n {showAdvanced && Object.keys(storageFields.optional).length > 0 && (\r\n <div className={classes.advancedOptions}>\r\n <StorageSettings\r\n fields={storageFields.optional}\r\n settings={storageSettings}\r\n onUpdate={(newSettings) => setStorageSettings(newSettings)}\r\n />\r\n <div className={classes.field}>\r\n <label className={classes.label}>Tags</label>\r\n <TagsInput fieldValue={storageTags} onUpdate={(val) => setStorageTags(val)} />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </SidePanel>\r\n );\r\n};\r\nexport default EditStorage;\r\n"],"names":["EditStorage","close","storage","inputError","setInputError","useState","showAdvanced","setShowAdvanced","currentAuthType","setCurrentAuthType","storageCredentials","setStorageCredentials","storageSettings","setStorageSettings","storageTags","setStorageTags","updateStorageMutation","useUpdateStorage","storageType","storageData","useGetStorage","useEffect","storageFields","useMemo","groupedFields","field","authFields","types","_a","f","updateStorage","errors","allFields","fieldDef","shouldDisplayStorageField","isAuthField","fieldValue","storagePayload","error","toast","data","jsx","SidePanel","jsxs","Fragment","classes","Icon","StorageAuthSettings","newSettings","StorageSettings","TagsInput","val"],"mappings":";;;;;;;;;;;AAiBA,MAAMA,KAAc,CAAC,EAAE,OAAAC,GAAO,SAAAC,QAAgC;AAC3D,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAiC,CAAA,CAAE,GAEjE,CAACC,GAAcC,CAAe,IAAIF,EAAS,EAAK,GAChD,CAACG,GAAiBC,CAAkB,IAAIJ,EAAiB,MAAMH,EAAQ,YAAY,EAAE,GACrF,CAACQ,GAAoBC,CAAqB,IAAIN,EAAoD,CAAA,CAAE,GACpG,CAACO,GAAiBC,CAAkB,IAAIR,EAAoD,MAAMH,EAAQ,QAAQ,GAClH,CAACY,GAAaC,CAAc,IAAIV,EAAmB,MAAMH,EAAQ,QAAQ,EAAE,GAE3Ec,IAAwBC,EAAA,GACxBC,IAAchB,EAAQ,MACtB,EAAE,MAAMiB,EAAA,IAAgBC,EAAclB,EAAQ,EAAE;AAEtD,EAAAmB,EAAU,MAAM;AACb,IAAIF,KAAeA,EAAY,WAAWA,EAAY,UAAUA,EAAY,OAAO,eAChFR,EAAsBQ,EAAY,OAAO,WAAW;AAAA,EAE1D,GAAG,CAACA,CAAW,CAAC;AAEhB,QAAMG,IAAgBC,EAAQ,MAAM;AACjC,UAAMC,IAAgB,EAAE,UAAU,CAAA,GAAI,UAAU,CAAA,EAAC;AACjD,WAAAtB,EAAQ,cAAc,QAAQ,CAACuB,MAA8B;AAC1D,MAAIA,EAAM,WACND,EAAc,SAAkC,KAAKC,CAAK,IAE1DD,EAAc,SAAkC,KAAKC,CAAK;AAAA,IAEjE,CAAC,GACMD;AAAA,EACV,GAAG,CAACtB,EAAQ,aAAa,CAAC,GAEpBwB,IAAaH,EAAQ,MAAM;;AAC9B,UAAMI,MAAkBC,IAAAT,KAAA,gBAAAA,EAAa,WAAb,gBAAAS,EAAqB,cAAa,CAAC,QAAQ;AAGnE,WAAO,EAAE,QAFU1B,EAAQ,cAAc,OAAO,CAAC2B,MAAMA,EAAE,aAAa,GAEzC,OAAAF,EAAA;AAAA,EAChC,GAAG,CAACzB,EAAQ,eAAeiB,CAAW,CAAC,GAEjCW,IAAgB,MAAM;AACzB,IAAA1B,EAAc,CAAA,CAAE;AAChB,UAAM2B,IAAiC,CAAA,GAGjCC,IAAY9B,EAAQ;AA4B1B,QA3BA8B,EAAU,QAAQ,CAACC,MAAa;AAI7B,UAHI,CAACA,EAAS,YAGV,CAACC,EAA0BD,GAAUrB,GAAiBoB,CAAS,EAAG;AAGtE,YAAMG,IAAc,CAAC,CAACF,EAAS;AAE/B,UAAI,EADwB,CAACE,KAAeF,EAAS,kBAAkBzB,GAC7C;AAG1B,YAAM4B,IAAaD,IAAczB,EAAmBuB,EAAS,KAAK,IAAIrB,EAAgBqB,EAAS,KAAK;AAKpG,OAF4CG,KAAe,QAAQA,MAAe,QAG/EL,EAAOE,EAAS,KAAK,IAAI;AAAA,IAE/B,CAAC,GAKD,QAAQ,IAAI,YAAYF,CAAM,GAE1B,OAAO,KAAKA,CAAM,EAAE,WAAW,GAAG;AACnC,YAAMM,IAAiB;AAAA,QACpB,IAAInC,EAAQ;AAAA,QACZ,MAAM;AAAA;AAAA,UAEH,MAAMgB;AAAA,UACN,UAAUN;AAAA,UACV,aAAaF;AAAA,UACb,UAAUF;AAAA,UACV,MAAMM;AAAA,QAAA;AAAA,MACT;AAEH,cAAQ,IAAI,aAAauB,CAAc,GACvCrB,EAAsB,OAAOqB,GAAgB;AAAA,QAC1C,SAAS,CAACC,MAAiB;AACxB,kBAAQ,IAAI,WAAWA,KAAA,gBAAAA,EAAO,OAAO,GACrCC,EAAM,MAAM;AAAA,gBAA4DD,EAAM,OAAO,EAAE,GACvF3B,EAAsBQ,EAAY,OAAO,WAAW,GACpDN,EAAmBM,EAAY,OAAO,QAAQ;AAAA,QACjD;AAAA,QACA,WAAW,CAACqB,MAAc;AACvB,kBAAQ,IAAI,aAAaA,CAAI,GAC7BD,EAAM,QAAQ,iCAAiC,EAAE,WAAW,KAAM;AAAA,QACrE;AAAA,MAAA,CACF;AAAA,IACJ;AACG,MAAAnC,EAAc2B,CAAM;AAAA,EAE1B;AAEA,SACG,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,OAAO,QAAQxC,EAAQ,IAAI;AAAA,MAC3B,MAAM,gBAAAuC,EAAC,OAAA,EAAI,KAAK,aAAavC,EAAQ,IAAI,QAAQ;AAAA,MACjD,OAAAD;AAAA,MACA,QACG,gBAAA0C,EAAAC,GAAA,EACG,UAAA;AAAA,QAAA,gBAAAH,EAAC,OAAA,EAAI,WAAWI,EAAQ,YACrB,4BAAC,OAAA,EAAI,WAAWA,EAAQ,QAAA,CAAS,EAAA,CACpC;AAAA,QACA,gBAAAJ,EAAC,OAAA,EAAI,WAAWI,EAAQ,aACrB,UAAA,gBAAAF,EAAC,UAAA,EAAO,WAAWE,EAAQ,cAAc,SAAS,MAAMf,KACrD,UAAA;AAAA,UAAA,gBAAAW,EAACK,GAAA,EAAK,MAAK,SAAQ,MAAM,IAAI;AAAA,UAAE;AAAA,QAAA,EAAA,CAClC,EAAA,CACH;AAAA,MAAA,GACH;AAAA,MAGH,UAAA,gBAAAH,EAAC,OAAA,EAAI,WAAWE,EAAQ,mBACnB,UAAA;AAAA,SAAA7B,EAAsB,aAAaA,EAAsB,cACxD,gBAAAyB,EAAC,SAAI,WAAWI,EAAQ,QACrB,UAAA,gBAAAJ,EAACK,GAAA,EAAK,MAAM,IAAI,MAAK,WAAU,GAClC;AAAA,QAGH,gBAAAH,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,UAAA,gBAAAF,EAAC,SAAA,EAAM,WAAWE,EAAQ,OAAO,UAAA;AAAA,YAAA;AAAA,YAE9B,gBAAAJ,EAAC,KAAA,EAAE,mBAAgB,eAAc,wBAAsB,kCAAkC,sBAAmB,OACzG,UAAA,gBAAAA,EAACK,GAAA,EAAK,MAAK,QAAO,MAAM,IAAI,EAAA,CAC/B;AAAA,UAAA,GACH;AAAA,UACC3C,EAAW,SAAY,gBAAAsC,EAAC,QAAA,EAAK,WAAWI,EAAQ,iBAAkB,UAAA1C,EAAW,MAAO,CAAE;AAAA,UACvF,gBAAAsC;AAAA,YAAC;AAAA,YAAA;AAAA,cACE,WAAWI,EAAQ;AAAA,cACnB,MAAK;AAAA,cACL,aAAY;AAAA,cACZ,OAAO3C,EAAQ,QAAQ;AAAA,cACvB,UAAQ;AAAA,cAER,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QACb,GACH;AAAA,QACA,gBAAAyC,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,UAAA,gBAAAF,EAAC,SAAA,EAAM,WAAWE,EAAQ,OAAO,UAAA;AAAA,YAAA;AAAA,YAChB;AAAA,YACd,gBAAAJ,EAAC,KAAA,EAAE,mBAAgB,eAAc,wBAAsB,kCAAkC,sBAAmB,OACzG,UAAA,gBAAAA,EAACK,GAAA,EAAK,MAAK,QAAO,MAAM,IAAI,EAAA,CAC/B;AAAA,UAAA,GACH;AAAA,UACA,gBAAAH,EAAC,OAAA,EAAI,WAAWE,EAAQ,aACrB,UAAA;AAAA,YAAA,gBAAAJ,EAAC,OAAA,EAAI,KAAK,aAAavC,EAAQ,IAAI,QAAQ;AAAA,YAC1CA,EAAQ;AAAA,UAAA,EAAA,CACZ;AAAA,QAAA,GACH;AAAA,QACCgB,KAAeQ,EAAW,OAAO,SAAS,KACxC,gBAAAe;AAAA,UAACM;AAAA,UAAA;AAAA,YACE,aAAA7B;AAAA,YACA,QAAQQ,EAAW;AAAA,YACnB,WAAWA,EAAW;AAAA,YACtB,UAAUhB;AAAA,YACV,UAAU,CAACsC,MAAgBrC,EAAsBqC,CAAW;AAAA,YAC5D,QAAQ7C;AAAA,YACR,iBAAAK;AAAA,YACA,kBAAkBC;AAAA,UAAA;AAAA,QAAA;AAAA,QAGvB,OAAO,KAAKa,EAAc,QAAQ,EAAE,SAAS,KAC3C,gBAAAqB;AAAA,UAAC;AAAA,UAAA;AAAA,YACE,WAAW,GAAGE,EAAQ,cAAc,IAAIvC,IAAeuC,EAAQ,uBAAuB,EAAE;AAAA,YACxF,SAAS,MAAMtC,EAAgB,CAACD,CAAY;AAAA,YAE5C,UAAA;AAAA,cAAA,gBAAAmC,EAACK,GAAA,EAAK,MAAM,WAAA,CAAY;AAAA,cACxB,gBAAAL,EAAC,UAAK,UAAA,mBAAA,CAAgB;AAAA,cACtB,gBAAAA,EAACK,GAAA,EAAK,MAAMxC,IAAe,aAAa,aAAA,CAAc;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAG3DA,KAAgB,OAAO,KAAKgB,EAAc,QAAQ,EAAE,SAAS,KAC3D,gBAAAqB,EAAC,OAAA,EAAI,WAAWE,EAAQ,iBACrB,UAAA;AAAA,UAAA,gBAAAJ;AAAA,YAACQ;AAAA,YAAA;AAAA,cACE,QAAQ3B,EAAc;AAAA,cACtB,UAAUV;AAAA,cACV,UAAU,CAACoC,MAAgBnC,EAAmBmC,CAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAE5D,gBAAAL,EAAC,OAAA,EAAI,WAAWE,EAAQ,OACrB,UAAA;AAAA,YAAA,gBAAAJ,EAAC,SAAA,EAAM,WAAWI,EAAQ,OAAO,UAAA,QAAI;AAAA,YACrC,gBAAAJ,EAACS,KAAU,YAAYpC,GAAa,UAAU,CAACqC,MAAQpC,EAAeoC,CAAG,EAAA,CAAG;AAAA,UAAA,EAAA,CAC/E;AAAA,QAAA,EAAA,CACH;AAAA,MAAA,EAAA,CAEN;AAAA,IAAA;AAAA,EAAA;AAGT;"}
1
+ {"version":3,"file":"EditStorage.js","sources":["../../../../src/components/Storage/EditStorage/EditStorage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport classes from '../AddStorage/AddStorage.module.scss';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport { useGetStorage, useUpdateStorage } from '../../../services/storage';\r\nimport SidePanel from '../../common/SidePanel/SidePanel';\r\nimport TagsInput from '../../common/form/TagsInput/TagsInput';\r\nimport { Storage, storageOptionField } from '../../../@types/storages';\r\nimport StorageSettings from '../StorageSettings/StorageSettings';\r\nimport StorageAuthSettings from '../StorageAuthSettings/StorageAuthSettings';\r\nimport { shouldDisplayStorageField } from '../../../utils/helpers';\r\n\r\ntype EditStorageProps = {\r\n close: () => void;\r\n storage: Storage;\r\n};\r\n\r\nconst EditStorage = ({ close, storage }: EditStorageProps) => {\r\n const [inputError, setInputError] = useState<Record<string, string>>({});\r\n // const [storageTitle, setStorageTitle] = useState(() => storage.name)/;\r\n const [showAdvanced, setShowAdvanced] = useState(false);\r\n const [currentAuthType, setCurrentAuthType] = useState<string>(() => storage.authType || '');\r\n const [storageCredentials, setStorageCredentials] = useState<Record<string, string | number | boolean>>({});\r\n const [storageSettings, setStorageSettings] = useState<Record<string, string | number | boolean>>(() => storage.settings);\r\n const [storageTags, setStorageTags] = useState<string[]>(() => storage.tags || []);\r\n\r\n const updateStorageMutation = useUpdateStorage();\r\n const storageType = storage.type;\r\n const { data: storageData } = useGetStorage(storage.id);\r\n\r\n useEffect(() => {\r\n if (storageData && storageData.success && storageData.result && storageData.result.credentials) {\r\n setStorageCredentials(storageData.result.credentials);\r\n }\r\n }, [storageData]);\r\n\r\n const storageFields = useMemo(() => {\r\n const groupedFields = { required: [], optional: [] };\r\n storage.storageFields.forEach((field: storageOptionField) => {\r\n if (field.required) {\r\n (groupedFields.required as storageOptionField[]).push(field);\r\n } else if (!field.authFieldType) {\r\n (groupedFields.optional as storageOptionField[]).push(field);\r\n }\r\n });\r\n return groupedFields;\r\n }, [storage.storageFields]);\r\n\r\n const authFields = useMemo(() => {\r\n const types: string[] = storageData?.result?.authTypes || ['client'];\r\n const authFields = storage.storageFields.filter((f) => f.authFieldType);\r\n\r\n return { fields: authFields, types };\r\n }, [storage.storageFields, storageData]);\r\n\r\n const updateStorage = () => {\r\n setInputError({});\r\n const errors: Record<string, string> = {};\r\n\r\n // Validate required fields that are visible AND relevant to current auth type\r\n const allFields = storage.storageFields;\r\n allFields.forEach((fieldDef) => {\r\n if (!fieldDef.required) return;\r\n\r\n // Check if this field should be displayed based on conditions\r\n if (!shouldDisplayStorageField(fieldDef, storageSettings, allFields)) return;\r\n\r\n // Check if this field is relevant to the current auth type\r\n const isAuthField = !!fieldDef.authFieldType;\r\n const isRelevantAuthField = !isAuthField || fieldDef.authFieldType === currentAuthType;\r\n if (!isRelevantAuthField) return;\r\n\r\n // Get the field value from the appropriate state object\r\n const fieldValue = isAuthField ? storageCredentials[fieldDef.value] : storageSettings[fieldDef.value];\r\n\r\n // Check if the value is empty\r\n const isEmpty = fieldValue === undefined || fieldValue === null || fieldValue === '';\r\n\r\n if (isEmpty) {\r\n errors[fieldDef.value] = 'Required';\r\n }\r\n });\r\n // if (!storageTitle) {\r\n // errors['title'] = 'Required';\r\n // }\r\n\r\n console.log('errors :', errors);\r\n\r\n if (Object.keys(errors).length === 0) {\r\n const storagePayload = {\r\n id: storage.id,\r\n data: {\r\n // name: storageTitle,\r\n type: storageType,\r\n settings: storageSettings,\r\n credentials: storageCredentials,\r\n authType: currentAuthType,\r\n tags: storageTags,\r\n },\r\n };\r\n console.log('payload :', storagePayload);\r\n updateStorageMutation.mutate(storagePayload, {\r\n onError: (error: Error) => {\r\n console.log('error :', error?.message);\r\n toast.error(`Error Updating Storage. Changes Reverted.\\nError Detail: ${error.message}`);\r\n setStorageCredentials(storageData.result.credentials);\r\n setStorageSettings(storageData.result.settings);\r\n },\r\n onSuccess: (data: any) => {\r\n console.log('Success :', data);\r\n toast.success(`Successfully Updated Storage!`, { autoClose: 5000 });\r\n },\r\n });\r\n } else {\r\n setInputError(errors);\r\n }\r\n };\r\n\r\n return (\r\n <SidePanel\r\n title={`Edit ${storage.name}`}\r\n icon={<img src={`providers/${storage.type}.png`} />}\r\n close={close}\r\n footer={\r\n <>\r\n <div className={classes.footerLeft}>\r\n <div className={classes.summary}></div>\r\n </div>\r\n <div className={classes.footerRight}>\r\n <button className={classes.createButton} onClick={() => updateStorage()}>\r\n <Icon type=\"check\" size={12} /> Update Storage\r\n </button>\r\n </div>\r\n </>\r\n }\r\n >\r\n <div className={classes.addStorageContent}>\r\n {(updateStorageMutation.isPending || updateStorageMutation.isPending) && (\r\n <div className={classes.loader}>\r\n <Icon size={36} type=\"loading\" />\r\n </div>\r\n )}\r\n\r\n <div className={classes.field}>\r\n <label className={classes.label}>\r\n Storage Name*\r\n <i data-tooltip-id=\"hintTooltip\" data-tooltip-content={'Storage name Cannot be changed'} data-tooltip-place=\"top\">\r\n <Icon type=\"help\" size={13} />\r\n </i>\r\n </label>\r\n {inputError['title'] && <span className={classes.fieldErrorLabel}>{inputError['title']}</span>}\r\n <input\r\n className={classes.input}\r\n type=\"text\"\r\n placeholder=\"Give your Storage a Name\"\r\n value={storage.name || ''}\r\n required\r\n // onChange={(e) => setStorageTitle(e.target.value)}\r\n disabled={true}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <label className={classes.label}>\r\n Storage Type*{' '}\r\n <i data-tooltip-id=\"hintTooltip\" data-tooltip-content={'Storage type cannot be changed'} data-tooltip-place=\"top\">\r\n <Icon type=\"help\" size={13} />\r\n </i>\r\n </label>\r\n <div className={classes.storageType}>\r\n <img src={`providers/${storage.type}.png`} />\r\n {storage.storageTypeName}\r\n </div>\r\n </div>\r\n {storageType && authFields.fields.length > 0 && (\r\n <StorageAuthSettings\r\n storageType={storageType}\r\n fields={authFields.fields}\r\n authTypes={authFields.types}\r\n settings={storageCredentials}\r\n onUpdate={(newSettings) => setStorageCredentials(newSettings)}\r\n errors={inputError}\r\n currentAuthType={currentAuthType}\r\n onAuthTypeChange={setCurrentAuthType}\r\n />\r\n )}\r\n {Object.keys(storageFields.optional).length > 0 && (\r\n <div\r\n className={`${classes.advancedButton} ${showAdvanced ? classes.advancedButtonActive : ''}`}\r\n onClick={() => setShowAdvanced(!showAdvanced)}\r\n >\r\n <Icon type={'settings'} />\r\n <span>Advanced Options</span>\r\n <Icon type={showAdvanced ? 'caret-up' : 'caret-down'} />\r\n </div>\r\n )}\r\n {showAdvanced && Object.keys(storageFields.optional).length > 0 && (\r\n <div className={classes.advancedOptions}>\r\n <StorageSettings\r\n fields={storageFields.optional}\r\n settings={storageSettings}\r\n onUpdate={(newSettings) => setStorageSettings(newSettings)}\r\n />\r\n <div className={classes.field}>\r\n <label className={classes.label}>Tags</label>\r\n <TagsInput fieldValue={storageTags} onUpdate={(val) => setStorageTags(val)} />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </SidePanel>\r\n );\r\n};\r\nexport default EditStorage;\r\n"],"names":["EditStorage","close","storage","inputError","setInputError","useState","showAdvanced","setShowAdvanced","currentAuthType","setCurrentAuthType","storageCredentials","setStorageCredentials","storageSettings","setStorageSettings","storageTags","setStorageTags","updateStorageMutation","useUpdateStorage","storageType","storageData","useGetStorage","useEffect","storageFields","useMemo","groupedFields","field","authFields","types","_a","f","updateStorage","errors","allFields","fieldDef","shouldDisplayStorageField","isAuthField","fieldValue","storagePayload","error","toast","data","jsx","SidePanel","jsxs","Fragment","classes","Icon","StorageAuthSettings","newSettings","StorageSettings","TagsInput","val"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../src/components/common/Icon/Icon.tsx"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,QAAA,MAAM,IAAI,GAAI,uCAAuE,SAAS,4CAw9C7F,CAAC;AAmBF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../src/components/common/Icon/Icon.tsx"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAOF,QAAA,MAAM,IAAI,GAAI,uCAAuE,SAAS,4CAw+C7F,CAAC;AAmBF,eAAe,IAAI,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs as e, jsx as a } from "react/jsx-runtime";
2
- const r = ({ type: c, color: l = "currentColor", size: h = 16, title: d = "", classes: t = "" }) => /* @__PURE__ */ e("span", { className: `icon ${t}`, title: d, children: [
2
+ const r = ({ type: c, color: l = "currentColor", size: h = 16, title: t = "", classes: d = "" }) => /* @__PURE__ */ e("span", { className: `icon ${d}`, title: t, children: [
3
3
  c === "logo" && /* @__PURE__ */ a(i, { size: h, viewBox: "0 0 120 120", children: /* @__PURE__ */ a(
4
4
  "path",
5
5
  {
@@ -1364,6 +1364,20 @@ const r = ({ type: c, color: l = "currentColor", size: h = 16, title: d = "", cl
1364
1364
  fill: "#338574",
1365
1365
  d: "M11 1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1M9.5 9h-4c-.28 0-.5-.22-.5-.5s.22-.5.5-.5h4c.28 0 .5.22.5.5s-.22.5-.5.5m-7 .12a.62.62 0 0 1-.44-.18a.63.63 0 0 1 0-.88L4.12 6L2.06 3.94a.63.63 0 0 1 0-.88c.24-.24.64-.24.88 0L5.09 5.2c.44.44.44 1.15 0 1.59L2.94 8.94a.62.62 0 0 1-.44.18"
1366
1366
  }
1367
+ ) }),
1368
+ c === "discord" && /* @__PURE__ */ a(i, { size: h, viewBox: "0 0 256 199", children: /* @__PURE__ */ a(
1369
+ "path",
1370
+ {
1371
+ fill: "#5865f2",
1372
+ d: "M216.856 16.597A208.5 208.5 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046q-29.538-4.442-58.533 0c-1.832-4.4-4.55-9.933-6.846-14.046a207.8 207.8 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161 161 0 0 0 79.735 175.3a136.4 136.4 0 0 1-21.846-10.632a109 109 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a132 132 0 0 0 5.355 4.237a136 136 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848c21.142-6.58 42.646-16.637 64.815-33.213c5.316-56.288-9.08-105.09-38.056-148.36M85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2s23.236 11.804 23.015 26.2c.02 14.375-10.148 26.18-23.015 26.18m85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2c0 14.375-10.148 26.18-23.015 26.18"
1373
+ }
1374
+ ) }),
1375
+ c === "webhook" && /* @__PURE__ */ a(i, { size: h, viewBox: "0 0 24 24", children: /* @__PURE__ */ a(
1376
+ "path",
1377
+ {
1378
+ fill: l,
1379
+ d: "M7 21q-2.075 0-3.537-1.463T2 16q0-1.4.675-2.537t1.8-1.788q.525-.3 1.025.013t.5.862q0 .275-.112.5t-.313.325q-.7.375-1.137 1.075T4 16q0 1.25.875 2.125T7 19t2.125-.875T10 16q0-.425.238-.712T10.9 15h4.975q.2-.225.488-.363T17 14.5q.625 0 1.063.438T18.5 16t-.437 1.063T17 17.5q-.35 0-.638-.137T15.876 17H11.9q-.35 1.725-1.713 2.863T7 21m0-3.5q-.625 0-1.062-.437T5.5 16q0-.55.35-.95t.85-.525l2.35-3.9q-.725-.675-1.138-1.612T7.5 7q0-2.075 1.463-3.537T12.5 2q1.75 0 3.088 1.063T17.35 5.75q.125.475-.175.863t-.8.387q-.325 0-.612-.238t-.388-.587q-.275-.95-1.05-1.562T12.5 4q-1.25 0-2.125.875T9.5 7q0 .825.413 1.513T10.974 9.6q.35.2.438.5t-.088.6l-2.9 4.85q.05.125.063.225T8.5 16q0 .625-.437 1.063T7 17.5M17 21q-.65 0-1.263-.162T14.6 20.4q-.675-.375-.537-1.137t1.012-.763q.125 0 .275.05t.275.125q.325.175.663.25T17 19q1.25 0 2.125-.875T20 16t-.875-2.125T17 13q-.25 0-.475.038t-.45.112q-.4.125-.75.013t-.525-.388l-2.575-4.3q-.525-.1-.875-.5T11 7q0-.625.438-1.062T12.5 5.5t1.063.438T14 7v.213q0 .087-.05.212l2.175 3.65q.2-.05.425-.062T17 11q2.075 0 3.538 1.463T22 16t-1.463 3.538T17 21"
1380
+ }
1367
1381
  ) })
1368
1382
  ] }), i = ({ children: c, viewBox: l, size: h }) => /* @__PURE__ */ a(
1369
1383
  "svg",