@rolster/react-components 18.15.22 → 18.15.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/cjs/index.js +105 -93
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/es/index.js +105 -93
  4. package/dist/es/index.js.map +1 -1
  5. package/dist/esm/components/atoms/Input/Input.js +1 -1
  6. package/dist/esm/components/organisms/Datatable/Datatable.d.ts +2 -2
  7. package/dist/esm/components/organisms/Datatable/Datatable.js +1 -1
  8. package/dist/esm/components/organisms/Datatable/Datatable.js.map +1 -1
  9. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocomplete.d.ts +14 -3
  10. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocomplete.js +20 -17
  11. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocomplete.js.map +1 -1
  12. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocompleteController.d.ts +38 -0
  13. package/dist/esm/components/organisms/FieldAutocomplete/{FieldAutocompleteHook.js → FieldAutocompleteController.js} +27 -25
  14. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocompleteController.js.map +1 -0
  15. package/dist/esm/components/organisms/FieldDate/FieldDate.d.ts +3 -2
  16. package/dist/esm/components/organisms/FieldDate/FieldDate.js +3 -3
  17. package/dist/esm/components/organisms/FieldDate/FieldDate.js.map +1 -1
  18. package/dist/esm/components/organisms/FieldSelect/FieldSelect.d.ts +15 -4
  19. package/dist/esm/components/organisms/FieldSelect/FieldSelect.js +17 -14
  20. package/dist/esm/components/organisms/FieldSelect/FieldSelect.js.map +1 -1
  21. package/dist/esm/components/organisms/FieldSelect/FieldSelectController.d.ts +35 -0
  22. package/dist/esm/components/organisms/FieldSelect/FieldSelectController.js +71 -0
  23. package/dist/esm/components/organisms/FieldSelect/FieldSelectController.js.map +1 -0
  24. package/dist/esm/components/organisms/PickerDate/PickerDate.d.ts +1 -1
  25. package/dist/esm/components/organisms/PickerDate/PickerDate.js.map +1 -1
  26. package/dist/esm/controllers/DatatableController.d.ts +6 -0
  27. package/dist/esm/controllers/DatatableController.js +24 -0
  28. package/dist/esm/controllers/DatatableController.js.map +1 -0
  29. package/dist/esm/controllers/ListController.d.ts +35 -0
  30. package/dist/esm/{hooks/ListControlHook.js → controllers/ListController.js} +4 -3
  31. package/dist/esm/controllers/ListController.js.map +1 -0
  32. package/dist/esm/controllers/index.d.ts +2 -0
  33. package/dist/esm/controllers/index.js +3 -0
  34. package/dist/esm/controllers/index.js.map +1 -0
  35. package/dist/esm/index.d.ts +1 -1
  36. package/dist/esm/index.js +1 -1
  37. package/dist/esm/index.js.map +1 -1
  38. package/package.json +7 -7
  39. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocompleteHook.d.ts +0 -27
  40. package/dist/esm/components/organisms/FieldAutocomplete/FieldAutocompleteHook.js.map +0 -1
  41. package/dist/esm/components/organisms/FieldSelect/FieldSelectHook.d.ts +0 -24
  42. package/dist/esm/components/organisms/FieldSelect/FieldSelectHook.js +0 -70
  43. package/dist/esm/components/organisms/FieldSelect/FieldSelectHook.js.map +0 -1
  44. package/dist/esm/hooks/DatatableHook.d.ts +0 -6
  45. package/dist/esm/hooks/DatatableHook.js +0 -22
  46. package/dist/esm/hooks/DatatableHook.js.map +0 -1
  47. package/dist/esm/hooks/ListControlHook.d.ts +0 -24
  48. package/dist/esm/hooks/ListControlHook.js.map +0 -1
  49. package/dist/esm/hooks/index.d.ts +0 -2
  50. package/dist/esm/hooks/index.js +0 -3
  51. package/dist/esm/hooks/index.js.map +0 -1
