@hipay/hipay-material-ui 1.0.0-beta.18 → 1.0.0-beta.2
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/HiCheckbox/HiCheckbox.js +1 -4
- package/HiChip/HiChip.js +4 -4
- package/HiChip/HiChipSwitch.js +4 -11
- package/HiColoredLabel/HiColoredLabel.js +3 -9
- package/HiDatePicker/HiDatePicker.js +30 -34
- package/HiDatePicker/HiDateRangePicker.js +33 -76
- package/HiDatePicker/HiDateRangeSelector.js +13 -33
- package/HiDatePicker/ListPicker.js +7 -32
- package/HiDatePicker/Overlays/CustomOverlayLayout.js +1 -3
- package/HiDatePicker/Overlays/MonthPickerOverlay.js +1 -5
- package/HiDatePicker/Overlays/Overlay.js +4 -22
- package/HiDatePicker/Overlays/YearPickerOverlay.js +1 -2
- package/HiDatePicker/stylesheet.js +0 -7
- package/HiForm/HiFormControl.js +31 -39
- package/HiForm/HiInput.js +18 -39
- package/HiForm/HiSearchField.js +2 -2
- package/HiForm/index.js +0 -18
- package/HiPins/HiPins.js +1 -0
- package/HiSelect/HiSelect.js +353 -400
- package/HiSelect/HiSelectField.js +6 -8
- package/HiSelect/HiSuggestSelect.js +47 -27
- package/HiSelect/HiSuggestSelectField.js +80 -88
- package/HiSelect/SelectInput.js +23 -34
- package/HiSelectableList/HiSelectableList.js +3 -9
- package/HiSelectableList/HiSelectableListItem.js +55 -96
- package/HiSwitch/HiSwitchState.js +1 -1
- package/HiSwitch/index.js +0 -6
- package/HiTable/BodyCellBuilder.js +97 -97
- package/HiTable/BodyCells/CellCountry.js +36 -11
- package/HiTable/BodyCells/CellIcon.js +20 -29
- package/HiTable/BodyCells/CellImage.js +22 -43
- package/HiTable/BodyCells/CellLayout.js +19 -25
- package/HiTable/BodyCells/CellNumeric.js +2 -7
- package/HiTable/BodyCells/CellSentinel.js +17 -26
- package/HiTable/BodyCells/CellStatus.js +2 -6
- package/HiTable/BodyCells/CellText.js +1 -2
- package/HiTable/BodyCells/CellThirdPartySecurity.js +22 -45
- package/HiTable/BodyRow.js +57 -78
- package/HiTable/ColumnFilter.js +15 -28
- package/HiTable/HeaderCell.js +16 -20
- package/HiTable/HiTable.js +11 -61
- package/HiTable/HiTableBody.js +14 -46
- package/HiTable/HiTableContextMenu.js +3 -7
- package/HiTable/HiTableFooterScroll.js +1 -1
- package/HiTable/HiTableHead.js +7 -24
- package/HiTable/OrderColumns.js +2 -6
- package/HiTopBar/HiTopBar.js +117 -37
- package/es/HiCheckbox/HiCheckbox.js +1 -4
- package/es/HiChip/HiChip.js +4 -4
- package/es/HiChip/HiChipSwitch.js +4 -11
- package/es/HiColoredLabel/HiColoredLabel.js +4 -9
- package/es/HiDatePicker/HiDatePicker.js +25 -30
- package/es/HiDatePicker/HiDateRangePicker.js +32 -72
- package/es/HiDatePicker/HiDateRangeSelector.js +14 -34
- package/es/HiDatePicker/ListPicker.js +20 -39
- package/es/HiDatePicker/Overlays/CustomOverlayLayout.js +1 -3
- package/es/HiDatePicker/Overlays/MonthPickerOverlay.js +1 -5
- package/es/HiDatePicker/Overlays/Overlay.js +4 -18
- package/es/HiDatePicker/Overlays/YearPickerOverlay.js +1 -2
- package/es/HiDatePicker/stylesheet.js +0 -7
- package/es/HiForm/HiFormControl.js +18 -32
- package/es/HiForm/HiInput.js +17 -34
- package/es/HiForm/HiSearchField.js +2 -2
- package/es/HiForm/index.js +1 -3
- package/es/HiPins/HiPins.js +1 -0
- package/es/HiSelect/HiSelect.js +324 -375
- package/es/HiSelect/HiSelectField.js +7 -9
- package/es/HiSelect/HiSuggestSelect.js +39 -26
- package/es/HiSelect/HiSuggestSelectField.js +69 -77
- package/es/HiSelect/SelectInput.js +23 -44
- package/es/HiSelectableList/HiSelectableList.js +4 -10
- package/es/HiSelectableList/HiSelectableListItem.js +55 -91
- package/es/HiSwitch/HiSwitchState.js +1 -1
- package/es/HiSwitch/index.js +0 -1
- package/es/HiTable/BodyCellBuilder.js +98 -96
- package/es/HiTable/BodyCells/CellCountry.js +35 -10
- package/es/HiTable/BodyCells/CellIcon.js +9 -18
- package/es/HiTable/BodyCells/CellImage.js +23 -42
- package/es/HiTable/BodyCells/CellLayout.js +21 -27
- package/es/HiTable/BodyCells/CellNumeric.js +2 -6
- package/es/HiTable/BodyCells/CellSentinel.js +9 -20
- package/es/HiTable/BodyCells/CellStatus.js +2 -6
- package/es/HiTable/BodyCells/CellText.js +1 -2
- package/es/HiTable/BodyCells/CellThirdPartySecurity.js +18 -42
- package/es/HiTable/BodyRow.js +56 -79
- package/es/HiTable/ColumnFilter.js +9 -15
- package/es/HiTable/HeaderCell.js +16 -20
- package/es/HiTable/HiTable.js +12 -59
- package/es/HiTable/HiTableBody.js +11 -42
- package/es/HiTable/HiTableContextMenu.js +3 -7
- package/es/HiTable/HiTableFooterScroll.js +1 -1
- package/es/HiTable/HiTableHead.js +7 -19
- package/es/HiTable/OrderColumns.js +2 -6
- package/es/HiTopBar/HiTopBar.js +108 -40
- package/es/styles/createHiMuiTheme.js +0 -11
- package/es/utils/hiHelpers.js +5 -6
- package/index.es.js +1 -1
- package/index.js +1 -1
- package/package.json +44 -45
- package/styles/createHiMuiTheme.js +0 -11
- package/umd/hipay-material-ui.development.js +43603 -87235
- package/umd/hipay-material-ui.production.min.js +5 -5
- package/utils/hiHelpers.js +4 -6
- package/HI-CHANGELOG.md +0 -58
- package/HiAlertModal/HiAlertModal.js +0 -247
- package/HiAlertModal/index.js +0 -16
- package/HiBreadcrumb/HiBreadcrumb.js +0 -149
- package/HiBreadcrumb/HiStep.js +0 -159
- package/HiBreadcrumb/HiStepConnector.js +0 -207
- package/HiBreadcrumb/HiStepContent.js +0 -122
- package/HiBreadcrumb/HiStepIcon.js +0 -191
- package/HiBreadcrumb/HiStepLabel.js +0 -248
- package/HiBreadcrumb/HiStepper.js +0 -106
- package/HiBreadcrumb/index.js +0 -16
- package/HiDotsStepper/HiDot.js +0 -151
- package/HiDotsStepper/HiDotsStepper.js +0 -146
- package/HiDotsStepper/index.js +0 -16
- package/HiExpansionPanel/HiExpansionPanel.js +0 -231
- package/HiExpansionPanel/index.js +0 -16
- package/HiForm/HiAddressField.js +0 -204
- package/HiForm/HiSlider.js +0 -399
- package/HiPdfReader/HiPdfReader.js +0 -282
- package/HiPdfReader/index.js +0 -16
- package/HiTable/HiTableFooter.js +0 -131
- package/es/HiAlertModal/HiAlertModal.js +0 -189
- package/es/HiAlertModal/index.js +0 -1
- package/es/HiBreadcrumb/HiBreadcrumb.js +0 -81
- package/es/HiBreadcrumb/HiStep.js +0 -94
- package/es/HiBreadcrumb/HiStepConnector.js +0 -143
- package/es/HiBreadcrumb/HiStepContent.js +0 -63
- package/es/HiBreadcrumb/HiStepIcon.js +0 -149
- package/es/HiBreadcrumb/HiStepLabel.js +0 -197
- package/es/HiBreadcrumb/HiStepper.js +0 -46
- package/es/HiBreadcrumb/index.js +0 -1
- package/es/HiDotsStepper/HiDot.js +0 -92
- package/es/HiDotsStepper/HiDotsStepper.js +0 -83
- package/es/HiDotsStepper/index.js +0 -1
- package/es/HiExpansionPanel/HiExpansionPanel.js +0 -170
- package/es/HiExpansionPanel/index.js +0 -1
- package/es/HiForm/HiAddressField.js +0 -142
- package/es/HiForm/HiSlider.js +0 -309
- package/es/HiPdfReader/HiPdfReader.js +0 -198
- package/es/HiPdfReader/index.js +0 -1
- package/es/HiTable/HiTableFooter.js +0 -74
- package/hmu/images/countries/ad.svg +0 -151
- package/hmu/images/countries/ae.svg +0 -6
- package/hmu/images/countries/af.svg +0 -83
- package/hmu/images/countries/ag.svg +0 -15
- package/hmu/images/countries/ai.svg +0 -767
- package/hmu/images/countries/al.svg +0 -5
- package/hmu/images/countries/am.svg +0 -5
- package/hmu/images/countries/ao.svg +0 -13
- package/hmu/images/countries/aq.svg +0 -6
- package/hmu/images/countries/ar.svg +0 -32
- package/hmu/images/countries/as.svg +0 -33
- package/hmu/images/countries/at.svg +0 -6
- package/hmu/images/countries/au.svg +0 -9
- package/hmu/images/countries/aw.svg +0 -186
- package/hmu/images/countries/ax.svg +0 -18
- package/hmu/images/countries/az.svg +0 -8
- package/hmu/images/countries/ba.svg +0 -12
- package/hmu/images/countries/bb.svg +0 -6
- package/hmu/images/countries/bd.svg +0 -4
- package/hmu/images/countries/be.svg +0 -7
- package/hmu/images/countries/bf.svg +0 -7
- package/hmu/images/countries/bg.svg +0 -7
- package/hmu/images/countries/bh.svg +0 -11
- package/hmu/images/countries/bi.svg +0 -15
- package/hmu/images/countries/bj.svg +0 -14
- package/hmu/images/countries/bl.svg +0 -7
- package/hmu/images/countries/bm.svg +0 -99
- package/hmu/images/countries/bn.svg +0 -36
- package/hmu/images/countries/bo.svg +0 -686
- package/hmu/images/countries/bq.svg +0 -5
- package/hmu/images/countries/br.svg +0 -45
- package/hmu/images/countries/bs.svg +0 -13
- package/hmu/images/countries/bt.svg +0 -89
- package/hmu/images/countries/bv.svg +0 -13
- package/hmu/images/countries/bw.svg +0 -7
- package/hmu/images/countries/by.svg +0 -61
- package/hmu/images/countries/bz.svg +0 -146
- package/hmu/images/countries/ca.svg +0 -4
- package/hmu/images/countries/cc.svg +0 -19
- package/hmu/images/countries/cd.svg +0 -5
- package/hmu/images/countries/cf.svg +0 -15
- package/hmu/images/countries/cg.svg +0 -12
- package/hmu/images/countries/ch.svg +0 -9
- package/hmu/images/countries/ci.svg +0 -7
- package/hmu/images/countries/ck.svg +0 -9
- package/hmu/images/countries/cl.svg +0 -13
- package/hmu/images/countries/cm.svg +0 -15
- package/hmu/images/countries/cn.svg +0 -11
- package/hmu/images/countries/co.svg +0 -7
- package/hmu/images/countries/cr.svg +0 -7
- package/hmu/images/countries/cu.svg +0 -13
- package/hmu/images/countries/cv.svg +0 -13
- package/hmu/images/countries/cw.svg +0 -14
- package/hmu/images/countries/cx.svg +0 -15
- package/hmu/images/countries/cy.svg +0 -6
- package/hmu/images/countries/cz.svg +0 -12
- package/hmu/images/countries/de.svg +0 -5
- package/hmu/images/countries/dj.svg +0 -13
- package/hmu/images/countries/dk.svg +0 -5
- package/hmu/images/countries/dm.svg +0 -152
- package/hmu/images/countries/do.svg +0 -6745
- package/hmu/images/countries/dz.svg +0 -5
- package/hmu/images/countries/ec.svg +0 -141
- package/hmu/images/countries/ee.svg +0 -7
- package/hmu/images/countries/eg.svg +0 -38
- package/hmu/images/countries/eh.svg +0 -15
- package/hmu/images/countries/er.svg +0 -8
- package/hmu/images/countries/es-ct.svg +0 -4
- package/hmu/images/countries/es.svg +0 -581
- package/hmu/images/countries/et.svg +0 -14
- package/hmu/images/countries/eu.svg +0 -28
- package/hmu/images/countries/fi.svg +0 -5
- package/hmu/images/countries/fj.svg +0 -124
- package/hmu/images/countries/fk.svg +0 -90
- package/hmu/images/countries/fm.svg +0 -11
- package/hmu/images/countries/fo.svg +0 -12
- package/hmu/images/countries/fr.svg +0 -7
- package/hmu/images/countries/ga.svg +0 -7
- package/hmu/images/countries/gb-eng.svg +0 -5
- package/hmu/images/countries/gb-nir.svg +0 -137
- package/hmu/images/countries/gb-sct.svg +0 -4
- package/hmu/images/countries/gb-wls.svg +0 -9
- package/hmu/images/countries/gb.svg +0 -15
- package/hmu/images/countries/gd.svg +0 -27
- package/hmu/images/countries/ge.svg +0 -6
- package/hmu/images/countries/gf.svg +0 -5
- package/hmu/images/countries/gg.svg +0 -9
- package/hmu/images/countries/gh.svg +0 -6
- package/hmu/images/countries/gi.svg +0 -33
- package/hmu/images/countries/gl.svg +0 -4
- package/hmu/images/countries/gm.svg +0 -14
- package/hmu/images/countries/gn.svg +0 -7
- package/hmu/images/countries/gp.svg +0 -7
- package/hmu/images/countries/gq.svg +0 -23
- package/hmu/images/countries/gr.svg +0 -22
- package/hmu/images/countries/gs.svg +0 -205
- package/hmu/images/countries/gt.svg +0 -204
- package/hmu/images/countries/gu.svg +0 -39
- package/hmu/images/countries/gw.svg +0 -13
- package/hmu/images/countries/gy.svg +0 -9
- package/hmu/images/countries/hk.svg +0 -32
- package/hmu/images/countries/hm.svg +0 -9
- package/hmu/images/countries/hn.svg +0 -18
- package/hmu/images/countries/hr.svg +0 -59
- package/hmu/images/countries/ht.svg +0 -122
- package/hmu/images/countries/hu.svg +0 -7
- package/hmu/images/countries/id.svg +0 -6
- package/hmu/images/countries/ie.svg +0 -7
- package/hmu/images/countries/il.svg +0 -14
- package/hmu/images/countries/im.svg +0 -36
- package/hmu/images/countries/in.svg +0 -25
- package/hmu/images/countries/io.svg +0 -148
- package/hmu/images/countries/iq.svg +0 -10
- package/hmu/images/countries/ir.svg +0 -219
- package/hmu/images/countries/is.svg +0 -12
- package/hmu/images/countries/it.svg +0 -7
- package/hmu/images/countries/je.svg +0 -32
- package/hmu/images/countries/jm.svg +0 -8
- package/hmu/images/countries/jo.svg +0 -16
- package/hmu/images/countries/jp.svg +0 -11
- package/hmu/images/countries/ke.svg +0 -23
- package/hmu/images/countries/kg.svg +0 -15
- package/hmu/images/countries/kh.svg +0 -69
- package/hmu/images/countries/ki.svg +0 -36
- package/hmu/images/countries/km.svg +0 -16
- package/hmu/images/countries/kn.svg +0 -14
- package/hmu/images/countries/kp.svg +0 -15
- package/hmu/images/countries/kr.svg +0 -24
- package/hmu/images/countries/kw.svg +0 -13
- package/hmu/images/countries/ky.svg +0 -63
- package/hmu/images/countries/kz.svg +0 -23
- package/hmu/images/countries/la.svg +0 -12
- package/hmu/images/countries/lb.svg +0 -15
- package/hmu/images/countries/lc.svg +0 -8
- package/hmu/images/countries/li.svg +0 -43
- package/hmu/images/countries/lk.svg +0 -22
- package/hmu/images/countries/lr.svg +0 -14
- package/hmu/images/countries/ls.svg +0 -8
- package/hmu/images/countries/lt.svg +0 -7
- package/hmu/images/countries/lu.svg +0 -5
- package/hmu/images/countries/lv.svg +0 -6
- package/hmu/images/countries/ly.svg +0 -13
- package/hmu/images/countries/ma.svg +0 -4
- package/hmu/images/countries/mc.svg +0 -6
- package/hmu/images/countries/md.svg +0 -72
- package/hmu/images/countries/me.svg +0 -118
- package/hmu/images/countries/mf.svg +0 -7
- package/hmu/images/countries/mg.svg +0 -7
- package/hmu/images/countries/mh.svg +0 -7
- package/hmu/images/countries/mk.svg +0 -5
- package/hmu/images/countries/ml.svg +0 -7
- package/hmu/images/countries/mm.svg +0 -16
- package/hmu/images/countries/mn.svg +0 -13
- package/hmu/images/countries/mo.svg +0 -9
- package/hmu/images/countries/mp.svg +0 -86
- package/hmu/images/countries/mq.svg +0 -7
- package/hmu/images/countries/mr.svg +0 -6
- package/hmu/images/countries/ms.svg +0 -39
- package/hmu/images/countries/mt.svg +0 -49
- package/hmu/images/countries/mu.svg +0 -8
- package/hmu/images/countries/mv.svg +0 -6
- package/hmu/images/countries/mw.svg +0 -10
- package/hmu/images/countries/mx.svg +0 -385
- package/hmu/images/countries/my.svg +0 -15
- package/hmu/images/countries/mz.svg +0 -21
- package/hmu/images/countries/na.svg +0 -16
- package/hmu/images/countries/nc.svg +0 -7
- package/hmu/images/countries/ne.svg +0 -6
- package/hmu/images/countries/nf.svg +0 -9
- package/hmu/images/countries/ng.svg +0 -6
- package/hmu/images/countries/ni.svg +0 -131
- package/hmu/images/countries/nl.svg +0 -7
- package/hmu/images/countries/no.svg +0 -7
- package/hmu/images/countries/np.svg +0 -14
- package/hmu/images/countries/nr.svg +0 -12
- package/hmu/images/countries/nu.svg +0 -26
- package/hmu/images/countries/nz.svg +0 -41
- package/hmu/images/countries/om.svg +0 -116
- package/hmu/images/countries/pa.svg +0 -14
- package/hmu/images/countries/pe.svg +0 -279
- package/hmu/images/countries/pf.svg +0 -19
- package/hmu/images/countries/pg.svg +0 -9
- package/hmu/images/countries/ph.svg +0 -28
- package/hmu/images/countries/pk.svg +0 -15
- package/hmu/images/countries/pl.svg +0 -6
- package/hmu/images/countries/pm.svg +0 -7
- package/hmu/images/countries/pn.svg +0 -62
- package/hmu/images/countries/pr.svg +0 -13
- package/hmu/images/countries/ps.svg +0 -15
- package/hmu/images/countries/pt.svg +0 -57
- package/hmu/images/countries/pw.svg +0 -11
- package/hmu/images/countries/py.svg +0 -157
- package/hmu/images/countries/qa.svg +0 -4
- package/hmu/images/countries/re.svg +0 -7
- package/hmu/images/countries/ro.svg +0 -7
- package/hmu/images/countries/rs.svg +0 -292
- package/hmu/images/countries/ru.svg +0 -7
- package/hmu/images/countries/rw.svg +0 -13
- package/hmu/images/countries/sa.svg +0 -26
- package/hmu/images/countries/sb.svg +0 -13
- package/hmu/images/countries/sc.svg +0 -14
- package/hmu/images/countries/sd.svg +0 -13
- package/hmu/images/countries/se.svg +0 -16
- package/hmu/images/countries/sg.svg +0 -13
- package/hmu/images/countries/sh.svg +0 -74
- package/hmu/images/countries/si.svg +0 -18
- package/hmu/images/countries/sj.svg +0 -7
- package/hmu/images/countries/sk.svg +0 -9
- package/hmu/images/countries/sl.svg +0 -7
- package/hmu/images/countries/sm.svg +0 -91
- package/hmu/images/countries/sn.svg +0 -8
- package/hmu/images/countries/so.svg +0 -11
- package/hmu/images/countries/sr.svg +0 -6
- package/hmu/images/countries/ss.svg +0 -8
- package/hmu/images/countries/st.svg +0 -16
- package/hmu/images/countries/sv.svg +0 -618
- package/hmu/images/countries/sx.svg +0 -56
- package/hmu/images/countries/sy.svg +0 -6
- package/hmu/images/countries/sz.svg +0 -45
- package/hmu/images/countries/tc.svg +0 -67
- package/hmu/images/countries/td.svg +0 -7
- package/hmu/images/countries/tf.svg +0 -15
- package/hmu/images/countries/tg.svg +0 -14
- package/hmu/images/countries/th.svg +0 -7
- package/hmu/images/countries/tj.svg +0 -22
- package/hmu/images/countries/tk.svg +0 -5
- package/hmu/images/countries/tl.svg +0 -13
- package/hmu/images/countries/tm.svg +0 -213
- package/hmu/images/countries/tn.svg +0 -13
- package/hmu/images/countries/to.svg +0 -10
- package/hmu/images/countries/tr.svg +0 -8
- package/hmu/images/countries/tt.svg +0 -5
- package/hmu/images/countries/tv.svg +0 -27
- package/hmu/images/countries/tw.svg +0 -14
- package/hmu/images/countries/tz.svg +0 -13
- package/hmu/images/countries/ua.svg +0 -6
- package/hmu/images/countries/ug.svg +0 -30
- package/hmu/images/countries/um.svg +0 -23
- package/hmu/images/countries/un.svg +0 -16
- package/hmu/images/countries/us.svg +0 -12
- package/hmu/images/countries/uy.svg +0 -28
- package/hmu/images/countries/uz.svg +0 -30
- package/hmu/images/countries/va.svg +0 -483
- package/hmu/images/countries/vc.svg +0 -8
- package/hmu/images/countries/ve.svg +0 -26
- package/hmu/images/countries/vg.svg +0 -133
- package/hmu/images/countries/vi.svg +0 -31
- package/hmu/images/countries/vn.svg +0 -11
- package/hmu/images/countries/vu.svg +0 -18
- package/hmu/images/countries/wf.svg +0 -7
- package/hmu/images/countries/ws.svg +0 -7
- package/hmu/images/countries/ye.svg +0 -7
- package/hmu/images/countries/yt.svg +0 -7
- package/hmu/images/countries/za.svg +0 -17
- package/hmu/images/countries/zm.svg +0 -27
- package/hmu/images/countries/zw.svg +0 -21
- package/hmu/images/hipay-white-logo.svg +0 -42
- package/hmu/images/logo_visa_75wx45h.gif +0 -0
package/es/HiSelect/HiSelect.js
CHANGED
|
@@ -9,9 +9,11 @@ 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';
|
|
12
13
|
import { Manager, Target, Popper } from 'react-popper';
|
|
13
14
|
import { CheckboxBlankOutline, CheckboxMarked } from 'mdi-material-ui';
|
|
14
15
|
import HiSelectableList from '../HiSelectableList';
|
|
16
|
+
import HiSelectableListItem from '../HiSelectableList/HiSelectableListItem';
|
|
15
17
|
import { HiSearchField } from '../HiForm';
|
|
16
18
|
import SelectInput from './SelectInput';
|
|
17
19
|
import HiChip from '../HiChip/HiChip';
|
|
@@ -28,6 +30,7 @@ export const styles = theme => ({
|
|
|
28
30
|
},
|
|
29
31
|
popper: {
|
|
30
32
|
width: '100%',
|
|
33
|
+
transform: 'none !important',
|
|
31
34
|
zIndex: 9
|
|
32
35
|
},
|
|
33
36
|
paper: {
|
|
@@ -69,7 +72,231 @@ class HiSelect extends React.PureComponent {
|
|
|
69
72
|
constructor(props) {
|
|
70
73
|
super(props);
|
|
71
74
|
|
|
72
|
-
|
|
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
|
+
};
|
|
73
300
|
|
|
74
301
|
this.state = {
|
|
75
302
|
open: false,
|
|
@@ -81,30 +308,28 @@ class HiSelect extends React.PureComponent {
|
|
|
81
308
|
dynamic: false
|
|
82
309
|
};
|
|
83
310
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
props.options.forEach(
|
|
93
|
-
if (
|
|
94
|
-
|
|
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
|
+
}
|
|
95
328
|
}
|
|
96
329
|
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (!valueInOptions) {
|
|
100
|
-
throw new Error('prop value provided does not match any option.');
|
|
101
|
-
}
|
|
102
330
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
this.state.hierarchy = hierarchyTrees.hierarchy;
|
|
107
|
-
this.state.hierarchySelected = hierarchyTrees.hierarchySelected;
|
|
331
|
+
this.state.hierarchy = hierarchy;
|
|
332
|
+
this.state.hierarchySelected = hierarchySelected;
|
|
108
333
|
}
|
|
109
334
|
|
|
110
335
|
if (props.options.length > 0) {
|
|
@@ -123,7 +348,6 @@ class HiSelect extends React.PureComponent {
|
|
|
123
348
|
this.handleSelect = this.handleSelect.bind(this);
|
|
124
349
|
this.handleClick = this.handleClick.bind(this);
|
|
125
350
|
this.handleClose = this.handleClose.bind(this);
|
|
126
|
-
this.handleClickAway = this.handleClickAway.bind(this);
|
|
127
351
|
this.handleRequestDelete = this.handleRequestDelete.bind(this);
|
|
128
352
|
this.handleSuggestions = this.handleSuggestions.bind(this);
|
|
129
353
|
this.handleFocus = this.handleFocus.bind(this);
|
|
@@ -141,33 +365,6 @@ class HiSelect extends React.PureComponent {
|
|
|
141
365
|
});
|
|
142
366
|
this.setState({ nbOptions: optionsLength });
|
|
143
367
|
}
|
|
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 };
|
|
171
368
|
}
|
|
172
369
|
|
|
173
370
|
// Key down on list items
|
|
@@ -201,12 +398,14 @@ class HiSelect extends React.PureComponent {
|
|
|
201
398
|
classes,
|
|
202
399
|
disabled,
|
|
203
400
|
error,
|
|
401
|
+
multiple,
|
|
204
402
|
options,
|
|
205
403
|
checkbox,
|
|
206
404
|
searchable,
|
|
207
405
|
displayAsChip,
|
|
208
406
|
type,
|
|
209
407
|
value,
|
|
408
|
+
hasSelectedCount = multiple,
|
|
210
409
|
translations,
|
|
211
410
|
parentItemSelectable,
|
|
212
411
|
icon,
|
|
@@ -214,21 +413,19 @@ class HiSelect extends React.PureComponent {
|
|
|
214
413
|
hoverIcon,
|
|
215
414
|
checkedIcon,
|
|
216
415
|
hierarchic,
|
|
217
|
-
id
|
|
218
|
-
placeholder,
|
|
219
|
-
staticPosition
|
|
416
|
+
id
|
|
220
417
|
} = this.props;
|
|
221
418
|
|
|
222
419
|
const { open, suggestions, focused } = this.state;
|
|
223
420
|
|
|
224
421
|
let display = '';
|
|
225
|
-
const selectedIdList = Array.isArray(value) ? value :
|
|
422
|
+
const selectedIdList = Array.isArray(value) ? value : [value];
|
|
226
423
|
|
|
227
424
|
if (this.state.dynamic && selectedIdList.length === 1) {
|
|
228
425
|
display = translations.one_item_selected.replace('%s', selectedIdList.length);
|
|
229
426
|
} else if (this.state.nbOptions !== selectedIdList.length && selectedIdList.length > 1) {
|
|
230
427
|
display = translations.n_items_selected.replace('%s', selectedIdList.length);
|
|
231
|
-
} else if (this.state.nbOptions === selectedIdList.length
|
|
428
|
+
} else if (this.state.nbOptions === selectedIdList.length) {
|
|
232
429
|
display = translations.all;
|
|
233
430
|
} else if (selectedIdList.length === 1) {
|
|
234
431
|
if (type !== 'icon') {
|
|
@@ -245,7 +442,7 @@ class HiSelect extends React.PureComponent {
|
|
|
245
442
|
}
|
|
246
443
|
|
|
247
444
|
if (displayAsChip) {
|
|
248
|
-
const chipFilter = React.createElement(HiChip, { label:
|
|
445
|
+
const chipFilter = React.createElement(HiChip, { label: display, onDelete: this.handleRequestDelete });
|
|
249
446
|
if (display) {
|
|
250
447
|
display = chipFilter;
|
|
251
448
|
}
|
|
@@ -265,50 +462,6 @@ class HiSelect extends React.PureComponent {
|
|
|
265
462
|
popperStyle = { width: this.props.containerWidth };
|
|
266
463
|
}
|
|
267
464
|
|
|
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
|
-
|
|
312
465
|
return React.createElement(
|
|
313
466
|
'div',
|
|
314
467
|
{
|
|
@@ -325,7 +478,7 @@ class HiSelect extends React.PureComponent {
|
|
|
325
478
|
null,
|
|
326
479
|
React.createElement(SelectInput, {
|
|
327
480
|
id: id,
|
|
328
|
-
value:
|
|
481
|
+
value: display,
|
|
329
482
|
open: open,
|
|
330
483
|
focused: focused,
|
|
331
484
|
type: type,
|
|
@@ -336,17 +489,10 @@ class HiSelect extends React.PureComponent {
|
|
|
336
489
|
onFocus: this.handleFocus,
|
|
337
490
|
onBlur: this.handleBlur,
|
|
338
491
|
onMouseEnter: this.props.onMouseEnter,
|
|
339
|
-
onMouseLeave: this.props.onMouseLeave
|
|
340
|
-
refElement: el => {
|
|
341
|
-
this.selectInputElement = el;
|
|
342
|
-
}
|
|
492
|
+
onMouseLeave: this.props.onMouseLeave
|
|
343
493
|
})
|
|
344
494
|
),
|
|
345
|
-
open &&
|
|
346
|
-
'div',
|
|
347
|
-
{ style: popperStyle },
|
|
348
|
-
content
|
|
349
|
-
) : React.createElement(
|
|
495
|
+
open && React.createElement(
|
|
350
496
|
Popper,
|
|
351
497
|
{
|
|
352
498
|
placement: 'bottom-start',
|
|
@@ -354,8 +500,69 @@ class HiSelect extends React.PureComponent {
|
|
|
354
500
|
className: popperClass,
|
|
355
501
|
style: popperStyle
|
|
356
502
|
},
|
|
357
|
-
|
|
358
|
-
|
|
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
|
+
)
|
|
359
566
|
)
|
|
360
567
|
);
|
|
361
568
|
}
|
|
@@ -385,260 +592,8 @@ HiSelect.defaultProps = {
|
|
|
385
592
|
one_item_selected: '%s item selected',
|
|
386
593
|
n_children: '%s items',
|
|
387
594
|
one_child: '%s item'
|
|
388
|
-
}
|
|
389
|
-
staticPosition: false
|
|
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
|
-
};
|
|
595
|
+
}
|
|
640
596
|
};
|
|
641
|
-
|
|
642
597
|
HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
643
598
|
/**
|
|
644
599
|
* Affiche une checkbox pour chaque éléments, par défaut si options est nested
|
|
@@ -668,6 +623,10 @@ HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
668
623
|
* Affiche l'élément 'All'
|
|
669
624
|
*/
|
|
670
625
|
hasAll: PropTypes.bool,
|
|
626
|
+
/**
|
|
627
|
+
* Affiche le compte d'éléments sélectionnés en haut de la liste
|
|
628
|
+
*/
|
|
629
|
+
hasSelectedCount: PropTypes.bool,
|
|
671
630
|
/**
|
|
672
631
|
* Les items sont hiérarchisés
|
|
673
632
|
*/
|
|
@@ -719,7 +678,6 @@ HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
719
678
|
* Fonction de callback appelée lorsqu'on écrit dans la barre de recherche
|
|
720
679
|
* A utiliser pour les selects avec des données dynamiques
|
|
721
680
|
*
|
|
722
|
-
* @param {object} event
|
|
723
681
|
* @param {string} value
|
|
724
682
|
*/
|
|
725
683
|
onSearch: PropTypes.func,
|
|
@@ -735,19 +693,10 @@ HiSelect.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
|
735
693
|
* Les items parents sont sélectionnables
|
|
736
694
|
*/
|
|
737
695
|
parentItemSelectable: PropTypes.bool,
|
|
738
|
-
/**
|
|
739
|
-
* Placeholder affiché lorsque le select est fermé
|
|
740
|
-
* Surcharge le placeholder par défaut
|
|
741
|
-
*/
|
|
742
|
-
placeholder: PropTypes.string,
|
|
743
696
|
/**
|
|
744
697
|
* Affiche un input de recherche permettant de filtrer les options
|
|
745
698
|
*/
|
|
746
699
|
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,
|
|
751
700
|
/**
|
|
752
701
|
* Traductions (par défaut en anglais)
|
|
753
702
|
*/
|