@dhis2-ui/select 10.16.2 → 10.16.3-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/package.json +17 -16
  2. package/src/index.js +9 -0
  3. package/src/locales/ar/translations.json +7 -0
  4. package/src/locales/ar_IQ/translations.json +7 -0
  5. package/src/locales/ckb/translations.json +7 -0
  6. package/src/locales/cs/translations.json +7 -0
  7. package/src/locales/da/translations.json +7 -0
  8. package/src/locales/en/translations.json +11 -0
  9. package/src/locales/en_US/translations.json +9 -0
  10. package/src/locales/es/translations.json +7 -0
  11. package/src/locales/es_419/translations.json +7 -0
  12. package/src/locales/fr/translations.json +7 -0
  13. package/src/locales/hi_IN/translations.json +7 -0
  14. package/src/locales/id/translations.json +7 -0
  15. package/src/locales/index.js +80 -0
  16. package/src/locales/km/translations.json +7 -0
  17. package/src/locales/lo/translations.json +7 -0
  18. package/src/locales/my/translations.json +7 -0
  19. package/src/locales/nb/translations.json +7 -0
  20. package/src/locales/nl/translations.json +7 -0
  21. package/src/locales/prs/translations.json +7 -0
  22. package/src/locales/ps/translations.json +7 -0
  23. package/src/locales/pt/translations.json +7 -0
  24. package/src/locales/pt_BR/translations.json +7 -0
  25. package/src/locales/ru/translations.json +7 -0
  26. package/src/locales/sv/translations.json +7 -0
  27. package/src/locales/tet/translations.json +7 -0
  28. package/src/locales/tg/translations.json +7 -0
  29. package/src/locales/uk/translations.json +7 -0
  30. package/src/locales/ur/translations.json +7 -0
  31. package/src/locales/uz_Latn/translations.json +7 -0
  32. package/src/locales/uz_UZ_Cyrl/translations.json +7 -0
  33. package/src/locales/uz_UZ_Latn/translations.json +7 -0
  34. package/src/locales/vi/translations.json +7 -0
  35. package/src/locales/zh/translations.json +9 -0
  36. package/src/locales/zh_CN/translations.json +7 -0
  37. package/src/multi-select/__tests__/multi-select.test.js +23 -0
  38. package/src/multi-select/__tests__/selection-list.test.js +102 -0
  39. package/src/multi-select/features/accepts_blur_cb/index.js +14 -0
  40. package/src/multi-select/features/accepts_blur_cb.feature +8 -0
  41. package/src/multi-select/features/accepts_focus_cb/index.js +14 -0
  42. package/src/multi-select/features/accepts_focus_cb.feature +6 -0
  43. package/src/multi-select/features/accepts_initial_focus/index.js +5 -0
  44. package/src/multi-select/features/accepts_initial_focus.feature +5 -0
  45. package/src/multi-select/features/accepts_loading/index.js +22 -0
  46. package/src/multi-select/features/accepts_loading.feature +14 -0
  47. package/src/multi-select/features/accepts_max_height/index.js +31 -0
  48. package/src/multi-select/features/accepts_max_height.feature +11 -0
  49. package/src/multi-select/features/accepts_placeholder/index.js +25 -0
  50. package/src/multi-select/features/accepts_placeholder.feature +10 -0
  51. package/src/multi-select/features/accepts_prefix/index.js +19 -0
  52. package/src/multi-select/features/accepts_prefix.feature +10 -0
  53. package/src/multi-select/features/allows_invalid_options/index.js +27 -0
  54. package/src/multi-select/features/allows_invalid_options.feature +12 -0
  55. package/src/multi-select/features/allows_selecting/index.js +81 -0
  56. package/src/multi-select/features/allows_selecting.feature +44 -0
  57. package/src/multi-select/features/can_be_cleared/index.js +22 -0
  58. package/src/multi-select/features/can_be_cleared.feature +6 -0
  59. package/src/multi-select/features/can_be_disabled/index.js +36 -0
  60. package/src/multi-select/features/can_be_disabled.feature +32 -0
  61. package/src/multi-select/features/can_be_empty/index.js +28 -0
  62. package/src/multi-select/features/can_be_empty.feature +16 -0
  63. package/src/multi-select/features/can_be_filtered/index.js +23 -0
  64. package/src/multi-select/features/can_be_filtered.feature +14 -0
  65. package/src/multi-select/features/can_be_opened_and_closed/index.js +32 -0
  66. package/src/multi-select/features/can_be_opened_and_closed.feature +41 -0
  67. package/src/multi-select/features/common/index.js +49 -0
  68. package/src/multi-select/features/duplicate_option_values/index.js +21 -0
  69. package/src/multi-select/features/duplicate_option_values.feature +7 -0
  70. package/src/multi-select/features/menu_width_matches_input/index.js +53 -0
  71. package/src/multi-select/features/menu_width_matches_input.feature +11 -0
  72. package/src/multi-select/features/position/index.js +160 -0
  73. package/src/multi-select/features/position.feature +46 -0
  74. package/src/multi-select/features/shows_selections/index.js +18 -0
  75. package/src/multi-select/features/shows_selections.feature +9 -0
  76. package/src/multi-select/filterable-menu.js +43 -0
  77. package/src/multi-select/index.js +1 -0
  78. package/src/multi-select/input.js +129 -0
  79. package/src/multi-select/menu.js +91 -0
  80. package/src/multi-select/multi-select.e2e.stories.js +407 -0
  81. package/src/multi-select/multi-select.js +148 -0
  82. package/src/multi-select/multi-select.prod.stories.js +408 -0
  83. package/src/multi-select/selection-list.js +79 -0
  84. package/src/multi-select-field/__tests__/multi-select-field.test.js +29 -0
  85. package/src/multi-select-field/features/accepts_help_text/index.js +9 -0
  86. package/src/multi-select-field/features/accepts_help_text.feature +5 -0
  87. package/src/multi-select-field/features/accepts_label/index.js +9 -0
  88. package/src/multi-select-field/features/accepts_label.feature +5 -0
  89. package/src/multi-select-field/features/accepts_validation_text/index.js +9 -0
  90. package/src/multi-select-field/features/accepts_validation_text.feature +5 -0
  91. package/src/multi-select-field/features/can_be_required/index.js +11 -0
  92. package/src/multi-select-field/features/can_be_required.feature +5 -0
  93. package/src/multi-select-field/features/has_default_clear_text/index.js +16 -0
  94. package/src/multi-select-field/features/has_default_clear_text.feature +6 -0
  95. package/src/multi-select-field/features/has_default_empty_text/index.js +13 -0
  96. package/src/multi-select-field/features/has_default_empty_text.feature +6 -0
  97. package/src/multi-select-field/features/has_default_filter_nomatch_text/index.js +17 -0
  98. package/src/multi-select-field/features/has_default_filter_nomatch_text.feature +7 -0
  99. package/src/multi-select-field/features/has_default_filter_placeholder/index.js +15 -0
  100. package/src/multi-select-field/features/has_default_filter_placeholder.feature +6 -0
  101. package/src/multi-select-field/features/has_default_loading_text/index.js +13 -0
  102. package/src/multi-select-field/features/has_default_loading_text.feature +6 -0
  103. package/src/multi-select-field/index.js +1 -0
  104. package/src/multi-select-field/multi-select-field.e2e.stories.js +45 -0
  105. package/src/multi-select-field/multi-select-field.js +178 -0
  106. package/src/multi-select-field/multi-select-field.prod.stories.js +137 -0
  107. package/src/multi-select-option/index.js +1 -0
  108. package/src/multi-select-option/multi-select-option.js +70 -0
  109. package/src/select/__tests__/select.test.js +31 -0
  110. package/src/select/debounce/debounce.js +30 -0
  111. package/src/select/debounce/debounce.spec.js +35 -0
  112. package/src/select/empty.js +28 -0
  113. package/src/select/filter-input.js +42 -0
  114. package/src/select/filterable-menu.js +106 -0
  115. package/src/select/index.js +14 -0
  116. package/src/select/input-clear-button.js +66 -0
  117. package/src/select/input-placeholder.js +30 -0
  118. package/src/select/input-prefix.js +32 -0
  119. package/src/select/input-wrapper.js +114 -0
  120. package/src/select/loading.js +33 -0
  121. package/src/select/menu-wrapper.js +52 -0
  122. package/src/select/no-match.js +28 -0
  123. package/src/select/option-helpers.js +34 -0
  124. package/src/select/select.js +256 -0
  125. package/src/simple-single-select/__stories__/DefaultPosition.js +37 -0
  126. package/src/simple-single-select/__stories__/Dense.js +17 -0
  127. package/src/simple-single-select/__stories__/Empty.js +15 -0
  128. package/src/simple-single-select/__stories__/EmptyWithEmptyNode.js +27 -0
  129. package/src/simple-single-select/__stories__/EmptyWithEmptyText.js +16 -0
  130. package/src/simple-single-select/__stories__/FlippedPosition.js +36 -0
  131. package/src/simple-single-select/__stories__/InfiniteLoading.js +65 -0
  132. package/src/simple-single-select/__stories__/Loading.js +15 -0
  133. package/src/simple-single-select/__stories__/ShiftedIntoView.js +35 -0
  134. package/src/simple-single-select/__stories__/WithClearButton.js +26 -0
  135. package/src/simple-single-select/__stories__/WithCustomLowMaxHeight.js +17 -0
  136. package/src/simple-single-select/__stories__/WithCustomOptions.js +78 -0
  137. package/src/simple-single-select/__stories__/WithDisabledOption.js +25 -0
  138. package/src/simple-single-select/__stories__/WithFilterField.js +30 -0
  139. package/src/simple-single-select/__stories__/WithInitialFocus.js +29 -0
  140. package/src/simple-single-select/__stories__/WithManyOptions.js +19 -0
  141. package/src/simple-single-select/__stories__/WithMultipleSelectsAndScrollableParent.js +65 -0
  142. package/src/simple-single-select/__stories__/WithNoMatchText.js +25 -0
  143. package/src/simple-single-select/__stories__/WithOnBlur.js +22 -0
  144. package/src/simple-single-select/__stories__/WithOnFocus.js +22 -0
  145. package/src/simple-single-select/__stories__/WithOptionsAndDisabled.js +17 -0
  146. package/src/simple-single-select/__stories__/WithOptionsAndLoading.js +23 -0
  147. package/src/simple-single-select/__stories__/WithOptionsAndLoadingText.js +24 -0
  148. package/src/simple-single-select/__stories__/WithPlaceholder.js +18 -0
  149. package/src/simple-single-select/__stories__/WithPlaceholderAndSelection.js +20 -0
  150. package/src/simple-single-select/__stories__/WithPrefix.js +17 -0
  151. package/src/simple-single-select/__stories__/WithPrefixAndSelection.js +20 -0
  152. package/src/simple-single-select/__stories__/WithRTL.js +29 -0
  153. package/src/simple-single-select/__stories__/WithScrollingParent.js +51 -0
  154. package/src/simple-single-select/__stories__/WithSelection.js +19 -0
  155. package/src/simple-single-select/__stories__/WithSelectionAndDisabled.js +20 -0
  156. package/src/simple-single-select/__stories__/WithServerSideFilteringDemo.js +245 -0
  157. package/src/simple-single-select/__stories__/WithSimpleFilteringDemo.js +50 -0
  158. package/src/simple-single-select/__stories__/WithoutOptionsAndLoading.js +16 -0
  159. package/src/simple-single-select/__stories__/WithoutSelection.js +17 -0
  160. package/src/simple-single-select/__stories__/options.js +96 -0
  161. package/src/simple-single-select/__stories__/simple-single-select-server-side-filtering/CustomDataProvider.js +70 -0
  162. package/src/simple-single-select/__stories__/simple-single-select-server-side-filtering/dataElements.js +4271 -0
  163. package/src/simple-single-select/__stories__/simple-single-select-server-side-filtering/index.js +1 -0
  164. package/src/simple-single-select/features/keyboard-interactions.test.e2e.js +581 -0
  165. package/src/simple-single-select/features/menu-positioning.test.e2e.js +187 -0
  166. package/src/simple-single-select/index.js +2 -0
  167. package/src/simple-single-select/is-option-hidden.js +21 -0
  168. package/src/simple-single-select/menu/empty.js +27 -0
  169. package/src/simple-single-select/menu/filter.js +61 -0
  170. package/src/simple-single-select/menu/index.js +1 -0
  171. package/src/simple-single-select/menu/loading.js +38 -0
  172. package/src/simple-single-select/menu/menu.js +171 -0
  173. package/src/simple-single-select/menu/no-match.js +28 -0
  174. package/src/simple-single-select/menu/option.js +161 -0
  175. package/src/simple-single-select/menu/options-list.js +107 -0
  176. package/src/simple-single-select/selected-value/clear-button.js +71 -0
  177. package/src/simple-single-select/selected-value/container.js +146 -0
  178. package/src/simple-single-select/selected-value/index.js +1 -0
  179. package/src/simple-single-select/selected-value/placeholder.js +24 -0
  180. package/src/simple-single-select/selected-value/prefix.js +26 -0
  181. package/src/simple-single-select/selected-value/selected-value.js +174 -0
  182. package/src/simple-single-select/shared-prop-types.js +8 -0
  183. package/src/simple-single-select/simple-single-select.e2e.stories.js +216 -0
  184. package/src/simple-single-select/simple-single-select.js +389 -0
  185. package/src/simple-single-select/simple-single-select.prod.stories.js +41 -0
  186. package/src/simple-single-select/simple-single-select.test.js +1136 -0
  187. package/src/simple-single-select/use-handle-key-press/index.js +2 -0
  188. package/src/simple-single-select/use-handle-key-press/use-focus-option.js +24 -0
  189. package/src/simple-single-select/use-handle-key-press/use-handle-key-press-on-combobox.js +259 -0
  190. package/src/simple-single-select/use-handle-key-press/use-handle-key-press-on-filter-input.js +147 -0
  191. package/src/simple-single-select/use-handle-key-press/use-handle-typing.js +79 -0
  192. package/src/simple-single-select/use-handle-key-press/use-highlight-first-option-on-previous-page.js +62 -0
  193. package/src/simple-single-select/use-handle-key-press/use-highlight-first-visible-option.js +38 -0
  194. package/src/simple-single-select/use-handle-key-press/use-highlight-last-option-on-next-page.js +60 -0
  195. package/src/simple-single-select/use-handle-key-press/use-highlight-last-visible-option.js +52 -0
  196. package/src/simple-single-select/use-handle-key-press/use-page-down.js +50 -0
  197. package/src/simple-single-select/use-handle-key-press/use-page-up.js +50 -0
  198. package/src/simple-single-select/use-handle-key-press/utils.js +23 -0
  199. package/src/simple-single-select-field/index.js +1 -0
  200. package/src/simple-single-select-field/simple-single-select-field.js +198 -0
  201. package/src/simple-single-select-field/simple-single-select-field.prod.stories.js +188 -0
  202. package/src/simple-single-select-field/simple-single-select-field.test.js +144 -0
  203. package/src/single-select/__tests__/selection.test.js +102 -0
  204. package/src/single-select/__tests__/single-select.test.js +23 -0
  205. package/src/single-select/features/accepts_blur_cb/index.js +14 -0
  206. package/src/single-select/features/accepts_blur_cb.feature +8 -0
  207. package/src/single-select/features/accepts_focus_cb/index.js +14 -0
  208. package/src/single-select/features/accepts_focus_cb.feature +6 -0
  209. package/src/single-select/features/accepts_initial_focus/index.js +5 -0
  210. package/src/single-select/features/accepts_initial_focus.feature +5 -0
  211. package/src/single-select/features/accepts_loading/index.js +22 -0
  212. package/src/single-select/features/accepts_loading.feature +14 -0
  213. package/src/single-select/features/accepts_max_height/index.js +31 -0
  214. package/src/single-select/features/accepts_max_height.feature +11 -0
  215. package/src/single-select/features/accepts_placeholder/index.js +25 -0
  216. package/src/single-select/features/accepts_placeholder.feature +10 -0
  217. package/src/single-select/features/accepts_prefix/index.js +19 -0
  218. package/src/single-select/features/accepts_prefix.feature +10 -0
  219. package/src/single-select/features/allows_invalid_options/index.js +28 -0
  220. package/src/single-select/features/allows_invalid_options.feature +12 -0
  221. package/src/single-select/features/allows_selecting/index.js +38 -0
  222. package/src/single-select/features/allows_selecting.feature +21 -0
  223. package/src/single-select/features/can_be_cleared/index.js +22 -0
  224. package/src/single-select/features/can_be_cleared.feature +6 -0
  225. package/src/single-select/features/can_be_disabled/index.js +39 -0
  226. package/src/single-select/features/can_be_disabled.feature +32 -0
  227. package/src/single-select/features/can_be_empty/index.js +28 -0
  228. package/src/single-select/features/can_be_empty.feature +16 -0
  229. package/src/single-select/features/can_be_filtered/index.js +23 -0
  230. package/src/single-select/features/can_be_filtered.feature +14 -0
  231. package/src/single-select/features/can_be_opened_and_closed/index.js +32 -0
  232. package/src/single-select/features/can_be_opened_and_closed.feature +41 -0
  233. package/src/single-select/features/common/index.js +44 -0
  234. package/src/single-select/features/duplicate_option_values/index.js +26 -0
  235. package/src/single-select/features/duplicate_option_values.feature +7 -0
  236. package/src/single-select/features/menu_width_matches_input/index.js +53 -0
  237. package/src/single-select/features/menu_width_matches_input.feature +11 -0
  238. package/src/single-select/features/position/index.js +111 -0
  239. package/src/single-select/features/position.feature +26 -0
  240. package/src/single-select/features/shows_selections/index.js +9 -0
  241. package/src/single-select/features/shows_selections.feature +5 -0
  242. package/src/single-select/filterable-menu.js +41 -0
  243. package/src/single-select/index.js +1 -0
  244. package/src/single-select/input.js +101 -0
  245. package/src/single-select/menu.js +75 -0
  246. package/src/single-select/selection.js +60 -0
  247. package/src/single-select/single-select.e2e.stories.js +376 -0
  248. package/src/single-select/single-select.js +146 -0
  249. package/src/single-select/single-select.prod.stories.js +358 -0
  250. package/src/single-select-field/__tests__/single-select-field.test.js +29 -0
  251. package/src/single-select-field/features/accepts_help_text/index.js +9 -0
  252. package/src/single-select-field/features/accepts_help_text.feature +5 -0
  253. package/src/single-select-field/features/accepts_label/index.js +9 -0
  254. package/src/single-select-field/features/accepts_label.feature +5 -0
  255. package/src/single-select-field/features/accepts_validation_text/index.js +9 -0
  256. package/src/single-select-field/features/accepts_validation_text.feature +5 -0
  257. package/src/single-select-field/features/can_be_required/index.js +11 -0
  258. package/src/single-select-field/features/can_be_required.feature +5 -0
  259. package/src/single-select-field/features/has_default_clear_text/index.js +16 -0
  260. package/src/single-select-field/features/has_default_clear_text.feature +6 -0
  261. package/src/single-select-field/features/has_default_empty_text/index.js +13 -0
  262. package/src/single-select-field/features/has_default_empty_text.feature +6 -0
  263. package/src/single-select-field/features/has_default_filter_nomatch_text/index.js +17 -0
  264. package/src/single-select-field/features/has_default_filter_nomatch_text.feature +7 -0
  265. package/src/single-select-field/features/has_default_filter_placeholder/index.js +15 -0
  266. package/src/single-select-field/features/has_default_filter_placeholder.feature +6 -0
  267. package/src/single-select-field/features/has_default_loading_text/index.js +13 -0
  268. package/src/single-select-field/features/has_default_loading_text.feature +6 -0
  269. package/src/single-select-field/index.js +1 -0
  270. package/src/single-select-field/single-select-field.e2e.stories.js +45 -0
  271. package/src/single-select-field/single-select-field.js +178 -0
  272. package/src/single-select-field/single-select-field.prod.stories.js +146 -0
  273. package/src/single-select-option/index.js +1 -0
  274. package/src/single-select-option/single-select-option.js +84 -0
