0.9.4 • Published 3 years ago

uxcore-cascade-select v0.9.4

Weekly downloads
19
License
MIT
Repository
github
Last release
3 years ago

uxcore-cascade-select

React cascade select

NPM version build status Test Coverage Dependency Status devDependency Status NPM downloads

Sauce Test Status

Development

git clone https://github.com/uxcore/uxcore-cascade-select
cd uxcore-cascade-select
npm install
npm run server

if you'd like to save your install time,you can use uxcore-tools globally.

npm install uxcore-tools -g
git clone https://github.com/uxcore/uxcore-cascade-select
cd uxcore-cascade-select
npm install
npm run dep
npm run start

Test Case

npm run test

Coverage

npm run coverage

Demo

http://uxcore.github.io/components/cascade-select

Contribute

Yes please! See the CONTRIBUTING for details.

API

import CascadeSelect from 'uxcore-cascade-select'
import { render } from 'react-dom'

render(<CascadeSelect />, document.getElementById('root'))

Props

NameTypeRequiredDefaultComments
prefixClsstringfalse'kuma-cascader'默认的类名前缀
classNamestringfalse''自定义类名
optionsarrayfalse[]选项数据源,格式可见下方Demo
valuearrayfalse[]可由外部控制的值
defaultValuearrayfalse[]初始默认值
dropdownClassNamestringfalse''dropdown 容器的自定义样式
placeholderstringfalse'Please Select' or '请选择'placeholder
onChangefunctionfalsefunction(value, selectedOptions)选择完成后回调
disabledbooleanfalsefalse是否禁用
clearablebooleanfalsefalse是否支持清除
changeOnSelectbooleanfalsefalse是否将每次选择立刻显示在控件中
expandTriggerstringfalse'click'次级菜单展开方式,支持 clickhover
beforeRenderfunctionfalse(value, selectedOptions) => selectedOptions.map(o => o && o.label).join(' / ')处理要显示的内容
cascadeSizenumberfalse3级联的层级数
getPopupContainerfunction():HTMLElementfalse/返回一个 html 元素用作 Popup 面板的容器,默认是插在body 中的一个 div
localestringfalse'zh-cn''en-us'
miniModebooleanfalsetrue是否是简洁显示风格
columnWidthnumberfalsenulldropdown中每一列的宽度, 如为空,整体宽度等于input输入框的宽度
displayModestringfalsedropdownselect 或者 dropdown 或者 search(已废弃)
getSelectPlaceholderfuncfalsefunction(idx){ return '请选择' }select显示模式下的placeholder生成函数
sizestringfalselarge尺寸,枚举值:large, middle, small
isMustSelectLeafboolfalsefalse是否必须选择到叶子节点
onSelectfunctionfalsenull异步加载层级,需要 return 一个数组,具体用法参考下方 demo
onlyStringValuebooleanfalsefalse选中数据之后的值,直接给字符串而不是级联结构
searchOptionfunctionfalsenull(已废弃) 开启关键词搜索的配置,当 dispalyMode 为 search 时启用,具体配置方式参考下方
showSearchbooleanfalsefalse是否开启搜索模式
onSearchfunctionfalsenull开启关键词过滤模式,可以通过外部重新设置 options,onSearch 不能与 optionFilterProps 和 optionFilterCount 一起使用,onSearch 优先级更高
optionFilterPropsstring[]false['label']showSearch=true 时,optionFilterProp 为 optionsi 中的属性名称,此时搜索会进行过滤
optionFilterCountnumberfalse20当使用过滤功能时 dropdown 里最多显示的条数
cascaderHeightnumberfalsenull级联选择区域的高度
useFullPathValuebooleanfalsefalse使用全路径值匹配模式,该模式允许父子级,不同子级的 ID 一致

Demos

props.options

const options = [{
  value: 'zhejiang',
  label: '浙江',
  children: [{
    value: 'hangzhou',
    label: '杭州',
    children: [{
      value: 'xihu',
      label: '西湖',
    }],
  }],
}, {
  value: 'jiangsu',
  label: '江苏',
  children: [{
    value: 'nanjing',
    label: '南京',
    children: [{
      value: 'zhonghuamen',
      label: '中华门',
    }],
  }],
}];

当不指定 dropdown 宽度时,还可以使用css来定制dropdown宽度

