@bikdotai/bik-component-library 0.0.876-beta.0 → 0.0.876-beta.1

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 (130) hide show
  1. package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.js +2 -2
  2. package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.js.map +1 -1
  3. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js +4 -4
  4. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js.map +1 -1
  5. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +2 -2
  6. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js.map +1 -1
  7. package/dist/cjs/components/accordion/Accordion.style.js +1 -1
  8. package/dist/cjs/components/accordion/Accordion.style.js.map +1 -1
  9. package/dist/cjs/components/action-button/ActionButton.styled.js +1 -1
  10. package/dist/cjs/components/action-button/ActionButton.styled.js.map +1 -1
  11. package/dist/cjs/components/analytics-chips-and-dropdowns/CommonStyles.js +1 -1
  12. package/dist/cjs/components/analytics-chips-and-dropdowns/CommonStyles.js.map +1 -1
  13. package/dist/cjs/components/bik-layout/SidebarStyles.js +1 -1
  14. package/dist/cjs/components/bik-layout/SidebarStyles.js.map +1 -1
  15. package/dist/cjs/components/button/Button.styled.js +3 -3
  16. package/dist/cjs/components/button/Button.styled.js.map +1 -1
  17. package/dist/cjs/components/buttonGroup/ButtonGroupStyle.js +1 -1
  18. package/dist/cjs/components/buttonGroup/ButtonGroupStyle.js.map +1 -1
  19. package/dist/cjs/components/card-selector/CardSelector.styled.js +1 -1
  20. package/dist/cjs/components/card-selector/CardSelector.styled.js.map +1 -1
  21. package/dist/cjs/components/carousel-preview/CarouselPreview.style.js +2 -2
  22. package/dist/cjs/components/carousel-preview/CarouselPreview.style.js.map +1 -1
  23. package/dist/cjs/components/checkBox/CheckBox.styled.js +1 -1
  24. package/dist/cjs/components/checkBox/CheckBox.styled.js.map +1 -1
  25. package/dist/cjs/components/dropdown/MenuItem/MenuItem.js +1 -1
  26. package/dist/cjs/components/dropdown/MenuItem/MenuItem.js.map +1 -1
  27. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
  28. package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  29. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +10 -27
  30. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.js.map +1 -1
  31. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
  32. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.js.map +1 -1
  33. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js +1 -1
  34. package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js.map +1 -1
  35. package/dist/cjs/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.js +1 -1
  36. package/dist/cjs/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.js.map +1 -1
  37. package/dist/cjs/components/dropdown/OpenedDropdown/utils/iterationOnOptions.js +1 -1
  38. package/dist/cjs/components/dropdown/OpenedDropdown/utils/iterationOnOptions.js.map +1 -1
  39. package/dist/cjs/components/dropdown/hooks/useDropdown.js +1 -1
  40. package/dist/cjs/components/dropdown/hooks/useDropdown.js.map +1 -1
  41. package/dist/cjs/components/dual-icon-button/DualIconButton.styled.js +2 -2
  42. package/dist/cjs/components/dual-icon-button/DualIconButton.styled.js.map +1 -1
  43. package/dist/cjs/components/floating-action-button/FloatingActionButton.styles.js +1 -1
  44. package/dist/cjs/components/floating-action-button/FloatingActionButton.styles.js.map +1 -1
  45. package/dist/cjs/components/icon-button/IconButton.styled.js +4 -4
  46. package/dist/cjs/components/icon-button/IconButton.styled.js.map +1 -1
  47. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.js +1 -1
  48. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.js.map +1 -1
  49. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.styled.js +11 -14
  50. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.styled.js.map +1 -1
  51. package/dist/cjs/components/plans/SubscriptionPlanSelector.js +1 -1
  52. package/dist/cjs/components/plans/SubscriptionPlanSelector.js.map +1 -1
  53. package/dist/cjs/components/product-picker-v2/style.js +2 -2
  54. package/dist/cjs/components/product-picker-v2/style.js.map +1 -1
  55. package/dist/cjs/components/switch/Switch.js +2 -2
  56. package/dist/cjs/components/switch/Switch.js.map +1 -1
  57. package/dist/cjs/components/template-preview/RCS/RCSPreview.styled.js +1 -1
  58. package/dist/cjs/components/template-preview/RCS/RCSPreview.styled.js.map +1 -1
  59. package/dist/cjs/components/template-preview/WhatsApp/ChatUI.style.js +1 -1
  60. package/dist/cjs/components/template-preview/WhatsApp/ChatUI.style.js.map +1 -1
  61. package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.js +2 -2
  62. package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.js.map +1 -1
  63. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js +4 -4
  64. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js.map +1 -1
  65. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +2 -2
  66. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js.map +1 -1
  67. package/dist/esm/components/accordion/Accordion.style.js +1 -1
  68. package/dist/esm/components/accordion/Accordion.style.js.map +1 -1
  69. package/dist/esm/components/action-button/ActionButton.styled.js +1 -1
  70. package/dist/esm/components/action-button/ActionButton.styled.js.map +1 -1
  71. package/dist/esm/components/analytics-chips-and-dropdowns/CommonStyles.js +1 -1
  72. package/dist/esm/components/analytics-chips-and-dropdowns/CommonStyles.js.map +1 -1
  73. package/dist/esm/components/bik-layout/SidebarStyles.js +1 -1
  74. package/dist/esm/components/bik-layout/SidebarStyles.js.map +1 -1
  75. package/dist/esm/components/button/Button.styled.js +3 -3
  76. package/dist/esm/components/button/Button.styled.js.map +1 -1
  77. package/dist/esm/components/buttonGroup/ButtonGroupStyle.js +1 -1
  78. package/dist/esm/components/buttonGroup/ButtonGroupStyle.js.map +1 -1
  79. package/dist/esm/components/card-selector/CardSelector.styled.js +1 -1
  80. package/dist/esm/components/card-selector/CardSelector.styled.js.map +1 -1
  81. package/dist/esm/components/carousel-preview/CarouselPreview.style.js +2 -2
  82. package/dist/esm/components/carousel-preview/CarouselPreview.style.js.map +1 -1
  83. package/dist/esm/components/checkBox/CheckBox.styled.js +1 -1
  84. package/dist/esm/components/checkBox/CheckBox.styled.js.map +1 -1
  85. package/dist/esm/components/dropdown/MenuItem/MenuItem.js +1 -1
  86. package/dist/esm/components/dropdown/MenuItem/MenuItem.js.map +1 -1
  87. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +278 -300
  88. package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js.map +1 -1
  89. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +0 -8
  90. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +126 -170
  91. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.js.map +1 -1
  92. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +0 -4
  93. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.js +112 -144
  94. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.js.map +1 -1
  95. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.d.ts +0 -1
  96. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js +31 -32
  97. package/dist/esm/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js.map +1 -1
  98. package/dist/esm/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.d.ts +0 -2
  99. package/dist/esm/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.js +39 -54
  100. package/dist/esm/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.js.map +1 -1
  101. package/dist/esm/components/dropdown/OpenedDropdown/utils/iterationOnOptions.d.ts +16 -18
  102. package/dist/esm/components/dropdown/OpenedDropdown/utils/iterationOnOptions.js +27 -73
  103. package/dist/esm/components/dropdown/OpenedDropdown/utils/iterationOnOptions.js.map +1 -1
  104. package/dist/esm/components/dropdown/hooks/useDropdown.d.ts +17 -4
  105. package/dist/esm/components/dropdown/hooks/useDropdown.js +163 -176
  106. package/dist/esm/components/dropdown/hooks/useDropdown.js.map +1 -1
  107. package/dist/esm/components/dropdown/type.d.ts +0 -22
  108. package/dist/esm/components/dual-icon-button/DualIconButton.styled.js +2 -2
  109. package/dist/esm/components/dual-icon-button/DualIconButton.styled.js.map +1 -1
  110. package/dist/esm/components/floating-action-button/FloatingActionButton.styles.js +1 -1
  111. package/dist/esm/components/floating-action-button/FloatingActionButton.styles.js.map +1 -1
  112. package/dist/esm/components/icon-button/IconButton.styled.js +4 -4
  113. package/dist/esm/components/icon-button/IconButton.styled.js.map +1 -1
  114. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.js +44 -46
  115. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.js.map +1 -1
  116. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.d.ts +0 -3
  117. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.js +25 -29
  118. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.js.map +1 -1
  119. package/dist/esm/components/multi-level-dropdown/type.d.ts +0 -5
  120. package/dist/esm/components/plans/SubscriptionPlanSelector.js +1 -1
  121. package/dist/esm/components/plans/SubscriptionPlanSelector.js.map +1 -1
  122. package/dist/esm/components/product-picker-v2/style.js +2 -2
  123. package/dist/esm/components/product-picker-v2/style.js.map +1 -1
  124. package/dist/esm/components/switch/Switch.js +2 -2
  125. package/dist/esm/components/switch/Switch.js.map +1 -1
  126. package/dist/esm/components/template-preview/RCS/RCSPreview.styled.js +1 -1
  127. package/dist/esm/components/template-preview/RCS/RCSPreview.styled.js.map +1 -1
  128. package/dist/esm/components/template-preview/WhatsApp/ChatUI.style.js +1 -1
  129. package/dist/esm/components/template-preview/WhatsApp/ChatUI.style.js.map +1 -1
  130. package/package.json +1 -1
