import React, { useCallback, useMemo } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { DayComponentProps } from '../componentTypes';
import { constants } from '../helpers';
import Dots from './Dots';
const Day = ({
backgroundColor = 'turquoise',
color,
day,
dayString,
dots,
endingDay,
extraDay,
inSeries,
listWidth,
month,
onPress,
selected,
startingDay,
theme,
today,
pastDay,
year,
}: DayComponentProps) => {
const textStyle = [
styles.dayText,
theme?.text,
today && (theme?.todayText || styles.todayText),
pastDay && (theme?.pastDayText || styles.pastDayText),
extraDay && (theme?.extraDayText || styles.extraDayText),
selected && theme?.selectedText,
color ? { color } : undefined,
];
const handleDayPress = useCallback(() => {
onPress?.({ day, month, year, dayString });
}, [day, dayString, month, onPress, year]);
const width = useMemo(() => listWidth / 7, [listWidth]);
const padding = useMemo(() => Math.min(listWidth / 40, 15), [listWidth]);
if (!day) {
return (
);
}
return (
{day}
);
};
export default React.memo(Day);
const styles = StyleSheet.create({
container: {
alignItems: 'center',
flex: 1,
height: constants.touchableSize,
justifyContent: 'center',
},
dayContainer: {
borderBottomLeftRadius: constants.touchableSize / 2,
borderBottomRightRadius: constants.touchableSize / 2,
borderTopLeftRadius: constants.touchableSize / 2,
borderTopRightRadius: constants.touchableSize / 2,
marginHorizontal: 5,
},
dayText: {
fontSize: 16,
minWidth: 20,
textAlign: 'center',
},
endingRadius: {
borderBottomLeftRadius: 0,
borderBottomRightRadius: constants.touchableSize / 2,
borderTopLeftRadius: 0,
borderTopRightRadius: constants.touchableSize / 2,
},
extraDayText: {
color: 'lightgrey',
},
inSeriesRadius: {
alignItems: 'center',
borderBottomLeftRadius: 0,
borderBottomRightRadius: 0,
borderTopLeftRadius: 0,
borderTopRightRadius: 0,
justifyContent: 'center',
marginHorizontal: 0,
},
pastDayText: {
color: 'lightgrey',
},
startingRadius: {
borderBottomLeftRadius: constants.touchableSize / 2,
borderBottomRightRadius: 0,
borderTopLeftRadius: constants.touchableSize / 2,
borderTopRightRadius: 0,
},
todayText: {
color: 'dodgerblue',
fontWeight: '700',
},
});