@hipay/hipay-material-ui 1.0.0-beta.1 → 1.0.0-beta.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (391) hide show
  1. package/HI-CHANGELOG.md +58 -0
  2. package/HiAlertModal/HiAlertModal.js +247 -0
  3. package/HiAlertModal/index.js +16 -0
  4. package/HiBreadcrumb/HiBreadcrumb.js +143 -0
  5. package/HiBreadcrumb/HiStep.js +123 -0
  6. package/HiBreadcrumb/HiStepConnector.js +142 -0
  7. package/HiBreadcrumb/HiStepIcon.js +134 -0
  8. package/HiBreadcrumb/HiStepLabel.js +182 -0
  9. package/HiBreadcrumb/HiStepper.js +125 -0
  10. package/HiBreadcrumb/index.js +16 -0
  11. package/HiCheckbox/HiCheckbox.js +4 -1
  12. package/HiChip/HiChip.js +4 -4
  13. package/HiChip/HiChipSwitch.js +11 -4
  14. package/HiColoredLabel/HiColoredLabel.js +3 -2
  15. package/HiDatePicker/HiDatePicker.js +34 -30
  16. package/HiDatePicker/HiDateRangePicker.js +7 -5
  17. package/HiDatePicker/HiDateRangeSelector.js +23 -11
  18. package/HiDatePicker/ListPicker.js +32 -7
  19. package/HiDatePicker/Overlays/MonthPickerOverlay.js +5 -1
  20. package/HiDatePicker/Overlays/YearPickerOverlay.js +2 -1
  21. package/HiDotsStepper/HiDot.js +151 -0
  22. package/HiDotsStepper/HiDotsStepper.js +146 -0
  23. package/HiDotsStepper/index.js +16 -0
  24. package/HiExpansionPanel/HiExpansionPanel.js +231 -0
  25. package/HiExpansionPanel/index.js +16 -0
  26. package/HiForm/HiAddressField.js +204 -0
  27. package/HiForm/HiFormControl.js +39 -31
  28. package/HiForm/HiInput.js +70 -97
  29. package/HiForm/HiSearchField.js +2 -2
  30. package/HiForm/index.js +9 -0
  31. package/HiPdfReader/HiPdfReader.js +282 -0
  32. package/HiPdfReader/index.js +16 -0
  33. package/HiPins/HiPins.js +0 -1
  34. package/HiSelect/HiSelect.js +400 -353
  35. package/HiSelect/HiSelectField.js +8 -6
  36. package/HiSelect/HiSuggestSelect.js +27 -47
  37. package/HiSelect/HiSuggestSelectField.js +88 -80
  38. package/HiSelect/SelectInput.js +34 -23
  39. package/HiSelectableList/HiSelectableList.js +9 -3
  40. package/HiSelectableList/HiSelectableListItem.js +96 -55
  41. package/HiSwitch/HiSwitchState.js +1 -1
  42. package/HiSwitch/index.js +6 -0
  43. package/HiTable/BodyCellBuilder.js +91 -96
  44. package/HiTable/BodyCells/CellCountry.js +11 -36
  45. package/HiTable/BodyCells/CellIcon.js +4 -2
  46. package/HiTable/BodyCells/CellImage.js +23 -10
  47. package/HiTable/BodyCells/CellLayout.js +25 -19
  48. package/HiTable/BodyCells/CellSentinel.js +12 -4
  49. package/HiTable/BodyCells/CellStatus.js +6 -2
  50. package/HiTable/BodyCells/CellText.js +2 -1
  51. package/HiTable/BodyCells/CellThirdPartySecurity.js +5 -6
  52. package/HiTable/BodyRow.js +78 -57
  53. package/HiTable/ColumnFilter.js +28 -15
  54. package/HiTable/HeaderCell.js +17 -14
  55. package/HiTable/HiTable.js +26 -10
  56. package/HiTable/HiTableBody.js +38 -14
  57. package/HiTable/HiTableContextMenu.js +7 -3
  58. package/HiTable/HiTableFooterScroll.js +1 -1
  59. package/HiTable/HiTableHead.js +24 -7
  60. package/HiTable/OrderColumns.js +6 -2
  61. package/HiTopBar/HiTopBar.js +57 -139
  62. package/README.md +13 -13
  63. package/es/HiAlertModal/HiAlertModal.js +189 -0
  64. package/es/HiAlertModal/index.js +1 -0
  65. package/es/HiBreadcrumb/HiBreadcrumb.js +73 -0
  66. package/es/HiBreadcrumb/HiStep.js +93 -0
  67. package/es/HiBreadcrumb/HiStepConnector.js +83 -0
  68. package/es/HiBreadcrumb/HiStepIcon.js +81 -0
  69. package/es/HiBreadcrumb/HiStepLabel.js +154 -0
  70. package/es/HiBreadcrumb/HiStepper.js +62 -0
  71. package/es/HiBreadcrumb/index.js +1 -0
  72. package/es/HiCheckbox/HiCheckbox.js +4 -1
  73. package/es/HiChip/HiChip.js +4 -4
  74. package/es/HiChip/HiChipSwitch.js +11 -4
  75. package/es/HiColoredLabel/HiColoredLabel.js +3 -2
  76. package/es/HiDatePicker/HiDatePicker.js +30 -25
  77. package/es/HiDatePicker/HiDateRangePicker.js +7 -5
  78. package/es/HiDatePicker/HiDateRangeSelector.js +24 -12
  79. package/es/HiDatePicker/ListPicker.js +39 -20
  80. package/es/HiDatePicker/Overlays/MonthPickerOverlay.js +5 -1
  81. package/es/HiDatePicker/Overlays/YearPickerOverlay.js +2 -1
  82. package/es/HiDotsStepper/HiDot.js +92 -0
  83. package/es/HiDotsStepper/HiDotsStepper.js +83 -0
  84. package/es/HiDotsStepper/index.js +1 -0
  85. package/es/HiExpansionPanel/HiExpansionPanel.js +170 -0
  86. package/es/HiExpansionPanel/index.js +1 -0
  87. package/es/HiForm/HiAddressField.js +142 -0
  88. package/es/HiForm/HiFormControl.js +32 -18
  89. package/es/HiForm/HiInput.js +68 -97
  90. package/es/HiForm/HiSearchField.js +2 -2
  91. package/es/HiForm/index.js +2 -1
  92. package/es/HiPdfReader/HiPdfReader.js +198 -0
  93. package/es/HiPdfReader/index.js +1 -0
  94. package/es/HiPins/HiPins.js +0 -1
  95. package/es/HiSelect/HiSelect.js +375 -324
  96. package/es/HiSelect/HiSelectField.js +9 -7
  97. package/es/HiSelect/HiSuggestSelect.js +26 -39
  98. package/es/HiSelect/HiSuggestSelectField.js +77 -69
  99. package/es/HiSelect/SelectInput.js +44 -23
  100. package/es/HiSelectableList/HiSelectableList.js +10 -4
  101. package/es/HiSelectableList/HiSelectableListItem.js +91 -55
  102. package/es/HiSwitch/HiSwitchState.js +1 -1
  103. package/es/HiSwitch/index.js +1 -0
  104. package/es/HiTable/BodyCellBuilder.js +90 -97
  105. package/es/HiTable/BodyCells/CellCountry.js +10 -35
  106. package/es/HiTable/BodyCells/CellIcon.js +4 -2
  107. package/es/HiTable/BodyCells/CellImage.js +23 -10
  108. package/es/HiTable/BodyCells/CellLayout.js +27 -21
  109. package/es/HiTable/BodyCells/CellSentinel.js +12 -4
  110. package/es/HiTable/BodyCells/CellStatus.js +6 -2
  111. package/es/HiTable/BodyCells/CellText.js +2 -1
  112. package/es/HiTable/BodyCells/CellThirdPartySecurity.js +5 -6
  113. package/es/HiTable/BodyRow.js +79 -56
  114. package/es/HiTable/ColumnFilter.js +15 -9
  115. package/es/HiTable/HeaderCell.js +17 -14
  116. package/es/HiTable/HiTable.js +26 -10
  117. package/es/HiTable/HiTableBody.js +34 -11
  118. package/es/HiTable/HiTableContextMenu.js +7 -3
  119. package/es/HiTable/HiTableFooterScroll.js +1 -1
  120. package/es/HiTable/HiTableHead.js +19 -7
  121. package/es/HiTable/OrderColumns.js +6 -2
  122. package/es/HiTopBar/HiTopBar.js +58 -127
  123. package/es/styles/createHiMuiTheme.js +11 -0
  124. package/es/utils/HiIconBuilder.js +13 -5
  125. package/es/utils/hiHelpers.js +2 -2
  126. package/hmu/images/countries/ad.svg +151 -0
  127. package/hmu/images/countries/ae.svg +6 -0
  128. package/hmu/images/countries/af.svg +83 -0
  129. package/hmu/images/countries/ag.svg +15 -0
  130. package/hmu/images/countries/ai.svg +767 -0
  131. package/hmu/images/countries/al.svg +5 -0
  132. package/hmu/images/countries/am.svg +5 -0
  133. package/hmu/images/countries/ao.svg +13 -0
  134. package/hmu/images/countries/aq.svg +6 -0
  135. package/hmu/images/countries/ar.svg +32 -0
  136. package/hmu/images/countries/as.svg +33 -0
  137. package/hmu/images/countries/at.svg +6 -0
  138. package/hmu/images/countries/au.svg +9 -0
  139. package/hmu/images/countries/aw.svg +186 -0
  140. package/hmu/images/countries/ax.svg +18 -0
  141. package/hmu/images/countries/az.svg +8 -0
  142. package/hmu/images/countries/ba.svg +12 -0
  143. package/hmu/images/countries/bb.svg +6 -0
  144. package/hmu/images/countries/bd.svg +4 -0
  145. package/hmu/images/countries/be.svg +7 -0
  146. package/hmu/images/countries/bf.svg +7 -0
  147. package/hmu/images/countries/bg.svg +7 -0
  148. package/hmu/images/countries/bh.svg +11 -0
  149. package/hmu/images/countries/bi.svg +15 -0
  150. package/hmu/images/countries/bj.svg +14 -0
  151. package/hmu/images/countries/bl.svg +7 -0
  152. package/hmu/images/countries/bm.svg +99 -0
  153. package/hmu/images/countries/bn.svg +36 -0
  154. package/hmu/images/countries/bo.svg +686 -0
  155. package/hmu/images/countries/bq.svg +5 -0
  156. package/hmu/images/countries/br.svg +45 -0
  157. package/hmu/images/countries/bs.svg +13 -0
  158. package/hmu/images/countries/bt.svg +89 -0
  159. package/hmu/images/countries/bv.svg +13 -0
  160. package/hmu/images/countries/bw.svg +7 -0
  161. package/hmu/images/countries/by.svg +61 -0
  162. package/hmu/images/countries/bz.svg +146 -0
  163. package/hmu/images/countries/ca.svg +4 -0
  164. package/hmu/images/countries/cc.svg +19 -0
  165. package/hmu/images/countries/cd.svg +5 -0
  166. package/hmu/images/countries/cf.svg +15 -0
  167. package/hmu/images/countries/cg.svg +12 -0
  168. package/hmu/images/countries/ch.svg +9 -0
  169. package/hmu/images/countries/ci.svg +7 -0
  170. package/hmu/images/countries/ck.svg +9 -0
  171. package/hmu/images/countries/cl.svg +13 -0
  172. package/hmu/images/countries/cm.svg +15 -0
  173. package/hmu/images/countries/cn.svg +11 -0
  174. package/hmu/images/countries/co.svg +7 -0
  175. package/hmu/images/countries/cr.svg +7 -0
  176. package/hmu/images/countries/cu.svg +13 -0
  177. package/hmu/images/countries/cv.svg +13 -0
  178. package/hmu/images/countries/cw.svg +14 -0
  179. package/hmu/images/countries/cx.svg +15 -0
  180. package/hmu/images/countries/cy.svg +6 -0
  181. package/hmu/images/countries/cz.svg +12 -0
  182. package/hmu/images/countries/de.svg +5 -0
  183. package/hmu/images/countries/dj.svg +13 -0
  184. package/hmu/images/countries/dk.svg +5 -0
  185. package/hmu/images/countries/dm.svg +152 -0
  186. package/hmu/images/countries/do.svg +6745 -0
  187. package/hmu/images/countries/dz.svg +5 -0
  188. package/hmu/images/countries/ec.svg +141 -0
  189. package/hmu/images/countries/ee.svg +7 -0
  190. package/hmu/images/countries/eg.svg +38 -0
  191. package/hmu/images/countries/eh.svg +15 -0
  192. package/hmu/images/countries/er.svg +8 -0
  193. package/hmu/images/countries/es-ct.svg +4 -0
  194. package/hmu/images/countries/es.svg +581 -0
  195. package/hmu/images/countries/et.svg +14 -0
  196. package/hmu/images/countries/eu.svg +28 -0
  197. package/hmu/images/countries/fi.svg +5 -0
  198. package/hmu/images/countries/fj.svg +124 -0
  199. package/hmu/images/countries/fk.svg +90 -0
  200. package/hmu/images/countries/fm.svg +11 -0
  201. package/hmu/images/countries/fo.svg +12 -0
  202. package/hmu/images/countries/fr.svg +7 -0
  203. package/hmu/images/countries/ga.svg +7 -0
  204. package/hmu/images/countries/gb-eng.svg +5 -0
  205. package/hmu/images/countries/gb-nir.svg +137 -0
  206. package/hmu/images/countries/gb-sct.svg +4 -0
  207. package/hmu/images/countries/gb-wls.svg +9 -0
  208. package/hmu/images/countries/gb.svg +15 -0
  209. package/hmu/images/countries/gd.svg +27 -0
  210. package/hmu/images/countries/ge.svg +6 -0
  211. package/hmu/images/countries/gf.svg +5 -0
  212. package/hmu/images/countries/gg.svg +9 -0
  213. package/hmu/images/countries/gh.svg +6 -0
  214. package/hmu/images/countries/gi.svg +33 -0
  215. package/hmu/images/countries/gl.svg +4 -0
  216. package/hmu/images/countries/gm.svg +14 -0
  217. package/hmu/images/countries/gn.svg +7 -0
  218. package/hmu/images/countries/gp.svg +7 -0
  219. package/hmu/images/countries/gq.svg +23 -0
  220. package/hmu/images/countries/gr.svg +22 -0
  221. package/hmu/images/countries/gs.svg +205 -0
  222. package/hmu/images/countries/gt.svg +204 -0
  223. package/hmu/images/countries/gu.svg +39 -0
  224. package/hmu/images/countries/gw.svg +13 -0
  225. package/hmu/images/countries/gy.svg +9 -0
  226. package/hmu/images/countries/hk.svg +32 -0
  227. package/hmu/images/countries/hm.svg +9 -0
  228. package/hmu/images/countries/hn.svg +18 -0
  229. package/hmu/images/countries/hr.svg +59 -0
  230. package/hmu/images/countries/ht.svg +122 -0
  231. package/hmu/images/countries/hu.svg +7 -0
  232. package/hmu/images/countries/id.svg +6 -0
  233. package/hmu/images/countries/ie.svg +7 -0
  234. package/hmu/images/countries/il.svg +14 -0
  235. package/hmu/images/countries/im.svg +36 -0
  236. package/hmu/images/countries/in.svg +25 -0
  237. package/hmu/images/countries/io.svg +148 -0
  238. package/hmu/images/countries/iq.svg +10 -0
  239. package/hmu/images/countries/ir.svg +219 -0
  240. package/hmu/images/countries/is.svg +12 -0
  241. package/hmu/images/countries/it.svg +7 -0
  242. package/hmu/images/countries/je.svg +32 -0
  243. package/hmu/images/countries/jm.svg +8 -0
  244. package/hmu/images/countries/jo.svg +16 -0
  245. package/hmu/images/countries/jp.svg +11 -0
  246. package/hmu/images/countries/ke.svg +23 -0
  247. package/hmu/images/countries/kg.svg +15 -0
  248. package/hmu/images/countries/kh.svg +69 -0
  249. package/hmu/images/countries/ki.svg +36 -0
  250. package/hmu/images/countries/km.svg +16 -0
  251. package/hmu/images/countries/kn.svg +14 -0
  252. package/hmu/images/countries/kp.svg +15 -0
  253. package/hmu/images/countries/kr.svg +24 -0
  254. package/hmu/images/countries/kw.svg +13 -0
  255. package/hmu/images/countries/ky.svg +63 -0
  256. package/hmu/images/countries/kz.svg +23 -0
  257. package/hmu/images/countries/la.svg +12 -0
  258. package/hmu/images/countries/lb.svg +15 -0
  259. package/hmu/images/countries/lc.svg +8 -0
  260. package/hmu/images/countries/li.svg +43 -0
  261. package/hmu/images/countries/lk.svg +22 -0
  262. package/hmu/images/countries/lr.svg +14 -0
  263. package/hmu/images/countries/ls.svg +8 -0
  264. package/hmu/images/countries/lt.svg +7 -0
  265. package/hmu/images/countries/lu.svg +5 -0
  266. package/hmu/images/countries/lv.svg +6 -0
  267. package/hmu/images/countries/ly.svg +13 -0
  268. package/hmu/images/countries/ma.svg +4 -0
  269. package/hmu/images/countries/mc.svg +6 -0
  270. package/hmu/images/countries/md.svg +72 -0
  271. package/hmu/images/countries/me.svg +118 -0
  272. package/hmu/images/countries/mf.svg +7 -0
  273. package/hmu/images/countries/mg.svg +7 -0
  274. package/hmu/images/countries/mh.svg +7 -0
  275. package/hmu/images/countries/mk.svg +5 -0
  276. package/hmu/images/countries/ml.svg +7 -0
  277. package/hmu/images/countries/mm.svg +16 -0
  278. package/hmu/images/countries/mn.svg +13 -0
  279. package/hmu/images/countries/mo.svg +9 -0
  280. package/hmu/images/countries/mp.svg +86 -0
  281. package/hmu/images/countries/mq.svg +7 -0
  282. package/hmu/images/countries/mr.svg +6 -0
  283. package/hmu/images/countries/ms.svg +39 -0
  284. package/hmu/images/countries/mt.svg +49 -0
  285. package/hmu/images/countries/mu.svg +8 -0
  286. package/hmu/images/countries/mv.svg +6 -0
  287. package/hmu/images/countries/mw.svg +10 -0
  288. package/hmu/images/countries/mx.svg +385 -0
  289. package/hmu/images/countries/my.svg +15 -0
  290. package/hmu/images/countries/mz.svg +21 -0
  291. package/hmu/images/countries/na.svg +16 -0
  292. package/hmu/images/countries/nc.svg +7 -0
  293. package/hmu/images/countries/ne.svg +6 -0
  294. package/hmu/images/countries/nf.svg +9 -0
  295. package/hmu/images/countries/ng.svg +6 -0
  296. package/hmu/images/countries/ni.svg +131 -0
  297. package/hmu/images/countries/nl.svg +7 -0
  298. package/hmu/images/countries/no.svg +7 -0
  299. package/hmu/images/countries/np.svg +14 -0
  300. package/hmu/images/countries/nr.svg +12 -0
  301. package/hmu/images/countries/nu.svg +26 -0
  302. package/hmu/images/countries/nz.svg +41 -0
  303. package/hmu/images/countries/om.svg +116 -0
  304. package/hmu/images/countries/pa.svg +14 -0
  305. package/hmu/images/countries/pe.svg +279 -0
  306. package/hmu/images/countries/pf.svg +19 -0
  307. package/hmu/images/countries/pg.svg +9 -0
  308. package/hmu/images/countries/ph.svg +28 -0
  309. package/hmu/images/countries/pk.svg +15 -0
  310. package/hmu/images/countries/pl.svg +6 -0
  311. package/hmu/images/countries/pm.svg +7 -0
  312. package/hmu/images/countries/pn.svg +62 -0
  313. package/hmu/images/countries/pr.svg +13 -0
  314. package/hmu/images/countries/ps.svg +15 -0
  315. package/hmu/images/countries/pt.svg +57 -0
  316. package/hmu/images/countries/pw.svg +11 -0
  317. package/hmu/images/countries/py.svg +157 -0
  318. package/hmu/images/countries/qa.svg +4 -0
  319. package/hmu/images/countries/re.svg +7 -0
  320. package/hmu/images/countries/ro.svg +7 -0
  321. package/hmu/images/countries/rs.svg +292 -0
  322. package/hmu/images/countries/ru.svg +7 -0
  323. package/hmu/images/countries/rw.svg +13 -0
  324. package/hmu/images/countries/sa.svg +26 -0
  325. package/hmu/images/countries/sb.svg +13 -0
  326. package/hmu/images/countries/sc.svg +14 -0
  327. package/hmu/images/countries/sd.svg +13 -0
  328. package/hmu/images/countries/se.svg +16 -0
  329. package/hmu/images/countries/sg.svg +13 -0
  330. package/hmu/images/countries/sh.svg +74 -0
  331. package/hmu/images/countries/si.svg +18 -0
  332. package/hmu/images/countries/sj.svg +7 -0
  333. package/hmu/images/countries/sk.svg +9 -0
  334. package/hmu/images/countries/sl.svg +7 -0
  335. package/hmu/images/countries/sm.svg +91 -0
  336. package/hmu/images/countries/sn.svg +8 -0
  337. package/hmu/images/countries/so.svg +11 -0
  338. package/hmu/images/countries/sr.svg +6 -0
  339. package/hmu/images/countries/ss.svg +8 -0
  340. package/hmu/images/countries/st.svg +16 -0
  341. package/hmu/images/countries/sv.svg +618 -0
  342. package/hmu/images/countries/sx.svg +56 -0
  343. package/hmu/images/countries/sy.svg +6 -0
  344. package/hmu/images/countries/sz.svg +45 -0
  345. package/hmu/images/countries/tc.svg +67 -0
  346. package/hmu/images/countries/td.svg +7 -0
  347. package/hmu/images/countries/tf.svg +15 -0
  348. package/hmu/images/countries/tg.svg +14 -0
  349. package/hmu/images/countries/th.svg +7 -0
  350. package/hmu/images/countries/tj.svg +22 -0
  351. package/hmu/images/countries/tk.svg +5 -0
  352. package/hmu/images/countries/tl.svg +13 -0
  353. package/hmu/images/countries/tm.svg +213 -0
  354. package/hmu/images/countries/tn.svg +13 -0
  355. package/hmu/images/countries/to.svg +10 -0
  356. package/hmu/images/countries/tr.svg +8 -0
  357. package/hmu/images/countries/tt.svg +5 -0
  358. package/hmu/images/countries/tv.svg +27 -0
  359. package/hmu/images/countries/tw.svg +14 -0
  360. package/hmu/images/countries/tz.svg +13 -0
  361. package/hmu/images/countries/ua.svg +6 -0
  362. package/hmu/images/countries/ug.svg +30 -0
  363. package/hmu/images/countries/um.svg +23 -0
  364. package/hmu/images/countries/un.svg +16 -0
  365. package/hmu/images/countries/us.svg +12 -0
  366. package/hmu/images/countries/uy.svg +28 -0
  367. package/hmu/images/countries/uz.svg +30 -0
  368. package/hmu/images/countries/va.svg +483 -0
  369. package/hmu/images/countries/vc.svg +8 -0
  370. package/hmu/images/countries/ve.svg +26 -0
  371. package/hmu/images/countries/vg.svg +133 -0
  372. package/hmu/images/countries/vi.svg +31 -0
  373. package/hmu/images/countries/vn.svg +11 -0
  374. package/hmu/images/countries/vu.svg +18 -0
  375. package/hmu/images/countries/wf.svg +7 -0
  376. package/hmu/images/countries/ws.svg +7 -0
  377. package/hmu/images/countries/ye.svg +7 -0
  378. package/hmu/images/countries/yt.svg +7 -0
  379. package/hmu/images/countries/za.svg +17 -0
  380. package/hmu/images/countries/zm.svg +27 -0
  381. package/hmu/images/countries/zw.svg +21 -0
  382. package/hmu/images/hipay-white-logo.svg +42 -0
  383. package/hmu/images/logo_visa_75wx45h.gif +0 -0
  384. package/index.es.js +1 -1
  385. package/index.js +1 -1
  386. package/package.json +4 -3
  387. package/styles/createHiMuiTheme.js +11 -0
  388. package/umd/hipay-material-ui.development.js +11339 -11003
  389. package/umd/hipay-material-ui.production.min.js +5 -5
  390. package/utils/HiIconBuilder.js +17 -7
  391. package/utils/hiHelpers.js +2 -2