package/dist/cjs/index.js CHANGED
@@ -1438,7 +1438,7 @@ function RlsInput({ children, disabled, formControl, onValue, placeholder, type,
1438
1438
  return (jsxRuntimeExports.jsxs("div", { className: renderClassStatus('rls-input', {
1439
1439
  focused: formControl?.focused ?? focused,
1440
1440
  disabled: formControl?.disabled || disabled
1441
- }), children: [jsxRuntimeExports.jsx("input", { ref: formControl?.elementRef, className: "rls-input__component", autoComplete: "off", type: type ?? 'text', placeholder: placeholder, disabled: formControl?.disabled ?? disabled, onFocus: onFocus, onBlur: onBlur, onChange: onChange, value: formControl?.value ?? value ?? '' }), jsxRuntimeExports.jsx("span", { className: "rls-input__value", children: children })] }));
1441
+ }), children: [jsxRuntimeExports.jsx("input", { ref: formControl?.elementRef, className: "rls-input__component", autoComplete: "off", type: type ?? 'text', placeholder: placeholder, disabled: formControl?.disabled || disabled, onFocus: onFocus, onBlur: onBlur, onChange: onChange, value: formControl?.value ?? value ?? '' }), jsxRuntimeExports.jsx("span", { className: "rls-input__value", children: children })] }));
1442
1442
  }
1443
1443
 