@@ -0,0 +1,174 @@
1
+ import { IconChevronDown16 } from '@dhis2/ui-icons'
2
+ import PropTypes from 'prop-types'
3
+ import React from 'react'
4
+ import { Filter } from '../menu/filter.js'
5
+ import { ClearButton } from './clear-button.js'
6
+ import { Container } from './container.js'
7
+ import { Placeholder } from './placeholder.js'
8
+ import { Prefix } from './prefix.js'
9
+
10
+ export function SelectedValue({
11
+ clearText,
12
+ comboBoxId,
13
+ name,
14
+ selectedLabel,
15
+ onKeyDown,
16
+ autoFocus,
17
+ clearable,
18
+ comboBoxRef,
19
+ dataTest,
20
+ dense,
21
+ disabled,
22
+ error,
23
+ expanded,
24
+ filterLabel,
25
+ filterPlaceholder,
26
+ filterRef,
27
+ filterable,
28
+ filterValue,
29
+ hasSelection,
30
+ inputMaxHeight,
31
+ labelledBy,
32
+ placeholder,
33
+ prefix,
34
+ tabIndex,
35
+ valid,
36
+ warning,
37
+ onBlur,
38
+ onClear,
39
+ onClick,
40
+ onFilterChange,
41
+ onFilterInputKeyDown,
42
+ onFocus,
43
+ }) {
44
+ const dataTestPrefix = `${dataTest}-selectedvalue`
45
+ const showFilter = filterable && expanded
46
+
47
+ return (
48
+ <Container
49
+ dataTest={`${dataTestPrefix}-container`}
50
+ ref={comboBoxRef}
51
+ comboBoxId={comboBoxId}
52
+ autoFocus={autoFocus}
53
+ dense={dense}
54
+ disabled={disabled}
55
+ error={error}
56
+ expanded={expanded}
57
+ labelledBy={labelledBy}
58
+ name={name}
59
+ placeholder={placeholder}
60
+ tabIndex={tabIndex}
61
+ valid={valid}
62
+ warning={warning}
63
+ onBlur={onBlur}
64
+ onClick={onClick}
65
+ onFocus={onFocus}
66
+ onKeyDown={onKeyDown}
67
+ >
68
+ {prefix && (
69
+ <Prefix dataTest={`${dataTestPrefix}-prefix`} prefix={prefix} />
70
+ )}
71
+
72
+ {showFilter ? (
73
+ <Filter
74
+ inputRef={filterRef}
75
+ ariaControls={`${name}-listbox`}
76
+ dataTest={`${dataTestPrefix}-filter`}
77
+ label={filterLabel}
78
+ placeholder={filterPlaceholder}
79
+ value={filterValue}
80
+ onChange={onFilterChange}
81
+ onKeyDown={onFilterInputKeyDown}
82
+ />
83
+ ) : (
84
+ <div className="selected-option-label" tabIndex="-1">
85
+ {!selectedLabel && !prefix && placeholder && (
86
+ <Placeholder
87
+ dataTest={`${dataTestPrefix}-placeholder`}
88
+ placeholder={placeholder}
89
+ />
90
+ )}
91
+
92
+ {selectedLabel}
93
+ </div>
94
+ )}
95
+
96
+ {hasSelection && clearable && !disabled && (
97
+ <div className="clear-button-container">
98
+ <ClearButton
99
+ clearText={clearText}
100
+ dataTest={`${dataTestPrefix}-clear`}
101
+ onClear={onClear}
102
+ />
103
+ </div>
104
+ )}
105
+
106
+ <span
107
+ className="toggle-icon"
108
+ aria-label="Open select"
109
+ onClick={() => {
110
+ comboBoxRef.current.focus()
111
+ onClick()
112
+ }}
113
+ >
114
+ <IconChevronDown16 />
115
+ </span>
116
+
117
+ <style jsx>{`
118
+ .selected-option-label {
119
+ overflow-y: auto;
120
+ max-height: ${inputMaxHeight};
121
+ flex: 1;
122
+ }
123
+
124
+ .clear-button-container {
125
+ margin-inline-start: auto;
126
+ }
127
+
128
+ .toggle-icon {
129
+ display: block;
130
+ background: none;
131
+ padding: 0;
132
+ border: 0;
133
+ }
134
+ `}</style>
135
+ </Container>
136
+ )
137
+ }
138
+
139
+ SelectedValue.propTypes = {
140
+ clearText: PropTypes.string.isRequired,
141
+ comboBoxId: PropTypes.string.isRequired,
142
+ filterRef: PropTypes.object.isRequired,
143
+ name: PropTypes.string.isRequired,
144
+ selectedLabel: PropTypes.string.isRequired,
145
+ onKeyDown: PropTypes.func.isRequired,
146
+ autoFocus: PropTypes.bool,
147
+ clearable: PropTypes.bool,
148
+ comboBoxRef: PropTypes.shape({
149
+ current: PropTypes.instanceOf(HTMLElement),
150
+ }),
151
+ dataTest: PropTypes.string,
152
+ dense: PropTypes.bool,
153
+ disabled: PropTypes.bool,
154
+ error: PropTypes.bool,
155
+ expanded: PropTypes.bool,
156
+ filterLabel: PropTypes.string,
157
+ filterPlaceholder: PropTypes.string,
158
+ filterValue: PropTypes.string,
159
+ filterable: PropTypes.bool,
160
+ hasSelection: PropTypes.bool,
161
+ inputMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
162
+ labelledBy: PropTypes.string,
163
+ placeholder: PropTypes.string,
164
+ prefix: PropTypes.string,
165
+ tabIndex: PropTypes.string,
166
+ valid: PropTypes.bool,
167
+ warning: PropTypes.bool,
168
+ onBlur: PropTypes.func,
169
+ onClear: PropTypes.func,
170
+ onClick: PropTypes.func,
171
+ onFilterChange: PropTypes.func,
172
+ onFilterInputKeyDown: PropTypes.func,
173
+ onFocus: PropTypes.func,
174
+ }
@@ -0,0 +1,8 @@
1
+ import PropTypes from 'prop-types'
2
+
3
+ export const optionProp = PropTypes.shape({
4
+ label: PropTypes.string.isRequired,
5
+ value: PropTypes.string.isRequired,
6
+ component: PropTypes.elementType,
7
+ disabled: PropTypes.bool,
8
+ })
@@ -0,0 +1,216 @@
1
+ import React, { useState } from 'react'
2
+ import { SimpleSingleSelect } from './simple-single-select.js'
3
+
4
+ export default {
5
+ title: 'Simple Single Select',
6
+ component: SimpleSingleSelect,
7
+ }
8
+
9
+ const options = [
10
+ {
11
+ label: 'ANC 1st visit',
12
+ value: 'anc_1st_visit',
13
+ },
14
+ {
15
+ label: 'ANC 2nd visit',
16
+ value: 'anc_2nd_visit',
17
+ },
18
+ {
19
+ label: 'ANC 3rd visit',
20
+ value: 'anc_3rd_visit',
21
+ },
22
+ {
23
+ label: 'ANC 4th or more visits',
24
+ value: 'anc_4th_or_more_visits',
25
+ },
26
+ {
27
+ label: 'ARI treated with antibiotics (pneumonia) follow-up',
28
+ value: 'ari_treated_with_antibiotics_(pneumonia)_follow-up',
29
+ },
30
+ {
31
+ label: 'ARI treated with antibiotics (pneumonia) new',
32
+ value: 'ari_treated_with_antibiotics_(pneumonia)_new',
33
+ },
34
+ {
35
+ label: 'ARI treated with antibiotics (pneumonia) referrals',
36
+ value: 'ari_treated_with_antibiotics_(pneumonia)_referrals',
37
+ },
38
+ {
39
+ label: 'ARI treated without antibiotics (cough) follow-up',
40
+ value: 'ari_treated_without_antibiotics_(cough)_follow-up',
41
+ },
42
+ {
43
+ label: 'ARI treated without antibiotics (cough) new',
44
+ value: 'ari_treated_without_antibiotics_(cough)_new',
45
+ },
46
+ {
47
+ label: 'ARI treated without antibiotics (cough) referrals',
48
+ value: 'ari_treated_without_antibiotics_(cough)_referrals',
49
+ },
50
+ {
51
+ label: 'ART No clients who stopped TRT due to TRT failure',
52
+ value: 'art_no_clients_who_stopped_trt_due_to_trt_failure',
53
+ },
54
+ {
55
+ label: 'ART No clients who stopped TRT due to adverse clinical status/event',
56
+ value: 'art_no_clients_who_stopped_trt_due_to_adverse_clinical_status/event',
57
+ },
58
+ {
59
+ label: 'ART No clients with change of regimen due to drug toxicity',
60
+ value: 'art_no_clients_with_change_of_regimen_due_to_drug_toxicity',
61
+ },
62
+ {
63
+ label: 'ART No clients with new adverse drug reaction',
64
+ value: 'art_no_clients_with_new_adverse_drug_reaction',
65
+ },
66
+ {
67
+ label: 'ART No started Opportunist Infection prophylaxis',
68
+ value: 'art_no_started_opportunist_infection_prophylaxis',
69
+ },
70
+ {
71
+ label: 'ART clients with new adverse clinical event',
72
+ value: 'art_clients_with_new_adverse_clinical_event',
73
+ },
74
+ {
75
+ label: 'ART defaulters',
76
+ value: 'art_defaulters',
77
+ },
78
+ {
79
+ label: 'ART enrollment stage 1',
80
+ value: 'art_enrollment_stage_1',
81
+ },
82
+ {
83
+ label: 'ART enrollment stage 2',
84
+ value: 'art_enrollment_stage_2',
85
+ },
86
+ {
87
+ label: 'ART enrollment stage 3',
88
+ value: 'art_enrollment_stage_3',
89
+ },
90
+ {
91
+ label: 'ART enrollment stage 4',
92
+ value: 'art_enrollment_stage_4',
93
+ },
94
+ {
95
+ label: 'ART entry point: No PMTCT',
96
+ value: 'art_entry_point:_no_pmtct',
97
+ },
98
+ ]
99
+
100
+ const fiveOptions = options.slice(0, 5)
101
+
102
+ export const DefaultPosition = () => (
103
+ <SimpleSingleSelect
104
+ name="Simple"
105
+ selected={{
106
+ label: 'ANC 1st visit',
107
+ value: 'anc_1st_visit',
108
+ }}
109
+ onChange={() => null}
110
+ options={fiveOptions}
111
+ />
112
+ )
113
+
114
+ export const FlippedPosition = () => (
115
+ <>
116
+ <SimpleSingleSelect
117
+ name="Simple"
118
+ selected={{
119
+ label: 'ANC 1st visit',
120
+ value: 'anc_1st_visit',
121
+ }}
122
+ onChange={() => null}
123
+ options={options}
124
+ />
125
+
126
+ <style jsx>{`
127
+ :global(html),
128
+ :global(body),
129
+ :global(#storybook-root) {
130
+ position: relative;
131
+ height: 500px;
132
+ max-height: 500px;
133
+ }
134
+ :global(#storybook-root) {
135
+ padding-top: 400px !important;
136
+ }
137
+ `}</style>
138
+ </>
139
+ )
140
+
141
+ export const ShiftedIntoView = () => (
142
+ <>
143
+ <SimpleSingleSelect
144
+ name="Simple"
145
+ selected={{
146
+ label: 'ANC 1st visit',
147
+ value: 'anc_1st_visit',
148
+ }}
149
+ onChange={() => null}
150
+ options={options}
151
+ />
152
+
153
+ <style jsx>{`
154
+ :global(html),
155
+ :global(body),
156
+ :global(#storybook-root) {
157
+ position: relative;
158
+ height: 300px !important;
159
+ max-height: 300px;
160
+ }
161
+ :global(#storybook-root) {
162
+ padding-top: 130px !important;
163
+ }
164
+ `}</style>
165
+ </>
166
+ )
167
+
168
+ export const HundretOptions = () => {
169
+ const [selected, setSelected] = useState({
170
+ value: '0',
171
+ label: `Select option 0`,
172
+ })
173
+ const [hundretOptions] = useState(
174
+ Array.apply(null, Array(100)).map((x, i) => ({
175
+ value: `${i}`,
176
+ label: `Select option ${i}`,
177
+ }))
178
+ )
179
+
180
+ return (
181
+ <SimpleSingleSelect
182
+ name="Simple"
183
+ selected={selected}
184
+ onChange={setSelected}
185
+ options={hundretOptions}
186
+ />
187
+ )
188
+ }
189
+
190
+ export const HundretOptionsWithDisabled = () => {
191
+ const [selected, setSelected] = useState({
192
+ value: '10',
193
+ label: `Select option 10`,
194
+ })
195
+ const [hundretOptions] = useState(
196
+ Array.apply(null, Array(100)).map((x, i) => ({
197
+ value: `${i}`,
198
+ label: `Select option ${i}`,
199
+ disabled: [
200
+ 0, // first otpion
201
+ 17,
202
+ 18,
203
+ 99, // last otpion
204
+ ].includes(i),
205
+ }))
206
+ )
207
+
208
+ return (
209
+ <SimpleSingleSelect
210
+ name="Simple"
211
+ selected={selected}
212
+ onChange={setSelected}
213
+ options={hundretOptions}
214
+ />
215
+ )
216
+ }