UNPKG

react-native-lib-cus-com

Version:

react-native 自定义辅助组件库,完美的网路请求,带加载条,可上传、下载文件,等等多种ui,可自定义删除;可节省应用级软件的开发时间

152 lines (128 loc) 4.35 kB
/** * Sample React Native App * https://github.com/facebook/react-native * @flow TextInput自动提示输入 */ import React, {Component} from 'react'; import PropTypes from 'prop-types'; import { View, } from 'react-native'; import { StyleSheetAdapt, Tools, Theme, } from "./../api/api"; import {ButtonChange} from "./ButtonChange"; import {DatePicker} from "./DatePicker"; const FORMATS = { 'date': 'YYYY-MM-DD', 'datetime': 'YYYY-MM-DD HH:mm', 'time': 'HH:mm' }; /** * 时间选择按钮控件 可选择时间显示 并回传时间 * **/ export class ButtonTime extends Component { //属性注释及类型,所有的属性对象都是句柄模式(类型时number),类似C语言中的指针 static propTypes = { frameStyle:PropTypes.oneOfType([ PropTypes.number, PropTypes.object, PropTypes.array ]),//框样式 frameBtnStyle:PropTypes.oneOfType([ PropTypes.number, PropTypes.object, PropTypes.array ]),//按钮框样式 defaultText:PropTypes.string,//默认显示文本 textStyle:PropTypes.oneOfType([ PropTypes.number, PropTypes.object, PropTypes.array ]),//文本样式 type:PropTypes.string,//按扭类型,"opacity":显示隐藏;'light':高亮 onPress:PropTypes.func,//点击事件 /** * 回传数据:{ timestamp:int,//时间戳 timeformat:string,//时间显示文本格式 } * **/ onChange:PropTypes.func,//时间选择回传事件 format:PropTypes.string,//时间显示格式 默认"YYYY-MM-DD HH:mm:ss" mode:PropTypes.string,//日期模式 'date': 'YYYY-MM-DD','datetime': 'YYYY-MM-DD HH:mm','time': 'HH:mm' isReset:PropTypes.bool,//是否重置 默认false不重置;true重置(以只显示defaultText) disabled:PropTypes.bool,//是否无效 默认false 有效 } /** * 设置默认属性 * **/ static defaultProps = { defaultText:null, mode:"datetime", isReset:false, disabled:false, // format:"YYYY-MM-DD HH:mm:ss", } initState(){ const {mode,defaultText,format = FORMATS[mode]} = this.props; this.state = { defaultText:defaultText ? defaultText :Tools.timeFormatConvert(new Date().getTime(),format), }; } constructor(props) { super(props); this.initState(); } onChange = (date)=>{ const {mode,format = FORMATS[mode],onChange,isReset} = this.props; let timeformat = Tools.timeFormatConvert(date,format); if(!isReset){ this.setState({ defaultText:timeformat }); } onChange&&onChange({ timestamp:date, timeformat:timeformat }); } onPress = ()=>{ const {onPress} = this.props; this.datePicker.show(); onPress&&onPress(); } render() { const {frameStyle,type,textStyle,frameBtnStyle,mode,isReset,disabled} = this.props; const defaultText = isReset ? this.props.defaultText : this.state.defaultText; return ( <View style={frameStyle}> <DatePicker ref={(compoent)=>{ this.datePicker = compoent; }} mode={mode} onDateChange={this.onChange}/> <ButtonChange frameBtnStyle={[styles.btnFrame,frameBtnStyle]} type={type} disabled={disabled} onPress={this.onPress} textStyle={[styles.textStyle,textStyle]} text={defaultText}/> </View> ); } } const styles = StyleSheetAdapt.create({ textStyle:{ color:Theme.Colors.fontcolor_1, }, btnFrame:{ backgroundColor:Theme.Colors.transparent, borderWidth:0.5, padding:0, width:300, height:30, }, });