@zohodesk/components 1.0.0-alpha-271 → 1.0.0-alpha-273

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 (436) hide show
  1. package/README.md +8 -0
  2. package/es/Accordion/Accordion.js +7 -3
  3. package/es/Accordion/AccordionItem.js +4 -2
  4. package/es/Animation/Animation.js +3 -3
  5. package/es/AppContainer/AppContainer.js +13 -5
  6. package/es/AppContainer/AppContainer.module.css +2 -2
  7. package/es/Avatar/Avatar.js +23 -11
  8. package/es/Avatar/Avatar.module.css +18 -18
  9. package/es/AvatarTeam/AvatarTeam.js +3 -3
  10. package/es/AvatarTeam/AvatarTeam.module.css +35 -35
  11. package/es/Button/Button.js +4 -3
  12. package/es/Button/css/Button.module.css +70 -70
  13. package/es/Buttongroup/Buttongroup.js +3 -3
  14. package/es/Buttongroup/Buttongroup.module.css +14 -15
  15. package/es/Card/Card.js +21 -10
  16. package/es/CheckBox/CheckBox.js +5 -3
  17. package/es/CheckBox/CheckBox.module.css +15 -15
  18. package/es/DateTime/CalendarView.js +32 -20
  19. package/es/DateTime/DateTime.js +75 -10
  20. package/es/DateTime/DateTime.module.css +39 -39
  21. package/es/DateTime/DateTimePopupFooter.js +4 -2
  22. package/es/DateTime/DateTimePopupHeader.js +8 -2
  23. package/es/DateTime/DateWidget.js +98 -35
  24. package/es/DateTime/DateWidget.module.css +5 -5
  25. package/es/DateTime/DaysRow.js +4 -2
  26. package/es/DateTime/Time.js +10 -2
  27. package/es/DateTime/YearView.js +28 -4
  28. package/es/DateTime/YearView.module.css +15 -15
  29. package/es/DateTime/__tests__/CalendarView.spec.js +1 -0
  30. package/es/DateTime/__tests__/DateTime.spec.js +1 -0
  31. package/es/DateTime/__tests__/DateWidget.spec.js +2 -3
  32. package/es/DateTime/common.js +3 -0
  33. package/es/DateTime/constants.js +1 -0
  34. package/es/DateTime/dateFormatUtils/dateFormat.js +63 -30
  35. package/es/DateTime/dateFormatUtils/dateFormats.js +0 -1
  36. package/es/DateTime/dateFormatUtils/dayChange.js +13 -4
  37. package/es/DateTime/dateFormatUtils/index.js +32 -2
  38. package/es/DateTime/dateFormatUtils/monthChange.js +8 -0
  39. package/es/DateTime/dateFormatUtils/timeChange.js +22 -6
  40. package/es/DateTime/dateFormatUtils/yearChange.js +11 -2
  41. package/es/DateTime/objectUtils.js +14 -20
  42. package/es/DateTime/props/defaultProps.js +2 -1
  43. package/es/DateTime/typeChecker.js +3 -0
  44. package/es/DateTime/validator.js +58 -6
  45. package/es/DropBox/DropBox.js +6 -2
  46. package/es/DropBox/DropBoxElement/DropBoxElement.js +7 -0
  47. package/es/DropBox/DropBoxElement/css/DropBoxElement.module.css +76 -76
  48. package/es/DropBox/DropBoxElement/css/cssJSLogic.js +5 -3
  49. package/es/DropBox/DropBoxElement/useDropboxPosCalc.js +3 -0
  50. package/es/DropBox/css/DropBox.module.css +6 -6
  51. package/es/DropBox/props/defaultProps.js +1 -2
  52. package/es/DropBox/props/propTypes.js +1 -2
  53. package/es/DropDown/DropDown.js +8 -4
  54. package/es/DropDown/DropDown.module.css +2 -2
  55. package/es/DropDown/DropDownHeading.js +4 -5
  56. package/es/DropDown/DropDownHeading.module.css +6 -6
  57. package/es/DropDown/DropDownItem.js +6 -0
  58. package/es/DropDown/DropDownItem.module.css +12 -12
  59. package/es/DropDown/DropDownSearch.js +4 -0
  60. package/es/DropDown/DropDownSearch.module.css +3 -3
  61. package/es/DropDown/DropDownSeparator.js +1 -0
  62. package/es/DropDown/DropDownSeparator.module.css +2 -2
  63. package/es/DropDown/__tests__/DropDown.spec.js +1 -2
  64. package/es/Heading/Heading.js +2 -3
  65. package/es/Heading/Heading.module.css +2 -2
  66. package/es/Label/Label.js +2 -3
  67. package/es/Label/Label.module.css +5 -5
  68. package/es/Layout/Box.js +13 -0
  69. package/es/Layout/Container.js +12 -1
  70. package/es/Layout/Layout.module.css +15 -15
  71. package/es/Layout/index.js +1 -2
  72. package/es/ListItem/ListContainer.js +8 -3
  73. package/es/ListItem/ListItem.js +9 -3
  74. package/es/ListItem/ListItem.module.css +38 -38
  75. package/es/ListItem/ListItemWithAvatar.js +9 -3
  76. package/es/ListItem/ListItemWithCheckBox.js +7 -2
  77. package/es/ListItem/ListItemWithIcon.js +8 -3
  78. package/es/ListItem/ListItemWithRadio.js +7 -3
  79. package/es/Modal/Modal.js +28 -11
  80. package/es/MultiSelect/AdvancedGroupMultiSelect.js +89 -13
  81. package/es/MultiSelect/AdvancedMultiSelect.js +32 -9
  82. package/es/MultiSelect/EmptyState.js +2 -0
  83. package/es/MultiSelect/MultiSelect.js +99 -32
  84. package/es/MultiSelect/MultiSelect.module.css +31 -31
  85. package/es/MultiSelect/MultiSelectHeader.js +3 -0
  86. package/es/MultiSelect/MultiSelectWithAvatar.js +12 -6
  87. package/es/MultiSelect/SelectedOptions.js +6 -3
  88. package/es/MultiSelect/SelectedOptions.module.css +5 -5
  89. package/es/MultiSelect/Suggestions.js +7 -3
  90. package/es/MultiSelect/__tests__/MultiSelect.spec.js +4 -6
  91. package/es/MultiSelect/props/propTypes.js +2 -0
  92. package/es/PopOver/PopOver.js +18 -2
  93. package/es/PopOver/__tests__/PopOver.spec.js +2 -1
  94. package/es/Popup/Popup.js +77 -24
  95. package/es/Popup/__tests__/Popup.spec.js +17 -5
  96. package/es/Popup/viewPort.js +16 -4
  97. package/es/Provider/IdProvider.js +10 -5
  98. package/es/Provider/LibraryContext.js +6 -4
  99. package/es/Provider/NumberGenerator/NumberGenerator.js +21 -7
  100. package/es/Provider/ZindexProvider.js +9 -2
  101. package/es/Radio/Radio.js +4 -2
  102. package/es/Radio/Radio.module.css +9 -9
  103. package/es/Responsive/CustomResponsive.js +30 -18
  104. package/es/Responsive/RefWrapper.js +6 -7
  105. package/es/Responsive/ResizeComponent.js +35 -25
  106. package/es/Responsive/ResizeObserver.js +26 -6
  107. package/es/Responsive/Responsive.js +34 -20
  108. package/es/Responsive/index.js +1 -3
  109. package/es/Responsive/sizeObservers.js +28 -7
  110. package/es/Responsive/utils/index.js +7 -5
  111. package/es/Responsive/utils/shallowCompare.js +7 -2
  112. package/es/Responsive/windowResizeObserver.js +7 -0
  113. package/es/ResponsiveDropBox/ResponsiveDropBox.js +4 -0
  114. package/es/ResponsiveDropBox/ResponsiveDropBox.module.css +2 -2
  115. package/es/Ribbon/Ribbon.js +3 -2
  116. package/es/Ribbon/Ribbon.module.css +46 -48
  117. package/es/RippleEffect/RippleEffect.js +1 -3
  118. package/es/Select/GroupSelect.js +58 -14
  119. package/es/Select/Select.js +79 -33
  120. package/es/Select/Select.module.css +23 -23
  121. package/es/Select/SelectWithAvatar.js +17 -4
  122. package/es/Select/SelectWithIcon.js +46 -5
  123. package/es/Select/__tests__/Select.spec.js +6 -8
  124. package/es/Select/props/propTypes.js +1 -0
  125. package/es/Stencils/Stencils.js +3 -3
  126. package/es/Stencils/Stencils.module.css +11 -11
  127. package/es/Switch/Switch.js +5 -3
  128. package/es/Switch/Switch.module.css +23 -23
  129. package/es/Tab/Tab.js +4 -4
  130. package/es/Tab/Tab.module.css +14 -14
  131. package/es/Tab/TabContent.js +1 -0
  132. package/es/Tab/TabContentWrapper.js +2 -0
  133. package/es/Tab/TabWrapper.js +5 -2
  134. package/es/Tab/Tabs.js +54 -7
  135. package/es/Tab/Tabs.module.css +22 -22
  136. package/es/Tab/__tests__/Tab.spec.js +1 -3
  137. package/es/Tab/__tests__/TabWrapper.spec.js +1 -0
  138. package/es/Tag/Tag.js +6 -3
  139. package/es/Tag/Tag.module.css +25 -25
  140. package/es/TextBox/TextBox.js +15 -3
  141. package/es/TextBox/TextBox.module.css +9 -9
  142. package/es/TextBox/__tests__/TextBox.spec.js +1 -4
  143. package/es/TextBoxIcon/TextBoxIcon.js +9 -2
  144. package/es/TextBoxIcon/TextBoxIcon.module.css +7 -7
  145. package/es/TextBoxIcon/__tests__/TextBoxIcon.spec.js +2 -7
  146. package/es/Textarea/Textarea.js +12 -3
  147. package/es/Textarea/Textarea.module.css +21 -21
  148. package/es/Textarea/__tests__/Textarea.spec.js +2 -2
  149. package/es/Tooltip/Tooltip.js +58 -14
  150. package/es/Tooltip/Tooltip.module.css +5 -5
  151. package/es/Tooltip/__tests__/Tooltip.spec.js +5 -0
  152. package/es/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +3 -2
  153. package/es/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +7 -5
  154. package/es/common/animation.module.css +8 -8
  155. package/es/common/avatarsizes.module.css +16 -16
  156. package/es/common/basicReset.module.css +3 -3
  157. package/es/common/common.module.css +24 -24
  158. package/es/common/customscroll.module.css +2 -2
  159. package/es/deprecated/AdvancedMultiSelect.module.css +18 -18
  160. package/es/deprecated/PortalLayer/PortalLayer.js +25 -20
  161. package/es/semantic/Button/Button.js +3 -2
  162. package/es/semantic/Button/semanticButton.module.css +1 -1
  163. package/es/utils/Common.js +54 -9
  164. package/es/utils/ContextOptimizer.js +4 -5
  165. package/es/utils/__tests__/debounce.spec.js +2 -2
  166. package/es/utils/constructFullName.js +2 -0
  167. package/es/utils/css/compileClassNames.js +5 -0
  168. package/es/utils/css/mergeStyle.js +7 -6
  169. package/es/utils/css/utils.js +1 -0
  170. package/es/utils/datetime/GMTZones.js +48 -0
  171. package/es/utils/datetime/common.js +31 -7
  172. package/es/utils/debounce.js +5 -1
  173. package/es/utils/dropDownUtils.js +68 -11
  174. package/es/utils/getInitial.js +4 -0
  175. package/es/utils/shallowEqual.js +6 -0
  176. package/lib/Accordion/Accordion.js +42 -18
  177. package/lib/Accordion/AccordionItem.js +40 -18
  178. package/lib/Accordion/__tests__/Accordion.spec.js +3 -0
  179. package/lib/Accordion/index.js +3 -0
  180. package/lib/Accordion/props/propTypes.js +3 -0
  181. package/lib/Animation/Animation.js +38 -18
  182. package/lib/Animation/__tests__/Animation.spec.js +11 -7
  183. package/lib/Animation/props/propTypes.js +3 -0
  184. package/lib/AppContainer/AppContainer.js +56 -21
  185. package/lib/AppContainer/AppContainer.module.css +2 -2
  186. package/lib/AppContainer/props/propTypes.js +3 -0
  187. package/lib/Avatar/Avatar.js +78 -38
  188. package/lib/Avatar/Avatar.module.css +18 -18
  189. package/lib/Avatar/__tests__/Avatar.spec.js +44 -0
  190. package/lib/Avatar/props/propTypes.js +3 -0
  191. package/lib/AvatarTeam/AvatarTeam.js +52 -30
  192. package/lib/AvatarTeam/AvatarTeam.module.css +35 -35
  193. package/lib/AvatarTeam/__tests__/AvatarTeam.spec.js +13 -0
  194. package/lib/AvatarTeam/props/propTypes.js +3 -0
  195. package/lib/Button/Button.js +31 -20
  196. package/lib/Button/css/Button.module.css +70 -70
  197. package/lib/Button/css/cssJSLogic.js +18 -17
  198. package/lib/Button/index.js +3 -0
  199. package/lib/Button/props/defaultProps.js +2 -0
  200. package/lib/Button/props/propTypes.js +3 -0
  201. package/lib/Buttongroup/Buttongroup.js +32 -12
  202. package/lib/Buttongroup/Buttongroup.module.css +14 -15
  203. package/lib/Buttongroup/__test__/Buttongroup.spec.js +10 -0
  204. package/lib/Buttongroup/props/propTypes.js +3 -0
  205. package/lib/Card/Card.js +102 -46
  206. package/lib/Card/__tests__/Card.spec.js +10 -1
  207. package/lib/Card/index.js +4 -0
  208. package/lib/Card/props/propTypes.js +3 -0
  209. package/lib/CheckBox/CheckBox.js +71 -47
  210. package/lib/CheckBox/CheckBox.module.css +15 -15
  211. package/lib/CheckBox/__tests__/CheckBox.spec.js +3 -0
  212. package/lib/CheckBox/props/propTypes.js +3 -0
  213. package/lib/DateTime/CalendarView.js +82 -42
  214. package/lib/DateTime/DateTime.js +246 -158
  215. package/lib/DateTime/DateTime.module.css +39 -39
  216. package/lib/DateTime/DateTimePopupFooter.js +31 -8
  217. package/lib/DateTime/DateTimePopupHeader.js +48 -17
  218. package/lib/DateTime/DateWidget.js +352 -250
  219. package/lib/DateTime/DateWidget.module.css +5 -5
  220. package/lib/DateTime/DaysRow.js +27 -5
  221. package/lib/DateTime/Time.js +73 -32
  222. package/lib/DateTime/YearView.js +77 -28
  223. package/lib/DateTime/YearView.module.css +15 -15
  224. package/lib/DateTime/__tests__/CalendarView.spec.js +13 -5
  225. package/lib/DateTime/__tests__/DateTime.spec.js +51 -37
  226. package/lib/DateTime/__tests__/DateWidget.spec.js +10 -8
  227. package/lib/DateTime/common.js +6 -0
  228. package/lib/DateTime/constants.js +1 -0
  229. package/lib/DateTime/dateFormatUtils/dateFormat.js +184 -122
  230. package/lib/DateTime/dateFormatUtils/dateFormats.js +0 -1
  231. package/lib/DateTime/dateFormatUtils/dayChange.js +14 -7
  232. package/lib/DateTime/dateFormatUtils/index.js +74 -16
  233. package/lib/DateTime/dateFormatUtils/monthChange.js +19 -9
  234. package/lib/DateTime/dateFormatUtils/timeChange.js +54 -22
  235. package/lib/DateTime/dateFormatUtils/yearChange.js +22 -11
  236. package/lib/DateTime/index.js +2 -0
  237. package/lib/DateTime/objectUtils.js +24 -20
  238. package/lib/DateTime/props/defaultProps.js +2 -1
  239. package/lib/DateTime/props/propTypes.js +11 -1
  240. package/lib/DateTime/typeChecker.js +4 -0
  241. package/lib/DateTime/validator.js +73 -10
  242. package/lib/DropBox/DropBox.js +34 -10
  243. package/lib/DropBox/DropBoxElement/DropBoxElement.js +59 -38
  244. package/lib/DropBox/DropBoxElement/css/DropBoxElement.module.css +76 -76
  245. package/lib/DropBox/DropBoxElement/css/cssJSLogic.js +42 -34
  246. package/lib/DropBox/DropBoxElement/props/propTypes.js +3 -0
  247. package/lib/DropBox/DropBoxElement/useDropboxPosCalc.js +14 -9
  248. package/lib/DropBox/__tests__/DropBox.spec.js +6 -2
  249. package/lib/DropBox/css/DropBox.module.css +6 -6
  250. package/lib/DropBox/css/cssJSLogic.js +3 -1
  251. package/lib/DropBox/props/defaultProps.js +8 -4
  252. package/lib/DropBox/props/propTypes.js +10 -4
  253. package/lib/DropDown/DropDown.js +52 -8
  254. package/lib/DropDown/DropDown.module.css +2 -2
  255. package/lib/DropDown/DropDownHeading.js +39 -20
  256. package/lib/DropDown/DropDownHeading.module.css +6 -6
  257. package/lib/DropDown/DropDownItem.js +42 -20
  258. package/lib/DropDown/DropDownItem.module.css +12 -12
  259. package/lib/DropDown/DropDownSearch.js +40 -17
  260. package/lib/DropDown/DropDownSearch.module.css +3 -3
  261. package/lib/DropDown/DropDownSeparator.js +24 -4
  262. package/lib/DropDown/DropDownSeparator.module.css +2 -2
  263. package/lib/DropDown/__tests__/DropDown.spec.js +15 -9
  264. package/lib/DropDown/__tests__/DropDownItem.spec.js +9 -4
  265. package/lib/DropDown/__tests__/DropDownSearch.spec.js +3 -0
  266. package/lib/DropDown/index.js +9 -0
  267. package/lib/DropDown/props/propTypes.js +6 -4
  268. package/lib/Heading/Heading.js +37 -15
  269. package/lib/Heading/Heading.module.css +2 -2
  270. package/lib/Heading/props/propTypes.js +3 -0
  271. package/lib/Label/Label.js +39 -19
  272. package/lib/Label/Label.module.css +5 -5
  273. package/lib/Label/__tests__/Label.spec.js +14 -1
  274. package/lib/Label/props/propTypes.js +3 -0
  275. package/lib/Layout/Box.js +31 -11
  276. package/lib/Layout/Container.js +29 -10
  277. package/lib/Layout/Layout.module.css +15 -15
  278. package/lib/Layout/__tests__/Box.spec.js +65 -49
  279. package/lib/Layout/__tests__/Container.spec.js +67 -50
  280. package/lib/Layout/index.js +3 -0
  281. package/lib/Layout/props/propTypes.js +3 -0
  282. package/lib/Layout/utils.js +10 -0
  283. package/lib/ListItem/ListContainer.js +48 -27
  284. package/lib/ListItem/ListItem.js +69 -45
  285. package/lib/ListItem/ListItem.module.css +38 -38
  286. package/lib/ListItem/ListItemWithAvatar.js +75 -48
  287. package/lib/ListItem/ListItemWithCheckBox.js +64 -39
  288. package/lib/ListItem/ListItemWithIcon.js +68 -44
  289. package/lib/ListItem/ListItemWithRadio.js +65 -41
  290. package/lib/ListItem/index.js +7 -0
  291. package/lib/ListItem/props/propTypes.js +6 -4
  292. package/lib/Modal/Modal.js +45 -10
  293. package/lib/Modal/props/propTypes.js +3 -0
  294. package/lib/MultiSelect/AdvancedGroupMultiSelect.js +294 -166
  295. package/lib/MultiSelect/AdvancedMultiSelect.js +202 -125
  296. package/lib/MultiSelect/EmptyState.js +45 -24
  297. package/lib/MultiSelect/MultiSelect.js +323 -206
  298. package/lib/MultiSelect/MultiSelect.module.css +31 -31
  299. package/lib/MultiSelect/MultiSelectHeader.js +30 -8
  300. package/lib/MultiSelect/MultiSelectWithAvatar.js +105 -63
  301. package/lib/MultiSelect/SelectedOptions.js +43 -17
  302. package/lib/MultiSelect/SelectedOptions.module.css +5 -5
  303. package/lib/MultiSelect/Suggestions.js +64 -32
  304. package/lib/MultiSelect/__tests__/MultiSelect.spec.js +86 -75
  305. package/lib/MultiSelect/index.js +5 -0
  306. package/lib/MultiSelect/props/defaultProps.js +2 -0
  307. package/lib/MultiSelect/props/propTypes.js +5 -0
  308. package/lib/PopOver/PopOver.js +95 -49
  309. package/lib/PopOver/__tests__/PopOver.spec.js +4 -1
  310. package/lib/PopOver/index.js +4 -0
  311. package/lib/PopOver/props/propTypes.js +3 -0
  312. package/lib/Popup/Popup.js +158 -81
  313. package/lib/Popup/__tests__/Popup.spec.js +43 -8
  314. package/lib/Popup/viewPort.js +28 -14
  315. package/lib/Provider/AvatarSize.js +4 -0
  316. package/lib/Provider/Config.js +2 -0
  317. package/lib/Provider/CssProvider.js +4 -0
  318. package/lib/Provider/IdProvider.js +17 -6
  319. package/lib/Provider/LibraryContext.js +35 -15
  320. package/lib/Provider/LibraryContextInit.js +4 -0
  321. package/lib/Provider/NumberGenerator/NumberGenerator.js +44 -15
  322. package/lib/Provider/ZindexProvider.js +15 -3
  323. package/lib/Provider/index.js +5 -0
  324. package/lib/Radio/Radio.js +61 -38
  325. package/lib/Radio/Radio.module.css +9 -9
  326. package/lib/Radio/__tests__/Radiospec.js +9 -5
  327. package/lib/Radio/props/propTypes.js +3 -0
  328. package/lib/Responsive/CustomResponsive.js +73 -29
  329. package/lib/Responsive/RefWrapper.js +17 -11
  330. package/lib/Responsive/ResizeComponent.js +62 -36
  331. package/lib/Responsive/ResizeObserver.js +24 -10
  332. package/lib/Responsive/Responsive.js +80 -30
  333. package/lib/Responsive/index.js +4 -0
  334. package/lib/Responsive/props/propTypes.js +3 -0
  335. package/lib/Responsive/sizeObservers.js +53 -17
  336. package/lib/Responsive/utils/index.js +11 -3
  337. package/lib/Responsive/utils/shallowCompare.js +11 -2
  338. package/lib/Responsive/windowResizeObserver.js +8 -0
  339. package/lib/ResponsiveDropBox/ResponsiveDropBox.js +45 -17
  340. package/lib/ResponsiveDropBox/ResponsiveDropBox.module.css +2 -2
  341. package/lib/ResponsiveDropBox/props/propTypes.js +3 -0
  342. package/lib/Ribbon/Ribbon.js +33 -13
  343. package/lib/Ribbon/Ribbon.module.css +46 -48
  344. package/lib/Ribbon/__tests__/Ribbon.spec.js +22 -0
  345. package/lib/Ribbon/props/propTypes.js +3 -0
  346. package/lib/RippleEffect/RippleEffect.js +18 -10
  347. package/lib/RippleEffect/props/propTypes.js +3 -0
  348. package/lib/Select/GroupSelect.js +229 -130
  349. package/lib/Select/Select.js +290 -209
  350. package/lib/Select/Select.module.css +23 -23
  351. package/lib/Select/SelectWithAvatar.js +102 -56
  352. package/lib/Select/SelectWithIcon.js +132 -76
  353. package/lib/Select/__tests__/Select.spec.js +133 -91
  354. package/lib/Select/index.js +5 -0
  355. package/lib/Select/props/defaultProps.js +5 -4
  356. package/lib/Select/props/propTypes.js +4 -0
  357. package/lib/Stencils/Stencils.js +29 -10
  358. package/lib/Stencils/Stencils.module.css +11 -11
  359. package/lib/Stencils/__tests__/Stencils.spec.js +12 -0
  360. package/lib/Stencils/props/propTypes.js +3 -0
  361. package/lib/Switch/Switch.js +57 -34
  362. package/lib/Switch/Switch.module.css +23 -23
  363. package/lib/Switch/props/propTypes.js +3 -0
  364. package/lib/Tab/Tab.js +40 -27
  365. package/lib/Tab/Tab.module.css +14 -14
  366. package/lib/Tab/TabContent.js +12 -5
  367. package/lib/Tab/TabContentWrapper.js +13 -6
  368. package/lib/Tab/TabWrapper.js +37 -19
  369. package/lib/Tab/Tabs.js +171 -91
  370. package/lib/Tab/Tabs.module.css +22 -22
  371. package/lib/Tab/__tests__/Tab.spec.js +67 -58
  372. package/lib/Tab/__tests__/TabContent.spec.js +10 -6
  373. package/lib/Tab/__tests__/TabContentWrapper.spec.js +28 -20
  374. package/lib/Tab/__tests__/TabWrapper.spec.js +12 -0
  375. package/lib/Tab/__tests__/Tabs.spec.js +53 -39
  376. package/lib/Tab/index.js +6 -0
  377. package/lib/Tab/props/propTypes.js +3 -0
  378. package/lib/Tag/Tag.js +72 -43
  379. package/lib/Tag/Tag.module.css +25 -25
  380. package/lib/Tag/__tests__/Tag.spec.js +14 -8
  381. package/lib/Tag/props/propTypes.js +3 -0
  382. package/lib/TextBox/TextBox.js +85 -59
  383. package/lib/TextBox/TextBox.module.css +9 -9
  384. package/lib/TextBox/__tests__/TextBox.spec.js +14 -4
  385. package/lib/TextBox/props/propTypes.js +6 -4
  386. package/lib/TextBoxIcon/TextBoxIcon.js +79 -52
  387. package/lib/TextBoxIcon/TextBoxIcon.module.css +7 -7
  388. package/lib/TextBoxIcon/__tests__/TextBoxIcon.spec.js +14 -5
  389. package/lib/TextBoxIcon/props/propTypes.js +3 -0
  390. package/lib/Textarea/Textarea.js +54 -29
  391. package/lib/Textarea/Textarea.module.css +21 -21
  392. package/lib/Textarea/__tests__/Textarea.spec.js +14 -2
  393. package/lib/Textarea/props/propTypes.js +3 -0
  394. package/lib/Tooltip/Tooltip.js +94 -31
  395. package/lib/Tooltip/Tooltip.module.css +5 -5
  396. package/lib/Tooltip/__tests__/Tooltip.spec.js +24 -3
  397. package/lib/Tooltip/props/propTypes.js +3 -0
  398. package/lib/VelocityAnimation/VelocityAnimation/VelocityAnimation.js +40 -16
  399. package/lib/VelocityAnimation/VelocityAnimation/props/propTypes.js +3 -0
  400. package/lib/VelocityAnimation/VelocityAnimationGroup/VelocityAnimationGroup.js +53 -25
  401. package/lib/VelocityAnimation/VelocityAnimationGroup/props/propTypes.js +3 -0
  402. package/lib/VelocityAnimation/index.js +3 -0
  403. package/lib/common/animation.module.css +8 -8
  404. package/lib/common/avatarsizes.module.css +16 -16
  405. package/lib/common/basicReset.module.css +3 -3
  406. package/lib/common/common.module.css +24 -24
  407. package/lib/common/customscroll.module.css +2 -2
  408. package/lib/css.js +40 -0
  409. package/lib/deprecated/AdvancedMultiSelect.module.css +18 -18
  410. package/lib/deprecated/PortalLayer/PortalLayer.js +46 -23
  411. package/lib/deprecated/PortalLayer/props/propTypes.js +3 -0
  412. package/lib/index.js +57 -0
  413. package/lib/semantic/Button/Button.js +42 -22
  414. package/lib/semantic/Button/props/propTypes.js +3 -0
  415. package/lib/semantic/Button/semanticButton.module.css +1 -1
  416. package/lib/semantic/index.js +2 -0
  417. package/lib/utils/Common.js +110 -18
  418. package/lib/utils/ContextOptimizer.js +16 -10
  419. package/lib/utils/__tests__/constructFullName.spec.js +1 -0
  420. package/lib/utils/__tests__/debounce.spec.js +3 -2
  421. package/lib/utils/__tests__/getInitial.spec.js +1 -0
  422. package/lib/utils/constructFullName.js +13 -4
  423. package/lib/utils/css/compileClassNames.js +6 -0
  424. package/lib/utils/css/mergeStyle.js +10 -7
  425. package/lib/utils/css/utils.js +8 -0
  426. package/lib/utils/datetime/GMTZones.js +55 -0
  427. package/lib/utils/datetime/common.js +52 -7
  428. package/lib/utils/debounce.js +6 -1
  429. package/lib/utils/dropDownUtils.js +175 -59
  430. package/lib/utils/dummyFunction.js +2 -0
  431. package/lib/utils/getHTMLFontSize.js +1 -0
  432. package/lib/utils/getInitial.js +6 -0
  433. package/lib/utils/index.js +4 -0
  434. package/lib/utils/scrollTo.js +2 -0
  435. package/lib/utils/shallowEqual.js +8 -0
  436. package/package.json +10 -19
