@bigbinary/neeto-rules-frontend 2.5.15-beta-8 → 2.5.15-beta-9

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.
@@ -13,22 +13,24 @@ var Delete = require('@bigbinary/neeto-icons/Delete');
13
13
  var Refresh = require('@bigbinary/neeto-icons/Refresh');
14
14
  var Button = require('@bigbinary/neetoui/Button');
15
15
  var reactI18next = require('react-i18next');
16
- var useUtilityStore = require('../useUtilityStore-BFuftXo4.js');
16
+ var useUtilityStore = require('../useUtilityStore-DhJI92iM.js');
17
17
  var classNames = require('classnames');
18
18
  var Typography = require('@bigbinary/neetoui/Typography');
19
19
  var ramda = require('ramda');
20
+ var i18next = require('i18next');
21
+ var yup = require('yup');
20
22
  var Radio = require('@bigbinary/neetoui/formik/Radio');
21
23
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
22
24
  var managers = require('@bigbinary/neetoui/managers');
23
25
  var jsxRuntime = require('react/jsx-runtime');
24
26
  var Collapse = require('@bigbinary/neeto-icons/Collapse');
25
- var i18next = require('i18next');
26
27
  var Left = require('@bigbinary/neeto-icons/Left');
27
28
  var Textarea = require('@bigbinary/neetoui/formik/Textarea');
28
29
  var Input$1 = require('@bigbinary/neetoui/formik/Input');
29
30
  var Switch = require('@bigbinary/neetoui/formik/Switch');
30
31
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
31
32
  var Editor = require('@monaco-editor/react');
33
+ var Help = require('@bigbinary/neeto-icons/Help');
32
34
  var DynamicVariables = require('@bigbinary/neeto-molecules/DynamicVariables');
33
35
  var Label = require('@bigbinary/neetoui/Label');
34
36
  var Select = require('@bigbinary/neetoui/Select');
@@ -47,7 +49,6 @@ var _toArray = require('@babel/runtime/helpers/toArray');
47
49
  var PhoneNumber = require('@bigbinary/neeto-molecules/PhoneNumber');
48
50
  var Tag = require('@bigbinary/neetoui/Tag');
49
51
  var reactSelect = require('react-select');
50
- var yup = require('yup');
51
52
  var constants = require('../constants-BkPVd-Gz.js');
52
53
  var Radio$1 = require('@bigbinary/neetoui/Radio');
53
54
  var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
@@ -60,7 +61,6 @@ var Tooltip = require('@bigbinary/neetoui/Tooltip');
60
61
  var Container = require('@bigbinary/neeto-molecules/Container');
61
62
  var NeetoHeader = require('@bigbinary/neeto-molecules/Header');
62
63
  var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
63
- var Help = require('@bigbinary/neeto-icons/Help');
64
64
  var Switch$1 = require('@bigbinary/neetoui/Switch');
65
65
  var useCustomDataStore = require('../useCustomDataStore-BEG8I__n.js');
66
66
  var _typeof = require('@babel/runtime/helpers/typeof');
@@ -87,7 +87,7 @@ var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
87
87
 
88
88
  var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}}
89
89
 
