@bigbinary/neeto-rules-frontend 2.5.28 → 2.5.29

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.
@@ -10,7 +10,6 @@ var formik = require('formik');
10
10
  var neetoCist = require('@bigbinary/neeto-cist');
11
11
  var Plus = require('@bigbinary/neeto-icons/Plus');
12
12
  var Delete = require('@bigbinary/neeto-icons/Delete');
13
- var Refresh = require('@bigbinary/neeto-icons/Refresh');
14
13
  var Button = require('@bigbinary/neetoui/Button');
15
14
  var reactI18next = require('react-i18next');
16
15
  var useUtilityStore = require('../useUtilityStore-D6PfpKqa.js');
@@ -19,14 +18,17 @@ var Typography = require('@bigbinary/neetoui/Typography');
19
18
  var ramda = require('ramda');
20
19
  var i18next = require('i18next');
21
20
  var yup = require('yup');
21
+ var Search = require('@bigbinary/neeto-icons/Search');
22
+ var Input$1 = require('@bigbinary/neetoui/Input');
22
23
  var Radio = require('@bigbinary/neetoui/formik/Radio');
23
24
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
24
25
  var managers = require('@bigbinary/neetoui/managers');
25
26
  var jsxRuntime = require('react/jsx-runtime');
26
27
  var Collapse = require('@bigbinary/neeto-icons/Collapse');
28
+ var Callout = require('@bigbinary/neetoui/Callout');
27
29
  var Left = require('@bigbinary/neeto-icons/Left');
28
30
  var Textarea = require('@bigbinary/neetoui/formik/Textarea');
29
- var Input$1 = require('@bigbinary/neetoui/formik/Input');
31
+ var Input$2 = require('@bigbinary/neetoui/formik/Input');
30
32
  var Switch = require('@bigbinary/neetoui/formik/Switch');
31
33
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
32
34
  var Editor = require('@monaco-editor/react');
@@ -38,19 +40,19 @@ var utils = require('@bigbinary/neeto-commons-frontend/utils');
38
40
  var DatePicker = require('@bigbinary/neetoui/DatePicker');
39
41
  var MultiEmailInput = require('@bigbinary/neetoui/formik/MultiEmailInput');
40
42
  var FormikEditor = require('@bigbinary/neeto-editor/FormikEditor');
43
+ var Refresh = require('@bigbinary/neeto-icons/Refresh');
41
44
  var Select$1 = require('@bigbinary/neetoui/formik/Select');
42
45
  var useHotkeys = require('@bigbinary/neeto-hotkeys');
43
46
  var Check = require('@bigbinary/neeto-icons/Check');
44
47
  var Close = require('@bigbinary/neeto-icons/Close');
45
- var Input$2 = require('@bigbinary/neetoui/Input');
46
48
  var Checkbox = require('@bigbinary/neetoui/Checkbox');
47
49
  var CreatableSelect = require('react-select/creatable');
48
50
  var _toArray = require('@babel/runtime/helpers/toArray');
49
51
  var PhoneNumber = require('@bigbinary/neeto-molecules/PhoneNumber');
50
52
  var Tag = require('@bigbinary/neetoui/Tag');
51
53
  var reactSelect = require('react-select');
54
+ var constants = require('../constants-BjXYr8nk.js');
52
55
  var initializers = require('@bigbinary/neeto-commons-frontend/initializers');
53
- var constants = require('../constants-CCwwHsAM.js');
54
56
  var Radio$1 = require('@bigbinary/neetoui/Radio');
55
57
  var TimePicker = require('@bigbinary/neetoui/TimePicker');
56
58
  var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
@@ -169,7 +171,7 @@ var Footer = function Footer(_ref) {
169
171
  className = _ref.className;
170
172
  return /*#__PURE__*/jsxRuntime.jsx("div", {
171
173
  "data-cy": "pane-footer",
172
- className: classNames("neeto-rules-side-panel__footer neeto-ui-border-gray-300 flex items-center justify-between border-t p-6", className),
174
+ className: classNames("neeto-rules-side-panel__footer neeto-ui-border-gray-200 flex items-center justify-between border-t p-6", className),
173
175
  children: children
174
176
  });
175
177
  };