@@ -9,11 +9,9 @@ import Grow from 'material-ui/transitions/Grow';
9
9
  import { findDOMNode } from 'react-dom';
10
10
  import Paper from 'material-ui/Paper';
11
11
  import ClickAwayListener from 'material-ui/utils/ClickAwayListener';
12
- import Collapse from 'material-ui/transitions/Collapse';
13
12
  import { Manager, Target, Popper } from 'react-popper';
14
13
  import { CheckboxBlankOutline, CheckboxMarked } from 'mdi-material-ui';
15
14
  import HiSelectableList from '../HiSelectableList';
16
- import HiSelectableListItem from '../HiSelectableList/HiSelectableListItem';
17
15
  import { HiSearchField } from '../HiForm';
18
16
  import SelectInput from './SelectInput';
19
17
  import HiChip from '../HiChip/HiChip';
@@ -30,7 +28,6 @@ export const styles = theme => ({
30
28
  },
31
29
  popper: {
32
30
  width: '100%',
33
- transform: 'none !important',
34
31
  zIndex: 9
35
32
  },
36
33
  paper: {
@@ -72,231 +69,7 @@ class HiSelect extends React.PureComponent {
72
69
  constructor(props) {
73
70
  super(props);
74
71
 
75
- this.handleClick = () => {
76
- document.body.style.overflow = 'hidden';
77
- this.setState({ open: true });
78
- const options = this.props.options.slice();
79
- this.handleSuggestions(options);
80
-
81
- if (this.props.onClick) {
82
- this.props.onClick();
83
- }
84
-
85
- // Gestion du focus
86
- if (this.searchField) {
87
- // si searchable, focus sur le champs de recherche
88
- const searchField = this.searchField;
89
- setTimeout(() => {
90
- searchField.focus();
91
- }, 1);
92
- } else if (this.overlay) {
93
- // sinon focus sur le dernier élément selectionné
94
- this.focusOnSelectedItem();
95
- }
96
- };
97
-
98
- this.focusOnSelectedItem = () => {
99
- // On récupère la div parent "overlay"
100
- const overlay = findDOMNode(this.overlay);
101
- const multiple = this.props.multiple;
102
- const value = this.props.value;
103
- const selectedIdList = Array.isArray(value) ? value : [value];
104
- setTimeout(() => {
105
- let focused = false;
106
- // Si un ou plusieurs items sont selectionnés, on focus sur le dernier
107
- if (selectedIdList.length > 0) {
108
- const itemSelected = overlay.querySelector(`[data-id="${selectedIdList[selectedIdList.length - 1]}"]`);
109
- if (itemSelected && itemSelected.parentElement.tagName === 'LI') {
110
- itemSelected.parentElement.focus();
111
- focused = true;
112
- }
113
- }
114
- // Si pas d'item selectionné, ou pas visible (en cas de recherche), focus sur le premier
115
- if (selectedIdList.length === 0 || !focused) {
116
- // On recupère tous les items
117
- const items = overlay.getElementsByTagName('li');
118
- let itemToFocus = items[0];
119
- // Si select multiple, et qu'au moins un selectionné, focus sur le 2e item
120
- if (multiple && selectedIdList.length > 0) {
121
- itemToFocus = items[1];
122
- }
123
- itemToFocus.focus();
124
- }
125
- }, 1);
126
- };
127
-
128
- this.handleKeyDown = event => {
129
- let nextItem;
130
- if (event.key === 'ArrowDown') {
131
- nextItem = getNextItemSelectable(document.activeElement, 'down');
132
- } else if (event.key === 'ArrowUp') {
133
- nextItem = getNextItemSelectable(document.activeElement, 'up');
134
- } else if (event.key === 'Tab') {
135
- document.body.style.overflow = 'auto';
136
- this.setState({ open: false });
137
- }
138
- if (nextItem) {
139
- nextItem.focus();
140
- }
141
- };
142
-
143
- this.handleKeyDownSearch = event => {
144
- if (this.overlay && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
145
- this.focusOnSelectedItem();
146
- }
147
- };
148
-
149
- this.handleFocus = () => {
150
- this.setState({ focused: true });
151
- };
152
-
153
- this.handleBlur = () => {
154
- this.setState({ focused: false });
155
- };
156
-
157
- this.handleClose = () => {
158
- document.body.style.overflow = 'auto';
159
- this.setState({
160
- open: false
161
- });
162
-
163
- if (this.props.onClose) {
164
- this.props.onClose();
165
- }
166
- };
167
-
168
- this.handleSelect = (event, item) => {
169
- const { multiple, value, name, onChange, options, hierarchic } = this.props;
170
- const { hierarchySelected, hierarchy, nbOptions } = this.state;
171
- const hiSelected = _extends({}, hierarchySelected);
172
-
173
- if (multiple) {
174
- let valueList = value;
175
- if (item.id === '_all') {
176
- if (valueList.length === nbOptions) {
177
- valueList = [];
178
- if (hierarchic) {
179
- // if hierarchic select => empty associative array of selected children
180
- _Object$keys(hiSelected).forEach(key => {
181
- hiSelected[key] = [];
182
- });
183
- }
184
- } else {
185
- options.forEach(option => {
186
- if (option.hasChildren !== true && !valueList.includes(option.id) && option.id !== '_all') {
187
- valueList.push(option.id);
188
- } else if (option.hasChildren === true) {
189
- // if hierarchic select => fill associative array of selected children
190
- hiSelected[option.id] = hierarchy[option.id];
191
- }
192
- });
193
- }
194
- } else if (valueList.includes(item.id) || item.hasChildren === true && hierarchySelected[item.id].length === hierarchy[item.id].length) {
195
- // item déjà sélectionné => on le déselectionne
196
- if (item.hasChildren !== true) {
197
- valueList = valueList.filter(val => {
198
- return val !== item.id;
199
- });
200
- }
201
-
202
- if (item.hasChildren === true) {
203
- // remove all children
204
- valueList = valueList.filter(val => {
205
- return !this.state.hierarchy[item.id].includes(val);
206
- });
207
- hiSelected[item.id] = [];
208
- } else if (item.hasOwnProperty('parentId')) {
209
- // Si item est un enfant on l'enlève du tableau associatif des
210
- // elmts sélectionnés
211
- hiSelected[item.parentId].splice(hiSelected[item.parentId].indexOf(item.id), 1);
212
- }
213
- } else {
214
- // item non sélectionné => on le sélectionne
215
- if (item.hasChildren !== true) valueList.push(item.id);
216
-
217
- if (item.hasChildren === true) {
218
- // Si item parent => on ajoute tous les enfants
219
- // Ou on les supprime s'ils sont déjà tous sélectionnés (dans une liste filtrée)
220
- const idsInSuggestions = [];
221
- this.state.suggestions.forEach(suggestion => {
222
- if (this.state.hierarchy[item.id].includes(suggestion.id)) {
223
- idsInSuggestions.push(suggestion.id);
224
- }
225
- });
226
- // if(hierarchySelected[item.id].length > 0) {}
227
- let allChildrenSuggestionsSelected = true;
228
- idsInSuggestions.forEach(id => {
229
- if (!hierarchySelected[item.id].includes(id)) {
230
- allChildrenSuggestionsSelected = false;
231
- }
232
- });
233
-
234
- if (allChildrenSuggestionsSelected === true) {
235
- // On supprime les enfants car déjà tous sélectionnés
236
- idsInSuggestions.forEach(id => {
237
- valueList.splice(valueList.indexOf(id), 1);
238
- hiSelected[item.id].splice(hiSelected[item.id].indexOf(id), 1);
239
- });
240
- } else {
241
- // On ajoute tous les enfants filtrés au éléments sélectionnés
242
- valueList = arrayUnique(valueList.concat(idsInSuggestions));
243
- hiSelected[item.id] = arrayUnique(hiSelected[item.id].concat(idsInSuggestions));
244
- }
245
-
246
- this.setState({ hierarchySelected: hiSelected });
247
- } else if (item.hasOwnProperty('parentId')) {
248
- // Si item est un enfant on l'ajoute du tableau associatif des
249
- // elmts sélectionnés
250
- hiSelected[item.parentId].push(item.id);
251
- }
252
- }
253
- this.setState({ hierarchySelected: hiSelected });
254
- onChange(event, valueList);
255
- } else {
256
- onChange(event, item.id);
257
- this.handleClose();
258
- }
259
- };
260
-
261
- this.handleSuggestions = suggestions => {
262
- const { options, hasAll, iconAll, translations, multiple } = this.props;
263
-
264
- if (suggestions.length === 0) {
265
- // Handle No Result
266
- // FIX to remove all item
267
- suggestions = [];
268
- suggestions.push({
269
- id: '_no_result',
270
- type: 'text',
271
- disabled: true,
272
- centered: true,
273
- checkbox: false,
274
- label: translations.no_result_match
275
- });
276
- } else if (hasAll && suggestions.length > 0 && suggestions.length === options.length && multiple === true) {
277
- // Handle 'All'
278
- if (suggestions.filter(suggestion => suggestion.id === '_all').length === 0) {
279
- const allItem = {
280
- id: '_all',
281
- icon: iconAll,
282
- label: translations.all
283
- };
284
- if (iconAll !== false) {
285
- allItem.type = 'icon';
286
- }
287
- suggestions.unshift(allItem);
288
- }
289
- }
290
-
291
- this.setState({
292
- suggestions
293
- });
294
- };
295
-
296
- this.handleRequestDelete = evt => {
297
- evt.stopPropagation();
298
- this.props.onChange(this.props.name, []);
299
- };
72
+ _initialiseProps.call(this);
300
73
 
301
74
  this.state = {
302
75
  open: false,
@@ -308,28 +81,30 @@ class HiSelect extends React.PureComponent {
308
81
  dynamic: false
309
82
  };
310
83
 
311
- if (props.hierarchic === true && props.options.length > 1) {
312
- // Construct two associative arrays
313
- // hierarchy[parentId] => children
314
- // hierarchySelected[parentId] => selected children
315
- const hierarchy = {};
316
- const hierarchySelected = {};
317
- let value = props.value || [];
318
- if (!Array.isArray(value)) value = [props.value];
319
- props.options.forEach(option => {
320
- if (option.hasChildren === true && !hierarchy.hasOwnProperty(option.id)) {
321
- hierarchy[option.id] = [];
322
- hierarchySelected[option.id] = [];
323
- } else if (option.hasOwnProperty('parentId')) {
324
- hierarchy[option.parentId].push(option.id);
325
- if (value.includes(option.id)) {
326
- hierarchySelected[option.parentId].push(option.id);
327
- }
84
+ // Check if value is in options
85
+ let valueInOptions = false;
86
+ const val = props.value;
87
+ // No options provided.
88
+ if (!props.options.length || !val || !val.length) {
89
+ valueInOptions = true;
90
+ } else {
91
+ // Check if an option match value prop.
92
+ props.options.forEach(item => {
93
+ if (!valueInOptions && val.indexOf(item.id) !== -1) {
94
+ valueInOptions = true;
328
95
  }
329
96
  });
97
+ }
98
+
99
+ if (!valueInOptions) {
100
+ throw new Error('prop value provided does not match any option.');
101
+ }
330
102
 
331
- this.state.hierarchy = hierarchy;
332
- this.state.hierarchySelected = hierarchySelected;
103
+ if (props.hierarchic === true && props.options.length > 1) {
104
+ const hierarchyTrees = this.buildHierarchyTrees(props);
105
+
106
+ this.state.hierarchy = hierarchyTrees.hierarchy;
107
+ this.state.hierarchySelected = hierarchyTrees.hierarchySelected;
333
108
  }
334
109
 
335
110
  if (props.options.length > 0) {
@@ -348,6 +123,7 @@ class HiSelect extends React.PureComponent {
348
123
  this.handleSelect = this.handleSelect.bind(this);
349
124
  this.handleClick = this.handleClick.bind(this);
350
125
  this.handleClose = this.handleClose.bind(this);
126
+ this.handleClickAway = this.handleClickAway.bind(this);
351
127
  this.handleRequestDelete = this.handleRequestDelete.bind(this);
352
128
  this.handleSuggestions = this.handleSuggestions.bind(this);
353
129
  this.handleFocus = this.handleFocus.bind(this);
@@ -365,6 +141,33 @@ class HiSelect extends React.PureComponent {
365
141
  });
366
142
  this.setState({ nbOptions: optionsLength });
367
143
  }
144
+
145
+ if (nextProps.hierarchic === true && nextProps.options.length > 1) {
146
+ const hierarchyTrees = this.buildHierarchyTrees(nextProps);
147
+ this.setState({ hierarchy: hierarchyTrees.hierarchy, hierarchySelected: hierarchyTrees.hierarchySelected });
148
+ }
149
+ }
150
+
151
+ buildHierarchyTrees(props) {
152
+ // Construct two associative arrays
153
+ // hierarchy[parentId] => children
154
+ // hierarchySelected[parentId] => selected children
155
+ const hierarchy = {};
156
+ const hierarchySelected = {};
157
+ let value = props.value || [];
158
+ if (!Array.isArray(value)) value = [props.value];
159
+ props.options.forEach(option => {
160
+ if (option.hasChildren === true && !hierarchy.hasOwnProperty(option.id)) {
161
+ hierarchy[option.id] = [];
162
+ hierarchySelected[option.id] = [];
163
+ } else if (option.hasOwnProperty('parentId')) {
164
+ hierarchy[option.parentId].push(option.id);
165
+ if (value.includes(option.id)) {
166
+ hierarchySelected[option.parentId].push(option.id);
167
+ }
168
+ }
169
+ });
170
+ return { hierarchy, hierarchySelected };
368
171
  }
369
172
 
370
173
  // Key down on list items
@@ -398,14 +201,12 @@ class HiSelect extends React.PureComponent {
398
201
  classes,
399
202
  disabled,
400
203
  error,
401
- multiple,
402
204
  options,
403
205
  checkbox,
404
206
  searchable,
405
207
  displayAsChip,
406
208
  type,
407
209
  value,
408
- hasSelectedCount = multiple,
409
210
  translations,
410
211
  parentItemSelectable,
411
212
  icon,
@@ -413,19 +214,21 @@ class HiSelect extends React.PureComponent {
413
214
  hoverIcon,
414
215
  checkedIcon,
415
216
  hierarchic,
416
- id
217
+ id,
218
+ placeholder,
219
+ staticPosition
417
220
  } = this.props;
418
221
 
419
222
  const { open, suggestions, focused } = this.state;
420
223
 
421
224
  let display = '';
422
- const selectedIdList = Array.isArray(value) ? value : [value];
225
+ const selectedIdList = Array.isArray(value) ? value : value ? [value] : [];
423
226
 
424
227
  if (this.state.dynamic && selectedIdList.length === 1) {
425
228
  display = translations.one_item_selected.replace('%s', selectedIdList.length);
426
229
  } else if (this.state.nbOptions !== selectedIdList.length && selectedIdList.length > 1) {
427
230
  display = translations.n_items_selected.replace('%s', selectedIdList.length);
428
- } else if (this.state.nbOptions === selectedIdList.length) {
231
+ } else if (this.state.nbOptions === selectedIdList.length && this.state.nbOptions >= 1) {
429
232
  display = translations.all;
430
233
  } else if (selectedIdList.length === 1) {
431
234
  if (type !== 'icon') {
@@ -442,7 +245,7 @@ class HiSelect extends React.PureComponent {
442
245
  }
443
246
 
444
247
  if (displayAsChip) {
445
- const chipFilter = React.createElement(HiChip, { label: display, onDelete: this.handleRequestDelete });
248
+ const chipFilter = React.createElement(HiChip, { label: placeholder || display, onDelete: this.handleRequestDelete });
446
249
  if (display) {
447
250
  display = chipFilter;
448
251
  }
@@ -462,6 +265,50 @@ class HiSelect extends React.PureComponent {
462
265
  popperStyle = { width: this.props.containerWidth };
463
266
  }
464
267
 
268
+ const content = React.createElement(
269
+ ClickAwayListener,
270
+ { onClickAway: this.handleClickAway },
271
+ React.createElement(
272
+ Grow,
273
+ { 'in': open, id: 'menu-list', style: { transformOrigin: '0 0 0' } },
274
+ React.createElement(
275
+ Paper,
276
+ { className: classes.paper },
277
+ !!searchable && React.createElement(HiSearchField, {
278
+ itemList: options,
279
+ callbackFilteredList: this.handleSuggestions,
280
+ filterPropertyList: ['label'],
281
+ placeholder: translations.search,
282
+ autoFocus: true,
283
+ onSearch: this.props.onSearch,
284
+ inputRef: el => {
285
+ this.searchField = el;
286
+ },
287
+ onKeyDown: this.handleKeyDownSearch
288
+ }),
289
+ React.createElement(HiSelectableList, {
290
+ type: type,
291
+ parentItemSelectable: parentItemSelectable,
292
+ itemList: suggestions,
293
+ onSelect: this.handleSelect,
294
+ selectedIdList: selectedIdList,
295
+ checkbox: checkbox,
296
+ hierarchy: this.state.hierarchy,
297
+ hierarchic: hierarchic,
298
+ hierarchySelected: this.state.hierarchySelected,
299
+ translations: translations,
300
+ icon: icon,
301
+ parentIcon: parentIcon,
302
+ hoverIcon: hoverIcon,
303
+ checkedIcon: checkedIcon,
304
+ allSelected: allSelected,
305
+ value: value,
306
+ onKeyDown: this.handleKeyDown
307
+ })
308
+ )
309
+ )
310
+ );
311
+
465
312
  return React.createElement(
466
313
  'div',
467
314
  {
@@ -478,7 +325,7 @@ class HiSelect extends React.PureComponent {
478
325
  null,
479
326
  React.createElement(SelectInput, {
480
327
  id: id,
481
- value: display,
328
+ value: placeholder || display,
482
329
  open: open,
483
330
  focused: focused,
484
331
  type: type,
@@ -489,10 +336,17 @@ class HiSelect extends React.PureComponent {
489
336
  onFocus: this.handleFocus,
490
337
  onBlur: this.handleBlur,
491
338
  onMouseEnter: this.props.onMouseEnter,
492
- onMouseLeave: this.props.onMouseLeave
339
+ onMouseLeave: this.props.onMouseLeave,
340
+ refElement: el => {
341
+ this.selectInputElement = el;
342
+ }
493
343
  })
494
344
  ),
495
- open && React.createElement(
345
+ open && (staticPosition ? React.createElement(
346
+ 'div',
347
+ { style: popperStyle },
348
+ content
349
+ ) : React.createElement(
496
350
  Popper,
497
351
  {
498
352
  placement: 'bottom-start',
@@ -500,69 +354,8 @@ class HiSelect extends React.PureComponent {
500
354
  className: popperClass,
501
355
  style: popperStyle
502
356
  },
503
- React.createElement(
504
- ClickAwayListener,
505
- { onClickAway: this.handleClose },
506
- React.createElement(
507
- Grow,
508
- { 'in': open, id: 'menu-list', style: { transformOrigin: '0 0 0' } },
509
- React.createElement(
510
- Paper,
511
- { className: classes.paper },
512
- !!searchable && React.createElement(HiSearchField, {
513
- itemList: options,
514
- callbackFilteredList: this.handleSuggestions,
515
- filterPropertyList: ['label'],
516
- placeholder: translations.search,
517
- autoFocus: true,
518
- onSearch: this.props.onSearch,
519
- inputRef: el => {
520
- this.searchField = el;
521
- },
522
- onKeyDown: this.handleKeyDownSearch
523
- }),
524
- !!hasSelectedCount && React.createElement(
525
- Collapse,
526
- {
527
- 'in': selectedIdList.length > 0,
528
- timeout: 'auto',
529
- unmountOnExit: true
530
- },
531
- React.createElement(HiSelectableListItem, {
532
- key: '_selected_count',
533
- item: {
534
- id: '_selected_count',
535
- type: 'text',
536
- disabled: true,
537
- checkbox: false,
538
- label: selectedIdList.length < 2 ? translations.one_item_selected.replace('%s', selectedIdList.length) : translations.n_items_selected.replace('%s', selectedIdList.length),
539
- centered: true
540
- }
541
- })
542
- ),
543
- React.createElement(HiSelectableList, {
544
- type: type,
545
- parentItemSelectable: parentItemSelectable,
546
- itemList: suggestions,
547
- onSelect: this.handleSelect,
548
- selectedIdList: selectedIdList,
549
- checkbox: checkbox,
550
- hierarchy: this.state.hierarchy,
551
- hierarchic: hierarchic,
552
- hierarchySelected: this.state.hierarchySelected,
553
- translations: translations,
554
- icon: icon,
555
- parentIcon: parentIcon,
556
- hoverIcon: hoverIcon,
557
- checkedIcon: checkedIcon,
558
- allSelected: allSelected,
559
- value: value,
560
- onKeyDown: this.handleKeyDown
561
- })
562
- )
563
- )
564
- )
565
- )
357
+ content
358
+ ))
566
359
  )
567
360
  );
568
361
  }
@@ -592,8 +385,260 @@ HiSelect.defaultProps = {
592
385
  one_item_selected: '%s item selected',
593
386
  n_children: '%s items',
594
387
  one_child: '%s item'
595
- }
388
+ },
389
+ staticPosition: false
596
390
  };
391
+
392
+ var _initialiseProps = function () {
393
+ this.handleClick = event => {
394
+ if (this.state.open) {
395
+ this.handleClose();
396
+ } else {
397
+ if (!this.props.staticPosition) {
398
+ document.body.style.overflow = 'hidden';
399
+ }
400
+ this.setState({ open: true });
401
+ const options = this.props.options.slice();
402
+ this.handleSuggestions(options);
403
+
404
+ if (this.props.onClick) {
405
+ this.props.onClick();
406
+ }
407
+
408
+ // Gestion du focus
409
+ if (this.searchField) {
410
+ // si searchable, focus sur le champs de recherche
411
+ const searchField = this.searchField;
412
+ setTimeout(() => {
413
+ searchField.focus();
414
+ }, 1);
415
+ } else if (this.overlay) {
416
+ // sinon focus sur le dernier élément selectionné
417
+ this.focusOnSelectedItem();
418
+ }
419
+ }
420
+ };
421
+
422
+ this.focusOnSelectedItem = () => {
423
+ // On récupère la div parent "overlay"
424
+ const overlay = findDOMNode(this.overlay);
425
+ const multiple = this.props.multiple;
426
+ const value = this.props.value;
427
+ const selectedIdList = Array.isArray(value) ? value : [value];
428
+ setTimeout(() => {
429
+ let focused = false;
430
+ // Si un ou plusieurs items sont selectionnés, on focus sur le dernier
431
+ if (selectedIdList.length > 0) {
432
+ const itemSelected = overlay.querySelector(`[data-id="${selectedIdList[selectedIdList.length - 1]}"]`);
433
+ if (itemSelected && itemSelected.parentElement.tagName === 'LI') {
434
+ itemSelected.parentElement.focus();
435
+ focused = true;
436
+ }
437
+ }
438
+ // Si pas d'item selectionné, ou pas visible (en cas de recherche), focus sur le premier
439
+ if (selectedIdList.length === 0 || !focused) {
440
+ // On recupère tous les items
441
+ const items = overlay.getElementsByTagName('li');
442
+ let itemToFocus = items[0];
443
+ // Si select multiple, et qu'au moins un selectionné, focus sur le 2e item
444
+ if (multiple && selectedIdList.length > 0) {
445
+ itemToFocus = items[1];
446
+ }
447
+ if (itemToFocus) {
448
+ itemToFocus.focus();
449
+ }
450
+ }
451
+ }, 1);
452
+ };
453
+
454
+ this.handleKeyDown = event => {
455
+ let nextItem;
456
+ if (event.key === 'ArrowDown') {
457
+ nextItem = getNextItemSelectable(document.activeElement, 'down');
458
+ } else if (event.key === 'ArrowUp') {
459
+ nextItem = getNextItemSelectable(document.activeElement, 'up');
460
+ } else if (event.key === 'Tab') {
461
+ if (!this.props.staticPosition) {
462
+ document.body.style.overflow = 'auto';
463
+ }
464
+ this.setState({ open: false });
465
+ }
466
+ if (nextItem) {
467
+ nextItem.focus();
468
+ }
469
+ };
470
+
471
+ this.handleKeyDownSearch = event => {
472
+ if (this.overlay && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
473
+ this.focusOnSelectedItem();
474
+ }
475
+ };
476
+
477
+ this.handleFocus = () => {
478
+ this.setState({ focused: true });
479
+ };
480
+
481
+ this.handleBlur = () => {
482
+ this.setState({ focused: false });
483
+ };
484
+
485
+ this.handleClose = () => {
486
+ if (!this.props.staticPosition) {
487
+ document.body.style.overflow = 'auto';
488
+ }
489
+ this.setState({
490
+ open: false
491
+ });
492
+
493
+ if (this.props.onClose) {
494
+ this.props.onClose();
495
+ }
496
+ if (this.selectInputElement) {
497
+ this.selectInputElement.focus();
498
+ }
499
+ };
500
+
501
+ this.handleClickAway = event => {
502
+ // Au clic sur le bouton, on laisse le handleClick fermer le select
503
+ if (!this.selectInputElement.contains(event.target)) {
504
+ this.handleClose(event);
505
+ }
506
+ };
507
+
508
+ this.handleSelect = (event, item) => {
509
+ const { multiple, value, name, onChange, options, hierarchic } = this.props;
510
+ const { hierarchySelected, hierarchy, nbOptions } = this.state;
511
+ const hiSelected = _extends({}, hierarchySelected);
512
+
513
+ if (multiple) {
514
+ let valueList = value;
515
+ if (item.id === '_all') {
516
+ if (valueList.length === nbOptions) {
517
+ valueList = [];
518
+ if (hierarchic) {
519
+ // if hierarchic select => empty associative array of selected children
520
+ _Object$keys(hiSelected).forEach(key => {
521
+ hiSelected[key] = [];
522
+ });
523
+ }
524
+ } else {
525
+ options.forEach(option => {
526
+ if (option.hasChildren !== true && !valueList.includes(option.id) && option.id !== '_all') {
527
+ valueList.push(option.id);
528
+ } else if (option.hasChildren === true) {
529
+ // if hierarchic select => fill associative array of selected children
530
+ hiSelected[option.id] = hierarchy[option.id];
531
+ }
532
+ });
533
+ }
534
+ } else if (valueList.includes(item.id) || item.hasChildren === true && hierarchySelected[item.id].length === hierarchy[item.id].length) {
535
+ // item déjà sélectionné => on le déselectionne
536
+ if (item.hasChildren !== true) {
537
+ valueList = valueList.filter(val => {
538
+ return val !== item.id;
539
+ });
540
+ }
541
+
542
+ if (item.hasChildren === true) {
543
+ // remove all children
544
+ valueList = valueList.filter(val => {
545
+ return !this.state.hierarchy[item.id].includes(val);
546
+ });
547
+ hiSelected[item.id] = [];
548
+ } else if (item.hasOwnProperty('parentId')) {
549
+ // Si item est un enfant on l'enlève du tableau associatif des
550
+ // elmts sélectionnés
551
+ hiSelected[item.parentId].splice(hiSelected[item.parentId].indexOf(item.id), 1);
552
+ }
553
+ } else {
554
+ // item non sélectionné => on le sélectionne
555
+ if (item.hasChildren !== true) valueList.push(item.id);
556
+
557
+ if (item.hasChildren === true) {
558
+ // Si item parent => on ajoute tous les enfants
559
+ // Ou on les supprime s'ils sont déjà tous sélectionnés (dans une liste filtrée)
560
+ const idsInSuggestions = [];
561
+ this.state.suggestions.forEach(suggestion => {
562
+ if (this.state.hierarchy[item.id].includes(suggestion.id)) {
563
+ idsInSuggestions.push(suggestion.id);
564
+ }
565
+ });
566
+ // if(hierarchySelected[item.id].length > 0) {}
567
+ let allChildrenSuggestionsSelected = true;
568
+ idsInSuggestions.forEach(id => {
569
+ if (!hierarchySelected[item.id].includes(id)) {
570
+ allChildrenSuggestionsSelected = false;
571
+ }
572
+ });
573
+
574
+ if (allChildrenSuggestionsSelected === true) {
575
+ // On supprime les enfants car déjà tous sélectionnés
576
+ idsInSuggestions.forEach(id => {
577
+ valueList.splice(valueList.indexOf(id), 1);
578
+ hiSelected[item.id].splice(hiSelected[item.id].indexOf(id), 1);
579
+ });
580
+ } else {
581
+ // On ajoute tous les enfants filtrés au éléments sélectionnés
582
+ valueList = arrayUnique(valueList.concat(idsInSuggestions));
583
+ hiSelected[item.id] = arrayUnique(hiSelected[item.id].concat(idsInSuggestions));
584
+ }
585
+
586
+ this.setState({ hierarchySelected: hiSelected });
587
+ } else if (item.hasOwnProperty('parentId')) {
588
+ // Si item est un enfant on l'ajoute du tableau associatif des
589
+ // elmts sélectionnés
590
+ hiSelected[item.parentId].push(item.id);
591
+ }
592
+ }
593
+ this.setState({ hierarchySelected: hiSelected });
594
+ onChange(event, valueList);
595
+ } else {
596
+ onChange(event, item.id);
597
+ this.handleClose();
598
+ }
599
+ };
600
+
601
+ this.handleSuggestions = suggestions => {
602
+ const { options, hasAll, iconAll, translations, multiple } = this.props;
603
+
604
+ if (suggestions.length === 0) {
605
+ // Handle No Result
606
+ // FIX to remove all item
607
+ suggestions = [];
608
+ suggestions.push({
609
+ id: '_no_result',
610
+ type: 'text',
611
+ disabled: true,
612
+ centered: true,
613
+ checkbox: false,
614
+ label: translations.no_result_match
615
+ });
616
+ } else if (hasAll && suggestions.length > 0 && suggestions.length === options.length && multiple === true) {
617
+ // Handle 'All'
618
+ if (suggestions.filter(suggestion => suggestion.id === '_all').length === 0) {
619
+ const allItem = {
620
+ id: '_all',
621
+ icon: iconAll,
622
+ label: translations.all
623
+ };
624
+ if (iconAll !== false) {
625
+ allItem.type = 'icon';
626
+ }
627
+ suggestions.unshift(allItem);
628
+ }
629
+ }
630
+
631
+ this.setState({
632
+ suggestions
633
+ });
634
+ };
635
+
636
+ this.handleRequestDelete = evt => {
637
+ evt.stopPropagation();
638
+ this.props.onChange(this.props.name, []);
639
+ };
640
+ };
641
+
597
642
  HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
598
643
  /**
599
644
  * Affiche une checkbox pour chaque éléments, par défaut si options est nested
@@ -623,10 +668,6 @@ HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
623
668
  * Affiche l'élément 'All'
624
669
  */
625
670
  hasAll: PropTypes.bool,
626
- /**
627
- * Affiche le compte d'éléments sélectionnés en haut de la liste
628
- */
629
- hasSelectedCount: PropTypes.bool,
630
671
  /**
631
672
  * Les items sont hiérarchisés
632
673
  */
@@ -678,6 +719,7 @@ HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
678
719
  * Fonction de callback appelée lorsqu'on écrit dans la barre de recherche
679
720
  * A utiliser pour les selects avec des données dynamiques
680
721
  *
722
+ * @param {object} event
681
723
  * @param {string} value
682
724
  */
683
725
  onSearch: PropTypes.func,
@@ -693,10 +735,19 @@ HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
693
735
  * Les items parents sont sélectionnables
694
736
  */
695
737
  parentItemSelectable: PropTypes.bool,
738
+ /**
739
+ * Placeholder affiché lorsque le select est fermé
740
+ * Surcharge le placeholder par défaut
741
+ */
742
+ placeholder: PropTypes.string,
696
743
  /**
697
744
  * Affiche un input de recherche permettant de filtrer les options
698
745
  */
699
746
  searchable: PropTypes.bool,
747
+ /**
748
+ * Si true, le contenu du select sera dans une div static plutot que dans une popper absolute
749
+ */
750
+ staticPosition: PropTypes.bool,
700
751
  /**
701
752
  * Traductions (par défaut en anglais)
702
753
  */