2020-02-11 14:01:35 +00:00
|
|
|
import React, { useState } from 'react';
|
|
|
|
import { View, StyleSheet, Text } from 'react-native';
|
|
|
|
import DateTimePicker from '@react-native-community/datetimepicker';
|
|
|
|
import Touchable from 'react-native-platform-touchable';
|
|
|
|
import { BLOCK_CONTEXT } from '@rocket.chat/ui-kit';
|
|
|
|
import moment from 'moment';
|
|
|
|
|
|
|
|
import Button from '../Button';
|
|
|
|
import { textParser } from './utils';
|
|
|
|
import { themes } from '../../constants/colors';
|
|
|
|
|
|
|
|
import sharedStyles from '../../views/Styles';
|
|
|
|
import { CustomIcon } from '../../lib/Icons';
|
|
|
|
import { isAndroid } from '../../utils/deviceInfo';
|
|
|
|
import ActivityIndicator from '../ActivityIndicator';
|
|
|
|
|
|
|
|
const styles = StyleSheet.create({
|
|
|
|
input: {
|
|
|
|
height: 48,
|
|
|
|
paddingLeft: 16,
|
|
|
|
borderWidth: StyleSheet.hairlineWidth,
|
|
|
|
borderRadius: 2,
|
|
|
|
alignItems: 'center',
|
|
|
|
flexDirection: 'row'
|
|
|
|
},
|
|
|
|
inputText: {
|
|
|
|
...sharedStyles.textRegular,
|
|
|
|
fontSize: 14
|
|
|
|
},
|
|
|
|
icon: {
|
|
|
|
right: 16,
|
|
|
|
position: 'absolute'
|
|
|
|
},
|
|
|
|
loading: {
|
|
|
|
padding: 0
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-07-26 22:33:27 +00:00
|
|
|
interface IDatePicker {
|
|
|
|
element: {
|
|
|
|
initial_date: any;
|
|
|
|
placeholder: string;
|
|
|
|
};
|
|
|
|
language: string;
|
|
|
|
action: Function;
|
|
|
|
context: number;
|
|
|
|
loading: boolean;
|
|
|
|
theme: string;
|
|
|
|
value: string;
|
|
|
|
error: string;
|
|
|
|
}
|
|
|
|
|
2020-02-11 14:01:35 +00:00
|
|
|
export const DatePicker = ({
|
|
|
|
element, language, action, context, theme, loading, value, error
|
2021-07-26 22:33:27 +00:00
|
|
|
}: IDatePicker) => {
|
2020-02-11 14:01:35 +00:00
|
|
|
const [show, onShow] = useState(false);
|
|
|
|
const { initial_date, placeholder } = element;
|
|
|
|
const [currentDate, onChangeDate] = useState(new Date(initial_date || value));
|
|
|
|
|
2021-07-26 22:33:27 +00:00
|
|
|
const onChange = ({ nativeEvent: { timestamp } }: any, date: any) => {
|
2020-02-11 14:01:35 +00:00
|
|
|
const newDate = date || new Date(timestamp);
|
|
|
|
onChangeDate(newDate);
|
|
|
|
action({ value: moment(newDate).format('YYYY-MM-DD') });
|
|
|
|
if (isAndroid) {
|
|
|
|
onShow(false);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
let button = (
|
|
|
|
<Button
|
|
|
|
title={textParser([placeholder])}
|
|
|
|
onPress={() => onShow(!show)}
|
|
|
|
loading={loading}
|
|
|
|
theme={theme}
|
|
|
|
/>
|
|
|
|
);
|
|
|
|
|
|
|
|
if (context === BLOCK_CONTEXT.FORM) {
|
|
|
|
button = (
|
|
|
|
<Touchable
|
|
|
|
onPress={() => onShow(!show)}
|
|
|
|
style={{ backgroundColor: themes[theme].backgroundColor }}
|
|
|
|
background={Touchable.Ripple(themes[theme].bannerBackground)}
|
|
|
|
>
|
|
|
|
<View style={[styles.input, { borderColor: error ? themes[theme].dangerColor : themes[theme].separatorColor }]}>
|
|
|
|
<Text
|
|
|
|
style={[
|
|
|
|
styles.inputText,
|
|
|
|
{ color: error ? themes[theme].dangerColor : themes[theme].titleText }
|
|
|
|
]}
|
|
|
|
>
|
|
|
|
{currentDate.toLocaleDateString(language)}
|
|
|
|
</Text>
|
|
|
|
{
|
|
|
|
loading
|
|
|
|
? <ActivityIndicator style={[styles.loading, styles.icon]} />
|
|
|
|
: <CustomIcon name='calendar' size={20} color={error ? themes[theme].dangerColor : themes[theme].auxiliaryText} style={styles.icon} />
|
|
|
|
}
|
|
|
|
</View>
|
|
|
|
</Touchable>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
const content = show ? (
|
|
|
|
<DateTimePicker
|
|
|
|
mode='date'
|
|
|
|
display='default'
|
|
|
|
value={currentDate}
|
|
|
|
onChange={onChange}
|
|
|
|
textColor={themes[theme].titleText}
|
|
|
|
/>
|
|
|
|
) : null;
|
|
|
|
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
{button}
|
|
|
|
{content}
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
};
|