UNPKG

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