90
- var css = ".neeto-rules-main-content__container{height:100dvh!important}.neeto-rules-main-card .neeto-ui-btn.underline{text-align:left}.neeto-rules-side-panel{flex-grow:0;flex-shrink:0}.neeto-rules-side-panel--small{width:320px}@media (min-width:1024px){.neeto-rules-side-panel--small{width:380px}}.neeto-rules-side-panel--large{width:380px}@media (min-width:1024px){.neeto-rules-side-panel--large{width:480px}}.neeto-rules-json-editor__wrapper{height:35vh;position:relative}.neeto-rules-json-editor__editor{height:100%}.neeto-rules-json-editor__dynamic-variables{position:absolute;right:1rem;top:1rem;z-index:10}[data-tippy-root]{z-index:99999!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19sYXlvdXQuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9tYWluLnNjc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvc3R5bGVzaGVldHMvY29tcG9uZW50cy9fcGFuZS5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2pzb24tZWRpdG9yLnNjc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvc3R5bGVzaGVldHMvY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FDRSx1QkNDRixDREVBLCtDQUNFLGVDQ0YsQ0NOQSx3QkFFRSxXQUFBLENBREEsYURVRixDQ1BFLCtCQUNFLFdEU0osQ0NQSSwwQkFIRiwrQkFJSSxXRFVKLENBQ0YsQ0NQRSwrQkFDRSxXRFNKLENDUEksMEJBSEYsK0JBSUksV0RVSixDQUNGLENFMUJFLGtDQUVFLFdBQUEsQ0FEQSxpQkY4QkosQ0UxQkUsaUNBQ0UsV0Y0QkosQ0V6QkUsNENBQ0UsaUJBQUEsQ0FFQSxVQUFBLENBREEsUUFBQSxDQUVBLFVGMkJKLENHekNBLGtCQUNFLHVCSDRDRiIsInNvdXJjZXNDb250ZW50IjpbIi5uZWV0by1ydWxlcy1tYWluLWNvbnRlbnRfX2NvbnRhaW5lciB7XG4gIGhlaWdodDogMTAwZHZoICFpbXBvcnRhbnQ7XG59XG5cbi5uZWV0by1ydWxlcy1tYWluLWNhcmQgLm5lZXRvLXVpLWJ0bi51bmRlcmxpbmUge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufSIsIi5uZWV0by1ydWxlcy1tYWluLWNvbnRlbnRfX2NvbnRhaW5lciB7XG4gIGhlaWdodDogMTAwZHZoICFpbXBvcnRhbnQ7XG59XG5cbi5uZWV0by1ydWxlcy1tYWluLWNhcmQgLm5lZXRvLXVpLWJ0bi51bmRlcmxpbmUge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4ubmVldG8tcnVsZXMtc2lkZS1wYW5lbCB7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBmbGV4LWdyb3c6IDA7XG59XG4ubmVldG8tcnVsZXMtc2lkZS1wYW5lbC0tc21hbGwge1xuICB3aWR0aDogMzIwcHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uZWV0by1ydWxlcy1zaWRlLXBhbmVsLS1zbWFsbCB7XG4gICAgd2lkdGg6IDM4MHB4O1xuICB9XG59XG4ubmVldG8tcnVsZXMtc2lkZS1wYW5lbC0tbGFyZ2Uge1xuICB3aWR0aDogMzgwcHg7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5uZWV0by1ydWxlcy1zaWRlLXBhbmVsLS1sYXJnZSB7XG4gICAgd2lkdGg6IDQ4MHB4O1xuICB9XG59XG5cbi5uZWV0by1ydWxlcy1qc29uLWVkaXRvcl9fd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAzNXZoO1xufVxuLm5lZXRvLXJ1bGVzLWpzb24tZWRpdG9yX19lZGl0b3Ige1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubmVldG8tcnVsZXMtanNvbi1lZGl0b3JfX2R5bmFtaWMtdmFyaWFibGVzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFyZW07XG4gIHJpZ2h0OiAxcmVtO1xuICB6LWluZGV4OiAxMDtcbn1cblxuW2RhdGEtdGlwcHktcm9vdF0ge1xuICB6LWluZGV4OiA5OTk5OSAhaW1wb3J0YW50O1xufSIsIi5uZWV0by1ydWxlcy1zaWRlLXBhbmVsIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZsZXgtZ3JvdzogMDtcblxuICAmLS1zbWFsbCB7XG4gICAgd2lkdGg6IDMyMHB4O1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAgICAgd2lkdGg6IDM4MHB4O1xuICAgIH1cbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICB3aWR0aDogMzgwcHg7XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gICAgICB3aWR0aDogNDgwcHg7XG4gICAgfVxuICB9XG59IiwiLm5lZXRvLXJ1bGVzLWpzb24tZWRpdG9yIHtcbiAgJl9fd3JhcHBlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogMzV2aDtcbiAgfVxuXG4gICZfX2VkaXRvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgJl9fZHluYW1pYy12YXJpYWJsZXMge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDFyZW07XG4gICAgcmlnaHQ6IDFyZW07XG4gICAgei1pbmRleDogMTA7XG4gIH1cbn1cbiIsIltkYXRhLXRpcHB5LXJvb3RdIHtcbiAgei1pbmRleDogOTk5OTkgIWltcG9ydGFudDtcbn1cbiJdfQ== */";
90
+ var css = ".neeto-rules-main-content__container{height:100dvh!important}.neeto-rules-main-card .neeto-ui-btn.underline{text-align:left}.neeto-rules-side-panel{flex-grow:0;flex-shrink:0}.neeto-rules-side-panel--small{width:320px}@media (min-width:1024px){.neeto-rules-side-panel--small{width:380px}}.neeto-rules-side-panel--large{width:380px}@media (min-width:1024px){.neeto-rules-side-panel--large{width:480px}}.neeto-rules-json-editor__wrapper{height:35vh;padding-bottom:2rem;position:relative}.neeto-rules-json-editor__editor{height:100%}.neeto-rules-json-editor__dynamic-variables{position:absolute;right:1rem;top:1rem;z-index:10}[data-tippy-root]{z-index:99999!important}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9jb21wb25lbnRzL19sYXlvdXQuc2NzcyIsImFwcC9qYXZhc2NyaXB0L3NyYy9zdHlsZXNoZWV0cy9tYWluLnNjc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvc3R5bGVzaGVldHMvY29tcG9uZW50cy9fcGFuZS5zY3NzIiwiYXBwL2phdmFzY3JpcHQvc3JjL3N0eWxlc2hlZXRzL2NvbXBvbmVudHMvX2pzb24tZWRpdG9yLnNjc3MiLCJhcHAvamF2YXNjcmlwdC9zcmMvc3R5bGVzaGVldHMvY29tcG9uZW50cy9fZHJvcGRvd24uc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FDRSx1QkNDRixDREVBLCtDQUNFLGVDQ0YsQ0NOQSx3QkFFRSxXQUFBLENBREEsYURVRixDQ1BFLCtCQUNFLFdEU0osQ0NQSSwwQkFIRiwrQkFJSSxXRFVKLENBQ0YsQ0NQRSwrQkFDRSxXRFNKLENDUEksMEJBSEYsK0JBSUksV0RVSixDQUNGLENFMUJFLGtDQUVFLFdBQUEsQ0FDQSxtQkFBQSxDQUZBLGlCRitCSixDRTFCRSxpQ0FDRSxXRjRCSixDRXpCRSw0Q0FDRSxpQkFBQSxDQUVBLFVBQUEsQ0FEQSxRQUFBLENBRUEsVUYyQkosQ0cxQ0Esa0JBQ0UsdUJINkNGIiwic291cmNlc0NvbnRlbnQiOlsiLm5lZXRvLXJ1bGVzLW1haW4tY29udGVudF9fY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDtcbn1cblxuLm5lZXRvLXJ1bGVzLW1haW4tY2FyZCAubmVldG8tdWktYnRuLnVuZGVybGluZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59IiwiLm5lZXRvLXJ1bGVzLW1haW4tY29udGVudF9fY29udGFpbmVyIHtcbiAgaGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDtcbn1cblxuLm5lZXRvLXJ1bGVzLW1haW4tY2FyZCAubmVldG8tdWktYnRuLnVuZGVybGluZSB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5uZWV0by1ydWxlcy1zaWRlLXBhbmVsIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZsZXgtZ3JvdzogMDtcbn1cbi5uZWV0by1ydWxlcy1zaWRlLXBhbmVsLS1zbWFsbCB7XG4gIHdpZHRoOiAzMjBweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm5lZXRvLXJ1bGVzLXNpZGUtcGFuZWwtLXNtYWxsIHtcbiAgICB3aWR0aDogMzgwcHg7XG4gIH1cbn1cbi5uZWV0by1ydWxlcy1zaWRlLXBhbmVsLS1sYXJnZSB7XG4gIHdpZHRoOiAzODBweDtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLm5lZXRvLXJ1bGVzLXNpZGUtcGFuZWwtLWxhcmdlIHtcbiAgICB3aWR0aDogNDgwcHg7XG4gIH1cbn1cblxuLm5lZXRvLXJ1bGVzLWpzb24tZWRpdG9yX193cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDM1dmg7XG4gIHBhZGRpbmctYm90dG9tOiAycmVtO1xufVxuLm5lZXRvLXJ1bGVzLWpzb24tZWRpdG9yX19lZGl0b3Ige1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ubmVldG8tcnVsZXMtanNvbi1lZGl0b3JfX2R5bmFtaWMtdmFyaWFibGVzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDFyZW07XG4gIHJpZ2h0OiAxcmVtO1xuICB6LWluZGV4OiAxMDtcbn1cblxuW2RhdGEtdGlwcHktcm9vdF0ge1xuICB6LWluZGV4OiA5OTk5OSAhaW1wb3J0YW50O1xufSIsIi5uZWV0by1ydWxlcy1zaWRlLXBhbmVsIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZsZXgtZ3JvdzogMDtcblxuICAmLS1zbWFsbCB7XG4gICAgd2lkdGg6IDMyMHB4O1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAgICAgd2lkdGg6IDM4MHB4O1xuICAgIH1cbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICB3aWR0aDogMzgwcHg7XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gICAgICB3aWR0aDogNDgwcHg7XG4gICAgfVxuICB9XG59IiwiLm5lZXRvLXJ1bGVzLWpzb24tZWRpdG9yIHtcbiAgJl9fd3JhcHBlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGhlaWdodDogMzV2aDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbiAgfVxuXG4gICZfX2VkaXRvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgJl9fZHluYW1pYy12YXJpYWJsZXMge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDFyZW07XG4gICAgcmlnaHQ6IDFyZW07XG4gICAgei1pbmRleDogMTA7XG4gIH1cbn1cbiIsIltkYXRhLXRpcHB5LXJvb3RdIHtcbiAgei1pbmRleDogOTk5OTkgIWltcG9ydGFudDtcbn1cbiJdfQ== */";
91
91
  n(css,{});
92
92
 
93
93
  var useActiveField = function useActiveField(name) {
@@ -196,9 +196,9 @@ var Header = function Header(_ref) {
196
196
  });
197
197
  };
198
198
 
