@inseefr/lunatic 3.12.1 → 3.12.3

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 (79) hide show
  1. package/components/Dropdown/Dropdown.js +1 -2
  2. package/components/Dropdown/Dropdown.js.map +1 -1
  3. package/components/Dropdown/Dropdown.spec.js +13 -5
  4. package/components/Dropdown/Dropdown.spec.js.map +1 -1
  5. package/components/Suggester/CustomSuggester.d.ts +6 -0
  6. package/components/Suggester/CustomSuggester.js +1 -1
  7. package/components/Suggester/CustomSuggester.js.map +1 -1
  8. package/components/shared/Combobox/Combobox.js +5 -6
  9. package/components/shared/Combobox/Combobox.js.map +1 -1
  10. package/components/shared/Combobox/ComboboxType.d.ts +1 -0
  11. package/components/shared/Combobox/Panel/ComboboxOption.d.ts +1 -0
  12. package/components/shared/Combobox/Panel/ComboboxOption.js +4 -4
  13. package/components/shared/Combobox/Panel/ComboboxOption.js.map +1 -1
  14. package/components/shared/Combobox/Panel/ComboboxOption.spec.js +18 -5
  15. package/components/shared/Combobox/Panel/ComboboxOption.spec.js.map +1 -1
  16. package/components/shared/Combobox/Panel/ComboboxPanel.d.ts +1 -1
  17. package/components/shared/Combobox/Panel/ComboboxPanel.js +2 -2
  18. package/components/shared/Combobox/Panel/ComboboxPanel.js.map +1 -1
  19. package/components/type.d.ts +6 -0
  20. package/esm/components/Dropdown/Dropdown.js +1 -2
  21. package/esm/components/Dropdown/Dropdown.js.map +1 -1
  22. package/esm/components/Dropdown/Dropdown.spec.js +14 -6
  23. package/esm/components/Dropdown/Dropdown.spec.js.map +1 -1
  24. package/esm/components/Suggester/CustomSuggester.d.ts +6 -0
  25. package/esm/components/Suggester/CustomSuggester.js +1 -1
  26. package/esm/components/Suggester/CustomSuggester.js.map +1 -1
  27. package/esm/components/shared/Combobox/Combobox.js +5 -6
  28. package/esm/components/shared/Combobox/Combobox.js.map +1 -1
  29. package/esm/components/shared/Combobox/ComboboxType.d.ts +1 -0
  30. package/esm/components/shared/Combobox/Panel/ComboboxOption.d.ts +1 -0
  31. package/esm/components/shared/Combobox/Panel/ComboboxOption.js +5 -5
  32. package/esm/components/shared/Combobox/Panel/ComboboxOption.js.map +1 -1
  33. package/esm/components/shared/Combobox/Panel/ComboboxOption.spec.js +18 -5
  34. package/esm/components/shared/Combobox/Panel/ComboboxOption.spec.js.map +1 -1
  35. package/esm/components/shared/Combobox/Panel/ComboboxPanel.d.ts +1 -1
  36. package/esm/components/shared/Combobox/Panel/ComboboxPanel.js +2 -2
  37. package/esm/components/shared/Combobox/Panel/ComboboxPanel.js.map +1 -1
  38. package/esm/components/type.d.ts +6 -0
  39. package/esm/utils/search/SearchMiniSearch.spec.js +16 -1
  40. package/esm/utils/search/SearchMiniSearch.spec.js.map +1 -1
  41. package/esm/utils/search/SearchMinisearch.js +26 -1
  42. package/esm/utils/search/SearchMinisearch.js.map +1 -1
  43. package/esm/utils/search/tokenizer.js +1 -14
  44. package/esm/utils/search/tokenizer.js.map +1 -1
  45. package/esm/utils/search/utils.d.ts +7 -0
  46. package/esm/utils/search/utils.js +15 -0
  47. package/esm/utils/search/utils.js.map +1 -0
  48. package/package.json +8 -8
  49. package/src/components/Dropdown/Dropdown.spec.tsx +22 -6
  50. package/src/components/Dropdown/Dropdown.tsx +1 -2
  51. package/src/components/Dropdown/__snapshots__/Dropdown.spec.tsx.snap +2 -2
  52. package/src/components/Suggester/CustomSuggester.tsx +7 -0
  53. package/src/components/shared/Combobox/Combobox.tsx +5 -4
  54. package/src/components/shared/Combobox/ComboboxType.ts +1 -0
  55. package/src/components/shared/Combobox/Panel/ComboboxOption.spec.tsx +27 -5
  56. package/src/components/shared/Combobox/Panel/ComboboxOption.tsx +10 -6
  57. package/src/components/shared/Combobox/Panel/ComboboxPanel.tsx +3 -1
  58. package/src/components/type.ts +6 -0
  59. package/src/utils/search/SearchMiniSearch.spec.ts +21 -1
  60. package/src/utils/search/SearchMinisearch.ts +34 -1
  61. package/src/utils/search/tokenizer.ts +1 -15
  62. package/src/utils/search/utils.ts +14 -0
  63. package/tsconfig.build.tsbuildinfo +1 -1
  64. package/utils/search/SearchMiniSearch.spec.js +15 -1
  65. package/utils/search/SearchMiniSearch.spec.js.map +1 -1
  66. package/utils/search/SearchMinisearch.js +26 -1
  67. package/utils/search/SearchMinisearch.js.map +1 -1
  68. package/utils/search/tokenizer.js +6 -19
  69. package/utils/search/tokenizer.js.map +1 -1
  70. package/utils/search/utils.d.ts +7 -0
  71. package/utils/search/utils.js +19 -0
  72. package/utils/search/utils.js.map +1 -0
  73. package/components/Dropdown/renderer/SimpleOptionRenderer.d.ts +0 -7
  74. package/components/Dropdown/renderer/SimpleOptionRenderer.js +0 -16
  75. package/components/Dropdown/renderer/SimpleOptionRenderer.js.map +0 -1
  76. package/esm/components/Dropdown/renderer/SimpleOptionRenderer.d.ts +0 -7
  77. package/esm/components/Dropdown/renderer/SimpleOptionRenderer.js +0 -10
  78. package/esm/components/Dropdown/renderer/SimpleOptionRenderer.js.map +0 -1
  79. package/src/components/Dropdown/renderer/SimpleOptionRenderer.tsx +0 -26
