impact-ui 3.7.25 → 4.0.0-alpha.10

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 (465) hide show
  1. package/MIGRATION_GUIDE.md +328 -0
  2. package/README.md +154 -15
  3. package/bin/migrate-image-paths.cjs +127 -0
  4. package/bin/migrate.js +293 -0
  5. package/codemods/component-map.js +153 -0
  6. package/codemods/image-paths-transform.js +69 -0
  7. package/codemods/transform.js +136 -0
  8. package/dist/components/Accordion/index.js +2 -1
  9. package/dist/components/AccordionModern/index.js +2 -1
  10. package/dist/components/Alert/index.js +2 -1
  11. package/dist/components/Avatar/index.js +2 -1
  12. package/dist/components/Badge/filled/filledIconLabelBadges/index.js +2 -1
  13. package/dist/components/Badge/filled/filledOnlyIconBadges/index.js +2 -1
  14. package/dist/components/Badge/filled/filledOnlyLabelBadges/index.js +2 -1
  15. package/dist/components/Badge/index.js +3 -2
  16. package/dist/components/Badge/stroke/strokeIconLabelBadges/index.js +2 -1
  17. package/dist/components/Badge/stroke/strokeOnlyIconBadges/index.js +2 -1
  18. package/dist/components/Badge/stroke/strokeOnlyLabelBadges/index.js +2 -1
  19. package/dist/components/Badge/subtle/subtleIOnlyIconBadges/index.js +2 -1
  20. package/dist/components/Badge/subtle/subtleIconLabelBadges/index.js +2 -1
  21. package/dist/components/Badge/subtle/subtleOnlyLabelBadges/index.js +2 -1
  22. package/dist/components/BottomSheet/index.js +2 -1
  23. package/dist/components/Breadcrumbs/index.js +2 -1
  24. package/dist/components/Button/index.js +2 -1
  25. package/dist/components/ButtonGroup/index.js +2 -1
  26. package/dist/components/Card/index.js +2 -1
  27. package/dist/components/Chart/index.js +2 -1
  28. package/dist/components/Chatbot/index.js +2 -1
  29. package/dist/components/Checkbox/index.js +2 -1
  30. package/dist/components/Chips/index.js +2 -1
  31. package/dist/components/CreateItemFlow/index.js +2 -1
  32. package/dist/components/DatePicker/datePickerDropdown.js +2 -1
  33. package/dist/components/DatePicker/index.js +3 -2
  34. package/dist/components/DateRangePicker/dateRangePickerDropdown.js +2 -1
  35. package/dist/components/DateRangePicker/index.js +3 -2
  36. package/dist/components/DynamicLayout/index.js +2 -1
  37. package/dist/components/EmptyState/EmptyStateImage.d.ts.map +1 -1
  38. package/dist/components/EmptyState/EmptyStateImage.js +3 -2
  39. package/dist/components/EmptyState/index.js +2 -1
  40. package/dist/components/FileUpload/index.js +2 -1
  41. package/dist/components/FilterPanel/index.js +2 -1
  42. package/dist/components/FiltersStrip/index.js +2 -1
  43. package/dist/components/Header/index.js +2 -1
  44. package/dist/components/HomePage/index.js +2 -1
  45. package/dist/components/Input/index.js +2 -1
  46. package/dist/components/Loader/index.js +2 -1
  47. package/dist/components/Menu/IconMenuItem.js +2 -1
  48. package/dist/components/Menu/MenuHeaderInfo.js +2 -1
  49. package/dist/components/Menu/NestedMenuItem.js +2 -1
  50. package/dist/components/Menu/index.js +2 -1
  51. package/dist/components/Menu/nestedMenuItemsFromObject.js +2 -1
  52. package/dist/components/Modal/index.js +2 -1
  53. package/dist/components/Notification/NotificationBody/NotificationList/NotificationList.js +2 -1
  54. package/dist/components/Notification/index.js +2 -1
  55. package/dist/components/Panel/index.js +2 -1
  56. package/dist/components/Popover/index.js +2 -1
  57. package/dist/components/ProgressBar/index.js +2 -1
  58. package/dist/components/Prompt/index.js +2 -1
  59. package/dist/components/RadioButtonGroup/index.js +2 -1
  60. package/dist/components/Select/index.js +2 -1
  61. package/dist/components/Sidebar/index.js +2 -1
  62. package/dist/components/Slider/index.js +2 -1
  63. package/dist/components/Stepper/index.js +2 -1
  64. package/dist/components/Switch/index.js +2 -1
  65. package/dist/components/Table/TableImpl.js +4 -3
  66. package/dist/components/TableChat/EmptyContainer.js +2 -1
  67. package/dist/components/TableChat/TableChatSidePanel.js +2 -1
  68. package/dist/components/TableChat/components/ChatMessageSkeleton/ChatFooterSkeleton.js +2 -1
  69. package/dist/components/TableChat/components/ChatMessageSkeleton/ChatHeaderSkeleton.js +2 -1
  70. package/dist/components/TableChat/components/ChatMessageSkeleton/ChatMessageListSkeleton.js +2 -1
  71. package/dist/components/TableChat/components/ChatMessageSkeleton/ChatSkeleton.js +2 -1
  72. package/dist/components/TableChat/components/TableChatLeftSection/AddChatContainer/AddChatContainer.js +2 -1
  73. package/dist/components/TableChat/components/TableChatLeftSection/TableChatChannelHeader.js +2 -1
  74. package/dist/components/TableChat/components/TableChatRightSection/AvatarGroup/AvatarGroup.js +2 -1
  75. package/dist/components/TableChat/components/TableChatRightSection/ChatDefaultMessageType/ChatDefaultMessageType.js +2 -1
  76. package/dist/components/TableChat/components/TableChatRightSection/ChatDeleteMessageType/ChatDeletedMessageType.js +2 -1
  77. package/dist/components/TableChat/components/TableChatRightSection/ChatHeader/ChatHeader.js +2 -1
  78. package/dist/components/TableChat/components/TableChatRightSection/ChatInput/ChatInput.js +2 -1
  79. package/dist/components/TableChat/components/TableChatRightSection/ChatMessageAvatar/ChatMessageAvatar.js +2 -1
  80. package/dist/components/TableChat/components/TableChatRightSection/ChatMessages/ChatMessage.js +2 -1
  81. package/dist/components/TableChat/components/TableChatRightSection/ChatNotificationSettings/ChatNotificationSettings.js +2 -1
  82. package/dist/components/TableChat/components/TableChatRightSection/DateSeparator/DateSeparator.js +2 -1
  83. package/dist/components/TableChat/components/TableChatRightSection/PinedChatPanel/PinedChatPanel.js +2 -1
  84. package/dist/components/TableChat/components/TableChatRightSection/TableChatRightSection.js +2 -1
  85. package/dist/components/TableChat/components/TextEditor/EditorToolbar.js +2 -1
  86. package/dist/components/TableChat/components/TextEditor/Mention.js +2 -1
  87. package/dist/components/TableChat/components/TextEditor/MentionList.js +2 -1
  88. package/dist/components/Tabs/index.js +2 -1
  89. package/dist/components/Tag/index.js +2 -1
  90. package/dist/components/TagGroup/index.js +2 -1
  91. package/dist/components/TextArea/index.js +2 -1
  92. package/dist/components/Toast/index.js +2 -1
  93. package/dist/components/Tooltip/index.js +2 -1
  94. package/dist/components/common/HelperText/index.js +2 -1
  95. package/dist/components/index.d.ts +0 -1
  96. package/dist/components/index.d.ts.map +1 -1
  97. package/dist/components/index.js +0 -1
  98. package/dist/mcp-component-registry.json +1 -1
  99. package/dist/styles/entry.d.ts +2 -0
  100. package/dist/styles/entry.d.ts.map +1 -0
  101. package/dist/styles/entry.js +1 -0
  102. package/dist/styles/style.css +1 -1
  103. package/eslint-plugin/index.js +91 -0
  104. package/eslint-plugin/rules/no-barrel-import.js +224 -0
  105. package/package.json +153 -89
  106. package/dist/0db32db10ae1525f.svg +0 -9
  107. package/dist/2bc76319b1fa572e.svg +0 -9
  108. package/dist/39d49e4daed1a992.svg +0 -9
  109. package/dist/44beedf64dc29d19.svg +0 -9
  110. package/dist/49a4f914058314f1.svg +0 -9
  111. package/dist/6fc8a59d621a04a1.svg +0 -13
  112. package/dist/78f845dcfc981491.svg +0 -9
  113. package/dist/b31c0c2a19c1c19a.svg +0 -9
  114. package/dist/index.js +0 -308
  115. package/dist/index.js.map +0 -1
  116. package/src/components/Accordion/Accordion.styles.scss +0 -118
  117. package/src/components/Accordion/index.js +0 -104
  118. package/src/components/AccordionModern/AccordionModern.styles.scss +0 -121
  119. package/src/components/AccordionModern/SortableAccordionComp.js +0 -156
  120. package/src/components/AccordionModern/index.js +0 -103
  121. package/src/components/Alert/Alert.styles.scss +0 -131
  122. package/src/components/Alert/index.js +0 -71
  123. package/src/components/Avatar/Avatar.styles.scss +0 -25
  124. package/src/components/Avatar/index.js +0 -58
  125. package/src/components/Badge/Badges.style.scss +0 -55
  126. package/src/components/Badge/filled/filledIconLabelBadges/filledIconLabelBadges.styles.scss +0 -32
  127. package/src/components/Badge/filled/filledIconLabelBadges/index.js +0 -38
  128. package/src/components/Badge/filled/filledOnlyIconBadges/filledOnlyIconBadges.styles.scss +0 -26
  129. package/src/components/Badge/filled/filledOnlyIconBadges/index.js +0 -31
  130. package/src/components/Badge/filled/filledOnlyLabelBadges/filledOnlyLabelBadges.styles.scss +0 -66
  131. package/src/components/Badge/filled/filledOnlyLabelBadges/index.js +0 -31
  132. package/src/components/Badge/filled/index.js +0 -30
  133. package/src/components/Badge/index.js +0 -53
  134. package/src/components/Badge/stroke/index.js +0 -43
  135. package/src/components/Badge/stroke/strokeIconLabelBadges/index.js +0 -38
  136. package/src/components/Badge/stroke/strokeIconLabelBadges/strokeIconLabelBadges.styles.scss +0 -33
  137. package/src/components/Badge/stroke/strokeOnlyIconBadges/index.js +0 -31
  138. package/src/components/Badge/stroke/strokeOnlyIconBadges/strokeOnlyIconBadges.styles.scss +0 -27
  139. package/src/components/Badge/stroke/strokeOnlyLabelBadges/index.js +0 -31
  140. package/src/components/Badge/stroke/strokeOnlyLabelBadges/strokeOnlyLabelBadges.styles.scss +0 -89
  141. package/src/components/Badge/styles.css +0 -52
  142. package/src/components/Badge/subtle/index.js +0 -41
  143. package/src/components/Badge/subtle/subtleIOnlyIconBadges/index.js +0 -31
  144. package/src/components/Badge/subtle/subtleIOnlyIconBadges/subtleIOnlyIconBadges.scss +0 -26
  145. package/src/components/Badge/subtle/subtleIconLabelBadges/index.js +0 -38
  146. package/src/components/Badge/subtle/subtleIconLabelBadges/subtleIconLabelBadges.scss +0 -56
  147. package/src/components/Badge/subtle/subtleOnlyLabelBadges/index.js +0 -31
  148. package/src/components/Badge/subtle/subtleOnlyLabelBadges/subtleOnlyLabelBadges.scss +0 -70
  149. package/src/components/BottomSheet/BottomSheet.styles.scss +0 -46
  150. package/src/components/BottomSheet/index.js +0 -60
  151. package/src/components/Breadcrumbs/Breadcrumbs.styles.scss +0 -65
  152. package/src/components/Breadcrumbs/index.js +0 -121
  153. package/src/components/Button/Button.styles.scss +0 -345
  154. package/src/components/Button/index.js +0 -171
  155. package/src/components/ButtonGroup/ButtonGroup.styles.scss +0 -125
  156. package/src/components/ButtonGroup/index.js +0 -84
  157. package/src/components/Card/Card.styles.scss +0 -33
  158. package/src/components/Card/index.js +0 -21
  159. package/src/components/Chart/Chart.style.scss +0 -142
  160. package/src/components/Chart/index.js +0 -752
  161. package/src/components/ChatBot/bookMarkPanel.js +0 -74
  162. package/src/components/ChatBot/chatBot.style.scss +0 -1295
  163. package/src/components/ChatBot/chatBotFooter.js +0 -14
  164. package/src/components/ChatBot/chatBotLandingScreen.js +0 -26
  165. package/src/components/ChatBot/chatInput.js +0 -206
  166. package/src/components/ChatBot/chatbotModuleMenu.js +0 -278
  167. package/src/components/ChatBot/constant.js +0 -32
  168. package/src/components/ChatBot/conversationScreen.js +0 -281
  169. package/src/components/ChatBot/customScreen.js +0 -69
  170. package/src/components/ChatBot/historyPanel.js +0 -579
  171. package/src/components/ChatBot/index.js +0 -473
  172. package/src/components/ChatBot/newChatComponent.js +0 -105
  173. package/src/components/ChatBot/utils.js +0 -27
  174. package/src/components/Checkbox/Checkbox.styles.scss +0 -232
  175. package/src/components/Checkbox/dashed/index.js +0 -34
  176. package/src/components/Checkbox/default/index.js +0 -70
  177. package/src/components/Checkbox/index.js +0 -50
  178. package/src/components/Checkbox/withDropDown/index.js +0 -96
  179. package/src/components/Checkbox/withoutFormLabel/index.js +0 -46
  180. package/src/components/Chips/Chip.style.scss +0 -134
  181. package/src/components/Chips/index.js +0 -34
  182. package/src/components/CreateItemFlow/CreateItemFlow.styles.scss +0 -37
  183. package/src/components/CreateItemFlow/index.js +0 -145
  184. package/src/components/DatePicker/DatePicker.styles.scss +0 -519
  185. package/src/components/DatePicker/datePickerDropdown.js +0 -282
  186. package/src/components/DatePicker/datePickerFooter.js +0 -76
  187. package/src/components/DatePicker/datePickerInput.js +0 -333
  188. package/src/components/DatePicker/index.js +0 -288
  189. package/src/components/DatePicker/showMonthYearSelect.js +0 -119
  190. package/src/components/DateRangePicker/DateRangePicker.styles.scss +0 -635
  191. package/src/components/DateRangePicker/dateRangePickerCustom.js +0 -22
  192. package/src/components/DateRangePicker/dateRangePickerDropdown.js +0 -320
  193. package/src/components/DateRangePicker/dateRangePickerFooter.js +0 -50
  194. package/src/components/DateRangePicker/dateRangePickerInput.js +0 -544
  195. package/src/components/DateRangePicker/index.js +0 -393
  196. package/src/components/DateRangePicker/showMonthYearSelect.js +0 -103
  197. package/src/components/DateRangePicker/utils.js +0 -71
  198. package/src/components/DynamicLayout/DynamicLayout.styles.scss +0 -153
  199. package/src/components/DynamicLayout/index.js +0 -73
  200. package/src/components/EmptyState/EmptyState.styles.scss +0 -88
  201. package/src/components/EmptyState/EmptyStateImageComponent.jsx +0 -36
  202. package/src/components/EmptyState/index.js +0 -54
  203. package/src/components/FileUpload/FileUpload.styles.scss +0 -449
  204. package/src/components/FileUpload/index.js +0 -641
  205. package/src/components/FilterPanel/FilterPanel.styles.scss +0 -241
  206. package/src/components/FilterPanel/FilterPanelHeader.js +0 -15
  207. package/src/components/FilterPanel/PanelFooter.js +0 -65
  208. package/src/components/FilterPanel/PanelSidebar.js +0 -85
  209. package/src/components/FilterPanel/index.js +0 -147
  210. package/src/components/FiltersStrip/FiltersStrip.styles.scss +0 -343
  211. package/src/components/FiltersStrip/Slider/FilterSlider.styles.scss +0 -85
  212. package/src/components/FiltersStrip/Slider/Portal.js +0 -59
  213. package/src/components/FiltersStrip/Slider/index.js +0 -233
  214. package/src/components/FiltersStrip/appliedFilter.js +0 -180
  215. package/src/components/FiltersStrip/filterDropDown.js +0 -96
  216. package/src/components/FiltersStrip/index.js +0 -127
  217. package/src/components/FiltersStrip/mockData.js +0 -227
  218. package/src/components/Header/Header.styles.scss +0 -223
  219. package/src/components/Header/index.js +0 -156
  220. package/src/components/HomePage/HomePage.styles.scss +0 -1638
  221. package/src/components/HomePage/constant.js +0 -331
  222. package/src/components/HomePage/index.js +0 -675
  223. package/src/components/Input/Input.styles.scss +0 -318
  224. package/src/components/Input/helperText.js +0 -19
  225. package/src/components/Input/index.js +0 -60
  226. package/src/components/Input/inputWithIcon.js +0 -134
  227. package/src/components/Input/vanilaInput.js +0 -68
  228. package/src/components/Loader/Loader.styles.scss +0 -90
  229. package/src/components/Loader/index.js +0 -69
  230. package/src/components/Menu/IconMenuItem.js +0 -100
  231. package/src/components/Menu/Menu.styles.scss +0 -190
  232. package/src/components/Menu/MenuHeader.jsx +0 -84
  233. package/src/components/Menu/MenuHeaderInfo.jsx +0 -319
  234. package/src/components/Menu/MenuHeaderInfo.styles.scss +0 -123
  235. package/src/components/Menu/NestedMenuItem.js +0 -189
  236. package/src/components/Menu/index.js +0 -254
  237. package/src/components/Menu/nestedMenuItemsFromObject.js +0 -100
  238. package/src/components/Modal/Modal.styles.scss +0 -129
  239. package/src/components/Modal/index.js +0 -141
  240. package/src/components/MonthPicker/MonthPicker.styles.scss +0 -255
  241. package/src/components/MonthPicker/constant.js +0 -1
  242. package/src/components/MonthPicker/index.js +0 -373
  243. package/src/components/MonthRangePicker/MonthRangePicker.styles.scss +0 -383
  244. package/src/components/MonthRangePicker/constant.js +0 -1
  245. package/src/components/MonthRangePicker/index.js +0 -574
  246. package/src/components/Notification/Notification.styles.scss +0 -594
  247. package/src/components/Notification/NotificationBody/NotificationInfoList/chipsLists.js +0 -144
  248. package/src/components/Notification/NotificationBody/NotificationInfoList/index.js +0 -128
  249. package/src/components/Notification/NotificationBody/NotificationInfoList/notificationList.js +0 -165
  250. package/src/components/Notification/NotificationBody/NotificationPanels/chipsLists.js +0 -85
  251. package/src/components/Notification/NotificationBody/NotificationPanels/index.js +0 -259
  252. package/src/components/Notification/NotificationBody/NotificationPanels/notificationList.js +0 -637
  253. package/src/components/Notification/NotificationBody/index.js +0 -117
  254. package/src/components/Notification/index.js +0 -128
  255. package/src/components/Notification/mockData.js +0 -389
  256. package/src/components/Notification/notificationFooter.js +0 -31
  257. package/src/components/Notification/notificationHeader.js +0 -28
  258. package/src/components/Panel/Panel.styles.scss +0 -71
  259. package/src/components/Panel/index.js +0 -144
  260. package/src/components/Popover/Popover.styles.scss +0 -52
  261. package/src/components/Popover/index.js +0 -71
  262. package/src/components/Portal/index.js +0 -31
  263. package/src/components/ProgressBar/ProgressBar.styles.scss +0 -62
  264. package/src/components/ProgressBar/index.js +0 -40
  265. package/src/components/Prompt/Prompt.styles.scss +0 -107
  266. package/src/components/Prompt/index.js +0 -107
  267. package/src/components/RadioButtonGroup/RadioButtonGroup.styles.scss +0 -136
  268. package/src/components/RadioButtonGroup/index.js +0 -107
  269. package/src/components/Select/SearchFilter.js +0 -72
  270. package/src/components/Select/Select.styles.scss +0 -748
  271. package/src/components/Select/customGroupHeading.js +0 -24
  272. package/src/components/Select/dropdown.js +0 -65
  273. package/src/components/Select/hooks/index.js +0 -2
  274. package/src/components/Select/hooks/useClickOutside.js +0 -61
  275. package/src/components/Select/hooks/useMenuPosition.js +0 -288
  276. package/src/components/Select/index.js +0 -1307
  277. package/src/components/Select/menuList.js +0 -119
  278. package/src/components/Select/optionList.js +0 -215
  279. package/src/components/Select/selected-option-tags.js +0 -99
  280. package/src/components/Select/utils.js +0 -232
  281. package/src/components/Sidebar/Menus/childMenu.js +0 -88
  282. package/src/components/Sidebar/Menus/index.js +0 -130
  283. package/src/components/Sidebar/Menus/parentMenu.js +0 -173
  284. package/src/components/Sidebar/Sidebar.styles.scss +0 -411
  285. package/src/components/Sidebar/actions.js +0 -31
  286. package/src/components/Sidebar/index.js +0 -84
  287. package/src/components/Sidebar/mock.js +0 -202
  288. package/src/components/Slider/Sliders.styles.scss +0 -260
  289. package/src/components/Slider/index.js +0 -314
  290. package/src/components/Stepper/Stepper.styles.scss +0 -355
  291. package/src/components/Stepper/index.js +0 -101
  292. package/src/components/Switch/Switch.styles.scss +0 -96
  293. package/src/components/Switch/index.js +0 -59
  294. package/src/components/Table/AdvanceSearchModalItem.js +0 -392
  295. package/src/components/Table/AdvanceSortModal.js +0 -332
  296. package/src/components/Table/AgGridHeader.js +0 -1009
  297. package/src/components/Table/CommentsPortal.js +0 -428
  298. package/src/components/Table/NewAdvanceSearchModal/NewAdvanceSearchModal.js +0 -323
  299. package/src/components/Table/NewAdvanceSearchModal/NewAdvanceSearchModalItem.js +0 -476
  300. package/src/components/Table/NoComments.js +0 -295
  301. package/src/components/Table/Table.styles.scss +0 -3859
  302. package/src/components/Table/actionBar.js +0 -43
  303. package/src/components/Table/advanceSearchModal.js +0 -797
  304. package/src/components/Table/commentPanel.js +0 -421
  305. package/src/components/Table/filterUtils.js +0 -850
  306. package/src/components/Table/index.js +0 -2175
  307. package/src/components/Table/mockData.js +0 -1344
  308. package/src/components/Table/tableFunctions.js +0 -1676
  309. package/src/components/Table/tableHeader.js +0 -476
  310. package/src/components/Table/tableIcons.js +0 -61
  311. package/src/components/Table/tableMoreOptions.js +0 -293
  312. package/src/components/Table/tablePagination.js +0 -63
  313. package/src/components/Table/tableSettings.js +0 -287
  314. package/src/components/Table/withCommentIcon.js +0 -107
  315. package/src/components/TableChat/EmptyContainer.jsx +0 -13
  316. package/src/components/TableChat/README.md +0 -588
  317. package/src/components/TableChat/TableChatSidePanel.jsx +0 -832
  318. package/src/components/TableChat/TableChatSidePanel.styles.scss +0 -57
  319. package/src/components/TableChat/components/ChatMessageSkeleton/ChatFooterSkeleton.jsx +0 -43
  320. package/src/components/TableChat/components/ChatMessageSkeleton/ChatHeaderSkeleton.jsx +0 -55
  321. package/src/components/TableChat/components/ChatMessageSkeleton/ChatMessageListSkeleton.jsx +0 -94
  322. package/src/components/TableChat/components/ChatMessageSkeleton/ChatSkeleton.jsx +0 -22
  323. package/src/components/TableChat/components/ChatMessageSkeleton/ChatSkeleton.scss +0 -179
  324. package/src/components/TableChat/components/SkeletonList.jsx +0 -12
  325. package/src/components/TableChat/components/TableChatLeftSection/AddChatContainer/AddChatContainer.jsx +0 -171
  326. package/src/components/TableChat/components/TableChatLeftSection/AddChatContainer/AddChatContainer.styles.scss +0 -37
  327. package/src/components/TableChat/components/TableChatLeftSection/ChannelCheckbox/ChannelCheckbox.jsx +0 -28
  328. package/src/components/TableChat/components/TableChatLeftSection/ChatChannelItem.jsx +0 -116
  329. package/src/components/TableChat/components/TableChatLeftSection/ChatChannelList.jsx +0 -89
  330. package/src/components/TableChat/components/TableChatLeftSection/ChatHeaderButton/ChatHeaderButton.jsx +0 -27
  331. package/src/components/TableChat/components/TableChatLeftSection/ChatHeaderNavigation.jsx +0 -191
  332. package/src/components/TableChat/components/TableChatLeftSection/ChatIconButton/ChatIconButton.jsx +0 -23
  333. package/src/components/TableChat/components/TableChatLeftSection/TableChatChannelHeader.jsx +0 -117
  334. package/src/components/TableChat/components/TableChatLeftSection/TableChatChannelHeader.styles.scss +0 -469
  335. package/src/components/TableChat/components/TableChatLeftSection/UnreadBadge/UnreadBadge.jsx +0 -16
  336. package/src/components/TableChat/components/TableChatRightSection/AvatarGroup/AvatarGroup.jsx +0 -119
  337. package/src/components/TableChat/components/TableChatRightSection/AvatarGroup/AvatarGroup.styles.scss +0 -87
  338. package/src/components/TableChat/components/TableChatRightSection/ChatDefaultMessageType/ChatDefaultMessageType.jsx +0 -216
  339. package/src/components/TableChat/components/TableChatRightSection/ChatDefaultMessageType/ChatDefaultMessageType.styles.scss +0 -291
  340. package/src/components/TableChat/components/TableChatRightSection/ChatDeleteMessageType/ChatDeletedMessageType.jsx +0 -19
  341. package/src/components/TableChat/components/TableChatRightSection/ChatDeleteMessageType/DeletedMessage.styles.scss +0 -55
  342. package/src/components/TableChat/components/TableChatRightSection/ChatEditedMessageType/ChatEditedMessageType.jsx +0 -61
  343. package/src/components/TableChat/components/TableChatRightSection/ChatEditedMessageType/ChatEditedMessageType.styles.scss +0 -13
  344. package/src/components/TableChat/components/TableChatRightSection/ChatHeader/ChatHeader.jsx +0 -432
  345. package/src/components/TableChat/components/TableChatRightSection/ChatHeader/ChatHeaderAction.jsx +0 -365
  346. package/src/components/TableChat/components/TableChatRightSection/ChatHeader/ChatHeaderInfo.jsx +0 -42
  347. package/src/components/TableChat/components/TableChatRightSection/ChatHeader/chatHeader.styles.scss +0 -323
  348. package/src/components/TableChat/components/TableChatRightSection/ChatInput/ChatInput.jsx +0 -793
  349. package/src/components/TableChat/components/TableChatRightSection/ChatInput/ChatInput.styles.scss +0 -394
  350. package/src/components/TableChat/components/TableChatRightSection/ChatMessageActions/ChatMessageActions.jsx +0 -61
  351. package/src/components/TableChat/components/TableChatRightSection/ChatMessageActions/ChatMessageActions.styles.scss +0 -28
  352. package/src/components/TableChat/components/TableChatRightSection/ChatMessageAvatar/ChatMessageAvatar.jsx +0 -11
  353. package/src/components/TableChat/components/TableChatRightSection/ChatMessageAvatar/ChatMessageAvatar.styles.scss +0 -3
  354. package/src/components/TableChat/components/TableChatRightSection/ChatMessages/ChatMessage.jsx +0 -220
  355. package/src/components/TableChat/components/TableChatRightSection/ChatMessages/ChatMessage.styles.scss +0 -128
  356. package/src/components/TableChat/components/TableChatRightSection/ChatNotificationSettings/ChatNotificationSettings.jsx +0 -246
  357. package/src/components/TableChat/components/TableChatRightSection/ChatNotificationSettings/ChatNotificationSettings.styles.scss +0 -210
  358. package/src/components/TableChat/components/TableChatRightSection/DateSeparator/DateSeparator.jsx +0 -52
  359. package/src/components/TableChat/components/TableChatRightSection/DateSeparator/DateSeparator.styles.scss +0 -34
  360. package/src/components/TableChat/components/TableChatRightSection/EmojiPicker/EmojiPicker.jsx +0 -31
  361. package/src/components/TableChat/components/TableChatRightSection/FileUploader/FileUploader.jsx +0 -170
  362. package/src/components/TableChat/components/TableChatRightSection/ImageUploader/ImageUploader.jsx +0 -165
  363. package/src/components/TableChat/components/TableChatRightSection/PinedChatPanel/PinedChat.styles.scss +0 -587
  364. package/src/components/TableChat/components/TableChatRightSection/PinedChatPanel/PinedChatPanel.jsx +0 -244
  365. package/src/components/TableChat/components/TableChatRightSection/ReplyBadge/ReplyBadge.jsx +0 -29
  366. package/src/components/TableChat/components/TableChatRightSection/ReplyBadge/ReplyBadge.styles.scss +0 -47
  367. package/src/components/TableChat/components/TableChatRightSection/TableChatRightSection.jsx +0 -1340
  368. package/src/components/TableChat/components/TableChatRightSection/TableChatRightSection.styles.scss +0 -147
  369. package/src/components/TableChat/components/TextEditor/EditorToolbar.jsx +0 -209
  370. package/src/components/TableChat/components/TextEditor/EditorToolbar.styles.scss +0 -61
  371. package/src/components/TableChat/components/TextEditor/Mention.jsx +0 -234
  372. package/src/components/TableChat/components/TextEditor/MentionList.jsx +0 -118
  373. package/src/components/TableChat/components/TextEditor/MentionList.scss +0 -146
  374. package/src/components/TableChat/components/TextEditor/styles.scss +0 -278
  375. package/src/components/TableChat/components/TextEditor/suggestion.js +0 -124
  376. package/src/components/TableChat/components/chatConfig.js +0 -64
  377. package/src/components/TableChat/hooks/useInfiniteScroll.js +0 -256
  378. package/src/components/TableOld/AgGridHeader.js +0 -545
  379. package/src/components/TableOld/Table.styles.scss +0 -2192
  380. package/src/components/TableOld/actionBar.js +0 -43
  381. package/src/components/TableOld/index.js +0 -598
  382. package/src/components/TableOld/mockData.js +0 -1344
  383. package/src/components/TableOld/tableFunctions.js +0 -1734
  384. package/src/components/TableOld/tableHeader.js +0 -251
  385. package/src/components/TableOld/tableIcons.js +0 -61
  386. package/src/components/TableOld/tablePagination.js +0 -64
  387. package/src/components/TableOld/tableSettings.js +0 -166
  388. package/src/components/Tabs/Tabs.styles.scss +0 -120
  389. package/src/components/Tabs/index.js +0 -91
  390. package/src/components/Tabs/tabPanel.js +0 -38
  391. package/src/components/Tag/Tags.styles.scss +0 -71
  392. package/src/components/Tag/filled.js +0 -48
  393. package/src/components/Tag/index.js +0 -54
  394. package/src/components/Tag/solid.js +0 -47
  395. package/src/components/Tag/stroke.js +0 -47
  396. package/src/components/Tag/utils.js +0 -12
  397. package/src/components/TagGroup/TagGroup.styles.scss +0 -7
  398. package/src/components/TagGroup/index.js +0 -6
  399. package/src/components/TextArea/TextArea.styles.scss +0 -158
  400. package/src/components/TextArea/index.js +0 -121
  401. package/src/components/Toast/Toast.styles.scss +0 -66
  402. package/src/components/Toast/index.js +0 -35
  403. package/src/components/Tooltip/Tooltips.styles.scss +0 -111
  404. package/src/components/Tooltip/index.js +0 -68
  405. package/src/components/common/HelperText/HelperText.styles.scss +0 -18
  406. package/src/components/common/HelperText/index.js +0 -44
  407. package/src/components/common/MentionEditor/MentionEditor.styles.scss +0 -301
  408. package/src/components/common/MentionEditor/MentionList/MentionList.styles.scss +0 -146
  409. package/src/components/common/MentionEditor/MentionList/index.js +0 -130
  410. package/src/components/common/MentionEditor/index.js +0 -246
  411. package/src/components/common/MentionEditor/suggestion.js +0 -124
  412. package/src/components/index.js +0 -53
  413. package/src/stories/Accordion.stories.js +0 -151
  414. package/src/stories/AccordionModern.stories.js +0 -263
  415. package/src/stories/Alert.stories.js +0 -103
  416. package/src/stories/Avatar.stories.js +0 -79
  417. package/src/stories/Badge.stories.js +0 -112
  418. package/src/stories/BottomSheet.stories.js +0 -224
  419. package/src/stories/Breadcrumbs.stories.js +0 -143
  420. package/src/stories/Button.stories.js +0 -190
  421. package/src/stories/ButtonGroup.stories.js +0 -123
  422. package/src/stories/Card.stories.js +0 -73
  423. package/src/stories/Changelog.mdx +0 -1006
  424. package/src/stories/Chart.stories.js +0 -2017
  425. package/src/stories/ChatBot.stories.js +0 -668
  426. package/src/stories/Checkbox.stories.js +0 -209
  427. package/src/stories/Chips.stories.js +0 -106
  428. package/src/stories/CreateItemFlow.stories.js +0 -255
  429. package/src/stories/DatePicker.stories.js +0 -311
  430. package/src/stories/DateRangePicker.stories.js +0 -364
  431. package/src/stories/EmptyState.stories.js +0 -110
  432. package/src/stories/FileUpload.stories.js +0 -169
  433. package/src/stories/FilterPanel.stories.js +0 -309
  434. package/src/stories/FiltersStrip.stories.js +0 -244
  435. package/src/stories/GettingStarted.mdx +0 -153
  436. package/src/stories/Header.stories.js +0 -185
  437. package/src/stories/HomePage.stories.js +0 -201
  438. package/src/stories/Input.stories.js +0 -165
  439. package/src/stories/Loader.stories.js +0 -33
  440. package/src/stories/Menu.stories.js +0 -309
  441. package/src/stories/Modal.stories.js +0 -185
  442. package/src/stories/MonthPicker.stories.js +0 -313
  443. package/src/stories/MonthRangePicker.stories.js +0 -255
  444. package/src/stories/Notification.stories.js +0 -500
  445. package/src/stories/Panel.stories.js +0 -179
  446. package/src/stories/Popover.stories.js +0 -125
  447. package/src/stories/ProgressBar.stories.js +0 -93
  448. package/src/stories/Prompt.stories.js +0 -120
  449. package/src/stories/RadioButtonGroup.stories.js +0 -83
  450. package/src/stories/Select.stories.js +0 -753
  451. package/src/stories/Sidebar.stories.js +0 -177
  452. package/src/stories/Slider.stories.js +0 -226
  453. package/src/stories/Stepper.stories.js +0 -158
  454. package/src/stories/Switch.stories.js +0 -72
  455. package/src/stories/Table.stories.js +0 -4323
  456. package/src/stories/TableChat.mdx +0 -992
  457. package/src/stories/TableChat.stories.js +0 -1712
  458. package/src/stories/TableOld.stories.js +0 -954
  459. package/src/stories/Tabs.stories.js +0 -253
  460. package/src/stories/Tag.stories.js +0 -92
  461. package/src/stories/TagGroup.stories.js +0 -39
  462. package/src/stories/TextArea.stories.js +0 -148
  463. package/src/stories/Toast.stories.js +0 -113
  464. package/src/stories/Tooltip.stories.js +0 -86
  465. package/src/stories/storybookLinks.mdx +0 -20