199
- var _excluded$e = ["component"];
200
- function ownKeys$o(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
201
- function _objectSpread$o(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$o(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$o(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
199
+ var _excluded$f = ["component"];
200
+ function ownKeys$u(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
201
+ function _objectSpread$u(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$u(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$u(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
202
202
  var Panel = function Panel() {
203
203
  var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
204
204
  return {
@@ -219,17 +219,17 @@ var Panel = function Panel() {
219
219
  Object.assign(data, panelState.data);
220
220
  }
221
221
  var Component = config.component,
222
- paneProps = _objectWithoutProperties(config, _excluded$e);
222
+ paneProps = _objectWithoutProperties(config, _excluded$f);
223
223
  var isOpen = !!panelState.type;
224
224
  var hasOverlays = managers.manager.hasOverlays();
225
225
  var panelSize = {
226
226
  small: "neeto-rules-side-panel--small",
227
227
  large: "neeto-rules-side-panel--large"
228
228
  }[panelState.size] || "neeto-rules-side-panel--small";
229
- return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$o(_objectSpread$o({
229
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$u(_objectSpread$u({
230
230
  className: classNames("neeto-rules-side-panel neeto-ui-border-gray-300 transition-width neeto-ui-bg-white ml-auto flex h-screen max-h-full flex-col overflow-y-auto border-l duration-300 ease-in-out", _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, panelSize, isOpen), "w-0 overflow-hidden", !isOpen), "absolute", hasOverlays), "right-0", hasOverlays))
231
231
  }, paneProps), {}, {
232
- children: /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$o(_objectSpread$o({}, data), {}, {
232
+ children: /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$u(_objectSpread$u({}, data), {}, {
233
233
  onClose: resetPanelState
234
234
  }), panelState.type)
235
235
  }));
@@ -293,6 +293,11 @@ var DEFAULT_RULE_ACTION = {
293
293
  var EDITOR_ADDONS = ["code-block", "block-quote", "image-upload"];
294
294
  var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
295
295
  var ACTION_INPUT_TYPES = ["text", "number", "decimal", "regex"];
296
+ var DEFAULT_HELP_POPOVER_PROPS = {
297
+ helpLinkProps: {
298
+ label: i18next.t("neetoRules.labels.viewHelpArticle")
299
+ }
300
+ };
296
301
 
297
302
  var getFieldDetails$1 = function getFieldDetails(fieldValue) {
298
303
  var actionOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
@@ -611,7 +616,13 @@ var EDITOR_CONFIG = {
611
616
  scrollBeyondLastLine: false,
612
617
  autoIndent: "full"
613
618
  };
614
- var API_REQUEST_FIELDS = ["endpoint", "body", "enableCustomHeaders", "customHeaders"];
619
+ var API_REQUEST_FIELDS = {
620
+ TEMPLATE_ID: "templateId",
621
+ ENDPOINT: "endpoint",
622
+ BODY: "body",
623
+ ENABLE_CUSTOM_HEADERS: "enableCustomHeaders",
624
+ CUSTOM_HEADERS: "customHeaders"
625
+ };
615
626
 
616
627
  var addOption = function addOption(arrayHelpers) {
617
628
  return arrayHelpers.push(CUSTOM_HEADERS_INITIAL_VALUE);
@@ -632,9 +643,72 @@ var hasKeyOrValue = ramda.whereAny({
632
643
  var formatCustomFields = function formatCustomFields(customFields) {
633
644
  return neetoCist.isPresent(customFields) ? customFields : [CUSTOM_HEADERS_INITIAL_VALUE];
634
645
  };
646
+ var rejectEmptyKeyValuePairs = ramda.reject(ramda.whereAny({
647
+ key: ramda.isEmpty,
648
+ value: ramda.isEmpty
649
+ }));
650
+ var areHeadersSame = function areHeadersSame(enableCustomHeaders, customHeaders) {
651
+ var template = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
652
+ var templateHasCustomHeaders = template.enableCustomHeaders,
653
+ templateHeaders = template.customHeaders;
654
+ if (!enableCustomHeaders && !templateHasCustomHeaders) return true;
655
+ if (enableCustomHeaders !== templateHasCustomHeaders) return false;
656
+ return ramda.equals(customHeaders, templateHeaders);
657
+ };
658
+ var isBodyAvailable = function isBodyAvailable(body) {
659
+ try {
660
+ var data = JSON.parse(body);
661
+ return neetoCist.isPresent(data);
662
+ } catch (_unused) {
663
+ return false;
664
+ }
665
+ };
666
+ var formatTemplateValues = function formatTemplateValues(key, template) {
667
+ switch (key) {
668
+ case API_REQUEST_FIELDS.CUSTOM_HEADERS:
669
+ return formatCustomFields(template[key]);
670
+ case API_REQUEST_FIELDS.TEMPLATE_ID:
671
+ return template.id;
672
+ default:
673
+ return template[key];
674
+ }
675
+ };
676
+
677
+ var sanitizeHelpPopoverProps = ramda.unless(ramda.path(["helpLinkProps", "href"]), ramda.omit(["helpLinkProps"]));
678
+ var setEditorContent = function setEditorContent(ref, content) {
679
+ if (!ref.current) return;
680
+ ref.current.editor.commands.setContent(content);
681
+ };
682
+ var mergeRefs = function mergeRefs() {
683
+ for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
684
+ refs[_key] = arguments[_key];
685
+ }
686
+ return function (node) {
687
+ refs.forEach(function (ref) {
688
+ if (typeof ref === "function") ref(node);else if (ref !== null) ref.current = node;
689
+ });
690
+ };
691
+ };
635
692
 
636
693
  // eslint-disable-next-line react-hooks/rules-of-hooks
637
694
  var dotPath = ramda.useWith(ramda.path, [ramda.split(".")]);
695
+ var areValuesEqual = function areValuesEqual(value1, value2) {
696
+ var normalize = ramda.when(ramda.is(String), ramda.trim);
697
+ return ramda.eqBy(normalize, value1, value2);
698
+ };
699
+ var buildHelpPopoverProps = function buildHelpPopoverProps(popoverProps) {
700
+ var combinedProps = ramda.mergeDeepLeft(popoverProps, DEFAULT_HELP_POPOVER_PROPS);
701
+ return sanitizeHelpPopoverProps(combinedProps);
702
+ };
703
+ var withHelpPopover = function withHelpPopover(helpPopoverProps) {
704
+ return neetoCist.isPresent(helpPopoverProps) ? {
705
+ labelProps: {
706
+ helpIconProps: {
707
+ popoverProps: buildHelpPopoverProps(helpPopoverProps)
708
+ }
709
+ }
710
+ } : {};
711
+ };
638
712
 
639
713
  var KeyValuePairsField = reactUtils.withT(function (_ref) {
640
714
  var t = _ref.t,
@@ -693,9 +767,13 @@ var KeyValuePairsField = reactUtils.withT(function (_ref) {
693
767
  });
694
768
  });
695
769
 
770
+ function ownKeys$t(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
771
+ function _objectSpread$t(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$t(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$t(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
696
772
  var CustomHeaders = function CustomHeaders(_ref) {
697
773
  var name = _ref.name,
698
- onFocus = _ref.onFocus;
774
+ onFocus = _ref.onFocus,
775
+ _ref$helpPopoverProps = _ref.helpPopoverProps,
776
+ helpPopoverProps = _ref$helpPopoverProps === void 0 ? {} : _ref$helpPopoverProps;
699
777
  var _useFormikContext = formik.useFormikContext(),
700
778
  values = _useFormikContext.values,
701
779
  setFieldValue = _useFormikContext.setFieldValue;
@@ -714,27 +792,31 @@ var CustomHeaders = function CustomHeaders(_ref) {
714
792
  var label = t("neetoRules.labels.includeHeaders");
715
793
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
716
794
  className: "flex flex-col space-y-4 mb-4",
717
- children: [/*#__PURE__*/jsxRuntime.jsx(Switch, {
795
+ children: [/*#__PURE__*/jsxRuntime.jsx(Switch, _objectSpread$t({
718
796
  label: label,
719
797
  onFocus: onFocus,
720
798
  "data-cy": "neeto-rules-api-fields-".concat(neetoCist.hyphenate(label), "-switch"),
721
799
  name: switchName,
722
800
  onChange: handleChange
723
- }), isCustomHeadersEnabled && /*#__PURE__*/jsxRuntime.jsx(KeyValuePairsField, {
801
+ }, withHelpPopover(helpPopoverProps))), isCustomHeadersEnabled && /*#__PURE__*/jsxRuntime.jsx(KeyValuePairsField, {
724
802
  onFocus: onFocus,
725
803
  entity: t("neetoRules.labels.headers"),
726
- name: "".concat(name, ".customHeaders")
804
+ name: keyValuePairsFieldName
727
805
  })]
728
806
  });
729
807
  };
730
808
 
809
+ function ownKeys$s(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
810
+ function _objectSpread$s(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$s(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$s(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
731
811
  var JsonEditor = function JsonEditor(_ref) {
732
812
  var name = _ref.name,
733
813
  onFocus = _ref.onFocus,
734
814
  _ref$initialValue = _ref.initialValue,
735
815
  initialValue = _ref$initialValue === void 0 ? "{}" : _ref$initialValue,
736
816
  _ref$variables = _ref.variables,
737
- variables = _ref$variables === void 0 ? [] : _ref$variables;
817
+ variables = _ref$variables === void 0 ? [] : _ref$variables,
818
+ _ref$helpPopoverProps = _ref.helpPopoverProps,
819
+ helpPopoverProps = _ref$helpPopoverProps === void 0 ? {} : _ref$helpPopoverProps;
738
820
  var editorRef = react.useRef(null);
739
821
  var completionProviderRef = react.useRef(null);
740
822
  var _useField = formik.useField(name),
@@ -823,12 +905,18 @@ var JsonEditor = function JsonEditor(_ref) {
823
905
  };
824
906
  }, []);
825
907
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
826
- className: "space-y-2 mb-2",
827
- children: [/*#__PURE__*/jsxRuntime.jsx(Label, {
908
+ className: "space-y-2",
909
+ children: [/*#__PURE__*/jsxRuntime.jsx(Label, _objectSpread$s(_objectSpread$s({
828
910
  required: true,
829
- "data-cy": "api-field-body",
911
+ "data-cy": "api-field-body"
912
+ }, neetoCist.isPresent(helpPopoverProps) && {
913
+ helpIconProps: {
914
+ icon: Help,
915
+ popoverProps: buildHelpPopoverProps(helpPopoverProps)
916
+ }
917
+ }), {}, {
830
918
  children: t("neetoRules.labels.body")
831
- }), /*#__PURE__*/jsxRuntime.jsxs("div", {
919
+ })), /*#__PURE__*/jsxRuntime.jsxs("div", {
832
920
  className: "neeto-rules-json-editor__wrapper",
833
921
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
834
922
  className: "neeto-rules-json-editor__dynamic-variables",
@@ -854,6 +942,43 @@ var JsonEditor = function JsonEditor(_ref) {
854
942
  });
855
943
  };
856
944
 
945
+ var SaveAsTemplate = function SaveAsTemplate(_ref) {
946
+ var name = _ref.name,
947
+ _ref$className = _ref.className,
948
+ className = _ref$className === void 0 ? "" : _ref$className;
949
+ var _useFormikContext = formik.useFormikContext(),
950
+ values = _useFormikContext.values,
951
+ setFieldValue = _useFormikContext.setFieldValue;
952
+ var _useTranslation = reactI18next.useTranslation(),
953
+ t = _useTranslation.t;
954
+ var switchName = "".concat(name, ".shouldSaveAsTemplate");
955
+ var templateName = "".concat(name, ".templateName");
956
+ var shouldSaveAsTemplate = dotPath(switchName, values);
957
+ var handleChange = function handleChange(_ref2) {
958
+ var checked = _ref2.target.checked;
959
+ if (!checked) {
960
+ setFieldValue(templateName, "");
961
+ }
962
+ setFieldValue(switchName, checked);
963
+ };
964
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
965
+ className: classNames(["flex flex-col space-y-4", className]),
966
+ children: [/*#__PURE__*/jsxRuntime.jsx(Switch, {
967
+ "data-cy": "neeto-rules-save-as-template-switch",
968
+ label: t("neetoRules.labels.saveAsTemplate"),
969
+ name: switchName,
970
+ onChange: handleChange
971
+ }), shouldSaveAsTemplate && /*#__PURE__*/jsxRuntime.jsx(Input$1, {
972
+ autoFocus: true,
973
+ required: true,
974
+ label: t("neetoRules.labels.templateName"),
975
+ name: templateName
976
+ })]
977
+ });
978
+ };
979
+
980
+ function ownKeys$r(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
981
+ function _objectSpread$r(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$r(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$r(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
857
982
  var SelectTemplateField = function SelectTemplateField(_ref) {
858
983
  var selectedField = _ref.selectedField,
859
984
  templates = _ref.templates,
@@ -874,7 +999,9 @@ var SelectTemplateField = function SelectTemplateField(_ref) {
874
999
  }, templates);
875
1000
  onChange === null || onChange === void 0 || onChange(template);
876
1001
  };
877
- return /*#__PURE__*/jsxRuntime.jsx(Select, {
1002
+ var _ref2 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
1003
+ helpPopoverProps = _ref2.template;
1004
+ return /*#__PURE__*/jsxRuntime.jsx(Select, _objectSpread$r({
878
1005
  onFocus: onFocus,
879
1006
  isClearable: true,
880
1007
  isSearchable: true,
@@ -888,7 +1015,35 @@ var SelectTemplateField = function SelectTemplateField(_ref) {
888
1015
  placeholder: t("neetoRules.placeholders.selectTemplate"),
889
1016
  value: selectedTemplate,
890
1017
  onChange: handleTemplateChange
891
- });
1018
+ }, withHelpPopover(helpPopoverProps)));
1019
+ };
1020
+
1021
+ var useHasFieldChanged = function useHasFieldChanged(name) {
1022
+ var _useFormikContext = formik.useFormikContext(),
1023
+ values = _useFormikContext.values,
1024
+ initialValues = _useFormikContext.initialValues;
1025
+ var initialValue = dotPath(name, initialValues);
1026
+ var value = dotPath(name, values);
1027
+ return neetoCist.notEqualsDeep(initialValue, value);
1028
+ };
1029
+
1030
+ var useResetSaveAsTemplateOnHide = function useResetSaveAsTemplateOnHide(name, shouldShowSaveAsTemplate) {
1031
+ var _dotPath;
1032
+ var _useFormikContext = formik.useFormikContext(),
1033
+ values = _useFormikContext.values,
1034
+ setFieldValue = _useFormikContext.setFieldValue;
1035
+ var currentValue = (_dotPath = dotPath(name, values)) !== null && _dotPath !== void 0 ? _dotPath : {};
1036
+ var isVisible = shouldShowSaveAsTemplate(currentValue);
1037
+ var wasVisibleRef = react.useRef(isVisible);
1038
+ react.useEffect(function () {
1039
+ var wasVisible = wasVisibleRef.current;
1040
+ if (wasVisible && !isVisible) {
1041
+ setFieldValue("".concat(name, ".shouldSaveAsTemplate"), false);
1042
+ setFieldValue("".concat(name, ".templateName"), "");
1043
+ }
1044
+ wasVisibleRef.current = isVisible;
1045
+ }, [isVisible, name, setFieldValue]);
1046
+ return isVisible;
892
1047
  };
893
1048
 
894
1049
  var Target$i = function Target(_ref) {
@@ -941,20 +1096,46 @@ var ApiFields = function ApiFields(_ref2) {
941
1096
  t = _useTranslation2.t;
942
1097
  var _useFormikContext = formik.useFormikContext(),
943
1098
  setFieldValue = _useFormikContext.setFieldValue,
944
- values = _useFormikContext.values;
1099
+ formValues = _useFormikContext.values;
945
1100
  var _useActiveField2 = useActiveField(name, {
946
1101
  shouldAutoFocus: shouldAutoFocus
947
1102
  }),
948
1103
  ref = _useActiveField2.ref,
949
1104
  setFieldActive = _useActiveField2.setFieldActive;
950
- var templates = selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates;
1105
+ var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
1106
+ return {
1107
+ isSaveAsTemplateEnabled: store["isSaveAsTemplateEnabled"]
1108
+ };
1109
+ }, shallow.shallow),
1110
+ isSaveAsTemplateEnabled = _useUtilityStore.isSaveAsTemplateEnabled;
1111
+ var hasFieldChanged = useHasFieldChanged(name);
1112
+ var templates = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates) || [];
1113
+ var shouldShowSaveAsTemplate = react.useCallback(function () {
1114
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1115
+ templateId = _ref3.templateId,
1116
+ endpoint = _ref3.endpoint,
1117
+ enableCustomHeaders = _ref3.enableCustomHeaders,
1118
+ _ref3$customHeaders = _ref3.customHeaders,
1119
+ customHeaders = _ref3$customHeaders === void 0 ? [CUSTOM_HEADERS_INITIAL_VALUE] : _ref3$customHeaders,
1120
+ body = _ref3.body;
1121
+ var template = neetoCist.findBy({
1122
+ id: templateId
1123
+ }, templates);
1124
+ var hasContent = neetoCist.isPresent(endpoint) || neetoCist.isPresent(rejectEmptyKeyValuePairs(customHeaders)) || isBodyAvailable(body);
1125
+ var isContentDifferentFromTemplate = !(areValuesEqual(template === null || template === void 0 ? void 0 : template.endpoint, endpoint) && areHeadersSame(enableCustomHeaders, customHeaders, template) && ramda.equals(template === null || template === void 0 ? void 0 : template.body, body));
1126
+ return hasContent && hasFieldChanged && isContentDifferentFromTemplate;
1127
+ }, [templates, hasFieldChanged]);
1128
+ var isSaveAsTemplateVisible = useResetSaveAsTemplateOnHide(name, isSaveAsTemplateEnabled ? shouldShowSaveAsTemplate : ramda.F);
951
1129
  var isTemplateSelectionEnabled = neetoCist.isPresent(templates);
952
1130
  var handleTemplateChange = function handleTemplateChange(template) {
953
- API_REQUEST_FIELDS.forEach(function (key) {
954
- var value = key === "customHeaders" ? formatCustomFields(template[key]) : template[key];
1131
+ ramda.values(API_REQUEST_FIELDS).forEach(function (key) {
1132
+ var value = formatTemplateValues(key, template);
955
1133
  setFieldValue("".concat(name, ".").concat(key), value);
956
1134
  });
957
1135
  };
1136
+ var _ref4 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
1137
+ customHeadersHelpPopoverProps = _ref4.customHeaders,
1138
+ bodyHelpPopoverProps = _ref4.body;
958
1139
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
959
1140
  className: "w-full",
960
1141
  children: [isTemplateSelectionEnabled && /*#__PURE__*/jsxRuntime.jsx(SelectTemplateField, {
@@ -975,12 +1156,16 @@ var ApiFields = function ApiFields(_ref2) {
975
1156
  onFocus: setFieldActive
976
1157
  }), /*#__PURE__*/jsxRuntime.jsx(CustomHeaders, {
977
1158
  name: name,
1159
+ helpPopoverProps: customHeadersHelpPopoverProps,
978
1160
  onFocus: setFieldActive
979
1161
  }), /*#__PURE__*/jsxRuntime.jsx(JsonEditor, {
980
- initialValue: dotPath("".concat(name, ".body"), values),
1162
+ helpPopoverProps: bodyHelpPopoverProps,
1163
+ initialValue: dotPath("".concat(name, ".body"), formValues),
981
1164
  name: "".concat(name, ".body"),
982
1165
  variables: selectedField === null || selectedField === void 0 ? void 0 : selectedField.variables,
983
1166
  onFocus: setFieldActive
1167
+ }), isSaveAsTemplateVisible && /*#__PURE__*/jsxRuntime.jsx(SaveAsTemplate, {
1168
+ name: name
984
1169
  })]
985
1170
  });
986
1171
  };
@@ -1155,9 +1340,9 @@ var EmailIdFields = function EmailIdFields(_ref) {
1155
1340
  });
1156
1341
  };
1157
1342
 
1158
- var _excluded$d = ["autoFocus", "name", "value", "label", "variables", "addons", "editorRef", "defaults"];
1159
- function ownKeys$n(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1160
- function _objectSpread$n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$n(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1343
+ var _excluded$e = ["autoFocus", "name", "value", "label", "variables", "addons", "editorRef", "defaults"];
1344
+ function ownKeys$q(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1345
+ function _objectSpread$q(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$q(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$q(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1161
1346
  var EditorAction = function EditorAction(_ref) {
1162
1347
  var _ref$autoFocus = _ref.autoFocus,
1163
1348
  autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus,
@@ -1172,7 +1357,7 @@ var EditorAction = function EditorAction(_ref) {
1172
1357
  _ref$editorRef = _ref.editorRef,
1173
1358
  editorRef = _ref$editorRef === void 0 ? null : _ref$editorRef,
1174
1359
  defaults = _ref.defaults,
1175
- otherProps = _objectWithoutProperties(_ref, _excluded$d);
1360
+ otherProps = _objectWithoutProperties(_ref, _excluded$e);
1176
1361
  var _useStateWithDependen = reactUtils.useStateWithDependency(value, [name]),
1177
1362
  _useStateWithDependen2 = _slicedToArray(_useStateWithDependen, 2),
1178
1363
  editorData = _useStateWithDependen2[0],
@@ -1183,7 +1368,7 @@ var EditorAction = function EditorAction(_ref) {
1183
1368
  react.useEffect(function () {
1184
1369
  setFieldValue(name, editorData);
1185
1370
  }, [debouncedValue]);
1186
- return /*#__PURE__*/react.createElement(FormikEditor, _objectSpread$n({
1371
+ return /*#__PURE__*/react.createElement(FormikEditor, _objectSpread$q({
1187
1372
  addons: addons,
1188
1373
  autoFocus: autoFocus,
1189
1374
  defaults: defaults,
@@ -1199,6 +1384,9 @@ var EditorAction = function EditorAction(_ref) {
1199
1384
  }, otherProps));
1200
1385
  };
1201
1386
 
1387
+ var _excluded$d = ["dropdownOptions", "name", "selectedField", "shouldAutoFocus", "className", "required"];
1388
+ function ownKeys$p(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1389
+ function _objectSpread$p(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$p(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$p(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1202
1390
  var Target$f = function Target(_ref) {
1203
1391
  var _selectedOption$label;
1204
1392
  var dropdownOptions = _ref.dropdownOptions,
@@ -1259,7 +1447,8 @@ var SelectField$2 = function SelectField(_ref2) {
1259
1447
  shouldAutoFocus = _ref2$shouldAutoFocus === void 0 ? false : _ref2$shouldAutoFocus,
1260
1448
  className = _ref2.className,
1261
1449
  _ref2$required = _ref2.required,
1262
- required = _ref2$required === void 0 ? false : _ref2$required;
1450
+ required = _ref2$required === void 0 ? false : _ref2$required,
1451
+ otherProps = _objectWithoutProperties(_ref2, _excluded$d);
1263
1452
  var _useTranslation2 = reactI18next.useTranslation(),
1264
1453
  t = _useTranslation2.t;
1265
1454
  var _useField3 = formik.useField(name),
@@ -1290,35 +1479,23 @@ var SelectField$2 = function SelectField(_ref2) {
1290
1479
  setValue((_option$value = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value !== void 0 ? _option$value : null);
1291
1480
  setTouched(true);
1292
1481
  };
1293
- return /*#__PURE__*/jsxRuntime.jsx(Select$1, {
1482
+ return /*#__PURE__*/jsxRuntime.jsx(Select$1, _objectSpread$p(_objectSpread$p({}, _objectSpread$p({
1294
1483
  className: className,
1295
1484
  name: name,
1296
- required: required,
1485
+ required: required
1486
+ }, otherProps)), {}, {
1297
1487
  innerRef: ref,
1298
1488
  label: defaultLabel,
1299
1489
  options: dropdownOptions,
1300
1490
  value: selectedOption,
1301
1491
  onChange: handleSelectOption,
1302
1492
  onFocus: setFieldActive
1303
- });
1493
+ }));
1304
1494
  };
1305
1495
  SelectField$2.Target = Target$f;
1306
1496
 
1307
- var setEditorContent = function setEditorContent(ref, content) {
1308
- if (!ref.current) return;
1309
- ref.current.editor.commands.setContent(content);
1310
- };
1311
- var mergeRefs = function mergeRefs() {
1312
- for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
1313
- refs[_key] = arguments[_key];
1314
- }
1315
- return function (node) {
1316
- refs.forEach(function (ref) {
1317
- if (typeof ref === "function") ref(node);else if (ref !== null) ref.current = node;
1318
- });
1319
- };
1320
- };
1321
-
1497
+ function ownKeys$o(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1498
+ function _objectSpread$o(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$o(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$o(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1322
1499
  var Target$e = function Target(_ref) {
1323
1500
  var selectedField = _ref.selectedField,
1324
1501
  _ref$separatorIndex = _ref.separatorIndex,
@@ -1391,8 +1568,28 @@ var EmailFields = function EmailFields(_ref2) {
1391
1568
  }),
1392
1569
  initialFocusRef = _useActiveField2.ref,
1393
1570
  setFieldActive = _useActiveField2.setFieldActive;
1571
+ var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
1572
+ return {
1573
+ isSaveAsTemplateEnabled: store["isSaveAsTemplateEnabled"]
1574
+ };
1575
+ }, shallow.shallow),
1576
+ isSaveAsTemplateEnabled = _useUtilityStore.isSaveAsTemplateEnabled;
1577
+ var hasFieldChanged = useHasFieldChanged(name);
1394
1578
  var templates = selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates;
1395
1579
  var isTemplateSelectionEnabled = neetoCist.isPresent(templates);
1580
+ var shouldShowSaveAsTemplate = react.useCallback(function () {
1581
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1582
+ templateId = _ref3.templateId,
1583
+ subject = _ref3.subject,
1584
+ body = _ref3.body;
1585
+ var template = neetoCist.findBy({
1586
+ id: templateId
1587
+ }, templates);
1588
+ var hasContent = neetoCist.isPresent(subject) || neetoCist.isPresent(body);
1589
+ var isContentDifferentFromTemplate = !(areValuesEqual(template === null || template === void 0 ? void 0 : template.subject, subject) && (template === null || template === void 0 ? void 0 : template.body) === body);
1590
+ return hasContent && hasFieldChanged && isContentDifferentFromTemplate;
1591
+ }, [templates, hasFieldChanged]);
1592
+ var isSaveAsTemplateVisible = useResetSaveAsTemplateOnHide(name, isSaveAsTemplateEnabled ? shouldShowSaveAsTemplate : ramda.F);
1396
1593
  var isFirstFieldInForm = function isFirstFieldInForm(field) {
1397
1594
  if (isTemplateSelectionEnabled) return false;
1398
1595
  if (field === "emails") return true;
@@ -1400,14 +1597,17 @@ var EmailFields = function EmailFields(_ref2) {
1400
1597
  return !isEmailIdField && selectedField.hideSubject;
1401
1598
  };
1402
1599
  var handleTemplateChange = function handleTemplateChange(template) {
1600
+ setFieldValue("".concat(name, ".templateId"), template.id);
1403
1601
  setFieldValue("".concat(name, ".body"), template.body);
1404
1602
  setEditorContent(editorRef, template.body);
1405
1603
  if (selectedField.hideSubject) return;
1406
1604
  setFieldValue("".concat(name, ".subject"), template.subject);
1407
1605
  };
1606
+ var _ref4 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
1607
+ recipientFieldHelpPopoverProps = _ref4.recipientField;
1408
1608
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
1409
1609
  className: "w-full",
1410
- children: [showFieldSelection && /*#__PURE__*/react.createElement(SelectField$2, {
1610
+ children: [showFieldSelection && /*#__PURE__*/react.createElement(SelectField$2, _objectSpread$o({
1411
1611
  index: index,
1412
1612
  selectedField: selectedField,
1413
1613
  required: true,
@@ -1416,7 +1616,7 @@ var EmailFields = function EmailFields(_ref2) {
1416
1616
  dropdownOptions: fieldOptions,
1417
1617
  key: "".concat(name, ".value"),
1418
1618
  name: "".concat(name, ".value")
1419
- }), isTemplateSelectionEnabled && /*#__PURE__*/jsxRuntime.jsx(SelectTemplateField, {
1619
+ }, withHelpPopover(recipientFieldHelpPopoverProps))), isTemplateSelectionEnabled && /*#__PURE__*/jsxRuntime.jsx(SelectTemplateField, {
1420
1620
  initialFocusRef: initialFocusRef,
1421
1621
  selectedField: selectedField,
1422
1622
  templates: templates,
@@ -1444,6 +1644,9 @@ var EmailFields = function EmailFields(_ref2) {
1444
1644
  variables: selectedField === null || selectedField === void 0 ? void 0 : selectedField.variables,
1445
1645
  editorRef: isFirstFieldInForm("body") ? mergeRefs(editorRef, initialFocusRef) : editorRef,
1446
1646
  onFocus: setFieldActive
1647
+ }), isSaveAsTemplateVisible && /*#__PURE__*/jsxRuntime.jsx(SaveAsTemplate, {
1648
+ name: name,
1649
+ className: "mt-4"
1447
1650
  })]
1448
1651
  });
1449
1652
  };
@@ -1546,8 +1749,8 @@ var SHORTCUTS = {
1546
1749
  };
1547
1750
 
1548
1751
  var _excluded$c = ["value", "nullable", "className", "handleSubmit", "handleCancel"];
1549
- function ownKeys$m(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1550
- function _objectSpread$m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$m(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1752
+ function ownKeys$n(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1753
+ function _objectSpread$n(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$n(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$n(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1551
1754
  var InlineInput = /*#__PURE__*/react.forwardRef(function (props, ref) {
1552
1755
  var _props$value = props.value,
1553
1756
  value = _props$value === void 0 ? "" : _props$value,
@@ -1585,7 +1788,7 @@ var InlineInput = /*#__PURE__*/react.forwardRef(function (props, ref) {
1585
1788
  return /*#__PURE__*/jsxRuntime.jsx("div", {
1586
1789
  className: classNames("flex flex-grow", _defineProperty({}, className, className)),
1587
1790
  ref: inputWrapperRef,
1588
- children: /*#__PURE__*/jsxRuntime.jsx(Input$2, _objectSpread$m(_objectSpread$m({
1791
+ children: /*#__PURE__*/jsxRuntime.jsx(Input$2, _objectSpread$n(_objectSpread$n({
1589
1792
  autoFocus: true,
1590
1793
  required: true,
1591
1794
  className: "neeto-planner-inline-input",
@@ -2232,8 +2435,8 @@ var formatErrorMessage = function formatErrorMessage(error) {
2232
2435
  };
2233
2436
 
2234
2437
  var _excluded$b = ["children"];
2235
- function ownKeys$l(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2236
- function _objectSpread$l(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$l(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$l(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2438
+ function ownKeys$m(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2439
+ function _objectSpread$m(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$m(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$m(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2237
2440
  var STYLES = {
2238
2441
  border: {
2239
2442
  "default": "1px solid rgb(var(--neeto-ui-gray-400))",
@@ -2245,8 +2448,8 @@ var STYLES = {
2245
2448
  }
2246
2449
  };
2247
2450
  var MultiValueRemove = function MultiValueRemove(props) {
2248
- return /*#__PURE__*/jsxRuntime.jsx(reactSelect.components.MultiValueRemove, _objectSpread$l(_objectSpread$l({}, props), {}, {
2249
- innerProps: _objectSpread$l(_objectSpread$l({}, props.innerProps), {}, _defineProperty({}, "data-cy", "".concat(dasherize(props.data.label), "-remove-icon"))),
2451
+ return /*#__PURE__*/jsxRuntime.jsx(reactSelect.components.MultiValueRemove, _objectSpread$m(_objectSpread$m({}, props), {}, {
2452
+ innerProps: _objectSpread$m(_objectSpread$m({}, props.innerProps), {}, _defineProperty({}, "data-cy", "".concat(dasherize(props.data.label), "-remove-icon"))),
2250
2453
  children: /*#__PURE__*/jsxRuntime.jsx(Close, {
2251
2454
  size: 16
2252
2455
  })
@@ -2266,8 +2469,8 @@ var ValueContainer = function ValueContainer(_ref) {
2266
2469
  firstChild = _children[0],
2267
2470
  rest = _children.slice(1);
2268
2471
  var shouldCollapse = !isFocused && value.length > visiblePhoneNumbersCount;
2269
- return /*#__PURE__*/jsxRuntime.jsxs(reactSelect.components.ValueContainer, _objectSpread$l(_objectSpread$l({}, props), {}, {
2270
- innerProps: _objectSpread$l(_objectSpread$l({}, props.innerProps), {}, _defineProperty({}, "data-cy", "multi-phone-number-input-container")),
2472
+ return /*#__PURE__*/jsxRuntime.jsxs(reactSelect.components.ValueContainer, _objectSpread$m(_objectSpread$m({}, props), {}, {
2473
+ innerProps: _objectSpread$m(_objectSpread$m({}, props.innerProps), {}, _defineProperty({}, "data-cy", "multi-phone-number-input-container")),
2271
2474
  children: [shouldCollapse ? firstChild.slice(0, visiblePhoneNumbersCount) : firstChild, shouldCollapse && /*#__PURE__*/jsxRuntime.jsx(Tag, {
2272
2475
  style: "secondary",
2273
2476
  label: t("neetoRules.labels.remainingItemsCount", {
@@ -2277,8 +2480,8 @@ var ValueContainer = function ValueContainer(_ref) {
2277
2480
  }));
2278
2481
  };
2279
2482
  var ClearIndicator = function ClearIndicator(props) {
2280
- return /*#__PURE__*/jsxRuntime.jsx(reactSelect.components.ClearIndicator, _objectSpread$l(_objectSpread$l({}, props), {}, {
2281
- innerProps: _objectSpread$l(_objectSpread$l({}, props.innerProps), {}, _defineProperty({}, "data-cy", "clear-all-button")),
2483
+ return /*#__PURE__*/jsxRuntime.jsx(reactSelect.components.ClearIndicator, _objectSpread$m(_objectSpread$m({}, props), {}, {
2484
+ innerProps: _objectSpread$m(_objectSpread$m({}, props.innerProps), {}, _defineProperty({}, "data-cy", "clear-all-button")),
2282
2485
  children: /*#__PURE__*/jsxRuntime.jsx(Close, {
2283
2486
  className: "cursor-pointer",
2284
2487
  size: 16
@@ -2296,7 +2499,7 @@ var CUSTOM_STYLES = {
2296
2499
  input: ramda.assoc("overflow", "hidden"),
2297
2500
  multiValue: function multiValue(styles, _ref2) {
2298
2501
  var valid = _ref2.data.valid;
2299
- return _objectSpread$l(_objectSpread$l({}, styles), {}, {
2502
+ return _objectSpread$m(_objectSpread$m({}, styles), {}, {
2300
2503
  border: valid ? STYLES.border["default"] : STYLES.border.error,
2301
2504
  color: valid ? STYLES.color["default"] : STYLES.color.error
2302
2505
  });
@@ -2310,8 +2513,8 @@ var CUSTOM_COMPONENTS = {
2310
2513
  };
2311
2514
 
2312
2515
  var _excluded$a = ["value", "onChange", "error", "onBlur", "onFocus"];
2313
- function ownKeys$k(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2314
- function _objectSpread$k(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$k(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$k(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2516
+ function ownKeys$l(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2517
+ function _objectSpread$l(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$l(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$l(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2315
2518
  var MultiPhoneNumberInput = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
2316
2519
  var _ref$value = _ref.value,
2317
2520
  value = _ref$value === void 0 ? [] : _ref$value,
@@ -2372,7 +2575,7 @@ var MultiPhoneNumberInput = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
2372
2575
  "data-cy": "".concat(dasherize(label), "-input-label"),
2373
2576
  children: label
2374
2577
  })
2375
- }), /*#__PURE__*/jsxRuntime.jsx(CreatableSelect, _objectSpread$k({
2578
+ }), /*#__PURE__*/jsxRuntime.jsx(CreatableSelect, _objectSpread$l({
2376
2579
  isMulti: true,
2377
2580
  required: true,
2378
2581
  classNamePrefix: "neeto-ui-react-select",
@@ -2383,7 +2586,7 @@ var MultiPhoneNumberInput = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
2383
2586
  className: classNames("neeto-ui-react-select__container neeto-ui-react-select__container--medium neeto-ui-email-input__select", {
2384
2587
  "neeto-ui-react-select__container--error": !!error
2385
2588
  }),
2386
- styles: _objectSpread$k(_objectSpread$k({}, CUSTOM_STYLES), {}, {
2589
+ styles: _objectSpread$l(_objectSpread$l({}, CUSTOM_STYLES), {}, {
2387
2590
  control: ramda.mergeLeft({
2388
2591
  maxHeight: "200px",
2389
2592
  overflowY: "auto"
@@ -2396,7 +2599,7 @@ var MultiPhoneNumberInput = /*#__PURE__*/react.forwardRef(function (_ref, ref) {
2396
2599
  setIsFocused(true);
2397
2600
  _onFocus();
2398
2601
  }
2399
- }, _objectSpread$k({
2602
+ }, _objectSpread$l({
2400
2603
  inputValue: inputValue,
2401
2604
  isFocused: isFocused,
2402
2605
  onChange: onChange,
@@ -2456,6 +2659,8 @@ var PhoneNumberField = function PhoneNumberField(_ref) {
2456
2659
  });
2457
2660
  };
2458
2661
 
2662
+ function ownKeys$k(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2663
+ function _objectSpread$k(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$k(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$k(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2459
2664
  var Target$7 = function Target(_ref) {
2460
2665
  var name = _ref.name,
2461
2666
  _ref$separatorIndex = _ref.separatorIndex,
@@ -2527,11 +2732,29 @@ var SmsFields = function SmsFields(_ref2) {
2527
2732
  }),
2528
2733
  initialFocusRef = _useActiveField2.ref,
2529
2734
  setFieldActive = _useActiveField2.setFieldActive;
2735
+ var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
2736
+ return {
2737
+ isSaveAsTemplateEnabled: store["isSaveAsTemplateEnabled"]
2738
+ };
2739
+ }, shallow.shallow),
2740
+ isSaveAsTemplateEnabled = _useUtilityStore.isSaveAsTemplateEnabled;
2741
+ var hasFieldChanged = useHasFieldChanged(name);
2530
2742
  var _useFormikContext = formik.useFormikContext(),
2531
2743
  setFieldValue = _useFormikContext.setFieldValue;
2532
- var templates = selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates;
2744
+ var templates = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates) || [];
2533
2745
  var isTemplateSelectionEnabled = neetoCist.isPresent(templates);
2746
+ var shouldShowSaveAsTemplate = react.useCallback(function () {
2747
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2748
+ templateId = _ref3.templateId,
2749
+ body = _ref3.body;
2750
+ var template = neetoCist.findBy({
2751
+ id: templateId
2752
+ }, templates);
2753
+ return neetoCist.isPresent(body) && hasFieldChanged && (template === null || template === void 0 ? void 0 : template.body) !== body;
2754
+ }, [templates, hasFieldChanged]);
2755
+ var isSaveAsTemplateVisible = useResetSaveAsTemplateOnHide(name, isSaveAsTemplateEnabled ? shouldShowSaveAsTemplate : ramda.F);
2534
2756
  var handleTemplateChange = function handleTemplateChange(template) {
2757
+ setFieldValue("".concat(name, ".templateId"), template.id);
2535
2758
  setFieldValue("".concat(name, ".body"), template.body);
2536
2759
  setEditorContent(editorRef, template.body);
2537
2760
  };
@@ -2539,9 +2762,11 @@ var SmsFields = function SmsFields(_ref2) {
2539
2762
  if (isTemplateSelectionEnabled) return false;
2540
2763
  return field === "phoneNumbers" ? true : !showPhoneNumberInput;
2541
2764
  };
2765
+ var _ref4 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
2766
+ recipientFieldHelpPopoverProps = _ref4.recipientField;
2542
2767
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
2543
2768
  className: "w-full",
2544
- children: [showFieldSelection && /*#__PURE__*/react.createElement(SelectField$2, {
2769
+ children: [showFieldSelection && /*#__PURE__*/react.createElement(SelectField$2, _objectSpread$k({
2545
2770
  index: index,
2546
2771
  selectedField: selectedField,
2547
2772
  shouldAutoFocus: true,
@@ -2549,7 +2774,7 @@ var SmsFields = function SmsFields(_ref2) {
2549
2774
  dropdownOptions: fieldOptions,
2550
2775
  key: "".concat(name, ".value"),
2551
2776
  name: "".concat(name, ".value")
2552
- }), isTemplateSelectionEnabled && /*#__PURE__*/jsxRuntime.jsx(SelectTemplateField, {
2777
+ }, withHelpPopover(recipientFieldHelpPopoverProps))), isTemplateSelectionEnabled && /*#__PURE__*/jsxRuntime.jsx(SelectTemplateField, {
2553
2778
  initialFocusRef: initialFocusRef,
2554
2779
  selectedField: selectedField,
2555
2780
  templates: templates,
@@ -2570,6 +2795,9 @@ var SmsFields = function SmsFields(_ref2) {
2570
2795
  variables: selectedField === null || selectedField === void 0 ? void 0 : selectedField.variables,
2571
2796
  editorRef: isFirstFieldInForm("body") ? mergeRefs(editorRef, initialFocusRef) : editorRef,
2572
2797
  onFocus: setFieldActive
2798
+ }), isSaveAsTemplateVisible && /*#__PURE__*/jsxRuntime.jsx(SaveAsTemplate, {
2799
+ name: name,
2800
+ className: "mt-4"
2573
2801
  })]
2574
2802
  });
2575
2803
  };
@@ -4588,7 +4816,8 @@ var getActionsSchema = function getActionsSchema(element, customData) {
4588
4816
  body: yup__namespace.string().test("body", i18next.t("neetoRules.validations.required.body"), function (value) {
4589
4817
  return !utils$1.isEditorEmpty(value);
4590
4818
  }),
4591
- value: selectedAction.type === ACTION_TYPES.emailTo ? yup__namespace.string().required(i18next.t("neetoRules.validations.required.value")) : schema
4819
+ value: selectedAction.type === ACTION_TYPES.emailTo ? yup__namespace.string().required(i18next.t("neetoRules.validations.required.value")) : schema,
4820
+ templateName: TEMPLATE_NAME_VALIDATION_SCHEMA
4592
4821
  });
4593
4822
  } else if ([ACTION_TYPES.sms, ACTION_TYPES.smsToNumbers, ACTION_TYPES.smsTo].includes(selectedAction === null || selectedAction === void 0 ? void 0 : selectedAction.type)) {
4594
4823
  return yup__namespace.object({
@@ -4600,7 +4829,8 @@ var getActionsSchema = function getActionsSchema(element, customData) {
4600
4829
  body: yup__namespace.string().test("body", i18next.t("neetoRules.validations.required.body"), function (value) {
4601
4830
  return !utils$1.isEditorEmpty(value);
4602
4831
  }),
4603
- value: selectedAction.type === ACTION_TYPES.smsTo ? yup__namespace.string().required(i18next.t("neetoRules.validations.required.value")) : schema
4832
+ value: selectedAction.type === ACTION_TYPES.smsTo ? yup__namespace.string().required(i18next.t("neetoRules.validations.required.value")) : schema,
4833
+ templateName: TEMPLATE_NAME_VALIDATION_SCHEMA
4604
4834
  });
4605
4835
  } else if (ACTION_TYPES.sendToApi === (selectedAction === null || selectedAction === void 0 ? void 0 : selectedAction.type)) {
4606
4836
  return yup__namespace.object({
@@ -4628,7 +4858,8 @@ var getActionsSchema = function getActionsSchema(element, customData) {
4628
4858
  message: i18next.t("neetoRules.validations.invalidJsonBody")
4629
4859
  });
4630
4860
  }
4631
- })
4861
+ }),
4862
+ templateName: TEMPLATE_NAME_VALIDATION_SCHEMA
4632
4863
  });
4633
4864
  } else if (ACTION_TYPES.multiSelect === (selectedAction === null || selectedAction === void 0 ? void 0 : selectedAction.type)) {
4634
4865
  return yup__namespace.object({
@@ -4804,6 +5035,12 @@ var PANEL_TYPE_CONFIG_MAP = _defineProperty(_defineProperty(_defineProperty(_def
4804
5035
  component: ActionSubItemPanel,
4805
5036
  data: {}
4806
5037
  });
5038
+ var TEMPLATE_NAME_VALIDATION_SCHEMA = yup__namespace.string().when("shouldSaveAsTemplate", {
5039
+ is: true,
5040
+ then: yup__namespace.string().trim().required(i18next.t("neetoRules.validations.required.entity", {
5041
+ entity: i18next.t("neetoRules.labels.templateName")
5042
+ }))
5043
+ });
4807
5044
 
4808
5045
  function ownKeys$d(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4809
5046
  function _objectSpread$d(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$d(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$d(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -4988,7 +5225,9 @@ var Actions = function Actions(_ref) {
4988
5225
  _ref$routeToSlackInte = _ref.routeToSlackIntegration,
4989
5226
  routeToSlackIntegration = _ref$routeToSlackInte === void 0 ? "" : _ref$routeToSlackInte,
4990
5227
  _ref$openPanel = _ref.openPanel,
4991
- openPanel = _ref$openPanel === void 0 ? false : _ref$openPanel;
5228
+ openPanel = _ref$openPanel === void 0 ? false : _ref$openPanel,
5229
+ _ref$isSaveAsTemplate = _ref.isSaveAsTemplateEnabled,
5230
+ isSaveAsTemplateEnabled = _ref$isSaveAsTemplate === void 0 ? false : _ref$isSaveAsTemplate;
4992
5231
  var _useFormikContext = formik.useFormikContext(),
4993
5232
  values = _useFormikContext.values,
4994
5233
  setFieldValue = _useFormikContext.setFieldValue;
@@ -5000,12 +5239,17 @@ var Actions = function Actions(_ref) {
5000
5239
  setShouldOpenPanel = _useState2[1];
5001
5240
  var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
5002
5241
  return {
5003
- resetPanelState: store["resetPanelState"]
5242
+ resetPanelState: store["resetPanelState"],
5243
+ setIsSaveAsTemplateEnabled: store["setIsSaveAsTemplateEnabled"]
5004
5244
  };
5005
5245
  }, shallow.shallow),
5006
- resetPanelState = _useUtilityStore.resetPanelState;
5246
+ resetPanelState = _useUtilityStore.resetPanelState,
5247
+ setIsSaveAsTemplateEnabled = _useUtilityStore.setIsSaveAsTemplateEnabled;
5007
5248
  var elementProps = data[name] || {};
5008
5249
  var actions = values[name].value || [];
5250
+ react.useEffect(function () {
5251
+ setIsSaveAsTemplateEnabled(isSaveAsTemplateEnabled);
5252
+ }, [isSaveAsTemplateEnabled]);
5009
5253
  var showButton = react.useMemo(function () {
5010
5254
  var _actions;
5011
5255
  return !!((_actions = actions[(actions === null || actions === void 0 ? void 0 : actions.length) - 1]) !== null && _actions !== void 0 && _actions.name) && elementProps.actionOptions.length !== actions.length && showAddButton;