@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.
@@ -3,30 +3,32 @@ import _objectDestructuringEmpty from '@babel/runtime/helpers/objectDestructurin
3
3
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
4
4
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
5
  import { shallow } from 'zustand/shallow';
6
- import { useRef, useEffect, createElement, forwardRef, useState, useMemo, memo, Fragment as Fragment$1 } from 'react';
6
+ import { useRef, useEffect, createElement, useCallback, forwardRef, useState, useMemo, memo, Fragment as Fragment$1 } from 'react';
7
7
  import { useFormikContext, useField, FieldArray, ErrorMessage, Formik, Form as Form$1 } from 'formik';
8
- import { findBy, noop, isNotEmpty, isPresent, hyphenate, renameKeys, nullSafe, toLabelAndValue, removeBy, isNotPresent } from '@bigbinary/neeto-cist';
8
+ import { findBy, noop, isNotEmpty, isPresent, hyphenate, renameKeys, notEqualsDeep, nullSafe, toLabelAndValue, removeBy, isNotPresent } from '@bigbinary/neeto-cist';
9
9
  import Plus from '@bigbinary/neeto-icons/Plus';
10
10
  import Delete from '@bigbinary/neeto-icons/Delete';
11
11
  import Refresh from '@bigbinary/neeto-icons/Refresh';
12
12
  import Button from '@bigbinary/neetoui/Button';
13
13
  import { useTranslation, Trans } from 'react-i18next';
14
- import { u as useUtilityStore, g as getSeparator } from './useUtilityStore-y6y2o_xQ.js';
14
+ import { u as useUtilityStore, g as getSeparator } from './useUtilityStore-BcSUEW_u.js';
15
15
  import classNames from 'classnames';
16
16
  import Typography from '@bigbinary/neetoui/Typography';
17
- import { assocPath, pluck, identity, isEmpty, mergeDeepLeft, isNotNil, whereAny, useWith, path, split, isNil, without, append, pipe, filter, uniq, join, map, assoc, mergeLeft, includes, test } from 'ramda';
17
+ import { assocPath, pluck, identity, isEmpty, mergeDeepLeft, isNotNil, whereAny, reject, equals, unless, path, omit, useWith, split, when, is, trim, eqBy, F, values, isNil, without, append, pipe, filter, uniq, join, map, assoc, mergeLeft, includes, test } from 'ramda';
18
+ import { t as t$1 } from 'i18next';
19
+ import * as yup from 'yup';
18
20
  import Radio from '@bigbinary/neetoui/formik/Radio';
19
21
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
20
22
  import { manager } from '@bigbinary/neetoui/managers';
21
23
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
22
24
  import Collapse from '@bigbinary/neeto-icons/Collapse';
23
- import { t as t$1 } from 'i18next';
24
25
  import Left from '@bigbinary/neeto-icons/Left';
25
26
  import Textarea from '@bigbinary/neetoui/formik/Textarea';
26
27
  import Input$1 from '@bigbinary/neetoui/formik/Input';
27
28
  import Switch from '@bigbinary/neetoui/formik/Switch';
28
29
  import { withT, useStateWithDependency, useDebounce } from '@bigbinary/neeto-commons-frontend/react-utils';
29
30
  import Editor from '@monaco-editor/react';
31
+ import Help from '@bigbinary/neeto-icons/Help';
30
32
  import DynamicVariables from '@bigbinary/neeto-molecules/DynamicVariables';
31
33
  import Label from '@bigbinary/neetoui/Label';
32
34
  import Select from '@bigbinary/neetoui/Select';
@@ -45,7 +47,6 @@ import _toArray from '@babel/runtime/helpers/toArray';
45
47
  import { isPhoneNumberValid } from '@bigbinary/neeto-molecules/PhoneNumber';
46
48
  import Tag from '@bigbinary/neetoui/Tag';
47
49
  import { components } from 'react-select';
48
- import * as yup from 'yup';
49
50
  import { O as OPERATORS$1, V as VERB_LABELS, I as INPUT_FIELD_TYPES, C as CONDITION_VALUE_TYPES, F as FIELDS_WITH_OPTIONS$1 } from './constants-DghBXpIM.js';
50
51
  import Radio$1 from '@bigbinary/neetoui/Radio';
51
52
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
@@ -58,7 +59,6 @@ import Tooltip from '@bigbinary/neetoui/Tooltip';
58
59
  import Container from '@bigbinary/neeto-molecules/Container';
59
60
  import NeetoHeader from '@bigbinary/neeto-molecules/Header';
60
61
  import ActionBlock from '@bigbinary/neetoui/formik/ActionBlock';
61
- import Help from '@bigbinary/neeto-icons/Help';
62
62
  import Switch$1 from '@bigbinary/neetoui/Switch';
63
63
  import { u as useCustomDataStore } from './useCustomDataStore-B1qHMIGJ.js';
64
64
  import _typeof from '@babel/runtime/helpers/typeof';
@@ -66,7 +66,7 @@ import 'zustand';
66
66
 
67
67
  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}}
68
68
 
69
- 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== */";
69
+ 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== */";
70
70
  n(css,{});
71
71
 
72
72
  var useActiveField = function useActiveField(name) {
@@ -175,9 +175,9 @@ var Header = function Header(_ref) {
175
175
  });
176
176
  };
177
177
 
