@onewelcome/react-lib-components 8.5.0 → 8.7.0

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 (334) hide show
  1. package/dist/cjs/Button/BaseButton.cjs.js +1 -1
  2. package/dist/cjs/Button/BaseButton.cjs.js.map +1 -1
  3. package/dist/cjs/ContextMenu/ContextMenu.cjs.js +1 -1
  4. package/dist/cjs/ContextMenu/ContextMenu.cjs.js.map +1 -1
  5. package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js +2 -0
  6. package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js.map +1 -0
  7. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js +1 -1
  8. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js.map +1 -1
  9. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilters.interfaces.cjs.js.map +1 -1
  10. package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js +1 -1
  11. package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js.map +1 -1
  12. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js +2 -0
  13. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js.map +1 -0
  14. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js +2 -0
  15. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js.map +1 -0
  16. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js +2 -0
  17. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js.map +1 -0
  18. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js +2 -0
  19. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js.map +1 -0
  20. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js +2 -0
  21. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js.map +1 -0
  22. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js +2 -0
  23. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js.map +1 -0
  24. package/dist/cjs/DatePicker/DatePicker.cjs.js +1 -1
  25. package/dist/cjs/DatePicker/DatePicker.cjs.js.map +1 -1
  26. package/dist/cjs/DatePicker/DatePicker.module.scss.cjs.js +1 -1
  27. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js +1 -1
  28. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js.map +1 -1
  29. package/dist/cjs/Form/Checkbox/Checkbox.module.scss.cjs.js +1 -1
  30. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
  31. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +1 -1
  32. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js +1 -1
  33. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js.map +1 -1
  34. package/dist/cjs/Form/FileUpload/FileItem/FileItem.module.scss.cjs.js +1 -1
  35. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js +1 -1
  36. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js.map +1 -1
  37. package/dist/cjs/Form/FileUpload/FileUpload.module.scss.cjs.js +1 -1
  38. package/dist/cjs/Form/FormGroup/FormGroup.cjs.js +1 -1
  39. package/dist/cjs/Form/FormGroup/FormGroup.cjs.js.map +1 -1
  40. package/dist/cjs/Form/FormHelperText/FormHelperText.module.scss.cjs.js +1 -1
  41. package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js +1 -1
  42. package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js.map +1 -1
  43. package/dist/cjs/Form/Input/Input.cjs.js +1 -1
  44. package/dist/cjs/Form/Input/Input.cjs.js.map +1 -1
  45. package/dist/cjs/Form/Input/Input.module.scss.cjs.js +1 -1
  46. package/dist/cjs/Form/Radio/Radio.cjs.js +1 -1
  47. package/dist/cjs/Form/Radio/Radio.cjs.js.map +1 -1
  48. package/dist/cjs/Form/Radio/Radio.module.scss.cjs.js +1 -1
  49. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
  50. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
  51. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.scss.cjs.js +1 -1
  52. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.scss.cjs.js +1 -1
  53. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js +1 -1
  54. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js.map +1 -1
  55. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js +2 -0
  56. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js.map +1 -0
  57. package/dist/cjs/Form/Select/Select.interfaces.cjs.js +2 -0
  58. package/dist/cjs/Form/Select/Select.interfaces.cjs.js.map +1 -0
  59. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
  60. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
  61. package/dist/cjs/Form/Select/SingleSelect/Select.module.scss.cjs.js +1 -1
  62. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js +1 -1
  63. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js.map +1 -1
  64. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +1 -1
  65. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -1
  66. package/dist/cjs/Form/Textarea/Textarea.cjs.js +1 -1
  67. package/dist/cjs/Form/Textarea/Textarea.cjs.js.map +1 -1
  68. package/dist/cjs/Form/Textarea/Textarea.module.scss.cjs.js +1 -1
  69. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js +1 -1
  70. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js.map +1 -1
  71. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js +1 -1
  72. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js.map +1 -1
  73. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.scss.cjs.js +1 -1
  74. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js +1 -1
  75. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js.map +1 -1
  76. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js +1 -1
  77. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js.map +1 -1
  78. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
  79. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
  80. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js +1 -1
  81. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js.map +1 -1
  82. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.cjs.js +1 -1
  83. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js +1 -1
  84. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js.map +1 -1
  85. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.scss.cjs.js +1 -1
  86. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js +1 -1
  87. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js.map +1 -1
  88. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
  89. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
  90. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
  91. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
  92. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
  93. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
  94. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
  95. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
  96. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
  97. package/dist/cjs/src/components/DataGrid/testUtils.d.ts +7 -1
  98. package/dist/cjs/src/components/DatePicker/DatePicker.d.ts +4 -1
  99. package/dist/cjs/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  100. package/dist/cjs/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  101. package/dist/cjs/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  102. package/dist/cjs/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  103. package/dist/cjs/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
  104. package/dist/cjs/src/components/Form/Input/Input.d.ts +2 -1
  105. package/dist/cjs/src/components/Form/Radio/Radio.d.ts +1 -1
  106. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  107. package/dist/cjs/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  108. package/dist/cjs/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  109. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  110. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  111. package/dist/cjs/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  112. package/dist/cjs/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  113. package/dist/cjs/src/components/Form/Textarea/Textarea.d.ts +2 -1
  114. package/dist/cjs/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  115. package/dist/cjs/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  116. package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  117. package/dist/cjs/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  118. package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  119. package/dist/cjs/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  120. package/dist/cjs/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
  121. package/dist/cjs/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  122. package/dist/cjs/src/components/withReadOnly.d.ts +8 -0
  123. package/dist/cjs/src/hooks/useClickOutside.cjs.js +2 -0
  124. package/dist/cjs/src/hooks/useClickOutside.cjs.js.map +1 -0
  125. package/dist/cjs/src/hooks/useClickOutside.d.ts +2 -0
  126. package/dist/cjs/src/hooks/useClickOutside.test.d.ts +1 -0
  127. package/dist/cjs/src/index.cjs.js +1 -1
  128. package/dist/cjs/src/index.d.ts +2 -0
  129. package/dist/cjs/src/util/unitTestUtils.d.ts +12 -0
  130. package/dist/cjs/withReadOnly.cjs.js +2 -0
  131. package/dist/cjs/withReadOnly.cjs.js.map +1 -0
  132. package/dist/esm/Button/BaseButton.esm.js +5 -2
  133. package/dist/esm/Button/BaseButton.esm.js.map +1 -1
  134. package/dist/esm/ContextMenu/ContextMenu.esm.js +6 -8
  135. package/dist/esm/ContextMenu/ContextMenu.esm.js.map +1 -1
  136. package/dist/esm/ContextMenu/ContextMenuItem.esm.js +3 -3
  137. package/dist/esm/ContextMenu/ContextMenuItem.esm.js.map +1 -1
  138. package/dist/esm/ContextMenu/ContextMenuItem.module.scss.esm.js +2 -2
  139. package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js +35 -0
  140. package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js.map +1 -0
  141. package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js +16 -7
  142. package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js.map +1 -1
  143. package/dist/esm/DataGrid/DataGridFilters/DataGridFilters.interfaces.esm.js.map +1 -1
  144. package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js +15 -12
  145. package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js.map +1 -1
  146. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js +138 -0
  147. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js.map +1 -0
  148. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js +8 -0
  149. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js.map +1 -0
  150. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js +54 -0
  151. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js.map +1 -0
  152. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js +51 -0
  153. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js.map +1 -0
  154. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js +29 -0
  155. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js.map +1 -0
  156. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js +26 -0
  157. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js.map +1 -0
  158. package/dist/esm/DatePicker/DatePicker.esm.js +3 -1
  159. package/dist/esm/DatePicker/DatePicker.esm.js.map +1 -1
  160. package/dist/esm/DatePicker/DatePicker.module.scss.esm.js +2 -2
  161. package/dist/esm/Form/Checkbox/Checkbox.esm.js +2 -1
  162. package/dist/esm/Form/Checkbox/Checkbox.esm.js.map +1 -1
  163. package/dist/esm/Form/Checkbox/Checkbox.module.scss.esm.js +1 -1
  164. package/dist/esm/Form/Fieldset/Fieldset.esm.js +2 -1
  165. package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
  166. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js +10 -3
  167. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js.map +1 -1
  168. package/dist/esm/Form/FileUpload/FileItem/FileItem.module.scss.esm.js +1 -1
  169. package/dist/esm/Form/FileUpload/FileUpload.esm.js +9 -6
  170. package/dist/esm/Form/FileUpload/FileUpload.esm.js.map +1 -1
  171. package/dist/esm/Form/FileUpload/FileUpload.module.scss.esm.js +2 -2
  172. package/dist/esm/Form/FormGroup/FormGroup.esm.js +2 -2
  173. package/dist/esm/Form/FormGroup/FormGroup.esm.js.map +1 -1
  174. package/dist/esm/Form/FormHelperText/FormHelperText.module.scss.esm.js +1 -1
  175. package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js +1 -1
  176. package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js.map +1 -1
  177. package/dist/esm/Form/Input/Input.esm.js +7 -5
  178. package/dist/esm/Form/Input/Input.esm.js.map +1 -1
  179. package/dist/esm/Form/Input/Input.module.scss.esm.js +2 -2
  180. package/dist/esm/Form/Radio/Radio.esm.js +2 -1
  181. package/dist/esm/Form/Radio/Radio.esm.js.map +1 -1
  182. package/dist/esm/Form/Radio/Radio.module.scss.esm.js +1 -1
  183. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +33 -18
  184. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
  185. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.scss.esm.js +2 -2
  186. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.scss.esm.js +1 -1
  187. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js +4 -1
  188. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js.map +1 -1
  189. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js +63 -0
  190. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js.map +1 -0
  191. package/dist/esm/Form/Select/Select.interfaces.esm.js +23 -0
  192. package/dist/esm/Form/Select/Select.interfaces.esm.js.map +1 -0
  193. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +29 -20
  194. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
  195. package/dist/esm/Form/Select/SingleSelect/Select.module.scss.esm.js +2 -2
  196. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js +4 -1
  197. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js.map +1 -1
  198. package/dist/esm/Form/Select/useSelectPositionList.esm.js +11 -13
  199. package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -1
  200. package/dist/esm/Form/Textarea/Textarea.esm.js +12 -5
  201. package/dist/esm/Form/Textarea/Textarea.esm.js.map +1 -1
  202. package/dist/esm/Form/Textarea/Textarea.module.scss.esm.js +1 -1
  203. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js +4 -1
  204. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js.map +1 -1
  205. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js +6 -4
  206. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js.map +1 -1
  207. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.scss.esm.js +1 -1
  208. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js +3 -2
  209. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js.map +1 -1
  210. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js +17 -10
  211. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js.map +1 -1
  212. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +5 -2
  213. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
  214. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js +20 -10
  215. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js.map +1 -1
  216. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.esm.js +2 -2
  217. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js +2 -2
  218. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js.map +1 -1
  219. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.scss.esm.js +1 -1
  220. package/dist/esm/_BaseStyling_/BaseStyling.esm.js +2 -0
  221. package/dist/esm/_BaseStyling_/BaseStyling.esm.js.map +1 -1
  222. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
  223. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
  224. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
  225. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
  226. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
  227. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
  228. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
  229. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
  230. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
  231. package/dist/esm/src/components/DataGrid/testUtils.d.ts +7 -1
  232. package/dist/esm/src/components/DatePicker/DatePicker.d.ts +4 -1
  233. package/dist/esm/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  234. package/dist/esm/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  235. package/dist/esm/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  236. package/dist/esm/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  237. package/dist/esm/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
  238. package/dist/esm/src/components/Form/Input/Input.d.ts +2 -1
  239. package/dist/esm/src/components/Form/Radio/Radio.d.ts +1 -1
  240. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  241. package/dist/esm/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  242. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  243. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.test.d.ts +1 -0
  244. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  245. package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  246. package/dist/esm/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  247. package/dist/esm/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  248. package/dist/esm/src/components/Form/Textarea/Textarea.d.ts +2 -1
  249. package/dist/esm/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  250. package/dist/esm/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  251. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  252. package/dist/esm/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  253. package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  254. package/dist/esm/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  255. package/dist/esm/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
  256. package/dist/esm/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  257. package/dist/esm/src/components/withReadOnly.d.ts +8 -0
  258. package/dist/esm/src/components/withReadOnly.test.d.ts +1 -0
  259. package/dist/esm/src/hooks/useClickOutside.d.ts +2 -0
  260. package/dist/esm/src/hooks/useClickOutside.esm.js +38 -0
  261. package/dist/esm/src/hooks/useClickOutside.esm.js.map +1 -0
  262. package/dist/esm/src/hooks/useClickOutside.test.d.ts +1 -0
  263. package/dist/esm/src/index.d.ts +2 -0
  264. package/dist/esm/src/index.esm.js +2 -0
  265. package/dist/esm/src/index.esm.js.map +1 -1
  266. package/dist/esm/src/util/unitTestUtils.d.ts +12 -0
  267. package/dist/esm/withReadOnly.esm.js +70 -0
  268. package/dist/esm/withReadOnly.esm.js.map +1 -0
  269. package/package.json +21 -17
  270. package/src/components/Button/BaseButton.tsx +7 -4
  271. package/src/components/ContextMenu/ContextMenu.tsx +5 -13
  272. package/src/components/DataGrid/DataGridBody/__snapshots__/DataGridBody.test.tsx.snap +4 -4
  273. package/src/components/DataGrid/DataGridFilters/DataGridDateFilter.tsx +65 -0
  274. package/src/components/DataGrid/DataGridFilters/DataGridFilterTag.tsx +25 -5
  275. package/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.ts +18 -1
  276. package/src/components/DataGrid/DataGridFilters/DataGridToolbar.tsx +53 -33
  277. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss +134 -0
  278. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.tsx +267 -0
  279. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.tsx +103 -0
  280. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.tsx +121 -0
  281. package/src/{hooks/useBodyClick.ts → components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.ts} +12 -18
  282. package/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.tsx +50 -0
  283. package/src/components/DataGrid/testUtils.ts +48 -15
  284. package/src/components/DatePicker/DatePicker.module.scss +32 -9
  285. package/src/components/DatePicker/DatePicker.tsx +15 -1
  286. package/src/components/Form/Checkbox/Checkbox.module.scss +70 -0
  287. package/src/components/Form/Checkbox/Checkbox.tsx +2 -1
  288. package/src/components/Form/Fieldset/Fieldset.tsx +2 -1
  289. package/src/components/Form/FileUpload/FileItem/FileItem.module.scss +16 -0
  290. package/src/components/Form/FileUpload/FileItem/FileItem.tsx +17 -3
  291. package/src/components/Form/FileUpload/FileUpload.module.scss +57 -1
  292. package/src/components/Form/FileUpload/FileUpload.tsx +16 -6
  293. package/src/components/Form/FormGroup/FormGroup.tsx +6 -1
  294. package/src/components/Form/FormHelperText/FormHelperText.module.scss +4 -0
  295. package/src/components/Form/FormSelectorWrapper/FormSelectorWrapper.tsx +2 -2
  296. package/src/components/Form/Input/Input.module.scss +26 -0
  297. package/src/components/Form/Input/Input.tsx +10 -1
  298. package/src/components/Form/Radio/Radio.module.scss +46 -0
  299. package/src/components/Form/Radio/Radio.tsx +2 -1
  300. package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +35 -1
  301. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +53 -38
  302. package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +8 -0
  303. package/src/components/Form/Select/MultiSelect/useArrowNavigation.ts +6 -1
  304. package/src/components/Form/Select/MultiSelect/useMultiSelect.tsx +98 -0
  305. package/src/components/Form/Select/Select.interfaces.ts +6 -4
  306. package/src/components/Form/Select/SingleSelect/Select.module.scss +60 -1
  307. package/src/components/Form/Select/SingleSelect/Select.tsx +42 -37
  308. package/src/components/Form/Select/SingleSelect/useArrowNavigation.ts +6 -1
  309. package/src/components/Form/Select/useSelectPositionList.ts +10 -14
  310. package/src/components/Form/Textarea/Textarea.module.scss +24 -0
  311. package/src/components/Form/Textarea/Textarea.tsx +24 -3
  312. package/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.tsx +4 -1
  313. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +14 -0
  314. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.tsx +6 -2
  315. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +3 -1
  316. package/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.tsx +17 -12
  317. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +6 -1
  318. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss +43 -0
  319. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.tsx +45 -20
  320. package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +6 -0
  321. package/src/components/Form/Wrapper/Wrapper/Wrapper.tsx +3 -0
  322. package/src/components/_BaseStyling_/BaseStyling.tsx +4 -0
  323. package/src/components/withReadOnly.tsx +112 -0
  324. package/src/hooks/useClickOutside.ts +42 -0
  325. package/src/index.ts +2 -0
  326. package/src/mixins.module.scss +6 -0
  327. package/{dist/esm/src/hooks/useBodyClick.esm.js → src/util/unitTestUtils.ts} +16 -17
  328. package/dist/cjs/src/hooks/useBodyClick.cjs.js +0 -2
  329. package/dist/cjs/src/hooks/useBodyClick.cjs.js.map +0 -1
  330. package/dist/cjs/src/hooks/useBodyClick.d.ts +0 -1
  331. package/dist/esm/src/hooks/useBodyClick.d.ts +0 -1
  332. package/dist/esm/src/hooks/useBodyClick.esm.js.map +0 -1
  333. /package/dist/cjs/src/{hooks/useBodyClick.test.d.ts → components/Form/Select/MultiSelect/useMultiSelect.test.d.ts} +0 -0
  334. /package/dist/{esm/src/hooks/useBodyClick.test.d.ts → cjs/src/components/withReadOnly.test.d.ts} +0 -0
