@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
149 lines (122 loc) • 2.61 kB
text/typescript
import type React from 'react'
import type { PopupPropsCommon } from '../popup/interface'
export type SelectorValue = number | string
export type SelectorOption = {
/**
* 显示的文案
*/
label: string
/**
* 唯一标识
*/
value: SelectorValue
/**
* 是否禁用
* @default false
*/
disabled?: boolean
}
export interface SelectorProps
extends Omit<PopupPropsCommon, 'closeOnPressOverlay' | 'onPressOverlay'> {
/**
* 点击遮罩层关闭
* @default true
*/
closeOnPressOverlay?: boolean
/**
* 标题
* @default '请选择'
*/
title?: React.ReactNode
/**
* 是否显示关闭图标
* @default true
*/
showClose?: boolean
/**
* 是否多选
* @default false
*/
multiple?: boolean
/**
* 当前选中的值
*/
value?: SelectorValue[] | SelectorValue
/**
* 当前的选项
*/
options: SelectorOption[]
/**
* 选择后的回调
*/
onChange?: (
value: SelectorValue[] | SelectorValue,
options: SelectorOption[],
) => void
/**
* 当值变化的时候立即响应
*/
onChangeImmediate?: (
v: SelectorValue[] | SelectorValue,
) => SelectorValue[] | SelectorValue
/**
* 顶部安全高度
* @default safeAreaInsets.top
*/
safeAreaInsetTop?: number
/**
* 确定按钮文案
* @default '确定'
*/
confirmButtonText?: string
}
export interface SelectorMethodProps extends Omit<SelectorProps, 'visible'> {}
export interface SelectorOptions
extends Omit<SelectorMethodProps, 'onChange' | 'onRequestClose'> {
// 是否可以删了,函数的方式直接用 .then 操作
onChange?: (
value: SelectorValue[] | SelectorValue,
options: SelectorOption | SelectorOption[],
) => void
}
export interface SelectorTextProps {
/**
* 标题
* @default '请选择'
*/
title?: React.ReactNode
/**
* 当前选中的值
*/
value: SelectorValue
/**
* 当前的选项
*/
options: SelectorOption[]
/**
* 选择后的回调
*/
onChange?: (value: SelectorValue, options: SelectorOption) => void
/**
* 箭头方向
* @default 'right'
*/
arrowDirection?: 'left' | 'up' | 'right' | 'down'
/**
* 显示分割线
* @default true
*/
divider?: boolean
/**
* 左侧是否有间距
* @default true
*/
head?: boolean
}
export type SelectorFnInstance = (
p: SelectorOptions,
) => Promise<SelectorValue[] | SelectorValue>
export interface SelectorInstance extends SelectorFnInstance {
Component: React.FC<SelectorProps>
Text: React.FC<SelectorTextProps>
}