178
- var _excluded$e = ["component"];
179
- 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; }
180
- 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; }
178
+ var _excluded$f = ["component"];
179
+ 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; }
180
+ 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; }
181
181
  var Panel = function Panel() {
182
182
  var _useUtilityStore = useUtilityStore(function (store) {
183
183
  return {
@@ -198,17 +198,17 @@ var Panel = function Panel() {
198
198
  Object.assign(data, panelState.data);
199
199
  }
200
200
  var Component = config.component,
201
- paneProps = _objectWithoutProperties(config, _excluded$e);
201
+ paneProps = _objectWithoutProperties(config, _excluded$f);
202
202
  var isOpen = !!panelState.type;
203
203
  var hasOverlays = manager.hasOverlays();
204
204
  var panelSize = {
205
205
  small: "neeto-rules-side-panel--small",
206
206
  large: "neeto-rules-side-panel--large"
207
207
  }[panelState.size] || "neeto-rules-side-panel--small";
208
- return /*#__PURE__*/jsx("div", _objectSpread$o(_objectSpread$o({
208
+ return /*#__PURE__*/jsx("div", _objectSpread$u(_objectSpread$u({
209
209
  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))
210
210
  }, paneProps), {}, {
211
- children: /*#__PURE__*/jsx(Component, _objectSpread$o(_objectSpread$o({}, data), {}, {
211
+ children: /*#__PURE__*/jsx(Component, _objectSpread$u(_objectSpread$u({}, data), {}, {
212
212
  onClose: resetPanelState
213
213
  }), panelState.type)
214
214
  }));
@@ -272,6 +272,11 @@ var DEFAULT_RULE_ACTION = {
272
272
  var EDITOR_ADDONS = ["code-block", "block-quote", "image-upload"];
273
273
  var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
274
274
  var ACTION_INPUT_TYPES = ["text", "number", "decimal", "regex"];
275
+ var DEFAULT_HELP_POPOVER_PROPS = {
276
+ helpLinkProps: {
277
+ label: t$1("neetoRules.labels.viewHelpArticle")
278
+ }
279
+ };
275
280
 
276
281
  var getFieldDetails$1 = function getFieldDetails(fieldValue) {
277
282
  var actionOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
@@ -590,7 +595,13 @@ var EDITOR_CONFIG = {
590
595
  scrollBeyondLastLine: false,
591
596
  autoIndent: "full"
592
597
  };
593
- var API_REQUEST_FIELDS = ["endpoint", "body", "enableCustomHeaders", "customHeaders"];
598
+ var API_REQUEST_FIELDS = {
599
+ TEMPLATE_ID: "templateId",
600
+ ENDPOINT: "endpoint",
601
+ BODY: "body",
602
+ ENABLE_CUSTOM_HEADERS: "enableCustomHeaders",
603
+ CUSTOM_HEADERS: "customHeaders"
604
+ };
594
605
 
595
606
  var addOption = function addOption(arrayHelpers) {
596
607
  return arrayHelpers.push(CUSTOM_HEADERS_INITIAL_VALUE);
@@ -611,9 +622,72 @@ var hasKeyOrValue = whereAny({
611
622
  var formatCustomFields = function formatCustomFields(customFields) {
612
623
  return isPresent(customFields) ? customFields : [CUSTOM_HEADERS_INITIAL_VALUE];
613
624
  };
625
+ var rejectEmptyKeyValuePairs = reject(whereAny({
626
+ key: isEmpty,
627
+ value: isEmpty
628
+ }));
629
+ var areHeadersSame = function areHeadersSame(enableCustomHeaders, customHeaders) {
630
+ var template = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
631
+ var templateHasCustomHeaders = template.enableCustomHeaders,
632
+ templateHeaders = template.customHeaders;
633
+ if (!enableCustomHeaders && !templateHasCustomHeaders) return true;
634
+ if (enableCustomHeaders !== templateHasCustomHeaders) return false;
635
+ return equals(customHeaders, templateHeaders);
636
+ };
637
+ var isBodyAvailable = function isBodyAvailable(body) {
638
+ try {
639
+ var data = JSON.parse(body);
640
+ return isPresent(data);
641
+ } catch (_unused) {
642
+ return false;
643
+ }
644
+ };
645
+ var formatTemplateValues = function formatTemplateValues(key, template) {
646
+ switch (key) {
647
+ case API_REQUEST_FIELDS.CUSTOM_HEADERS:
648
+ return formatCustomFields(template[key]);
649
+ case API_REQUEST_FIELDS.TEMPLATE_ID:
650
+ return template.id;
651
+ default:
652
+ return template[key];
653
+ }
654
+ };
655
+
656
+ var sanitizeHelpPopoverProps = unless(path(["helpLinkProps", "href"]), omit(["helpLinkProps"]));
657
+ var setEditorContent = function setEditorContent(ref, content) {
658
+ if (!ref.current) return;
659
+ ref.current.editor.commands.setContent(content);
660
+ };
661
+ var mergeRefs = function mergeRefs() {
662
+ for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
663
+ refs[_key] = arguments[_key];
664
+ }
665
+ return function (node) {
666
+ refs.forEach(function (ref) {
667
+ if (typeof ref === "function") ref(node);else if (ref !== null) ref.current = node;
668
+ });
669
+ };
670
+ };
614
671
 
615
672
  // eslint-disable-next-line react-hooks/rules-of-hooks
616
673
  var dotPath = useWith(path, [split(".")]);
674
+ var areValuesEqual = function areValuesEqual(value1, value2) {
675
+ var normalize = when(is(String), trim);
676
+ return eqBy(normalize, value1, value2);
677
+ };
678
+ var buildHelpPopoverProps = function buildHelpPopoverProps(popoverProps) {
679
+ var combinedProps = mergeDeepLeft(popoverProps, DEFAULT_HELP_POPOVER_PROPS);
680
+ return sanitizeHelpPopoverProps(combinedProps);
681
+ };
682
+ var withHelpPopover = function withHelpPopover(helpPopoverProps) {
683
+ return isPresent(helpPopoverProps) ? {
684
+ labelProps: {
685
+ helpIconProps: {
686
+ popoverProps: buildHelpPopoverProps(helpPopoverProps)
687
+ }
688
+ }
689
+ } : {};
690
+ };
617
691
 
618
692
  var KeyValuePairsField = withT(function (_ref) {
619
693
  var t = _ref.t,
@@ -672,9 +746,13 @@ var KeyValuePairsField = withT(function (_ref) {
672
746
  });
673
747
  });
674
748
 
749
+ 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; }
750
+ 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; }
675
751
  var CustomHeaders = function CustomHeaders(_ref) {
676
752
  var name = _ref.name,
677
- onFocus = _ref.onFocus;
753
+ onFocus = _ref.onFocus,
754
+ _ref$helpPopoverProps = _ref.helpPopoverProps,
755
+ helpPopoverProps = _ref$helpPopoverProps === void 0 ? {} : _ref$helpPopoverProps;
678
756
  var _useFormikContext = useFormikContext(),
679
757
  values = _useFormikContext.values,
680
758
  setFieldValue = _useFormikContext.setFieldValue;
@@ -693,27 +771,31 @@ var CustomHeaders = function CustomHeaders(_ref) {
693
771
  var label = t("neetoRules.labels.includeHeaders");
694
772
  return /*#__PURE__*/jsxs("div", {
695
773
  className: "flex flex-col space-y-4 mb-4",
696
- children: [/*#__PURE__*/jsx(Switch, {
774
+ children: [/*#__PURE__*/jsx(Switch, _objectSpread$t({
697
775
  label: label,
698
776
  onFocus: onFocus,
699
777
  "data-cy": "neeto-rules-api-fields-".concat(hyphenate(label), "-switch"),
700
778
  name: switchName,
701
779
  onChange: handleChange
702
- }), isCustomHeadersEnabled && /*#__PURE__*/jsx(KeyValuePairsField, {
780
+ }, withHelpPopover(helpPopoverProps))), isCustomHeadersEnabled && /*#__PURE__*/jsx(KeyValuePairsField, {
703
781
  onFocus: onFocus,
704
782
  entity: t("neetoRules.labels.headers"),
705
- name: "".concat(name, ".customHeaders")
783
+ name: keyValuePairsFieldName
706
784
  })]
707
785
  });
708
786
  };
709
787
 
788
+ 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; }
789
+ 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; }
710
790
  var JsonEditor = function JsonEditor(_ref) {
711
791
  var name = _ref.name,
712
792
  onFocus = _ref.onFocus,
713
793
  _ref$initialValue = _ref.initialValue,
714
794
  initialValue = _ref$initialValue === void 0 ? "{}" : _ref$initialValue,
715
795
  _ref$variables = _ref.variables,
716
- variables = _ref$variables === void 0 ? [] : _ref$variables;
796
+ variables = _ref$variables === void 0 ? [] : _ref$variables,
797
+ _ref$helpPopoverProps = _ref.helpPopoverProps,
798
+ helpPopoverProps = _ref$helpPopoverProps === void 0 ? {} : _ref$helpPopoverProps;
717
799
  var editorRef = useRef(null);
718
800
  var completionProviderRef = useRef(null);
719
801
  var _useField = useField(name),
@@ -802,12 +884,18 @@ var JsonEditor = function JsonEditor(_ref) {
802
884
  };
803
885
  }, []);
804
886
  return /*#__PURE__*/jsxs("div", {
805
- className: "space-y-2 mb-2",
806
- children: [/*#__PURE__*/jsx(Label, {
887
+ className: "space-y-2",
888
+ children: [/*#__PURE__*/jsx(Label, _objectSpread$s(_objectSpread$s({
807
889
  required: true,
808
- "data-cy": "api-field-body",
890
+ "data-cy": "api-field-body"
891
+ }, isPresent(helpPopoverProps) && {
892
+ helpIconProps: {
893
+ icon: Help,
894
+ popoverProps: buildHelpPopoverProps(helpPopoverProps)
895
+ }
896
+ }), {}, {
809
897
  children: t("neetoRules.labels.body")
810
- }), /*#__PURE__*/jsxs("div", {
898
+ })), /*#__PURE__*/jsxs("div", {
811
899
  className: "neeto-rules-json-editor__wrapper",
812
900
  children: [/*#__PURE__*/jsx("div", {
813
901
  className: "neeto-rules-json-editor__dynamic-variables",
@@ -833,6 +921,43 @@ var JsonEditor = function JsonEditor(_ref) {
833
921
  });
834
922
  };
835
923
 
924
+ var SaveAsTemplate = function SaveAsTemplate(_ref) {
925
+ var name = _ref.name,
926
+ _ref$className = _ref.className,
927
+ className = _ref$className === void 0 ? "" : _ref$className;
928
+ var _useFormikContext = useFormikContext(),
929
+ values = _useFormikContext.values,
930
+ setFieldValue = _useFormikContext.setFieldValue;
931
+ var _useTranslation = useTranslation(),
932
+ t = _useTranslation.t;
933
+ var switchName = "".concat(name, ".shouldSaveAsTemplate");
934
+ var templateName = "".concat(name, ".templateName");
935
+ var shouldSaveAsTemplate = dotPath(switchName, values);
936
+ var handleChange = function handleChange(_ref2) {
937
+ var checked = _ref2.target.checked;
938
+ if (!checked) {
939
+ setFieldValue(templateName, "");
940
+ }
941
+ setFieldValue(switchName, checked);
942
+ };
943
+ return /*#__PURE__*/jsxs("div", {
944
+ className: classNames(["flex flex-col space-y-4", className]),
945
+ children: [/*#__PURE__*/jsx(Switch, {
946
+ "data-cy": "neeto-rules-save-as-template-switch",
947
+ label: t("neetoRules.labels.saveAsTemplate"),
948
+ name: switchName,
949
+ onChange: handleChange
950
+ }), shouldSaveAsTemplate && /*#__PURE__*/jsx(Input$1, {
951
+ autoFocus: true,
952
+ required: true,
953
+ label: t("neetoRules.labels.templateName"),
954
+ name: templateName
955
+ })]
956
+ });
957
+ };
958
+
959
+ 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; }
960
+ 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; }
836
961
  var SelectTemplateField = function SelectTemplateField(_ref) {
837
962
  var selectedField = _ref.selectedField,
838
963
  templates = _ref.templates,
@@ -853,7 +978,9 @@ var SelectTemplateField = function SelectTemplateField(_ref) {
853
978
  }, templates);
854
979
  onChange === null || onChange === void 0 || onChange(template);
855
980
  };
856
- return /*#__PURE__*/jsx(Select, {
981
+ var _ref2 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
982
+ helpPopoverProps = _ref2.template;
983
+ return /*#__PURE__*/jsx(Select, _objectSpread$r({
857
984
  onFocus: onFocus,
858
985
  isClearable: true,
859
986
  isSearchable: true,
@@ -867,7 +994,35 @@ var SelectTemplateField = function SelectTemplateField(_ref) {
867
994
  placeholder: t("neetoRules.placeholders.selectTemplate"),
868
995
  value: selectedTemplate,
869
996
  onChange: handleTemplateChange
870
- });
997
+ }, withHelpPopover(helpPopoverProps)));
998
+ };
999
+
1000
+ var useHasFieldChanged = function useHasFieldChanged(name) {
1001
+ var _useFormikContext = useFormikContext(),
1002
+ values = _useFormikContext.values,
1003
+ initialValues = _useFormikContext.initialValues;
1004
+ var initialValue = dotPath(name, initialValues);
1005
+ var value = dotPath(name, values);
1006
+ return notEqualsDeep(initialValue, value);
1007
+ };
1008
+
1009
+ var useResetSaveAsTemplateOnHide = function useResetSaveAsTemplateOnHide(name, shouldShowSaveAsTemplate) {
1010
+ var _dotPath;
1011
+ var _useFormikContext = useFormikContext(),
1012
+ values = _useFormikContext.values,
1013
+ setFieldValue = _useFormikContext.setFieldValue;
1014
+ var currentValue = (_dotPath = dotPath(name, values)) !== null && _dotPath !== void 0 ? _dotPath : {};
1015
+ var isVisible = shouldShowSaveAsTemplate(currentValue);
1016
+ var wasVisibleRef = useRef(isVisible);
1017
+ useEffect(function () {
1018
+ var wasVisible = wasVisibleRef.current;
1019
+ if (wasVisible && !isVisible) {
1020
+ setFieldValue("".concat(name, ".shouldSaveAsTemplate"), false);
1021
+ setFieldValue("".concat(name, ".templateName"), "");
1022
+ }
1023
+ wasVisibleRef.current = isVisible;
1024
+ }, [isVisible, name, setFieldValue]);
1025
+ return isVisible;
871
1026
  };
872
1027
 
873
1028
  var Target$i = function Target(_ref) {
@@ -920,20 +1075,46 @@ var ApiFields = function ApiFields(_ref2) {
920
1075
  t = _useTranslation2.t;
921
1076
  var _useFormikContext = useFormikContext(),
922
1077
  setFieldValue = _useFormikContext.setFieldValue,
923
- values = _useFormikContext.values;
1078
+ formValues = _useFormikContext.values;
924
1079
  var _useActiveField2 = useActiveField(name, {
925
1080
  shouldAutoFocus: shouldAutoFocus
926
1081
  }),
927
1082
  ref = _useActiveField2.ref,
928
1083
  setFieldActive = _useActiveField2.setFieldActive;
929
- var templates = selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates;
1084
+ var _useUtilityStore = useUtilityStore(function (store) {
1085
+ return {
1086
+ isSaveAsTemplateEnabled: store["isSaveAsTemplateEnabled"]
1087
+ };
1088
+ }, shallow),
1089
+ isSaveAsTemplateEnabled = _useUtilityStore.isSaveAsTemplateEnabled;
1090
+ var hasFieldChanged = useHasFieldChanged(name);
1091
+ var templates = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates) || [];
1092
+ var shouldShowSaveAsTemplate = useCallback(function () {
1093
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1094
+ templateId = _ref3.templateId,
1095
+ endpoint = _ref3.endpoint,
1096
+ enableCustomHeaders = _ref3.enableCustomHeaders,
1097
+ _ref3$customHeaders = _ref3.customHeaders,
1098
+ customHeaders = _ref3$customHeaders === void 0 ? [CUSTOM_HEADERS_INITIAL_VALUE] : _ref3$customHeaders,
1099
+ body = _ref3.body;
1100
+ var template = findBy({
1101
+ id: templateId
1102
+ }, templates);
1103
+ var hasContent = isPresent(endpoint) || isPresent(rejectEmptyKeyValuePairs(customHeaders)) || isBodyAvailable(body);
1104
+ var isContentDifferentFromTemplate = !(areValuesEqual(template === null || template === void 0 ? void 0 : template.endpoint, endpoint) && areHeadersSame(enableCustomHeaders, customHeaders, template) && equals(template === null || template === void 0 ? void 0 : template.body, body));
1105
+ return hasContent && hasFieldChanged && isContentDifferentFromTemplate;
1106
+ }, [templates, hasFieldChanged]);
1107
+ var isSaveAsTemplateVisible = useResetSaveAsTemplateOnHide(name, isSaveAsTemplateEnabled ? shouldShowSaveAsTemplate : F);
930
1108
  var isTemplateSelectionEnabled = isPresent(templates);
931
1109
  var handleTemplateChange = function handleTemplateChange(template) {
932
- API_REQUEST_FIELDS.forEach(function (key) {
933
- var value = key === "customHeaders" ? formatCustomFields(template[key]) : template[key];
1110
+ values(API_REQUEST_FIELDS).forEach(function (key) {
1111
+ var value = formatTemplateValues(key, template);
934
1112
  setFieldValue("".concat(name, ".").concat(key), value);
935
1113
  });
936
1114
  };
1115
+ var _ref4 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
1116
+ customHeadersHelpPopoverProps = _ref4.customHeaders,
1117
+ bodyHelpPopoverProps = _ref4.body;
937
1118
  return /*#__PURE__*/jsxs("div", {
938
1119
  className: "w-full",
939
1120
  children: [isTemplateSelectionEnabled && /*#__PURE__*/jsx(SelectTemplateField, {
@@ -954,12 +1135,16 @@ var ApiFields = function ApiFields(_ref2) {
954
1135
  onFocus: setFieldActive
955
1136
  }), /*#__PURE__*/jsx(CustomHeaders, {
956
1137
  name: name,
1138
+ helpPopoverProps: customHeadersHelpPopoverProps,
957
1139
  onFocus: setFieldActive
958
1140
  }), /*#__PURE__*/jsx(JsonEditor, {
959
- initialValue: dotPath("".concat(name, ".body"), values),
1141
+ helpPopoverProps: bodyHelpPopoverProps,
1142
+ initialValue: dotPath("".concat(name, ".body"), formValues),
960
1143
  name: "".concat(name, ".body"),
961
1144
  variables: selectedField === null || selectedField === void 0 ? void 0 : selectedField.variables,
962
1145
  onFocus: setFieldActive
1146
+ }), isSaveAsTemplateVisible && /*#__PURE__*/jsx(SaveAsTemplate, {
1147
+ name: name
963
1148
  })]
964
1149
  });
965
1150
  };
@@ -1134,9 +1319,9 @@ var EmailIdFields = function EmailIdFields(_ref) {
1134
1319
  });
1135
1320
  };
1136
1321
 
1137
- var _excluded$d = ["autoFocus", "name", "value", "label", "variables", "addons", "editorRef", "defaults"];
1138
- 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; }
1139
- 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; }
1322
+ var _excluded$e = ["autoFocus", "name", "value", "label", "variables", "addons", "editorRef", "defaults"];
1323
+ 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; }
1324
+ 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; }
1140
1325
  var EditorAction = function EditorAction(_ref) {
1141
1326
  var _ref$autoFocus = _ref.autoFocus,
1142
1327
  autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus,
@@ -1151,7 +1336,7 @@ var EditorAction = function EditorAction(_ref) {
1151
1336
  _ref$editorRef = _ref.editorRef,
1152
1337
  editorRef = _ref$editorRef === void 0 ? null : _ref$editorRef,
1153
1338
  defaults = _ref.defaults,
1154
- otherProps = _objectWithoutProperties(_ref, _excluded$d);
1339
+ otherProps = _objectWithoutProperties(_ref, _excluded$e);
1155
1340
  var _useStateWithDependen = useStateWithDependency(value, [name]),
1156
1341
  _useStateWithDependen2 = _slicedToArray(_useStateWithDependen, 2),
1157
1342
  editorData = _useStateWithDependen2[0],
@@ -1162,7 +1347,7 @@ var EditorAction = function EditorAction(_ref) {
1162
1347
  useEffect(function () {
1163
1348
  setFieldValue(name, editorData);
1164
1349
  }, [debouncedValue]);
1165
- return /*#__PURE__*/createElement(FormikEditor, _objectSpread$n({
1350
+ return /*#__PURE__*/createElement(FormikEditor, _objectSpread$q({
1166
1351
  addons: addons,
1167
1352
  autoFocus: autoFocus,
1168
1353
  defaults: defaults,
@@ -1178,6 +1363,9 @@ var EditorAction = function EditorAction(_ref) {
1178
1363
  }, otherProps));
1179
1364
  };
1180
1365
 
1366
+ var _excluded$d = ["dropdownOptions", "name", "selectedField", "shouldAutoFocus", "className", "required"];
1367
+ 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; }
1368
+ 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; }
1181
1369
  var Target$f = function Target(_ref) {
1182
1370
  var _selectedOption$label;
1183
1371
  var dropdownOptions = _ref.dropdownOptions,
@@ -1238,7 +1426,8 @@ var SelectField$2 = function SelectField(_ref2) {
1238
1426
  shouldAutoFocus = _ref2$shouldAutoFocus === void 0 ? false : _ref2$shouldAutoFocus,
1239
1427
  className = _ref2.className,
1240
1428
  _ref2$required = _ref2.required,
1241
- required = _ref2$required === void 0 ? false : _ref2$required;
1429
+ required = _ref2$required === void 0 ? false : _ref2$required,
1430
+ otherProps = _objectWithoutProperties(_ref2, _excluded$d);
1242
1431
  var _useTranslation2 = useTranslation(),
1243
1432
  t = _useTranslation2.t;
1244
1433
  var _useField3 = useField(name),
@@ -1269,35 +1458,23 @@ var SelectField$2 = function SelectField(_ref2) {
1269
1458
  setValue((_option$value = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value !== void 0 ? _option$value : null);
1270
1459
  setTouched(true);
1271
1460
  };
1272
- return /*#__PURE__*/jsx(Select$1, {
1461
+ return /*#__PURE__*/jsx(Select$1, _objectSpread$p(_objectSpread$p({}, _objectSpread$p({
1273
1462
  className: className,
1274
1463
  name: name,
1275
- required: required,
1464
+ required: required
1465
+ }, otherProps)), {}, {
1276
1466
  innerRef: ref,
1277
1467
  label: defaultLabel,
1278
1468
  options: dropdownOptions,
1279
1469
  value: selectedOption,
1280
1470
  onChange: handleSelectOption,
1281
1471
  onFocus: setFieldActive
1282
- });
1472
+ }));
1283
1473
  };
1284
1474
  SelectField$2.Target = Target$f;
1285
1475
 
1286
- var setEditorContent = function setEditorContent(ref, content) {
1287
- if (!ref.current) return;
1288
- ref.current.editor.commands.setContent(content);
1289
- };
1290
- var mergeRefs = function mergeRefs() {
1291
- for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
1292
- refs[_key] = arguments[_key];
1293
- }
1294
- return function (node) {
1295
- refs.forEach(function (ref) {
1296
- if (typeof ref === "function") ref(node);else if (ref !== null) ref.current = node;
1297
- });
1298
- };
1299
- };
1300
-
1476
+ 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; }
1477
+ 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; }
1301
1478
  var Target$e = function Target(_ref) {
1302
1479
  var selectedField = _ref.selectedField,
1303
1480
  _ref$separatorIndex = _ref.separatorIndex,
@@ -1370,8 +1547,28 @@ var EmailFields = function EmailFields(_ref2) {
1370
1547
  }),
1371
1548
  initialFocusRef = _useActiveField2.ref,
1372
1549
  setFieldActive = _useActiveField2.setFieldActive;
1550
+ var _useUtilityStore = useUtilityStore(function (store) {
1551
+ return {
1552
+ isSaveAsTemplateEnabled: store["isSaveAsTemplateEnabled"]
1553
+ };
1554
+ }, shallow),
1555
+ isSaveAsTemplateEnabled = _useUtilityStore.isSaveAsTemplateEnabled;
1556
+ var hasFieldChanged = useHasFieldChanged(name);
1373
1557
  var templates = selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates;
1374
1558
  var isTemplateSelectionEnabled = isPresent(templates);
1559
+ var shouldShowSaveAsTemplate = useCallback(function () {
1560
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1561
+ templateId = _ref3.templateId,
1562
+ subject = _ref3.subject,
1563
+ body = _ref3.body;
1564
+ var template = findBy({
1565
+ id: templateId
1566
+ }, templates);
1567
+ var hasContent = isPresent(subject) || isPresent(body);
1568
+ var isContentDifferentFromTemplate = !(areValuesEqual(template === null || template === void 0 ? void 0 : template.subject, subject) && (template === null || template === void 0 ? void 0 : template.body) === body);
1569
+ return hasContent && hasFieldChanged && isContentDifferentFromTemplate;
1570
+ }, [templates, hasFieldChanged]);
1571
+ var isSaveAsTemplateVisible = useResetSaveAsTemplateOnHide(name, isSaveAsTemplateEnabled ? shouldShowSaveAsTemplate : F);
1375
1572
  var isFirstFieldInForm = function isFirstFieldInForm(field) {
1376
1573
  if (isTemplateSelectionEnabled) return false;
1377
1574
  if (field === "emails") return true;
@@ -1379,14 +1576,17 @@ var EmailFields = function EmailFields(_ref2) {
1379
1576
  return !isEmailIdField && selectedField.hideSubject;
1380
1577
  };
1381
1578
  var handleTemplateChange = function handleTemplateChange(template) {
1579
+ setFieldValue("".concat(name, ".templateId"), template.id);
1382
1580
  setFieldValue("".concat(name, ".body"), template.body);
1383
1581
  setEditorContent(editorRef, template.body);
1384
1582
  if (selectedField.hideSubject) return;
1385
1583
  setFieldValue("".concat(name, ".subject"), template.subject);
1386
1584
  };
1585
+ var _ref4 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
1586
+ recipientFieldHelpPopoverProps = _ref4.recipientField;
1387
1587
  return /*#__PURE__*/jsxs("div", {
1388
1588
  className: "w-full",
1389
- children: [showFieldSelection && /*#__PURE__*/createElement(SelectField$2, {
1589
+ children: [showFieldSelection && /*#__PURE__*/createElement(SelectField$2, _objectSpread$o({
1390
1590
  index: index,
1391
1591
  selectedField: selectedField,
1392
1592
  required: true,
@@ -1395,7 +1595,7 @@ var EmailFields = function EmailFields(_ref2) {
1395
1595
  dropdownOptions: fieldOptions,
1396
1596
  key: "".concat(name, ".value"),
1397
1597
  name: "".concat(name, ".value")
1398
- }), isTemplateSelectionEnabled && /*#__PURE__*/jsx(SelectTemplateField, {
1598
+ }, withHelpPopover(recipientFieldHelpPopoverProps))), isTemplateSelectionEnabled && /*#__PURE__*/jsx(SelectTemplateField, {
1399
1599
  initialFocusRef: initialFocusRef,
1400
1600
  selectedField: selectedField,
1401
1601
  templates: templates,
@@ -1423,6 +1623,9 @@ var EmailFields = function EmailFields(_ref2) {
1423
1623
  variables: selectedField === null || selectedField === void 0 ? void 0 : selectedField.variables,
1424
1624
  editorRef: isFirstFieldInForm("body") ? mergeRefs(editorRef, initialFocusRef) : editorRef,
1425
1625
  onFocus: setFieldActive
1626
+ }), isSaveAsTemplateVisible && /*#__PURE__*/jsx(SaveAsTemplate, {
1627
+ name: name,
1628
+ className: "mt-4"
1426
1629
  })]
1427
1630
  });
1428
1631
  };
@@ -1525,8 +1728,8 @@ var SHORTCUTS = {
1525
1728
  };
1526
1729
 
1527
1730
  var _excluded$c = ["value", "nullable", "className", "handleSubmit", "handleCancel"];
1528
- 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; }
1529
- 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; }
1731
+ 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; }
1732
+ 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; }
1530
1733
  var InlineInput = /*#__PURE__*/forwardRef(function (props, ref) {
1531
1734
  var _props$value = props.value,
1532
1735
  value = _props$value === void 0 ? "" : _props$value,
@@ -1564,7 +1767,7 @@ var InlineInput = /*#__PURE__*/forwardRef(function (props, ref) {
1564
1767
  return /*#__PURE__*/jsx("div", {
1565
1768
  className: classNames("flex flex-grow", _defineProperty({}, className, className)),
1566
1769
  ref: inputWrapperRef,
1567
- children: /*#__PURE__*/jsx(Input$2, _objectSpread$m(_objectSpread$m({
1770
+ children: /*#__PURE__*/jsx(Input$2, _objectSpread$n(_objectSpread$n({
1568
1771
  autoFocus: true,
1569
1772
  required: true,
1570
1773
  className: "neeto-planner-inline-input",
@@ -2211,8 +2414,8 @@ var formatErrorMessage = function formatErrorMessage(error) {
2211
2414
  };
2212
2415
 
2213
2416
  var _excluded$b = ["children"];
2214
- 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; }
2215
- 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; }
2417
+ 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; }
2418
+ 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; }
2216
2419
  var STYLES = {
2217
2420
  border: {
2218
2421
  "default": "1px solid rgb(var(--neeto-ui-gray-400))",
@@ -2224,8 +2427,8 @@ var STYLES = {
2224
2427
  }
2225
2428
  };
2226
2429
  var MultiValueRemove = function MultiValueRemove(props) {
2227
- return /*#__PURE__*/jsx(components.MultiValueRemove, _objectSpread$l(_objectSpread$l({}, props), {}, {
2228
- innerProps: _objectSpread$l(_objectSpread$l({}, props.innerProps), {}, _defineProperty({}, "data-cy", "".concat(dasherize(props.data.label), "-remove-icon"))),
2430
+ return /*#__PURE__*/jsx(components.MultiValueRemove, _objectSpread$m(_objectSpread$m({}, props), {}, {
2431
+ innerProps: _objectSpread$m(_objectSpread$m({}, props.innerProps), {}, _defineProperty({}, "data-cy", "".concat(dasherize(props.data.label), "-remove-icon"))),
2229
2432
  children: /*#__PURE__*/jsx(Close, {
2230
2433
  size: 16
2231
2434
  })
@@ -2245,8 +2448,8 @@ var ValueContainer = function ValueContainer(_ref) {
2245
2448
  firstChild = _children[0],
2246
2449
  rest = _children.slice(1);
2247
2450
  var shouldCollapse = !isFocused && value.length > visiblePhoneNumbersCount;
2248
- return /*#__PURE__*/jsxs(components.ValueContainer, _objectSpread$l(_objectSpread$l({}, props), {}, {
2249
- innerProps: _objectSpread$l(_objectSpread$l({}, props.innerProps), {}, _defineProperty({}, "data-cy", "multi-phone-number-input-container")),
2451
+ return /*#__PURE__*/jsxs(components.ValueContainer, _objectSpread$m(_objectSpread$m({}, props), {}, {
2452
+ innerProps: _objectSpread$m(_objectSpread$m({}, props.innerProps), {}, _defineProperty({}, "data-cy", "multi-phone-number-input-container")),
2250
2453
  children: [shouldCollapse ? firstChild.slice(0, visiblePhoneNumbersCount) : firstChild, shouldCollapse && /*#__PURE__*/jsx(Tag, {
2251
2454
  style: "secondary",
2252
2455
  label: t("neetoRules.labels.remainingItemsCount", {
@@ -2256,8 +2459,8 @@ var ValueContainer = function ValueContainer(_ref) {
2256
2459
  }));
2257
2460
  };
2258
2461
  var ClearIndicator = function ClearIndicator(props) {
2259
- return /*#__PURE__*/jsx(components.ClearIndicator, _objectSpread$l(_objectSpread$l({}, props), {}, {
2260
- innerProps: _objectSpread$l(_objectSpread$l({}, props.innerProps), {}, _defineProperty({}, "data-cy", "clear-all-button")),
2462
+ return /*#__PURE__*/jsx(components.ClearIndicator, _objectSpread$m(_objectSpread$m({}, props), {}, {
2463
+ innerProps: _objectSpread$m(_objectSpread$m({}, props.innerProps), {}, _defineProperty({}, "data-cy", "clear-all-button")),
2261
2464
  children: /*#__PURE__*/jsx(Close, {
2262
2465
  className: "cursor-pointer",
2263
2466
  size: 16
@@ -2275,7 +2478,7 @@ var CUSTOM_STYLES = {
2275
2478
  input: assoc("overflow", "hidden"),
2276
2479
  multiValue: function multiValue(styles, _ref2) {
2277
2480
  var valid = _ref2.data.valid;
2278
- return _objectSpread$l(_objectSpread$l({}, styles), {}, {
2481
+ return _objectSpread$m(_objectSpread$m({}, styles), {}, {
2279
2482
  border: valid ? STYLES.border["default"] : STYLES.border.error,
2280
2483
  color: valid ? STYLES.color["default"] : STYLES.color.error
2281
2484
  });
@@ -2289,8 +2492,8 @@ var CUSTOM_COMPONENTS = {
2289
2492
  };
2290
2493
 
2291
2494
  var _excluded$a = ["value", "onChange", "error", "onBlur", "onFocus"];
2292
- 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; }
2293
- 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; }
2495
+ 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; }
2496
+ 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; }
2294
2497
  var MultiPhoneNumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
2295
2498
  var _ref$value = _ref.value,
2296
2499
  value = _ref$value === void 0 ? [] : _ref$value,
@@ -2351,7 +2554,7 @@ var MultiPhoneNumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
2351
2554
  "data-cy": "".concat(dasherize(label), "-input-label"),
2352
2555
  children: label
2353
2556
  })
2354
- }), /*#__PURE__*/jsx(CreatableSelect, _objectSpread$k({
2557
+ }), /*#__PURE__*/jsx(CreatableSelect, _objectSpread$l({
2355
2558
  isMulti: true,
2356
2559
  required: true,
2357
2560
  classNamePrefix: "neeto-ui-react-select",
@@ -2362,7 +2565,7 @@ var MultiPhoneNumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
2362
2565
  className: classNames("neeto-ui-react-select__container neeto-ui-react-select__container--medium neeto-ui-email-input__select", {
2363
2566
  "neeto-ui-react-select__container--error": !!error
2364
2567
  }),
2365
- styles: _objectSpread$k(_objectSpread$k({}, CUSTOM_STYLES), {}, {
2568
+ styles: _objectSpread$l(_objectSpread$l({}, CUSTOM_STYLES), {}, {
2366
2569
  control: mergeLeft({
2367
2570
  maxHeight: "200px",
2368
2571
  overflowY: "auto"
@@ -2375,7 +2578,7 @@ var MultiPhoneNumberInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
2375
2578
  setIsFocused(true);
2376
2579
  _onFocus();
2377
2580
  }
2378
- }, _objectSpread$k({
2581
+ }, _objectSpread$l({
2379
2582
  inputValue: inputValue,
2380
2583
  isFocused: isFocused,
2381
2584
  onChange: onChange,
@@ -2435,6 +2638,8 @@ var PhoneNumberField = function PhoneNumberField(_ref) {
2435
2638
  });
2436
2639
  };
2437
2640
 
2641
+ 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; }
2642
+ 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; }
2438
2643
  var Target$7 = function Target(_ref) {
2439
2644
  var name = _ref.name,
2440
2645
  _ref$separatorIndex = _ref.separatorIndex,
@@ -2506,11 +2711,29 @@ var SmsFields = function SmsFields(_ref2) {
2506
2711
  }),
2507
2712
  initialFocusRef = _useActiveField2.ref,
2508
2713
  setFieldActive = _useActiveField2.setFieldActive;
2714
+ var _useUtilityStore = useUtilityStore(function (store) {
2715
+ return {
2716
+ isSaveAsTemplateEnabled: store["isSaveAsTemplateEnabled"]
2717
+ };
2718
+ }, shallow),
2719
+ isSaveAsTemplateEnabled = _useUtilityStore.isSaveAsTemplateEnabled;
2720
+ var hasFieldChanged = useHasFieldChanged(name);
2509
2721
  var _useFormikContext = useFormikContext(),
2510
2722
  setFieldValue = _useFormikContext.setFieldValue;
2511
- var templates = selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates;
2723
+ var templates = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.templates) || [];
2512
2724
  var isTemplateSelectionEnabled = isPresent(templates);
2725
+ var shouldShowSaveAsTemplate = useCallback(function () {
2726
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
2727
+ templateId = _ref3.templateId,
2728
+ body = _ref3.body;
2729
+ var template = findBy({
2730
+ id: templateId
2731
+ }, templates);
2732
+ return isPresent(body) && hasFieldChanged && (template === null || template === void 0 ? void 0 : template.body) !== body;
2733
+ }, [templates, hasFieldChanged]);
2734
+ var isSaveAsTemplateVisible = useResetSaveAsTemplateOnHide(name, isSaveAsTemplateEnabled ? shouldShowSaveAsTemplate : F);
2513
2735
  var handleTemplateChange = function handleTemplateChange(template) {
2736
+ setFieldValue("".concat(name, ".templateId"), template.id);
2514
2737
  setFieldValue("".concat(name, ".body"), template.body);
2515
2738
  setEditorContent(editorRef, template.body);
2516
2739
  };
@@ -2518,9 +2741,11 @@ var SmsFields = function SmsFields(_ref2) {
2518
2741
  if (isTemplateSelectionEnabled) return false;
2519
2742
  return field === "phoneNumbers" ? true : !showPhoneNumberInput;
2520
2743
  };
2744
+ var _ref4 = (selectedField === null || selectedField === void 0 ? void 0 : selectedField.helpPopoverProps) || {},
2745
+ recipientFieldHelpPopoverProps = _ref4.recipientField;
2521
2746
  return /*#__PURE__*/jsxs("div", {
2522
2747
  className: "w-full",
2523
- children: [showFieldSelection && /*#__PURE__*/createElement(SelectField$2, {
2748
+ children: [showFieldSelection && /*#__PURE__*/createElement(SelectField$2, _objectSpread$k({
2524
2749
  index: index,
2525
2750
  selectedField: selectedField,
2526
2751
  shouldAutoFocus: true,
@@ -2528,7 +2753,7 @@ var SmsFields = function SmsFields(_ref2) {
2528
2753
  dropdownOptions: fieldOptions,
2529
2754
  key: "".concat(name, ".value"),
2530
2755
  name: "".concat(name, ".value")
2531
- }), isTemplateSelectionEnabled && /*#__PURE__*/jsx(SelectTemplateField, {
2756
+ }, withHelpPopover(recipientFieldHelpPopoverProps))), isTemplateSelectionEnabled && /*#__PURE__*/jsx(SelectTemplateField, {
2532
2757
  initialFocusRef: initialFocusRef,
2533
2758
  selectedField: selectedField,
2534
2759
  templates: templates,
@@ -2549,6 +2774,9 @@ var SmsFields = function SmsFields(_ref2) {
2549
2774
  variables: selectedField === null || selectedField === void 0 ? void 0 : selectedField.variables,
2550
2775
  editorRef: isFirstFieldInForm("body") ? mergeRefs(editorRef, initialFocusRef) : editorRef,
2551
2776
  onFocus: setFieldActive
2777
+ }), isSaveAsTemplateVisible && /*#__PURE__*/jsx(SaveAsTemplate, {
2778
+ name: name,
2779
+ className: "mt-4"
2552
2780
  })]
2553
2781
  });
2554
2782
  };
@@ -4567,7 +4795,8 @@ var getActionsSchema = function getActionsSchema(element, customData) {
4567
4795
  body: yup.string().test("body", t$1("neetoRules.validations.required.body"), function (value) {
4568
4796
  return !isEditorEmpty(value);
4569
4797
  }),
4570
- value: selectedAction.type === ACTION_TYPES.emailTo ? yup.string().required(t$1("neetoRules.validations.required.value")) : schema
4798
+ value: selectedAction.type === ACTION_TYPES.emailTo ? yup.string().required(t$1("neetoRules.validations.required.value")) : schema,
4799
+ templateName: TEMPLATE_NAME_VALIDATION_SCHEMA
4571
4800
  });
4572
4801
  } else if ([ACTION_TYPES.sms, ACTION_TYPES.smsToNumbers, ACTION_TYPES.smsTo].includes(selectedAction === null || selectedAction === void 0 ? void 0 : selectedAction.type)) {
4573
4802
  return yup.object({
@@ -4579,7 +4808,8 @@ var getActionsSchema = function getActionsSchema(element, customData) {
4579
4808
  body: yup.string().test("body", t$1("neetoRules.validations.required.body"), function (value) {
4580
4809
  return !isEditorEmpty(value);
4581
4810
  }),
4582
- value: selectedAction.type === ACTION_TYPES.smsTo ? yup.string().required(t$1("neetoRules.validations.required.value")) : schema
4811
+ value: selectedAction.type === ACTION_TYPES.smsTo ? yup.string().required(t$1("neetoRules.validations.required.value")) : schema,
4812
+ templateName: TEMPLATE_NAME_VALIDATION_SCHEMA
4583
4813
  });
4584
4814
  } else if (ACTION_TYPES.sendToApi === (selectedAction === null || selectedAction === void 0 ? void 0 : selectedAction.type)) {
4585
4815
  return yup.object({
@@ -4607,7 +4837,8 @@ var getActionsSchema = function getActionsSchema(element, customData) {
4607
4837
  message: t$1("neetoRules.validations.invalidJsonBody")
4608
4838
  });
4609
4839
  }
4610
- })
4840
+ }),
4841
+ templateName: TEMPLATE_NAME_VALIDATION_SCHEMA
4611
4842
  });
4612
4843
  } else if (ACTION_TYPES.multiSelect === (selectedAction === null || selectedAction === void 0 ? void 0 : selectedAction.type)) {
4613
4844
  return yup.object({
@@ -4783,6 +5014,12 @@ var PANEL_TYPE_CONFIG_MAP = _defineProperty(_defineProperty(_defineProperty(_def
4783
5014
  component: ActionSubItemPanel,
4784
5015
  data: {}
4785
5016
  });
5017
+ var TEMPLATE_NAME_VALIDATION_SCHEMA = yup.string().when("shouldSaveAsTemplate", {
5018
+ is: true,
5019
+ then: yup.string().trim().required(t$1("neetoRules.validations.required.entity", {
5020
+ entity: t$1("neetoRules.labels.templateName")
5021
+ }))
5022
+ });
4786
5023
 
4787
5024
  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; }
4788
5025
  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; }
@@ -4967,7 +5204,9 @@ var Actions = function Actions(_ref) {
4967
5204
  _ref$routeToSlackInte = _ref.routeToSlackIntegration,
4968
5205
  routeToSlackIntegration = _ref$routeToSlackInte === void 0 ? "" : _ref$routeToSlackInte,
4969
5206
  _ref$openPanel = _ref.openPanel,
4970
- openPanel = _ref$openPanel === void 0 ? false : _ref$openPanel;
5207
+ openPanel = _ref$openPanel === void 0 ? false : _ref$openPanel,
5208
+ _ref$isSaveAsTemplate = _ref.isSaveAsTemplateEnabled,
5209
+ isSaveAsTemplateEnabled = _ref$isSaveAsTemplate === void 0 ? false : _ref$isSaveAsTemplate;
4971
5210
  var _useFormikContext = useFormikContext(),
4972
5211
  values = _useFormikContext.values,
4973
5212
  setFieldValue = _useFormikContext.setFieldValue;
@@ -4979,12 +5218,17 @@ var Actions = function Actions(_ref) {
4979
5218
  setShouldOpenPanel = _useState2[1];
4980
5219
  var _useUtilityStore = useUtilityStore(function (store) {
4981
5220
  return {
4982
- resetPanelState: store["resetPanelState"]
5221
+ resetPanelState: store["resetPanelState"],
5222
+ setIsSaveAsTemplateEnabled: store["setIsSaveAsTemplateEnabled"]
4983
5223
  };
4984
5224
  }, shallow),
4985
- resetPanelState = _useUtilityStore.resetPanelState;
5225
+ resetPanelState = _useUtilityStore.resetPanelState,
5226
+ setIsSaveAsTemplateEnabled = _useUtilityStore.setIsSaveAsTemplateEnabled;
4986
5227
  var elementProps = data[name] || {};
4987
5228
  var actions = values[name].value || [];
5229
+ useEffect(function () {
5230
+ setIsSaveAsTemplateEnabled(isSaveAsTemplateEnabled);
5231
+ }, [isSaveAsTemplateEnabled]);
4988
5232
  var showButton = useMemo(function () {
4989
5233
  var _actions;
4990
5234
  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;