@@ -1,15 +1,12 @@
1
1
  /** ** Libraries *** */
2
2
  import { useContext, useRef } from 'react';
3
3
  import PropTypes from 'prop-types';
4
- import shallowEqual from './shallowEqual';
5
-
6
- // Please use this component with children as inline function for force this components rerender when parent rerender regardless of reason
4
+ import shallowEqual from './shallowEqual'; // Please use this component with children as inline function for force this components rerender when parent rerender regardless of reason
7
5
  // Because below componends only rerender when children or calculation are changed, unless no changes will update below
8
-
9
6
  // this component logic based on return same children reference to stop rerender.
10
7
  // Think before change logic
11
-
12
8
  // eslint-disable-next-line import/prefer-default-export
9
+
13
10
  export function ContextOptimizer(props) {
14
11
  const {
15
12
  Context,
@@ -25,11 +22,13 @@ export function ContextOptimizer(props) {
25
22
  data: null,
26
23
  renderF: null
27
24
  });
25
+
28
26
  if (!shallowEqual(data, local.data) || local.renderF !== renderF) {
29
27
  local.children = renderF(data);
30
28
  local.data = data;
31
29
  local.renderF = renderF;
32
30
  }
31
+
33
32
  return local.children;
34
33
  }
35
34
  ContextOptimizer.propTypes = {
@@ -6,8 +6,8 @@ describe('debounce specification', () => {
6
6
  it('should call immediate', () => {
7
7
  const mockfn = jest.fn();
8
8
  const dMockfn = debounce(mockfn, 1000, true);
9
- dMockfn();
10
- //expect(setTimeout).toHaveBeenCalledTimes(1);
9
+ dMockfn(); //expect(setTimeout).toHaveBeenCalledTimes(1);
10
+
11
11
  expect(mockfn.mock.calls.length).toBe(1);
12
12
  });
13
13
  it('should call two times but it invoke multiple times', () => {
@@ -1,8 +1,10 @@
1
1
  function constructFullName(firstName, lastName) {
2
2
  return `${firstName ? `${firstName}${lastName ? ' ' : ''}` : ''}${lastName ? lastName : ''}`;
3
3
  }
4
+
4
5
  export function constructFullNameByPattern(firstName, lastName, namePattern) {
5
6
  let [name0, name1] = namePattern;
7
+
6
8
  if (name0 === 'FIRST_NAME' && name1 === 'LAST_NAME') {
7
9
  return constructFullName(firstName, lastName);
8
10
  } else if (name0 === 'LAST_NAME' && name1 === 'FIRST_NAME') {
@@ -1,7 +1,9 @@
1
1
  import { dataTypes, isDataTypeOf } from './utils';
2
+
2
3
  const collectClassNames = function (processedClassNameList) {
3
4
  for (let index = 0; index < (arguments.length <= 1 ? 0 : arguments.length - 1); index++) {
4
5
  let classInfo = index + 1 < 1 || arguments.length <= index + 1 ? undefined : arguments[index + 1];
6
+
5
7
  if (!classInfo) {
6
8
  continue;
7
9
  } else if (isDataTypeOf(classInfo, dataTypes.object)) {
@@ -13,11 +15,14 @@ const collectClassNames = function (processedClassNameList) {
13
15
  }
14
16
  }
15
17
  };
18
+
16
19
  export default function compileClassNames() {
17
20
  let resultClassNameList = [];
21
+
18
22
  for (var _len = arguments.length, classinfoList = new Array(_len), _key = 0; _key < _len; _key++) {
19
23
  classinfoList[_key] = arguments[_key];
20
24
  }
25
+
21
26
  collectClassNames(resultClassNameList, ...classinfoList);
22
27
  return resultClassNameList.filter(a => a !== '').join(' ');
23
28
  }
@@ -1,6 +1,4 @@
1
- const REPLACER_SYMBOL = '$';
2
-
3
- // $ startWith is used for replace the existing style.
1
+ const REPLACER_SYMBOL = '$'; // $ startWith is used for replace the existing style.
4
2
  // all other will be append
5
3
 
6
4
  export default function mergeStyle(defaultStyle) {
@@ -9,15 +7,16 @@ export default function mergeStyle(defaultStyle) {
9
7
  // if(!Object.keys(defaultStyle).includes('base')) {
10
8
  // throw new Error(`STYLE CUSTOMIZATION RULE - Your style sheet should have "base" class name for customization`);
11
9
  // }
12
-
13
10
  return Object.keys(customStyle).reduce((res, next) => {
14
11
  if (next.startsWith(REPLACER_SYMBOL)) {
15
12
  let styleValue = customStyle[next];
16
13
  let styleName = next.replace(REPLACER_SYMBOL, '');
14
+
17
15
  if (!defaultStyle[styleName] && !additionalStyle.includes(styleName)) {
18
16
  // return res;
19
17
  throw new Error(`UNKNOWN CLASSNAME DETECTED - Given customStyle's key "${styleName}" is not available in that component style`);
20
18
  }
19
+
21
20
  if (additionalStyle.includes(styleName)) {
22
21
  res[styleName] = styleValue;
23
22
  } else {
@@ -26,6 +25,7 @@ export default function mergeStyle(defaultStyle) {
26
25
  let styleKey = res[keyName];
27
26
  let styleClasses = styleKey.split(' ');
28
27
  let ind = styleClasses.indexOf(val);
28
+
29
29
  if (ind !== -1) {
30
30
  styleClasses[ind] = styleValue;
31
31
  res[keyName] = styleClasses.join(' ');
@@ -38,6 +38,7 @@ export default function mergeStyle(defaultStyle) {
38
38
  let styleKey = res[keyName];
39
39
  let styleClasses = styleKey.split(' ');
40
40
  let ind = styleClasses.indexOf(val);
41
+
41
42
  if (ind !== -1) {
42
43
  styleClasses[ind] = styleClasses[ind] + ' ' + customStyle[next];
43
44
  res[keyName] = styleClasses.join(' ');
@@ -49,8 +50,8 @@ export default function mergeStyle(defaultStyle) {
49
50
  // res[next] = customStyle[next];
50
51
  throw new Error(`UNKNOWN CLASSNAME DETECTED - Given customStyle's key "${next}" is not available in that component style`);
51
52
  }
53
+
52
54
  return res;
53
- }, {
54
- ...defaultStyle
55
+ }, { ...defaultStyle
55
56
  });
56
57
  }
@@ -12,6 +12,7 @@ export const dataTypes = {
12
12
  export const getDataType = data => {
13
13
  let typeofData = typeof data;
14
14
  let isArrayDataType = Array.isArray(data);
15
+
15
16
  if (isArrayDataType) {
16
17
  return dataTypes.array;
17
18
  } else {
@@ -0,0 +1,48 @@
1
+ export const offsetMap = {
2
+ 0: 'GMT+00:00 Africa/Abidjan',
3
+ 44: 'GMT+00:00 Africa/Monrovia',
4
+ 60: 'GMT+01:00 Africa/Bangui',
5
+ 120: 'GMT+02:00 Africa/Blantyre',
6
+ 180: 'GMT+03:00 Africa/Addis_Ababa',
7
+ 210: 'GMT+04:30 Asia/Tehran',
8
+ 240: 'GMT+03:00 Asia/Bahrain',
9
+ 270: 'GMT+04:30 Asia/Kabul',
10
+ 300: 'GMT+05:00 Asia/Aqtau',
11
+ '-330': 'GMT+05:30 Asia/Kolkata',
12
+ 360: 'GMT+06:00 Asia/Dacca',
13
+ 390: 'GMT+06:30 Indian/Cocos',
14
+ 420: 'GMT+07:00 Asia/Bangkok',
15
+ 450: 'GMT+08:00 Asia/Singapore',
16
+ 480: 'GMT+08:00 Asia/Hong_Kong',
17
+ 510: 'GMT+08:00 Asia/Harbin',
18
+ 525: 'GMT+08:45 Australia/Eucla',
19
+ 540: 'GMT+09:00 Asia/Chita',
20
+ 570: 'GMT+09:30 Australia/Adelaide',
21
+ 600: 'GMT+10:00 Antarctica/DumontDUrville',
22
+ 660: 'GMT+11:00 Asia/Magadan',
23
+ 690: 'GMT+11:00 Pacific/Norfolk',
24
+ 720: 'GMT+12:00 Asia/Kamchatka',
25
+ 765: 'GMT+12:45 Pacific/Chatham',
26
+ 780: 'GMT+12:00 Asia/Anadyr',
27
+ 840: 'GMT+14:00 Etc/GMT-14',
28
+ '-60': 'GMT-01:00 Etc/GMT+1',
29
+ '-660': 'GMT-11:00 US/Samoa',
30
+ '-600': 'GMT-04:00 America/Anguilla',
31
+ '-240': 'GMT-04:00 America/Antigua',
32
+ '-180': 'GMT-03:00 America/Araguaina',
33
+ '-300': 'GMT-05:00 America/Atikokan',
34
+ '-480': 'GMT-05:00 America/Bahia_Banderas',
35
+ '-360': 'GMT-06:00 America/Belize',
36
+ '-420': 'GMT-06:00 America/Boise',
37
+ '-540': 'GMT-07:00 America/Dawson',
38
+ '-135': 'GMT-04:00 America/Guyana',
39
+ '-120': 'GMT-02:00 Etc/GMT+2',
40
+ '-150': 'GMT-03:00 America/Paramaribo',
41
+ '-210': 'GMT-04:00 America/Santo_Domingo',
42
+ '-720': 'GMT+12:00 Pacific/Kwajalein',
43
+ '-560': 'GMT+14:00 Pacific/Kiritimati',
44
+ '-510': 'GMT-09:30 Pacific/Marquesas',
45
+ '-630': 'GMT-11:00 Pacific/Niue',
46
+ '-450': 'GMT-08:00 Pacific/Pitcairn',
47
+ '-570': 'GMT-10:00 Pacific/Rarotonga'
48
+ };
@@ -1,3 +1,4 @@
1
+ import { offsetMap } from './GMTZones.js';
1
2
  let dateFormat = {
2
3
  dayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
3
4
  monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
@@ -10,8 +11,15 @@ export function pad(n) {
10
11
  n = `${n}`;
11
12
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
12
13
  }
14
+ export function getTimeOffset() {
15
+ const GMT = new Date();
16
+ const matchingOffset = Object.keys(offsetMap).find(offset => GMT.getTimezoneOffset() === Number(offset));
17
+ return matchingOffset ? offsetMap[matchingOffset].toString().split(' ') : ['', ''];
18
+ }
13
19
  export function formatDate(dateMill, mask) {
14
20
  let date = new Date(dateMill);
21
+ let O = getTimeOffset()[0];
22
+ let Z = getTimeOffset()[1];
15
23
  let d = date.getDate();
16
24
  let D = date.getDay();
17
25
  let m = date.getMonth();
@@ -22,6 +30,7 @@ export function formatDate(dateMill, mask) {
22
30
  let L = date.getMilliseconds();
23
31
  let flags = {
24
32
  d: d,
33
+ O: O,
25
34
  dd: pad(d, 2),
26
35
  ddd: dateFormat.dayNames[D],
27
36
  dddd: dateFormat.dayNames[D + 7],
@@ -49,13 +58,18 @@ export function formatDate(dateMill, mask) {
49
58
  L: pad(Math.round(L / 10)),
50
59
  t: H < 12 ? dateFormat.timeNames[0] : dateFormat.timeNames[1],
51
60
  A: H < 12 ? dateFormat.timeNames[6] : dateFormat.timeNames[7],
52
- T: H < 12 ? dateFormat.timeNames[4] : dateFormat.timeNames[5]
61
+ a: H < 12 ? dateFormat.timeNames[6] : dateFormat.timeNames[7],
62
+ T: H < 12 ? dateFormat.timeNames[4] : dateFormat.timeNames[5],
63
+ Z: Z,
64
+ VV: Z,
65
+ SSS: pad(L, 3)
53
66
  };
54
- let token = /D{1,4}|d{1,4}|M{1,4}|YYYY|yyyy|YY|yy?|([HhmsA])\1?|[LloSZWN]|\[[^\]]*\]|'[^']*'/g;
67
+ let token = /D{1,4}|d{1,4}|M{1,4}|YYYY|yyyy|YY|O|Z|VV|SSS|yy?|([HhmsAa])\1?|[LloSZWN]|\[[^\]]*\]|'[^']*'/g;
55
68
  let dat = mask.replace(token, match => {
56
69
  if (match in flags) {
57
70
  return flags[match];
58
71
  }
72
+
59
73
  return match.slice(1, match.length - 1);
60
74
  });
61
75
  return dat;
@@ -70,6 +84,7 @@ export function replaceI18NValuesWithRegex(i18nStr, values) {
70
84
  i18nStr = i18nStr.replace(new RegExp('\\{0\\}', 'g'), values);
71
85
  }
72
86
  }
87
+
73
88
  return i18nStr;
74
89
  }
75
90
  export function unescapeUnicode(str) {
@@ -84,25 +99,28 @@ export function getI18NValue(i18n) {
84
99
  if (typeof i18n === 'undefined') {
85
100
  return key => key;
86
101
  }
102
+
87
103
  return (key, values) => {
88
104
  let i18nStr = i18n[key];
105
+
89
106
  if (i18nStr === undefined) {
90
107
  return key;
91
108
  }
109
+
92
110
  i18nStr = replaceI18NValuesWithRegex(i18nStr, values);
93
111
  return unescapeUnicode(i18nStr);
94
112
  };
95
- }
96
-
97
- // function getValues(params = [], diff) {
113
+ } // function getValues(params = [], diff) {
98
114
  // return params.map(param => {
99
115
  // return diff[param];
100
116
  // });
101
117
  // }
118
+
102
119
  export function getI18NInfo(toDateObj, props, diffObj) {
103
120
  let key = null,
104
- values,
105
- text = null;
121
+ values,
122
+ text = null;
123
+
106
124
  if (typeof props === 'function') {
107
125
  let value = props(diffObj1);
108
126
  key = value.key;
@@ -113,6 +131,7 @@ export function getI18NInfo(toDateObj, props, diffObj) {
113
131
  } else if (typeof props === 'string') {
114
132
  text = toDateObj.format(props);
115
133
  }
134
+
116
135
  return {
117
136
  key,
118
137
  values,
@@ -141,12 +160,15 @@ let oneYearInMillis = 31536000000;
141
160
  let oneDayInMillis = 86400000;
142
161
  let oneHourInMillis = 3600000;
143
162
  let oneMinuteInMillis = 60000;
163
+
144
164
  function convertAsNonExponential(number) {
145
165
  if (number.toString().toLowerCase().indexOf('e') !== -1) {
146
166
  return number.toFixed(20);
147
167
  }
168
+
148
169
  return number;
149
170
  }
171
+
150
172
  export function getDiffObj(diff) {
151
173
  diff = Math.abs(diff);
152
174
  let diffYears = diff / oneYearInMillis;
@@ -173,8 +195,10 @@ export function getDiffObj(diff) {
173
195
  export function getMonthEnd(month, year) {
174
196
  let monthend = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
175
197
  let isLeapYear = year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
198
+
176
199
  if (month === 1 && isLeapYear) {
177
200
  return 29;
178
201
  }
202
+
179
203
  return monthend[month];
180
204
  }
@@ -2,16 +2,20 @@ export function debounce(func, wait, immediate) {
2
2
  let timeout;
3
3
  return function () {
4
4
  let context = this,
5
- args = arguments;
5
+ args = arguments;
6
+
6
7
  let later = function () {
7
8
  timeout = null;
9
+
8
10
  if (!immediate) {
9
11
  func.apply(context, args);
10
12
  }
11
13
  };
14
+
12
15
  let callNow = immediate && !timeout;
13
16
  clearTimeout(timeout);
14
17
  timeout = setTimeout(later, wait);
18
+
15
19
  if (callNow) {
16
20
  func.apply(context, args);
17
21
  }
@@ -4,26 +4,42 @@ import { getIsEmptyValue, getSearchString } from './Common';
4
4
  export const dummyArray = [];
5
5
  export const dummyObj = {};
6
6
  export const getOptions = props => props.options || dummyArray;
7
+
7
8
  const getOptionsOrder = props => props.optionsOrder || dummyArray;
9
+
8
10
  const getSelectedOptionsSel = props => props.selectedOptions || dummyArray;
11
+
9
12
  const getSearchStr = props => props.searchStr || '';
13
+
10
14
  export const getValueField = props => props.valueField || '';
11
15
  export const getTextField = props => props.textField || '';
12
16
  export const getImageField = props => props.imageField || '';
13
17
  export const getIconName = props => props.iconName || '';
14
18
  export const getIconSize = props => props.iconSize || '';
15
19
  export const getOptionType = props => props.optionType || '';
20
+
16
21
  const getNeedSearch = props => props.needSearch;
22
+
17
23
  const getIsDefaultSelectValue = props => props.isDefaultSelectValue;
24
+
18
25
  const getSelectedOptionsLength = props => getIsEmptyValue(props.selectedOptionsLength) ? '' : props.selectedOptionsLength;
26
+
19
27
  const getNormalizedFormatOptions = props => props.normalizedFormatOptions || dummyObj;
28
+
20
29
  const getSelectedValue = props => getIsEmptyValue(props.selectedValue) ? '' : props.selectedValue;
30
+
21
31
  const getSelectedFormatOptions = props => props.selectedFormatOptions || dummyObj;
32
+
22
33
  export const getPrefixText = props => props.prefixText || '';
34
+
23
35
  const getIsStartWithSearch = props => props.isStartsWithSearch;
36
+
24
37
  const getKeepSelectedOptions = props => props.keepSelectedOptions;
38
+
25
39
  const getDisabledOptions = props => props.disabledOptions || dummyArray;
40
+
26
41
  const getListItemProps = props => props.listItemProps || '';
42
+
27
43
  export const makeGetMultiSelectFilterSuggestions = () => createSelector([getOptions, getSelectedOptionsSel, getSearchStr, getNeedSearch, getIsStartWithSearch, getKeepSelectedOptions], (options, selectedOptions, searchStr, needSearch, isStartsWithSearch, keepSelectedOptions) => {
28
44
  const suggestions = [];
29
45
  const suggestionIds = [];
@@ -35,6 +51,7 @@ export const makeGetMultiSelectFilterSuggestions = () => createSelector([getOpti
35
51
  const valueString = getSearchString(value);
36
52
  const searchString = getSearchString(searchStr);
37
53
  const isMatch = needSearch ? isStartsWithSearch ? valueString.startsWith(searchString) : valueString.indexOf(searchString) !== -1 : true;
54
+
38
55
  if (selectedOptions.indexOf(id) === -1 && isMatch || keepSelectedOptions) {
39
56
  suggestions.push(option);
40
57
  suggestionIds.push(id);
@@ -49,9 +66,11 @@ export const optionIdGrouping = (id, prefixText) => {
49
66
  if (getIsEmptyValue(id)) {
50
67
  return '';
51
68
  }
69
+
52
70
  if (getIsEmptyValue(prefixText)) {
53
71
  return id;
54
72
  }
73
+
55
74
  const prefixType = typeof prefixText === 'number' ? 'Int' : 'Str';
56
75
  const idType = typeof id === 'number' ? 'Int' : 'Str';
57
76
  return `${prefixType}_${prefixText}_${idType}_${id}`;
@@ -62,15 +81,19 @@ export const extractOptionId = id => {
62
81
  id: ''
63
82
  };
64
83
  }
84
+
65
85
  if (typeof id === 'number') {
66
86
  return {
67
87
  id
68
88
  };
69
89
  }
90
+
70
91
  const splitedOption = id.split && id.split('_');
92
+
71
93
  if (splitedOption.length === 1) {
72
94
  return splitedOption[0];
73
95
  }
96
+
74
97
  if (splitedOption.length === 4) {
75
98
  let [prefixType, prefixText, idType, id] = splitedOption;
76
99
  id = idType === 'Int' ? Number.parseInt(id) : id;
@@ -100,10 +123,10 @@ export const makeFormatOptions = () => createSelector([getOptions, getValueField
100
123
  } = option;
101
124
  let id = typeof option === 'object' ? option[impValueField || valueField] : option;
102
125
  const value = typeof option === 'object' ? option[impTextField || textField] : option;
103
- const photoURL = typeof option === 'object' ? option[impImageField || imageField] : '';
126
+ const photoURL = typeof option === 'object' ? option[impImageField || imageField] : ''; // grouping options (group select/MultiSelect)
104
127
 
105
- // grouping options (group select/MultiSelect)
106
128
  id = !getIsEmptyValue(id) ? optionIdGrouping(id, prefixText) : '';
129
+
107
130
  if (remvampOptionIds.indexOf(id) === -1 && !getIsEmptyValue(id) && !getIsEmptyValue(value)) {
108
131
  remvampOptionIds.push(id);
109
132
  const optionDetails = {
@@ -111,21 +134,27 @@ export const makeFormatOptions = () => createSelector([getOptions, getValueField
111
134
  value,
112
135
  optionType: impOptionType || optionType
113
136
  };
137
+
114
138
  if (imageField) {
115
139
  optionDetails.photoURL = photoURL;
116
140
  }
141
+
117
142
  if (impIconName || iconName) {
118
143
  optionDetails.icon = impIconName || iconName;
119
144
  }
145
+
120
146
  if (impIconSize || iconSize) {
121
147
  optionDetails.iconSize = impIconSize || iconSize;
122
148
  }
149
+
123
150
  if (disabledOptions.length) {
124
151
  optionDetails.isDisabled = disabledOptions.indexOf(id) >= 0;
125
152
  }
153
+
126
154
  if (listStyle || listItemProps) {
127
155
  optionDetails.listItemProps = listStyle || listItemProps;
128
156
  }
157
+
129
158
  normalizedFormatOptions[id] = optionDetails;
130
159
  normalizedAllOptions[id] = option;
131
160
  revampOptions.push(optionDetails);
@@ -144,11 +173,13 @@ export const makeGetMultiSelectSelectedOptions = () => createSelector([getSelect
144
173
  const revampSelectedOptions = [];
145
174
  const normalizedSelectedOptions = {};
146
175
  selectedOptionsLength = !getIsEmptyValue(selectedOptionsLength) ? selectedOptionsLength : selectedOptions.length;
176
+
147
177
  for (let i = 0; i < selectedOptionsLength; i++) {
148
178
  const option = selectedOptions[i];
149
179
  const {
150
180
  id
151
181
  } = normalizedFormatOptions[option] || {};
182
+
152
183
  if (revampSelectedOptions.indexOf(id) === -1 && !getIsEmptyValue(id)) {
153
184
  revampSelectedOptions.push(id);
154
185
  output.push(normalizedFormatOptions[option]);
@@ -163,6 +194,7 @@ export const makeGetMultiSelectSelectedOptions = () => createSelector([getSelect
163
194
  revampSelectedOptions.indexOf(option) === -1 ? revampSelectedOptions.push(option) : null;
164
195
  }
165
196
  }
197
+
166
198
  return {
167
199
  formatSelectedOptions: output,
168
200
  normalizedSelectedOptions,
@@ -172,10 +204,12 @@ export const makeGetMultiSelectSelectedOptions = () => createSelector([getSelect
172
204
  export const makeGetSelectedValueText = () => createSelector([getOptionsOrder, getNormalizedFormatOptions, getSelectedValue, getSelectedFormatOptions, getIsDefaultSelectValue, getValueField, getTextField], (optionsOrder, normalizedFormatOptions, selectedValue, selectedFormatOptions, isDefaultSelectValue, valueField, textField) => {
173
205
  let selectedValueIndex = optionsOrder.indexOf(selectedValue);
174
206
  let isSelfValueChanged = false;
207
+
175
208
  if (getIsEmptyValue(selectedValue) && isDefaultSelectValue) {
176
209
  [selectedValue] = optionsOrder;
177
210
  isSelfValueChanged = true;
178
211
  }
212
+
179
213
  const allOptions = Object.assign({}, selectedFormatOptions, normalizedFormatOptions);
180
214
  const details = allOptions[selectedValue];
181
215
  let hoverIndex = selectedValueIndex !== -1 ? selectedValueIndex : 0;
@@ -185,9 +219,8 @@ export const makeGetSelectedValueText = () => createSelector([getOptionsOrder, g
185
219
  let {
186
220
  value: selectedValueText = '',
187
221
  id: selectedId
188
- } = details || dummyObj;
222
+ } = details || dummyObj; //selectedValue is not included in options case
189
223
 
190
- //selectedValue is not included in options case
191
224
  if (getIsEmptyValue(selectedId)) {
192
225
  if (typeof selectedValue === 'object') {
193
226
  const id = selectedValue[valueField];
@@ -205,6 +238,7 @@ export const makeGetSelectedValueText = () => createSelector([getOptionsOrder, g
205
238
  selectedId = selectedValue;
206
239
  }
207
240
  }
241
+
208
242
  return {
209
243
  selected: selectedValueText,
210
244
  hoverIndex,
@@ -213,17 +247,22 @@ export const makeGetSelectedValueText = () => createSelector([getOptionsOrder, g
213
247
  isSelfValueChanged
214
248
  };
215
249
  });
250
+
216
251
  const getObj1 = props => props.obj1 || dummyObj;
252
+
217
253
  const getObj2 = props => props.obj2 || dummyObj;
218
- export const makeObjectConcat = () => createSelector([getObj1, getObj2], (obj1, obj2) => Object.assign({}, obj1, obj2));
219
254
 
255
+ export const makeObjectConcat = () => createSelector([getObj1, getObj2], (obj1, obj2) => Object.assign({}, obj1, obj2));
220
256
  /***** Group Select *****/
257
+
221
258
  const getGroupedOptions = props => props.groupedOptions || dummyArray;
259
+
222
260
  const getFormatOptions = makeFormatOptions();
223
261
  export const makeGetGroupSelectOptions = () => createSelector([getGroupedOptions], groupedOptions => {
224
262
  const revampedGroups = [];
225
263
  let allOptionIds = [];
226
264
  let allNormalizedOptions = {}; //all group normalized options
265
+
227
266
  let allNormalizedFormatOptions = {};
228
267
  const groupIds = [];
229
268
  const normalizedGroupedOptions = {};
@@ -235,6 +274,7 @@ export const makeGetGroupSelectOptions = () => createSelector([getGroupedOptions
235
274
  valueField,
236
275
  textField
237
276
  } = group;
277
+
238
278
  if (!getIsEmptyValue(groupId) && groupIds.indexOf(groupId) === -1) {
239
279
  groupIds.push(groupId);
240
280
  normalizedGroupedOptions[groupId] = group;
@@ -249,6 +289,7 @@ export const makeGetGroupSelectOptions = () => createSelector([getGroupedOptions
249
289
  textField,
250
290
  prefixText: groupId
251
291
  });
292
+
252
293
  if (optionsOrder.length) {
253
294
  revampedGroups.push({
254
295
  id: groupId,
@@ -270,7 +311,9 @@ export const makeGetGroupSelectOptions = () => createSelector([getGroupedOptions
270
311
  normalizedGroupedOptions
271
312
  };
272
313
  });
314
+
273
315
  const getGroups = props => props.revampedGroups;
316
+
274
317
  const getFilterSuggestions = makeGetMultiSelectFilterSuggestions();
275
318
  export const makeGetGroupSelectFilterSuggestions = () => createSelector([getGroups, getSearchStr, getNeedSearch, getIsStartWithSearch], (groups, searchStr, needSearch, isStartsWithSearch) => {
276
319
  const suggestionGroups = [];
@@ -288,6 +331,7 @@ export const makeGetGroupSelectFilterSuggestions = () => createSelector([getGrou
288
331
  searchStr,
289
332
  isStartsWithSearch
290
333
  });
334
+
291
335
  if (suggestionIds.length) {
292
336
  suggestionGroups.push(Object.assign({}, group, {
293
337
  options: suggestions
@@ -305,6 +349,7 @@ export const makeGetOptionIdChange = () => createSelector([getOptions, getValueF
305
349
  return options.reduce((changedOptions, option) => {
306
350
  let newOption;
307
351
  const id = typeof option === 'object' ? option[valueField] : option;
352
+
308
353
  if (typeof option === 'object' && !getIsEmptyValue(id)) {
309
354
  newOption = Object.assign({}, option, {
310
355
  [valueField]: optionIdGrouping(id, prefixText),
@@ -312,9 +357,11 @@ export const makeGetOptionIdChange = () => createSelector([getOptions, getValueF
312
357
  textField,
313
358
  optionType
314
359
  });
360
+
315
361
  if (imageField) {
316
362
  newOption.imageField = imageField;
317
363
  }
364
+
318
365
  changedOptions.push(newOption);
319
366
  } else if (!getIsEmptyValue(id)) {
320
367
  newOption = {
@@ -328,6 +375,7 @@ export const makeGetOptionIdChange = () => createSelector([getOptions, getValueF
328
375
  };
329
376
  changedOptions.push(newOption);
330
377
  }
378
+
331
379
  return changedOptions;
332
380
  }, newOptions);
333
381
  });
@@ -338,22 +386,23 @@ export const filterSelectedOptions = function () {
338
386
  disabledOptions = dummyArray
339
387
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
340
388
  // eslint-disable-next-line no-param-reassign
341
- selectedOptions = selectedOptions || dummyArray;
342
- // eslint-disable-next-line no-param-reassign
343
- propSelectedOptions = propSelectedOptions || dummyArray;
344
- // eslint-disable-next-line no-param-reassign
389
+ selectedOptions = selectedOptions || dummyArray; // eslint-disable-next-line no-param-reassign
390
+
391
+ propSelectedOptions = propSelectedOptions || dummyArray; // eslint-disable-next-line no-param-reassign
392
+
345
393
  disabledOptions = disabledOptions || dummyArray;
346
- const newlyAddedOptions = selectedOptions.filter(selectedOption => propSelectedOptions.indexOf(selectedOption) === -1);
394
+ const newlyAddedOptions = selectedOptions.filter(selectedOption => propSelectedOptions.indexOf(selectedOption) === -1); // eslint-disable-next-line max-len
347
395
 
348
- // eslint-disable-next-line max-len
349
396
  const oldValidSelectedOptions = propSelectedOptions.filter(selectedOption => {
350
397
  const isRemoved = selectedOptions.indexOf(selectedOption) === -1;
351
398
  const isDisabled = disabledOptions.indexOf(selectedOption) >= 0;
399
+
352
400
  if (isDisabled) {
353
401
  return true;
354
402
  } else if (isRemoved) {
355
403
  return false;
356
404
  }
405
+
357
406
  return true;
358
407
  });
359
408
  return {
@@ -364,28 +413,36 @@ export const makeGetIsShowClearIcon = () => createSelector([getSelectedOptionsSe
364
413
  let countForShowClear = 2;
365
414
  let enabledOptionsLength = 0;
366
415
  let isShowClearIcon = selectedOptions.length >= countForShowClear;
416
+
367
417
  if (disabledOptions.length) {
368
418
  let isHaveEnabledOptions = false;
369
419
  let isAllDisabled = disabledOptions.length === selectedOptions.length;
420
+
370
421
  if (!isAllDisabled) {
371
422
  isHaveEnabledOptions = selectedOptions.some(option => {
372
423
  let {
373
424
  isDisabled = false
374
425
  } = option || {};
426
+
375
427
  if (!isDisabled) {
376
428
  enabledOptionsLength += 1;
429
+
377
430
  if (enabledOptionsLength === countForShowClear) {
378
431
  return true;
379
432
  }
433
+
380
434
  return false;
381
435
  }
436
+
382
437
  return false;
383
438
  });
384
439
  }
440
+
385
441
  return {
386
442
  isShowClearIcon: isAllDisabled ? !isAllDisabled : isHaveEnabledOptions
387
443
  };
388
444
  }
445
+
389
446
  return {
390
447
  isShowClearIcon
391
448
  };