react-address-picker-cc
Version:
仿京东移动端地址选择组件 mobile/pc address picker component
125 lines (124 loc) • 3.38 kB
TypeScript
import * as React from 'react';
import * as PropTypes from 'prop-types';
interface IOneRowProps {
id?: number;
areaName?: string;
subArea?: IOneRowProps[];
length?: number;
}
interface AddressProps {
/**
* 自定义className
*
* @type {(string | string[] | { [key: string]: boolean })}
*/
className?: string | string[] | {
[key: string]: boolean;
};
/**
* 自定义Style
*
* @type {(string | React.CSSProperties)}
*/
customStyle?: string | React.CSSProperties;
/**
* 主题
*/
theme?: '' | 'theme-light' | 'theme-dark' | string;
/**
* 数据源,多维数组
*/
dataSource: IOneRowProps[];
/**
* 自定义组件标题
*/
title: string;
/**
* 地址导航提示文字
*/
navTips: string;
/**
* 初始化地址的id数组
*/
selectedIdList: number[];
/**
* 是否异步获取数据
*/
isAsyncData: boolean;
/**
* 自定义 关闭方法
*/
onClose: () => void;
/**
* 异步数据返回的一级id
*/
/**
* 初始化地址的id数组
* 返回值 Promise{asyncIdOne: number, dataSource: IOneRowProps[]}
*/
getOneLevelData: (item: IOneRowProps, level: number) => any;
/**
* 初始化地址的id数组
*/
onAddressChange: (selectRowList: IOneRowProps) => void;
/**
* pickerStatusChange
*/
pickerStatusChange: (show: boolean) => void;
}
interface ITouchProps {
startX?: number;
startY?: number;
moved?: boolean;
targetIdx?: number;
}
interface AddressState {
selectedRows: IOneRowProps[];
currentLevel: number;
show: boolean;
}
export default class AddressPicker extends React.Component<AddressProps, AddressState> {
static defaultProps: AddressProps;
static propTypes: PropTypes.InferProps<AddressProps>;
mainWrapRef: any;
listWrapRef: any;
navRef: any;
navLineRef: any;
idUUid: string;
touch: ITouchProps;
constructor(props: AddressProps);
static getDerivedStateFromProps(nextProps: AddressProps, prevState: AddressState): {
currentLevel: number;
selectedRows: IOneRowProps[];
} | null;
pickerStatusChange: (show: boolean) => void;
componentWillUnmount(): void;
componentDidUpdate(prevProps: AddressProps, prevState: AddressState): void;
/**
* 外部调用,显示事件
*
* @memberof AddressPicker
*/
show: () => void;
/**
* 外部调用,显示事件
*
* @memberof AddressPicker
*/
hide: () => void;
changeInnerState: () => void;
onTouchStart: (e: any) => void;
onTouchMove: (e: any) => void;
onTouchEnd: () => void;
bindEvent: () => void;
unBindEvent: () => void;
doAnimation: () => void;
setItemCenter: () => void;
getOneLevelData: (item: IOneRowProps, level: number) => void;
onSelectedRow: (item: IOneRowProps, level: number) => () => void;
onSelectedNav: (level: number) => () => void;
onNavBarMove: () => void;
renderNextData: (ds: IOneRowProps[], level: number | undefined, item: IOneRowProps) => JSX.Element | null;
render(): React.ReactPortal;
}
export {};