@hipay/hipay-material-ui 1.0.0-beta.2 → 1.0.0-beta.20
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.
- package/HI-CHANGELOG.md +58 -0
- package/HiAlertModal/HiAlertModal.js +247 -0
- package/HiAlertModal/index.js +16 -0
- package/HiBreadcrumb/HiBreadcrumb.js +149 -0
- package/HiBreadcrumb/HiStep.js +159 -0
- package/HiBreadcrumb/HiStepConnector.js +207 -0
- package/HiBreadcrumb/HiStepContent.js +122 -0
- package/HiBreadcrumb/HiStepIcon.js +191 -0
- package/HiBreadcrumb/HiStepLabel.js +248 -0
- package/HiBreadcrumb/HiStepper.js +106 -0
- package/HiBreadcrumb/index.js +16 -0
- package/HiCheckbox/HiCheckbox.js +4 -1
- package/HiChip/HiChip.js +16 -6
- package/HiChip/HiChipSwitch.js +11 -4
- package/HiColoredLabel/HiColoredLabel.js +9 -3
- package/HiDatePicker/HiDatePicker.js +34 -30
- package/HiDatePicker/HiDateRangePicker.js +77 -34
- package/HiDatePicker/HiDateRangeSelector.js +38 -17
- package/HiDatePicker/ListPicker.js +32 -7
- package/HiDatePicker/Overlays/CustomOverlayLayout.js +3 -1
- package/HiDatePicker/Overlays/MonthPickerOverlay.js +5 -1
- package/HiDatePicker/Overlays/Overlay.js +22 -4
- package/HiDatePicker/Overlays/YearPickerOverlay.js +2 -1
- package/HiDatePicker/stylesheet.js +11 -0
- package/HiDotsStepper/HiDot.js +151 -0
- package/HiDotsStepper/HiDotsStepper.js +146 -0
- package/HiDotsStepper/index.js +16 -0
- package/HiExpansionPanel/HiExpansionPanel.js +231 -0
- package/HiExpansionPanel/index.js +16 -0
- package/HiForm/HiAddressField.js +187 -0
- package/HiForm/HiFormControl.js +39 -31
- package/HiForm/HiInput.js +48 -22
- package/HiForm/HiSearchField.js +2 -2
- package/HiForm/HiSlider.js +399 -0
- package/HiForm/HiUpload.js +280 -0
- package/HiForm/HiUploadField.js +456 -0
- package/HiForm/index.js +36 -0
- package/HiMap/HiMap.js +367 -0
- package/HiMap/HiMapExpand.js +217 -0
- package/HiMap/index.js +25 -0
- package/HiPdfReader/HiPdfReader.js +282 -0
- package/HiPdfReader/index.js +16 -0
- package/HiPins/HiPins.js +0 -1
- package/HiSelect/HiSelect.js +401 -354
- package/HiSelect/HiSelectField.js +8 -6
- package/HiSelect/HiSuggestSelect.js +27 -47
- package/HiSelect/HiSuggestSelectField.js +88 -80
- package/HiSelect/SelectInput.js +34 -23
- package/HiSelectableList/HiSelectableList.js +9 -3
- package/HiSelectableList/HiSelectableListItem.js +96 -55
- package/HiSwitch/HiSwitchState.js +1 -1
- package/HiSwitch/index.js +6 -0
- package/HiTable/BodyCellBuilder.js +116 -101
- package/HiTable/BodyCells/CellCountry.js +11 -36
- package/HiTable/BodyCells/CellIcon.js +29 -20
- package/HiTable/BodyCells/CellImage.js +44 -23
- package/HiTable/BodyCells/CellLayout.js +50 -21
- package/HiTable/BodyCells/CellNumeric.js +7 -2
- package/HiTable/BodyCells/CellSentinel.js +26 -17
- package/HiTable/BodyCells/CellStatus.js +7 -3
- package/HiTable/BodyCells/CellText.js +2 -1
- package/HiTable/BodyCells/CellThirdPartySecurity.js +45 -22
- package/HiTable/BodyRow.js +106 -62
- package/HiTable/ChildRow.js +3 -9
- package/HiTable/ColumnFilter.js +28 -15
- package/HiTable/HeaderCell.js +25 -20
- package/HiTable/HiTable.js +75 -11
- package/HiTable/HiTableBody.js +80 -36
- package/HiTable/HiTableContextMenu.js +7 -3
- package/HiTable/HiTableFooter.js +132 -0
- package/HiTable/HiTableFooterScroll.js +1 -1
- package/HiTable/HiTableHead.js +24 -7
- package/HiTable/OrderColumns.js +6 -2
- package/HiTopBar/HiTopBar.js +42 -120
- package/es/HiAlertModal/HiAlertModal.js +189 -0
- package/es/HiAlertModal/index.js +1 -0
- package/es/HiBreadcrumb/HiBreadcrumb.js +81 -0
- package/es/HiBreadcrumb/HiStep.js +94 -0
- package/es/HiBreadcrumb/HiStepConnector.js +143 -0
- package/es/HiBreadcrumb/HiStepContent.js +63 -0
- package/es/HiBreadcrumb/HiStepIcon.js +149 -0
- package/es/HiBreadcrumb/HiStepLabel.js +197 -0
- package/es/HiBreadcrumb/HiStepper.js +46 -0
- package/es/HiBreadcrumb/index.js +1 -0
- package/es/HiCheckbox/HiCheckbox.js +4 -1
- package/es/HiChip/HiChip.js +15 -6
- package/es/HiChip/HiChipSwitch.js +11 -4
- package/es/HiColoredLabel/HiColoredLabel.js +9 -4
- package/es/HiDatePicker/HiDatePicker.js +30 -25
- package/es/HiDatePicker/HiDateRangePicker.js +73 -33
- package/es/HiDatePicker/HiDateRangeSelector.js +39 -18
- package/es/HiDatePicker/ListPicker.js +39 -20
- package/es/HiDatePicker/Overlays/CustomOverlayLayout.js +3 -1
- package/es/HiDatePicker/Overlays/MonthPickerOverlay.js +5 -1
- package/es/HiDatePicker/Overlays/Overlay.js +18 -4
- package/es/HiDatePicker/Overlays/YearPickerOverlay.js +2 -1
- package/es/HiDatePicker/stylesheet.js +11 -0
- package/es/HiDotsStepper/HiDot.js +92 -0
- package/es/HiDotsStepper/HiDotsStepper.js +83 -0
- package/es/HiDotsStepper/index.js +1 -0
- package/es/HiExpansionPanel/HiExpansionPanel.js +170 -0
- package/es/HiExpansionPanel/index.js +1 -0
- package/es/HiForm/HiAddressField.js +127 -0
- package/es/HiForm/HiFormControl.js +32 -18
- package/es/HiForm/HiInput.js +43 -21
- package/es/HiForm/HiSearchField.js +2 -2
- package/es/HiForm/HiSlider.js +309 -0
- package/es/HiForm/HiUpload.js +194 -0
- package/es/HiForm/HiUploadField.js +368 -0
- package/es/HiForm/index.js +5 -1
- package/es/HiMap/HiMap.js +285 -0
- package/es/HiMap/HiMapExpand.js +145 -0
- package/es/HiMap/index.js +2 -0
- package/es/HiPdfReader/HiPdfReader.js +198 -0
- package/es/HiPdfReader/index.js +1 -0
- package/es/HiPins/HiPins.js +0 -1
- package/es/HiSelect/HiSelect.js +376 -325
- package/es/HiSelect/HiSelectField.js +9 -7
- package/es/HiSelect/HiSuggestSelect.js +26 -39
- package/es/HiSelect/HiSuggestSelectField.js +77 -69
- package/es/HiSelect/SelectInput.js +44 -23
- package/es/HiSelectableList/HiSelectableList.js +10 -4
- package/es/HiSelectableList/HiSelectableListItem.js +91 -55
- package/es/HiSwitch/HiSwitchState.js +1 -1
- package/es/HiSwitch/index.js +1 -0
- package/es/HiTable/BodyCellBuilder.js +112 -102
- package/es/HiTable/BodyCells/CellCountry.js +10 -35
- package/es/HiTable/BodyCells/CellIcon.js +18 -9
- package/es/HiTable/BodyCells/CellImage.js +43 -24
- package/es/HiTable/BodyCells/CellLayout.js +51 -24
- package/es/HiTable/BodyCells/CellNumeric.js +6 -2
- package/es/HiTable/BodyCells/CellSentinel.js +20 -9
- package/es/HiTable/BodyCells/CellStatus.js +7 -3
- package/es/HiTable/BodyCells/CellText.js +2 -1
- package/es/HiTable/BodyCells/CellThirdPartySecurity.js +42 -18
- package/es/HiTable/BodyRow.js +106 -61
- package/es/HiTable/ChildRow.js +3 -10
- package/es/HiTable/ColumnFilter.js +15 -9
- package/es/HiTable/HeaderCell.js +25 -19
- package/es/HiTable/HiTable.js +73 -12
- package/es/HiTable/HiTableBody.js +71 -32
- package/es/HiTable/HiTableContextMenu.js +7 -3
- package/es/HiTable/HiTableFooter.js +75 -0
- package/es/HiTable/HiTableFooterScroll.js +1 -1
- package/es/HiTable/HiTableHead.js +19 -7
- package/es/HiTable/OrderColumns.js +6 -2
- package/es/HiTopBar/HiTopBar.js +45 -111
- package/es/styles/createHiMuiTheme.js +13 -0
- package/es/utils/hiHelpers.js +6 -5
- package/hmu/images/countries/ad.svg +151 -0
- package/hmu/images/countries/ae.svg +6 -0
- package/hmu/images/countries/af.svg +83 -0
- package/hmu/images/countries/ag.svg +15 -0
- package/hmu/images/countries/ai.svg +767 -0
- package/hmu/images/countries/al.svg +5 -0
- package/hmu/images/countries/am.svg +5 -0
- package/hmu/images/countries/ao.svg +13 -0
- package/hmu/images/countries/aq.svg +6 -0
- package/hmu/images/countries/ar.svg +32 -0
- package/hmu/images/countries/as.svg +33 -0
- package/hmu/images/countries/at.svg +6 -0
- package/hmu/images/countries/au.svg +9 -0
- package/hmu/images/countries/aw.svg +186 -0
- package/hmu/images/countries/ax.svg +18 -0
- package/hmu/images/countries/az.svg +8 -0
- package/hmu/images/countries/ba.svg +12 -0
- package/hmu/images/countries/bb.svg +6 -0
- package/hmu/images/countries/bd.svg +4 -0
- package/hmu/images/countries/be.svg +7 -0
- package/hmu/images/countries/bf.svg +7 -0
- package/hmu/images/countries/bg.svg +7 -0
- package/hmu/images/countries/bh.svg +11 -0
- package/hmu/images/countries/bi.svg +15 -0
- package/hmu/images/countries/bj.svg +14 -0
- package/hmu/images/countries/bl.svg +7 -0
- package/hmu/images/countries/bm.svg +99 -0
- package/hmu/images/countries/bn.svg +36 -0
- package/hmu/images/countries/bo.svg +686 -0
- package/hmu/images/countries/bq.svg +5 -0
- package/hmu/images/countries/br.svg +45 -0
- package/hmu/images/countries/bs.svg +13 -0
- package/hmu/images/countries/bt.svg +89 -0
- package/hmu/images/countries/bv.svg +13 -0
- package/hmu/images/countries/bw.svg +7 -0
- package/hmu/images/countries/by.svg +61 -0
- package/hmu/images/countries/bz.svg +146 -0
- package/hmu/images/countries/ca.svg +4 -0
- package/hmu/images/countries/cc.svg +19 -0
- package/hmu/images/countries/cd.svg +5 -0
- package/hmu/images/countries/cf.svg +15 -0
- package/hmu/images/countries/cg.svg +12 -0
- package/hmu/images/countries/ch.svg +9 -0
- package/hmu/images/countries/ci.svg +7 -0
- package/hmu/images/countries/ck.svg +9 -0
- package/hmu/images/countries/cl.svg +13 -0
- package/hmu/images/countries/cm.svg +15 -0
- package/hmu/images/countries/cn.svg +11 -0
- package/hmu/images/countries/co.svg +7 -0
- package/hmu/images/countries/cr.svg +7 -0
- package/hmu/images/countries/cu.svg +13 -0
- package/hmu/images/countries/cv.svg +13 -0
- package/hmu/images/countries/cw.svg +14 -0
- package/hmu/images/countries/cx.svg +15 -0
- package/hmu/images/countries/cy.svg +6 -0
- package/hmu/images/countries/cz.svg +12 -0
- package/hmu/images/countries/de.svg +5 -0
- package/hmu/images/countries/dj.svg +13 -0
- package/hmu/images/countries/dk.svg +5 -0
- package/hmu/images/countries/dm.svg +152 -0
- package/hmu/images/countries/do.svg +6745 -0
- package/hmu/images/countries/dz.svg +5 -0
- package/hmu/images/countries/ec.svg +141 -0
- package/hmu/images/countries/ee.svg +7 -0
- package/hmu/images/countries/eg.svg +38 -0
- package/hmu/images/countries/eh.svg +15 -0
- package/hmu/images/countries/er.svg +8 -0
- package/hmu/images/countries/es-ct.svg +4 -0
- package/hmu/images/countries/es.svg +581 -0
- package/hmu/images/countries/et.svg +14 -0
- package/hmu/images/countries/eu.svg +28 -0
- package/hmu/images/countries/fi.svg +5 -0
- package/hmu/images/countries/fj.svg +124 -0
- package/hmu/images/countries/fk.svg +90 -0
- package/hmu/images/countries/fm.svg +11 -0
- package/hmu/images/countries/fo.svg +12 -0
- package/hmu/images/countries/fr.svg +7 -0
- package/hmu/images/countries/ga.svg +7 -0
- package/hmu/images/countries/gb-eng.svg +5 -0
- package/hmu/images/countries/gb-nir.svg +137 -0
- package/hmu/images/countries/gb-sct.svg +4 -0
- package/hmu/images/countries/gb-wls.svg +9 -0
- package/hmu/images/countries/gb.svg +15 -0
- package/hmu/images/countries/gd.svg +27 -0
- package/hmu/images/countries/ge.svg +6 -0
- package/hmu/images/countries/gf.svg +5 -0
- package/hmu/images/countries/gg.svg +9 -0
- package/hmu/images/countries/gh.svg +6 -0
- package/hmu/images/countries/gi.svg +33 -0
- package/hmu/images/countries/gl.svg +4 -0
- package/hmu/images/countries/gm.svg +14 -0
- package/hmu/images/countries/gn.svg +7 -0
- package/hmu/images/countries/gp.svg +7 -0
- package/hmu/images/countries/gq.svg +23 -0
- package/hmu/images/countries/gr.svg +22 -0
- package/hmu/images/countries/gs.svg +205 -0
- package/hmu/images/countries/gt.svg +204 -0
- package/hmu/images/countries/gu.svg +39 -0
- package/hmu/images/countries/gw.svg +13 -0
- package/hmu/images/countries/gy.svg +9 -0
- package/hmu/images/countries/hk.svg +32 -0
- package/hmu/images/countries/hm.svg +9 -0
- package/hmu/images/countries/hn.svg +18 -0
- package/hmu/images/countries/hr.svg +59 -0
- package/hmu/images/countries/ht.svg +122 -0
- package/hmu/images/countries/hu.svg +7 -0
- package/hmu/images/countries/id.svg +6 -0
- package/hmu/images/countries/ie.svg +7 -0
- package/hmu/images/countries/il.svg +14 -0
- package/hmu/images/countries/im.svg +36 -0
- package/hmu/images/countries/in.svg +25 -0
- package/hmu/images/countries/io.svg +148 -0
- package/hmu/images/countries/iq.svg +10 -0
- package/hmu/images/countries/ir.svg +219 -0
- package/hmu/images/countries/is.svg +12 -0
- package/hmu/images/countries/it.svg +7 -0
- package/hmu/images/countries/je.svg +32 -0
- package/hmu/images/countries/jm.svg +8 -0
- package/hmu/images/countries/jo.svg +16 -0
- package/hmu/images/countries/jp.svg +11 -0
- package/hmu/images/countries/ke.svg +23 -0
- package/hmu/images/countries/kg.svg +15 -0
- package/hmu/images/countries/kh.svg +69 -0
- package/hmu/images/countries/ki.svg +36 -0
- package/hmu/images/countries/km.svg +16 -0
- package/hmu/images/countries/kn.svg +14 -0
- package/hmu/images/countries/kp.svg +15 -0
- package/hmu/images/countries/kr.svg +24 -0
- package/hmu/images/countries/kw.svg +13 -0
- package/hmu/images/countries/ky.svg +63 -0
- package/hmu/images/countries/kz.svg +23 -0
- package/hmu/images/countries/la.svg +12 -0
- package/hmu/images/countries/lb.svg +15 -0
- package/hmu/images/countries/lc.svg +8 -0
- package/hmu/images/countries/li.svg +43 -0
- package/hmu/images/countries/lk.svg +22 -0
- package/hmu/images/countries/lr.svg +14 -0
- package/hmu/images/countries/ls.svg +8 -0
- package/hmu/images/countries/lt.svg +7 -0
- package/hmu/images/countries/lu.svg +5 -0
- package/hmu/images/countries/lv.svg +6 -0
- package/hmu/images/countries/ly.svg +13 -0
- package/hmu/images/countries/ma.svg +4 -0
- package/hmu/images/countries/mc.svg +6 -0
- package/hmu/images/countries/md.svg +72 -0
- package/hmu/images/countries/me.svg +118 -0
- package/hmu/images/countries/mf.svg +7 -0
- package/hmu/images/countries/mg.svg +7 -0
- package/hmu/images/countries/mh.svg +7 -0
- package/hmu/images/countries/mk.svg +5 -0
- package/hmu/images/countries/ml.svg +7 -0
- package/hmu/images/countries/mm.svg +16 -0
- package/hmu/images/countries/mn.svg +13 -0
- package/hmu/images/countries/mo.svg +9 -0
- package/hmu/images/countries/mp.svg +86 -0
- package/hmu/images/countries/mq.svg +7 -0
- package/hmu/images/countries/mr.svg +6 -0
- package/hmu/images/countries/ms.svg +39 -0
- package/hmu/images/countries/mt.svg +49 -0
- package/hmu/images/countries/mu.svg +8 -0
- package/hmu/images/countries/mv.svg +6 -0
- package/hmu/images/countries/mw.svg +10 -0
- package/hmu/images/countries/mx.svg +385 -0
- package/hmu/images/countries/my.svg +15 -0
- package/hmu/images/countries/mz.svg +21 -0
- package/hmu/images/countries/na.svg +16 -0
- package/hmu/images/countries/nc.svg +7 -0
- package/hmu/images/countries/ne.svg +6 -0
- package/hmu/images/countries/nf.svg +9 -0
- package/hmu/images/countries/ng.svg +6 -0
- package/hmu/images/countries/ni.svg +131 -0
- package/hmu/images/countries/nl.svg +7 -0
- package/hmu/images/countries/no.svg +7 -0
- package/hmu/images/countries/np.svg +14 -0
- package/hmu/images/countries/nr.svg +12 -0
- package/hmu/images/countries/nu.svg +26 -0
- package/hmu/images/countries/nz.svg +41 -0
- package/hmu/images/countries/om.svg +116 -0
- package/hmu/images/countries/pa.svg +14 -0
- package/hmu/images/countries/pe.svg +279 -0
- package/hmu/images/countries/pf.svg +19 -0
- package/hmu/images/countries/pg.svg +9 -0
- package/hmu/images/countries/ph.svg +28 -0
- package/hmu/images/countries/pk.svg +15 -0
- package/hmu/images/countries/pl.svg +6 -0
- package/hmu/images/countries/pm.svg +7 -0
- package/hmu/images/countries/pn.svg +62 -0
- package/hmu/images/countries/pr.svg +13 -0
- package/hmu/images/countries/ps.svg +15 -0
- package/hmu/images/countries/pt.svg +57 -0
- package/hmu/images/countries/pw.svg +11 -0
- package/hmu/images/countries/py.svg +157 -0
- package/hmu/images/countries/qa.svg +4 -0
- package/hmu/images/countries/re.svg +7 -0
- package/hmu/images/countries/ro.svg +7 -0
- package/hmu/images/countries/rs.svg +292 -0
- package/hmu/images/countries/ru.svg +7 -0
- package/hmu/images/countries/rw.svg +13 -0
- package/hmu/images/countries/sa.svg +26 -0
- package/hmu/images/countries/sb.svg +13 -0
- package/hmu/images/countries/sc.svg +14 -0
- package/hmu/images/countries/sd.svg +13 -0
- package/hmu/images/countries/se.svg +16 -0
- package/hmu/images/countries/sg.svg +13 -0
- package/hmu/images/countries/sh.svg +74 -0
- package/hmu/images/countries/si.svg +18 -0
- package/hmu/images/countries/sj.svg +7 -0
- package/hmu/images/countries/sk.svg +9 -0
- package/hmu/images/countries/sl.svg +7 -0
- package/hmu/images/countries/sm.svg +91 -0
- package/hmu/images/countries/sn.svg +8 -0
- package/hmu/images/countries/so.svg +11 -0
- package/hmu/images/countries/sr.svg +6 -0
- package/hmu/images/countries/ss.svg +8 -0
- package/hmu/images/countries/st.svg +16 -0
- package/hmu/images/countries/sv.svg +618 -0
- package/hmu/images/countries/sx.svg +56 -0
- package/hmu/images/countries/sy.svg +6 -0
- package/hmu/images/countries/sz.svg +45 -0
- package/hmu/images/countries/tc.svg +67 -0
- package/hmu/images/countries/td.svg +7 -0
- package/hmu/images/countries/tf.svg +15 -0
- package/hmu/images/countries/tg.svg +14 -0
- package/hmu/images/countries/th.svg +7 -0
- package/hmu/images/countries/tj.svg +22 -0
- package/hmu/images/countries/tk.svg +5 -0
- package/hmu/images/countries/tl.svg +13 -0
- package/hmu/images/countries/tm.svg +213 -0
- package/hmu/images/countries/tn.svg +13 -0
- package/hmu/images/countries/to.svg +10 -0
- package/hmu/images/countries/tr.svg +8 -0
- package/hmu/images/countries/tt.svg +5 -0
- package/hmu/images/countries/tv.svg +27 -0
- package/hmu/images/countries/tw.svg +14 -0
- package/hmu/images/countries/tz.svg +13 -0
- package/hmu/images/countries/ua.svg +6 -0
- package/hmu/images/countries/ug.svg +30 -0
- package/hmu/images/countries/um.svg +23 -0
- package/hmu/images/countries/un.svg +16 -0
- package/hmu/images/countries/us.svg +12 -0
- package/hmu/images/countries/uy.svg +28 -0
- package/hmu/images/countries/uz.svg +30 -0
- package/hmu/images/countries/va.svg +483 -0
- package/hmu/images/countries/vc.svg +8 -0
- package/hmu/images/countries/ve.svg +26 -0
- package/hmu/images/countries/vg.svg +133 -0
- package/hmu/images/countries/vi.svg +31 -0
- package/hmu/images/countries/vn.svg +11 -0
- package/hmu/images/countries/vu.svg +18 -0
- package/hmu/images/countries/wf.svg +7 -0
- package/hmu/images/countries/ws.svg +7 -0
- package/hmu/images/countries/ye.svg +7 -0
- package/hmu/images/countries/yt.svg +7 -0
- package/hmu/images/countries/za.svg +17 -0
- package/hmu/images/countries/zm.svg +27 -0
- package/hmu/images/countries/zw.svg +21 -0
- package/hmu/images/hipay-white-logo.svg +42 -0
- package/hmu/images/logo_visa_75wx45h.gif +0 -0
- package/hmu/images/map_marker.svg +8 -0
- package/index.es.js +1 -1
- package/index.js +1 -1
- package/package.json +8 -5
- package/styles/createHiMuiTheme.js +13 -0
- package/umd/hipay-material-ui.development.js +86185 -41566
- package/umd/hipay-material-ui.production.min.js +5 -5
- package/utils/hiHelpers.js +6 -4
package/es/HiSelect/HiSelect.js
CHANGED
|
@@ -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,8 +28,7 @@ export const styles = theme => ({
|
|
|
30
28
|
},
|
|
31
29
|
popper: {
|
|
32
30
|
width: '100%',
|
|
33
|
-
|
|
34
|
-
zIndex: 9
|
|
31
|
+
zIndex: 11
|
|
35
32
|
},
|
|
36
33
|
paper: {
|
|
37
34
|
borderRadius: '0px 2px',
|
|
@@ -72,231 +69,7 @@ class HiSelect extends React.PureComponent {
|
|
|
72
69
|
constructor(props) {
|
|
73
70
|
super(props);
|
|
74
71
|
|
|
75
|
-
|
|
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
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
if
|
|
319
|
-
props.options.forEach(
|
|
320
|
-
if (
|
|
321
|
-
|
|
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
|
-
|
|
332
|
-
|
|
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
|
-
|
|
504
|
-
|
|
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 = () => {
|
|
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
|
*/
|