1444
1444
  function RlsInputMoney({ decimals, disabled, formControl, onValue, placeholder, symbol, value }) {
@@ -2039,31 +2039,34 @@ function RlsDatatableData({ children, className, control, overflow }) {
2039
2039
  function RlsDatatable({ children, datatable, footer, header, rlsTheme, summary }) {
2040
2040
  return (jsxRuntimeExports.jsxs("div", { className: renderClassStatus('rls-datatable', {
2041
2041
  scrolleable: datatable?.scrolleable
2042
- }), "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsxs("table", { children: [header && jsxRuntimeExports.jsx("thead", { className: "rls-datatable__thead", children: header }), jsxRuntimeExports.jsx("tbody", { ref: datatable?.bodyRef, className: "rls-datatable__tbody", children: children })] }), summary && jsxRuntimeExports.jsx("div", { className: "rls-datatable__tsummary", children: summary }), footer && jsxRuntimeExports.jsx("div", { className: "rls-datatable__tfooter", children: footer })] }));
2042
+ }), "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsxs("table", { children: [header && jsxRuntimeExports.jsx("thead", { className: "rls-datatable__thead", children: header }), jsxRuntimeExports.jsx("tbody", { ref: datatable?.tableRef, className: "rls-datatable__tbody", children: children })] }), summary && jsxRuntimeExports.jsx("div", { className: "rls-datatable__tsummary", children: summary }), footer && jsxRuntimeExports.jsx("div", { className: "rls-datatable__tfooter", children: footer })] }));
2043
2043
  }
2044
2044
 
2045
+ function createObserver(options) {
2046
+ const { setScrolleable, table } = options;
2047
+ const observer = new ResizeObserver(() => {
2048
+ const scrollHeight = table.scrollHeight || 0;
2049
+ const clientHeight = table.clientHeight || 0;
2050
+ setScrolleable(scrollHeight > clientHeight);
2051
+ });
2052
+ observer.observe(table);
2053
+ return observer;
2054
+ }
2045
2055
  function useDatatable() {
2046
2056
  const [scrolleable, setScrolleable] = require$$0.useState(false);
2047
- const bodyRef = require$$0.useRef(null);
2057
+ const tableRef = require$$0.useRef(null);
2048
2058
  require$$0.useEffect(() => {
2049
- let observer;
2050
- const body = bodyRef?.current;
2051
- if (body) {
2052
- observer = new ResizeObserver(() => {
2053
- const scrollHeight = body.scrollHeight || 0;
2054
- const clientHeight = body.clientHeight || 0;
2055
- setScrolleable(scrollHeight > clientHeight);
2056
- });
2057
- observer.observe(bodyRef?.current);
2058
- }
2059
+ const observer = tableRef?.current &&
2060
+ createObserver({ setScrolleable, table: tableRef?.current });
2059
2061
  return () => {
2060
2062
  observer?.disconnect();
2061
2063
  };
2062
2064
  }, []);
2063
- return { bodyRef, scrolleable };
2065
+ return { scrolleable, tableRef };
2064
2066
  }
2065
2067
 
2066
- function useListControl({ suggestions, formControl }) {
2068
+ function useListController(props) {
2069
+ const { suggestions, formControl, value } = props;
2067
2070
  const contentRef = require$$0.useRef(null);
2068
2071
  const listRef = require$$0.useRef(null);
2069
2072
  const inputRef = require$$0.useRef(null);
@@ -2116,7 +2119,7 @@ function useListControl({ suggestions, formControl }) {
2116
2119
  }
2117
2120
  if (!refreshProtected(collection)) {
2118
2121
  protectedValue.current = state;
2119
- setFormValue(undefined);
2122
+ setFormValue(value);
2120
2123
  refreshState({ value: '' });
2121
2124
  }
2122
2125
  }
@@ -2170,7 +2173,8 @@ function useListControl({ suggestions, formControl }) {
2170
2173
 
2171
2174
  const DURATION_ANIMATION$1 = 240;
2172
2175
  const MAX_ELEMENTS = 6;
2173
- function useFieldAutocomplete({ disabled, formControl, onSelect, onValue, suggestions }) {
2176
+ function useFieldAutocomplete(props) {
2177
+ const controller = useListController(props);
2174
2178
  const [pattern, setPattern] = require$$0.useState('');
2175
2179
  const [coincidences, setCoincidences] = require$$0.useState([]);
2176
2180
  const currentStore = require$$0.useRef({
@@ -2178,46 +2182,45 @@ function useFieldAutocomplete({ disabled, formControl, onSelect, onValue, sugges
2178
2182
  pattern: '',
2179
2183
  previous: null
2180
2184
  });
2181
- const listControl = useListControl({ suggestions, formControl });
2182
- const { inputRef, navigationElement, navigationInput, setFormValue, setState } = listControl;
2185
+ const disabled = props.formControl?.disabled || props.disabled;
2183
2186
  require$$0.useEffect(() => {
2184
2187
  refreshCoincidences(pattern, true);
2185
- }, [suggestions]);
2188
+ }, [props.suggestions]);
2186
2189
  require$$0.useEffect(() => {
2187
2190
  refreshCoincidences(pattern);
2188
2191
  }, [pattern]);
2189
2192
  function onClickControl() {
2190
2193
  if (!disabled) {
2191
- setState({ listIsVisible: true });
2194
+ controller.setState({ listIsVisible: true });
2192
2195
  setTimeout(() => {
2193
- inputRef?.current?.focus();
2196
+ controller.inputRef?.current?.focus();
2194
2197
  }, DURATION_ANIMATION$1);
2195
2198
  }
2196
2199
  }
2197
2200
  function onFocusInput() {
2198
- setState({ focused: true });
2201
+ controller.setState({ focused: true });
2199
2202
  }
2200
2203
  function onBlurInput() {
2201
- setState({ focused: false });
2204
+ controller.setState({ focused: false });
2202
2205
  }
2203
2206
  function onKeydownInput(event) {
2204
2207
  switch (event.code) {
2205
2208
  case 'Escape':
2206
2209
  case 'Tab':
2207
- setState({ listIsVisible: false });
2210
+ controller.setState({ listIsVisible: false });
2208
2211
  break;
2209
2212
  default:
2210
- navigationInput(event);
2213
+ controller.navigationInput(event);
2211
2214
  break;
2212
2215
  }
2213
2216
  }
2214
2217
  function onClickAction() {
2215
- setState({ listIsVisible: false, value: '' });
2216
- setFormValue(undefined);
2217
- onValue && onValue(undefined);
2218
+ controller.setState({ listIsVisible: false, value: '' });
2219
+ controller.setFormValue(props.value);
2220
+ props.onValue && props.onValue(props.value);
2218
2221
  }
2219
2222
  function onClickBackdrop() {
2220
- setState({ listIsVisible: false });
2223
+ controller.setState({ listIsVisible: false });
2221
2224
  }
2222
2225
  function onClickElement(element) {
2223
2226
  return () => {
@@ -2226,24 +2229,26 @@ function useFieldAutocomplete({ disabled, formControl, onSelect, onValue, sugges
2226
2229
  }
2227
2230
  function onKeydownElement(element) {
2228
2231
  return (event) => {
2229
- event.code === 'Enter' ? onChange(element) : navigationElement(event);
2232
+ event.code === 'Enter'
2233
+ ? onChange(element)
2234
+ : controller.navigationElement(event);
2230
2235
  };
2231
2236
  }
2232
2237
  function onChange({ description, value }) {
2233
- if (onSelect) {
2234
- setState({ listIsVisible: false });
2235
- onSelect(value);
2238
+ if (props.onSelect) {
2239
+ controller.setState({ listIsVisible: false });
2240
+ value && props.onSelect(value);
2236
2241
  }
2237
2242
  else {
2238
- setState({ listIsVisible: false, value: description });
2239
- setFormValue(value);
2243
+ controller.setState({ listIsVisible: false, value: description });
2244
+ controller.setFormValue(value);
2240
2245
  }
2241
- onValue && onValue(value);
2246
+ props.onValue && props.onValue(value);
2242
2247
  }
2243
2248
  function refreshCoincidences(pattern, reboot = false) {
2244
2249
  const { collection, store } = components.createAutocompleteStore({
2245
2250
  pattern,
2246
- suggestions,
2251
+ suggestions: props.suggestions,
2247
2252
  reboot,
2248
2253
  store: currentStore.current
2249
2254
  });
@@ -2252,7 +2257,7 @@ function useFieldAutocomplete({ disabled, formControl, onSelect, onValue, sugges
2252
2257
  }
2253
2258
  return {
2254
2259
  coincidences,
2255
- listControl,
2260
+ controller,
2256
2261
  onBlurInput,
2257
2262
  onClickAction,
2258
2263
  onClickBackdrop,
@@ -2267,22 +2272,25 @@ function useFieldAutocomplete({ disabled, formControl, onSelect, onValue, sugges
2267
2272
  }
2268
2273
 
2269
2274
  function RlsFieldAutocompleteTemplate(props) {
2270
- const fieldAutocomplete = useFieldAutocomplete(props);
2271
- const { render, children, disabled, formControl, hiddenIcon, msgErrorDisabled, onSearch, placeholder, rlsTheme, searching } = props;
2272
- return (jsxRuntimeExports.jsxs("div", { ref: fieldAutocomplete.listControl.contentRef, className: renderClassStatus('rls-field-box', {
2273
- disabled,
2274
- focused: fieldAutocomplete.listControl.focused,
2275
- error: formControl?.wrong,
2276
- selected: !!fieldAutocomplete.listControl.value
2277
- }, 'rls-field-list rls-field-autocomplete'), "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { className: "rls-field-list__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: fieldAutocomplete.listControl.value, onClick: fieldAutocomplete.onClickControl }), !hiddenIcon && fieldAutocomplete.listControl.value && (jsxRuntimeExports.jsx("button", { className: "rls-field-list__action", disabled: disabled, onClick: fieldAutocomplete.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: "trash-2" }) }))] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: renderClassStatus('rls-field-list__suggestions', {
2278
- visible: fieldAutocomplete.listControl.listIsVisible,
2279
- hide: !fieldAutocomplete.listControl.listIsVisible,
2280
- higher: fieldAutocomplete.listControl.higher
2281
- }), children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: fieldAutocomplete.listControl.listRef, className: "rls-field-list__ul", children: [jsxRuntimeExports.jsxs("div", { className: "rls-field-list__ul__search", children: [jsxRuntimeExports.jsx("input", { ref: fieldAutocomplete.listControl.inputRef, className: "rls-field-list__ul__control", type: "text", placeholder: reactI18n('listInputPlaceholder'), value: fieldAutocomplete.pattern, onChange: ({ target: { value } }) => {
2282
- fieldAutocomplete.setPattern(value);
2283
- }, disabled: disabled || searching, onFocus: fieldAutocomplete.onFocusInput, onBlur: fieldAutocomplete.onBlurInput, onKeyDown: fieldAutocomplete.onKeydownInput }), onSearch && (jsxRuntimeExports.jsx("button", { disabled: disabled || searching, onClick: () => {
2284
- onSearch(fieldAutocomplete.pattern);
2285
- }, children: jsxRuntimeExports.jsx(RlsIcon, { value: "search" }) }))] }), searching && jsxRuntimeExports.jsx(RlsProgressBar, { indeterminate: true }), fieldAutocomplete.coincidences.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: fieldAutocomplete.onClickElement(element), onKeyDown: fieldAutocomplete.onKeydownElement(element), children: render(element) }, index))), !fieldAutocomplete.coincidences.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold truncate", children: reactI18n('listEmptyTitle') }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: reactI18n('listEmptyDescription') })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: fieldAutocomplete.onClickBackdrop })] })] }));
2275
+ const autocomplete = useFieldAutocomplete(props);
2276
+ const { controller } = autocomplete;
2277
+ const { render, children, formControl, hiddenIcon, msgErrorDisabled, onSearch, placeholder, rlsTheme, searching } = props;
2278
+ const disabled = formControl?.disabled || props.disabled;
2279
+ const className = renderClassStatus('rls-field-box', {
2280
+ focused: controller.focused,
2281
+ disabled,
2282
+ error: formControl?.wrong,
2283
+ selected: !!controller.value
2284
+ }, 'rls-field-list rls-field-autocomplete');
2285
+ return (jsxRuntimeExports.jsxs("div", { ref: controller.contentRef, className: className, "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { className: "rls-field-list__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: controller.value, onClick: autocomplete.onClickControl }), !hiddenIcon && controller.value && (jsxRuntimeExports.jsx("button", { className: "rls-field-list__action", disabled: disabled, onClick: autocomplete.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: "trash-2" }) }))] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: renderClassStatus('rls-field-list__suggestions', {
2286
+ visible: controller.listIsVisible,
2287
+ higher: controller.higher,
2288
+ hide: !controller.listIsVisible
2289
+ }), children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: controller.listRef, className: "rls-field-list__ul", children: [jsxRuntimeExports.jsxs("div", { className: "rls-field-list__ul__search", children: [jsxRuntimeExports.jsx("input", { ref: controller.inputRef, className: "rls-field-list__ul__control", type: "text", placeholder: reactI18n('listInputPlaceholder'), value: autocomplete.pattern, onChange: ({ target: { value } }) => {
2290
+ autocomplete.setPattern(value);
2291
+ }, disabled: disabled || searching, onFocus: autocomplete.onFocusInput, onBlur: autocomplete.onBlurInput, onKeyDown: autocomplete.onKeydownInput }), onSearch && (jsxRuntimeExports.jsx("button", { disabled: disabled || searching, onClick: () => {
2292
+ onSearch(autocomplete.pattern);
2293
+ }, children: jsxRuntimeExports.jsx(RlsIcon, { value: "search" }) }))] }), searching && jsxRuntimeExports.jsx(RlsProgressBar, { indeterminate: true }), autocomplete.coincidences.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: autocomplete.onClickElement(element), onKeyDown: autocomplete.onKeydownElement(element), children: render(element) }, index))), !autocomplete.coincidences.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold truncate", children: reactI18n('listEmptyTitle') }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: reactI18n('listEmptyDescription') })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: autocomplete.onClickBackdrop })] })] }));
2286
2294
  }
2287
2295
  function RlsFieldAutocomplete(props) {
2288
2296
  return (jsxRuntimeExports.jsx(RlsFieldAutocompleteTemplate, { ...props, render: (element) => (jsxRuntimeExports.jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: jsxRuntimeExports.jsx("span", { children: element.title }) })) }));
@@ -2361,9 +2369,9 @@ function RlsPickerDate({ automatic, date, disabled, formControl, maxDate, minDat
2361
2369
  }
2362
2370
 
2363
2371
  const FORMAT_DATE = '{dd}/{mx}/{aa}';
2364
- function RlsFieldDate({ children, date, disabled, formControl, format, maxDate, minDate, msgErrorDisabled, onValue, placeholder, rlsTheme }) {
2372
+ function RlsFieldDate({ children, date, disabled, formControl, format, maxDate, minDate, msgErrorDisabled, onValue, placeholder, rlsTheme, value: defaultValue }) {
2365
2373
  const today = new Date(); // Initial current date in component
2366
- const [value, setValue] = require$$0.useState();
2374
+ const [value, setValue] = require$$0.useState(defaultValue);
2367
2375
  const [modalIsVisible, setModalIsVisible] = require$$0.useState(false);
2368
2376
  require$$0.useEffect(() => {
2369
2377
  const dateCheck = components.checkDateRange({
@@ -2383,7 +2391,7 @@ function RlsFieldDate({ children, date, disabled, formControl, format, maxDate,
2383
2391
  }
2384
2392
  function onClickAction() {
2385
2393
  if (value) {
2386
- formControl?.setValue(undefined);
2394
+ formControl?.setValue(defaultValue);
2387
2395
  formControl?.touch();
2388
2396
  onChange(undefined);
2389
2397
  }
@@ -2476,39 +2484,38 @@ function RlsFieldDateRange({ children, date: datePicker, disabled, formControl,
2476
2484
  } }) })] }));
2477
2485
  }
2478
2486
 
2479
- function useFieldSelect({ suggestions, formControl, onSelect, onValue }) {
2480
- const listControl = useListControl({ suggestions, formControl });
2481
- const { inputRef, listIsVisible, navigationElement, navigationInput, setFormValue, setState } = listControl;
2487
+ function useFieldSelect(props) {
2488
+ const controller = useListController(props);
2482
2489
  function onFocusInput() {
2483
- setState({ focused: true });
2490
+ controller.setState({ focused: true });
2484
2491
  }
2485
2492
  function onBlurInput() {
2486
- setState({ focused: false });
2493
+ controller.setState({ focused: false });
2487
2494
  }
2488
2495
  function onClickInput() {
2489
- setState({ listIsVisible: true });
2496
+ controller.setState({ listIsVisible: true });
2490
2497
  }
2491
2498
  function onKeydownInput(event) {
2492
2499
  switch (event.code) {
2493
2500
  case 'Space':
2494
2501
  case 'Enter':
2495
- setState({ listIsVisible: true });
2502
+ controller.setState({ listIsVisible: true });
2496
2503
  break;
2497
2504
  case 'Escape':
2498
2505
  case 'Tab':
2499
- setState({ listIsVisible: false });
2506
+ controller.setState({ listIsVisible: false });
2500
2507
  break;
2501
2508
  default:
2502
- navigationInput(event);
2509
+ controller.navigationInput(event);
2503
2510
  break;
2504
2511
  }
2505
2512
  }
2506
2513
  function onClickAction() {
2507
- setState({ listIsVisible: !listIsVisible });
2508
- !listIsVisible && inputRef?.current?.focus();
2514
+ controller.setState({ listIsVisible: !controller.listIsVisible });
2515
+ !controller.listIsVisible && controller.inputRef?.current?.focus();
2509
2516
  }
2510
2517
  function onClickBackdrop() {
2511
- setState({ listIsVisible: false });
2518
+ controller.setState({ listIsVisible: false });
2512
2519
  }
2513
2520
  function onClickElement(element) {
2514
2521
  return () => {
@@ -2517,23 +2524,25 @@ function useFieldSelect({ suggestions, formControl, onSelect, onValue }) {
2517
2524
  }
2518
2525
  function onKeydownElement(element) {
2519
2526
  return (event) => {
2520
- event.code === 'Enter' ? onChange(element) : navigationElement(event);
2527
+ event.code === 'Enter'
2528
+ ? onChange(element)
2529
+ : controller.navigationElement(event);
2521
2530
  };
2522
2531
  }
2523
2532
  function onChange({ description, value }) {
2524
- inputRef?.current?.focus();
2525
- if (onSelect) {
2526
- setState({ listIsVisible: false });
2527
- onSelect(value);
2533
+ controller.inputRef?.current?.focus();
2534
+ if (props.onSelect) {
2535
+ controller.setState({ listIsVisible: false });
2536
+ value && props.onSelect(value);
2528
2537
  }
2529
2538
  else {
2530
- setFormValue(value);
2531
- setState({ listIsVisible: false, value: description });
2539
+ controller.setFormValue(value);
2540
+ controller.setState({ listIsVisible: false, value: description });
2532
2541
  }
2533
- onValue && onValue(value);
2542
+ props.onValue && props.onValue(value);
2534
2543
  }
2535
2544
  return {
2536
- listControl,
2545
+ controller,
2537
2546
  onBlurInput,
2538
2547
  onClickAction,
2539
2548
  onClickBackdrop,
@@ -2546,19 +2555,22 @@ function useFieldSelect({ suggestions, formControl, onSelect, onValue }) {
2546
2555
  }
2547
2556
 
2548
2557
  function RlsFieldSelectTemplate(props) {
2549
- const fieldSelect = useFieldSelect(props);
2550
- const { render, suggestions, children, disabled, formControl, msgErrorDisabled, placeholder, rlsTheme } = props;
2551
- return (jsxRuntimeExports.jsxs("div", { ref: fieldSelect.listControl.contentRef, className: renderClassStatus('rls-field-box', {
2552
- focused: fieldSelect.listControl.focused,
2553
- error: formControl?.wrong,
2554
- disabled
2555
- }, 'rls-field-list rls-field-select'), "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { ref: fieldSelect.listControl.inputRef, className: "rls-field-list__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: fieldSelect.listControl.value, onFocus: fieldSelect.onFocusInput, onBlur: fieldSelect.onBlurInput, onClick: fieldSelect.onClickInput, onKeyDown: fieldSelect.onKeydownInput }), jsxRuntimeExports.jsx("button", { className: renderClassStatus('rls-field-list__action', {
2556
- visible: fieldSelect.listControl.listIsVisible
2557
- }), disabled: disabled, onClick: fieldSelect.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: "arrow-ios-down" }) })] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: renderClassStatus('rls-field-list__suggestions', {
2558
- visible: fieldSelect.listControl.listIsVisible,
2559
- hide: !fieldSelect.listControl.listIsVisible,
2560
- higher: fieldSelect.listControl.higher
2561
- }), children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: fieldSelect.listControl.listRef, className: "rls-field-list__ul", children: [suggestions.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: fieldSelect.onClickElement(element), onKeyDown: fieldSelect.onKeydownElement(element), children: render(element) }, index))), !suggestions.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold truncate", children: reactI18n('listEmptyTitle') }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: reactI18n('listEmptyDescription') })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: fieldSelect.onClickBackdrop })] })] }));
2558
+ const select = useFieldSelect(props);
2559
+ const { controller } = select;
2560
+ const { render, suggestions, children, formControl, msgErrorDisabled, placeholder, rlsTheme } = props;
2561
+ const disabled = formControl?.disabled || props.disabled;
2562
+ const className = renderClassStatus('rls-field-box', {
2563
+ focused: controller.focused,
2564
+ disabled,
2565
+ error: formControl?.wrong
2566
+ }, 'rls-field-list rls-field-select');
2567
+ return (jsxRuntimeExports.jsxs("div", { ref: controller.contentRef, className: className, "rls-theme": rlsTheme, children: [children && jsxRuntimeExports.jsx("label", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { ref: controller.inputRef, className: "rls-field-list__control", readOnly: true, disabled: disabled, placeholder: placeholder, value: controller.value, onFocus: select.onFocusInput, onBlur: select.onBlurInput, onClick: select.onClickInput, onKeyDown: select.onKeydownInput }), jsxRuntimeExports.jsx("button", { className: renderClassStatus('rls-field-list__action', {
2568
+ visible: controller.listIsVisible
2569
+ }), disabled: disabled, onClick: select.onClickAction, children: jsxRuntimeExports.jsx(RlsIcon, { value: "arrow-ios-down" }) })] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl })), jsxRuntimeExports.jsxs("div", { className: renderClassStatus('rls-field-list__suggestions', {
2570
+ visible: controller.listIsVisible,
2571
+ higher: controller.higher,
2572
+ hide: !controller.listIsVisible
2573
+ }), children: [jsxRuntimeExports.jsx("div", { className: "rls-field-list__suggestions__body", children: jsxRuntimeExports.jsxs("ul", { ref: controller.listRef, className: "rls-field-list__ul", children: [suggestions.map((element, index) => (jsxRuntimeExports.jsx("li", { className: "rls-field-list__element", tabIndex: -1, onClick: select.onClickElement(element), onKeyDown: select.onKeydownElement(element), children: render(element) }, index))), !suggestions.length && (jsxRuntimeExports.jsx("li", { className: "rls-field-list__empty", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-list__empty__description", children: [jsxRuntimeExports.jsx("label", { className: "rls-label-bold truncate", children: reactI18n('listEmptyTitle') }), jsxRuntimeExports.jsx("p", { className: "rls-caption-regular", children: reactI18n('listEmptyDescription') })] }) }))] }) }), jsxRuntimeExports.jsx("div", { className: "rls-field-list__backdrop", onClick: select.onClickBackdrop })] })] }));
2562
2574
  }
2563
2575
  function RlsFieldSelect(props) {
2564
2576
  return (jsxRuntimeExports.jsx(RlsFieldSelectTemplate, { ...props, render: (element) => (jsxRuntimeExports.jsx(RlsBallot, { subtitle: element.subtitle, img: element.img, initials: element.initials, children: jsxRuntimeExports.jsx("span", { children: element.title }) })) }));
@@ -2704,6 +2716,6 @@ exports.rangeFormatTemplate = rangeFormatTemplate;
2704
2716
  exports.renderClassStatus = renderClassStatus;
2705
2717
  exports.useConfirmationService = useConfirmationService;
2706
2718
  exports.useDatatable = useDatatable;
2707
- exports.useListControl = useListControl;
2719
+ exports.useListController = useListController;
2708
2720
  exports.useSnackbarService = useSnackbarService;
2709
2721
  //# sourceMappingURL=index.js.map