import React from 'react'
import MoreSelect from './more_select'
import _ from 'lodash'
import { observable, toJS } from 'mobx'
const store = observable({
data: [
{
value: 1,
text: '南山',
},
{
value: 2,
text: '福田',
},
{
value: 3,
text: '罗湖',
},
{
value: 4,
text: '宝安',
},
{
value: 5,
text: '福永',
},
{
value: 6,
text: '坪洲',
},
{
value: 7,
text:
'西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡',
},
{
value: 8,
text: '西乡8',
},
{
value: 9,
text: '西乡9',
},
{
value: 10,
text: '西乡10',
},
{
value: 11,
text: '西乡11',
},
],
dataGroup: [
{
label: '南山',
children: [
{
value: 1,
text: '科技园',
},
{
value: 2,
text: '大冲',
},
{
value: 3,
text: '大新',
},
],
},
{
label: '宝安',
children: [
{
value: 21,
text: '西乡',
},
{
value: 22,
text: '固戍',
},
],
},
],
selected: undefined,
value: undefined,
onChange(value: any) {
this.value = value
},
setSelected(selected: any) {
this.selected = selected
},
mulSelected: [],
setMulSelected(selected: any) {
this.mulSelected = selected
},
clickFn(selected: any) {
this.selected = selected
},
})
export const ComMoreSelect = () => (
data={store.data}
selected={store.selected}
onSelect={(selected) => {
console.log({ selected })
store.setSelected(selected)
}}
/>
不传任何prop,也不会报错
disabled
disabled
data={store.data}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
/>
disabledClose
disabledClose
data={store.data}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
/>
)
export const ComMoreSelectByValue = () => (
data={store.data}
value={store.value}
onChange={(value) => store.onChange(value)}
onSelect={console.log}
/>
disabled
disabled
data={store.data}
value={store.value}
onChange={(value) => store.onChange(value)}
/>
disabledClose
disabledClose
data={store.data}
value={store.value}
onChange={(value) => store.onChange(value)}
/>
)
export const ComMoreSelectForLongText = () => (
data={store.data}
selected={{
value: 7,
text:
'西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡',
}}
onSelect={(selected) => {
store.setSelected(selected)
}}
/>
)
export const ComMoreSelectWithRenderListFilterType = () => (
data={store.data}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
renderListFilterType='pinyin'
/>
)
export const ComMoreSelectForScrollToSelected = () => (
data={store.data}
selected={{ value: 11, text: '西乡11' }}
onSelect={(selected) => {
store.setSelected(selected)
}}
/>
)
export const ComMoreSelectWithOnSearch = () => (
data={store.data}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
onSearch={(searchValue) => {
// 同步直接改变 data
store.setSelected(
// @ts-ignore
_.filter(store.data, (item) => item.text.includes(searchValue))
)
}}
/>
)
export const ComMoreSelectWithOnSearchAsync = () => (
data={store.data}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
onSearch={(searchValue) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
// @ts-ignore
_.filter(store.data, (item) => item.text.includes(searchValue))
)
}, 1000)
})
}}
/>
)
export const ComMoreSelectWithMultiple = () => (
multiple
data={store.data}
selected={store.mulSelected}
onSelect={(selected) => {
store.setMulSelected(selected)
}}
/>
)
export const ComMoreSelectWithMultipleByValue = () => (
不传selected和onSelect,改为value和onChange
multiple
data={store.data}
value={store.value}
onChange={(value) => store.onChange(value)}
onSelect={console.log}
/>
)
export const ComMoreSelectClick = () => (
<>
isGroupList
multiple
data={store.dataGroup.slice()}
onClick={store.clickFn}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
/>
{_.map(store.selected, (item) => item.text).join('')}
>
)
export const ComMoreSelectWithMultipleAndOnSearch = () => {
return (
multiple
data={toJS(store.data)}
selected={toJS(store.mulSelected)}
onSelect={(selected) => {
store.setMulSelected(selected)
}}
onSearch={() => {
store.data = [
{
value: 7,
text:
'西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡西乡',
},
{
value: 8,
text: '西乡8',
},
]
}}
/>
)
}
export const ComMoreSelectWithIsGroupList = () => (
isGroupList
data={store.dataGroup.slice()}
selected={store.selected}
onSelect={(selected) => {
store.setSelected(selected)
}}
/>
)
export const ComMoreSelectWithIsGroupListMultiple = () => (
isGroupList
multiple
data={store.dataGroup.slice()}
selected={store.mulSelected}
onSelect={(selected) => {
store.setMulSelected(selected)
}}
/>
)
export default {
title: '表单/MoreSelect',
}