@@ -187,7 +189,7 @@ var Header = function Header(_ref) {
187
189
  t = _useTranslation.t;
188
190
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
189
191
  "data-cy": "pane-header",
190
- className: classNames("neeto-rules-side-panel__header neeto-ui-border-gray-300 flex items-start justify-between border-b p-6", _defineProperty({}, className, className)),
192
+ className: classNames("neeto-rules-side-panel__header neeto-ui-border-gray-200 flex items-start justify-between border-b p-6", _defineProperty({}, className, className)),
191
193
  children: [/*#__PURE__*/jsxRuntime.jsx("div", {
192
194
  className: "flex min-w-0 flex-grow",
193
195
  children: children
@@ -237,7 +239,7 @@ var Panel = function Panel() {
237
239
  large: "neeto-rules-side-panel--large"
238
240
  }[panelState.size] || "neeto-rules-side-panel--small";
239
241
  return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$u(_objectSpread$u({
240
- 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))
242
+ className: classNames("neeto-rules-side-panel neeto-ui-border-gray-200 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))
241
243
  }, paneProps), {}, {
242
244
  children: /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$u(_objectSpread$u({}, data), {}, {
243
245
  onClose: resetPanelState
@@ -248,15 +250,11 @@ Panel.Header = Header;
248
250
  Panel.Body = Body;
249
251
  Panel.Footer = Footer;
250
252
 
251
- var ErrorCallout = function ErrorCallout(_ref) {
252
- var message = _ref.message,
253
- selectedField = _ref.selectedField;
254
- if (!message) return null;
255
- if (typeof message === "function") return message(selectedField);
256
- return /*#__PURE__*/jsxRuntime.jsx(Typography, {
257
- className: "neeto-ui-text-white neeto-ui-bg-error-500 neeto-ui-rounded-sm -mx-4 w-full p-3",
258
- style: "h5",
259
- children: message
253
+ var StickySidebarHeader = function StickySidebarHeader(_ref) {
254
+ var children = _ref.children;
255
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
256
+ className: "sticky top-0 neeto-ui-bg-white py-6 flex flex-col gap-3",
257
+ children: children
260
258
  });
261
259
  };
262
260
 
@@ -302,6 +300,7 @@ var DEFAULT_RULE_ACTION = {
302
300
  };
303
301
  var EDITOR_ADDONS = ["code-block", "block-quote", "image-upload"];
304
302
  var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
303
+ var MAXIMUM_OPTION_LENGTH$1 = 7;
305
304
  var ACTION_INPUT_TYPES = ["text", "number", "decimal", "regex"];
306
305
  var DEFAULT_HELP_POPOVER_PROPS = {
307
306
  helpLinkProps: {
@@ -309,6 +308,18 @@ var DEFAULT_HELP_POPOVER_PROPS = {
309
308
  }
310
309
  };
311
310
 
311
+ var ErrorCallout = function ErrorCallout(_ref) {
312
+ var message = _ref.message,
313
+ selectedField = _ref.selectedField;
314
+ if (!message) return null;
315
+ if (typeof message === "function") return message(selectedField);
316
+ return /*#__PURE__*/jsxRuntime.jsx(Callout, {
317
+ className: "block",
318
+ style: "danger",
319
+ children: message
320
+ });
321
+ };
322
+
312
323
  var getFieldDetails$1 = function getFieldDetails(fieldValue) {
313
324
  var actionOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
314
325
  return neetoCist.findBy({
@@ -337,6 +348,12 @@ var getDetailsByValue = function getDetailsByValue(value, options) {
337
348
  value: value
338
349
  }, options);
339
350
  };
351
+ var getSearchedOptions$2 = function getSearchedOptions(dropdownOptions, searchTerm) {
352
+ return dropdownOptions.filter(function (_ref) {
353
+ var label = _ref.label;
354
+ return ramda.toLower(label).includes(ramda.toLower(searchTerm.trim()));
355
+ });
356
+ };
340
357
  var getSelectedOptions = function getSelectedOptions(options) {
341
358
  return options.filter(ramda.identity).length ? options : [];
342
359
  };
@@ -389,6 +406,10 @@ var getPanelSize = function getPanelSize(selectedField) {
389
406
  var ActionPanel = function ActionPanel() {
390
407
  var _useTranslation = reactI18next.useTranslation(),
391
408
  t = _useTranslation.t;
409
+ var _useState = react.useState(""),
410
+ _useState2 = _slicedToArray(_useState, 2),
411
+ searchTerm = _useState2[0],
412
+ setSearchTerm = _useState2[1];
392
413
  var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
393
414
  return {
394
415
  setPanelState: store["setPanelState"],
@@ -428,6 +449,8 @@ var ActionPanel = function ActionPanel() {
428
449
  ref = _useActiveField.ref,
429
450
  setFieldActive = _useActiveField.setFieldActive;
430
451
  var label = index ? t("neetoRules.common.andThen") : t("neetoRules.common.then");
452
+ var isSearchable = actionOptions.length > MAXIMUM_OPTION_LENGTH$1;
453
+ var searchedOptions = getSearchedOptions$2(actionOptions, searchTerm);
431
454
  var setFieldValueAndUntouch = function setFieldValueAndUntouch(field, value) {
432
455
  setFieldValue(field, value);
433
456
  setFieldTouched(field, false);
@@ -468,26 +491,45 @@ var ActionPanel = function ActionPanel() {
468
491
  })]
469
492
  })
470
493
  }), /*#__PURE__*/jsxRuntime.jsxs(Panel.Body, {
471
- className: "space-y-4",
472
- children: [/*#__PURE__*/jsxRuntime.jsx(ErrorCallout, {
473
- selectedField: selectedField,
474
- message: errorMessage
475
- }), /*#__PURE__*/jsxRuntime.jsx(Radio, {
494
+ className: classNames("space-y-4", {
495
+ "pt-0": isSearchable || errorMessage
496
+ }),
497
+ children: [(isSearchable || errorMessage) && /*#__PURE__*/jsxRuntime.jsxs(StickySidebarHeader, {
498
+ children: [isSearchable && /*#__PURE__*/jsxRuntime.jsx(Input$1, {
499
+ "data-cy": "search-text-field",
500
+ placeholder: t("neetoRules.common.search"),
501
+ prefix: /*#__PURE__*/jsxRuntime.jsx(Search, {}),
502
+ value: searchTerm,
503
+ onChange: function onChange(e) {
504
+ return setSearchTerm(e.target.value);
505
+ },
506
+ onClick: function onClick(e) {
507
+ return e.stopPropagation();
508
+ }
509
+ }), /*#__PURE__*/jsxRuntime.jsx(ErrorCallout, {
510
+ selectedField: selectedField,
511
+ message: errorMessage
512
+ })]
513
+ }), neetoCist.isNotEmpty(searchedOptions) ? /*#__PURE__*/jsxRuntime.jsx(Radio, {
476
514
  ref: ref,
477
515
  stacked: true,
478
516
  name: "".concat(name, ".name"),
479
517
  value: selectedField === null || selectedField === void 0 ? void 0 : selectedField.value,
480
518
  onChange: handleSelectOption,
481
- children: actionOptions.map(function (_ref2, index) {
519
+ children: searchedOptions.map(function (_ref2) {
482
520
  var label = _ref2.label,
483
521
  value = _ref2.value;
484
522
  return /*#__PURE__*/react.createElement(Radio.Item, {
485
523
  label: label,
486
524
  value: value,
487
- key: index,
525
+ key: value,
488
526
  onFocus: setFieldActive
489
527
  });
490
528
  })
529
+ }) : /*#__PURE__*/jsxRuntime.jsx("div", {
530
+ className: "py-1 text-sm",
531
+ "data-cy": "no-options-menu-item",
532
+ children: t("neetoRules.common.noOptions")
491
533
  })]
492
534
  }), /*#__PURE__*/jsxRuntime.jsx(Panel.Footer, {
493
535
  children: /*#__PURE__*/jsxRuntime.jsx(Button, {
@@ -742,13 +784,13 @@ var KeyValuePairsField = reactUtils.withT(function (_ref) {
742
784
  children: [data.map(function (_, index) {
743
785
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
744
786
  className: "flex h-8 space-x-3",
745
- children: [/*#__PURE__*/jsxRuntime.jsx(Input$1, {
787
+ children: [/*#__PURE__*/jsxRuntime.jsx(Input$2, {
746
788
  onFocus: onFocus,
747
789
  className: "w-1/3",
748
790
  name: "".concat(name, ".").concat(index, ".key"),
749
791
  placeholder: t("neetoRules.labels.key"),
750
792
  type: "text"
751
- }), /*#__PURE__*/jsxRuntime.jsx(Input$1, {
793
+ }), /*#__PURE__*/jsxRuntime.jsx(Input$2, {
752
794
  onFocus: onFocus,
753
795
  className: "w-2/3",
754
796
  name: "".concat(name, ".").concat(index, ".value"),
@@ -985,7 +1027,7 @@ var SaveAsTemplate = function SaveAsTemplate(_ref) {
985
1027
  label: t("neetoRules.labels.saveAsTemplate"),
986
1028
  name: switchName,
987
1029
  onChange: handleChange
988
- }), shouldSaveAsTemplate && /*#__PURE__*/jsxRuntime.jsx(Input$1, {
1030
+ }), shouldSaveAsTemplate && /*#__PURE__*/jsxRuntime.jsx(Input$2, {
989
1031
  autoFocus: true,
990
1032
  required: true,
991
1033
  label: t("neetoRules.labels.templateName"),
@@ -1161,7 +1203,7 @@ var ApiFields = function ApiFields(_ref2) {
1161
1203
  initialFocusRef: ref,
1162
1204
  onChange: handleTemplateChange,
1163
1205
  onFocus: setFieldActive
1164
- }), /*#__PURE__*/jsxRuntime.jsx(Input$1, {
1206
+ }), /*#__PURE__*/jsxRuntime.jsx(Input$2, {
1165
1207
  required: true,
1166
1208
  className: "mb-4",
1167
1209
  "data-cy": "api-action-endpoint-text-field",
@@ -1401,7 +1443,7 @@ var EditorAction = function EditorAction(_ref) {
1401
1443
  }, otherProps));
1402
1444
  };
1403
1445
 
1404
- var _excluded$d = ["dropdownOptions", "name", "selectedField", "shouldAutoFocus", "className", "required"];
1446
+ var _excluded$d = ["dropdownOptions", "name", "selectedField", "shouldAutoFocus", "className", "required", "handleSlackChannelRefresh", "action"];
1405
1447
  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; }
1406
1448
  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; }
1407
1449
  var Target$g = function Target(_ref) {
@@ -1465,6 +1507,8 @@ var SelectField$2 = function SelectField(_ref2) {
1465
1507
  className = _ref2.className,
1466
1508
  _ref2$required = _ref2.required,
1467
1509
  required = _ref2$required === void 0 ? false : _ref2$required,
1510
+ handleSlackChannelRefresh = _ref2.handleSlackChannelRefresh,
1511
+ action = _ref2.action,
1468
1512
  otherProps = _objectWithoutProperties(_ref2, _excluded$d);
1469
1513
  var _useTranslation2 = reactI18next.useTranslation(),
1470
1514
  t = _useTranslation2.t;
@@ -1496,18 +1540,32 @@ var SelectField$2 = function SelectField(_ref2) {
1496
1540
  setValue((_option$value = option === null || option === void 0 ? void 0 : option.value) !== null && _option$value !== void 0 ? _option$value : null);
1497
1541
  setTouched(true);
1498
1542
  };
1499
- return /*#__PURE__*/jsxRuntime.jsx(Select$1, _objectSpread$p(_objectSpread$p({}, _objectSpread$p({
1500
- className: className,
1501
- name: name,
1502
- required: required
1503
- }, otherProps)), {}, {
1504
- innerRef: ref,
1505
- label: defaultLabel,
1506
- options: dropdownOptions,
1507
- value: selectedOption,
1508
- onChange: handleSelectOption,
1509
- onFocus: setFieldActive
1510
- }));
1543
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
1544
+ className: "flex items-start gap-2",
1545
+ children: [/*#__PURE__*/jsxRuntime.jsx(Select$1, _objectSpread$p(_objectSpread$p({}, _objectSpread$p({
1546
+ className: className,
1547
+ name: name,
1548
+ required: required
1549
+ }, otherProps)), {}, {
1550
+ innerRef: ref,
1551
+ label: defaultLabel,
1552
+ options: dropdownOptions,
1553
+ value: selectedOption,
1554
+ onChange: handleSelectOption,
1555
+ onFocus: setFieldActive
1556
+ })), handleSlackChannelRefresh && action.name === "message_to_slack" && /*#__PURE__*/jsxRuntime.jsx(Button, {
1557
+ className: "mt-[22px]",
1558
+ "data-cy": "refresh-slack-button",
1559
+ icon: Refresh,
1560
+ size: "medium",
1561
+ style: "secondary",
1562
+ tooltipProps: {
1563
+ content: t("neetoRules.slack.refreshChannelList"),
1564
+ position: "top"
1565
+ },
1566
+ onClick: handleSlackChannelRefresh
1567
+ })]
1568
+ });
1511
1569
  };
1512
1570
  SelectField$2.Target = Target$g;
1513
1571
 
@@ -1644,7 +1702,7 @@ var EmailFields = function EmailFields(_ref2) {
1644
1702
  name: "".concat(name, ".emails"),
1645
1703
  initialFocusRef: isFirstFieldInForm("emails") ? initialFocusRef : null,
1646
1704
  onFocus: setFieldActive
1647
- }), !selectedField.hideSubject && /*#__PURE__*/jsxRuntime.jsx(Input$1, {
1705
+ }), !selectedField.hideSubject && /*#__PURE__*/jsxRuntime.jsx(Input$2, {
1648
1706
  required: true,
1649
1707
  className: "mb-4",
1650
1708
  "data-cy": "email-action-subject-text-field",
@@ -1724,7 +1782,7 @@ var Input = function Input(_ref2) {
1724
1782
  }),
1725
1783
  ref = _useActiveField2.ref,
1726
1784
  setFieldActive = _useActiveField2.setFieldActive;
1727
- return /*#__PURE__*/jsxRuntime.jsx(Input$1, {
1785
+ return /*#__PURE__*/jsxRuntime.jsx(Input$2, {
1728
1786
  ref: ref,
1729
1787
  required: required,
1730
1788
  className: "my-auto",
@@ -1806,7 +1864,7 @@ var InlineInput = /*#__PURE__*/react.forwardRef(function (props, ref) {
1806
1864
  return /*#__PURE__*/jsxRuntime.jsx("div", {
1807
1865
  className: classNames("flex flex-grow", _defineProperty({}, className, className)),
1808
1866
  ref: inputWrapperRef,
1809
- children: /*#__PURE__*/jsxRuntime.jsx(Input$2, _objectSpread$n(_objectSpread$n({
1867
+ children: /*#__PURE__*/jsxRuntime.jsx(Input$1, _objectSpread$n(_objectSpread$n({
1810
1868
  autoFocus: true,
1811
1869
  required: true,
1812
1870
  className: "neeto-planner-inline-input",
@@ -2220,7 +2278,6 @@ var MultiSelectCheckbox$1 = function MultiSelectCheckbox(_ref2) {
2220
2278
  }) : /*#__PURE__*/jsxRuntime.jsx(Select$1, {
2221
2279
  name: name,
2222
2280
  innerRef: ref,
2223
- label: defaultLabel,
2224
2281
  options: dropdownOptions,
2225
2282
  onFocus: setFieldActive
2226
2283
  })]
@@ -2830,7 +2887,8 @@ var ActionSubItem = function ActionSubItem(_ref) {
2830
2887
  isTarget = _ref$isTarget === void 0 ? false : _ref$isTarget,
2831
2888
  errorMessage = _ref.errorMessage,
2832
2889
  _ref$openPanel = _ref.openPanel,
2833
- openPanel = _ref$openPanel === void 0 ? neetoCist.noop : _ref$openPanel;
2890
+ openPanel = _ref$openPanel === void 0 ? neetoCist.noop : _ref$openPanel,
2891
+ handleSlackChannelRefresh = _ref.handleSlackChannelRefresh;
2834
2892
  var _useTranslation = reactI18next.useTranslation(),
2835
2893
  t = _useTranslation.t;
2836
2894
  var hasError = !!errorMessage;
@@ -3027,6 +3085,8 @@ var ActionSubItem = function ActionSubItem(_ref) {
3027
3085
  return openPanel("small");
3028
3086
  }
3029
3087
  }) : /*#__PURE__*/jsxRuntime.jsx(SelectField$2, {
3088
+ action: action,
3089
+ handleSlackChannelRefresh: handleSlackChannelRefresh,
3030
3090
  index: index,
3031
3091
  selectedField: selectedField,
3032
3092
  required: true,
@@ -3199,14 +3259,15 @@ var ActionSubItemPanel = function ActionSubItemPanel() {
3199
3259
  setPanelState = _useUtilityStore.setPanelState,
3200
3260
  resetPanelState = _useUtilityStore.resetPanelState;
3201
3261
  var _useUtilityStore2 = useUtilityStore.useUtilityStore(function (store) {
3202
- var _store$panelState, _store$panelState2, _store$panelState3, _store$panelState4, _store$panelState5, _store$panelState6;
3262
+ var _store$panelState, _store$panelState2, _store$panelState3, _store$panelState4, _store$panelState5, _store$panelState6, _store$panelState7;
3203
3263
  return {
3204
3264
  name: (_store$panelState = store["panelState"]) === null || _store$panelState === void 0 || (_store$panelState = _store$panelState["data"]) === null || _store$panelState === void 0 ? void 0 : _store$panelState["name"],
3205
3265
  index: (_store$panelState2 = store["panelState"]) === null || _store$panelState2 === void 0 || (_store$panelState2 = _store$panelState2["data"]) === null || _store$panelState2 === void 0 ? void 0 : _store$panelState2["index"],
3206
3266
  action: (_store$panelState3 = store["panelState"]) === null || _store$panelState3 === void 0 || (_store$panelState3 = _store$panelState3["data"]) === null || _store$panelState3 === void 0 ? void 0 : _store$panelState3["action"],
3207
3267
  valueOptions: (_store$panelState4 = store["panelState"]) === null || _store$panelState4 === void 0 || (_store$panelState4 = _store$panelState4["data"]) === null || _store$panelState4 === void 0 ? void 0 : _store$panelState4["valueOptions"],
3208
3268
  selectedField: (_store$panelState5 = store["panelState"]) === null || _store$panelState5 === void 0 || (_store$panelState5 = _store$panelState5["data"]) === null || _store$panelState5 === void 0 ? void 0 : _store$panelState5["selectedField"],
3209
- errorMessage: (_store$panelState6 = store["panelState"]) === null || _store$panelState6 === void 0 || (_store$panelState6 = _store$panelState6["data"]) === null || _store$panelState6 === void 0 ? void 0 : _store$panelState6["errorMessage"]
3269
+ errorMessage: (_store$panelState6 = store["panelState"]) === null || _store$panelState6 === void 0 || (_store$panelState6 = _store$panelState6["data"]) === null || _store$panelState6 === void 0 ? void 0 : _store$panelState6["errorMessage"],
3270
+ handleSlackChannelRefresh: (_store$panelState7 = store["panelState"]) === null || _store$panelState7 === void 0 || (_store$panelState7 = _store$panelState7["data"]) === null || _store$panelState7 === void 0 ? void 0 : _store$panelState7["handleSlackChannelRefresh"]
3210
3271
  };
3211
3272
  }, shallow.shallow),
3212
3273
  name = _useUtilityStore2.name,
@@ -3214,7 +3275,8 @@ var ActionSubItemPanel = function ActionSubItemPanel() {
3214
3275
  action = _useUtilityStore2.action,
3215
3276
  valueOptions = _useUtilityStore2.valueOptions,
3216
3277
  selectedField = _useUtilityStore2.selectedField,
3217
- errorMessage = _useUtilityStore2.errorMessage;
3278
+ errorMessage = _useUtilityStore2.errorMessage,
3279
+ handleSlackChannelRefresh = _useUtilityStore2.handleSlackChannelRefresh;
3218
3280
  var _useFormikContext = formik.useFormikContext(),
3219
3281
  setFieldTouched = _useFormikContext.setFieldTouched;
3220
3282
  var _useField = formik.useField("".concat(name, ".metadata")),
@@ -3270,12 +3332,17 @@ var ActionSubItemPanel = function ActionSubItemPanel() {
3270
3332
  })]
3271
3333
  })
3272
3334
  }), /*#__PURE__*/jsxRuntime.jsxs(Panel.Body, {
3273
- className: "space-y-4",
3274
- children: [/*#__PURE__*/jsxRuntime.jsx(ErrorCallout, {
3275
- selectedField: selectedField,
3276
- message: errorMessage
3335
+ className: classNames("space-y-4", {
3336
+ "pt-0": errorMessage
3337
+ }),
3338
+ children: [errorMessage && /*#__PURE__*/jsxRuntime.jsx(StickySidebarHeader, {
3339
+ children: /*#__PURE__*/jsxRuntime.jsx(ErrorCallout, {
3340
+ selectedField: selectedField,
3341
+ message: errorMessage
3342
+ })
3277
3343
  }), /*#__PURE__*/jsxRuntime.jsx(ActionSubItem$1, {
3278
3344
  action: action,
3345
+ handleSlackChannelRefresh: handleSlackChannelRefresh,
3279
3346
  index: index,
3280
3347
  selectedField: selectedField,
3281
3348
  valueOptions: valueOptions,
@@ -3443,7 +3510,7 @@ var InputField$1 = function InputField(_ref2) {
3443
3510
  }),
3444
3511
  ref = _useActiveField2.ref,
3445
3512
  setFieldActive = _useActiveField2.setFieldActive;
3446
- return /*#__PURE__*/jsxRuntime.jsx(Input$1, {
3513
+ return /*#__PURE__*/jsxRuntime.jsx(Input$2, {
3447
3514
  name: name,
3448
3515
  placeholder: placeholder,
3449
3516
  ref: ref,
@@ -3703,6 +3770,12 @@ var getVerbOptions = function getVerbOptions() {
3703
3770
  };
3704
3771
  });
3705
3772
  };
3773
+ var getSearchedOptions$1 = function getSearchedOptions(dropdownOptions, searchTerm) {
3774
+ return dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.filter(function (_ref) {
3775
+ var label = _ref.label;
3776
+ return ramda.toLower(label).includes(ramda.toLower(searchTerm.trim()));
3777
+ });
3778
+ };
3706
3779
  var getAllOptions = function getAllOptions(options) {
3707
3780
  return Array.isArray(options) ? options.map(function (option) {
3708
3781
  return {
@@ -3820,7 +3893,7 @@ var MultiSelectCreate = function MultiSelectCreate(_ref2) {
3820
3893
  MultiSelectCreate.Target = Target$3;
3821
3894
 
3822
3895
  var _excluded$7 = ["name", "options", "placeholder", "onClick"],
3823
- _excluded2 = ["name", "options", "handleOnChange", "shouldAutoFocus", "showLabel", "required"];
3896
+ _excluded2 = ["name", "options", "handleOnChange", "shouldAutoFocus", "showLabel", "required", "isSearchable"];
3824
3897
  function ownKeys$h(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; }
3825
3898
  function _objectSpread$h(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$h(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$h(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3826
3899
  var Target$2 = function Target(_ref) {
@@ -3875,9 +3948,15 @@ var RadioField$1 = function RadioField(_ref2) {
3875
3948
  showLabel = _ref2$showLabel === void 0 ? true : _ref2$showLabel,
3876
3949
  _ref2$required = _ref2.required,
3877
3950
  required = _ref2$required === void 0 ? false : _ref2$required,
3951
+ _ref2$isSearchable = _ref2.isSearchable,
3952
+ isSearchable = _ref2$isSearchable === void 0 ? false : _ref2$isSearchable,
3878
3953
  otherProps = _objectWithoutProperties(_ref2, _excluded2);
3879
3954
  var _useTranslation2 = reactI18next.useTranslation(),
3880
3955
  t = _useTranslation2.t;
3956
+ var _useState = react.useState(""),
3957
+ _useState2 = _slicedToArray(_useState, 2),
3958
+ searchTerm = _useState2[0],
3959
+ setSearchTerm = _useState2[1];
3881
3960
  var _useField3 = formik.useField(name),
3882
3961
  _useField4 = _slicedToArray(_useField3, 3),
3883
3962
  field = _useField4[0],
@@ -3892,6 +3971,7 @@ var RadioField$1 = function RadioField(_ref2) {
3892
3971
  var selectedOption = neetoCist.findBy({
3893
3972
  value: field.value
3894
3973
  }, options);
3974
+ var searchedOptions = getSearchedOptions$1(options, searchTerm);
3895
3975
  var handleRadioChange = function handleRadioChange(_ref3) {
3896
3976
  var value = _ref3.target.value;
3897
3977
  var selectedOption = neetoCist.findBy({
@@ -3900,25 +3980,45 @@ var RadioField$1 = function RadioField(_ref2) {
3900
3980
  handleOnChange ? handleOnChange(selectedOption) : setValue(value);
3901
3981
  setTouched(true);
3902
3982
  };
3903
- return /*#__PURE__*/jsxRuntime.jsx(Radio$1, _objectSpread$h(_objectSpread$h({
3904
- ref: ref,
3905
- required: required,
3906
- stacked: true,
3907
- label: showLabel && t("neetoRules.labels.selectValue"),
3908
- value: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value,
3909
- onChange: handleRadioChange,
3910
- onFocus: setFieldActive
3911
- }, otherProps), {}, {
3912
- children: options.map(function (_ref4, index) {
3913
- var label = _ref4.label,
3914
- value = _ref4.value;
3915
- return /*#__PURE__*/react.createElement(Radio$1.Item, {
3916
- label: label,
3917
- value: value,
3918
- key: index
3919
- });
3920
- })
3921
- }));
3983
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
3984
+ className: "w-full",
3985
+ children: [isSearchable && /*#__PURE__*/jsxRuntime.jsx(StickySidebarHeader, {
3986
+ children: /*#__PURE__*/jsxRuntime.jsx(Input$1, {
3987
+ "data-cy": "search-text-field",
3988
+ placeholder: t("neetoRules.common.search"),
3989
+ prefix: /*#__PURE__*/jsxRuntime.jsx(Search, {}),
3990
+ value: searchTerm,
3991
+ onChange: function onChange(e) {
3992
+ return setSearchTerm(e.target.value);
3993
+ },
3994
+ onClick: function onClick(e) {
3995
+ return e.stopPropagation();
3996
+ }
3997
+ })
3998
+ }), neetoCist.isNotEmpty(searchedOptions) ? /*#__PURE__*/jsxRuntime.jsx(Radio$1, _objectSpread$h(_objectSpread$h({
3999
+ ref: ref,
4000
+ required: required,
4001
+ stacked: true,
4002
+ label: showLabel && t("neetoRules.labels.selectValue"),
4003
+ value: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value,
4004
+ onChange: handleRadioChange,
4005
+ onFocus: setFieldActive
4006
+ }, otherProps), {}, {
4007
+ children: searchedOptions.map(function (_ref4) {
4008
+ var label = _ref4.label,
4009
+ value = _ref4.value;
4010
+ return /*#__PURE__*/react.createElement(Radio$1.Item, {
4011
+ label: label,
4012
+ value: value,
4013
+ key: value
4014
+ });
4015
+ })
4016
+ })) : /*#__PURE__*/jsxRuntime.jsx("div", {
4017
+ className: "py-1 text-sm",
4018
+ "data-cy": "no-options-menu-item",
4019
+ children: t("neetoRules.common.noOptions")
4020
+ })]
4021
+ });
3922
4022
  };
3923
4023
  RadioField$1.Target = Target$2;
3924
4024
 
@@ -4143,6 +4243,7 @@ var FieldPanel = function FieldPanel() {
4143
4243
  var _useField3 = formik.useField("".concat(name, ".joinType")),
4144
4244
  _useField4 = _slicedToArray(_useField3, 1),
4145
4245
  logicalOperator = _useField4[0];
4246
+ var isSearchable = conditionOptions.length > constants.MAXIMUM_OPTION_LENGTH;
4146
4247
  var handleContinue = function handleContinue() {
4147
4248
  !meta.error && setPanelState(ramda.mergeDeepLeft({
4148
4249
  type: PANEL_TYPES.VERB_AND_VALUE,
@@ -4170,7 +4271,11 @@ var FieldPanel = function FieldPanel() {
4170
4271
  })]
4171
4272
  })
4172
4273
  }), /*#__PURE__*/jsxRuntime.jsx(Panel.Body, {
4274
+ className: classNames({
4275
+ "pt-0": isSearchable
4276
+ }),
4173
4277
  children: /*#__PURE__*/jsxRuntime.jsx(RadioField$1, {
4278
+ isSearchable: isSearchable,
4174
4279
  shouldAutoFocus: true,
4175
4280
  handleOnChange: handleFieldChange,
4176
4281
  name: "".concat(name, ".field"),
@@ -4436,6 +4541,7 @@ var VerbAndValuePanel = function VerbAndValuePanel() {
4436
4541
  });
4437
4542
  };
4438
4543
 
4544
+ var MAXIMUM_OPTION_LENGTH = 7;
4439
4545
  var OPERATORS = {
4440
4546
  or: "or_operator",
4441
4547
  and: "and_operator"
@@ -4498,7 +4604,7 @@ var DelayPanel = function DelayPanel() {
4498
4604
  }), /*#__PURE__*/jsxRuntime.jsx(Panel.Body, {
4499
4605
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
4500
4606
  className: "flex gap-x-2",
4501
- children: [/*#__PURE__*/jsxRuntime.jsx(Input$1, {
4607
+ children: [/*#__PURE__*/jsxRuntime.jsx(Input$2, {
4502
4608
  className: "w-44",
4503
4609
  max: 15,
4504
4610
  min: 1,
@@ -4532,11 +4638,27 @@ var DelayPanel = function DelayPanel() {
4532
4638
  });
4533
4639
  };
4534
4640
 
4641
+ var getAllEvents = function getAllEvents(events, dropdownOptions) {
4642
+ return dropdownOptions.filter(function (option) {
4643
+ return events.includes(option.value);
4644
+ });
4645
+ };
4646
+ var getSearchedOptions = function getSearchedOptions(dropdownOptions, searchTerm) {
4647
+ return dropdownOptions === null || dropdownOptions === void 0 ? void 0 : dropdownOptions.filter(function (_ref) {
4648
+ var label = _ref.label;
4649
+ return ramda.toLower(label).includes(ramda.toLower(searchTerm.trim()));
4650
+ });
4651
+ };
4652
+
4535
4653
  function ownKeys$f(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; }
4536
4654
  function _objectSpread$f(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$f(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$f(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4537
4655
  var EventsPanel = function EventsPanel() {
4538
4656
  var _useTranslation = reactI18next.useTranslation(),
4539
4657
  t = _useTranslation.t;
4658
+ var _useState = react.useState(""),
4659
+ _useState2 = _slicedToArray(_useState, 2),
4660
+ searchTerm = _useState2[0],
4661
+ setSearchTerm = _useState2[1];
4540
4662
  var _useUtilityStore = useUtilityStore.useUtilityStore(function (store) {
4541
4663
  return {
4542
4664
  setPanelState: store["setPanelState"]
@@ -4578,6 +4700,8 @@ var EventsPanel = function EventsPanel() {
4578
4700
  var defaultData = elementProps.defaultData;
4579
4701
  var eventNames = ramda.pluck("name", events);
4580
4702
  var dropdownOptions = elementProps.eventOptions;
4703
+ var searchedOptions = getSearchedOptions(dropdownOptions, searchTerm);
4704
+ var isSearchable = dropdownOptions.length > MAXIMUM_OPTION_LENGTH;
4581
4705
  var handleDefaultData = /*#__PURE__*/function () {
4582
4706
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
4583
4707
  var _values$name;
@@ -4680,10 +4804,26 @@ var EventsPanel = function EventsPanel() {
4680
4804
  children: t("neetoRules.form.addEventDescription")
4681
4805
  })]
4682
4806
  })
4683
- }), /*#__PURE__*/jsxRuntime.jsx(Panel.Body, {
4684
- children: /*#__PURE__*/jsxRuntime.jsxs("div", {
4807
+ }), /*#__PURE__*/jsxRuntime.jsxs(Panel.Body, {
4808
+ className: classNames({
4809
+ "pt-0": isSearchable
4810
+ }),
4811
+ children: [isSearchable && /*#__PURE__*/jsxRuntime.jsx(StickySidebarHeader, {
4812
+ children: /*#__PURE__*/jsxRuntime.jsx(Input$1, {
4813
+ "data-cy": "search-text-field",
4814
+ placeholder: t("neetoRules.common.search"),
4815
+ prefix: /*#__PURE__*/jsxRuntime.jsx(Search, {}),
4816
+ value: searchTerm,
4817
+ onChange: function onChange(e) {
4818
+ return setSearchTerm(e.target.value);
4819
+ },
4820
+ onClick: function onClick(e) {
4821
+ return e.stopPropagation();
4822
+ }
4823
+ })
4824
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
4685
4825
  className: "space-y-3",
4686
- children: [neetoCist.isNotEmpty(dropdownOptions) ? dropdownOptions.map(function (option) {
4826
+ children: [neetoCist.isNotEmpty(searchedOptions) ? searchedOptions.map(function (option) {
4687
4827
  return /*#__PURE__*/react.createElement(Checkbox, {
4688
4828
  ref: ref,
4689
4829
  checked: eventNames === null || eventNames === void 0 ? void 0 : eventNames.includes(option.value),
@@ -4704,7 +4844,7 @@ var EventsPanel = function EventsPanel() {
4704
4844
  className: "neeto-ui-input__error",
4705
4845
  children: error
4706
4846
  })]
4707
- })
4847
+ })]
4708
4848
  }), /*#__PURE__*/jsxRuntime.jsx(Panel.Footer, {
4709
4849
  children: /*#__PURE__*/jsxRuntime.jsx(Button, {
4710
4850
  "data-cy": "continue-button",
@@ -5229,7 +5369,8 @@ var ActionItem = function ActionItem(_ref) {
5229
5369
  selectedActionOptions = _ref.selectedActionOptions,
5230
5370
  routeToSlackIntegration = _ref.routeToSlackIntegration,
5231
5371
  shouldOpenPanel = _ref.shouldOpenPanel,
5232
- setShouldOpenPanel = _ref.setShouldOpenPanel;
5372
+ setShouldOpenPanel = _ref.setShouldOpenPanel,
5373
+ handleSlackChannelRefresh = _ref.handleSlackChannelRefresh;
5233
5374
  var _useTranslation = reactI18next.useTranslation(),
5234
5375
  t = _useTranslation.t;
5235
5376
  var _useFormikContext = formik.useFormikContext(),
@@ -5304,7 +5445,8 @@ var ActionItem = function ActionItem(_ref) {
5304
5445
  selectedField: selectedField,
5305
5446
  onSelectAction: onSelectAction,
5306
5447
  valueOptions: getSelectedFieldOptions(),
5307
- errorMessage: errorMessage
5448
+ errorMessage: errorMessage,
5449
+ handleSlackChannelRefresh: handleSlackChannelRefresh
5308
5450
  };
5309
5451
  var _openPanel = function openPanel(type, panelSize) {
5310
5452
  setPanelState({
@@ -5332,9 +5474,10 @@ var ActionItem = function ActionItem(_ref) {
5332
5474
  })
5333
5475
  });
5334
5476
  });
5335
- }, [selectedField]);
5477
+ }, [selectedField === null || selectedField === void 0 ? void 0 : selectedField.value]);
5478
+ var hasError = !!errorMessage;
5336
5479
  react.useEffect(function () {
5337
- if (errorMessage) {
5480
+ if (hasError) {
5338
5481
  setErrorFields(function (prev) {
5339
5482
  return prev.includes(name) ? prev : [].concat(_toConsumableArray(prev), [name]);
5340
5483
  });
@@ -5348,7 +5491,7 @@ var ActionItem = function ActionItem(_ref) {
5348
5491
  return prev.filter(neetoCist.isNot(name));
5349
5492
  });
5350
5493
  };
5351
- }, [errorMessage, name, setErrorFields]);
5494
+ }, [hasError, name, setErrorFields]);
5352
5495
  return /*#__PURE__*/jsxRuntime.jsx("div", {
5353
5496
  className: "flex flex-grow min-w-0 flex-wrap gap-x-1 gap-y-3",
5354
5497
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -5467,6 +5610,7 @@ var Actions = function Actions(_ref) {
5467
5610
  children: [/*#__PURE__*/jsxRuntime.jsx(ActionItem$1, {
5468
5611
  action: action,
5469
5612
  elementProps: elementProps,
5613
+ handleSlackChannelRefresh: handleSlackChannelRefresh,
5470
5614
  index: index,
5471
5615
  onSelectAction: onSelectAction,
5472
5616
  routeToSlackIntegration: routeToSlackIntegration,
@@ -5477,18 +5621,7 @@ var Actions = function Actions(_ref) {
5477
5621
  parentName: name
5478
5622
  }), /*#__PURE__*/jsxRuntime.jsxs("div", {
5479
5623
  className: "flex flex-wrap flex-shrink-0 self-center",
5480
- children: [handleSlackChannelRefresh && action.name === "message_to_slack" && /*#__PURE__*/jsxRuntime.jsx(Button, {
5481
- "data-cy": "refresh-slack-button",
5482
- icon: Refresh,
5483
- size: "medium",
5484
- tooltipProps: {
5485
- content: t("neetoRules.slack.refreshChannelList"),
5486
- position: "top"
5487
- },
5488
- onClick: function onClick() {
5489
- return handleSlackChannelRefresh();
5490
- }
5491
- }), showButton && index === actions.length - 1 && /*#__PURE__*/jsxRuntime.jsx(Button, {
5624
+ children: [showButton && index === actions.length - 1 && /*#__PURE__*/jsxRuntime.jsx(Button, {
5492
5625
  "data-cy": "add-action-button",
5493
5626
  icon: Plus,
5494
5627
  size: "medium",
@@ -5669,7 +5802,7 @@ var ConditionItem = function ConditionItem(_ref) {
5669
5802
  })
5670
5803
  });
5671
5804
  });
5672
- }, [selectedField, condition.verb]);
5805
+ }, [selectedField === null || selectedField === void 0 ? void 0 : selectedField.value, condition.verb]);
5673
5806
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
5674
5807
  children: [!!index && /*#__PURE__*/jsxRuntime.jsx(LogicalOperator, {
5675
5808
  handleGroupJoinType: handleGroupJoinType,
@@ -6033,12 +6166,6 @@ var Performer = function Performer(_ref) {
6033
6166
  });
6034
6167
  };
6035
6168
 
6036
- var getAllEvents = function getAllEvents(events, dropdownOptions) {
6037
- return dropdownOptions.filter(function (option) {
6038
- return events.includes(option.value);
6039
- });
6040
- };
6041
-
6042
6169
  function ownKeys$9(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; }
6043
6170
  function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6044
6171
  var Events = function Events(_ref) {
@@ -6263,7 +6390,7 @@ var InputField = function InputField(_ref) {
6263
6390
  _useDebouncedUpdate2 = _slicedToArray(_useDebouncedUpdate, 2),
6264
6391
  text = _useDebouncedUpdate2[0],
6265
6392
  setText = _useDebouncedUpdate2[1];
6266
- return /*#__PURE__*/jsxRuntime.jsx(Input$1, _objectSpread$7(_objectSpread$7({
6393
+ return /*#__PURE__*/jsxRuntime.jsx(Input$2, _objectSpread$7(_objectSpread$7({
6267
6394
  className: "mb-4",
6268
6395
  label: label || (elementProps === null || elementProps === void 0 ? void 0 : elementProps.label)
6269
6396
  }, field), {}, {