@@ -11,13 +11,26 @@ describe('DefaultOptionRenderer', () => {
11
11
  expect(idElement).toBeInTheDocument();
12
12
  expect(labelElement).toBeNull();
13
13
  });
14
- it('renders with label', () => {
14
+ it('renders with label and displays id by default', () => {
15
15
  const option = { id: '1', value: 'Value', label: 'Label' };
16
16
  const { getByText } = render(_jsx(ComboboxOption, { option: option }));
17
- const idElement = getByText(option.id);
18
- const labelElement = getByText(option.label);
19
- expect(idElement).toBeInTheDocument();
20
- expect(labelElement).toBeInTheDocument();
17
+ expect(getByText(option.id)).toBeInTheDocument();
18
+ expect(getByText('-')).toBeInTheDocument();
19
+ expect(getByText(option.label)).toBeInTheDocument();
20
+ });
21
+ it('renders with label and displays id when prop is true', () => {
22
+ const option = { id: '1', value: 'Value', label: 'Label' };
23
+ const { getByText } = render(_jsx(ComboboxOption, { option: option, shouldDisplayOptionId: true }));
24
+ expect(getByText(option.id)).toBeInTheDocument();
25
+ expect(getByText('-')).toBeInTheDocument();
26
+ expect(getByText(option.label)).toBeInTheDocument();
27
+ });
28
+ it('renders with label and does not display id when prop is false', () => {
29
+ const option = { id: '1', value: 'Value', label: 'Label' };
30
+ const { getByText, queryByText } = render(_jsx(ComboboxOption, { option: option, shouldDisplayOptionId: false }));
31
+ expect(queryByText(option.id)).not.toBeInTheDocument();
32
+ expect(queryByText('-')).not.toBeInTheDocument();
33
+ expect(getByText(option.label)).toBeInTheDocument();
21
34
  });
22
35
  it('renders with selected class', () => {
23
36
  const option = { id: '1', value: 'Value', label: 'Label' };
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxOption.spec.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Panel/ComboboxOption.spec.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAChC,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CACxC,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,CAClC,CAAC;QACF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC7B,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAG,CAAC,CAAC;QAC1E,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC,CAAC;QACjE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ComboboxOption.spec.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Panel/ComboboxOption.spec.tsx"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@ import type { ComboboxPanelProps } from '../ComboboxType';
2
2
  /**
3
3
  * Floating menu containing selectable options
4
4
  */
5
- export declare function ComboboxPanel({ optionRenderer: OptionRender, options, focused, selectedIndex, expanded, id, search, onSelect, isLoading, }: ComboboxPanelProps): import("react/jsx-runtime").JSX.Element | null;
5
+ export declare function ComboboxPanel({ optionRenderer: OptionRender, options, shouldDisplayOptionsId, focused, selectedIndex, expanded, id, search, onSelect, isLoading, }: Readonly<ComboboxPanelProps>): import("react/jsx-runtime").JSX.Element | null;
@@ -6,7 +6,7 @@ import D from '../../../../i18n';
6
6
  /**
7
7
  * Floating menu containing selectable options
8
8
  */
9
- export function ComboboxPanel({ optionRenderer: OptionRender, options = [], focused, selectedIndex, expanded, id, search, onSelect, isLoading, }) {
9
+ export function ComboboxPanel({ optionRenderer: OptionRender, options = [], shouldDisplayOptionsId, focused, selectedIndex, expanded, id, search, onSelect, isLoading, }) {
10
10
  const visibleOptions = expanded ? options : [];
11
11
  const ComboBoxOptionComponent = OptionRender !== null && OptionRender !== void 0 ? OptionRender : ComboboxOption;
12
12
  // Do not display the panel if it's empty
@@ -24,7 +24,7 @@ export function ComboboxPanel({ optionRenderer: OptionRender, options = [], focu
24
24
  }
25
25
  return (_jsx(ComboboxPanelContainer, { expanded: expanded, focused: focused, id: `${id}-list`, children: visibleOptions.map((option, index) => {
26
26
  var _a;
27
- return (_jsx(ComboboxOptionContainer, { index: index.toString(), selected: selectedIndex === index, onSelect: onSelect, children: _jsx(ComboBoxOptionComponent, { option: option, selected: selectedIndex === index, search: search }) }, (_a = option.id) !== null && _a !== void 0 ? _a : option.value));
27
+ return (_jsx(ComboboxOptionContainer, { index: index.toString(), selected: selectedIndex === index, onSelect: onSelect, children: _jsx(ComboBoxOptionComponent, { option: option, shouldDisplayOptionId: shouldDisplayOptionsId, selected: selectedIndex === index, search: search }) }, (_a = option.id) !== null && _a !== void 0 ? _a : option.value));
28
28
  }) }));
29
29
  }
30
30
  //# sourceMappingURL=ComboboxPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxPanel.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Panel/ComboboxPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,CAAC,MAAM,kBAAkB,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAC7B,cAAc,EAAE,YAAY,EAC5B,OAAO,GAAG,EAAE,EACZ,OAAO,EACP,aAAa,EACb,QAAQ,EACR,EAAE,EACF,MAAM,EACN,QAAQ,EACR,SAAS,GACW;IACpB,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,MAAM,uBAAuB,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,cAAc,CAAC;IAE/D,yCAAyC;IACzC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,0BAA0B,YACxC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,iBAAiB,GAAQ,GAC/C,GACkB,CACzB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,0BAA0B,YACxC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,mBAAmB,GAAQ,GACjD,GACkB,CACzB,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,0BAA0B,YACxC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,mBAAmB,GAAQ,GACjD,GACkB,CACzB,CAAC;IACH,CAAC;IAED,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEf,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;;YAAC,OAAA,CACtC,KAAC,uBAAuB,IAEvB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EACvB,QAAQ,EAAE,aAAa,KAAK,KAAK,EACjC,QAAQ,EAAE,QAAQ,YAElB,KAAC,uBAAuB,IACvB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,KAAK,KAAK,EACjC,MAAM,EAAE,MAAM,GACb,IATG,MAAA,MAAM,CAAC,EAAE,mCAAI,MAAM,CAAC,KAAK,CAUL,CAC1B,CAAA;SAAA,CAAC,GACsB,CACzB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ComboboxPanel.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Panel/ComboboxPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,CAAC,MAAM,kBAAkB,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAC7B,cAAc,EAAE,YAAY,EAC5B,OAAO,GAAG,EAAE,EACZ,sBAAsB,EACtB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,EAAE,EACF,MAAM,EACN,QAAQ,EACR,SAAS,GACqB;IAC9B,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,MAAM,uBAAuB,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,cAAc,CAAC;IAE/D,yCAAyC;IACzC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACf,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,0BAA0B,YACxC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,iBAAiB,GAAQ,GAC/C,GACkB,CACzB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,0BAA0B,YACxC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,mBAAmB,GAAQ,GACjD,GACkB,CACzB,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEhB,cAAK,SAAS,EAAC,0BAA0B,YACxC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,mBAAmB,GAAQ,GACjD,GACkB,CACzB,CAAC;IACH,CAAC;IAED,OAAO,CACN,KAAC,sBAAsB,IACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,GAAG,EAAE,OAAO,YAEf,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;;YAAC,OAAA,CACtC,KAAC,uBAAuB,IAEvB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EACvB,QAAQ,EAAE,aAAa,KAAK,KAAK,EACjC,QAAQ,EAAE,QAAQ,YAElB,KAAC,uBAAuB,IACvB,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,sBAAsB,EAC7C,QAAQ,EAAE,aAAa,KAAK,KAAK,EACjC,MAAM,EAAE,MAAM,GACb,IAVG,MAAA,MAAM,CAAC,EAAE,mCAAI,MAAM,CAAC,KAAK,CAWL,CAC1B,CAAA;SAAA,CAAC,GACsB,CACzB,CAAC;AACH,CAAC"}
@@ -265,11 +265,17 @@ export type ComponentPropsByType = {
265
265
  Suggester: LunaticBaseProps<string | null> & {
266
266
  componentType?: 'Suggester';
267
267
  storeName: string;
268
+ /**
269
+ * @deprecated use createCustomizableField with ComboboxOptionRenderer as name.
270
+ */
268
271
  optionRenderer: FunctionComponent<{
269
272
  option: SuggesterOption;
270
273
  placeholder?: string;
271
274
  search?: string;
272
275
  }>;
276
+ /**
277
+ * @deprecated use createCustomizableField with ComboboxLabelRenderer as name.
278
+ */
273
279
  labelRenderer: FunctionComponent<{
274
280
  option?: SuggesterOption;
275
281
  selected?: boolean;
@@ -1,5 +1,6 @@
1
1
  import { describe, it, expect, vi, beforeAll, afterEach } from 'vitest';
2
2
  import { SearchMinisearch } from './SearchMinisearch';
3
+ import { applyMelauto } from './melauto';
3
4
  vi.mock('minisearch', () => {
4
5
  return {
5
6
  default: vi.fn().mockImplementation(() => ({
@@ -20,7 +21,13 @@ describe('SearchMinisearch', () => {
20
21
  beforeAll(() => {
21
22
  searchInstance = new SearchMinisearch({
22
23
  name: 'test-suggester',
23
- fields: [{ name: 'id' }, { name: 'label' }],
24
+ fields: [
25
+ { name: 'id' },
26
+ {
27
+ name: 'label',
28
+ synonyms: { accueil: ['ACCEUIL', 'ACUEIL'] },
29
+ },
30
+ ],
24
31
  queryParser: {
25
32
  type: 'tokenized',
26
33
  params: { language: 'English', pattern: '\\w+', min: 1 },
@@ -47,5 +54,13 @@ describe('SearchMinisearch', () => {
47
54
  await searchInstance.index(mockData);
48
55
  expect((_a = searchInstance.db) === null || _a === void 0 ? void 0 : _a.addAll).not.toHaveBeenCalled();
49
56
  });
57
+ it('should expand query synonyms before melauto sorting', async () => {
58
+ var _a;
59
+ await searchInstance.index(mockData);
60
+ ((_a = searchInstance.db) === null || _a === void 0 ? void 0 : _a.search).mockReturnValue(mockData);
61
+ vi.mocked(applyMelauto).mockReturnValue(mockData);
62
+ await searchInstance.search('agent acceuil');
63
+ expect(applyMelauto).toHaveBeenCalledWith('agent acceuil accueil', mockData);
64
+ });
50
65
  });
51
66
  //# sourceMappingURL=SearchMiniSearch.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchMiniSearch.spec.js","sourceRoot":"","sources":["../../../src/utils/search/SearchMiniSearch.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,OAAO;QACN,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;YACf,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;SACf,CAAC,CAAC;KACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3B,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACrB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,IAAI,cAAqC,CAAC;IAC1C,MAAM,QAAQ,GAAG;QAChB,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE;QAChC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;KACjC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,cAAc,GAAG,IAAI,gBAAgB,CAAC;YACrC,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3C,WAAW,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;aACxD;YACD,GAAG,EAAE,EAAE;SACP,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,cAAc,GAAG,cAAc,CAAC,EAAS,CAAC;QAChD,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;;QAC3D,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErC,uDAAuD;QACvD,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,mDAAmD;QACnD,MAAM,CAAC,MAAA,cAAc,CAAC,EAAE,0CAAE,MAAM,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;;QACvD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,MAAM,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErC,MAAM,CAAC,MAAA,cAAc,CAAC,EAAE,0CAAE,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"SearchMiniSearch.spec.js","sourceRoot":"","sources":["../../../src/utils/search/SearchMiniSearch.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,31 @@
1
1
  import { applyMelauto } from './melauto';
2
2
  import MiniSearch from 'minisearch';
3
3
  import { tokenizer } from './tokenizer';
4
+ import { normalizeStr } from './utils';
5
+ function getMelautoQuery(query, info) {
6
+ const tokens = tokenizer(info)(query);
7
+ // existing query tokens (already tokenized/normalized by tokenizer).
8
+ const expandedTokens = new Set(tokens);
9
+ // add synonyms to keep melauto ranking.
10
+ for (const field of info.fields) {
11
+ if (!field.synonyms) {
12
+ continue;
13
+ }
14
+ for (const source in field.synonyms) {
15
+ const normalizedSource = normalizeStr(source);
16
+ const normalizedSynonyms = field.synonyms[source].map((synonym) => normalizeStr(synonym));
17
+ // source -> synonyms
18
+ if (expandedTokens.has(normalizedSource)) {
19
+ normalizedSynonyms.forEach((synonym) => expandedTokens.add(synonym));
20
+ }
21
+ // synonym -> source
22
+ if (normalizedSynonyms.some((synonym) => expandedTokens.has(synonym))) {
23
+ expandedTokens.add(normalizedSource);
24
+ }
25
+ }
26
+ }
27
+ return Array.from(expandedTokens).join(' ');
28
+ }
4
29
  export class SearchMinisearch {
5
30
  constructor(info) {
6
31
  this.db = null;
@@ -31,7 +56,7 @@ export class SearchMinisearch {
31
56
  prefix: (term) => term.length > 2,
32
57
  });
33
58
  // Apply melauto to classify results
34
- data = applyMelauto(q, data);
59
+ data = applyMelauto(getMelautoQuery(q, this.info), data);
35
60
  data = data.slice(0, this.info.max);
36
61
  return data;
37
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SearchMinisearch.js","sourceRoot":"","sources":["../../../src/utils/search/SearchMinisearch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,gBAAgB;IAO5B,YAAY,IAAgB;QAJ5B,OAAE,GAAyB,IAAI,CAAC;QAEhC,YAAO,GAAG,KAAK,CAAC;QAGf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAS;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC;YACxB,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;YACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAS;QACrB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACX,CAAC;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE;YAC5B,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;SACjC,CAAe,CAAC;QAEjB,oCAAoC;QACpC,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAE7B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,aAAa,CAAC,EAAO;QACpB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,EAAO,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAM,CAAC;IACzC,CAAC;CACD"}
1
+ {"version":3,"file":"SearchMinisearch.js","sourceRoot":"","sources":["../../../src/utils/search/SearchMinisearch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { normalizeStr } from './utils';
1
2
  /**
2
3
  * Generates a tokenize method.
3
4
  * When used for tokenizing a search query instead of the indexing, the fieldName is undefined.
@@ -50,20 +51,6 @@ export const tokenizeIndex = (str, info, stopWords) => {
50
51
  return ((_c = (_b = filterStopWords(normalizedStr, stopWords)
51
52
  .match(wordRegex)) === null || _b === void 0 ? void 0 : _b.filter((w) => w.length >= minLength)) !== null && _c !== void 0 ? _c : []);
52
53
  };
53
- /**
54
- * Normalize a string
55
- * - Remove accent (é => e, à => a)
56
- * - remove ligatures (æ => ae, , Æ => ae, œ => oe, Œ => oe)
57
- * - Lowercase
58
- */
59
- const normalizeStr = (str) => {
60
- return str
61
- .toLowerCase()
62
- .replaceAll('œ', 'oe')
63
- .replaceAll('æ', 'ae')
64
- .normalize('NFD')
65
- .replace(/[\u0300-\u036f]/g, '');
66
- };
67
54
  /**
68
55
  * remove from a string all the words that are included in a stopwords list
69
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../src/utils/search/tokenizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../src/utils/search/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Normalize a string
3
+ * - Remove accent (é => e, à => a)
4
+ * - remove ligatures (æ => ae, , Æ => ae, œ => oe, Œ => oe)
5
+ * - Lowercase
6
+ */
7
+ export declare const normalizeStr: (str: string) => string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Normalize a string
3
+ * - Remove accent (é => e, à => a)
4
+ * - remove ligatures (æ => ae, , Æ => ae, œ => oe, Œ => oe)
5
+ * - Lowercase
6
+ */
7
+ export const normalizeStr = (str) => {
8
+ return str
9
+ .toLowerCase()
10
+ .replaceAll('œ', 'oe')
11
+ .replaceAll('æ', 'ae')
12
+ .normalize('NFD')
13
+ .replace(/[\u0300-\u036f]/g, '');
14
+ };
15
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/search/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;IAC3C,OAAO,GAAG;SACR,WAAW,EAAE;SACb,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;SACrB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;SACrB,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inseefr/lunatic",
3
- "version": "3.12.1",
3
+ "version": "3.12.3",
4
4
  "description": "Library of questionnaire components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,7 +51,6 @@
51
51
  "src/components/Dropdown/Dropdown.tsx",
52
52
  "src/components/Dropdown/__snapshots__/Dropdown.spec.tsx.snap",
53
53
  "src/components/Dropdown/renderer/SimpleLabelRenderer.tsx",
54
- "src/components/Dropdown/renderer/SimpleOptionRenderer.tsx",
55
54
  "src/components/Duration/Duration.test.tsx",
56
55
  "src/components/Duration/Duration.tsx",
57
56
  "src/components/Duration/durationUtils.ts",
@@ -462,6 +461,7 @@
462
461
  "src/utils/search/melauto.ts",
463
462
  "src/utils/search/tokenizer.spec.ts",
464
463
  "src/utils/search/tokenizer.ts",
464
+ "src/utils/search/utils.ts",
465
465
  "src/utils/variables.spec.ts",
466
466
  "src/utils/variables.ts",
467
467
  "src/utils/vtl.ts",
@@ -510,9 +510,6 @@
510
510
  "components/Dropdown/renderer/SimpleLabelRenderer.d.ts",
511
511
  "components/Dropdown/renderer/SimpleLabelRenderer.js",
512
512
  "components/Dropdown/renderer/SimpleLabelRenderer.js.map",
513
- "components/Dropdown/renderer/SimpleOptionRenderer.d.ts",
514
- "components/Dropdown/renderer/SimpleOptionRenderer.js",
515
- "components/Dropdown/renderer/SimpleOptionRenderer.js.map",
516
513
  "components/Duration/Duration.d.ts",
517
514
  "components/Duration/Duration.js",
518
515
  "components/Duration/Duration.js.map",
@@ -945,9 +942,6 @@
945
942
  "esm/components/Dropdown/renderer/SimpleLabelRenderer.d.ts",
946
943
  "esm/components/Dropdown/renderer/SimpleLabelRenderer.js",
947
944
  "esm/components/Dropdown/renderer/SimpleLabelRenderer.js.map",
948
- "esm/components/Dropdown/renderer/SimpleOptionRenderer.d.ts",
949
- "esm/components/Dropdown/renderer/SimpleOptionRenderer.js",
950
- "esm/components/Dropdown/renderer/SimpleOptionRenderer.js.map",
951
945
  "esm/components/Duration/Duration.d.ts",
952
946
  "esm/components/Duration/Duration.js",
953
947
  "esm/components/Duration/Duration.js.map",
@@ -1667,6 +1661,9 @@
1667
1661
  "esm/utils/search/tokenizer.spec.d.ts",
1668
1662
  "esm/utils/search/tokenizer.spec.js",
1669
1663
  "esm/utils/search/tokenizer.spec.js.map",
1664
+ "esm/utils/search/utils.d.ts",
1665
+ "esm/utils/search/utils.js",
1666
+ "esm/utils/search/utils.js.map",
1670
1667
  "esm/utils/variables.d.ts",
1671
1668
  "esm/utils/variables.js",
1672
1669
  "esm/utils/variables.js.map",
@@ -2009,6 +2006,9 @@
2009
2006
  "utils/search/tokenizer.spec.d.ts",
2010
2007
  "utils/search/tokenizer.spec.js",
2011
2008
  "utils/search/tokenizer.spec.js.map",
2009
+ "utils/search/utils.d.ts",
2010
+ "utils/search/utils.js",
2011
+ "utils/search/utils.js.map",
2012
2012
  "utils/variables.d.ts",
2013
2013
  "utils/variables.js",
2014
2014
  "utils/variables.js.map",
@@ -1,4 +1,4 @@
1
- import { render } from '@testing-library/react';
1
+ import { fireEvent, render } from '@testing-library/react';
2
2
  import { beforeEach, describe, expect, it, vi } from 'vitest';
3
3
  import { Dropdown } from './Dropdown';
4
4
 
@@ -6,14 +6,14 @@ describe('Dropdown', () => {
6
6
  const mockOnSelect = vi.fn();
7
7
 
8
8
  const baseProps = {
9
- value: 'toto',
9
+ value: 'value1',
10
10
  id: 'dropdown',
11
11
  'aria-labelledby': 'dropdown',
12
12
  options: [
13
13
  {
14
- value: 'toto',
15
- description: 'toto',
16
- label: 'toto',
14
+ value: 'value1',
15
+ description: 'description 1',
16
+ label: 'option 1',
17
17
  },
18
18
  ],
19
19
  response: { name: 'demo' },
@@ -37,6 +37,22 @@ describe('Dropdown', () => {
37
37
  (selection as HTMLElement).focus();
38
38
  expect(selection).toHaveFocus();
39
39
  const span = selection?.querySelector('span');
40
- expect(span).toHaveTextContent('toto');
40
+ expect(span).toHaveTextContent('option 1');
41
+ });
42
+
43
+ it('should display only options label in dropdown selection', () => {
44
+ const { container, queryByText, getByText } = render(
45
+ <Dropdown
46
+ {...baseProps}
47
+ value={null}
48
+ />
49
+ );
50
+
51
+ const selection = container.querySelector('.lunatic-combo-box-content');
52
+ fireEvent.focus(selection as HTMLElement);
53
+
54
+ expect(getByText('option 1')).toBeInTheDocument();
55
+ expect(queryByText('value1')).not.toBeInTheDocument();
56
+ expect(queryByText('description 1')).not.toBeInTheDocument();
41
57
  });
42
58
  });
@@ -1,7 +1,6 @@
1
1
  import type { LunaticComponentProps } from '../type';
2
2
  import { getComponentErrors } from '../shared/ComponentErrors/ComponentErrors';
3
3
  import { slottableComponent } from '../shared/HOC/slottableComponent';
4
- import { SimpleOptionRenderer } from './renderer/SimpleOptionRenderer';
5
4
  import { SimpleLabelRenderer } from './renderer/SimpleLabelRenderer';
6
5
  import { Combobox } from '../shared/Combobox/Combobox';
7
6
  import classNames from 'classnames';
@@ -54,9 +53,9 @@ export const CustomDropdown = slottableComponent<CustomProps>(
54
53
  disabled={disabled}
55
54
  readOnly={readOnly}
56
55
  options={options}
56
+ shouldDisplayOptionsId={false}
57
57
  editable={false}
58
58
  onSelect={onChange}
59
- optionRenderer={SimpleOptionRenderer}
60
59
  labelRenderer={SimpleLabelRenderer}
61
60
  value={value}
62
61
  label={label}
@@ -27,7 +27,7 @@ exports[`Dropdown > renders without crashing 1`] = `
27
27
  <span
28
28
  class="selection"
29
29
  >
30
- toto
30
+ option 1
31
31
  </span>
32
32
  </div>
33
33
  </div>
@@ -63,7 +63,7 @@ exports[`Dropdown > should handle readOnly 1`] = `
63
63
  <span
64
64
  class="selection"
65
65
  >
66
- toto
66
+ option 1
67
67
  </span>
68
68
  </div>
69
69
  </div>
@@ -15,7 +15,13 @@ type Props = {
15
15
  onBlur: () => void;
16
16
  onFocus: () => void;
17
17
  value: [SuggesterOptionType] | [];
18
+ /**
19
+ * @deprecated use createCustomizableField with ComboboxLabelRenderer as name.
20
+ */
18
21
  labelRenderer: LunaticComponentProps<'Suggester'>['labelRenderer'];
22
+ /**
23
+ * @deprecated use createCustomizableField with ComboboxOptionRenderer as name.
24
+ */
19
25
  optionRenderer: LunaticComponentProps<'Suggester'>['optionRenderer'];
20
26
  disabled?: boolean;
21
27
  readOnly?: boolean;
@@ -74,6 +80,7 @@ export const CustomSuggester = slottableComponent<Props>(
74
80
  disabled={disabled}
75
81
  readOnly={readOnly}
76
82
  options={options.map((o) => ({ value: o.id, ...o }))}
83
+ shouldDisplayOptionsId={true}
77
84
  editable={true}
78
85
  onBlur={onBlur}
79
86
  onFocus={onFocus}
@@ -57,6 +57,7 @@ function LunaticComboBox({
57
57
  onSelect,
58
58
  value,
59
59
  options,
60
+ shouldDisplayOptionsId = true,
60
61
  messageError,
61
62
  search = EMPTY_SEARCH,
62
63
  getOptionValue = getDefaultOptionValue,
@@ -184,6 +185,7 @@ function LunaticComboBox({
184
185
  isLoading={isLoading}
185
186
  optionRenderer={optionRenderer}
186
187
  options={options}
188
+ shouldDisplayOptionsId={shouldDisplayOptionsId}
187
189
  focused={focused}
188
190
  selectedIndex={selectedIndex}
189
191
  expanded={expanded}
@@ -212,15 +214,14 @@ function getIndexFromOptions(
212
214
  if (!Array.isArray(options)) {
213
215
  return undefined;
214
216
  }
215
- return options.map(getOptionValue).findIndex((v) => v === value);
217
+ return options.map(getOptionValue).indexOf(value ?? '');
216
218
  }
217
219
 
218
220
  /**
219
221
  * Extract value from an option item
220
222
  */
221
- function getDefaultOptionValue(option: ComboboxOptionType = { value: '' }) {
222
- const { id, value } = option;
223
- return id || value;
223
+ function getDefaultOptionValue(option?: ComboboxOptionType) {
224
+ return option?.id || option?.value || '';
224
225
  }
225
226
 
226
227
  export const Combobox = slottableComponent('Combobox', LunaticComboBox);
@@ -44,6 +44,7 @@ export type ComboboxPanelProps = {
44
44
  search?: string;
45
45
  }>;
46
46
  options: Array<ComboboxOptionType>;
47
+ shouldDisplayOptionsId?: boolean;
47
48
  focused?: boolean;
48
49
  selectedIndex?: number | string | null;
49
50
  expanded?: boolean;
@@ -14,13 +14,35 @@ describe('DefaultOptionRenderer', () => {
14
14
  expect(labelElement).toBeNull();
15
15
  });
16
16
 
17
- it('renders with label', () => {
17
+ it('renders with label and displays id by default', () => {
18
18
  const option = { id: '1', value: 'Value', label: 'Label' };
19
19
  const { getByText } = render(<ComboboxOption option={option} />);
20
- const idElement = getByText(option.id);
21
- const labelElement = getByText(option.label);
22
- expect(idElement).toBeInTheDocument();
23
- expect(labelElement).toBeInTheDocument();
20
+
21
+ expect(getByText(option.id)).toBeInTheDocument();
22
+ expect(getByText('-')).toBeInTheDocument();
23
+ expect(getByText(option.label)).toBeInTheDocument();
24
+ });
25
+
26
+ it('renders with label and displays id when prop is true', () => {
27
+ const option = { id: '1', value: 'Value', label: 'Label' };
28
+ const { getByText } = render(
29
+ <ComboboxOption option={option} shouldDisplayOptionId={true} />
30
+ );
31
+
32
+ expect(getByText(option.id)).toBeInTheDocument();
33
+ expect(getByText('-')).toBeInTheDocument();
34
+ expect(getByText(option.label)).toBeInTheDocument();
35
+ });
36
+
37
+ it('renders with label and does not display id when prop is false', () => {
38
+ const option = { id: '1', value: 'Value', label: 'Label' };
39
+ const { getByText, queryByText } = render(
40
+ <ComboboxOption option={option} shouldDisplayOptionId={false} />
41
+ );
42
+
43
+ expect(queryByText(option.id)).not.toBeInTheDocument();
44
+ expect(queryByText('-')).not.toBeInTheDocument();
45
+ expect(getByText(option.label)).toBeInTheDocument();
24
46
  });
25
47
 
26
48
  it('renders with selected class', () => {
@@ -5,12 +5,13 @@ import D from '../../../../i18n';
5
5
 
6
6
  type Props = {
7
7
  option: ComboboxOptionType;
8
+ shouldDisplayOptionId?: boolean;
8
9
  selected?: boolean;
9
10
  };
10
11
 
11
12
  export const ComboboxOption = slottableComponent(
12
13
  'ComboboxOption',
13
- ({ option, selected }: Props) => {
14
+ ({ option, shouldDisplayOptionId = true, selected }: Props) => {
14
15
  const { id, value, label } = option;
15
16
 
16
17
  if (value === 'OTHER') {
@@ -22,19 +23,22 @@ export const ComboboxOption = slottableComponent(
22
23
  </div>
23
24
  );
24
25
  }
25
-
26
- if (label && typeof label === 'string' && label.length) {
26
+ if (label) {
27
27
  return (
28
28
  <div className={classnames('lunatic-combo-box-option', { selected })}>
29
- <span className="id">{id || value}</span>
30
- <span> - </span>
29
+ {shouldDisplayOptionId && (
30
+ <>
31
+ <span className="id">{id || value}</span>
32
+ <span> - </span>
33
+ </>
34
+ )}
31
35
  <span className="label">{label}</span>
32
36
  </div>
33
37
  );
34
38
  }
35
39
  return (
36
40
  <div className={classnames('lunatic-combo-box-option', { selected })}>
37
- <span className="id">{id}</span>
41
+ <span className="id">{id || value}</span>
38
42
  </div>
39
43
  );
40
44
  }
@@ -10,6 +10,7 @@ import D from '../../../../i18n';
10
10
  export function ComboboxPanel({
11
11
  optionRenderer: OptionRender,
12
12
  options = [],
13
+ shouldDisplayOptionsId,
13
14
  focused,
14
15
  selectedIndex,
15
16
  expanded,
@@ -17,7 +18,7 @@ export function ComboboxPanel({
17
18
  search,
18
19
  onSelect,
19
20
  isLoading,
20
- }: ComboboxPanelProps) {
21
+ }: Readonly<ComboboxPanelProps>) {
21
22
  const visibleOptions = expanded ? options : [];
22
23
 
23
24
  const ComboBoxOptionComponent = OptionRender ?? ComboboxOption;
@@ -84,6 +85,7 @@ export function ComboboxPanel({
84
85
  >
85
86
  <ComboBoxOptionComponent
86
87
  option={option}
88
+ shouldDisplayOptionId={shouldDisplayOptionsId}
87
89
  selected={selectedIndex === index}
88
90
  search={search}
89
91
  />
@@ -261,11 +261,17 @@ export type ComponentPropsByType = {
261
261
  Suggester: LunaticBaseProps<string | null> & {
262
262
  componentType?: 'Suggester';
263
263
  storeName: string;
264
+ /**
265
+ * @deprecated use createCustomizableField with ComboboxOptionRenderer as name.
266
+ */
264
267
  optionRenderer: FunctionComponent<{
265
268
  option: SuggesterOption;
266
269
  placeholder?: string;
267
270
  search?: string;
268
271
  }>;
272
+ /**
273
+ * @deprecated use createCustomizableField with ComboboxLabelRenderer as name.
274
+ */
269
275
  labelRenderer: FunctionComponent<{
270
276
  option?: SuggesterOption;
271
277
  selected?: boolean;