iguazio.dashboard-react-controls 3.0.2 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { jsx as i, jsxs as m } from "react/jsx-runtime";
1
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
2
2
  import { useState as c, useRef as R, useEffect as C, useCallback as K } from "react";
3
3
  import { useField as Ee, Field as Oe } from "react-final-form";
4
4
  import { isEmpty as q } from "lodash";
@@ -23,12 +23,12 @@ const Be = ({
23
23
  density: ee = "normal",
24
24
  disabled: W = !1,
25
25
  hideSearchInput: oe = !1,
26
- inputDefaultValue: ie = "",
27
- inputPlaceholder: le = "",
26
+ inputDefaultValue: le = "",
27
+ inputPlaceholder: ie = "",
28
28
  invalidText: B = "Invalid",
29
29
  label: G = "",
30
30
  maxSuggestedMatches: te = 1,
31
- name: d,
31
+ name: m,
32
32
  onBlur: _ = null,
33
33
  onChange: g = null,
34
34
  onFocus: N = null,
@@ -45,10 +45,10 @@ const Be = ({
45
45
  validator: U = null,
46
46
  withoutBorder: ae = !1
47
47
  }) => {
48
- const { input: a, meta: r } = Ee(d), [F, D] = c(ie), [n, ne] = c(re), [ce, L] = c({
48
+ const { input: a, meta: r } = Ee(m), [F, D] = c(le), [n, ne] = c(re), [ce, L] = c({
49
49
  left: "0px"
50
- }), [f, u] = c(!1), [$, w] = c(!1), [x, X] = c(S), [v, y] = c(!1), [I, de] = c(!1), [V, me] = c(H), [A, E] = c(!1), p = R(), P = R(), b = R(), O = R();
51
- We(p, () => E(!1));
50
+ }), [p, f] = c(!1), [$, w] = c(!1), [x, X] = c(S), [v, y] = c(!1), [I, de] = c(!1), [V, me] = c(H), [A, E] = c(!1), b = R(), P = R(), d = R(), O = R();
51
+ We(b, () => E(!1));
52
52
  const fe = h("form-field__label", W && "form-field__label-disabled"), ue = h(
53
53
  "form-field-combobox__input",
54
54
  n.id.length === 0 && "form-field-combobox__input_hidden"
@@ -69,57 +69,57 @@ const Be = ({
69
69
  }, [r.invalid, r.modified, r.submitFailed, r.touched, r.validating]);
70
70
  const j = K(
71
71
  (e) => {
72
- p.current && !p.current.contains(e.target) && O.current && !O.current.contains(e.target) && (y(!1), u(!1), w(!1), a.onBlur(new Event("blur")), _ && _(a.value));
72
+ b.current && !b.current.contains(e.target) && O.current && !O.current.contains(e.target) && (y(!1), f(!1), w(!1), a.onBlur(new Event("blur")), _ && _(a.value));
73
73
  },
74
74
  [a, _]
75
75
  ), Y = (e) => {
76
- p.current && p.current.contains(e.target) || !e.target.closest(".pop-up-dialog") && !e.target.classList.contains("form-field-combobox") && (E(!1), u(!1), w(!1), b.current.blur());
76
+ b.current && b.current.contains(e.target) || !e.target.closest(".pop-up-dialog") && !e.target.classList.contains("form-field-combobox") && (E(!1), f(!1), w(!1), d.current.blur());
77
77
  };
78
78
  C(() => (window.addEventListener("click", j), () => {
79
79
  window.removeEventListener("click", j);
80
- }), [j]), C(() => ((A || f || $) && window.addEventListener("scroll", Y, !0), () => {
80
+ }), [j]), C(() => ((A || p || $) && window.addEventListener("scroll", Y, !0), () => {
81
81
  window.removeEventListener("scroll", Y, !0);
82
- }), [f, $, A]);
83
- const pe = () => V.map(({ isValid: e = !1, label: o, name: s }) => /* @__PURE__ */ i(Re, { valid: e, validationMessage: o }, s)), be = (e) => {
82
+ }), [p, $, A]);
83
+ const pe = () => V.map(({ isValid: e = !1, label: o, name: s }) => /* @__PURE__ */ l(Re, { valid: e, validationMessage: o }, s)), be = (e) => {
84
84
  const o = e.target;
85
85
  L({
86
86
  left: `${o.selectionStart < 30 ? o.selectionStart : 30}ch`
87
87
  }), v && y(!1), D(o.value), a.onChange(`${n.id}${o.value}`), g && g(n.id, o.value), x.length > 0 && w(!0);
88
88
  }, he = (e) => {
89
- e.id !== n.id && (ne(e), a.onChange(e.id), D(""), g && g(e.id), u(!1), b.current.disabled = !1, b.current.focus());
89
+ e.id !== n.id ? (ne(e), a.onChange(e.id), D(""), g && g(e.id), f(!1), d.current.disabled = !1, d.current.focus()) : (f(!1), d.current.disabled = !1, d.current.focus());
90
90
  }, _e = (e) => {
91
91
  const o = F.split("/"), s = o.length - 1;
92
- let l = e.customDelimiter ? o[s].replace(new RegExp(`${e.customDelimiter}.*`), "") + e.id : e.id;
93
- o.length <= te - 1 && (l += "/"), o[s] = l, v && y(!1), o.join("/") !== F && (D(o.join("/")), a.onChange(`${n.id}${o.join("/")}`), g && g(n.id, o.join("/"))), w(!1), b.current.focus(), L({
94
- left: `${b.current.selectionStart < 30 ? b.current.selectionStart : 30}ch`
92
+ let i = e.customDelimiter ? o[s].replace(new RegExp(`${e.customDelimiter}.*`), "") + e.id : e.id;
93
+ o.length <= te - 1 && (i += "/"), o[s] = i, v && y(!1), o.join("/") !== F && (D(o.join("/")), a.onChange(`${n.id}${o.join("/")}`), g && g(n.id, o.join("/"))), w(!1), d.current.focus(), L({
94
+ left: `${d.current.selectionStart < 30 ? d.current.selectionStart : 30}ch`
95
95
  });
96
96
  }, ge = () => {
97
- N && N(), a.onFocus(new Event("focus")), f && u(!1), w(!0);
97
+ N && N(), a.onFocus(new Event("focus")), p && f(!1), w(!0);
98
98
  }, we = (e) => {
99
99
  e.persist(), X(
100
100
  () => S.filter((o) => o.id.startsWith(e.target.value))
101
101
  );
102
102
  }, z = K(() => {
103
- f ? (u(!1), a.onBlur(new Event("blur")), _ && _(a.value)) : (w(!1), E(!1), L({
103
+ p ? (f(!1), a.onBlur(new Event("blur")), _ && _(a.value)) : (w(!1), E(!1), L({
104
104
  left: "0px"
105
- }), u(!0), a.onFocus(new Event("focus")), N && N(a.value));
106
- }, [a, _, N, f]), xe = (e = "", o) => {
105
+ }), f(!0), a.onFocus(new Event("focus")), N && N(a.value));
106
+ }, [a, _, N, p]), xe = (e = "", o) => {
107
107
  const s = e.startsWith(n.id) ? e.substring(n.id.length) : e ?? "";
108
- let l = null;
108
+ let i = null;
109
109
  if (!q(V)) {
110
110
  const [M, Ie] = De(H, s), Ve = M.filter((k) => !k.isValid);
111
- Ie || (l = Ve.map((k) => ({ name: k.name, label: k.label })));
111
+ Ie || (i = Ve.map((k) => ({ name: k.name, label: k.label })));
112
112
  }
113
- return q(l) && (s.startsWith(" ") ? l = { name: "empty", label: B } : T && s.trim().length === 0 && (l = { name: "required", label: "This field is required" })), !l && U && (l = U(e, o)), l;
113
+ return q(i) && (s.startsWith(" ") ? i = { name: "empty", label: B } : T && s.trim().length === 0 && (i = { name: "required", label: "This field is required" })), !i && U && (i = U(e, o)), i;
114
114
  }, ve = () => {
115
- E((e) => !e), u(!1);
115
+ E((e) => !e), f(!1);
116
116
  }, Ne = h(
117
117
  Z,
118
118
  "form-field-combobox",
119
119
  "form-field",
120
120
  I && "form-field-combobox_invalid"
121
121
  ), Se = h(
122
- f && "form-field-combobox__icon_open",
122
+ p && "form-field-combobox__icon_open",
123
123
  "form-field-combobox__icon"
124
124
  ), Ce = h(n.className), ye = h(
125
125
  "form-field__wrapper",
@@ -128,27 +128,27 @@ const Be = ({
128
128
  I && "form-field__wrapper-invalid",
129
129
  ae && "without-border"
130
130
  );
131
- return /* @__PURE__ */ i(Oe, { name: d, validate: xe, children: ({ input: e, meta: o }) => {
131
+ return /* @__PURE__ */ l(Oe, { name: m, validate: xe, children: ({ input: e, meta: o }) => {
132
132
  var s;
133
- return /* @__PURE__ */ m(
133
+ return /* @__PURE__ */ u(
134
134
  "div",
135
135
  {
136
136
  className: Ne,
137
- ref: p,
138
- "data-testid": d ? `${d}-form-combobox` : "form-combobox",
137
+ ref: b,
138
+ "data-testid": m ? `${m}-form-combobox` : "form-combobox",
139
139
  children: [
140
- G && /* @__PURE__ */ i("div", { className: fe, children: /* @__PURE__ */ m("label", { "data-testid": "label", htmlFor: e.name, children: [
140
+ G && /* @__PURE__ */ l("div", { className: fe, children: /* @__PURE__ */ u("label", { "data-testid": "label", htmlFor: e.name, children: [
141
141
  G,
142
- (T || V.find((l) => l.name === "required")) && /* @__PURE__ */ i("span", { className: "form-field__label-mandatory", children: " *" })
142
+ (T || V.find((i) => i.name === "required")) && /* @__PURE__ */ l("span", { className: "form-field__label-mandatory", children: " *" })
143
143
  ] }) }),
144
- /* @__PURE__ */ m("div", { className: ye, children: [
145
- /* @__PURE__ */ i("div", { className: "form-field__icons", children: /* @__PURE__ */ i(Pe, { className: Se, onClick: z }) }),
146
- /* @__PURE__ */ m("div", { className: "form-field-combobox__select form-field__control", ref: P, children: [
147
- /* @__PURE__ */ m("div", { className: "form-field-combobox__select-header", onClick: z, children: [
148
- /* @__PURE__ */ i("span", { className: Ce, children: n.id }),
149
- n.id.length === 0 && J && /* @__PURE__ */ i("div", { className: "form-field-combobox__placeholder", children: /* @__PURE__ */ i("label", { children: J }) })
144
+ /* @__PURE__ */ u("div", { className: ye, children: [
145
+ /* @__PURE__ */ l("div", { className: "form-field__icons", children: /* @__PURE__ */ l(Pe, { className: Se, onClick: z }) }),
146
+ /* @__PURE__ */ u("div", { className: "form-field-combobox__select form-field__control", ref: P, children: [
147
+ /* @__PURE__ */ u("div", { className: "form-field-combobox__select-header", onClick: z, children: [
148
+ /* @__PURE__ */ l("span", { className: Ce, children: n.id }),
149
+ n.id.length === 0 && J && /* @__PURE__ */ l("div", { className: "form-field-combobox__placeholder", children: /* @__PURE__ */ l("label", { children: J }) })
150
150
  ] }),
151
- f && /* @__PURE__ */ i(
151
+ p && /* @__PURE__ */ l(
152
152
  Q,
153
153
  {
154
154
  headerIsHidden: !0,
@@ -157,42 +157,42 @@ const Be = ({
157
157
  position: "bottom-right"
158
158
  },
159
159
  className: "form-field-combobox__dropdown form-field-combobox__dropdown-select",
160
- children: /* @__PURE__ */ i("ul", { className: "form-field-combobox__dropdown-list", ref: O, children: se.map((l) => {
161
- if (!l.hidden) {
160
+ children: /* @__PURE__ */ l("ul", { className: "form-field-combobox__dropdown-list", ref: O, children: se.map((i) => {
161
+ if (!i.hidden) {
162
162
  const M = h(
163
163
  "form-field-combobox__dropdown-list-option",
164
- l.className
164
+ i.className
165
165
  );
166
- return /* @__PURE__ */ i(
166
+ return /* @__PURE__ */ l(
167
167
  "li",
168
168
  {
169
169
  className: M,
170
- onClick: () => he(l),
171
- children: l.label
170
+ onClick: () => he(i),
171
+ children: i.label
172
172
  },
173
- l.id
173
+ i.id
174
174
  );
175
175
  }
176
176
  }) })
177
177
  }
178
178
  )
179
179
  ] }),
180
- /* @__PURE__ */ i(
180
+ /* @__PURE__ */ l(
181
181
  "input",
182
182
  {
183
183
  className: ue,
184
- "data-testid": d ? `${d}-form-combobox-input` : "form-combobox-input",
184
+ "data-testid": m ? `${m}-form-combobox-input` : "form-combobox-input",
185
185
  id: e.name,
186
186
  onChange: be,
187
187
  onFocus: ge,
188
- placeholder: le,
189
- ref: b,
188
+ placeholder: ie,
189
+ ref: d,
190
190
  required: T,
191
191
  type: "text",
192
192
  value: F
193
193
  }
194
194
  ),
195
- $ && (x.length > 0 || v) && /* @__PURE__ */ i(
195
+ $ && (x.length > 0 || v) && /* @__PURE__ */ l(
196
196
  Q,
197
197
  {
198
198
  headerIsHidden: !0,
@@ -204,12 +204,12 @@ const Be = ({
204
204
  style: {
205
205
  ...ce
206
206
  },
207
- children: /* @__PURE__ */ m("div", { ref: O, children: [
208
- !oe && /* @__PURE__ */ m("div", { className: "form-field-combobox__search-wrapper", children: [
209
- /* @__PURE__ */ i(
207
+ children: /* @__PURE__ */ u("div", { ref: O, children: [
208
+ !oe && /* @__PURE__ */ u("div", { className: "form-field-combobox__search-wrapper", children: [
209
+ /* @__PURE__ */ l(
210
210
  "input",
211
211
  {
212
- "data-testid": d ? `${d}-form-combobox-search` : "form-combobox-search",
212
+ "data-testid": m ? `${m}-form-combobox-search` : "form-combobox-search",
213
213
  className: "form-field-combobox__search form-field__control",
214
214
  onChange: we,
215
215
  onFocus: () => y(!0),
@@ -217,32 +217,32 @@ const Be = ({
217
217
  type: "text"
218
218
  }
219
219
  ),
220
- /* @__PURE__ */ i(je, {})
220
+ /* @__PURE__ */ l(je, {})
221
221
  ] }),
222
- /* @__PURE__ */ i("ul", { className: "form-field-combobox__dropdown-list", children: v && x.length === 0 ? /* @__PURE__ */ i("li", { className: "form-field-combobox__dropdown-list-option", children: "No data" }, "no data") : x.map((l) => /* @__PURE__ */ i(
222
+ /* @__PURE__ */ l("ul", { className: "form-field-combobox__dropdown-list", children: v && x.length === 0 ? /* @__PURE__ */ l("li", { className: "form-field-combobox__dropdown-list-option", children: "No data" }, "no data") : x.map((i) => /* @__PURE__ */ l(
223
223
  "li",
224
224
  {
225
225
  className: "form-field-combobox__dropdown-list-option",
226
- onClick: () => _e(l),
227
- children: l.label
226
+ onClick: () => _e(i),
227
+ children: i.label
228
228
  },
229
- l.id
229
+ i.id
230
230
  )) })
231
231
  ] })
232
232
  }
233
233
  ),
234
- /* @__PURE__ */ m("div", { className: "form-field__icons", children: [
235
- I && !Array.isArray(o.error) && /* @__PURE__ */ i(
234
+ /* @__PURE__ */ u("div", { className: "form-field__icons", children: [
235
+ I && !Array.isArray(o.error) && /* @__PURE__ */ l(
236
236
  Fe,
237
237
  {
238
238
  className: "form-field__warning",
239
- template: /* @__PURE__ */ i(Te, { text: ((s = o.error) == null ? void 0 : s.label) ?? B, warning: !0 }),
240
- children: /* @__PURE__ */ i(qe, {})
239
+ template: /* @__PURE__ */ l(Te, { text: ((s = o.error) == null ? void 0 : s.label) ?? B, warning: !0 }),
240
+ children: /* @__PURE__ */ l(qe, {})
241
241
  }
242
242
  ),
243
- I && Array.isArray(o.error) && /* @__PURE__ */ i("button", { className: "form-field__warning", onClick: ve, children: /* @__PURE__ */ i(Me, {}) })
243
+ I && Array.isArray(o.error) && /* @__PURE__ */ l("button", { className: "form-field__warning", onClick: ve, children: /* @__PURE__ */ l(Me, {}) })
244
244
  ] }),
245
- !q(V) && /* @__PURE__ */ i(ke, { show: A, ref: { refInputContainer: p }, children: pe() })
245
+ !q(V) && /* @__PURE__ */ l(ke, { show: A, ref: { refInputContainer: b }, children: pe() })
246
246
  ] })
247
247
  ]
248
248
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormCombobox.mjs","sources":["../../../src/lib/components/FormCombobox/FormCombobox.jsx"],"sourcesContent":["/*\nCopyright 2022 Iguazio Systems Ltd.\nLicensed under the Apache License, Version 2.0 (the \"License\") with\nan addition restriction as set forth herein. You may not use this\nfile except in compliance with the License. You may obtain a copy of\nthe License at http://www.apache.org/licenses/LICENSE-2.0.\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied. See the License for the specific language governing\npermissions and limitations under the License.\nIn addition, you may not use the software for any purposes that are\nillegal under applicable law, and the grant of the foregoing license\nunder the Apache 2.0 license is conditioned upon your compliance with\nsuch restriction.\n*/\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { Field, useField } from 'react-final-form'\nimport { isEmpty } from 'lodash'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\n\nimport OptionsMenu from '../../elements/OptionsMenu/OptionsMenu'\nimport ValidationTemplate from '../../elements/ValidationTemplate/ValidationTemplate'\nimport PopUpDialog from '../PopUpDialog/PopUpDialog'\nimport TextTooltipTemplate from '../TooltipTemplate/TextTooltipTemplate'\nimport Tooltip from '../Tooltip/Tooltip'\n\nimport { checkPatternsValidity } from '../../utils/validation.util'\nimport { useDetectOutsideClick } from '../../hooks'\nimport { COMBOBOX_SELECT_OPTIONS, COMBOBOX_SUGGESTION_LIST, DENSITY } from '../../types'\n\nimport Arrow from '../../images/arrow.svg?react'\nimport SearchIcon from '../../images/search.svg?react'\nimport WarningIcon from '../../images/warning.svg?react'\nimport ExclamationMarkIcon from '../../images/exclamation-mark.svg?react'\n\nimport './formCombobox.scss'\n\nconst FormCombobox = ({\n comboboxClassName = '',\n density = 'normal',\n disabled = false,\n hideSearchInput = false,\n inputDefaultValue = '',\n inputPlaceholder = '',\n invalidText = 'Invalid',\n label = '',\n maxSuggestedMatches = 1,\n name,\n onBlur = null,\n onChange = null,\n onFocus = null,\n required = false,\n rules = [],\n selectDefaultValue = {\n label: '',\n id: '',\n className: ''\n },\n selectOptions,\n selectPlaceholder = '',\n suggestionList = [],\n validator = null,\n withoutBorder = false\n}) => {\n const { input, meta } = useField(name)\n const [inputValue, setInputValue] = useState(inputDefaultValue)\n const [selectValue, setSelectValue] = useState(selectDefaultValue)\n const [dropdownStyle, setDropdownStyle] = useState({\n left: '0px'\n })\n const [showSelectDropdown, setShowSelectDropdown] = useState(false)\n const [showSuggestionList, setShowSuggestionList] = useState(false)\n const [dropdownList, setDropdownList] = useState(suggestionList)\n const [searchIsFocused, setSearchIsFocused] = useState(false)\n const [isInvalid, setIsInvalid] = useState(false)\n const [validationRules, setValidationRules] = useState(rules)\n const [showValidationRules, setShowValidationRules] = useState(false)\n const comboboxRef = useRef()\n const selectRef = useRef()\n const inputRef = useRef()\n const suggestionListRef = useRef()\n useDetectOutsideClick(comboboxRef, () => setShowValidationRules(false))\n\n const labelClassNames = classnames('form-field__label', disabled && 'form-field__label-disabled')\n const inputClassNames = classnames(\n 'form-field-combobox__input',\n selectValue.id.length === 0 && 'form-field-combobox__input_hidden'\n )\n\n useEffect(() => {\n setValidationRules(prevState =>\n prevState.map(rule => ({\n ...rule,\n isValid:\n !meta.error || !Array.isArray(meta.error)\n ? true\n : !meta.error.some(err => err.name === rule.name)\n }))\n )\n }, [meta.error])\n\n useEffect(() => {\n if (!searchIsFocused) {\n if (JSON.stringify(dropdownList) !== JSON.stringify(suggestionList)) {\n setDropdownList(suggestionList)\n }\n }\n }, [dropdownList, suggestionList, searchIsFocused])\n\n useEffect(() => {\n setIsInvalid(\n meta.invalid && (meta.validating || meta.modified || (meta.submitFailed && meta.touched))\n )\n }, [meta.invalid, meta.modified, meta.submitFailed, meta.touched, meta.validating])\n\n const handleOutsideClick = useCallback(\n event => {\n if (\n comboboxRef.current &&\n !comboboxRef.current.contains(event.target) &&\n suggestionListRef.current &&\n !suggestionListRef.current.contains(event.target)\n ) {\n setSearchIsFocused(false)\n setShowSelectDropdown(false)\n setShowSuggestionList(false)\n input.onBlur(new Event('blur'))\n onBlur && onBlur(input.value)\n }\n },\n [input, onBlur]\n )\n\n const handleScroll = event => {\n if (comboboxRef.current && comboboxRef.current.contains(event.target)) return\n\n if (\n !event.target.closest('.pop-up-dialog') &&\n !event.target.classList.contains('form-field-combobox')\n ) {\n setShowValidationRules(false)\n setShowSelectDropdown(false)\n setShowSuggestionList(false)\n inputRef.current.blur()\n }\n }\n\n useEffect(() => {\n window.addEventListener('click', handleOutsideClick)\n\n return () => {\n window.removeEventListener('click', handleOutsideClick)\n }\n }, [handleOutsideClick])\n\n useEffect(() => {\n if (showValidationRules || showSelectDropdown || showSuggestionList) {\n window.addEventListener('scroll', handleScroll, true)\n }\n return () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\n }, [showSelectDropdown, showSuggestionList, showValidationRules])\n\n const getValidationRules = () => {\n return validationRules.map(({ isValid = false, label, name }) => {\n return <ValidationTemplate valid={isValid} validationMessage={label} key={name} />\n })\n }\n\n const handleInputChange = event => {\n const target = event.target\n\n setDropdownStyle({\n left: `${target.selectionStart < 30 ? target.selectionStart : 30}ch`\n })\n\n if (searchIsFocused) {\n setSearchIsFocused(false)\n }\n\n setInputValue(target.value)\n input.onChange(`${selectValue.id}${target.value}`)\n onChange && onChange(selectValue.id, target.value)\n\n if (dropdownList.length > 0) {\n setShowSuggestionList(true)\n }\n }\n\n const handleSelectOptionClick = selectedOption => {\n if (selectedOption.id !== selectValue.id) {\n setSelectValue(selectedOption)\n input.onChange(selectedOption.id)\n setInputValue('')\n onChange && onChange(selectedOption.id)\n setShowSelectDropdown(false)\n inputRef.current.disabled = false\n inputRef.current.focus()\n }\n }\n\n const handleSuggestionListOptionClick = option => {\n const inputValueItems = inputValue.split('/')\n const valueIndex = inputValueItems.length - 1\n let formattedValue = option.customDelimiter\n ? inputValueItems[valueIndex].replace(new RegExp(`${option.customDelimiter}.*`), '') +\n option.id\n : option.id\n\n if (inputValueItems.length <= maxSuggestedMatches - 1) formattedValue += '/'\n\n inputValueItems[valueIndex] = formattedValue\n\n if (searchIsFocused) {\n setSearchIsFocused(false)\n }\n\n if (inputValueItems.join('/') !== inputValue) {\n setInputValue(inputValueItems.join('/'))\n input.onChange(`${selectValue.id}${inputValueItems.join('/')}`)\n onChange && onChange(selectValue.id, inputValueItems.join('/'))\n }\n\n setShowSuggestionList(false)\n inputRef.current.focus()\n setDropdownStyle({\n left: `${inputRef.current.selectionStart < 30 ? inputRef.current.selectionStart : 30}ch`\n })\n }\n\n const inputOnFocus = () => {\n onFocus && onFocus()\n input.onFocus(new Event('focus'))\n\n if (showSelectDropdown) {\n setShowSelectDropdown(false)\n }\n\n setShowSuggestionList(true)\n }\n\n const suggestionListSearchChange = event => {\n event.persist()\n setDropdownList(() =>\n suggestionList.filter(option => {\n return option.id.startsWith(event.target.value)\n })\n )\n }\n\n const toggleSelect = useCallback(() => {\n if (showSelectDropdown) {\n setShowSelectDropdown(false)\n input.onBlur(new Event('blur'))\n onBlur && onBlur(input.value)\n } else {\n setShowSuggestionList(false)\n setShowValidationRules(false)\n setDropdownStyle({\n left: '0px'\n })\n setShowSelectDropdown(true)\n input.onFocus(new Event('focus'))\n onFocus && onFocus(input.value)\n }\n }, [input, onBlur, onFocus, showSelectDropdown])\n\n const validateField = (value = '', allValues) => {\n const valueToValidate = value.startsWith(selectValue.id)\n ? value.substring(selectValue.id.length)\n : (value ?? '')\n let validationError = null\n\n if (!isEmpty(validationRules)) {\n const [newRules, isValidField] = checkPatternsValidity(rules, valueToValidate)\n const invalidRules = newRules.filter(rule => !rule.isValid)\n\n if (!isValidField) {\n validationError = invalidRules.map(rule => ({ name: rule.name, label: rule.label }))\n }\n }\n\n if (isEmpty(validationError)) {\n if (valueToValidate.startsWith(' ')) {\n validationError = { name: 'empty', label: invalidText }\n } else if (required && valueToValidate.trim().length === 0) {\n validationError = { name: 'required', label: 'This field is required' }\n }\n }\n\n if (!validationError && validator) {\n validationError = validator(value, allValues)\n }\n\n return validationError\n }\n\n const warningIconClick = () => {\n setShowValidationRules(state => !state)\n setShowSelectDropdown(false)\n }\n\n const comboboxClassNames = classnames(\n comboboxClassName,\n 'form-field-combobox',\n 'form-field',\n isInvalid && 'form-field-combobox_invalid'\n )\n const iconClassNames = classnames(\n showSelectDropdown && 'form-field-combobox__icon_open',\n 'form-field-combobox__icon'\n )\n const selectValueClassNames = classnames(selectValue.className)\n\n const wrapperClassNames = classnames(\n 'form-field__wrapper',\n `form-field__wrapper-${density}`,\n disabled && 'form-field__wrapper-disabled',\n isInvalid && 'form-field__wrapper-invalid',\n withoutBorder && 'without-border'\n )\n\n return (\n <Field name={name} validate={validateField}>\n {({ input, meta }) => (\n <div\n className={comboboxClassNames}\n ref={comboboxRef}\n data-testid={name ? `${name}-form-combobox` : 'form-combobox'}\n >\n {label && (\n <div className={labelClassNames}>\n <label data-testid=\"label\" htmlFor={input.name}>\n {label}\n {(required || validationRules.find(rule => rule.name === 'required')) && (\n <span className=\"form-field__label-mandatory\"> *</span>\n )}\n </label>\n </div>\n )}\n <div className={wrapperClassNames}>\n <div className=\"form-field__icons\">\n <Arrow className={iconClassNames} onClick={toggleSelect} />\n </div>\n <div className=\"form-field-combobox__select form-field__control\" ref={selectRef}>\n <div className=\"form-field-combobox__select-header\" onClick={toggleSelect}>\n <span className={selectValueClassNames}>{selectValue.id}</span>\n {selectValue.id.length === 0 && selectPlaceholder && (\n <div className=\"form-field-combobox__placeholder\">\n <label>{selectPlaceholder}</label>\n </div>\n )}\n </div>\n {showSelectDropdown && (\n <PopUpDialog\n headerIsHidden\n customPosition={{\n element: selectRef,\n position: 'bottom-right'\n }}\n className=\"form-field-combobox__dropdown form-field-combobox__dropdown-select\"\n >\n <ul className=\"form-field-combobox__dropdown-list\" ref={suggestionListRef}>\n {selectOptions.map(option => {\n if (!option.hidden) {\n const selectOptionClassNames = classnames(\n 'form-field-combobox__dropdown-list-option',\n option.className\n )\n\n return (\n <li\n className={selectOptionClassNames}\n key={option.id}\n onClick={() => handleSelectOptionClick(option)}\n >\n {option.label}\n </li>\n )\n }\n })}\n </ul>\n </PopUpDialog>\n )}\n </div>\n <input\n className={inputClassNames}\n data-testid={name ? `${name}-form-combobox-input` : 'form-combobox-input'}\n id={input.name}\n onChange={handleInputChange}\n onFocus={inputOnFocus}\n placeholder={inputPlaceholder}\n ref={inputRef}\n required={required}\n type=\"text\"\n value={inputValue}\n />\n {showSuggestionList && (dropdownList.length > 0 || searchIsFocused) && (\n <PopUpDialog\n headerIsHidden\n customPosition={{\n element: selectRef,\n position: 'bottom-right'\n }}\n className=\"form-field-combobox__dropdown form-field-combobox__dropdown-suggestions\"\n style={{\n ...dropdownStyle\n }}\n >\n <div ref={suggestionListRef}>\n {!hideSearchInput && (\n <div className=\"form-field-combobox__search-wrapper\">\n <input\n data-testid={name ? `${name}-form-combobox-search` : 'form-combobox-search'}\n className=\"form-field-combobox__search form-field__control\"\n onChange={suggestionListSearchChange}\n onFocus={() => setSearchIsFocused(true)}\n placeholder=\"Type to search\"\n type=\"text\"\n />\n <SearchIcon />\n </div>\n )}\n <ul className=\"form-field-combobox__dropdown-list\">\n {searchIsFocused && dropdownList.length === 0 ? (\n <li className=\"form-field-combobox__dropdown-list-option\" key=\"no data\">\n No data\n </li>\n ) : (\n dropdownList.map(value => (\n <li\n className=\"form-field-combobox__dropdown-list-option\"\n key={value.id}\n onClick={() => handleSuggestionListOptionClick(value)}\n >\n {value.label}\n </li>\n ))\n )}\n </ul>\n </div>\n </PopUpDialog>\n )}\n <div className=\"form-field__icons\">\n {isInvalid && !Array.isArray(meta.error) && (\n <Tooltip\n className=\"form-field__warning\"\n template={<TextTooltipTemplate text={meta.error?.label ?? invalidText} warning />}\n >\n <ExclamationMarkIcon />\n </Tooltip>\n )}\n {isInvalid && Array.isArray(meta.error) && (\n <button className=\"form-field__warning\" onClick={warningIconClick}>\n <WarningIcon />\n </button>\n )}\n </div>\n {!isEmpty(validationRules) && (\n <OptionsMenu show={showValidationRules} ref={{ refInputContainer: comboboxRef }}>\n {getValidationRules()}\n </OptionsMenu>\n )}\n </div>\n </div>\n )}\n </Field>\n )\n}\n\nFormCombobox.propTypes = {\n comboboxClassName: PropTypes.string,\n density: DENSITY,\n disabled: PropTypes.bool,\n hideSearchInput: PropTypes.bool,\n inputDefaultValue: PropTypes.string,\n inputPlaceholder: PropTypes.string,\n invalidText: PropTypes.string,\n label: PropTypes.string,\n maxSuggestedMatches: PropTypes.number,\n name: PropTypes.string.isRequired,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n required: PropTypes.bool,\n rules: PropTypes.array,\n selectDefaultValue: PropTypes.shape({}),\n selectOptions: COMBOBOX_SELECT_OPTIONS.isRequired,\n selectPlaceholder: PropTypes.string,\n suggestionList: COMBOBOX_SUGGESTION_LIST,\n validator: PropTypes.func,\n withoutBorder: PropTypes.bool\n}\n\nexport default FormCombobox\n"],"names":["FormCombobox","comboboxClassName","density","disabled","hideSearchInput","inputDefaultValue","inputPlaceholder","invalidText","label","maxSuggestedMatches","name","onBlur","onChange","onFocus","required","rules","selectDefaultValue","selectOptions","selectPlaceholder","suggestionList","validator","withoutBorder","input","meta","useField","inputValue","setInputValue","useState","selectValue","setSelectValue","dropdownStyle","setDropdownStyle","showSelectDropdown","setShowSelectDropdown","showSuggestionList","setShowSuggestionList","dropdownList","setDropdownList","searchIsFocused","setSearchIsFocused","isInvalid","setIsInvalid","validationRules","setValidationRules","showValidationRules","setShowValidationRules","comboboxRef","useRef","selectRef","inputRef","suggestionListRef","useDetectOutsideClick","labelClassNames","classnames","inputClassNames","useEffect","prevState","rule","err","handleOutsideClick","useCallback","event","handleScroll","getValidationRules","isValid","ValidationTemplate","handleInputChange","target","handleSelectOptionClick","selectedOption","handleSuggestionListOptionClick","option","inputValueItems","valueIndex","formattedValue","inputOnFocus","suggestionListSearchChange","toggleSelect","validateField","value","allValues","valueToValidate","validationError","isEmpty","newRules","isValidField","checkPatternsValidity","invalidRules","warningIconClick","state","comboboxClassNames","iconClassNames","selectValueClassNames","wrapperClassNames","jsx","Field","jsxs","Arrow","PopUpDialog","selectOptionClassNames","SearchIcon","Tooltip","TextTooltipTemplate","ExclamationMarkIcon","WarningIcon","OptionsMenu","PropTypes","DENSITY","COMBOBOX_SELECT_OPTIONS","COMBOBOX_SUGGESTION_LIST"],"mappings":"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"}
1
+ {"version":3,"file":"FormCombobox.mjs","sources":["../../../src/lib/components/FormCombobox/FormCombobox.jsx"],"sourcesContent":["/*\nCopyright 2022 Iguazio Systems Ltd.\nLicensed under the Apache License, Version 2.0 (the \"License\") with\nan addition restriction as set forth herein. You may not use this\nfile except in compliance with the License. You may obtain a copy of\nthe License at http://www.apache.org/licenses/LICENSE-2.0.\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied. See the License for the specific language governing\npermissions and limitations under the License.\nIn addition, you may not use the software for any purposes that are\nillegal under applicable law, and the grant of the foregoing license\nunder the Apache 2.0 license is conditioned upon your compliance with\nsuch restriction.\n*/\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { Field, useField } from 'react-final-form'\nimport { isEmpty } from 'lodash'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\n\nimport OptionsMenu from '../../elements/OptionsMenu/OptionsMenu'\nimport ValidationTemplate from '../../elements/ValidationTemplate/ValidationTemplate'\nimport PopUpDialog from '../PopUpDialog/PopUpDialog'\nimport TextTooltipTemplate from '../TooltipTemplate/TextTooltipTemplate'\nimport Tooltip from '../Tooltip/Tooltip'\n\nimport { checkPatternsValidity } from '../../utils/validation.util'\nimport { useDetectOutsideClick } from '../../hooks'\nimport { COMBOBOX_SELECT_OPTIONS, COMBOBOX_SUGGESTION_LIST, DENSITY } from '../../types'\n\nimport Arrow from '../../images/arrow.svg?react'\nimport SearchIcon from '../../images/search.svg?react'\nimport WarningIcon from '../../images/warning.svg?react'\nimport ExclamationMarkIcon from '../../images/exclamation-mark.svg?react'\n\nimport './formCombobox.scss'\n\nconst FormCombobox = ({\n comboboxClassName = '',\n density = 'normal',\n disabled = false,\n hideSearchInput = false,\n inputDefaultValue = '',\n inputPlaceholder = '',\n invalidText = 'Invalid',\n label = '',\n maxSuggestedMatches = 1,\n name,\n onBlur = null,\n onChange = null,\n onFocus = null,\n required = false,\n rules = [],\n selectDefaultValue = {\n label: '',\n id: '',\n className: ''\n },\n selectOptions,\n selectPlaceholder = '',\n suggestionList = [],\n validator = null,\n withoutBorder = false\n}) => {\n const { input, meta } = useField(name)\n const [inputValue, setInputValue] = useState(inputDefaultValue)\n const [selectValue, setSelectValue] = useState(selectDefaultValue)\n const [dropdownStyle, setDropdownStyle] = useState({\n left: '0px'\n })\n const [showSelectDropdown, setShowSelectDropdown] = useState(false)\n const [showSuggestionList, setShowSuggestionList] = useState(false)\n const [dropdownList, setDropdownList] = useState(suggestionList)\n const [searchIsFocused, setSearchIsFocused] = useState(false)\n const [isInvalid, setIsInvalid] = useState(false)\n const [validationRules, setValidationRules] = useState(rules)\n const [showValidationRules, setShowValidationRules] = useState(false)\n const comboboxRef = useRef()\n const selectRef = useRef()\n const inputRef = useRef()\n const suggestionListRef = useRef()\n useDetectOutsideClick(comboboxRef, () => setShowValidationRules(false))\n\n const labelClassNames = classnames('form-field__label', disabled && 'form-field__label-disabled')\n const inputClassNames = classnames(\n 'form-field-combobox__input',\n selectValue.id.length === 0 && 'form-field-combobox__input_hidden'\n )\n\n useEffect(() => {\n setValidationRules(prevState =>\n prevState.map(rule => ({\n ...rule,\n isValid:\n !meta.error || !Array.isArray(meta.error)\n ? true\n : !meta.error.some(err => err.name === rule.name)\n }))\n )\n }, [meta.error])\n\n useEffect(() => {\n if (!searchIsFocused) {\n if (JSON.stringify(dropdownList) !== JSON.stringify(suggestionList)) {\n setDropdownList(suggestionList)\n }\n }\n }, [dropdownList, suggestionList, searchIsFocused])\n\n useEffect(() => {\n setIsInvalid(\n meta.invalid && (meta.validating || meta.modified || (meta.submitFailed && meta.touched))\n )\n }, [meta.invalid, meta.modified, meta.submitFailed, meta.touched, meta.validating])\n\n const handleOutsideClick = useCallback(\n event => {\n if (\n comboboxRef.current &&\n !comboboxRef.current.contains(event.target) &&\n suggestionListRef.current &&\n !suggestionListRef.current.contains(event.target)\n ) {\n setSearchIsFocused(false)\n setShowSelectDropdown(false)\n setShowSuggestionList(false)\n input.onBlur(new Event('blur'))\n onBlur && onBlur(input.value)\n }\n },\n [input, onBlur]\n )\n\n const handleScroll = event => {\n if (comboboxRef.current && comboboxRef.current.contains(event.target)) return\n\n if (\n !event.target.closest('.pop-up-dialog') &&\n !event.target.classList.contains('form-field-combobox')\n ) {\n setShowValidationRules(false)\n setShowSelectDropdown(false)\n setShowSuggestionList(false)\n inputRef.current.blur()\n }\n }\n\n useEffect(() => {\n window.addEventListener('click', handleOutsideClick)\n\n return () => {\n window.removeEventListener('click', handleOutsideClick)\n }\n }, [handleOutsideClick])\n\n useEffect(() => {\n if (showValidationRules || showSelectDropdown || showSuggestionList) {\n window.addEventListener('scroll', handleScroll, true)\n }\n return () => {\n window.removeEventListener('scroll', handleScroll, true)\n }\n }, [showSelectDropdown, showSuggestionList, showValidationRules])\n\n const getValidationRules = () => {\n return validationRules.map(({ isValid = false, label, name }) => {\n return <ValidationTemplate valid={isValid} validationMessage={label} key={name} />\n })\n }\n\n const handleInputChange = event => {\n const target = event.target\n\n setDropdownStyle({\n left: `${target.selectionStart < 30 ? target.selectionStart : 30}ch`\n })\n\n if (searchIsFocused) {\n setSearchIsFocused(false)\n }\n\n setInputValue(target.value)\n input.onChange(`${selectValue.id}${target.value}`)\n onChange && onChange(selectValue.id, target.value)\n\n if (dropdownList.length > 0) {\n setShowSuggestionList(true)\n }\n }\n\n const handleSelectOptionClick = selectedOption => {\n if (selectedOption.id !== selectValue.id) {\n setSelectValue(selectedOption)\n input.onChange(selectedOption.id)\n setInputValue('')\n onChange && onChange(selectedOption.id)\n setShowSelectDropdown(false)\n inputRef.current.disabled = false\n inputRef.current.focus()\n } else {\n setShowSelectDropdown(false)\n inputRef.current.disabled = false\n inputRef.current.focus()\n }\n }\n\n const handleSuggestionListOptionClick = option => {\n const inputValueItems = inputValue.split('/')\n const valueIndex = inputValueItems.length - 1\n let formattedValue = option.customDelimiter\n ? inputValueItems[valueIndex].replace(new RegExp(`${option.customDelimiter}.*`), '') +\n option.id\n : option.id\n\n if (inputValueItems.length <= maxSuggestedMatches - 1) formattedValue += '/'\n\n inputValueItems[valueIndex] = formattedValue\n\n if (searchIsFocused) {\n setSearchIsFocused(false)\n }\n\n if (inputValueItems.join('/') !== inputValue) {\n setInputValue(inputValueItems.join('/'))\n input.onChange(`${selectValue.id}${inputValueItems.join('/')}`)\n onChange && onChange(selectValue.id, inputValueItems.join('/'))\n }\n\n setShowSuggestionList(false)\n inputRef.current.focus()\n setDropdownStyle({\n left: `${inputRef.current.selectionStart < 30 ? inputRef.current.selectionStart : 30}ch`\n })\n }\n\n const inputOnFocus = () => {\n onFocus && onFocus()\n input.onFocus(new Event('focus'))\n\n if (showSelectDropdown) {\n setShowSelectDropdown(false)\n }\n\n setShowSuggestionList(true)\n }\n\n const suggestionListSearchChange = event => {\n event.persist()\n setDropdownList(() =>\n suggestionList.filter(option => {\n return option.id.startsWith(event.target.value)\n })\n )\n }\n\n const toggleSelect = useCallback(() => {\n if (showSelectDropdown) {\n setShowSelectDropdown(false)\n input.onBlur(new Event('blur'))\n onBlur && onBlur(input.value)\n } else {\n setShowSuggestionList(false)\n setShowValidationRules(false)\n setDropdownStyle({\n left: '0px'\n })\n setShowSelectDropdown(true)\n input.onFocus(new Event('focus'))\n onFocus && onFocus(input.value)\n }\n }, [input, onBlur, onFocus, showSelectDropdown])\n\n const validateField = (value = '', allValues) => {\n const valueToValidate = value.startsWith(selectValue.id)\n ? value.substring(selectValue.id.length)\n : (value ?? '')\n let validationError = null\n\n if (!isEmpty(validationRules)) {\n const [newRules, isValidField] = checkPatternsValidity(rules, valueToValidate)\n const invalidRules = newRules.filter(rule => !rule.isValid)\n\n if (!isValidField) {\n validationError = invalidRules.map(rule => ({ name: rule.name, label: rule.label }))\n }\n }\n\n if (isEmpty(validationError)) {\n if (valueToValidate.startsWith(' ')) {\n validationError = { name: 'empty', label: invalidText }\n } else if (required && valueToValidate.trim().length === 0) {\n validationError = { name: 'required', label: 'This field is required' }\n }\n }\n\n if (!validationError && validator) {\n validationError = validator(value, allValues)\n }\n\n return validationError\n }\n\n const warningIconClick = () => {\n setShowValidationRules(state => !state)\n setShowSelectDropdown(false)\n }\n\n const comboboxClassNames = classnames(\n comboboxClassName,\n 'form-field-combobox',\n 'form-field',\n isInvalid && 'form-field-combobox_invalid'\n )\n const iconClassNames = classnames(\n showSelectDropdown && 'form-field-combobox__icon_open',\n 'form-field-combobox__icon'\n )\n const selectValueClassNames = classnames(selectValue.className)\n\n const wrapperClassNames = classnames(\n 'form-field__wrapper',\n `form-field__wrapper-${density}`,\n disabled && 'form-field__wrapper-disabled',\n isInvalid && 'form-field__wrapper-invalid',\n withoutBorder && 'without-border'\n )\n\n return (\n <Field name={name} validate={validateField}>\n {({ input, meta }) => (\n <div\n className={comboboxClassNames}\n ref={comboboxRef}\n data-testid={name ? `${name}-form-combobox` : 'form-combobox'}\n >\n {label && (\n <div className={labelClassNames}>\n <label data-testid=\"label\" htmlFor={input.name}>\n {label}\n {(required || validationRules.find(rule => rule.name === 'required')) && (\n <span className=\"form-field__label-mandatory\"> *</span>\n )}\n </label>\n </div>\n )}\n <div className={wrapperClassNames}>\n <div className=\"form-field__icons\">\n <Arrow className={iconClassNames} onClick={toggleSelect} />\n </div>\n <div className=\"form-field-combobox__select form-field__control\" ref={selectRef}>\n <div className=\"form-field-combobox__select-header\" onClick={toggleSelect}>\n <span className={selectValueClassNames}>{selectValue.id}</span>\n {selectValue.id.length === 0 && selectPlaceholder && (\n <div className=\"form-field-combobox__placeholder\">\n <label>{selectPlaceholder}</label>\n </div>\n )}\n </div>\n {showSelectDropdown && (\n <PopUpDialog\n headerIsHidden\n customPosition={{\n element: selectRef,\n position: 'bottom-right'\n }}\n className=\"form-field-combobox__dropdown form-field-combobox__dropdown-select\"\n >\n <ul className=\"form-field-combobox__dropdown-list\" ref={suggestionListRef}>\n {selectOptions.map(option => {\n if (!option.hidden) {\n const selectOptionClassNames = classnames(\n 'form-field-combobox__dropdown-list-option',\n option.className\n )\n\n return (\n <li\n className={selectOptionClassNames}\n key={option.id}\n onClick={() => handleSelectOptionClick(option)}\n >\n {option.label}\n </li>\n )\n }\n })}\n </ul>\n </PopUpDialog>\n )}\n </div>\n <input\n className={inputClassNames}\n data-testid={name ? `${name}-form-combobox-input` : 'form-combobox-input'}\n id={input.name}\n onChange={handleInputChange}\n onFocus={inputOnFocus}\n placeholder={inputPlaceholder}\n ref={inputRef}\n required={required}\n type=\"text\"\n value={inputValue}\n />\n {showSuggestionList && (dropdownList.length > 0 || searchIsFocused) && (\n <PopUpDialog\n headerIsHidden\n customPosition={{\n element: selectRef,\n position: 'bottom-right'\n }}\n className=\"form-field-combobox__dropdown form-field-combobox__dropdown-suggestions\"\n style={{\n ...dropdownStyle\n }}\n >\n <div ref={suggestionListRef}>\n {!hideSearchInput && (\n <div className=\"form-field-combobox__search-wrapper\">\n <input\n data-testid={name ? `${name}-form-combobox-search` : 'form-combobox-search'}\n className=\"form-field-combobox__search form-field__control\"\n onChange={suggestionListSearchChange}\n onFocus={() => setSearchIsFocused(true)}\n placeholder=\"Type to search\"\n type=\"text\"\n />\n <SearchIcon />\n </div>\n )}\n <ul className=\"form-field-combobox__dropdown-list\">\n {searchIsFocused && dropdownList.length === 0 ? (\n <li className=\"form-field-combobox__dropdown-list-option\" key=\"no data\">\n No data\n </li>\n ) : (\n dropdownList.map(value => (\n <li\n className=\"form-field-combobox__dropdown-list-option\"\n key={value.id}\n onClick={() => handleSuggestionListOptionClick(value)}\n >\n {value.label}\n </li>\n ))\n )}\n </ul>\n </div>\n </PopUpDialog>\n )}\n <div className=\"form-field__icons\">\n {isInvalid && !Array.isArray(meta.error) && (\n <Tooltip\n className=\"form-field__warning\"\n template={<TextTooltipTemplate text={meta.error?.label ?? invalidText} warning />}\n >\n <ExclamationMarkIcon />\n </Tooltip>\n )}\n {isInvalid && Array.isArray(meta.error) && (\n <button className=\"form-field__warning\" onClick={warningIconClick}>\n <WarningIcon />\n </button>\n )}\n </div>\n {!isEmpty(validationRules) && (\n <OptionsMenu show={showValidationRules} ref={{ refInputContainer: comboboxRef }}>\n {getValidationRules()}\n </OptionsMenu>\n )}\n </div>\n </div>\n )}\n </Field>\n )\n}\n\nFormCombobox.propTypes = {\n comboboxClassName: PropTypes.string,\n density: DENSITY,\n disabled: PropTypes.bool,\n hideSearchInput: PropTypes.bool,\n inputDefaultValue: PropTypes.string,\n inputPlaceholder: PropTypes.string,\n invalidText: PropTypes.string,\n label: PropTypes.string,\n maxSuggestedMatches: PropTypes.number,\n name: PropTypes.string.isRequired,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n required: PropTypes.bool,\n rules: PropTypes.array,\n selectDefaultValue: PropTypes.shape({}),\n selectOptions: COMBOBOX_SELECT_OPTIONS.isRequired,\n selectPlaceholder: PropTypes.string,\n suggestionList: COMBOBOX_SUGGESTION_LIST,\n validator: PropTypes.func,\n withoutBorder: PropTypes.bool\n}\n\nexport default FormCombobox\n"],"names":["FormCombobox","comboboxClassName","density","disabled","hideSearchInput","inputDefaultValue","inputPlaceholder","invalidText","label","maxSuggestedMatches","name","onBlur","onChange","onFocus","required","rules","selectDefaultValue","selectOptions","selectPlaceholder","suggestionList","validator","withoutBorder","input","meta","useField","inputValue","setInputValue","useState","selectValue","setSelectValue","dropdownStyle","setDropdownStyle","showSelectDropdown","setShowSelectDropdown","showSuggestionList","setShowSuggestionList","dropdownList","setDropdownList","searchIsFocused","setSearchIsFocused","isInvalid","setIsInvalid","validationRules","setValidationRules","showValidationRules","setShowValidationRules","comboboxRef","useRef","selectRef","inputRef","suggestionListRef","useDetectOutsideClick","labelClassNames","classnames","inputClassNames","useEffect","prevState","rule","err","handleOutsideClick","useCallback","event","handleScroll","getValidationRules","isValid","ValidationTemplate","handleInputChange","target","handleSelectOptionClick","selectedOption","handleSuggestionListOptionClick","option","inputValueItems","valueIndex","formattedValue","inputOnFocus","suggestionListSearchChange","toggleSelect","validateField","value","allValues","valueToValidate","validationError","isEmpty","newRules","isValidField","checkPatternsValidity","invalidRules","warningIconClick","state","comboboxClassNames","iconClassNames","selectValueClassNames","wrapperClassNames","jsx","Field","jsxs","Arrow","PopUpDialog","selectOptionClassNames","SearchIcon","Tooltip","TextTooltipTemplate","ExclamationMarkIcon","WarningIcon","OptionsMenu","PropTypes","DENSITY","COMBOBOX_SELECT_OPTIONS","COMBOBOX_SUGGESTION_LIST"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.4341 2.1644C11.5796 2.01443 11.7787 1.92836 11.9877 1.9251C12.0932 1.92345 12.198 1.943 12.2959 1.9826C12.3937 2.0222 12.4826 2.08104 12.5573 2.15563C12.632 2.23022 12.6909 2.31904 12.7307 2.41683C12.7703 2.51446 12.79 2.61904 12.7886 2.7244M11.4341 2.1644L12.7136 3.36243H12.7886M11.4341 2.1644C11.2886 2.31424 11.2086 2.51563 11.2114 2.7244V3.36243H2.72424L11.4341 2.1644ZM12.7886 2.7244C12.7886 2.72458 12.7886 2.72476 12.7886 2.72494L12.7136 2.72387H12.7886V2.7244ZM12.7886 2.7244V3.36243M12.7886 3.36243V3.43743L21.2763 4.86455C21.3708 4.86588 21.4647 4.84842 21.5525 4.81316C21.6402 4.7779 21.7201 4.72555 21.7874 4.65916C21.8547 4.59276 21.9082 4.51365 21.9447 4.42641C21.9812 4.33917 22 4.24555 22 4.15099C22 4.05642 21.9812 3.9628 21.9447 3.87556C21.9082 3.78832 21.8547 3.70921 21.7874 3.64282C21.7201 3.57643 21.6402 3.52408 21.5525 3.48882C21.4647 3.45356 21.3708 3.43609 21.2763 3.43743V3.36243H21.2758H12.7886ZM14.3912 16.1972L14.3901 16.1972C14.3447 16.1964 14.2994 16.1995 14.2546 16.2065H9.74632C9.69301 16.1982 9.63899 16.1955 9.5851 16.1982L9.58463 16.1983C9.55886 16.1998 9.53319 16.2025 9.50769 16.2065H5.57796C4.95424 16.2065 4.4637 15.716 4.4637 15.0922V4.93955H11.877C11.9576 4.95213 12.0396 4.95213 12.1202 4.93955H19.5363V15.0922C19.5363 15.716 19.0458 16.2065 18.422 16.2065H14.4886C14.4564 16.2014 14.4238 16.1983 14.3912 16.1972ZM16.9788 7.16161L16.9788 7.16161C16.7742 7.16757 16.5799 7.25287 16.437 7.39947C16.4369 7.39958 16.4368 7.3997 16.4367 7.39982L11.7621 12.0743L9.94116 10.2533L9.94115 10.2533C9.79326 10.1055 9.59272 10.0225 9.38362 10.0225C9.17451 10.0225 8.97397 10.1055 8.82608 10.2533L8.82607 10.2533L6.44807 12.6313C6.37265 12.7039 6.31243 12.7907 6.27091 12.8868C6.22929 12.9831 6.2073 13.0867 6.20623 13.1917C6.20517 13.2966 6.22504 13.4006 6.2647 13.4978C6.30435 13.5949 6.36299 13.6831 6.43718 13.7573C6.51136 13.8315 6.5996 13.8901 6.69673 13.9298C6.79387 13.9694 6.89793 13.9893 7.00284 13.9883C7.10775 13.9872 7.21139 13.9652 7.30769 13.9236C7.40376 13.8821 7.49061 13.8218 7.56316 13.7464L9.38362 11.926L11.2046 13.747L11.2046 13.747C11.3525 13.8948 11.553 13.9778 11.7621 13.9778C11.9712 13.9778 12.1718 13.8948 12.3197 13.747L12.3197 13.747L17.5518 8.51488C17.5519 8.51476 17.552 8.51465 17.5521 8.51453C17.6657 8.40379 17.7432 8.26136 17.7746 8.10586C17.806 7.9502 17.7897 7.78868 17.7278 7.64245C17.6658 7.49622 17.5612 7.37208 17.4276 7.28628C17.294 7.20049 17.1376 7.15703 16.9788 7.16161ZM21.1134 4.93955H21.2758L2.72372 3.43743C2.62917 3.43609 2.53529 3.45356 2.44754 3.48882C2.3598 3.52408 2.27994 3.57643 2.2126 3.64282C2.14526 3.70921 2.09179 3.78832 2.05529 3.87556C2.01879 3.9628 2 4.05642 2 4.15099C2 4.24555 2.01879 4.33917 2.05529 4.42641C2.09179 4.51365 2.14526 4.59276 2.2126 4.65916C2.27994 4.72555 2.3598 4.7779 2.44754 4.81316C2.53529 4.84842 2.62917 4.86588 2.72372 4.86455V4.93955H2.72423H2.88658V15.0922C2.88658 16.5702 4.10001 17.7836 5.57796 17.7836H8.34614L6.77619 20.9227C6.77605 20.9229 6.77592 20.9232 6.77578 20.9234C6.72688 21.0162 6.69694 21.1177 6.68774 21.2221C6.6785 21.3268 6.6903 21.4323 6.72243 21.5324C6.75456 21.6325 6.80637 21.7252 6.87483 21.8049C6.94328 21.8847 7.027 21.95 7.12104 21.997C7.21509 22.0439 7.31758 22.0716 7.42248 22.0784C7.52738 22.0851 7.63258 22.0709 7.73189 22.0364C7.8312 22.002 7.92262 21.948 8.00076 21.8777C8.07869 21.8076 8.14185 21.7226 8.18657 21.6278C8.1867 21.6276 8.18683 21.6273 8.18696 21.627L10.1082 17.7836H13.8918L15.813 21.627C15.8132 21.6273 15.8133 21.6276 15.8134 21.6278C15.8581 21.7226 15.9213 21.8076 15.9992 21.8777C16.0774 21.948 16.1688 22.002 16.2681 22.0364C16.3674 22.0709 16.4726 22.0851 16.5775 22.0784C16.6824 22.0716 16.7849 22.0439 16.879 21.997C16.973 21.95 17.0567 21.8847 17.1252 21.8049C17.1936 21.7252 17.2454 21.6325 17.2776 21.5324C17.3097 21.4323 17.3215 21.3268 17.3123 21.2221C17.3031 21.1177 17.2731 21.0162 17.2242 20.9234C17.2241 20.9232 17.224 20.9229 17.2238 20.9227L15.6539 17.7836H18.422C19.9 17.7836 21.1134 16.5702 21.1134 15.0922V4.93955Z" fill="#7F7989" stroke="#7F7989" stroke-width="0.15"/>
3
+ </svg>