@@ -1,255 +1,242 @@
1
- import Z from "lodash/debounce";
2
- import { useState as D, useRef as k, useEffect as E, useCallback as _, useMemo as $ } from "react";
3
- import { iterateOnOptionsRaw as K, getSelectionLeaves as x, iterateOnOptions as O } from "../OpenedDropdown/utils/iterationOnOptions.js";
4
- const re = (h = "1.0", m, I, P, b, g, q, z = [], i, B) => {
5
- const v = B === "nested", [f, d] = D(m ?? []), [p, w] = D([]), [n, G] = D(""), [J, C] = D(void 0), L = k(f), H = k(g);
6
- E(() => {
7
- H.current = g;
8
- }, [g]), E(() => {
9
- if (L.current = f, p.length && n && g) {
10
- let t = [...p];
11
- const s = f.map((e) => {
1
+ import X from "lodash/debounce";
2
+ import { useState as E, useRef as j, useEffect as A, useCallback as Y, useMemo as Z } from "react";
3
+ import { iterateOnOptionsRaw as _, iterateOnOptions as O } from "../OpenedDropdown/utils/iterationOnOptions.js";
4
+ const S = (h = "1.0", b, y, I, g, w, k, q = [], a) => {
5
+ const [c, i] = E(b ?? []), [v, p] = E([]), [n, z] = E(""), [B, m] = E(void 0), C = j(c), P = j(w);
6
+ A(() => {
7
+ P.current = w;
8
+ }, [w]), A(() => {
9
+ if (C.current = c, v.length && n && w) {
10
+ let t = [...v];
11
+ const r = c.map((e) => {
12
12
  if (e.options)
13
13
  return e.options.map((l) => ({
14
14
  value: l.value,
15
15
  selected: l.selected
16
16
  }));
17
- const r = e;
17
+ const s = e;
18
18
  return {
19
- value: r.value,
20
- selected: r.selected
19
+ value: s.value,
20
+ selected: s.selected
21
21
  };
22
22
  }).flat();
23
23
  t = t.map((e) => {
24
- const r = s.find(
24
+ const s = r.find(
25
25
  (l) => e.value === l.value
26
26
  );
27
- return r ? {
27
+ return s ? {
28
28
  ...e,
29
- selected: r.selected
29
+ selected: s.selected
30
30
  } : e;
31
- }), q && (t = t.map((e) => ({
31
+ }), k && (t = t.map((e) => ({
32
32
  ...e,
33
- disabled: !z.includes(e.value)
34
- }))), w(b && !P ? [
33
+ disabled: !q.includes(e.value)
34
+ }))), p(g && !I ? [
35
35
  ...t.sort(
36
36
  (e) => e.selected ? -1 : 1
37
37
  )
38
38
  ] : [...t]);
39
39
  }
40
- }, [f]), E(() => {
41
- if (m) {
42
- const t = [...m];
43
- d(b && !P ? [
40
+ }, [c]), A(() => {
41
+ if (b) {
42
+ const t = [...b];
43
+ i(g && !I ? [
44
44
  ...t.sort(
45
- (s) => s.selected ? -1 : 1
45
+ (r) => r.selected ? -1 : 1
46
46
  )
47
47
  ] : [...t]);
48
48
  }
49
- }, [m]);
50
- const T = (t) => {
51
- const s = [];
49
+ }, [b]);
50
+ const H = (t) => {
51
+ const r = [];
52
52
  return t.forEach((e) => {
53
53
  if (e.options) {
54
- const r = e.options.filter(
54
+ const s = e.options.filter(
55
55
  (l) => l.selected === !0
56
56
  );
57
- s.push({
57
+ r.push({
58
58
  ...e,
59
- options: [...r]
59
+ options: [...s]
60
60
  });
61
- } else {
62
- const r = e;
63
- if (v && r.children?.length) {
64
- const l = r.children.filter(
65
- (c) => c.selected
66
- );
67
- l.length && s.push({
68
- ...r,
69
- children: l
70
- });
71
- } else r.selected && s.push({ ...e });
72
- }
73
- }), s;
74
- }, F = (t) => x(t, v).filter((s) => s.selected).length, R = (t) => !b || !i && i !== 0 ? !1 : F(t) >= i, y = _(async (t) => {
75
- const s = H.current;
76
- if (!t || !s) return;
61
+ } else
62
+ e.selected && r.push({ ...e });
63
+ }), r;
64
+ }, L = (t) => {
65
+ let r = 0;
66
+ return t.forEach((e) => {
67
+ e.options ? r += e.options.filter(
68
+ (s) => s.selected === !0
69
+ ).length : e.selected && r++;
70
+ }), r;
71
+ }, D = (t) => !g || !a && a !== 0 ? !1 : L(t) >= a, R = Y(async (t) => {
72
+ const r = P.current;
73
+ if (!t || !r) return;
77
74
  const e = [];
78
- K(L.current, (r) => {
79
- r.selected && !e.includes(r.value) && e.push(r.value);
75
+ _(C.current, (s) => {
76
+ s.selected && !e.includes(s.value) && e.push(s.value);
80
77
  });
81
78
  try {
82
- const r = await s(t);
83
- if (C(void 0), r) {
84
- const l = r.map((c) => {
85
- if (c.options) {
86
- const a = c;
79
+ const s = await r(t);
80
+ if (m(void 0), s) {
81
+ const l = s.map((f) => {
82
+ if (f.options) {
83
+ const d = f;
87
84
  return {
88
- ...a,
89
- options: a.options.map((u) => ({
85
+ ...d,
86
+ options: d.options.map((u) => ({
90
87
  ...u,
91
88
  selected: e.includes(u.value)
92
89
  }))
93
90
  };
94
91
  }
95
92
  return {
96
- ...c,
97
- selected: e.includes(c.value)
93
+ ...f,
94
+ selected: e.includes(f.value)
98
95
  };
99
96
  });
100
- w([...l]);
97
+ p([...l]);
101
98
  } else
102
- w([]);
103
- } catch (r) {
104
- w([]), C(
105
- r instanceof Error ? r.message : "Something went wrong while fetching the list. Please try again"
99
+ p([]);
100
+ } catch (s) {
101
+ p([]), m(
102
+ s instanceof Error ? s.message : "Something went wrong while fetching the list. Please try again"
106
103
  );
107
104
  }
108
- }, []), A = $(
109
- () => Z(y, 300),
110
- [y]
105
+ }, []), F = Z(
106
+ () => X(R, 300),
107
+ [R]
111
108
  );
112
- E(() => () => A?.cancel(), [A]);
113
- function M(t) {
114
- if (G(t), w([]), C(void 0), !t) {
115
- A?.cancel();
109
+ A(() => () => F?.cancel(), [F]);
110
+ function G(t) {
111
+ if (z(t), p([]), m(void 0), !t) {
112
+ F?.cancel();
116
113
  return;
117
114
  }
118
- A(t);
115
+ F(t);
119
116
  }
120
- function N() {
121
- n && (C(void 0), y(n));
117
+ function J() {
118
+ n && (m(void 0), R(n));
122
119
  }
123
- function W(t, s) {
124
- if (!b)
125
- I?.(t);
120
+ function T(t, r) {
121
+ if (!g)
122
+ y?.(t);
126
123
  else {
127
- if (t.selected && i && R(f))
124
+ if (t.selected && a && D(c))
128
125
  return;
129
- if (p.length && n && g)
126
+ if (v.length && n && w)
130
127
  if (t.selected) {
131
- if (i && R(f))
128
+ if (a && D(c))
132
129
  return;
133
130
  let e = !1;
134
- const r = O(
135
- f,
131
+ const s = O(
132
+ c,
136
133
  { selected: t.selected },
137
- (l) => l.value === t.value ? (e = !0, !0) : !1,
138
- v
134
+ (l) => l.value === t.value ? (e = !0, !0) : !1
139
135
  );
140
- if (e || r.push(t), s)
141
- return [...r];
142
- d([...r]), h === "2.0" && o(r);
136
+ if (e || s.push(t), r)
137
+ return [...s];
138
+ i([...s]), h === "2.0" && o(s);
143
139
  } else {
144
- let e = !1, r = O(
145
- f,
140
+ let e = !1, s = O(
141
+ c,
146
142
  { selected: t.selected },
147
- (l) => l.value === t.value ? (e = !0, !0) : !1,
148
- v
143
+ (l) => l.value === t.value ? (e = !0, !0) : !1
149
144
  );
150
- if (e && (r = r.filter((l) => l.value !== t.value)), s)
151
- return [...r];
152
- d([...r]), h === "2.0" && o(r);
145
+ if (e && (s = s.filter((l) => l.value !== t.value)), r)
146
+ return [...s];
147
+ i([...s]), h === "2.0" && o(s);
153
148
  }
154
149
  else {
155
150
  const e = O(
156
- f,
151
+ c,
157
152
  { selected: t.selected },
158
- (r) => r.value === t.value,
159
- v
153
+ (s) => s.value === t.value
160
154
  );
161
- if (s)
155
+ if (r)
162
156
  return [...e];
163
- d([...e]), h === "2.0" && o(e);
157
+ i([...e]), h === "2.0" && o(e);
164
158
  }
165
159
  }
166
160
  }
167
- function Q(t) {
168
- let s = [...f];
169
- p.forEach((e) => {
170
- s = s.map((r) => {
161
+ function M(t) {
162
+ let r = [...c];
163
+ v.forEach((e) => {
164
+ r = r.map((s) => {
171
165
  const l = e;
172
- return typeof l.value < "u" && l.value === r.value ? {
173
- ...r,
166
+ return typeof l.value < "u" && l.value === s.value ? {
167
+ ...s,
174
168
  selected: !1
175
- } : r;
169
+ } : s;
176
170
  });
177
- }), d([...s]), h === "2.0" && o(s);
171
+ }), i([...r]), h === "2.0" && o(r);
178
172
  }
179
- function U(t) {
180
- let s = [...f];
181
- if (i && i > 0) {
182
- const e = F(s), r = i - e;
183
- if (r <= 0)
173
+ function N(t) {
174
+ let r = [...c];
175
+ if (a && a > 0) {
176
+ const e = L(r), s = a - e;
177
+ if (s <= 0)
184
178
  return;
185
179
  let l = 0;
186
- p.forEach((c) => {
187
- if (l >= r)
180
+ v.forEach((f) => {
181
+ if (l >= s)
188
182
  return;
189
- let a = !1;
190
- s = s.map((u) => {
191
- const j = c;
192
- return u.selected || u.disabled ? u : typeof j.value < "u" && j.value === u.value ? (a = !0, l++, {
183
+ let d = !1;
184
+ r = r.map((u) => {
185
+ const W = f;
186
+ return u.selected || u.disabled ? u : typeof W.value < "u" && W.value === u.value ? (d = !0, l++, {
193
187
  ...u,
194
188
  selected: !0
195
189
  }) : u;
196
- }), !a && l < r && (c.disabled || (s.push({ ...c, selected: !0 }), l++));
197
- }), d([...s]), h === "2.0" && o(s);
190
+ }), !d && l < s && (f.disabled || (r.push({ ...f, selected: !0 }), l++));
191
+ }), i([...r]), h === "2.0" && o(r);
198
192
  }
199
193
  }
200
- function V(t) {
201
- if (p.length && n && g)
202
- t === "selectAll" ? U() : Q();
194
+ function Q(t) {
195
+ if (v.length && n && w)
196
+ t === "selectAll" ? N() : M();
203
197
  else if (t === "selectAll")
204
- if (i && i > 0) {
205
- const s = F(f), e = i - s;
198
+ if (a && a > 0) {
199
+ const r = L(c), e = a - r;
206
200
  if (e <= 0)
207
201
  return;
208
- let r = 0;
209
- const l = f.map((c) => {
210
- if (c.options) {
211
- const a = c;
202
+ let s = 0;
203
+ const l = c.map((f) => {
204
+ if (f.options) {
205
+ const d = f;
212
206
  return {
213
- ...a,
214
- options: a.options.map((u) => u.disabled || u.selected || n && !u.label?.toLowerCase().includes(n.toLowerCase()) ? u : r < e ? (r++, { ...u, selected: !0 }) : u)
207
+ ...d,
208
+ options: d.options.map((u) => u.disabled || u.selected || n && !u.label?.toLowerCase().includes(n.toLowerCase()) ? u : s < e ? (s++, { ...u, selected: !0 }) : u)
215
209
  };
216
210
  } else {
217
- const a = c;
218
- return a.disabled || a.selected || n && !a.label?.toLowerCase().includes(n.toLowerCase()) ? c : r < e ? (r++, { ...c, selected: !0 }) : c;
211
+ const d = f;
212
+ return d.disabled || d.selected || n && !d.label?.toLowerCase().includes(n.toLowerCase()) ? f : s < e ? (s++, { ...f, selected: !0 }) : f;
219
213
  }
220
214
  });
221
- d([...l]), h === "2.0" && o(l);
215
+ i([...l]), h === "2.0" && o(l);
222
216
  } else {
223
- const s = O(
224
- f,
217
+ const r = O(
218
+ c,
225
219
  { selected: !0 },
226
- (e) => n ? e.label?.toLowerCase().includes(n.toLowerCase()) && !e.disabled : !e.disabled,
227
- v
220
+ (e) => n ? e.label?.toLowerCase().includes(n.toLowerCase()) && !e.disabled : !e.disabled
228
221
  );
229
- d([...s]), h === "2.0" && o(s);
222
+ i([...r]), h === "2.0" && o(r);
230
223
  }
231
224
  else if (t === "notSelected") {
232
- const s = O(
233
- f,
225
+ const r = O(
226
+ c,
234
227
  { selected: !1 },
235
- (e) => !e.disabled,
236
- v
228
+ (e) => !e.disabled
237
229
  );
238
- d([...s]), h === "2.0" && o(s);
230
+ i([...r]), h === "2.0" && o(r);
239
231
  }
240
232
  }
241
- function X() {
242
- const t = O(
243
- f,
244
- { selected: !1 },
245
- void 0,
246
- v
247
- );
248
- d([...t]), h === "2.0" && o(t);
233
+ function U() {
234
+ const t = O(c, { selected: !1 });
235
+ i([...t]), h === "2.0" && o(t);
249
236
  }
250
- function Y(t) {
251
- if (!b) {
252
- W({
237
+ function V(t) {
238
+ if (!g) {
239
+ T({
253
240
  label: n,
254
241
  value: n,
255
242
  isFreeForm: !0,
@@ -257,7 +244,7 @@ const re = (h = "1.0", m, I, P, b, g, q, z = [], i, B) => {
257
244
  });
258
245
  return;
259
246
  }
260
- const s = f.map(
247
+ const r = c.map(
261
248
  (e) => e.options ? e : {
262
249
  ...e,
263
250
  selected: (
@@ -269,41 +256,41 @@ const re = (h = "1.0", m, I, P, b, g, q, z = [], i, B) => {
269
256
  )
270
257
  }
271
258
  );
272
- t && (s.some(
259
+ t && (r.some(
273
260
  (e) => e.label === n && e.value === n
274
- ) || s.unshift({
261
+ ) || r.unshift({
275
262
  label: n,
276
263
  value: n,
277
264
  isFreeForm: !0,
278
265
  selected: !0
279
- })), d([...s]), h === "2.0" && o(s);
266
+ })), i([...r]), h === "2.0" && o(r);
280
267
  }
281
268
  function o(t) {
282
- const s = T(
283
- t ?? L.current
269
+ const r = H(
270
+ t ?? C.current
284
271
  );
285
- I?.([...s]);
272
+ y?.([...r]);
286
273
  }
287
274
  return {
288
- latestDropdownOptionsRef: L,
289
- dropdownOptions: f,
290
- search: M,
275
+ latestDropdownOptionsRef: C,
276
+ dropdownOptions: c,
277
+ search: G,
291
278
  searchedString: n,
292
- searchedOptions: p,
293
- searchError: J,
294
- retrySearch: N,
295
- onApplyHandler: W,
296
- selectAllHandler: V,
297
- onMultiSelectClear: X,
298
- onFreeFormSelect: Y,
279
+ searchedOptions: v,
280
+ searchError: B,
281
+ retrySearch: J,
282
+ onApplyHandler: T,
283
+ selectAllHandler: Q,
284
+ onMultiSelectClear: U,
285
+ onFreeFormSelect: V,
299
286
  onMultiSelectApply: o,
300
- getSelectedOptions: T,
301
- getCurrentSelectionCount: F,
302
- isMaxSelectionsReached: R,
303
- maxSelections: i
287
+ getSelectedOptions: H,
288
+ getCurrentSelectionCount: L,
289
+ isMaxSelectionsReached: D,
290
+ maxSelections: a
304
291
  };
305
292
  };
306
293
  export {
307
- re as useDropdown
294
+ S as useDropdown
308
295
  };
309
296
  //# sourceMappingURL=useDropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDropdown.js","sources":["../../../../../src/components/dropdown/hooks/useDropdown.tsx"],"sourcesContent":["import debounce from 'lodash/debounce';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectAllCheckboxState } from '../OpenedDropdown/components/menu/SelectAllMenu';\nimport {\n\tgetSelectionLeaves,\n\titerateOnOptions,\n\titerateOnOptionsRaw,\n} from '../OpenedDropdown/utils/iterationOnOptions';\nimport { DropdownOption, GroupedOption, SingleOption } from '../type';\n\nexport const useDropdown = (\n\tversion = '1.0',\n\toptions: DropdownOption[],\n\tonSelect: ((option: DropdownOption | DropdownOption[]) => void) | undefined,\n\tskipSorting?: boolean,\n\tisMultiSelect?: boolean,\n\tonSearch?: (searchKey: string) => Promise<DropdownOption[]>,\n\tdisableOtherSearchedOption?: boolean,\n\tdisableSearchedOptionExcept: string[] = [],\n\tmaxSelections?: number,\n\tchildrenLayout?: 'flyout' | 'nested',\n) => {\n\t// Only the nested layout makes children selectable; a flyout submenu click\n\t// marks the parent instead.\n\tconst nestedChildren = childrenLayout === 'nested';\n\tconst [dropdownOptions, setDropdownOptions] = useState(options ?? []);\n\tconst [searchedOptions, setSearchedOptions] = useState<DropdownOption[]>([]);\n\tconst [searchedString, setSearchedString] = useState('');\n\tconst [searchError, setSearchError] = useState<string | undefined>(undefined);\n\tconst latestDropdownOptionsRef = useRef(dropdownOptions);\n\t/** Store latest onSearch so performSearch/debouncedSearch stay stable when parent re-renders with new callback reference. */\n\tconst onSearchRef = useRef(onSearch);\n\n\tuseEffect(() => {\n\t\tonSearchRef.current = onSearch;\n\t}, [onSearch]);\n\n\tuseEffect(() => {\n\t\tlatestDropdownOptionsRef.current = dropdownOptions;\n\n\t\tif (searchedOptions.length && searchedString && onSearch) {\n\t\t\tlet searchedOptionsClone = [...searchedOptions] as SingleOption[];\n\t\t\tconst dropdownOptionFlat = dropdownOptions\n\t\t\t\t.map((option) => {\n\t\t\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\t\t\treturn (option as GroupedOption).options.map((op) => ({\n\t\t\t\t\t\t\tvalue: op.value,\n\t\t\t\t\t\t\tselected: op.selected,\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t\tconst op = option as SingleOption;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: op.value,\n\t\t\t\t\t\tselected: op.selected,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.flat();\n\n\t\t\tsearchedOptionsClone = searchedOptionsClone.map((option) => {\n\t\t\t\tconst selectedDropdownOption = dropdownOptionFlat.find(\n\t\t\t\t\t(dropdownOption) => {\n\t\t\t\t\t\tif (option.value === dropdownOption.value) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tif (selectedDropdownOption) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tselected: selectedDropdownOption.selected,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn option;\n\t\t\t});\n\n\t\t\t// disable other options except selected in searched options\n\t\t\tif (disableOtherSearchedOption) {\n\t\t\t\tsearchedOptionsClone = searchedOptionsClone.map((option) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tdisabled: !disableSearchedOptionExcept.includes(option.value),\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (isMultiSelect && !skipSorting) {\n\t\t\t\tsetSearchedOptions([\n\t\t\t\t\t...searchedOptionsClone.sort((option) =>\n\t\t\t\t\t\t(option as SingleOption).selected ? -1 : 1,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tsetSearchedOptions([...searchedOptionsClone]);\n\t\t\t}\n\t\t}\n\t}, [dropdownOptions]);\n\n\tuseEffect(() => {\n\t\tif (options) {\n\t\t\tconst writeOptions = [...options];\n\t\t\tif (isMultiSelect && !skipSorting) {\n\t\t\t\tsetDropdownOptions([\n\t\t\t\t\t...writeOptions.sort((option) =>\n\t\t\t\t\t\t(option as SingleOption).selected ? -1 : 1,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tsetDropdownOptions([...writeOptions]);\n\t\t\t}\n\t\t}\n\t}, [options]);\n\n\tconst getSelectedOptions = (data: DropdownOption[]) => {\n\t\tconst selectedOptions: DropdownOption[] = [];\n\t\tdata.forEach((option) => {\n\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\tconst groupedOptions = (option as GroupedOption).options.filter(\n\t\t\t\t\t(op) => op.selected === true,\n\t\t\t\t);\n\t\t\t\tselectedOptions.push({\n\t\t\t\t\t...option,\n\t\t\t\t\toptions: [...groupedOptions],\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\tif (nestedChildren && singleOption.children?.length) {\n\t\t\t\t\t// A partly selected parent is itself unselected, so report it\n\t\t\t\t\t// whenever any child is selected, carrying only those children.\n\t\t\t\t\tconst selectedChildren = singleOption.children.filter(\n\t\t\t\t\t\t(child) => child.selected,\n\t\t\t\t\t);\n\t\t\t\t\tif (selectedChildren.length) {\n\t\t\t\t\t\tselectedOptions.push({\n\t\t\t\t\t\t\t...singleOption,\n\t\t\t\t\t\t\tchildren: selectedChildren,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (singleOption.selected) {\n\t\t\t\t\tselectedOptions.push({ ...option });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn selectedOptions;\n\t};\n\n\t// Count current selections for max selection limit\n\tconst getCurrentSelectionCount = (data: DropdownOption[]) =>\n\t\tgetSelectionLeaves(data, nestedChildren).filter((leaf) => leaf.selected)\n\t\t\t.length;\n\n\t// Check if max selections limit is reached\n\tconst isMaxSelectionsReached = (data: DropdownOption[]) => {\n\t\tif (!isMultiSelect || (!maxSelections && maxSelections !== 0)) return false;\n\t\treturn getCurrentSelectionCount(data) >= maxSelections;\n\t};\n\n\t/** Reads onSearch from ref so it stays stable ([] deps). No-ops when onSearchRef.current is undefined. */\n\tconst performSearch = useCallback(async (searchKey: string) => {\n\t\tconst onSearchFn = onSearchRef.current;\n\t\tif (!searchKey || !onSearchFn) return;\n\n\t\tconst selectedIds: (string | number)[] = [];\n\t\titerateOnOptionsRaw(latestDropdownOptionsRef.current, (option) => {\n\t\t\tif (option.selected && !selectedIds.includes(option.value)) {\n\t\t\t\tselectedIds.push(option.value);\n\t\t\t}\n\t\t});\n\n\t\ttry {\n\t\t\tconst response = await onSearchFn(searchKey);\n\t\t\tsetSearchError(undefined);\n\t\t\tif (response) {\n\t\t\t\tconst updatedResponseData = response.map((option) => {\n\t\t\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\t\t\tconst groupedOption = option as GroupedOption;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...groupedOption,\n\t\t\t\t\t\t\toptions: groupedOption.options.map((op) => ({\n\t\t\t\t\t\t\t\t...op,\n\t\t\t\t\t\t\t\tselected: selectedIds.includes(op.value),\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tselected: selectedIds.includes((option as SingleOption).value),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tsetSearchedOptions([...updatedResponseData]);\n\t\t\t} else {\n\t\t\t\tsetSearchedOptions([]);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetSearchedOptions([]);\n\t\t\tsetSearchError(\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: 'Something went wrong while fetching the list. Please try again',\n\t\t\t);\n\t\t}\n\t}, []);\n\n\t/** Independent of onSearch so debounce is stable when callers pass inline functions. Pending searches are preserved across parent re-renders. performSearch no-ops when onSearchRef.current is undefined. */\n\tconst debouncedSearch = useMemo(\n\t\t() => debounce(performSearch, 300),\n\t\t[performSearch],\n\t);\n\n\tuseEffect(() => () => debouncedSearch?.cancel(), [debouncedSearch]);\n\n\tfunction search(searchKey: string) {\n\t\tsetSearchedString(searchKey);\n\t\tsetSearchedOptions([]);\n\t\tsetSearchError(undefined);\n\n\t\tif (!searchKey) {\n\t\t\tdebouncedSearch?.cancel();\n\t\t\treturn;\n\t\t}\n\n\t\tdebouncedSearch(searchKey);\n\t}\n\n\tfunction retrySearch() {\n\t\tif (searchedString) {\n\t\t\tsetSearchError(undefined);\n\t\t\tperformSearch(searchedString);\n\t\t}\n\t}\n\n\t/**\n\t * wrapper to prepare option for onSelect\n\t * for single select, this will call the onClose handler ,\n\t * for multiselect, it will do state update for options list\n\t * \t\tto make any option select,\n\t * \t\t\t\tonApplyHandler({ label, value: selected: true })\n\t * to deselect any option\n\t * \t\t\t\tonApplyHandler({ label, value: selected: false })\n\t * @param optionSelect\n\t */\n\tfunction onApplyHandler(optionSelect: SingleOption, returnOnly?: boolean) {\n\t\tif (!isMultiSelect) {\n\t\t\tonSelect?.(optionSelect);\n\t\t} else {\n\t\t\t// Check if trying to select and max selections is reached\n\t\t\tif (\n\t\t\t\toptionSelect.selected &&\n\t\t\t\tmaxSelections &&\n\t\t\t\tisMaxSelectionsReached(dropdownOptions)\n\t\t\t) {\n\t\t\t\t// Max selections reached, don't allow new selections\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (searchedOptions.length && searchedString && onSearch) {\n\t\t\t\t/** Search mode */\n\t\t\t\t/**\n\t\t\t\t * on selected, push it to dropdown options,\n\t\t\t\t * on un-select, remove from dropdown option\n\t\t\t\t */\n\n\t\t\t\tif (optionSelect.selected) {\n\t\t\t\t\t// Check max selections for search mode too\n\t\t\t\t\tif (maxSelections && isMaxSelectionsReached(dropdownOptions)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t/** check if already there or not,\n\t\t\t\t\t * if yes, just update\n\t\t\t\t\t * else ,\n\t\t\t\t\t * \tappend\n\t\t\t\t\t */\n\n\t\t\t\t\tlet alreadyPresentInInitialOptions = false;\n\t\t\t\t\tconst currList = iterateOnOptions(\n\t\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t\t{ selected: optionSelect.selected } as Partial<SingleOption>,\n\t\t\t\t\t\t(optionForValidation: SingleOption) => {\n\t\t\t\t\t\t\tif (optionForValidation.value === optionSelect.value) {\n\t\t\t\t\t\t\t\talreadyPresentInInitialOptions = true;\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnestedChildren,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!alreadyPresentInInitialOptions) {\n\t\t\t\t\t\tcurrList.push(optionSelect);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (returnOnly) {\n\t\t\t\t\t\treturn [...currList];\n\t\t\t\t\t}\n\t\t\t\t\tsetDropdownOptions([...currList]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(currList);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t/** un-select,\n\t\t\t\t\t * if already present in initial data,\n\t\t\t\t\t * yes, just update\n\t\t\t\t\t * else,\n\t\t\t\t\t * \tremove\n\t\t\t\t\t */\n\n\t\t\t\t\tlet alreadyPresentInInitialOptions = false;\n\t\t\t\t\tlet currList = iterateOnOptions(\n\t\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t\t{ selected: optionSelect.selected } as Partial<SingleOption>,\n\t\t\t\t\t\t(optionForValidation: SingleOption) => {\n\t\t\t\t\t\t\tif (optionForValidation.value === optionSelect.value) {\n\t\t\t\t\t\t\t\talreadyPresentInInitialOptions = true;\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnestedChildren,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (alreadyPresentInInitialOptions) {\n\t\t\t\t\t\tcurrList = currList.filter((option) => {\n\t\t\t\t\t\t\tif ((option as SingleOption).value === optionSelect.value) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (returnOnly) {\n\t\t\t\t\t\treturn [...currList];\n\t\t\t\t\t}\n\t\t\t\t\tsetDropdownOptions([...currList]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(currList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst currList = iterateOnOptions(\n\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t{ selected: optionSelect.selected } as Partial<SingleOption>,\n\t\t\t\t\t(optionForValidation: SingleOption) =>\n\t\t\t\t\t\toptionForValidation.value === optionSelect.value,\n\t\t\t\t\tnestedChildren,\n\t\t\t\t);\n\n\t\t\t\tif (returnOnly) {\n\t\t\t\t\treturn [...currList];\n\t\t\t\t}\n\t\t\t\tsetDropdownOptions([...currList]);\n\t\t\t\tif (version === '2.0') {\n\t\t\t\t\tonMultiSelectApply(currList);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction selectAllForSearch(select: boolean) {\n\t\t// const allSearchedValues = searchedOptions.map(option => option.value);\n\t\tlet clonedDropdownOptions = [...dropdownOptions];\n\n\t\tif (select) {\n\t\t\tsearchedOptions.forEach((option) => {\n\t\t\t\tlet found = false;\n\t\t\t\tclonedDropdownOptions = clonedDropdownOptions.map((dOption) => {\n\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof singleOption.value !== 'undefined' &&\n\t\t\t\t\t\tsingleOption.value === (dOption as SingleOption).value\n\t\t\t\t\t) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...dOption,\n\t\t\t\t\t\t\tselected: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn dOption;\n\t\t\t\t});\n\n\t\t\t\tif (!found) {\n\t\t\t\t\tclonedDropdownOptions.push({ ...option, selected: true });\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchedOptions.forEach((option) => {\n\t\t\t\tclonedDropdownOptions = clonedDropdownOptions.map((dOption) => {\n\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof singleOption.value !== 'undefined' &&\n\t\t\t\t\t\tsingleOption.value === (dOption as SingleOption).value\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...dOption,\n\t\t\t\t\t\t\tselected: false,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn dOption;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tsetDropdownOptions([...clonedDropdownOptions]);\n\t\tif (version === '2.0') {\n\t\t\tonMultiSelectApply(clonedDropdownOptions);\n\t\t}\n\t}\n\n\tfunction selectAllForSearchWithLimit(select: boolean) {\n\t\tlet clonedDropdownOptions = [...dropdownOptions];\n\n\t\tif (select && maxSelections && maxSelections > 0) {\n\t\t\tconst currentCount = getCurrentSelectionCount(clonedDropdownOptions);\n\t\t\tconst remainingSlots = maxSelections - currentCount;\n\n\t\t\tif (remainingSlots <= 0) {\n\t\t\t\t// Already at max, don't select any more\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet selectedCount = 0;\n\t\t\tsearchedOptions.forEach((option) => {\n\t\t\t\tif (selectedCount >= remainingSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet found = false;\n\t\t\t\tclonedDropdownOptions = clonedDropdownOptions.map((dOption) => {\n\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\t// Skip if already selected\n\t\t\t\t\tif ((dOption as SingleOption).selected) {\n\t\t\t\t\t\treturn dOption;\n\t\t\t\t\t}\n\t\t\t\t\t// Skip if disabled\n\t\t\t\t\tif ((dOption as SingleOption).disabled) {\n\t\t\t\t\t\treturn dOption;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof singleOption.value !== 'undefined' &&\n\t\t\t\t\t\tsingleOption.value === (dOption as SingleOption).value\n\t\t\t\t\t) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...dOption,\n\t\t\t\t\t\t\tselected: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn dOption;\n\t\t\t\t});\n\n\t\t\t\tif (!found && selectedCount < remainingSlots) {\n\t\t\t\t\tconst newOption = option as SingleOption;\n\t\t\t\t\tif (!newOption.disabled) {\n\t\t\t\t\t\tclonedDropdownOptions.push({ ...option, selected: true });\n\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetDropdownOptions([...clonedDropdownOptions]);\n\t\t\tif (version === '2.0') {\n\t\t\t\tonMultiSelectApply(clonedDropdownOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction selectAllHandler(newState: SelectAllCheckboxState) {\n\t\tif (searchedOptions.length && searchedString && onSearch) {\n\t\t\tif (newState === 'selectAll') {\n\t\t\t\tselectAllForSearchWithLimit(true);\n\t\t\t} else {\n\t\t\t\tselectAllForSearch(false);\n\t\t\t}\n\t\t} else {\n\t\t\tif (newState === 'selectAll') {\n\t\t\t\tif (maxSelections && maxSelections > 0) {\n\t\t\t\t\t// Only select up to maxSelections limit\n\t\t\t\t\tconst currentCount = getCurrentSelectionCount(dropdownOptions);\n\t\t\t\t\tconst remainingSlots = maxSelections - currentCount;\n\n\t\t\t\t\tif (remainingSlots <= 0) {\n\t\t\t\t\t\t// Already at max, don't select any more\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet selectedCount = 0;\n\t\t\t\t\tconst newOptions = dropdownOptions.map((option) => {\n\t\t\t\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\t\t\t\t// Handle grouped options\n\t\t\t\t\t\t\tconst groupedOption = option as GroupedOption;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...groupedOption,\n\t\t\t\t\t\t\t\toptions: groupedOption.options.map((op) => {\n\t\t\t\t\t\t\t\t\t// Skip disabled options\n\t\t\t\t\t\t\t\t\tif (op.disabled) {\n\t\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Check if already selected\n\t\t\t\t\t\t\t\t\tif (op.selected) {\n\t\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Check search filter\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsearchedString &&\n\t\t\t\t\t\t\t\t\t\t!op.label\n\t\t\t\t\t\t\t\t\t\t\t?.toLowerCase()\n\t\t\t\t\t\t\t\t\t\t\t.includes(searchedString.toLowerCase())\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Select if we have remaining slots\n\t\t\t\t\t\t\t\t\tif (selectedCount < remainingSlots) {\n\t\t\t\t\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t\t\t\t\t\treturn { ...op, selected: true };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\t\t\t// Skip disabled options\n\t\t\t\t\t\t\tif (singleOption.disabled) {\n\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Check if already selected\n\t\t\t\t\t\t\tif (singleOption.selected) {\n\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Check search filter\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tsearchedString &&\n\t\t\t\t\t\t\t\t!singleOption.label\n\t\t\t\t\t\t\t\t\t?.toLowerCase()\n\t\t\t\t\t\t\t\t\t.includes(searchedString.toLowerCase())\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Select if we have remaining slots\n\t\t\t\t\t\t\tif (selectedCount < remainingSlots) {\n\t\t\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t\t\t\treturn { ...option, selected: true };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tsetDropdownOptions([...newOptions]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(newOptions);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// No max selection limit, select all\n\t\t\t\t\tconst newOptions = iterateOnOptions(\n\t\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t\t{ selected: true },\n\t\t\t\t\t\t(option) =>\n\t\t\t\t\t\t\tsearchedString\n\t\t\t\t\t\t\t\t? option.label\n\t\t\t\t\t\t\t\t\t\t?.toLowerCase()\n\t\t\t\t\t\t\t\t\t\t.includes(searchedString.toLowerCase()) && !option.disabled\n\t\t\t\t\t\t\t\t: !option.disabled,\n\t\t\t\t\t\tnestedChildren,\n\t\t\t\t\t);\n\t\t\t\t\tsetDropdownOptions([...newOptions]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(newOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (newState === 'notSelected') {\n\t\t\t\tconst newOptions = iterateOnOptions(\n\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t{ selected: false },\n\t\t\t\t\t(option) => !option.disabled,\n\t\t\t\t\tnestedChildren,\n\t\t\t\t);\n\t\t\t\tsetDropdownOptions([...newOptions]);\n\t\t\t\tif (version === '2.0') {\n\t\t\t\t\tonMultiSelectApply(newOptions);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onMultiSelectClear() {\n\t\tconst newOptions = iterateOnOptions(\n\t\t\tdropdownOptions,\n\t\t\t{ selected: false },\n\t\t\tundefined,\n\t\t\tnestedChildren,\n\t\t);\n\t\tsetDropdownOptions([...newOptions]);\n\t\tif (version === '2.0') {\n\t\t\tonMultiSelectApply(newOptions);\n\t\t}\n\t}\n\n\tfunction onFreeFormSelect(selected: boolean) {\n\t\tif (!isMultiSelect) {\n\t\t\tonApplyHandler({\n\t\t\t\tlabel: searchedString,\n\t\t\t\tvalue: searchedString,\n\t\t\t\tisFreeForm: true,\n\t\t\t\tselected: true,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst updatedList = dropdownOptions.map((option) =>\n\t\t\t(option as GroupedOption).options\n\t\t\t\t? option\n\t\t\t\t: {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tselected:\n\t\t\t\t\t\t\t/** free form check */\n\t\t\t\t\t\t\toption.label === searchedString &&\n\t\t\t\t\t\t\t(option as SingleOption).value === searchedString\n\t\t\t\t\t\t\t\t? /** to mark as selected or not */\n\t\t\t\t\t\t\t\t selected\n\t\t\t\t\t\t\t\t: (option as SingleOption).selected,\n\t\t\t\t },\n\t\t);\n\n\t\tif (selected) {\n\t\t\tif (\n\t\t\t\t!updatedList.some(\n\t\t\t\t\t(option) =>\n\t\t\t\t\t\toption.label === searchedString &&\n\t\t\t\t\t\t(option as SingleOption).value === searchedString,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tupdatedList.unshift({\n\t\t\t\t\tlabel: searchedString,\n\t\t\t\t\tvalue: searchedString,\n\t\t\t\t\tisFreeForm: true,\n\t\t\t\t\tselected: true,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tsetDropdownOptions([...updatedList]);\n\t\tif (version === '2.0') {\n\t\t\tonMultiSelectApply(updatedList);\n\t\t}\n\t}\n\n\t/**\n\t * This is called when appy button is called,\n\t * here iterate and pick all options where selected if true.\n\t */\n\tfunction onMultiSelectApply(options?: DropdownOption[]) {\n\t\tconst optionsToSend: DropdownOption[] = getSelectedOptions(\n\t\t\toptions ?? latestDropdownOptionsRef.current,\n\t\t);\n\n\t\tonSelect?.([...optionsToSend]);\n\t}\n\n\treturn {\n\t\tlatestDropdownOptionsRef,\n\t\tdropdownOptions,\n\t\tsearch,\n\t\tsearchedString,\n\t\tsearchedOptions,\n\t\tsearchError,\n\t\tretrySearch,\n\t\tonApplyHandler,\n\t\tselectAllHandler,\n\t\tonMultiSelectClear,\n\t\tonFreeFormSelect,\n\t\tonMultiSelectApply,\n\t\tgetSelectedOptions,\n\t\tgetCurrentSelectionCount,\n\t\tisMaxSelectionsReached,\n\t\tmaxSelections,\n\t};\n};\n"],"names":["useDropdown","version","options","onSelect","skipSorting","isMultiSelect","onSearch","disableOtherSearchedOption","disableSearchedOptionExcept","maxSelections","childrenLayout","nestedChildren","dropdownOptions","setDropdownOptions","useState","searchedOptions","setSearchedOptions","searchedString","setSearchedString","searchError","setSearchError","latestDropdownOptionsRef","useRef","onSearchRef","useEffect","searchedOptionsClone","dropdownOptionFlat","option","op","selectedDropdownOption","dropdownOption","writeOptions","getSelectedOptions","data","selectedOptions","groupedOptions","singleOption","selectedChildren","child","getCurrentSelectionCount","getSelectionLeaves","leaf","isMaxSelectionsReached","performSearch","useCallback","searchKey","onSearchFn","selectedIds","iterateOnOptionsRaw","response","updatedResponseData","groupedOption","error","debouncedSearch","useMemo","debounce","search","retrySearch","onApplyHandler","optionSelect","returnOnly","alreadyPresentInInitialOptions","currList","iterateOnOptions","optionForValidation","onMultiSelectApply","selectAllForSearch","select","clonedDropdownOptions","dOption","selectAllForSearchWithLimit","currentCount","remainingSlots","selectedCount","found","selectAllHandler","newState","newOptions","onMultiSelectClear","onFreeFormSelect","selected","updatedList","optionsToSend"],"mappings":"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"}
1
+ {"version":3,"file":"useDropdown.js","sources":["../../../../../src/components/dropdown/hooks/useDropdown.tsx"],"sourcesContent":["import debounce from 'lodash/debounce';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { SelectAllCheckboxState } from '../OpenedDropdown/components/menu/SelectAllMenu';\nimport {\n\titerateOnOptions,\n\titerateOnOptionsRaw,\n} from '../OpenedDropdown/utils/iterationOnOptions';\nimport { DropdownOption, GroupedOption, SingleOption } from '../type';\n\nexport const useDropdown = (\n\tversion = '1.0',\n\toptions: DropdownOption[],\n\tonSelect: ((option: DropdownOption | DropdownOption[]) => void) | undefined,\n\tskipSorting?: boolean,\n\tisMultiSelect?: boolean,\n\tonSearch?: (searchKey: string) => Promise<DropdownOption[]>,\n\tdisableOtherSearchedOption?: boolean,\n\tdisableSearchedOptionExcept: string[] = [],\n\tmaxSelections?: number,\n) => {\n\tconst [dropdownOptions, setDropdownOptions] = useState(options ?? []);\n\tconst [searchedOptions, setSearchedOptions] = useState<DropdownOption[]>([]);\n\tconst [searchedString, setSearchedString] = useState('');\n\tconst [searchError, setSearchError] = useState<string | undefined>(undefined);\n\tconst latestDropdownOptionsRef = useRef(dropdownOptions);\n\t/** Store latest onSearch so performSearch/debouncedSearch stay stable when parent re-renders with new callback reference. */\n\tconst onSearchRef = useRef(onSearch);\n\n\tuseEffect(() => {\n\t\tonSearchRef.current = onSearch;\n\t}, [onSearch]);\n\n\tuseEffect(() => {\n\t\tlatestDropdownOptionsRef.current = dropdownOptions;\n\n\t\tif (searchedOptions.length && searchedString && onSearch) {\n\t\t\tlet searchedOptionsClone = [...searchedOptions] as SingleOption[];\n\t\t\tconst dropdownOptionFlat = dropdownOptions\n\t\t\t\t.map((option) => {\n\t\t\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\t\t\treturn (option as GroupedOption).options.map((op) => ({\n\t\t\t\t\t\t\tvalue: op.value,\n\t\t\t\t\t\t\tselected: op.selected,\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t\tconst op = option as SingleOption;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: op.value,\n\t\t\t\t\t\tselected: op.selected,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.flat();\n\n\t\t\tsearchedOptionsClone = searchedOptionsClone.map((option) => {\n\t\t\t\tconst selectedDropdownOption = dropdownOptionFlat.find(\n\t\t\t\t\t(dropdownOption) => {\n\t\t\t\t\t\tif (option.value === dropdownOption.value) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tif (selectedDropdownOption) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tselected: selectedDropdownOption.selected,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn option;\n\t\t\t});\n\n\t\t\t// disable other options except selected in searched options\n\t\t\tif (disableOtherSearchedOption) {\n\t\t\t\tsearchedOptionsClone = searchedOptionsClone.map((option) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tdisabled: !disableSearchedOptionExcept.includes(option.value),\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (isMultiSelect && !skipSorting) {\n\t\t\t\tsetSearchedOptions([\n\t\t\t\t\t...searchedOptionsClone.sort((option) =>\n\t\t\t\t\t\t(option as SingleOption).selected ? -1 : 1,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tsetSearchedOptions([...searchedOptionsClone]);\n\t\t\t}\n\t\t}\n\t}, [dropdownOptions]);\n\n\tuseEffect(() => {\n\t\tif (options) {\n\t\t\tconst writeOptions = [...options];\n\t\t\tif (isMultiSelect && !skipSorting) {\n\t\t\t\tsetDropdownOptions([\n\t\t\t\t\t...writeOptions.sort((option) =>\n\t\t\t\t\t\t(option as SingleOption).selected ? -1 : 1,\n\t\t\t\t\t),\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tsetDropdownOptions([...writeOptions]);\n\t\t\t}\n\t\t}\n\t}, [options]);\n\n\tconst getSelectedOptions = (data: DropdownOption[]) => {\n\t\tconst selectedOptions: DropdownOption[] = [];\n\t\tdata.forEach((option) => {\n\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\tconst groupedOptions = (option as GroupedOption).options.filter(\n\t\t\t\t\t(op) => op.selected === true,\n\t\t\t\t);\n\t\t\t\tselectedOptions.push({\n\t\t\t\t\t...option,\n\t\t\t\t\toptions: [...groupedOptions],\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif ((option as SingleOption).selected) {\n\t\t\t\t\tselectedOptions.push({ ...option });\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn selectedOptions;\n\t};\n\n\t// Count current selections for max selection limit\n\tconst getCurrentSelectionCount = (data: DropdownOption[]) => {\n\t\tlet count = 0;\n\t\tdata.forEach((option) => {\n\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\tcount += (option as GroupedOption).options.filter(\n\t\t\t\t\t(op) => op.selected === true,\n\t\t\t\t).length;\n\t\t\t} else {\n\t\t\t\tif ((option as SingleOption).selected) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn count;\n\t};\n\n\t// Check if max selections limit is reached\n\tconst isMaxSelectionsReached = (data: DropdownOption[]) => {\n\t\tif (!isMultiSelect || (!maxSelections && maxSelections !== 0)) return false;\n\t\treturn getCurrentSelectionCount(data) >= maxSelections;\n\t};\n\n\t/** Reads onSearch from ref so it stays stable ([] deps). No-ops when onSearchRef.current is undefined. */\n\tconst performSearch = useCallback(async (searchKey: string) => {\n\t\tconst onSearchFn = onSearchRef.current;\n\t\tif (!searchKey || !onSearchFn) return;\n\n\t\tconst selectedIds: (string | number)[] = [];\n\t\titerateOnOptionsRaw(latestDropdownOptionsRef.current, (option) => {\n\t\t\tif (option.selected && !selectedIds.includes(option.value)) {\n\t\t\t\tselectedIds.push(option.value);\n\t\t\t}\n\t\t});\n\n\t\ttry {\n\t\t\tconst response = await onSearchFn(searchKey);\n\t\t\tsetSearchError(undefined);\n\t\t\tif (response) {\n\t\t\t\tconst updatedResponseData = response.map((option) => {\n\t\t\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\t\t\tconst groupedOption = option as GroupedOption;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...groupedOption,\n\t\t\t\t\t\t\toptions: groupedOption.options.map((op) => ({\n\t\t\t\t\t\t\t\t...op,\n\t\t\t\t\t\t\t\tselected: selectedIds.includes(op.value),\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tselected: selectedIds.includes((option as SingleOption).value),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tsetSearchedOptions([...updatedResponseData]);\n\t\t\t} else {\n\t\t\t\tsetSearchedOptions([]);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tsetSearchedOptions([]);\n\t\t\tsetSearchError(\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: 'Something went wrong while fetching the list. Please try again',\n\t\t\t);\n\t\t}\n\t}, []);\n\n\t/** Independent of onSearch so debounce is stable when callers pass inline functions. Pending searches are preserved across parent re-renders. performSearch no-ops when onSearchRef.current is undefined. */\n\tconst debouncedSearch = useMemo(\n\t\t() => debounce(performSearch, 300),\n\t\t[performSearch],\n\t);\n\n\tuseEffect(() => () => debouncedSearch?.cancel(), [debouncedSearch]);\n\n\tfunction search(searchKey: string) {\n\t\tsetSearchedString(searchKey);\n\t\tsetSearchedOptions([]);\n\t\tsetSearchError(undefined);\n\n\t\tif (!searchKey) {\n\t\t\tdebouncedSearch?.cancel();\n\t\t\treturn;\n\t\t}\n\n\t\tdebouncedSearch(searchKey);\n\t}\n\n\tfunction retrySearch() {\n\t\tif (searchedString) {\n\t\t\tsetSearchError(undefined);\n\t\t\tperformSearch(searchedString);\n\t\t}\n\t}\n\n\t/**\n\t * wrapper to prepare option for onSelect\n\t * for single select, this will call the onClose handler ,\n\t * for multiselect, it will do state update for options list\n\t * \t\tto make any option select,\n\t * \t\t\t\tonApplyHandler({ label, value: selected: true })\n\t * to deselect any option\n\t * \t\t\t\tonApplyHandler({ label, value: selected: false })\n\t * @param optionSelect\n\t */\n\tfunction onApplyHandler(optionSelect: SingleOption, returnOnly?: boolean) {\n\t\tif (!isMultiSelect) {\n\t\t\tonSelect?.(optionSelect);\n\t\t} else {\n\t\t\t// Check if trying to select and max selections is reached\n\t\t\tif (\n\t\t\t\toptionSelect.selected &&\n\t\t\t\tmaxSelections &&\n\t\t\t\tisMaxSelectionsReached(dropdownOptions)\n\t\t\t) {\n\t\t\t\t// Max selections reached, don't allow new selections\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (searchedOptions.length && searchedString && onSearch) {\n\t\t\t\t/** Search mode */\n\t\t\t\t/**\n\t\t\t\t * on selected, push it to dropdown options,\n\t\t\t\t * on un-select, remove from dropdown option\n\t\t\t\t */\n\n\t\t\t\tif (optionSelect.selected) {\n\t\t\t\t\t// Check max selections for search mode too\n\t\t\t\t\tif (maxSelections && isMaxSelectionsReached(dropdownOptions)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t/** check if already there or not,\n\t\t\t\t\t * if yes, just update\n\t\t\t\t\t * else ,\n\t\t\t\t\t * \tappend\n\t\t\t\t\t */\n\n\t\t\t\t\tlet alreadyPresentInInitialOptions = false;\n\t\t\t\t\tconst currList = iterateOnOptions(\n\t\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t\t{ selected: optionSelect.selected } as Partial<SingleOption>,\n\t\t\t\t\t\t(optionForValidation: SingleOption) => {\n\t\t\t\t\t\t\tif (optionForValidation.value === optionSelect.value) {\n\t\t\t\t\t\t\t\talreadyPresentInInitialOptions = true;\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!alreadyPresentInInitialOptions) {\n\t\t\t\t\t\tcurrList.push(optionSelect);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (returnOnly) {\n\t\t\t\t\t\treturn [...currList];\n\t\t\t\t\t}\n\t\t\t\t\tsetDropdownOptions([...currList]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(currList);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t/** un-select,\n\t\t\t\t\t * if already present in initial data,\n\t\t\t\t\t * yes, just update\n\t\t\t\t\t * else,\n\t\t\t\t\t * \tremove\n\t\t\t\t\t */\n\n\t\t\t\t\tlet alreadyPresentInInitialOptions = false;\n\t\t\t\t\tlet currList = iterateOnOptions(\n\t\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t\t{ selected: optionSelect.selected } as Partial<SingleOption>,\n\t\t\t\t\t\t(optionForValidation: SingleOption) => {\n\t\t\t\t\t\t\tif (optionForValidation.value === optionSelect.value) {\n\t\t\t\t\t\t\t\talreadyPresentInInitialOptions = true;\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\n\t\t\t\t\tif (alreadyPresentInInitialOptions) {\n\t\t\t\t\t\tcurrList = currList.filter((option) => {\n\t\t\t\t\t\t\tif (option.value === optionSelect.value) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (returnOnly) {\n\t\t\t\t\t\treturn [...currList];\n\t\t\t\t\t}\n\t\t\t\t\tsetDropdownOptions([...currList]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(currList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst currList = iterateOnOptions(\n\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t{ selected: optionSelect.selected } as Partial<SingleOption>,\n\t\t\t\t\t(optionForValidation: SingleOption) =>\n\t\t\t\t\t\toptionForValidation.value === optionSelect.value,\n\t\t\t\t);\n\n\t\t\t\tif (returnOnly) {\n\t\t\t\t\treturn [...currList];\n\t\t\t\t}\n\t\t\t\tsetDropdownOptions([...currList]);\n\t\t\t\tif (version === '2.0') {\n\t\t\t\t\tonMultiSelectApply(currList);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction selectAllForSearch(select: boolean) {\n\t\t// const allSearchedValues = searchedOptions.map(option => option.value);\n\t\tlet clonedDropdownOptions = [...dropdownOptions];\n\n\t\tif (select) {\n\t\t\tsearchedOptions.forEach((option) => {\n\t\t\t\tlet found = false;\n\t\t\t\tclonedDropdownOptions = clonedDropdownOptions.map((dOption) => {\n\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof singleOption.value !== 'undefined' &&\n\t\t\t\t\t\tsingleOption.value === (dOption as SingleOption).value\n\t\t\t\t\t) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...dOption,\n\t\t\t\t\t\t\tselected: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn dOption;\n\t\t\t\t});\n\n\t\t\t\tif (!found) {\n\t\t\t\t\tclonedDropdownOptions.push({ ...option, selected: true });\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchedOptions.forEach((option) => {\n\t\t\t\tclonedDropdownOptions = clonedDropdownOptions.map((dOption) => {\n\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof singleOption.value !== 'undefined' &&\n\t\t\t\t\t\tsingleOption.value === (dOption as SingleOption).value\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...dOption,\n\t\t\t\t\t\t\tselected: false,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn dOption;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tsetDropdownOptions([...clonedDropdownOptions]);\n\t\tif (version === '2.0') {\n\t\t\tonMultiSelectApply(clonedDropdownOptions);\n\t\t}\n\t}\n\n\tfunction selectAllForSearchWithLimit(select: boolean) {\n\t\tlet clonedDropdownOptions = [...dropdownOptions];\n\n\t\tif (select && maxSelections && maxSelections > 0) {\n\t\t\tconst currentCount = getCurrentSelectionCount(clonedDropdownOptions);\n\t\t\tconst remainingSlots = maxSelections - currentCount;\n\n\t\t\tif (remainingSlots <= 0) {\n\t\t\t\t// Already at max, don't select any more\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet selectedCount = 0;\n\t\t\tsearchedOptions.forEach((option) => {\n\t\t\t\tif (selectedCount >= remainingSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet found = false;\n\t\t\t\tclonedDropdownOptions = clonedDropdownOptions.map((dOption) => {\n\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\t// Skip if already selected\n\t\t\t\t\tif ((dOption as SingleOption).selected) {\n\t\t\t\t\t\treturn dOption;\n\t\t\t\t\t}\n\t\t\t\t\t// Skip if disabled\n\t\t\t\t\tif ((dOption as SingleOption).disabled) {\n\t\t\t\t\t\treturn dOption;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof singleOption.value !== 'undefined' &&\n\t\t\t\t\t\tsingleOption.value === (dOption as SingleOption).value\n\t\t\t\t\t) {\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...dOption,\n\t\t\t\t\t\t\tselected: true,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn dOption;\n\t\t\t\t});\n\n\t\t\t\tif (!found && selectedCount < remainingSlots) {\n\t\t\t\t\tconst newOption = option as SingleOption;\n\t\t\t\t\tif (!newOption.disabled) {\n\t\t\t\t\t\tclonedDropdownOptions.push({ ...option, selected: true });\n\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetDropdownOptions([...clonedDropdownOptions]);\n\t\t\tif (version === '2.0') {\n\t\t\t\tonMultiSelectApply(clonedDropdownOptions);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction selectAllHandler(newState: SelectAllCheckboxState) {\n\t\tif (searchedOptions.length && searchedString && onSearch) {\n\t\t\tif (newState === 'selectAll') {\n\t\t\t\tselectAllForSearchWithLimit(true);\n\t\t\t} else {\n\t\t\t\tselectAllForSearch(false);\n\t\t\t}\n\t\t} else {\n\t\t\tif (newState === 'selectAll') {\n\t\t\t\tif (maxSelections && maxSelections > 0) {\n\t\t\t\t\t// Only select up to maxSelections limit\n\t\t\t\t\tconst currentCount = getCurrentSelectionCount(dropdownOptions);\n\t\t\t\t\tconst remainingSlots = maxSelections - currentCount;\n\n\t\t\t\t\tif (remainingSlots <= 0) {\n\t\t\t\t\t\t// Already at max, don't select any more\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet selectedCount = 0;\n\t\t\t\t\tconst newOptions = dropdownOptions.map((option) => {\n\t\t\t\t\t\tif ((option as GroupedOption).options) {\n\t\t\t\t\t\t\t// Handle grouped options\n\t\t\t\t\t\t\tconst groupedOption = option as GroupedOption;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...groupedOption,\n\t\t\t\t\t\t\t\toptions: groupedOption.options.map((op) => {\n\t\t\t\t\t\t\t\t\t// Skip disabled options\n\t\t\t\t\t\t\t\t\tif (op.disabled) {\n\t\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Check if already selected\n\t\t\t\t\t\t\t\t\tif (op.selected) {\n\t\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Check search filter\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsearchedString &&\n\t\t\t\t\t\t\t\t\t\t!op.label\n\t\t\t\t\t\t\t\t\t\t\t?.toLowerCase()\n\t\t\t\t\t\t\t\t\t\t\t.includes(searchedString.toLowerCase())\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Select if we have remaining slots\n\t\t\t\t\t\t\t\t\tif (selectedCount < remainingSlots) {\n\t\t\t\t\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t\t\t\t\t\treturn { ...op, selected: true };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn op;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst singleOption = option as SingleOption;\n\t\t\t\t\t\t\t// Skip disabled options\n\t\t\t\t\t\t\tif (singleOption.disabled) {\n\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Check if already selected\n\t\t\t\t\t\t\tif (singleOption.selected) {\n\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Check search filter\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tsearchedString &&\n\t\t\t\t\t\t\t\t!singleOption.label\n\t\t\t\t\t\t\t\t\t?.toLowerCase()\n\t\t\t\t\t\t\t\t\t.includes(searchedString.toLowerCase())\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Select if we have remaining slots\n\t\t\t\t\t\t\tif (selectedCount < remainingSlots) {\n\t\t\t\t\t\t\t\tselectedCount++;\n\t\t\t\t\t\t\t\treturn { ...option, selected: true };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tsetDropdownOptions([...newOptions]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(newOptions);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// No max selection limit, select all\n\t\t\t\t\tconst newOptions = iterateOnOptions(\n\t\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t\t{ selected: true },\n\t\t\t\t\t\t(option) =>\n\t\t\t\t\t\t\tsearchedString\n\t\t\t\t\t\t\t\t? option.label\n\t\t\t\t\t\t\t\t\t\t?.toLowerCase()\n\t\t\t\t\t\t\t\t\t\t.includes(searchedString.toLowerCase()) && !option.disabled\n\t\t\t\t\t\t\t\t: !option.disabled,\n\t\t\t\t\t);\n\t\t\t\t\tsetDropdownOptions([...newOptions]);\n\t\t\t\t\tif (version === '2.0') {\n\t\t\t\t\t\tonMultiSelectApply(newOptions);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (newState === 'notSelected') {\n\t\t\t\tconst newOptions = iterateOnOptions(\n\t\t\t\t\tdropdownOptions,\n\t\t\t\t\t{ selected: false },\n\t\t\t\t\t(option) => !option.disabled,\n\t\t\t\t);\n\t\t\t\tsetDropdownOptions([...newOptions]);\n\t\t\t\tif (version === '2.0') {\n\t\t\t\t\tonMultiSelectApply(newOptions);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction onMultiSelectClear() {\n\t\tconst newOptions = iterateOnOptions(dropdownOptions, { selected: false });\n\t\tsetDropdownOptions([...newOptions]);\n\t\tif (version === '2.0') {\n\t\t\tonMultiSelectApply(newOptions);\n\t\t}\n\t}\n\n\tfunction onFreeFormSelect(selected: boolean) {\n\t\tif (!isMultiSelect) {\n\t\t\tonApplyHandler({\n\t\t\t\tlabel: searchedString,\n\t\t\t\tvalue: searchedString,\n\t\t\t\tisFreeForm: true,\n\t\t\t\tselected: true,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst updatedList = dropdownOptions.map((option) =>\n\t\t\t(option as GroupedOption).options\n\t\t\t\t? option\n\t\t\t\t: {\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tselected:\n\t\t\t\t\t\t\t/** free form check */\n\t\t\t\t\t\t\toption.label === searchedString &&\n\t\t\t\t\t\t\t(option as SingleOption).value === searchedString\n\t\t\t\t\t\t\t\t? /** to mark as selected or not */\n\t\t\t\t\t\t\t\t selected\n\t\t\t\t\t\t\t\t: (option as SingleOption).selected,\n\t\t\t\t },\n\t\t);\n\n\t\tif (selected) {\n\t\t\tif (\n\t\t\t\t!updatedList.some(\n\t\t\t\t\t(option) =>\n\t\t\t\t\t\toption.label === searchedString &&\n\t\t\t\t\t\t(option as SingleOption).value === searchedString,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tupdatedList.unshift({\n\t\t\t\t\tlabel: searchedString,\n\t\t\t\t\tvalue: searchedString,\n\t\t\t\t\tisFreeForm: true,\n\t\t\t\t\tselected: true,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tsetDropdownOptions([...updatedList]);\n\t\tif (version === '2.0') {\n\t\t\tonMultiSelectApply(updatedList);\n\t\t}\n\t}\n\n\t/**\n\t * This is called when appy button is called,\n\t * here iterate and pick all options where selected if true.\n\t */\n\tfunction onMultiSelectApply(options?: DropdownOption[]) {\n\t\tconst optionsToSend: DropdownOption[] = getSelectedOptions(\n\t\t\toptions ?? latestDropdownOptionsRef.current,\n\t\t);\n\n\t\tonSelect?.([...optionsToSend]);\n\t}\n\n\treturn {\n\t\tlatestDropdownOptionsRef,\n\t\tdropdownOptions,\n\t\tsearch,\n\t\tsearchedString,\n\t\tsearchedOptions,\n\t\tsearchError,\n\t\tretrySearch,\n\t\tonApplyHandler,\n\t\tselectAllHandler,\n\t\tonMultiSelectClear,\n\t\tonFreeFormSelect,\n\t\tonMultiSelectApply,\n\t\tgetSelectedOptions,\n\t\tgetCurrentSelectionCount,\n\t\tisMaxSelectionsReached,\n\t\tmaxSelections,\n\t};\n};\n"],"names":["useDropdown","version","options","onSelect","skipSorting","isMultiSelect","onSearch","disableOtherSearchedOption","disableSearchedOptionExcept","maxSelections","dropdownOptions","setDropdownOptions","useState","searchedOptions","setSearchedOptions","searchedString","setSearchedString","searchError","setSearchError","latestDropdownOptionsRef","useRef","onSearchRef","useEffect","searchedOptionsClone","dropdownOptionFlat","option","op","selectedDropdownOption","dropdownOption","writeOptions","getSelectedOptions","data","selectedOptions","groupedOptions","getCurrentSelectionCount","count","isMaxSelectionsReached","performSearch","useCallback","searchKey","onSearchFn","selectedIds","iterateOnOptionsRaw","response","updatedResponseData","groupedOption","error","debouncedSearch","useMemo","debounce","search","retrySearch","onApplyHandler","optionSelect","returnOnly","alreadyPresentInInitialOptions","currList","iterateOnOptions","optionForValidation","onMultiSelectApply","selectAllForSearch","select","clonedDropdownOptions","dOption","singleOption","selectAllForSearchWithLimit","currentCount","remainingSlots","selectedCount","found","selectAllHandler","newState","newOptions","onMultiSelectClear","onFreeFormSelect","selected","updatedList","optionsToSend"],"mappings":"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"}