@@ -0,0 +1,134 @@
1
+ /*
2
+ * Copyright 2022 OneWelcome B.V.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ .popover {
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: flex-start;
21
+
22
+ min-width: 40rem;
23
+
24
+ .content-wrapper {
25
+ display: flex;
26
+ }
27
+
28
+ .aside {
29
+ display: flex;
30
+ flex-direction: column;
31
+
32
+ width: 9.25rem;
33
+ border-right: 1px solid var(--color-blue-grey100);
34
+ }
35
+
36
+ .aside-menu {
37
+ margin: 0.5rem 0;
38
+ padding: 0;
39
+
40
+ white-space: nowrap;
41
+
42
+ list-style: none;
43
+ }
44
+
45
+ .aside-menu-item {
46
+ height: 2rem;
47
+
48
+ button {
49
+ padding: 0.5rem 0.75rem;
50
+
51
+ font-size: 0.75rem;
52
+ line-height: 1rem;
53
+ text-align: start;
54
+ }
55
+ }
56
+
57
+ .controls {
58
+ display: flex;
59
+ flex-direction: column;
60
+ gap: 2rem;
61
+ flex-grow: 1;
62
+
63
+ padding: 2rem 2rem 0 2rem;
64
+
65
+ &.has-error {
66
+ //left it in px - height + margin of the error text span in the input wrapper
67
+ gap: calc(2rem - 15.5681px);
68
+ }
69
+ }
70
+
71
+ .controls-panel {
72
+ display: flex;
73
+ gap: 2rem;
74
+
75
+ & > * {
76
+ flex-grow: 1;
77
+ }
78
+
79
+ &.set-height {
80
+ min-height: 17.5rem;
81
+ }
82
+ }
83
+
84
+ .actions {
85
+ display: flex;
86
+ justify-content: space-between;
87
+ gap: 1rem;
88
+ flex-grow: 1;
89
+
90
+ width: calc(100% - 3rem);
91
+ border-top: 1px solid var(--color-blue-grey100);
92
+ padding: 1rem 1.5rem;
93
+ }
94
+
95
+ .input {
96
+ margin-top: 0;
97
+ max-width: 14rem;
98
+
99
+ label {
100
+ font-size: 0.75rem;
101
+ }
102
+ }
103
+
104
+ .nav {
105
+ position: absolute;
106
+ }
107
+
108
+ .next-button {
109
+ position: absolute;
110
+ left: 27.3125rem;
111
+ top: 0;
112
+ }
113
+
114
+ .prev-button {
115
+ position: absolute;
116
+ top: 0;
117
+ }
118
+
119
+ .month-caption {
120
+ width: 100%;
121
+ height: 2.5rem;
122
+ margin: 0;
123
+ padding: 0.75rem 0;
124
+
125
+ font-size: 0.75rem;
126
+ font-weight: 500;
127
+ line-height: 1rem;
128
+ text-align: center;
129
+ }
130
+ }
131
+
132
+ .error-message {
133
+ font-size: 0.625rem;
134
+ }
@@ -0,0 +1,267 @@
1
+ /*
2
+ * Copyright 2022 OneWelcome B.V.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React, { useEffect, useState } from "react";
18
+ import { Popover } from "../../../Popover/Popover";
19
+ import classes from "./DateTimePicker.module.scss";
20
+ import { Button } from "../../../Button/Button";
21
+ import { DateRange } from "react-day-picker";
22
+ import {
23
+ CUSTOM_DATE_RANGE,
24
+ FIVE_MINUTES,
25
+ ONE_HOUR,
26
+ ONE_MINUTE,
27
+ THIRTY_SECONDS,
28
+ TWENTY_FOUR_HOURS,
29
+ formatInputDate
30
+ } from "./DateTimeService";
31
+ import { SideMenu } from "./SideMenu";
32
+ import { addSeconds } from "date-fns";
33
+ import { DateTimePickerInputSection } from "./DateTimePickerInputSection";
34
+ import { DateTimePickerCalendarSection } from "./DateTimePickerCalendarSection";
35
+ import { DateTimeFilter, DateTimeFilterType } from "../DataGridFilters.interfaces";
36
+ import { useRepeatFocus } from "../../../../hooks/useRepeatFocus";
37
+
38
+ export type DateTimePickerTranslations = {
39
+ errors: {
40
+ dateFormatError: string;
41
+ };
42
+ previousMonth: string;
43
+ nextMonth: string;
44
+ from: string;
45
+ to: string;
46
+ cancel: string;
47
+ apply: string;
48
+ dateInputPlaceholder: string;
49
+ };
50
+
51
+ export type Props = {
52
+ popoverRef: React.RefObject<HTMLDivElement>;
53
+ anchorRef?: React.RefObject<HTMLDivElement>;
54
+ isOpen: boolean;
55
+ onTagCaptionChange: (value: string) => void;
56
+ setPickerOpen: (open: boolean) => void;
57
+ translations?: DateTimePickerTranslations;
58
+ dateFilterValue?: DateTimeFilter;
59
+ onDateFilterValueChange?: (dateTimeFilter: DateTimeFilter) => void;
60
+ };
61
+
62
+ export type SideMenuItem = {
63
+ id: DateTimeFilterType;
64
+ name: string;
65
+ rangeSeconds?: number;
66
+ };
67
+
68
+ export const dateFormat = "yyyy-mm-dd hh:mm:ss";
69
+
70
+ const sideMenuItems: SideMenuItem[] = [
71
+ { id: THIRTY_SECONDS, name: "Last 30 seconds", rangeSeconds: 30 },
72
+ { id: ONE_MINUTE, name: "Last 1 minute", rangeSeconds: 60 },
73
+ { id: FIVE_MINUTES, name: "Last 5 minutes", rangeSeconds: 300 },
74
+ { id: ONE_HOUR, name: "Last 1 hour", rangeSeconds: 3600 },
75
+ { id: TWENTY_FOUR_HOURS, name: "Last 24 hours", rangeSeconds: 86400 },
76
+ { id: CUSTOM_DATE_RANGE, name: "Custom" }
77
+ ];
78
+
79
+ export const DateTimePicker = ({
80
+ anchorRef,
81
+ popoverRef,
82
+ isOpen,
83
+ setPickerOpen,
84
+ onTagCaptionChange,
85
+ translations = {
86
+ errors: {
87
+ dateFormatError: `The format must be ${dateFormat}`
88
+ },
89
+ previousMonth: "Previous month",
90
+ nextMonth: "Next month",
91
+ from: "From",
92
+ to: "To",
93
+ cancel: "Cancel",
94
+ apply: "Apply",
95
+ dateInputPlaceholder: dateFormat
96
+ },
97
+ dateFilterValue,
98
+ onDateFilterValueChange
99
+ }: Props) => {
100
+ const {
101
+ errors: { dateFormatError },
102
+ previousMonth,
103
+ nextMonth,
104
+ cancel,
105
+ from,
106
+ to,
107
+ apply,
108
+ dateInputPlaceholder
109
+ } = translations;
110
+ const [selectedDate, setSelectedDate] = useState<DateRange>({
111
+ from: dateFilterValue?.fromDate ? new Date(dateFilterValue?.fromDate) : undefined,
112
+ to: dateFilterValue?.toDate ? new Date(dateFilterValue?.toDate) : undefined
113
+ });
114
+ const [selectedPredefinedRange, setSelectedPredefinedRange] = useState<DateTimeFilterType>(
115
+ sideMenuItems[0].id
116
+ );
117
+ const [fromDateText, setFromDateText] = useState("");
118
+ const [toDateText, setToDateText] = useState("");
119
+ const [fromDateError, setFromDateError] = useState("");
120
+ const [toDateError, setToDateError] = useState("");
121
+ useRepeatFocus(popoverRef);
122
+
123
+ const disableDateRangePickers = selectedPredefinedRange !== CUSTOM_DATE_RANGE;
124
+
125
+ useEffect(() => {
126
+ if (isOpen) {
127
+ popoverRef.current?.focus();
128
+ }
129
+ }, [isOpen]);
130
+
131
+ useEffect(() => {
132
+ if (dateFilterValue) {
133
+ const foundItem = sideMenuItems.find(item => item.id === dateFilterValue.type);
134
+
135
+ foundItem && onTagCaptionChange(foundItem.name);
136
+
137
+ setSelectedPredefinedRange(dateFilterValue.type);
138
+
139
+ if (foundItem?.rangeSeconds && dateFilterValue.type !== CUSTOM_DATE_RANGE) {
140
+ const fromDate = addSeconds(new Date(), -foundItem.rangeSeconds);
141
+ const toDate = new Date();
142
+
143
+ setFromDateText(formatInputDate(fromDate));
144
+ setToDateText(formatInputDate(toDate));
145
+ setSelectedDate({ from: fromDate, to: toDate });
146
+
147
+ return;
148
+ }
149
+
150
+ dateFilterValue.fromDate &&
151
+ setFromDateText(formatInputDate(new Date(dateFilterValue.fromDate)));
152
+
153
+ dateFilterValue.toDate && setToDateText(formatInputDate(new Date(dateFilterValue.toDate)));
154
+
155
+ setSelectedDate({
156
+ from: dateFilterValue?.fromDate ? new Date(dateFilterValue?.fromDate) : undefined,
157
+ to: dateFilterValue?.toDate ? new Date(dateFilterValue?.toDate) : undefined
158
+ });
159
+ }
160
+ }, [dateFilterValue]);
161
+
162
+ useEffect(() => {
163
+ if (!dateFilterValue) {
164
+ isOpen && onSideMenuItemSelect(selectedPredefinedRange);
165
+ }
166
+ }, [isOpen, dateFilterValue]);
167
+
168
+ const onSideMenuItemSelect = (itemId: DateTimeFilterType) => {
169
+ setSelectedPredefinedRange(itemId);
170
+ const foundItem = sideMenuItems.find(item => item.id === itemId);
171
+ foundItem && onTagCaptionChange(foundItem.name);
172
+
173
+ if (itemId !== CUSTOM_DATE_RANGE) {
174
+ if (!foundItem) {
175
+ return;
176
+ }
177
+
178
+ if (foundItem.rangeSeconds) {
179
+ const fromDate = addSeconds(new Date(), -foundItem.rangeSeconds);
180
+ const toDate = new Date();
181
+
182
+ setSelectedDate({ from: fromDate, to: toDate });
183
+ setFromDateText(formatInputDate(fromDate));
184
+ setToDateText(formatInputDate(toDate));
185
+ }
186
+ }
187
+ };
188
+
189
+ const closeDateTimePicker = () => {
190
+ setPickerOpen(false);
191
+ };
192
+
193
+ const saveDateTimePicker = () => {
194
+ onDateFilterValueChange &&
195
+ onDateFilterValueChange({
196
+ toDate: selectedDate.to?.toISOString() ?? "",
197
+ fromDate: selectedDate.from?.toISOString() ?? "",
198
+ type: selectedPredefinedRange
199
+ });
200
+ setPickerOpen(false);
201
+ };
202
+
203
+ return (
204
+ <Popover
205
+ tabIndex={-1}
206
+ anchorEl={anchorRef}
207
+ ref={popoverRef}
208
+ show={isOpen}
209
+ placement={{ horizontal: "left", vertical: "bottom" }}
210
+ transformOrigin={{ horizontal: "left", vertical: "top" }}
211
+ >
212
+ {isOpen && (
213
+ <div className={classes["popover"]}>
214
+ <div className={classes["content-wrapper"]}>
215
+ <div className={classes["aside"]}>
216
+ <SideMenu
217
+ sideMenuItems={sideMenuItems}
218
+ selectedItemId={selectedPredefinedRange}
219
+ onItemSelect={onSideMenuItemSelect}
220
+ />
221
+ </div>
222
+ <div
223
+ className={`${classes["controls"]} ${toDateError || fromDateError ? classes["has-error"] : ""}`}
224
+ >
225
+ <div className={classes["controls-panel"]}>
226
+ <DateTimePickerInputSection
227
+ from={from}
228
+ to={to}
229
+ dateInputPlaceholder={dateInputPlaceholder}
230
+ dateFormatError={dateFormatError}
231
+ fromDateText={fromDateText}
232
+ toDateText={toDateText}
233
+ fromDateError={fromDateError}
234
+ toDateError={toDateError}
235
+ setSelectedDate={setSelectedDate}
236
+ setFromDateText={setFromDateText}
237
+ setToDateText={setToDateText}
238
+ setFromDateError={setFromDateError}
239
+ setToDateError={setToDateError}
240
+ />
241
+ </div>
242
+ <div className={`${classes["controls-panel"]} ${classes["set-height"]}`}>
243
+ <DateTimePickerCalendarSection
244
+ previousMonth={previousMonth}
245
+ nextMonth={nextMonth}
246
+ selectedDate={selectedDate}
247
+ disableDateRangePickers={disableDateRangePickers}
248
+ setSelectedDate={setSelectedDate}
249
+ setFromDateText={setFromDateText}
250
+ setFromDateError={setFromDateError}
251
+ setToDateText={setToDateText}
252
+ setToDateError={setToDateError}
253
+ />
254
+ </div>
255
+ </div>
256
+ </div>
257
+ <div className={classes["actions"]}>
258
+ <Button variant="text" onClick={closeDateTimePicker}>
259
+ {cancel}
260
+ </Button>
261
+ <Button onClick={saveDateTimePicker}>{apply}</Button>
262
+ </div>
263
+ </div>
264
+ )}
265
+ </Popover>
266
+ );
267
+ };
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Copyright 2022 OneWelcome B.V.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React from "react";
18
+ import classes from "./DateTimePicker.module.scss";
19
+ import { DatePicker } from "../../../DatePicker/DatePicker";
20
+ import { IconButton } from "../../../Button/IconButton";
21
+ import { DateRange } from "react-day-picker";
22
+ import { formatInputDate, getMonthName, getYearFromDate } from "./DateTimeService";
23
+ import { Icon, Icons } from "../../../Icon/Icon";
24
+ import { Typography } from "../../../Typography/Typography";
25
+
26
+ type Props = {
27
+ previousMonth: string;
28
+ nextMonth: string;
29
+ selectedDate: DateRange | undefined;
30
+ disableDateRangePickers: boolean;
31
+ setSelectedDate: React.Dispatch<React.SetStateAction<DateRange>>;
32
+ setFromDateText: React.Dispatch<React.SetStateAction<string>>;
33
+ setToDateText: React.Dispatch<React.SetStateAction<string>>;
34
+ setFromDateError: React.Dispatch<React.SetStateAction<string>>;
35
+ setToDateError: React.Dispatch<React.SetStateAction<string>>;
36
+ };
37
+
38
+ export const DateTimePickerCalendarSection = ({
39
+ previousMonth,
40
+ nextMonth,
41
+ selectedDate,
42
+ disableDateRangePickers,
43
+ setSelectedDate,
44
+ setFromDateText,
45
+ setFromDateError,
46
+ setToDateError,
47
+ setToDateText
48
+ }: Props) => {
49
+ const onDatePickerSelect = (date: Date | DateRange | undefined): void => {
50
+ if (date) {
51
+ setSelectedDate(date as DateRange);
52
+
53
+ const fromDate = (date as DateRange).from;
54
+ const toDate = (date as DateRange).to;
55
+
56
+ if (fromDate) {
57
+ setFromDateText(formatInputDate(fromDate));
58
+ setFromDateError("");
59
+ }
60
+
61
+ if (toDate) {
62
+ setToDateText(formatInputDate(toDate));
63
+ setToDateError("");
64
+ }
65
+ }
66
+ };
67
+ return (
68
+ <DatePicker
69
+ onSelect={onDatePickerSelect}
70
+ value={selectedDate}
71
+ disabled={disableDateRangePickers}
72
+ mode={"range"}
73
+ components={{
74
+ Nav: ({ onNextClick, onPreviousClick }) => (
75
+ <div className={classes["nav"]}>
76
+ <IconButton
77
+ title={previousMonth}
78
+ onClick={onPreviousClick}
79
+ className={classes["prev-button"]}
80
+ disabled={disableDateRangePickers}
81
+ >
82
+ <Icon size="0.75rem" icon={Icons.ChevronLeft} />
83
+ </IconButton>
84
+ <IconButton
85
+ title={nextMonth}
86
+ onClick={onNextClick}
87
+ className={classes["next-button"]}
88
+ disabled={disableDateRangePickers}
89
+ >
90
+ <Icon size="0.75rem" icon={Icons.ChevronRight} />
91
+ </IconButton>
92
+ </div>
93
+ ),
94
+ MonthCaption: ({ calendarMonth }) => (
95
+ <Typography className={classes["month-caption"]} variant="body">
96
+ {getMonthName(calendarMonth.date)} {getYearFromDate(calendarMonth.date)}
97
+ </Typography>
98
+ )
99
+ }}
100
+ numberOfMonths={2}
101
+ />
102
+ );
103
+ };
@@ -0,0 +1,121 @@
1
+ /*
2
+ * Copyright 2022 OneWelcome B.V.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import React, { Fragment } from "react";
18
+ import { InputWrapper } from "../../../Form/Wrapper/InputWrapper/InputWrapper";
19
+ import classes from "./DateTimePicker.module.scss";
20
+ import { parse } from "date-fns";
21
+ import { DateRange } from "react-day-picker";
22
+
23
+ export type Props = {
24
+ from: string;
25
+ to: string;
26
+ dateInputPlaceholder: string;
27
+ dateFormatError: string;
28
+ fromDateText: string;
29
+ toDateText: string;
30
+ fromDateError: string;
31
+ toDateError: string;
32
+ setSelectedDate: React.Dispatch<React.SetStateAction<DateRange>>;
33
+ setFromDateText: React.Dispatch<React.SetStateAction<string>>;
34
+ setToDateText: React.Dispatch<React.SetStateAction<string>>;
35
+ setFromDateError: React.Dispatch<React.SetStateAction<string>>;
36
+ setToDateError: React.Dispatch<React.SetStateAction<string>>;
37
+ };
38
+
39
+ export const DateTimePickerInputSection = ({
40
+ from,
41
+ to,
42
+ dateInputPlaceholder,
43
+ dateFormatError,
44
+ toDateText,
45
+ fromDateText,
46
+ fromDateError,
47
+ toDateError,
48
+ setSelectedDate,
49
+ setFromDateText,
50
+ setToDateText,
51
+ setFromDateError,
52
+ setToDateError
53
+ }: Props) => {
54
+ const dateParseTemplate = "yyyy-MM-dd HH:mm:ss";
55
+ const parseDate = (date: string) => {
56
+ const dateText = parse(date, dateParseTemplate, new Date());
57
+ return dateText;
58
+ };
59
+
60
+ const validationRegex =
61
+ /^(\d{4})-(0[1-9]|1[012])-(0[1-9]|[12]\d|3[01]) ([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)$/;
62
+ const validateInput = (text: string) => validationRegex.test(text);
63
+
64
+ const onInputBlur =
65
+ (setError: (value: React.SetStateAction<string>) => void, setDate: (value: string) => void) =>
66
+ (e: React.FocusEvent<HTMLInputElement, Element>) => {
67
+ if (!validateInput(e.target.value)) {
68
+ setError(dateFormatError);
69
+ return;
70
+ }
71
+
72
+ setDate(e.target.value);
73
+ setError("");
74
+ };
75
+
76
+ const setFromDate = (value: string) =>
77
+ setSelectedDate(prev => ({ ...prev, from: parseDate(value) }));
78
+
79
+ const setToDate = (value: string) =>
80
+ setSelectedDate(prev => ({ from: prev?.from, to: parseDate(value) }));
81
+
82
+ const onFromInputBlur = onInputBlur(setFromDateError, setFromDate);
83
+ const onToInputBlur = onInputBlur(setToDateError, setToDate);
84
+
85
+ return (
86
+ <Fragment>
87
+ <InputWrapper
88
+ label={from}
89
+ name="fromDate"
90
+ error={!!fromDateError}
91
+ errorMessage={fromDateError}
92
+ errorMessageProps={{ className: classes["error-message"] }}
93
+ helperProps={{
94
+ style: { fontSize: "0.625rem" }
95
+ }}
96
+ type="text"
97
+ value={fromDateText}
98
+ onBlur={onFromInputBlur}
99
+ onChange={e => setFromDateText(e.target.value)}
100
+ inputProps={{ style: { height: "2rem" }, placeholder: dateInputPlaceholder }}
101
+ className={classes["input"]}
102
+ />
103
+ <InputWrapper
104
+ className={classes["input"]}
105
+ inputProps={{ style: { height: "2rem" }, placeholder: dateInputPlaceholder }}
106
+ label={to}
107
+ value={toDateText}
108
+ error={!!toDateError}
109
+ errorMessage={toDateError}
110
+ errorMessageProps={{ className: classes["error-message"] }}
111
+ helperProps={{
112
+ style: { fontSize: "0.625rem" }
113
+ }}
114
+ onChange={e => setToDateText(e.target.value)}
115
+ onBlur={onToInputBlur}
116
+ name="toDate"
117
+ type="text"
118
+ />
119
+ </Fragment>
120
+ );
121
+ };
@@ -14,23 +14,17 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { useEffect } from "react";
17
+ import { format, Locale } from "date-fns";
18
18
 
19
- export const useBodyClick = (
20
- checkFunction: (event: MouseEvent) => boolean,
21
- callbackFunction: (...args: unknown[]) => unknown,
22
- dependingStateVariable: React.ComponentState | React.ComponentState[]
23
- ) => {
24
- function bodyClickListener(event: MouseEvent) {
25
- if (checkFunction(event)) {
26
- callbackFunction();
27
- }
28
- }
29
- useEffect(() => {
30
- window.addEventListener("click", bodyClickListener);
19
+ export const THIRTY_SECONDS = "THIRTY_SECONDS";
20
+ export const ONE_MINUTE = "ONE_MINUTE";
21
+ export const FIVE_MINUTES = "FIVE_MINUTES";
22
+ export const ONE_HOUR = "ONE_HOUR";
23
+ export const TWENTY_FOUR_HOURS = "TWENTY_FOUR_HOURS";
24
+ export const CUSTOM_DATE_RANGE = "CUSTOM";
31
25
 
32
- return () => {
33
- window.removeEventListener("click", bodyClickListener);
34
- };
35
- }, [dependingStateVariable]);
36
- };
26
+ export const getMonthName = (date: Date, locale?: Locale) => format(date, "MMMM", { locale });
27
+
28
+ export const getYearFromDate = (date: Date) => format(date, "yyyy");
29
+
30
+ export const formatInputDate = (date: Date) => format(date, "yyyy-MM-dd HH:mm:ss");