@@ -1,1307 +0,0 @@
1
- import React, {
2
- useState,
3
- useEffect,
4
- useRef,
5
- useMemo,
6
- useCallback,
7
- } from "react";
8
- import { Alert } from "../Alert";
9
- import ReactSelect from "react-select";
10
- import Dropdown from "./dropdown";
11
- import { SelectedOptionsTags } from "./selected-option-tags";
12
- import SearchFilter from "./SearchFilter";
13
- import { MenuList } from "./menuList";
14
- import { Option } from "./optionList";
15
- import { Checkbox } from "../Checkbox";
16
- import { Toast } from "../Toast";
17
- import { Tooltip } from "../Tooltip";
18
- import { CustomGroupHeading } from "./customGroupHeading";
19
- import {
20
- handleSelectAll,
21
- handleClearAll,
22
- handleSearch,
23
- handleDropdownClose,
24
- handleDropdownOpen,
25
- getPlaceholder,
26
- onKeyDown,
27
- handleSelectAllWhenCompLoads,
28
- flattenOptions,
29
- } from "./utils";
30
- import { useClickOutside } from "./hooks/useClickOutside";
31
- import "./Select.styles.scss";
32
- import ChevronRightIcon from "@mui/icons-material/ChevronRight";
33
- import HelperText from "../common/HelperText";
34
-
35
- const selectStyles = {
36
- menu: () => ({}), // to remove default menu styles
37
- };
38
-
39
- const SUBMENU_MAX_HEIGHT = 200;
40
-
41
- export const Select = React.memo((props) => {
42
- const {
43
- isOpen,
44
- setIsOpen,
45
- label,
46
- isRequired,
47
- name,
48
- placeholder,
49
- searchPlaceholder = "Search here...",
50
- labelOrientation = "top",
51
- isMulti = false,
52
- isDisabled,
53
- isLoading,
54
- isWithIcon,
55
- isError,
56
- isWithSearch,
57
- isClearable,
58
- isWithSelectedOptionTags,
59
- toggleSelectAll,
60
- isSelectAll,
61
- icon,
62
- withPortal,
63
- dropDownPortalClassName,
64
- initialOptions,
65
- currentOptions,
66
- setCurrentOptions,
67
- selectedOptions = [],
68
- setSelectedOptions,
69
- portalContainer = document.body,
70
- isAgGridCellRenderer,
71
- onMenuScrollToBottom,
72
- setIsSelectAll,
73
- isWithSelectAll,
74
- isCloseWhenClickOutside = true,
75
- handleChange: externalOnChange,
76
- onSelectAll: externalOnSelectAll,
77
- onClearAll: externalOnClearAll,
78
- onSearch: externalOnSearch,
79
- onDropdownClose: externalOnDropdownClose,
80
- onDropdownOpen: externalOnDropdownOpen,
81
- minWidth,
82
- width,
83
- menuShouldBlockScroll = false,
84
- onBlur,
85
- isGrouped,
86
- selectId,
87
- column,
88
- customPlaceholderAfterSelect,
89
- isMultiInSubmenu = false,
90
- customBadgeLabel,
91
- customBadgeColor = "success",
92
- helperText,
93
- dropdownPosition,
94
- maxSelectableOptions,
95
- noOptionMessage = "No options available",
96
- isLoadingMore = false,
97
- onSearchBlur,
98
- showFooterMessage = {},
99
- selectionLabels = {},
100
- } = props;
101
-
102
- const [submenuOptions, setSubmenuOptions] = useState(null);
103
- const [submenuParent, setSubmenuParent] = useState(null);
104
- const flattenInitialOptions = flattenOptions(initialOptions);
105
- const [openToast, setOpenToast] = useState(false);
106
- const [toastMessage, setToastMessage] = useState("");
107
- const searchBarRef = useRef(null);
108
- const containerRef = useRef(null);
109
- const focusedIndex = useRef(0);
110
- const dropdownButtonRef = useRef(null);
111
- const textSpanRef = useRef(null);
112
- const [isTextTruncated, setIsTextTruncated] = useState(false);
113
- const memoizedOptions = useMemo(() => currentOptions, [currentOptions]);
114
- const submenuTimeoutRef = useRef(null);
115
- const [submenuPosition, setSubmenuPosition] = useState({
116
- top: 0,
117
- bottom: "auto",
118
- left: 0,
119
- width: 0,
120
- });
121
- const dropdownMenuRef = useRef(null);
122
- const menuRef = useRef(null);
123
- const [isSubmenuHovered, setIsSubmenuHovered] = useState(false);
124
- const [searchTerm, setSearchTerm] = useState("");
125
-
126
- // Get column width from column state
127
- const [columnWidth, setColumnWidth] = useState(
128
- (column?.getActualWidth?.() || column?.getWidth?.()) - 12
129
- );
130
-
131
- // Check if text is truncated
132
- useEffect(() => {
133
- if (textSpanRef.current) {
134
- const isTruncated =
135
- textSpanRef.current.scrollWidth > textSpanRef.current.clientWidth;
136
- setIsTextTruncated(isTruncated);
137
- }
138
- }, [columnWidth, currentOptions, selectedOptions, placeholder]);
139
-
140
- // Add effect to force re-render on column width changes
141
- useEffect(() => {
142
- if (isAgGridCellRenderer && column) {
143
- const handleColumnResized = () => {
144
- const newWidth = column.getActualWidth?.() || column.getWidth?.();
145
- setColumnWidth(newWidth - 12);
146
- };
147
-
148
- column.addEventListener("widthChanged", handleColumnResized);
149
- return () => {
150
- column.removeEventListener("widthChanged", handleColumnResized);
151
- };
152
- }
153
- }, [isAgGridCellRenderer, column, columnWidth]);
154
-
155
- // Use the click outside hook
156
- useClickOutside({
157
- isOpen,
158
- containerRef,
159
- menuRef,
160
- isCloseWhenClickOutside,
161
- onClose: (event) => {
162
- handleDropdownClose({
163
- externalOnDropdownClose,
164
- setCurrentOptions,
165
- initialOptions: isGrouped ? flattenInitialOptions : initialOptions,
166
- currentOptions,
167
- setIsOpen,
168
- onBlur,
169
- event,
170
- });
171
- },
172
- });
173
-
174
- useEffect(() => {
175
- if (isWithSelectAll) {
176
- handleSelectAllWhenCompLoads({
177
- currentOptions,
178
- selectedOptions,
179
- setSelectedOptions,
180
- ...props,
181
- });
182
- }
183
- }, [isWithSelectAll]);
184
-
185
- const handleSelect = useCallback(
186
- (selectedValues, event, index) => {
187
- searchBarRef?.current?.blur();
188
- if (event?.action === "clear") {
189
- if (externalOnChange) {
190
- externalOnChange([], event, index);
191
- }
192
- return;
193
- }
194
-
195
- // Multi-select: handle parent with children
196
- if (isMulti) {
197
- let newSelectedOptions = Array.isArray(selectedOptions)
198
- ? [...selectedOptions]
199
- : [];
200
- const option = event?.option || selectedValues;
201
- const isParent =
202
- option && option.children && option.children.length > 0;
203
- const isSelected = newSelectedOptions.some(
204
- (sel) => sel.value === option.value
205
- );
206
-
207
- // Get current count for limit checking
208
- const currentCount =
209
- maxSelectableOptions !== undefined
210
- ? countTotalSelectedOptions(selectedOptions)
211
- : 0;
212
-
213
- if (isParent) {
214
- // If selecting a parent
215
- if (!isSelected) {
216
- // Check if adding parent would exceed maxSelectableOptions (parent level only)
217
- if (maxSelectableOptions !== undefined) {
218
- if (currentCount >= maxSelectableOptions) {
219
- return;
220
- }
221
- }
222
- // Add parent with all its children
223
- newSelectedOptions.push({
224
- ...option,
225
- children: option.children,
226
- });
227
- } else {
228
- // Remove parent and all its children
229
- newSelectedOptions = newSelectedOptions.filter(
230
- (sel) => sel.value !== option.value
231
- );
232
- }
233
- } else {
234
- // If selecting a child or a regular option
235
- const parentOption = (initialOptions || []).find(
236
- (parent) =>
237
- parent.children &&
238
- parent.children.some((child) => child.value === option.value)
239
- );
240
-
241
- if (parentOption) {
242
- // Handle child selection
243
- const parentIndex = newSelectedOptions.findIndex(
244
- (sel) => sel.value === parentOption.value
245
- );
246
-
247
- if (isSelected) {
248
- // Remove the child from parent's children
249
- if (parentIndex !== -1) {
250
- const parent = newSelectedOptions[parentIndex];
251
- parent.children = parent.children.filter(
252
- (child) => child.value !== option.value
253
- );
254
-
255
- // If no children left, remove the parent
256
- if (parent.children.length === 0) {
257
- newSelectedOptions = newSelectedOptions.filter(
258
- (sel) => sel.value !== parentOption.value
259
- );
260
- }
261
- }
262
- } else {
263
- // Add the child to parent's children
264
- if (parentIndex !== -1) {
265
- // Parent exists, add child to its children if not already present
266
- // No limit check needed here since we're only counting at parent level
267
- const parent = newSelectedOptions[parentIndex];
268
- if (
269
- !parent.children.some((child) => child.value === option.value)
270
- ) {
271
- parent.children.push(option);
272
- }
273
- } else {
274
- // Parent doesn't exist, add parent with this child
275
- // Check maxSelectableOptions limit before adding new parent
276
- if (maxSelectableOptions !== undefined) {
277
- if (currentCount >= maxSelectableOptions) {
278
- return;
279
- }
280
- }
281
- newSelectedOptions.push({
282
- ...parentOption,
283
- children: [option],
284
- });
285
- }
286
- }
287
- } else {
288
- // Handle regular option selection (no parent)
289
- if (isSelected) {
290
- // Remove the option
291
- newSelectedOptions = newSelectedOptions.filter(
292
- (sel) => sel.value !== option.value
293
- );
294
- } else {
295
- // Check maxSelectableOptions limit before adding regular option
296
- if (maxSelectableOptions !== undefined) {
297
- if (currentCount >= maxSelectableOptions) {
298
- return;
299
- }
300
- }
301
- // Add the option
302
- newSelectedOptions.push(option);
303
- }
304
- }
305
- }
306
-
307
- setSelectedOptions(newSelectedOptions);
308
- setIsSelectAll(newSelectedOptions.length === initialOptions.length);
309
-
310
- if (externalOnChange) {
311
- externalOnChange(newSelectedOptions, event, index);
312
- }
313
- return;
314
- }
315
-
316
- if (isGrouped && isMulti) {
317
- const flattenSelectedValues = flattenOptions(selectedValues);
318
- setSelectedOptions(flattenSelectedValues);
319
- setIsSelectAll(
320
- flattenSelectedValues.length === flattenInitialOptions.length
321
- );
322
- if (externalOnChange) {
323
- externalOnChange(flattenSelectedValues, event, index);
324
- }
325
- } else {
326
- setSelectedOptions(selectedValues);
327
- if (externalOnChange) {
328
- externalOnChange(selectedValues, event, index);
329
- }
330
- }
331
-
332
- if (isMulti && !isGrouped) {
333
- if (initialOptions.length > 0)
334
- setIsSelectAll(selectedValues.length === initialOptions.length);
335
- else setIsSelectAll(selectedValues.length === currentOptions.length);
336
- }
337
-
338
- if (!isMulti) {
339
- handleDropdownClose({
340
- externalOnDropdownClose,
341
- setCurrentOptions,
342
- initialOptions,
343
- currentOptions,
344
- setIsOpen,
345
- undefined, // TODO: implement other solution for single select
346
- event,
347
- });
348
- }
349
- },
350
- [
351
- isMulti,
352
- setIsSelectAll,
353
- setIsOpen,
354
- externalOnChange,
355
- initialOptions,
356
- onBlur,
357
- selectedOptions,
358
- setSelectedOptions,
359
- setIsSelectAll,
360
- flattenInitialOptions,
361
- isGrouped,
362
- currentOptions,
363
- maxSelectableOptions,
364
- ]
365
- );
366
-
367
- // Helper to sync parent/child selection after any change
368
- function syncParentChildSelection(selectedArr) {
369
- // Only one level deep
370
- if (!selectedArr || selectedArr.length === 0) {
371
- setSelectedOptions([]);
372
- setIsSelectAll(false);
373
- return;
374
- }
375
- let updated = [...selectedArr];
376
- (initialOptions || []).forEach((parent) => {
377
- if (parent.children && parent.children.length > 0) {
378
- const allChildrenSelected = parent.children.every((child) =>
379
- updated.some((sel) => sel.value === child.value)
380
- );
381
- const parentSelected = updated.some(
382
- (sel) => sel.value === parent.value
383
- );
384
- if (allChildrenSelected && !parentSelected) {
385
- updated.push(parent);
386
- } else if (!allChildrenSelected && parentSelected) {
387
- updated = updated.filter((sel) => sel.value !== parent.value);
388
- }
389
- }
390
- });
391
- setSelectedOptions(updated);
392
- setIsSelectAll(
393
- updated.length ===
394
- (initialOptions.length > 0
395
- ? initialOptions.length
396
- : currentOptions.length)
397
- );
398
- }
399
-
400
- const handleOptionHover = useCallback(
401
- (option, index, event) => {
402
- if (submenuTimeoutRef.current) {
403
- clearTimeout(submenuTimeoutRef.current);
404
- }
405
- if (option?.children?.length > 0) {
406
- const optionNode = event?.currentTarget;
407
- const dropdownRect = dropdownMenuRef.current?.getBoundingClientRect();
408
- const optionRect = optionNode?.getBoundingClientRect();
409
- if (dropdownRect && optionRect) {
410
- const spaceBelow = window.innerHeight - optionRect.bottom;
411
- const openUpward = spaceBelow < SUBMENU_MAX_HEIGHT;
412
- if (openUpward) {
413
- setSubmenuPosition({
414
- top: "auto",
415
- bottom: dropdownRect.bottom - optionRect.bottom,
416
- left: dropdownRect.width + 12,
417
- width: dropdownRect.width,
418
- });
419
- } else {
420
- setSubmenuPosition({
421
- top: optionRect.top - dropdownRect.top,
422
- bottom: "auto",
423
- left: dropdownRect.width + 12,
424
- width: dropdownRect.width,
425
- });
426
- }
427
- }
428
- setSubmenuOptions(option.children);
429
- setSubmenuParent(option);
430
- setIsSubmenuHovered(true);
431
- } else {
432
- setIsSubmenuHovered(false);
433
- setSubmenuOptions(null);
434
- setSubmenuParent(null);
435
- }
436
- },
437
- [isSubmenuHovered]
438
- );
439
-
440
- useEffect(() => {
441
- return () => {
442
- if (submenuTimeoutRef.current) {
443
- clearTimeout(submenuTimeoutRef.current);
444
- }
445
- };
446
- }, []);
447
-
448
- // Helper to get all options (parents and children)
449
- function getAllOptions(options) {
450
- let all = [];
451
- (options || []).forEach((opt) => {
452
- all.push(opt);
453
- if (opt.children && opt.children.length > 0) {
454
- all = all.concat(getAllOptions(opt.children));
455
- }
456
- });
457
- return all;
458
- }
459
-
460
- // Helper to count total selected options at parent level only
461
- function countTotalSelectedOptions(selectedOptions) {
462
- if (
463
- !selectedOptions ||
464
- (Array.isArray(selectedOptions) && selectedOptions.length === 0)
465
- ) {
466
- return 0;
467
- }
468
-
469
- if (!isMulti) {
470
- // For single select, count as 1 if selected
471
- return selectedOptions.value ? 1 : 0;
472
- }
473
-
474
- // For multi-select, count only parent-level options (not children)
475
- const selectedArray = Array.isArray(selectedOptions) ? selectedOptions : [];
476
-
477
- // Count only parent options - each item in selectedOptions is a parent-level selection
478
- return selectedArray.length;
479
- }
480
-
481
- // Check if maxSelectableOptions limit is reached
482
- const totalSelectedCount = useMemo(() => {
483
- return countTotalSelectedOptions(selectedOptions);
484
- }, [selectedOptions, isMulti]);
485
-
486
- const isMaxLimitReached = useMemo(() => {
487
- return (
488
- maxSelectableOptions !== undefined &&
489
- totalSelectedCount >= maxSelectableOptions
490
- );
491
- }, [maxSelectableOptions, totalSelectedCount]);
492
-
493
- // Update handleSelectAll logic
494
- function handleSelectAllWrapper({
495
- event,
496
- externalOnChange,
497
- setIsSelectAll,
498
- initialOptions,
499
- setSelectedOptions,
500
- }) {
501
- if (externalOnSelectAll) {
502
- externalOnSelectAll(event);
503
- } else {
504
- if (event && event.target.checked) {
505
- setIsSelectAll(true);
506
-
507
- //currentOptions without selectedOptions
508
- const restCurrentOptions = currentOptions.filter(
509
- (option) =>
510
- !selectedOptions.find(
511
- (selectedOption) =>
512
- selectedOption.label === option.label &&
513
- option.value === selectedOption.value
514
- )
515
- );
516
- setSelectedOptions([...selectedOptions, ...restCurrentOptions]);
517
- if (externalOnChange)
518
- externalOnChange([...selectedOptions, ...restCurrentOptions]);
519
- } else {
520
- setIsSelectAll(false);
521
- setSelectedOptions([]);
522
- if (externalOnChange) externalOnChange([]);
523
- }
524
- }
525
- }
526
-
527
- // Update handleSelectAllWhenCompLoads logic
528
- function handleSelectAllWhenCompLoadsWrapper({
529
- currentOptions,
530
- selectedOptions,
531
- setSelectedOptions,
532
- }) {
533
- setSelectedOptions(getAllOptions(currentOptions));
534
- }
535
-
536
- // Update handleClearAll logic
537
- function handleClearAllWrapper({
538
- externalOnClearAll,
539
- setSelectedOptions,
540
- setIsSelectAll,
541
- handleSelect,
542
- syncParentChildSelection,
543
- }) {
544
- if (externalOnClearAll) {
545
- externalOnClearAll();
546
- setSelectedOptions([]);
547
- setIsSelectAll(false);
548
- } else {
549
- handleSelect([], { action: "clear" });
550
- setSelectedOptions([]);
551
- setIsSelectAll(false);
552
- }
553
- syncParentChildSelection([]);
554
- }
555
-
556
- if (isMulti && !setIsSelectAll) {
557
- return (
558
- <Alert
559
- description="isMulti cannot be used without isSelectAll & setIsSelectAll"
560
- title="Select Error"
561
- severity="error"
562
- />
563
- );
564
- }
565
-
566
- return (
567
- <div
568
- className={`ia-select-main-container-v3 ${
569
- labelOrientation == "top" ? "top-orientation" : ""
570
- } ${isAgGridCellRenderer ? "isAgGridCellRenderer" : ""}`}
571
- >
572
- {label && (
573
- <div className="ia-select-label-v3">
574
- {label} {isRequired && <span style={{ color: "red" }}>*</span>}
575
- </div>
576
- )}
577
- <div
578
- ref={containerRef}
579
- style={{
580
- width: isAgGridCellRenderer ? "100%" : minWidth ?? width ?? "auto",
581
- minWidth: isAgGridCellRenderer ? "0" : minWidth ?? width ?? "auto",
582
- maxWidth: isAgGridCellRenderer ? columnWidth || "100%" : "none",
583
- }}
584
- >
585
- <Dropdown
586
- dropdownPosition={dropdownPosition}
587
- isOpen={isOpen}
588
- onClose={(event) => {
589
- handleDropdownClose({
590
- externalOnDropdownClose,
591
- setCurrentOptions,
592
- initialOptions,
593
- currentOptions,
594
- setIsOpen,
595
- onBlur,
596
- event,
597
- });
598
- }}
599
- disabled={isDisabled}
600
- containerRef={containerRef}
601
- menuRef={menuRef}
602
- withPortal={withPortal}
603
- portalContainer={portalContainer}
604
- dropDownPortalClassName={dropDownPortalClassName}
605
- dropdownButtonRef={dropdownButtonRef}
606
- target={
607
- <>
608
- <button
609
- name={name}
610
- id={selectId}
611
- className={`ia-select-styled-dropdown-main-button ${
612
- isError ? "impact-select-error" : ""
613
- } ${isDisabled ? "impact-select-disabled" : ""} ${
614
- isClearable ? "is-with-clearable" : ""
615
- }`}
616
- style={{
617
- minWidth: isAgGridCellRenderer ? "0" : minWidth ?? "240px",
618
- width: isAgGridCellRenderer
619
- ? "100%"
620
- : width ?? minWidth ?? "240px",
621
- maxWidth: isAgGridCellRenderer
622
- ? columnWidth || "100%"
623
- : "300px",
624
- flex: isAgGridCellRenderer ? "1 1 auto" : "none",
625
- }}
626
- variant="primary"
627
- disabled={isDisabled}
628
- onBlur={(e) => {
629
- if (!isMulti) {
630
- e.preventDefault();
631
- e.stopPropagation();
632
- e.target.value = selectedOptions?.value;
633
- if (onBlur) onBlur(e);
634
- }
635
- }}
636
- onClick={(e) => {
637
- e.preventDefault();
638
- e.stopPropagation();
639
- isOpen
640
- ? handleDropdownClose({
641
- externalOnDropdownClose,
642
- setCurrentOptions,
643
- initialOptions,
644
- currentOptions,
645
- setIsOpen,
646
- onBlur,
647
- event: e,
648
- })
649
- : handleDropdownOpen({
650
- externalOnDropdownOpen,
651
- isOpen,
652
- setIsOpen,
653
- });
654
- }}
655
- //isSelected={Object.entries(selectedOptions || {}).length > 0}
656
- //isAgGridCellRenderer={isAgGridCellRenderer}
657
- //isOpen={isOpen}
658
- onKeyDown={
659
- !isWithSearch
660
- ? (e) => onKeyDown({ e, focusedIndex, currentOptions })
661
- : undefined
662
- }
663
- ref={dropdownButtonRef}
664
- >
665
- <div
666
- className={`ia-select-button-text ${
667
- getPlaceholder(
668
- isMulti,
669
- selectedOptions,
670
- placeholder,
671
- customPlaceholderAfterSelect,
672
- selectionLabels
673
- ) === placeholder
674
- ? "placeholder"
675
- : ""
676
- } ${
677
- !(
678
- (isClearable && selectedOptions) ||
679
- (isMulti &&
680
- selectedOptions &&
681
- selectedOptions.length > 0 &&
682
- isClearable)
683
- )
684
- ? "ia-select-button-text-full-width"
685
- : ""
686
- } ${isAgGridCellRenderer ? "impact-select-table" : ""}`}
687
- >
688
- {isWithIcon && { ...icon }}
689
- {isTextTruncated ? (
690
- <Tooltip
691
- title={getPlaceholder(
692
- isMulti,
693
- selectedOptions,
694
- placeholder
695
- )}
696
- variant="tertiary"
697
- orientation="top"
698
- >
699
- <span
700
- ref={textSpanRef}
701
- className="ia-select-button-text-span"
702
- >
703
- {isMultiInSubmenu &&
704
- !isMulti &&
705
- selectedOptions &&
706
- selectedOptions.children &&
707
- selectedOptions.children.length > 0
708
- ? selectedOptions.children.length === 1
709
- ? selectedOptions.children[0].label
710
- : `${selectionLabels.selected || "Selected"} (${selectedOptions.children.length})`
711
- : getPlaceholder(
712
- isMulti,
713
- selectedOptions,
714
- placeholder,
715
- customPlaceholderAfterSelect,
716
- selectionLabels
717
- )}
718
- </span>
719
- </Tooltip>
720
- ) : (
721
- <span
722
- ref={textSpanRef}
723
- className="ia-select-button-text-span"
724
- >
725
- {!isMulti &&
726
- selectedOptions &&
727
- selectedOptions.children &&
728
- selectedOptions.children.length > 0
729
- ? selectedOptions.children.length === 1
730
- ? selectedOptions.children[0].label
731
- : `${selectionLabels.selected || "Selected"} (${selectedOptions.children.length})`
732
- : getPlaceholder(
733
- isMulti,
734
- selectedOptions,
735
- placeholder,
736
- customPlaceholderAfterSelect,
737
- selectionLabels
738
- )}
739
- </span>
740
- )}
741
- </div>
742
- {isMulti &&
743
- selectedOptions &&
744
- selectedOptions.length > 0 &&
745
- isClearable && (
746
- <div
747
- className="ia-select-button-clear-icon"
748
- role="button"
749
- onClick={(event) => {
750
- event.stopPropagation();
751
- if (externalOnClearAll) {
752
- externalOnClearAll();
753
- } else {
754
- setSelectedOptions([]);
755
- setIsSelectAll(false);
756
- syncParentChildSelection([]);
757
- }
758
- }}
759
- />
760
- )}
761
- {!isMulti &&
762
- isClearable &&
763
- selectedOptions &&
764
- Object.keys(selectedOptions).length > 0 && (
765
- <div
766
- className="ia-select-button-clear-icon"
767
- role="button"
768
- onClick={(event) => {
769
- event.stopPropagation();
770
- if (externalOnClearAll) {
771
- externalOnClearAll();
772
- } else {
773
- setSelectedOptions([]);
774
- setIsSelectAll(false);
775
- syncParentChildSelection([]);
776
- }
777
- }}
778
- />
779
- )}
780
- <div
781
- className={`ia-select-chevron-icon ${isOpen ? "open" : ""} ${
782
- isDisabled ? "disabled" : ""
783
- }`}
784
- />
785
- </button>
786
- {helperText && (
787
- <HelperText
788
- helper={isError ? helperText : ""}
789
- error={isError}
790
- minWidth={minWidth}
791
- />
792
- )}
793
- {isMulti && isWithSelectedOptionTags && (
794
- <SelectedOptionsTags
795
- selectedOptions={selectedOptions}
796
- setSelectedOptions={setSelectedOptions}
797
- onChange={handleSelect}
798
- />
799
- )}
800
- </>
801
- }
802
- >
803
- <SearchFilter
804
- ref={searchBarRef}
805
- onSearch={(event) =>
806
- handleSearch({
807
- isMulti,
808
- event,
809
- externalOnSearch,
810
- initialOptions,
811
- setCurrentOptions,
812
- setOpenToast,
813
- setToastMessage,
814
- setSearchTerm,
815
- })
816
- }
817
- isMulti={isMulti}
818
- onSelectAll={(event) =>
819
- handleSelectAllWrapper({
820
- event,
821
- externalOnChange,
822
- setIsSelectAll,
823
- initialOptions,
824
- setSelectedOptions,
825
- })
826
- }
827
- onClearAll={() => {
828
- handleClearAllWrapper({
829
- externalOnClearAll,
830
- setSelectedOptions,
831
- setIsSelectAll,
832
- handleSelect,
833
- syncParentChildSelection,
834
- });
835
- }}
836
- isSelectAll={isSelectAll}
837
- selectedOptions={selectedOptions}
838
- toggleSelectAll={toggleSelectAll}
839
- isWithSearch={isWithSearch}
840
- setSelectedOptions={setSelectedOptions}
841
- onKeyDown={(e) => onKeyDown({ e, focusedIndex, currentOptions })}
842
- isClearable={isClearable}
843
- searchPlaceholder={searchPlaceholder}
844
- isLoading={isLoading}
845
- isLoadingMore={isLoadingMore}
846
- searchTerm={searchTerm}
847
- externalOnSearch={externalOnSearch}
848
- setSearchTerm={setSearchTerm}
849
- onSearchBlur={onSearchBlur}
850
- selectionLabels={selectionLabels}
851
- />
852
- <div className="ia-select-dropdown-container" ref={dropdownMenuRef}>
853
- <ReactSelect
854
- {...props}
855
- className="ia-select-dropdown-v3"
856
- classNames={{
857
- option: ({ data }) =>
858
- `ia-select-option${
859
- submenuParent?.value === data?.value
860
- ? " submenu-active"
861
- : ""
862
- }`,
863
- }}
864
- isMulti={isMulti}
865
- autoFocus
866
- backspaceRemovesValue={false}
867
- components={{
868
- IndicatorSeparator: null,
869
- Option: (optionProps) => {
870
- const optionIndex = memoizedOptions.findIndex(
871
- (opt) => opt.value === optionProps.data.value
872
- );
873
-
874
- // Check if it's a child option
875
- const parentOption = (initialOptions || []).find(
876
- (parent) =>
877
- parent.children &&
878
- parent.children.some(
879
- (child) => child.value === optionProps.data.value
880
- )
881
- );
882
-
883
- let isSelected;
884
- if (!isMulti) {
885
- if (isMultiInSubmenu) {
886
- // For isMultiInSubmenu mode
887
- if (parentOption) {
888
- // For child options, check if this child is selected
889
- isSelected =
890
- selectedOptions &&
891
- selectedOptions.children &&
892
- selectedOptions.children.some(
893
- (child) => child.value === optionProps.data.value
894
- );
895
- } else if (optionProps.data.children) {
896
- // For parent options, check if any of its children are selected
897
- isSelected =
898
- selectedOptions &&
899
- selectedOptions.children &&
900
- selectedOptions.children.length > 0 &&
901
- selectedOptions.value === optionProps.data.value;
902
- } else {
903
- // For regular options
904
- isSelected =
905
- selectedOptions &&
906
- selectedOptions.value === optionProps.data.value;
907
- }
908
- } else {
909
- // Normal single select behavior
910
- if (parentOption) {
911
- // For child options, check if this child is in selected parent's children
912
- isSelected =
913
- selectedOptions &&
914
- selectedOptions.children &&
915
- selectedOptions.children.some(
916
- (child) => child.value === optionProps.data.value
917
- );
918
- } else if (optionProps.data.children) {
919
- // For parent options, check if this parent has selected children
920
- isSelected =
921
- selectedOptions &&
922
- selectedOptions.value === optionProps.data.value;
923
- } else {
924
- // For regular options
925
- isSelected =
926
- selectedOptions &&
927
- selectedOptions.value === optionProps.data.value;
928
- }
929
- }
930
- } else {
931
- // Multi select behavior remains unchanged
932
- if (parentOption) {
933
- const selectedParent = Array.isArray(selectedOptions)
934
- ? selectedOptions.find(
935
- (sel) => sel.value === parentOption.value
936
- )
937
- : null;
938
- isSelected =
939
- selectedParent &&
940
- selectedParent.children.some(
941
- (child) => child.value === optionProps.data.value
942
- );
943
- } else {
944
- isSelected = Array.isArray(selectedOptions)
945
- ? selectedOptions.some(
946
- (sel) => sel.value === optionProps.data.value
947
- )
948
- : false;
949
- }
950
- }
951
-
952
- // Check if this option should be disabled due to maxSelectableOptions
953
- const shouldDisableOption =
954
- isMaxLimitReached && !isSelected && isMulti;
955
-
956
- return (
957
- <Option
958
- {...optionProps}
959
- isSelected={isSelected}
960
- selectedOptions={selectedOptions}
961
- initialOptions={initialOptions}
962
- isDisabled={
963
- shouldDisableOption ||
964
- optionProps?.data?.disabled ||
965
- optionProps?.data?.isDisabled
966
- }
967
- customOptionProps={{
968
- onMouseEnter: (e) => {
969
- handleOptionHover(optionProps.data, optionIndex, e);
970
- },
971
- }}
972
- />
973
- );
974
- },
975
- ...(!isGrouped && { MenuList }),
976
- ...(isGrouped && {
977
- GroupHeading: (props) => (
978
- <CustomGroupHeading
979
- {...props}
980
- customBadgeLabel={customBadgeLabel}
981
- customBadgeColor={customBadgeColor}
982
- />
983
- ),
984
- }),
985
- }}
986
- controlShouldRenderValue={true}
987
- hideSelectedOptions={false}
988
- isClearable={isClearable}
989
- menuIsOpen
990
- tabSelectsValue={false}
991
- onChange={(selectedOptions, actionMeta) => {
992
- const option = actionMeta?.option;
993
- const index = memoizedOptions.findIndex(
994
- (opt) =>
995
- opt.value === (option?.value || selectedOptions?.value)
996
- );
997
- if (!isMulti) {
998
- actionMeta.option = selectedOptions;
999
- }
1000
- handleSelect(selectedOptions, actionMeta, index);
1001
- }}
1002
- options={memoizedOptions}
1003
- placeholder="Search..."
1004
- value={selectedOptions}
1005
- styles={selectStyles}
1006
- isLoading={isLoading}
1007
- isLoadingMore={isLoadingMore}
1008
- onMenuScrollToBottom={onMenuScrollToBottom}
1009
- menuShouldBlockScroll={menuShouldBlockScroll}
1010
- captureMenuScroll={false}
1011
- noOptionMessage={noOptionMessage}
1012
- />
1013
- {submenuOptions && (
1014
- <div
1015
- className="ia-select-submenu"
1016
- style={{
1017
- position: "absolute",
1018
- top: submenuPosition.top,
1019
- bottom: submenuPosition.bottom,
1020
- left: submenuPosition.left,
1021
- width: submenuPosition.width,
1022
- }}
1023
- onMouseEnter={() => {
1024
- setIsSubmenuHovered(true);
1025
- if (submenuTimeoutRef.current) {
1026
- clearTimeout(submenuTimeoutRef.current);
1027
- }
1028
- }}
1029
- onMouseLeave={() => {
1030
- setIsSubmenuHovered(false);
1031
- submenuTimeoutRef.current = setTimeout(() => {
1032
- if (!isSubmenuHovered) {
1033
- setSubmenuOptions(null);
1034
- setSubmenuParent(null);
1035
- }
1036
- }, 100);
1037
- }}
1038
- >
1039
- <div className="ia-select-submenu-content">
1040
- {submenuOptions.map((option) => {
1041
- // For single select with multi submenu, check if this child is selected
1042
- const isChildSelected = !isMulti
1043
- ? isMultiInSubmenu
1044
- ? selectedOptions &&
1045
- selectedOptions.children &&
1046
- selectedOptions.children.some(
1047
- (child) => child.value === option.value
1048
- )
1049
- : selectedOptions &&
1050
- selectedOptions.children &&
1051
- selectedOptions.children.some(
1052
- (child) => child.value === option.value
1053
- )
1054
- : (() => {
1055
- const selectedOptionsArray = Array.isArray(
1056
- selectedOptions
1057
- )
1058
- ? selectedOptions
1059
- : [];
1060
- const parentOption = selectedOptionsArray.find(
1061
- (sel) => sel.value === submenuParent.value
1062
- );
1063
- return parentOption
1064
- ? parentOption.children.some(
1065
- (child) => child.value === option.value
1066
- )
1067
- : false;
1068
- })();
1069
-
1070
- // Children should never be disabled based on maxSelectableOptions
1071
- // since we only count at parent level
1072
- const shouldDisableSubmenuOption = false;
1073
-
1074
- return (
1075
- <div
1076
- key={option.value}
1077
- className={`select-option-content${
1078
- isChildSelected ? " selected" : ""
1079
- } ${shouldDisableSubmenuOption ? " disabled" : ""}`}
1080
- onClick={(event) => {
1081
- if (shouldDisableSubmenuOption) {
1082
- event.stopPropagation();
1083
- return;
1084
- }
1085
- if (!isMulti) {
1086
- if (isMultiInSubmenu) {
1087
- // Handle multi-select in submenu for single select mode
1088
- if (isChildSelected) {
1089
- // If child is already selected, remove it
1090
- if (
1091
- selectedOptions &&
1092
- selectedOptions.children
1093
- ) {
1094
- const updatedChildren =
1095
- selectedOptions.children.filter(
1096
- (child) => child.value !== option.value
1097
- );
1098
- if (updatedChildren.length === 0) {
1099
- // If no children left, remove the parent completely
1100
- setSelectedOptions(null);
1101
- if (externalOnChange) {
1102
- externalOnChange(null, { option }, null);
1103
- }
1104
- } else {
1105
- const newSelectedOptions = {
1106
- ...selectedOptions,
1107
- children: updatedChildren,
1108
- };
1109
- setSelectedOptions(newSelectedOptions);
1110
- if (externalOnChange) {
1111
- externalOnChange(
1112
- newSelectedOptions,
1113
- { option },
1114
- null
1115
- );
1116
- }
1117
- }
1118
- }
1119
- } else {
1120
- // If child is not selected, add it
1121
- if (!selectedOptions) {
1122
- // First selection - initialize with current parent
1123
- // Check maxSelectableOptions limit before adding new parent
1124
- if (maxSelectableOptions !== undefined) {
1125
- const currentCount =
1126
- countTotalSelectedOptions(
1127
- selectedOptions
1128
- );
1129
- if (currentCount >= maxSelectableOptions) {
1130
- return;
1131
- }
1132
- }
1133
- const newSelectedOptions = {
1134
- ...submenuParent,
1135
- children: [option],
1136
- };
1137
- setSelectedOptions(newSelectedOptions);
1138
- if (externalOnChange) {
1139
- externalOnChange(
1140
- newSelectedOptions,
1141
- { option },
1142
- null
1143
- );
1144
- }
1145
- } else if (
1146
- selectedOptions.value === submenuParent.value
1147
- ) {
1148
- // Same parent - add to existing children (no limit check needed)
1149
- const newSelectedOptions = {
1150
- ...selectedOptions,
1151
- children: [
1152
- ...(selectedOptions.children || []),
1153
- option,
1154
- ],
1155
- };
1156
- setSelectedOptions(newSelectedOptions);
1157
- if (externalOnChange) {
1158
- externalOnChange(
1159
- newSelectedOptions,
1160
- { option },
1161
- null
1162
- );
1163
- }
1164
- } else {
1165
- // Different parent - replace with new parent and child
1166
- // Check maxSelectableOptions limit before adding new parent
1167
- if (maxSelectableOptions !== undefined) {
1168
- const currentCount =
1169
- countTotalSelectedOptions(
1170
- selectedOptions
1171
- );
1172
- if (currentCount >= maxSelectableOptions) {
1173
- return;
1174
- }
1175
- }
1176
- const newSelectedOptions = {
1177
- ...submenuParent,
1178
- children: [option],
1179
- };
1180
- setSelectedOptions(newSelectedOptions);
1181
- if (externalOnChange) {
1182
- externalOnChange(
1183
- newSelectedOptions,
1184
- { option },
1185
- null
1186
- );
1187
- }
1188
- }
1189
- }
1190
- } else {
1191
- // Normal single select behavior - always pass parent with selected child
1192
- const newSelectedOptions = {
1193
- ...submenuParent,
1194
- children: [option],
1195
- };
1196
- setSelectedOptions(newSelectedOptions);
1197
- if (externalOnChange) {
1198
- externalOnChange(
1199
- newSelectedOptions,
1200
- { option },
1201
- null
1202
- );
1203
- }
1204
- handleDropdownClose({
1205
- externalOnDropdownClose,
1206
- setCurrentOptions,
1207
- initialOptions,
1208
- currentOptions,
1209
- setIsOpen,
1210
- onBlur,
1211
- event: event,
1212
- });
1213
- }
1214
- } else {
1215
- // Existing multi-select logic
1216
- const newSelectedOptions = Array.isArray(
1217
- selectedOptions
1218
- )
1219
- ? [...selectedOptions]
1220
- : [];
1221
- const parentIndex = newSelectedOptions.findIndex(
1222
- (sel) => sel.value === submenuParent.value
1223
- );
1224
-
1225
- if (isChildSelected) {
1226
- if (parentIndex !== -1) {
1227
- const parent = newSelectedOptions[parentIndex];
1228
- parent.children = parent.children.filter(
1229
- (child) => child.value !== option.value
1230
- );
1231
- if (parent.children.length === 0) {
1232
- newSelectedOptions.splice(parentIndex, 1);
1233
- }
1234
- }
1235
- } else {
1236
- if (parentIndex !== -1) {
1237
- // Parent exists - add child (no limit check needed)
1238
- const parent = newSelectedOptions[parentIndex];
1239
- if (
1240
- !parent.children.some(
1241
- (child) => child.value === option.value
1242
- )
1243
- ) {
1244
- parent.children.push(option);
1245
- }
1246
- } else {
1247
- // Parent doesn't exist - check limit before adding new parent
1248
- if (maxSelectableOptions !== undefined) {
1249
- const currentCount =
1250
- countTotalSelectedOptions(selectedOptions);
1251
- if (currentCount >= maxSelectableOptions) {
1252
- return;
1253
- }
1254
- }
1255
- newSelectedOptions.push({
1256
- ...submenuParent,
1257
- children: [option],
1258
- });
1259
- }
1260
- }
1261
- setSelectedOptions(newSelectedOptions);
1262
- if (externalOnChange) {
1263
- externalOnChange(
1264
- newSelectedOptions,
1265
- { option },
1266
- null
1267
- );
1268
- }
1269
- }
1270
- }}
1271
- >
1272
- {isMulti || isMultiInSubmenu ? (
1273
- <Checkbox
1274
- withoutFormLabel={true}
1275
- label={
1276
- <div className="select-label-with-icon">
1277
- {option.label}
1278
- </div>
1279
- }
1280
- checked={isChildSelected || false}
1281
- onChange={() => null}
1282
- disabled={shouldDisableSubmenuOption}
1283
- />
1284
- ) : (
1285
- <div className="select-label-with-icon">
1286
- {option.label}
1287
- </div>
1288
- )}
1289
- </div>
1290
- );
1291
- })}
1292
- </div>
1293
- </div>
1294
- )}
1295
- </div>
1296
- </Dropdown>
1297
- </div>
1298
- <Toast
1299
- isOpen={openToast}
1300
- message={toastMessage}
1301
- onClose={() => setOpenToast(!openToast)}
1302
- position="top-right"
1303
- variant="error"
1304
- />
1305
- </div>
1306
- );
1307
- });