UNPKG

10.9 kBTypeScriptView Raw
1import { ComponentType } from 'react'
2import { StyleProp, TextStyle, ViewStyle } from 'react-native'
3import { StandardProps, CommonEventFunction, FormItemProps } from './common'
4
5/** 选择器通用参数 */
6interface PickerStandardProps extends StandardProps, FormItemProps {
7 /**
8 * 选择器类型,默认是普通选择器
9 * @default "selector"
10 * @supported weapp, h5, rn
11 */
12 mode?: keyof PickerStandardProps.Mode
13
14 /**
15 * 是否禁用
16 * @default false
17 * @supported weapp, h5, rn
18 */
19 disabled?: boolean
20
21 /**
22 * 取消选择或点遮罩层收起 picker 时触发
23 * @supported weapp, h5, rn
24 */
25 onCancel?: CommonEventFunction
26}
27declare namespace PickerStandardProps {
28 /** 选择器类型 */
29 interface Mode {
30 /** 普通选择器 */
31 selector
32
33 /** 多列选择器 */
34 multiSelector
35
36 /** 时间选择器 */
37 time
38
39 /** 日期选择器 */
40 date
41
42 /** 省市区选择器 */
43 region
44 }
45}
46
47/** 普通选择器:mode = selector */
48interface PickerSelectorProps extends PickerStandardProps {
49 /** 选择器类型 */
50 mode?: 'selector'
51
52 /**
53 * mode为 selector 或 multiSelector 时,range 有效
54 * @supported weapp, h5, rn
55 * @default []
56 */
57 range: string[] | number[] | Record<string, any>[]
58
59 /**
60 * 当 range 是一个 Object Array 时,通过 rangeKey 来指定 Object 中 key 的值作为选择器显示内容
61 * @supported weapp, h5, rn
62 */
63 rangeKey?: string
64
65 /**
66 * 表示选择了 range 中的第几个(下标从 0 开始)
67 * @supported weapp, h5, rn
68 * @default 0
69 */
70 value?: number
71
72 /**
73 * mode为 selector 或 multiSelector 时 itemStyle 有效
74 * @supported rn
75 * @default {}
76 */
77 itemStyle?: StyleProp<TextStyle>
78
79 /**
80 * mode为 selector 或 multiSelector 时 indicatorStyle 有效
81 * @supported rn
82 * @default {}
83 */
84 indicatorStyle?: StyleProp<ViewStyle>
85
86 /**
87 * value 改变时触发 change 事件
88 * @supported weapp, h5, rn
89 */
90 onChange: CommonEventFunction<PickerSelectorProps.ChangeEventDetail>
91}
92declare namespace PickerSelectorProps {
93 interface ChangeEventDetail {
94 /** 表示变更值的下标 */
95 value: string | number
96 }
97}
98
99/** 多列选择器:mode = multiSelector */
100interface PickerMultiSelectorProps extends PickerStandardProps {
101 /** 选择器类型 */
102 mode: 'multiSelector'
103
104 /**
105 * mode为 selector 或 multiSelector 时,range 有效
106 * @supported weapp, h5, rn
107 * @default []
108 */
109 range: Array<string[]> | Array<number[]> | Array<Record<string, any>[]>
110
111 /**
112 * 当 range 是一个 Object Array 时,通过 rangeKey 来指定 Object 中 key 的值作为选择器显示内容
113 * @supported weapp, h5, rn
114 */
115 rangeKey?: string
116
117 /**
118 * 表示选择了 range 中的第几个(下标从 0 开始)
119 * @supported weapp, h5, rn
120 * @default []
121 */
122 value: number[] | string[] | Record<string, any>[]
123
124 /**
125 * mode为 selector 或 multiSelector 时 itemStyle 有效
126 * @supported rn
127 * @default {}
128 */
129 itemStyle?: StyleProp<TextStyle>
130
131 /**
132 * mode为 selector 或 multiSelector 时 indicatorStyle 有效
133 * @supported rn
134 * @default {}
135 */
136 indicatorStyle?: StyleProp<ViewStyle>
137
138 /**
139 * 当 value 改变时触发 change 事件
140 * @supported weapp, h5, rn
141 */
142 onChange: CommonEventFunction<PickerMultiSelectorProps.ChangeEventDetail>
143
144 /**
145 * 列改变时触发
146 * @supported weapp, h5, rn
147 */
148 onColumnChange?: CommonEventFunction<PickerMultiSelectorProps.ColumnChangeEventDetail>
149}
150declare namespace PickerMultiSelectorProps {
151 interface ChangeEventDetail {
152 /** 表示变更值的下标 */
153 value: number[]
154 }
155 interface ColumnChangeEventDetail {
156 /** 表示改变了第几列(下标从0开始) */
157 column: number
158
159 /** 表示变更值的下标 */
160 value: number
161 }
162}
163
164/** 时间选择器:mode = time */
165interface PickerTimeProps extends PickerStandardProps {
166 /** 选择器类型 */
167 mode: 'time'
168
169 /**
170 * value 的值表示选择了 range 中的第几个(下标从 0 开始)
171 * @supported weapp, h5, rn
172 */
173 value: string
174
175 /**
176 * 仅当 mode = time|date 时有效,表示有效时间范围的开始,字符串格式为"hh:mm"
177 * @supported weapp, h5, rn
178 */
179 start?: string
180
181 /**
182 * 仅当 mode = time|date 时有效,表示有效时间范围的结束,字符串格式为"hh:mm"
183 * @supported weapp, h5, rn
184 */
185 end?: string
186
187 /**
188 * value 改变时触发 change 事件
189 * @supported weapp, h5, rn
190 */
191 onChange: CommonEventFunction<PickerTimeProps.ChangeEventDetail>
192}
193declare namespace PickerTimeProps {
194 interface ChangeEventDetail {
195 /** 表示选中的时间 */
196 value: string
197 }
198}
199
200/** 日期选择器:mode = date */
201interface PickerDateProps extends PickerStandardProps {
202 /** 选择器类型 */
203 mode: 'date'
204
205 /**
206 * 表示选中的日期,格式为"YYYY-MM-DD"
207 * @supported weapp, h5, rn
208 * @default 0
209 */
210 value: string
211
212 /**
213 * 仅当 mode = time|date 时有效,表示有效时间范围的开始,字符串格式为"hh:mm"
214 * @supported weapp, h5, rn
215 */
216 start?: string
217
218 /**
219 * 仅当 mode = time|date 时有效,表示有效时间范围的结束,字符串格式为"hh:mm"
220 * @supported weapp, h5, rn
221 */
222 end?: string
223
224 /**
225 * 有效值 year, month, day,表示选择器的粒度
226 * @supported weapp, h5, rn
227 * @default "day"
228 */
229 fields?: keyof PickerDateProps.Fields
230
231 /**
232 * value 改变时触发 change 事件
233 * @supported weapp, h5, rn
234 */
235 onChange: CommonEventFunction<PickerDateProps.ChangeEventDetail>
236}
237declare namespace PickerDateProps {
238 interface Fields {
239 /** 选择器粒度为年 */
240 year
241
242 /** 选择器粒度为月份 */
243 month
244
245 /** 选择器粒度为天 */
246 day
247 }
248 interface ChangeEventDetail {
249 /** 表示选中的日期 */
250 value: string
251 }
252}
253
254/** 省市区选择器:mode = region */
255interface PickerRegionProps extends PickerStandardProps {
256 /** 选择器类型 */
257 mode: 'region'
258
259 /**
260 * 表示选中的省市区,默认选中每一列的第一个值
261 * @supported weapp, h5, rn
262 * @default []
263 */
264 value: string[]
265
266 /**
267 * 可为每一列的顶部添加一个自定义的项
268 * @supported weapp, h5, rn
269 */
270 customItem?: string
271
272 /**
273 * 自定义省市区数据
274 * @supported rn
275 */
276 regionData?: PickerRegionProps.RegionData[]
277
278 /**
279 * value 改变时触发 change 事件
280 * @supported weapp, h5, rn
281 */
282 onChange: CommonEventFunction<PickerRegionProps.ChangeEventDetail>
283}
284declare namespace PickerRegionProps {
285 interface ChangeEventDetail {
286 /** 表示选中的省市区 */
287 value: string[]
288
289 /** 统计用区划代码 */
290 code: string[]
291
292 /** 邮政编码 */
293 postcode?: string
294 }
295 interface RegionData {
296 value: string
297 code: string
298 postcode?: string
299 }
300}
301
302/**
303 * 从底部弹起的滚动选择器
304 * @classification forms
305 * @supported weapp, swan, alipay, tt, h5, rn, harmony
306 * @example_react
307 * ```tsx
308 * export default class PagePicker extends Component {
309 * state = {
310 * selector: ['美国', '中国', '巴西', '日本'],
311 * selectorChecked: '美国',
312 * timeSel: '12:01',
313 * dateSel: '2018-04-22'
314 * }
315 *
316 * onChange = e => {
317 * this.setState({
318 * selectorChecked: this.state.selector[e.detail.value]
319 * })
320 * }
321 *
322 * onTimeChange = e => {
323 * this.setState({
324 * timeSel: e.detail.value
325 * })
326 * }
327 * onDateChange = e => {
328 * this.setState({
329 * dateSel: e.detail.value
330 * })
331 * }
332 *
333 * render () {
334 * return (
335 * <View className='container'>
336 * <View className='page-body'>
337 * <View className='page-section'>
338 * <Text>地区选择器</Text>
339 * <View>
340 * <Picker mode='selector' range={this.state.selector} onChange={this.onChange}>
341 * <View className='picker'>
342 * 当前选择:{this.state.selectorChecked}
343 * </View>
344 * </Picker>
345 * </View>
346 * </View>
347 * <View className='page-section'>
348 * <Text>时间选择器</Text>
349 * <View>
350 * <Picker mode='time' onChange={this.onTimeChange}>
351 * <View className='picker'>
352 * 当前选择:{this.state.timeSel}
353 * </View>
354 * </Picker>
355 * </View>
356 * </View>
357 * <View className='page-section'>
358 * <Text>日期选择器</Text>
359 * <View>
360 * <Picker mode='date' onChange={this.onDateChange}>
361 * <View className='picker'>
362 * 当前选择:{this.state.dateSel}
363 * </View>
364 * </Picker>
365 * </View>
366 * </View>
367 * </View>
368 * </View>
369 * )
370 * }
371 * }
372 * ```
373 * @example_vue
374 * ```html
375 * <template>
376 * <view class="page-body">
377 * <view class="page-section">
378 * <text>地区选择器</text>
379 * <view>
380 * <picker mode="selector" :range="selector" `@change="onChange">
381 * <view class="picker">
382 * 当前选择:{{selectorChecked}}
383 * </view>
384 * </picker>
385 * </view>
386 * </view>
387 * <view class="page-section">
388 * <text>时间选择器</text>
389 * <view>
390 * <picker mode="time" `@change="onTimeChange">
391 * <view class="picker">
392 * 当前选择:{{timeSel}}
393 * </view>
394 * </picker>
395 * </view>
396 * </view>
397 * <view class="page-section">
398 * <text>日期选择器</text>
399 * <view>
400 * <picker mode="date" `@change="onDateChange">
401 * <view class="picker">
402 * 当前选择:{{dateSel}}
403 * </view>
404 * </picker>
405 * </view>
406 * </view>
407 * </view>
408 * </template>
409 *
410 * <script>
411 * export default {
412 * data() {
413 * return {
414 * selector: ['美国', '中国', '巴西', '日本'],
415 * selectorChecked: '美国',
416 * timeSel: '12:01',
417 * dateSel: '2018-04-22'
418 * }
419 * },
420 * methods: {
421 * onChange: function(e) {
422 * this.selectorChecked = this.selector[e.detail.value]
423 * },
424 *
425 * onTimeChange: function(e) {
426 * this.timeSel = e.detail.value
427 * },
428 *
429 * onDateChange: function(e) {
430 * this.dateSel = e.detail.value
431 * }
432 * }
433 * }
434 * </script>
435 * ```
436 * @see https://developers.weixin.qq.com/miniprogram/dev/component/picker.html
437 */
438declare const Picker: ComponentType<
439 PickerMultiSelectorProps | PickerTimeProps | PickerDateProps | PickerRegionProps | PickerSelectorProps
440>
441export {
442 Picker,
443 PickerStandardProps,
444 PickerSelectorProps,
445 PickerMultiSelectorProps,
446 PickerTimeProps,
447 PickerDateProps,
448 PickerRegionProps,
449}