.kuma-cascader-submenu-empty,
.kuma-dropdown-menu-submenu {
  width: 400px; // 你想要的 dropdown 宽度
}

props.onSelect

<CascadeSelect
  /**
   * @param resolve 请求成功了调用resolve()
   * @param reject 请求失败则调用reject()
   * @param key key为父级的value
   * @param level level为父级所在的层数,如上面的options的['zhengjiang'], level为1
   */ 
  showSearch={true}
  onSelect={(resolve, reject, key, level) => {
    ajax({
      url: 'xxx/xx.json',
      data: {
        key
      },
      success(content) {
        resolve(content); // content必须为array
      },
      error() {
        reject();
      }
    })
  }}
/>

props.searchOption

{
  doSearch(keyword, afterSearch) { // 异步搜索函数
    // keyword 为搜索的关键词
    // afterSearch 为搜索完成之后需要将结果显示在页面中,afterSearch 接收的参数为 [{ label, value }, ...]
    Fetch('/search?keyword=' + keyword).then(result => afterSearch(result))
  }
}

props.optionFilterProp

<CascadeSelect
  options={this.state.options}
  showSearch={true}
  optionFilterProps={['label']}
  optionFilterCount={10}
/>

只用面板

只是用面板时 props.value 必须是受控模式

<CascadeSelect.CascadeSubmenu
  options={options}
  value={this.state.value}
  onChange={(value) => {
    this.setState({ value });
  }}
  renderCustomItem={(item) => {
    return <span style={{ color: 'red' }}>{item.label}</span>
  }}
/>

CascadeSelect.CascadeSubmenu.props

NameTypeRequiredDefaultComments
valuearrayYes[]受控值
optionsarrayYes[]候选集,格式参考上方
onChangefunctionYesnullvalue 改变的回调函数
columnWidthnumberNonull每一列的宽度
cascaderHeightnumberNOnull级联选择区域的高度
renderCustomItemfunctionNonull自定义渲染选项
0.9.4

3 years ago

0.9.3

3 years ago

0.9.2

5 years ago

0.9.1

5 years ago

0.9.0

6 years ago

0.8.0

6 years ago

0.7.25

6 years ago

0.7.24

6 years ago

0.7.23

6 years ago

0.7.22

6 years ago

0.7.21

6 years ago

0.7.20

6 years ago

0.7.19

7 years ago

0.7.18

7 years ago

0.7.17

7 years ago

0.7.16

7 years ago

0.7.15

8 years ago

0.7.14

8 years ago

0.7.13

8 years ago

0.7.12

8 years ago

0.7.11

8 years ago

0.7.10

8 years ago

0.7.9

8 years ago

0.7.8

8 years ago

0.7.7

8 years ago

0.7.6

8 years ago

0.7.6-beta.1

8 years ago

0.7.5

8 years ago

0.7.4

8 years ago

0.7.3

8 years ago

0.7.2

8 years ago

0.7.1

8 years ago

0.7.0

8 years ago

0.6.5

8 years ago

0.6.4

8 years ago

0.6.3

8 years ago

0.6.2

8 years ago

0.6.1

8 years ago

0.6.0

8 years ago

0.5.8

8 years ago

0.5.7

8 years ago

0.5.6

8 years ago

0.5.5

8 years ago

0.5.4

8 years ago

0.5.3

8 years ago

0.5.2

8 years ago

0.5.2-beta.1

8 years ago

0.5.1

8 years ago

0.5.1-beta.1

8 years ago

0.5.0

8 years ago

0.4.1

9 years ago

0.4.0

9 years ago

0.3.6

9 years ago

0.3.5

9 years ago

0.3.5-beta.1

9 years ago

0.3.4

9 years ago

0.3.3

9 years ago

0.3.2

9 years ago

0.3.1

9 years ago

0.3.0

9 years ago

0.2.11

9 years ago

0.2.10

9 years ago

0.2.9

9 years ago

0.2.8

9 years ago

0.2.7

9 years ago

0.2.6

9 years ago

0.2.5

9 years ago

0.2.4

9 years ago

0.2.3

9 years ago

0.2.2

9 years ago

0.2.1

9 years ago

0.2.0

9 years ago

0.1.12

9 years ago

0.1.11

9 years ago

0.1.10

10 years ago

0.1.9

10 years ago

0.1.8

10 years ago

0.1.7

10 years ago

0.1.6

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago